@ohioepa/oepa-ui-lib 2.0.7 → 2.0.9

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.
@@ -113,11 +113,11 @@ export class AddressComponent {
113
113
  this.subscription.unsubscribe();
114
114
  }
115
115
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddressComponent, deps: [{ token: i1.OepaAddressService }, { token: i2.OepaComponentIdService }], target: i0.ɵɵFactoryTarget.Component });
116
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AddressComponent, selector: "oepa-address", inputs: { group: "group", showValidation: "showValidation", addressOneLabel: "addressOneLabel", addressTwoLabel: "addressTwoLabel", cityLabel: "cityLabel", stateLabel: "stateLabel", zipCodeLabel: "zipCodeLabel", disableState: "disableState", isSearch: "isSearch", hideLine2: "hideLine2", line1MaxLength: "line1MaxLength", line2MaxLength: "line2MaxLength", cityMaxLength: "cityMaxLength", foreignStateLabel: "foreignStateLabel", foreignZipLabel: "foreignZipLabel", countryLabel: "countryLabel", sameAsGroup: "sameAsGroup", sameAsLabel: "sameAsLabel", sameAsChecked: "sameAsChecked" }, ngImport: i0, template: "<div *ngIf=\"sameAsGroup\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label [ngStyle]=\"{ 'font-weight': sameAsChecked && group.disabled ? 'bold' : '' }\" for=\"copyFromCheckbox\">\n {{sameAsLabel}} \n <input id=\"copyFromCheckbox\" type=\"checkbox\" [checked]=\"sameAsChecked\" (change)=\"toggleCopyFromSelection()\" [disabled]=\"group.parent?.disabled\"/>\n </label>\n </div>\n </div>\n </div>\n</div>\n<div *ngIf=\"!sameAsGroup || !sameAsChecked\" [formGroup]=\"group\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_Line1Input'\">{{addressOneLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['line1'].status === 'INVALID'}\" \n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"line1\" [maxlength]=\"line1MaxLength\"\n [id]=\"componentId+'_Line1Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line1'].hasError('required')\">{{addressOneLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line1'].hasError('maxlength')\">{{addressOneLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div *ngIf=\"!hideLine2\" class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_Line2Input'\">{{addressTwoLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['line2'].status === 'INVALID'}\"\n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"line2\" [maxlength]=\"line2MaxLength\"\n [id]=\"componentId+'_Line2Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line2'].hasError('required')\">{{addressTwoLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line2'].hasError('maxlength')\">{{addressTwoLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_CityInput'\">{{cityLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['city'].status === 'INVALID'}\"\n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"City\" maxlength=\"30\" formControlName=\"city\" [maxlength]=\"cityMaxLength\"\n [id]=\"componentId+'_CityInput'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('required')\">{{cityLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('maxlength')\">{{cityLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n <div class=\"col-md-2\">\n <div *ngIf=\"showStates && (!group.controls['country'] || group.get('country')?.value ==='USA')\" class=\"form-group\">\n <label [for]=\"componentId+'_StateSelect'\">{{stateLabel}}</label>\n <select class=\"form-select\" [ngClass]=\"{'is-invalid':showValidation && group.controls['state'].status === 'INVALID'}\" \n name=\"AddressState\" formControlName=\"state\" [id]=\"componentId+'_StateSelect'\" [attr.disabled]=\"disableState || group.disabled ? '' : null\">\n <option *ngFor=\"let s of usStates\" [ngValue]=\"s\">{{s}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['state'].hasError('required')\">State is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div *ngIf=\"!group.controls['country'] || group.get('country')?.value ==='USA'\" class=\"form-group\">\n <label [for]=\"componentId+'_ZipInput'\">{{zipCodeLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['postalCode'].status === 'INVALID'}\"\n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"Zip Code\" formControlName=\"postalCode\" [id]=\"componentId+'_ZipInput'\" mask=\"00000\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['postalCode'].hasError('required')\">{{zipCodeLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['postalCode'].hasError('minlength')\">{{zipCodeLabel}} must contain exactly 5 digits</small>\n </div>\n </div>\n </div>\n <div *ngIf=\"group.controls['country'] && group.get('country')?.value !=='USA'\" class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_ForeignStateInput'\">{{foreignStateLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['foreignState'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Foreign State\" formControlName=\"foreignState\" [id]=\"componentId+'_ForeignStateInput'\" [attr.disabled]=\"disableState || group.disabled ? '' : null\" >\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['foreignState'].hasError('required')\">{{foreignStateLabel}} is required</small>\n \n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_foreignZipInput'\">{{foreignZipLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['foreignZip'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Foreign Zip Code\" formControlName=\"foreignZip\" [id]=\"componentId+'_foreignZipInput'\" >\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['foreignZip'].hasError('required')\">{{foreignZipLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['foreignZip'].hasError('minlength')\">{{foreignZipLabel}} must contain exactly ? digits</small>\n </div> \n </div>\n </div>\n <div *ngIf=\"group.controls['country']\" class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_CountrySelect'\">{{countryLabel}}</label>\n <select class=\"form-select\" [ngClass]=\"{'is-invalid':showValidation && group.controls['country'].status === 'INVALID'}\" \n name=\"AddressCountry\" formControlName=\"country\" [id]=\"componentId+'_CountrySelect'\" [attr.disabled]=\"disableState || group.disabled ? '' : null\">\n <option *ngFor=\"let c of countries\" [ngValue]=\"c\">{{c}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['country'].hasError('required')\">Country{{countryLabel}} is required</small>\n </div>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.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: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }] });
116
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AddressComponent, selector: "oepa-address", inputs: { group: "group", showValidation: "showValidation", addressOneLabel: "addressOneLabel", addressTwoLabel: "addressTwoLabel", cityLabel: "cityLabel", stateLabel: "stateLabel", zipCodeLabel: "zipCodeLabel", disableState: "disableState", isSearch: "isSearch", hideLine2: "hideLine2", line1MaxLength: "line1MaxLength", line2MaxLength: "line2MaxLength", cityMaxLength: "cityMaxLength", foreignStateLabel: "foreignStateLabel", foreignZipLabel: "foreignZipLabel", countryLabel: "countryLabel", sameAsGroup: "sameAsGroup", sameAsLabel: "sameAsLabel", sameAsChecked: "sameAsChecked" }, ngImport: i0, template: "<div *ngIf=\"sameAsGroup\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label [ngStyle]=\"{ 'font-weight': sameAsChecked && group.disabled ? 'bold' : '' }\" [for]=\"componentId+'_CopyFromCheckbox'\">\n {{sameAsLabel}} \n <input [id]=\"componentId+'_CopyFromCheckbox'\" type=\"checkbox\" [checked]=\"sameAsChecked\" (change)=\"toggleCopyFromSelection()\" [disabled]=\"group.parent?.disabled\"/>\n </label>\n </div>\n </div>\n </div>\n</div>\n<div *ngIf=\"!sameAsGroup || !sameAsChecked\" [formGroup]=\"group\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_Line1Input'\">{{addressOneLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['line1'].status === 'INVALID'}\" \n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"line1\" [maxlength]=\"line1MaxLength\"\n [id]=\"componentId+'_Line1Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line1'].hasError('required')\">{{addressOneLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line1'].hasError('maxlength')\">{{addressOneLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div *ngIf=\"!hideLine2\" class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_Line2Input'\">{{addressTwoLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['line2'].status === 'INVALID'}\"\n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"line2\" [maxlength]=\"line2MaxLength\"\n [id]=\"componentId+'_Line2Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line2'].hasError('required')\">{{addressTwoLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line2'].hasError('maxlength')\">{{addressTwoLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_CityInput'\">{{cityLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['city'].status === 'INVALID'}\"\n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"City\" maxlength=\"30\" formControlName=\"city\" [maxlength]=\"cityMaxLength\"\n [id]=\"componentId+'_CityInput'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('required')\">{{cityLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('maxlength')\">{{cityLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n <div class=\"col-md-2\">\n <div *ngIf=\"showStates && (!group.controls['country'] || group.get('country')?.value ==='USA')\" class=\"form-group\">\n <label [for]=\"componentId+'_StateSelect'\">{{stateLabel}}</label>\n <select class=\"form-select\" [ngClass]=\"{'is-invalid':showValidation && group.controls['state'].status === 'INVALID'}\" \n name=\"AddressState\" formControlName=\"state\" [id]=\"componentId+'_StateSelect'\" [attr.disabled]=\"disableState || group.disabled ? '' : null\">\n <option *ngFor=\"let s of usStates\" [ngValue]=\"s\">{{s}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['state'].hasError('required')\">State is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div *ngIf=\"!group.controls['country'] || group.get('country')?.value ==='USA'\" class=\"form-group\">\n <label [for]=\"componentId+'_ZipInput'\">{{zipCodeLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['postalCode'].status === 'INVALID'}\"\n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"Zip Code\" formControlName=\"postalCode\" [id]=\"componentId+'_ZipInput'\" mask=\"00000\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['postalCode'].hasError('required')\">{{zipCodeLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['postalCode'].hasError('minlength')\">{{zipCodeLabel}} must contain exactly 5 digits</small>\n </div>\n </div>\n </div>\n <div *ngIf=\"group.controls['country'] && group.get('country')?.value !=='USA'\" class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_ForeignStateInput'\">{{foreignStateLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['foreignState'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Foreign State\" formControlName=\"foreignState\" [id]=\"componentId+'_ForeignStateInput'\" [attr.disabled]=\"disableState || group.disabled ? '' : null\" >\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['foreignState'].hasError('required')\">{{foreignStateLabel}} is required</small>\n \n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_foreignZipInput'\">{{foreignZipLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['foreignZip'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Foreign Zip Code\" formControlName=\"foreignZip\" [id]=\"componentId+'_foreignZipInput'\" >\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['foreignZip'].hasError('required')\">{{foreignZipLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['foreignZip'].hasError('minlength')\">{{foreignZipLabel}} must contain exactly ? digits</small>\n </div> \n </div>\n </div>\n <div *ngIf=\"group.controls['country']\" class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_CountrySelect'\">{{countryLabel}}</label>\n <select class=\"form-select\" [ngClass]=\"{'is-invalid':showValidation && group.controls['country'].status === 'INVALID'}\" \n name=\"AddressCountry\" formControlName=\"country\" [id]=\"componentId+'_CountrySelect'\" [attr.disabled]=\"disableState || group.disabled ? '' : null\">\n <option *ngFor=\"let c of countries\" [ngValue]=\"c\">{{c}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['country'].hasError('required')\">Country{{countryLabel}} is required</small>\n </div>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.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: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }] });
117
117
  }
118
118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddressComponent, decorators: [{
119
119
  type: Component,
120
- args: [{ selector: 'oepa-address', template: "<div *ngIf=\"sameAsGroup\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label [ngStyle]=\"{ 'font-weight': sameAsChecked && group.disabled ? 'bold' : '' }\" for=\"copyFromCheckbox\">\n {{sameAsLabel}} \n <input id=\"copyFromCheckbox\" type=\"checkbox\" [checked]=\"sameAsChecked\" (change)=\"toggleCopyFromSelection()\" [disabled]=\"group.parent?.disabled\"/>\n </label>\n </div>\n </div>\n </div>\n</div>\n<div *ngIf=\"!sameAsGroup || !sameAsChecked\" [formGroup]=\"group\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_Line1Input'\">{{addressOneLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['line1'].status === 'INVALID'}\" \n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"line1\" [maxlength]=\"line1MaxLength\"\n [id]=\"componentId+'_Line1Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line1'].hasError('required')\">{{addressOneLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line1'].hasError('maxlength')\">{{addressOneLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div *ngIf=\"!hideLine2\" class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_Line2Input'\">{{addressTwoLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['line2'].status === 'INVALID'}\"\n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"line2\" [maxlength]=\"line2MaxLength\"\n [id]=\"componentId+'_Line2Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line2'].hasError('required')\">{{addressTwoLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line2'].hasError('maxlength')\">{{addressTwoLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_CityInput'\">{{cityLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['city'].status === 'INVALID'}\"\n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"City\" maxlength=\"30\" formControlName=\"city\" [maxlength]=\"cityMaxLength\"\n [id]=\"componentId+'_CityInput'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('required')\">{{cityLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('maxlength')\">{{cityLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n <div class=\"col-md-2\">\n <div *ngIf=\"showStates && (!group.controls['country'] || group.get('country')?.value ==='USA')\" class=\"form-group\">\n <label [for]=\"componentId+'_StateSelect'\">{{stateLabel}}</label>\n <select class=\"form-select\" [ngClass]=\"{'is-invalid':showValidation && group.controls['state'].status === 'INVALID'}\" \n name=\"AddressState\" formControlName=\"state\" [id]=\"componentId+'_StateSelect'\" [attr.disabled]=\"disableState || group.disabled ? '' : null\">\n <option *ngFor=\"let s of usStates\" [ngValue]=\"s\">{{s}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['state'].hasError('required')\">State is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div *ngIf=\"!group.controls['country'] || group.get('country')?.value ==='USA'\" class=\"form-group\">\n <label [for]=\"componentId+'_ZipInput'\">{{zipCodeLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['postalCode'].status === 'INVALID'}\"\n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"Zip Code\" formControlName=\"postalCode\" [id]=\"componentId+'_ZipInput'\" mask=\"00000\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['postalCode'].hasError('required')\">{{zipCodeLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['postalCode'].hasError('minlength')\">{{zipCodeLabel}} must contain exactly 5 digits</small>\n </div>\n </div>\n </div>\n <div *ngIf=\"group.controls['country'] && group.get('country')?.value !=='USA'\" class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_ForeignStateInput'\">{{foreignStateLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['foreignState'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Foreign State\" formControlName=\"foreignState\" [id]=\"componentId+'_ForeignStateInput'\" [attr.disabled]=\"disableState || group.disabled ? '' : null\" >\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['foreignState'].hasError('required')\">{{foreignStateLabel}} is required</small>\n \n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_foreignZipInput'\">{{foreignZipLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['foreignZip'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Foreign Zip Code\" formControlName=\"foreignZip\" [id]=\"componentId+'_foreignZipInput'\" >\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['foreignZip'].hasError('required')\">{{foreignZipLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['foreignZip'].hasError('minlength')\">{{foreignZipLabel}} must contain exactly ? digits</small>\n </div> \n </div>\n </div>\n <div *ngIf=\"group.controls['country']\" class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_CountrySelect'\">{{countryLabel}}</label>\n <select class=\"form-select\" [ngClass]=\"{'is-invalid':showValidation && group.controls['country'].status === 'INVALID'}\" \n name=\"AddressCountry\" formControlName=\"country\" [id]=\"componentId+'_CountrySelect'\" [attr.disabled]=\"disableState || group.disabled ? '' : null\">\n <option *ngFor=\"let c of countries\" [ngValue]=\"c\">{{c}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['country'].hasError('required')\">Country{{countryLabel}} is required</small>\n </div>\n </div>\n </div>\n</div>" }]
120
+ args: [{ selector: 'oepa-address', template: "<div *ngIf=\"sameAsGroup\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label [ngStyle]=\"{ 'font-weight': sameAsChecked && group.disabled ? 'bold' : '' }\" [for]=\"componentId+'_CopyFromCheckbox'\">\n {{sameAsLabel}} \n <input [id]=\"componentId+'_CopyFromCheckbox'\" type=\"checkbox\" [checked]=\"sameAsChecked\" (change)=\"toggleCopyFromSelection()\" [disabled]=\"group.parent?.disabled\"/>\n </label>\n </div>\n </div>\n </div>\n</div>\n<div *ngIf=\"!sameAsGroup || !sameAsChecked\" [formGroup]=\"group\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_Line1Input'\">{{addressOneLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['line1'].status === 'INVALID'}\" \n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"line1\" [maxlength]=\"line1MaxLength\"\n [id]=\"componentId+'_Line1Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line1'].hasError('required')\">{{addressOneLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line1'].hasError('maxlength')\">{{addressOneLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div *ngIf=\"!hideLine2\" class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_Line2Input'\">{{addressTwoLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['line2'].status === 'INVALID'}\"\n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"Address\" maxlength=\"40\" formControlName=\"line2\" [maxlength]=\"line2MaxLength\"\n [id]=\"componentId+'_Line2Input'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line2'].hasError('required')\">{{addressTwoLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['line2'].hasError('maxlength')\">{{addressTwoLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_CityInput'\">{{cityLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['city'].status === 'INVALID'}\"\n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"City\" maxlength=\"30\" formControlName=\"city\" [maxlength]=\"cityMaxLength\"\n [id]=\"componentId+'_CityInput'\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('required')\">{{cityLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['city'].hasError('maxlength')\">{{cityLabel}} has exceeded its maximum length</small>\n </div>\n </div>\n <div class=\"col-md-2\">\n <div *ngIf=\"showStates && (!group.controls['country'] || group.get('country')?.value ==='USA')\" class=\"form-group\">\n <label [for]=\"componentId+'_StateSelect'\">{{stateLabel}}</label>\n <select class=\"form-select\" [ngClass]=\"{'is-invalid':showValidation && group.controls['state'].status === 'INVALID'}\" \n name=\"AddressState\" formControlName=\"state\" [id]=\"componentId+'_StateSelect'\" [attr.disabled]=\"disableState || group.disabled ? '' : null\">\n <option *ngFor=\"let s of usStates\" [ngValue]=\"s\">{{s}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['state'].hasError('required')\">State is required</small>\n </div>\n </div>\n <div class=\"col-md-4\">\n <div *ngIf=\"!group.controls['country'] || group.get('country')?.value ==='USA'\" class=\"form-group\">\n <label [for]=\"componentId+'_ZipInput'\">{{zipCodeLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['postalCode'].status === 'INVALID'}\"\n [type]=\"isSearch ? 'search' : 'text'\" placeholder=\"Zip Code\" formControlName=\"postalCode\" [id]=\"componentId+'_ZipInput'\" mask=\"00000\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['postalCode'].hasError('required')\">{{zipCodeLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['postalCode'].hasError('minlength')\">{{zipCodeLabel}} must contain exactly 5 digits</small>\n </div>\n </div>\n </div>\n <div *ngIf=\"group.controls['country'] && group.get('country')?.value !=='USA'\" class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_ForeignStateInput'\">{{foreignStateLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['foreignState'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Foreign State\" formControlName=\"foreignState\" [id]=\"componentId+'_ForeignStateInput'\" [attr.disabled]=\"disableState || group.disabled ? '' : null\" >\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['foreignState'].hasError('required')\">{{foreignStateLabel}} is required</small>\n \n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_foreignZipInput'\">{{foreignZipLabel}}</label>\n <input class=\"form-control\" [ngClass]=\"{'is-invalid':showValidation && group.controls['foreignZip'].status === 'INVALID'}\"\n type=\"text\" placeholder=\"Foreign Zip Code\" formControlName=\"foreignZip\" [id]=\"componentId+'_foreignZipInput'\" >\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['foreignZip'].hasError('required')\">{{foreignZipLabel}} is required</small>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['foreignZip'].hasError('minlength')\">{{foreignZipLabel}} must contain exactly ? digits</small>\n </div> \n </div>\n </div>\n <div *ngIf=\"group.controls['country']\" class=\"row\">\n <div class=\"col-md-6\">\n <div class=\"form-group\">\n <label [for]=\"componentId+'_CountrySelect'\">{{countryLabel}}</label>\n <select class=\"form-select\" [ngClass]=\"{'is-invalid':showValidation && group.controls['country'].status === 'INVALID'}\" \n name=\"AddressCountry\" formControlName=\"country\" [id]=\"componentId+'_CountrySelect'\" [attr.disabled]=\"disableState || group.disabled ? '' : null\">\n <option *ngFor=\"let c of countries\" [ngValue]=\"c\">{{c}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"group.controls['country'].hasError('required')\">Country{{countryLabel}} is required</small>\n </div>\n </div>\n </div>\n</div>" }]
121
121
  }], ctorParameters: () => [{ type: i1.OepaAddressService }, { type: i2.OepaComponentIdService }], propDecorators: { group: [{
122
122
  type: Input
123
123
  }], showValidation: [{
@@ -171,4 +171,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
171
171
  }], sameAsChecked: [{
172
172
  type: Input
173
173
  }] } });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2FkZHJlc3MvYWRkcmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2FkZHJlc3MvYWRkcmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVd6RCxNQUFNLE9BQU8sZ0JBQWdCO0lBdUNQO0lBQTRDO0lBdEN6RCxXQUFXLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0MsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNsQixRQUFRLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLFNBQVMsR0FBYSxFQUFFLENBQUM7SUFDekIsV0FBVyxHQUFHLHNCQUFzQixDQUFDO0lBR3BDLGVBQWUsQ0FBZTtJQUM5QixZQUFZLENBQWdCO0lBRTNCLEtBQUssQ0FBYTtJQUNsQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBRUMsZUFBZSxHQUFXLFdBQVcsQ0FBQztJQUN0QyxlQUFlLEdBQVcsV0FBVyxDQUFDO0lBQzVDLFNBQVMsR0FBVyxNQUFNLENBQUM7SUFDMUIsVUFBVSxHQUFXLE9BQU8sQ0FBQztJQUMzQixZQUFZLEdBQVcsVUFBVSxDQUFDO0lBQ2xDLFlBQVksR0FBVyxLQUFLLENBQUM7SUFDakMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUV6QixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRTdDLHdDQUF3QztJQUNSLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDcEIsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUNyQixhQUFhLEdBQUcsRUFBRSxDQUFDO0lBRWYsaUJB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Z0JBQ1MsWUFBWTtzQkFBekMsS0FBSzt1QkFBQyxjQUFjO2dCQUNLLFFBQVE7c0JBQWpDLEtBQUs7dUJBQUMsVUFBVTtnQkFFVSxTQUFTO3NCQUFuQyxLQUFLO3VCQUFDLFdBQVc7Z0JBR2MsY0FBYztzQkFBN0MsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ1MsY0FBYztzQkFBN0MsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ1EsYUFBYTtzQkFBM0MsS0FBSzt1QkFBQyxlQUFlO2dCQUVhLGlCQUFpQjtzQkFBbkQsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBQ08sZUFBZTtzQkFBL0MsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBQ00sWUFBWTtzQkFBekMsS0FBSzt1QkFBQyxjQUFjO2dCQUlaLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9lcGFBZGRyZXNzU2VydmljZSB9IGZyb20gJy4vb2VwYS1hZGRyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2VwYUNvbXBvbmVudElkU2VydmljZSwgT0VQQUFkZHJlc3MgfSBmcm9tICdAb2hpb2VwYS9vZXBhLWNvbW1vbi1saWInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLWFkZHJlc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkcmVzcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9hZGRyZXNzLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBBZGRyZXNzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIHppcENvZGVNYXNrID0gWy9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkL107XG4gIHB1YmxpYyBzaG93U3RhdGVzID0gdHJ1ZTtcbiAgcHVibGljIHVzU3RhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgY291bnRyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgY29tcG9uZW50SWQgPSAnT2VwYUFkZHJlc3NDb21wb25lbnQnO1xuXG4gIFxuICBwcml2YXRlIG9yaWdpbmFsQWRkcmVzcyE6IE9FUEFBZGRyZXNzO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBASW5wdXQoKSBncm91cCE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRpb24gPSBmYWxzZTtcblxuICBASW5wdXQoJ2FkZHJlc3NPbmVMYWJlbCcpIHB1YmxpYyBhZGRyZXNzT25lTGFiZWw6IHN0cmluZyA9ICdBZGRyZXNzIDEnO1xuICBASW5wdXQoJ2FkZHJlc3NUd29MYWJlbCcpIHB1YmxpYyBhZGRyZXNzVHdvTGFiZWw6IHN0cmluZyA9ICdBZGRyZXNzIDInO1xuICBASW5wdXQoJ2NpdHlMYWJlbCcpIHB1YmxpYyBjaXR5TGFiZWw6IHN0cmluZyA9ICdDaXR5JztcbiAgQElucHV0KCdzdGF0ZUxhYmVsJykgcHVibGljIHN0YXRlTGFiZWw6IHN0cmluZyA9ICdTdGF0ZSc7XG4gIEBJbnB1dCgnemlwQ29kZUxhYmVsJykgcHVibGljIHppcENvZGVMYWJlbDogc3RyaW5nID0gJ1ppcCBDb2RlJztcbiAgQElucHV0KCdkaXNhYmxlU3RhdGUnKSBwdWJsaWMgZGlzYWJsZVN0YXRlOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCdpc1NlYXJjaCcpIHB1YmxpYyBpc1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnaGlkZUxpbmUyJykgcHVibGljIGhpZGVMaW5lMiA9IGZhbHNlO1xuXG4gIC8vIG1heCBsZW5ndGggdmFsdWVzLiBvdmVycmlkZSBpZiBuZWVkZWRcbiAgQElucHV0KCdsaW5lMU1heExlbmd0aCcpIHB1YmxpYyBsaW5lMU1heExlbmd0aCA9IDQwO1xuICBASW5wdXQoJ2xpbmUyTWF4TGVuZ3RoJykgcHVibGljIGxpbmUyTWF4TGVuZ3RoID0gNDA7XG4gIEBJbnB1dCgnY2l0eU1heExlbmd0aCcpIHB1YmxpYyBjaXR5TWF4TGVuZ3RoID0gMzA7XG4gIFxuICBASW5wdXQoJ2ZvcmVpZ25TdGF0ZUxhYmVsJykgcHVibGljIGZvcmVpZ25TdGF0ZUxhYmVsOiBzdHJpbmcgPSAnRm9yZWlnbiBTdGF0ZSc7XG4gIEBJbnB1dCgnZm9yZWlnblppcExhYmVsJykgcHVibGljIGZvcmVpZ25aaXBMYWJlbDogc3RyaW5nID0gJ0ZvcmVpZ24gWmlwIENvZGUnO1xuICBASW5wdXQoJ2NvdW50cnlMYWJlbCcpIHB1YmxpYyBjb3VudHJ5TGFiZWw6IHN0cmluZyA9ICdDb3VudHJ5JztcblxuICAvLyBUaGVzZSB2YWx1ZXMgYXJlIG9ubHkgdXNlZCBpZiB5b3Ugd2FudCBhIFwic2FtZSBhc1wiIGNoZWNrYm94IGZvciB0aGUgYWRkcmVzc1xuICAvLyBBbGwgdGhyZWUgdmFsdWVzIG11c3QgYmUgcHJvdmlkZWQgaWYgdXNpbmcgdGhlIFwic2FtZSBhc1wiIGNhcGFiaWxpdHlcbiAgQElucHV0KCkgc2FtZUFzR3JvdXAgITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBzYW1lQXNMYWJlbCAhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNhbWVBc0NoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFkZHJlc3NTZXJ2aWNlOiBPZXBhQWRkcmVzc1NlcnZpY2UsIHByaXZhdGUgaWRTZXJ2aWNlOiBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlKSB7XG4gICAgdGhpcy5hZGRyZXNzU2VydmljZS5nZXRTdGF0ZXMoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHN0YXRlcykgPT4ge1xuICAgICAgdGhpcy51c1N0YXRlcyA9IHN0YXRlcztcbiAgICB9LCBlcnJvcjogZXJyID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiByZXRyaWV2aW5nIHN0YXRlcyBmb3IgYWRkcmVzczogJyArIGVycik7XG4gICAgfX0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZ3JvdXApIHtcbiAgICAgIFxuICAgICAgaWYodGhpcy5ncm91cC5jb250cm9sc1snY291bnRyeSddKXtcbiAgICAgICAgIHRoaXMuYWRkcmVzc1NlcnZpY2UuZ2V0Q291bnRyaWVzKCkuc3Vic2NyaWJlKHsgXG4gICAgICAgICAgbmV4dDogKGNvdW50cmllczogYW55KSA9PiB7XG4gICAgICAgICAgICBsZXQgY291bnRyeUxpc3Q6c3RyaW5nW109W107XG4gICAgICAgICAgICAvL1JlbW92ZSBcIkNheW1lbiBJc2xhbmRzXCJcbiAgICAgICAgICAgIGNvdW50cmllcy5mb3JFYWNoKChjb3VudHJ5OiBhbnkpID0+e1xuICAgICAgICAgICAgICBpZihjb3VudHJ5ICE9PSBcIkNheW1lbiBJc2xhbmRzXCIpXG4gICAgICAgICAgICAgICAgY291bnRyeUxpc3QucHVzaChjb3VudHJ5KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0aGlzLmNvdW50cmllcyA9IGNvdW50cnlMaXN0O1xuICAgICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIHJldHJpZXZpbmcgY291bnRyaWVzIGZvciBhZGRyZXNzOiAnICsgZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5jb21wb25lbnRJZCA9IHRoaXMuaWRTZXJ2aWNlLmdldENvbXBvbmVudElkKHRoaXMuZ3JvdXApO1xuICAgICAgdGhpcy5vcmlnaW5hbEFkZHJlc3MgPSB0aGlzLmFkZHJlc3NGcm9tRm9ybUdyb3VwKHRoaXMuZ3JvdXApO1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVDb3B5RnJvbVNlbGVjdGlvbigpIHtcbiAgICB0aGlzLnNhbWVBc0NoZWNrZWQgPSAhdGhpcy5zYW1lQXNDaGVja2VkO1xuICAgIGlmICh0aGlzLnNhbWVBc0NoZWNrZWQpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tQ2hhbmdlcygpO1xuICAgICAgdGhpcy5ncm91cC5wYXRjaFZhbHVlKHRoaXMuYWRkcmVzc0Zyb21Gb3JtR3JvdXAodGhpcy5zYW1lQXNHcm91cCkpO1xuICAgICAgdGhpcy5ncm91cC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9DaGFuZ2VzKCk7XG4gICAgICB0aGlzLmdyb3VwLnBhdGNoVmFsdWUodGhpcy5vcmlnaW5hbEFkZHJlc3MpO1xuICAgICAgdGhpcy5ncm91cC5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZHJlc3NGcm9tRm9ybUdyb3VwKGdyb3VwOiBGb3JtR3JvdXApOiBPRVBBQWRkcmVzcyB7XG4gICAgbGV0IGFkZHJlc3M6IE9FUEFBZGRyZXNzID0ge307XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICBhZGRyZXNzID0ge1xuICAgICAgICBsaW5lMTogZ3JvdXAuY29udHJvbHNbJ2xpbmUxJ10udmFsdWUsXG4gICAgICAgIGxpbmUyOiBncm91cC5jb250cm9sc1snbGluZTInXS52YWx1ZSxcbiAgICAgICAgY2l0eTogZ3JvdXAuY29udHJvbHNbJ2NpdHknXS52YWx1ZSxcbiAgICAgICAgc3RhdGU6IGdyb3VwLmNvbnRyb2xzWydzdGF0ZSddLnZhbHVlLFxuICAgICAgICBwb3N0YWxDb2RlOiAoZ3JvdXAuY29udHJvbHNbJ2NvdW50cnknXSAmJiBncm91cC5jb250cm9sc1snY291bnRyeSddLnZhbHVlICE9PSAnVVNBJykgPyBncm91cC5jb250cm9sc1snZm9yZWlnblppcCddOmdyb3VwLmNvbnRyb2xzWydwb3N0YWxDb2RlJ10udmFsdWUsXG4gICAgICAgIGZvcmVpZ25TdGF0ZTogZ3JvdXAuY29udHJvbHNbJ2ZvcmVpZ25TdGF0ZSddPyBncm91cC5jb250cm9sc1snZm9yZWlnblN0YXRlJ10udmFsdWU6bnVsbCxcbiAgICAgICAgY291bnRyeTogZ3JvdXAuY29udHJvbHNbJ2NvdW50cnknXSA/IGdyb3VwLmNvbnRyb2xzWydjb3VudHJ5J10udmFsdWU6bnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9DaGFuZ2VzKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5ncm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGFkZHJlc3MgPT4ge1xuICAgICAgdGhpcy5vcmlnaW5hbEFkZHJlc3MubGluZTEgPSBhZGRyZXNzLmxpbmUxO1xuICAgICAgdGhpcy5vcmlnaW5hbEFkZHJlc3MubGluZTIgPSBhZGRyZXNzLmxpbmUyO1xuICAgICAgdGhpcy5vcmlnaW5hbEFkZHJlc3MuY2l0eSA9IGFkZHJlc3MuY2l0eTtcbiAgICAgIHRoaXMub3JpZ2luYWxBZGRyZXNzLnN0YXRlID0gYWRkcmVzcy5zdGF0ZTtcbiAgICAgIHRoaXMub3JpZ2luYWxBZGRyZXNzLnBvc3RhbENvZGUgPSAoYWRkcmVzcy5jb3VudHJ5ICYmIGFkZHJlc3MuY291bnRyeSAhPT0gJ1VTQScpID8gYWRkcmVzcy5mb3JlaWduWmlwOmFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgIHRoaXMub3JpZ2luYWxBZGRyZXNzLmZvcmVpZ25TdGF0ZSA9IGFkZHJlc3MuZm9yZWlnblN0YXRlID8gYWRkcmVzcy5mb3JlaWduU3RhdGUgOiBudWxsO1xuICAgICAgdGhpcy5vcmlnaW5hbEFkZHJlc3MuY291bnRyeSA9IGFkZHJlc3MuY291bnRyeSA/IGFkZHJlc3MuY291bnRyeSA6IG51bGw7XG4gICAgICBcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVGcm9tQ2hhbmdlcygpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwic2FtZUFzR3JvdXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIFtuZ1N0eWxlXT1cInsgJ2ZvbnQtd2VpZ2h0Jzogc2FtZUFzQ2hlY2tlZCAmJiBncm91cC5kaXNhYmxlZCA/ICdib2xkJyA6ICcnIH1cIiBmb3I9XCJjb3B5RnJvbUNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7c2FtZUFzTGFiZWx9fSBcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiY29weUZyb21DaGVja2JveFwiIHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cInNhbWVBc0NoZWNrZWRcIiAoY2hhbmdlKT1cInRvZ2dsZUNvcHlGcm9tU2VsZWN0aW9uKClcIiBbZGlzYWJsZWRdPVwiZ3JvdXAucGFyZW50Py5kaXNhYmxlZFwiLz5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiIXNhbWVBc0dyb3VwIHx8ICFzYW1lQXNDaGVja2VkXCIgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJjb21wb25lbnRJZCsnX0xpbmUxSW5wdXQnXCI+e3thZGRyZXNzT25lTGFiZWx9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBncm91cC5jb250cm9sc1snbGluZTEnXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIiBcbiAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiaXNTZWFyY2ggPyAnc2VhcmNoJyA6ICd0ZXh0J1wiIHBsYWNlaG9sZGVyPVwiQWRkcmVzc1wiIG1heGxlbmd0aD1cIjQwXCIgZm9ybUNvbnRyb2xOYW1lPVwibGluZTFcIiBbbWF4bGVuZ3RoXT1cImxpbmUxTWF4TGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvbXBvbmVudElkKydfTGluZTFJbnB1dCdcIj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJncm91cC5jb250cm9sc1snbGluZTEnXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPnt7YWRkcmVzc09uZUxhYmVsfX0gaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdyb3VwLmNvbnRyb2xzWydsaW5lMSddLmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiPnt7YWRkcmVzc09uZUxhYmVsfX0gaGFzIGV4Y2VlZGVkIGl0cyBtYXhpbXVtIGxlbmd0aDwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFoaWRlTGluZTJcIiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cImNvbXBvbmVudElkKydfTGluZTJJbnB1dCdcIj57e2FkZHJlc3NUd29MYWJlbH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzWydsaW5lMiddLnN0YXR1cyA9PT0gJ0lOVkFMSUQnfVwiXG4gICAgICAgICAgICAgICAgW3R5cGVdPVwiaXNTZWFyY2ggPyAnc2VhcmNoJyA6ICd0ZXh0J1wiIHBsYWNlaG9sZGVyPVwiQWRkcmVzc1wiIG1heGxlbmd0aD1cIjQwXCIgZm9ybUNvbnRyb2xOYW1lPVwibGluZTJcIiBbbWF4bGVuZ3RoXT1cImxpbmUyTWF4TGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvbXBvbmVudElkKydfTGluZTJJbnB1dCdcIj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJncm91cC5jb250cm9sc1snbGluZTInXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPnt7YWRkcmVzc1R3b0xhYmVsfX0gaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdyb3VwLmNvbnRyb2xzWydsaW5lMiddLmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiPnt7YWRkcmVzc1R3b0xhYmVsfX0gaGFzIGV4Y2VlZGVkIGl0cyBtYXhpbXVtIGxlbmd0aDwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiY29tcG9uZW50SWQrJ19DaXR5SW5wdXQnXCI+e3tjaXR5TGFiZWx9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBncm91cC5jb250cm9sc1snY2l0eSddLnN0YXR1cyA9PT0gJ0lOVkFMSUQnfVwiXG4gICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImlzU2VhcmNoID8gJ3NlYXJjaCcgOiAndGV4dCdcIiBwbGFjZWhvbGRlcj1cIkNpdHlcIiBtYXhsZW5ndGg9XCIzMFwiIGZvcm1Db250cm9sTmFtZT1cImNpdHlcIiBbbWF4bGVuZ3RoXT1cImNpdHlNYXhMZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiY29tcG9uZW50SWQrJ19DaXR5SW5wdXQnXCI+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ3JvdXAuY29udHJvbHNbJ2NpdHknXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPnt7Y2l0eUxhYmVsfX0gaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdyb3VwLmNvbnRyb2xzWydjaXR5J10uaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+e3tjaXR5TGFiZWx9fSBoYXMgZXhjZWVkZWQgaXRzIG1heGltdW0gbGVuZ3RoPC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1N0YXRlcyAmJiAoIWdyb3VwLmNvbnRyb2xzWydjb3VudHJ5J10gfHwgZ3JvdXAuZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSdVU0EnKVwiIGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cImNvbXBvbmVudElkKydfU3RhdGVTZWxlY3QnXCI+e3tzdGF0ZUxhYmVsfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgZ3JvdXAuY29udHJvbHNbJ3N0YXRlJ10uc3RhdHVzID09PSAnSU5WQUxJRCd9XCIgXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJBZGRyZXNzU3RhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzdGF0ZVwiIFtpZF09XCJjb21wb25lbnRJZCsnX1N0YXRlU2VsZWN0J1wiIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVTdGF0ZSB8fCBncm91cC5kaXNhYmxlZCA/ICcnIDogbnVsbFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHMgb2YgdXNTdGF0ZXNcIiBbbmdWYWx1ZV09XCJzXCI+e3tzfX08L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ3JvdXAuY29udHJvbHNbJ3N0YXRlJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5TdGF0ZSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFncm91cC5jb250cm9sc1snY291bnRyeSddICB8fCBncm91cC5nZXQoJ2NvdW50cnknKT8udmFsdWUgPT09J1VTQSdcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJjb21wb25lbnRJZCsnX1ppcElucHV0J1wiPnt7emlwQ29kZUxhYmVsfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgZ3JvdXAuY29udHJvbHNbJ3Bvc3RhbENvZGUnXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIlxuICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJpc1NlYXJjaCA/ICdzZWFyY2gnIDogJ3RleHQnXCIgcGxhY2Vob2xkZXI9XCJaaXAgQ29kZVwiIGZvcm1Db250cm9sTmFtZT1cInBvc3RhbENvZGVcIiBbaWRdPVwiY29tcG9uZW50SWQrJ19aaXBJbnB1dCdcIiBtYXNrPVwiMDAwMDBcIj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJncm91cC5jb250cm9sc1sncG9zdGFsQ29kZSddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+e3t6aXBDb2RlTGFiZWx9fSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ3JvdXAuY29udHJvbHNbJ3Bvc3RhbENvZGUnXS5oYXNFcnJvcignbWlubGVuZ3RoJylcIj57e3ppcENvZGVMYWJlbH19IG11c3QgY29udGFpbiBleGFjdGx5IDUgZGlnaXRzPC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXAuY29udHJvbHNbJ2NvdW50cnknXSAmJiBncm91cC5nZXQoJ2NvdW50cnknKT8udmFsdWUgIT09J1VTQSdcIiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiY29tcG9uZW50SWQrJ19Gb3JlaWduU3RhdGVJbnB1dCdcIj57e2ZvcmVpZ25TdGF0ZUxhYmVsfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgZ3JvdXAuY29udHJvbHNbJ2ZvcmVpZ25TdGF0ZSddLnN0YXR1cyA9PT0gJ0lOVkFMSUQnfVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkZvcmVpZ24gU3RhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJmb3JlaWduU3RhdGVcIiBbaWRdPVwiY29tcG9uZW50SWQrJ19Gb3JlaWduU3RhdGVJbnB1dCdcIiBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlU3RhdGUgfHwgZ3JvdXAuZGlzYWJsZWQgPyAnJyA6IG51bGxcIiA+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ3JvdXAuY29udHJvbHNbJ2ZvcmVpZ25TdGF0ZSddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+e3tmb3JlaWduU3RhdGVMYWJlbH19IGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cImNvbXBvbmVudElkKydfZm9yZWlnblppcElucHV0J1wiPnt7Zm9yZWlnblppcExhYmVsfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgZ3JvdXAuY29udHJvbHNbJ2ZvcmVpZ25aaXAnXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJGb3JlaWduIFppcCBDb2RlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZm9yZWlnblppcFwiIFtpZF09XCJjb21wb25lbnRJZCsnX2ZvcmVpZ25aaXBJbnB1dCdcIiAgPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdyb3VwLmNvbnRyb2xzWydmb3JlaWduWmlwJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj57e2ZvcmVpZ25aaXBMYWJlbH19IGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJncm91cC5jb250cm9sc1snZm9yZWlnblppcCddLmhhc0Vycm9yKCdtaW5sZW5ndGgnKVwiPnt7Zm9yZWlnblppcExhYmVsfX0gbXVzdCBjb250YWluIGV4YWN0bHkgPyBkaWdpdHM8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+IFxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXAuY29udHJvbHNbJ2NvdW50cnknXVwiIGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJjb21wb25lbnRJZCsnX0NvdW50cnlTZWxlY3QnXCI+e3tjb3VudHJ5TGFiZWx9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBncm91cC5jb250cm9sc1snY291bnRyeSddLnN0YXR1cyA9PT0gJ0lOVkFMSUQnfVwiIFxuICAgICAgICAgICAgICAgIG5hbWU9XCJBZGRyZXNzQ291bnRyeVwiIGZvcm1Db250cm9sTmFtZT1cImNvdW50cnlcIiBbaWRdPVwiY29tcG9uZW50SWQrJ19Db3VudHJ5U2VsZWN0J1wiIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVTdGF0ZSB8fCBncm91cC5kaXNhYmxlZCA/ICcnIDogbnVsbFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGMgb2YgY291bnRyaWVzXCIgW25nVmFsdWVdPVwiY1wiPnt7Y319PC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdyb3VwLmNvbnRyb2xzWydjb3VudHJ5J10uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5Db3VudHJ5e3tjb3VudHJ5TGFiZWx9fSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2FkZHJlc3MvYWRkcmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2FkZHJlc3MvYWRkcmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVd6RCxNQUFNLE9BQU8sZ0JBQWdCO0lBdUNQO0lBQTRDO0lBdEN6RCxXQUFXLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0MsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNsQixRQUFRLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLFNBQVMsR0FBYSxFQUFFLENBQUM7SUFDekIsV0FBVyxHQUFHLHNCQUFzQixDQUFDO0lBR3BDLGVBQWUsQ0FBZTtJQUM5QixZQUFZLENBQWdCO0lBRTNCLEtBQUssQ0FBYTtJQUNsQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBRUMsZUFBZSxHQUFXLFdBQVcsQ0FBQztJQUN0QyxlQUFlLEdBQVcsV0FBVyxDQUFDO0lBQzVDLFNBQVMsR0FBVyxNQUFNLENBQUM7SUFDMUIsVUFBVSxHQUFXLE9BQU8sQ0FBQztJQUMzQixZQUFZLEdBQVcsVUFBVSxDQUFDO0lBQ2xDLFlBQVksR0FBVyxLQUFLLENBQUM7SUFDakMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUV6QixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRTdDLHdDQUF3QztJQUNSLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDcEIsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUNyQixhQUFhLEdBQUcsRUFBRSxDQUFDO0lBRWYsaUJB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Z0JBQ1MsWUFBWTtzQkFBekMsS0FBSzt1QkFBQyxjQUFjO2dCQUNLLFFBQVE7c0JBQWpDLEtBQUs7dUJBQUMsVUFBVTtnQkFFVSxTQUFTO3NCQUFuQyxLQUFLO3VCQUFDLFdBQVc7Z0JBR2MsY0FBYztzQkFBN0MsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ1MsY0FBYztzQkFBN0MsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ1EsYUFBYTtzQkFBM0MsS0FBSzt1QkFBQyxlQUFlO2dCQUVhLGlCQUFpQjtzQkFBbkQsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBQ08sZUFBZTtzQkFBL0MsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBQ00sWUFBWTtzQkFBekMsS0FBSzt1QkFBQyxjQUFjO2dCQUlaLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9lcGFBZGRyZXNzU2VydmljZSB9IGZyb20gJy4vb2VwYS1hZGRyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2VwYUNvbXBvbmVudElkU2VydmljZSwgT0VQQUFkZHJlc3MgfSBmcm9tICdAb2hpb2VwYS9vZXBhLWNvbW1vbi1saWInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLWFkZHJlc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkcmVzcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9hZGRyZXNzLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBBZGRyZXNzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIHppcENvZGVNYXNrID0gWy9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkL107XG4gIHB1YmxpYyBzaG93U3RhdGVzID0gdHJ1ZTtcbiAgcHVibGljIHVzU3RhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgY291bnRyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgY29tcG9uZW50SWQgPSAnT2VwYUFkZHJlc3NDb21wb25lbnQnO1xuXG4gIFxuICBwcml2YXRlIG9yaWdpbmFsQWRkcmVzcyE6IE9FUEFBZGRyZXNzO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICBASW5wdXQoKSBncm91cCE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRpb24gPSBmYWxzZTtcblxuICBASW5wdXQoJ2FkZHJlc3NPbmVMYWJlbCcpIHB1YmxpYyBhZGRyZXNzT25lTGFiZWw6IHN0cmluZyA9ICdBZGRyZXNzIDEnO1xuICBASW5wdXQoJ2FkZHJlc3NUd29MYWJlbCcpIHB1YmxpYyBhZGRyZXNzVHdvTGFiZWw6IHN0cmluZyA9ICdBZGRyZXNzIDInO1xuICBASW5wdXQoJ2NpdHlMYWJlbCcpIHB1YmxpYyBjaXR5TGFiZWw6IHN0cmluZyA9ICdDaXR5JztcbiAgQElucHV0KCdzdGF0ZUxhYmVsJykgcHVibGljIHN0YXRlTGFiZWw6IHN0cmluZyA9ICdTdGF0ZSc7XG4gIEBJbnB1dCgnemlwQ29kZUxhYmVsJykgcHVibGljIHppcENvZGVMYWJlbDogc3RyaW5nID0gJ1ppcCBDb2RlJztcbiAgQElucHV0KCdkaXNhYmxlU3RhdGUnKSBwdWJsaWMgZGlzYWJsZVN0YXRlOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCdpc1NlYXJjaCcpIHB1YmxpYyBpc1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnaGlkZUxpbmUyJykgcHVibGljIGhpZGVMaW5lMiA9IGZhbHNlO1xuXG4gIC8vIG1heCBsZW5ndGggdmFsdWVzLiBvdmVycmlkZSBpZiBuZWVkZWRcbiAgQElucHV0KCdsaW5lMU1heExlbmd0aCcpIHB1YmxpYyBsaW5lMU1heExlbmd0aCA9IDQwO1xuICBASW5wdXQoJ2xpbmUyTWF4TGVuZ3RoJykgcHVibGljIGxpbmUyTWF4TGVuZ3RoID0gNDA7XG4gIEBJbnB1dCgnY2l0eU1heExlbmd0aCcpIHB1YmxpYyBjaXR5TWF4TGVuZ3RoID0gMzA7XG4gIFxuICBASW5wdXQoJ2ZvcmVpZ25TdGF0ZUxhYmVsJykgcHVibGljIGZvcmVpZ25TdGF0ZUxhYmVsOiBzdHJpbmcgPSAnRm9yZWlnbiBTdGF0ZSc7XG4gIEBJbnB1dCgnZm9yZWlnblppcExhYmVsJykgcHVibGljIGZvcmVpZ25aaXBMYWJlbDogc3RyaW5nID0gJ0ZvcmVpZ24gWmlwIENvZGUnO1xuICBASW5wdXQoJ2NvdW50cnlMYWJlbCcpIHB1YmxpYyBjb3VudHJ5TGFiZWw6IHN0cmluZyA9ICdDb3VudHJ5JztcblxuICAvLyBUaGVzZSB2YWx1ZXMgYXJlIG9ubHkgdXNlZCBpZiB5b3Ugd2FudCBhIFwic2FtZSBhc1wiIGNoZWNrYm94IGZvciB0aGUgYWRkcmVzc1xuICAvLyBBbGwgdGhyZWUgdmFsdWVzIG11c3QgYmUgcHJvdmlkZWQgaWYgdXNpbmcgdGhlIFwic2FtZSBhc1wiIGNhcGFiaWxpdHlcbiAgQElucHV0KCkgc2FtZUFzR3JvdXAgITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBzYW1lQXNMYWJlbCAhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNhbWVBc0NoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFkZHJlc3NTZXJ2aWNlOiBPZXBhQWRkcmVzc1NlcnZpY2UsIHByaXZhdGUgaWRTZXJ2aWNlOiBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlKSB7XG4gICAgdGhpcy5hZGRyZXNzU2VydmljZS5nZXRTdGF0ZXMoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHN0YXRlcykgPT4ge1xuICAgICAgdGhpcy51c1N0YXRlcyA9IHN0YXRlcztcbiAgICB9LCBlcnJvcjogZXJyID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiByZXRyaWV2aW5nIHN0YXRlcyBmb3IgYWRkcmVzczogJyArIGVycik7XG4gICAgfX0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZ3JvdXApIHtcbiAgICAgIFxuICAgICAgaWYodGhpcy5ncm91cC5jb250cm9sc1snY291bnRyeSddKXtcbiAgICAgICAgIHRoaXMuYWRkcmVzc1NlcnZpY2UuZ2V0Q291bnRyaWVzKCkuc3Vic2NyaWJlKHsgXG4gICAgICAgICAgbmV4dDogKGNvdW50cmllczogYW55KSA9PiB7XG4gICAgICAgICAgICBsZXQgY291bnRyeUxpc3Q6c3RyaW5nW109W107XG4gICAgICAgICAgICAvL1JlbW92ZSBcIkNheW1lbiBJc2xhbmRzXCJcbiAgICAgICAgICAgIGNvdW50cmllcy5mb3JFYWNoKChjb3VudHJ5OiBhbnkpID0+e1xuICAgICAgICAgICAgICBpZihjb3VudHJ5ICE9PSBcIkNheW1lbiBJc2xhbmRzXCIpXG4gICAgICAgICAgICAgICAgY291bnRyeUxpc3QucHVzaChjb3VudHJ5KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0aGlzLmNvdW50cmllcyA9IGNvdW50cnlMaXN0O1xuICAgICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIHJldHJpZXZpbmcgY291bnRyaWVzIGZvciBhZGRyZXNzOiAnICsgZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5jb21wb25lbnRJZCA9IHRoaXMuaWRTZXJ2aWNlLmdldENvbXBvbmVudElkKHRoaXMuZ3JvdXApO1xuICAgICAgdGhpcy5vcmlnaW5hbEFkZHJlc3MgPSB0aGlzLmFkZHJlc3NGcm9tRm9ybUdyb3VwKHRoaXMuZ3JvdXApO1xuICAgICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVDb3B5RnJvbVNlbGVjdGlvbigpIHtcbiAgICB0aGlzLnNhbWVBc0NoZWNrZWQgPSAhdGhpcy5zYW1lQXNDaGVja2VkO1xuICAgIGlmICh0aGlzLnNhbWVBc0NoZWNrZWQpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tQ2hhbmdlcygpO1xuICAgICAgdGhpcy5ncm91cC5wYXRjaFZhbHVlKHRoaXMuYWRkcmVzc0Zyb21Gb3JtR3JvdXAodGhpcy5zYW1lQXNHcm91cCkpO1xuICAgICAgdGhpcy5ncm91cC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9DaGFuZ2VzKCk7XG4gICAgICB0aGlzLmdyb3VwLnBhdGNoVmFsdWUodGhpcy5vcmlnaW5hbEFkZHJlc3MpO1xuICAgICAgdGhpcy5ncm91cC5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZHJlc3NGcm9tRm9ybUdyb3VwKGdyb3VwOiBGb3JtR3JvdXApOiBPRVBBQWRkcmVzcyB7XG4gICAgbGV0IGFkZHJlc3M6IE9FUEFBZGRyZXNzID0ge307XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICBhZGRyZXNzID0ge1xuICAgICAgICBsaW5lMTogZ3JvdXAuY29udHJvbHNbJ2xpbmUxJ10udmFsdWUsXG4gICAgICAgIGxpbmUyOiBncm91cC5jb250cm9sc1snbGluZTInXS52YWx1ZSxcbiAgICAgICAgY2l0eTogZ3JvdXAuY29udHJvbHNbJ2NpdHknXS52YWx1ZSxcbiAgICAgICAgc3RhdGU6IGdyb3VwLmNvbnRyb2xzWydzdGF0ZSddLnZhbHVlLFxuICAgICAgICBwb3N0YWxDb2RlOiAoZ3JvdXAuY29udHJvbHNbJ2NvdW50cnknXSAmJiBncm91cC5jb250cm9sc1snY291bnRyeSddLnZhbHVlICE9PSAnVVNBJykgPyBncm91cC5jb250cm9sc1snZm9yZWlnblppcCddOmdyb3VwLmNvbnRyb2xzWydwb3N0YWxDb2RlJ10udmFsdWUsXG4gICAgICAgIGZvcmVpZ25TdGF0ZTogZ3JvdXAuY29udHJvbHNbJ2ZvcmVpZ25TdGF0ZSddPyBncm91cC5jb250cm9sc1snZm9yZWlnblN0YXRlJ10udmFsdWU6bnVsbCxcbiAgICAgICAgY291bnRyeTogZ3JvdXAuY29udHJvbHNbJ2NvdW50cnknXSA/IGdyb3VwLmNvbnRyb2xzWydjb3VudHJ5J10udmFsdWU6bnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9DaGFuZ2VzKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5ncm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGFkZHJlc3MgPT4ge1xuICAgICAgdGhpcy5vcmlnaW5hbEFkZHJlc3MubGluZTEgPSBhZGRyZXNzLmxpbmUxO1xuICAgICAgdGhpcy5vcmlnaW5hbEFkZHJlc3MubGluZTIgPSBhZGRyZXNzLmxpbmUyO1xuICAgICAgdGhpcy5vcmlnaW5hbEFkZHJlc3MuY2l0eSA9IGFkZHJlc3MuY2l0eTtcbiAgICAgIHRoaXMub3JpZ2luYWxBZGRyZXNzLnN0YXRlID0gYWRkcmVzcy5zdGF0ZTtcbiAgICAgIHRoaXMub3JpZ2luYWxBZGRyZXNzLnBvc3RhbENvZGUgPSAoYWRkcmVzcy5jb3VudHJ5ICYmIGFkZHJlc3MuY291bnRyeSAhPT0gJ1VTQScpID8gYWRkcmVzcy5mb3JlaWduWmlwOmFkZHJlc3MucG9zdGFsQ29kZTtcbiAgICAgIHRoaXMub3JpZ2luYWxBZGRyZXNzLmZvcmVpZ25TdGF0ZSA9IGFkZHJlc3MuZm9yZWlnblN0YXRlID8gYWRkcmVzcy5mb3JlaWduU3RhdGUgOiBudWxsO1xuICAgICAgdGhpcy5vcmlnaW5hbEFkZHJlc3MuY291bnRyeSA9IGFkZHJlc3MuY291bnRyeSA/IGFkZHJlc3MuY291bnRyeSA6IG51bGw7XG4gICAgICBcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVGcm9tQ2hhbmdlcygpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwic2FtZUFzR3JvdXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIFtuZ1N0eWxlXT1cInsgJ2ZvbnQtd2VpZ2h0Jzogc2FtZUFzQ2hlY2tlZCAmJiBncm91cC5kaXNhYmxlZCA/ICdib2xkJyA6ICcnIH1cIiBbZm9yXT1cImNvbXBvbmVudElkKydfQ29weUZyb21DaGVja2JveCdcIj5cbiAgICAgICAgICAgICAgICAgICAge3tzYW1lQXNMYWJlbH19IFxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2lkXT1cImNvbXBvbmVudElkKydfQ29weUZyb21DaGVja2JveCdcIiB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJzYW1lQXNDaGVja2VkXCIgKGNoYW5nZSk9XCJ0b2dnbGVDb3B5RnJvbVNlbGVjdGlvbigpXCIgW2Rpc2FibGVkXT1cImdyb3VwLnBhcmVudD8uZGlzYWJsZWRcIi8+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIiFzYW1lQXNHcm91cCB8fCAhc2FtZUFzQ2hlY2tlZFwiIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiY29tcG9uZW50SWQrJ19MaW5lMUlucHV0J1wiPnt7YWRkcmVzc09uZUxhYmVsfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgZ3JvdXAuY29udHJvbHNbJ2xpbmUxJ10uc3RhdHVzID09PSAnSU5WQUxJRCd9XCIgXG4gICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImlzU2VhcmNoID8gJ3NlYXJjaCcgOiAndGV4dCdcIiBwbGFjZWhvbGRlcj1cIkFkZHJlc3NcIiBtYXhsZW5ndGg9XCI0MFwiIGZvcm1Db250cm9sTmFtZT1cImxpbmUxXCIgW21heGxlbmd0aF09XCJsaW5lMU1heExlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJjb21wb25lbnRJZCsnX0xpbmUxSW5wdXQnXCI+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ3JvdXAuY29udHJvbHNbJ2xpbmUxJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj57e2FkZHJlc3NPbmVMYWJlbH19IGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJncm91cC5jb250cm9sc1snbGluZTEnXS5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj57e2FkZHJlc3NPbmVMYWJlbH19IGhhcyBleGNlZWRlZCBpdHMgbWF4aW11bSBsZW5ndGg8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhaGlkZUxpbmUyXCIgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJjb21wb25lbnRJZCsnX0xpbmUySW5wdXQnXCI+e3thZGRyZXNzVHdvTGFiZWx9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgW25nQ2xhc3NdPVwieydpcy1pbnZhbGlkJzpzaG93VmFsaWRhdGlvbiAmJiBncm91cC5jb250cm9sc1snbGluZTInXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIlxuICAgICAgICAgICAgICAgIFt0eXBlXT1cImlzU2VhcmNoID8gJ3NlYXJjaCcgOiAndGV4dCdcIiBwbGFjZWhvbGRlcj1cIkFkZHJlc3NcIiBtYXhsZW5ndGg9XCI0MFwiIGZvcm1Db250cm9sTmFtZT1cImxpbmUyXCIgW21heGxlbmd0aF09XCJsaW5lMk1heExlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJjb21wb25lbnRJZCsnX0xpbmUySW5wdXQnXCI+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ3JvdXAuY29udHJvbHNbJ2xpbmUyJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj57e2FkZHJlc3NUd29MYWJlbH19IGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJncm91cC5jb250cm9sc1snbGluZTInXS5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj57e2FkZHJlc3NUd29MYWJlbH19IGhhcyBleGNlZWRlZCBpdHMgbWF4aW11bSBsZW5ndGg8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cImNvbXBvbmVudElkKydfQ2l0eUlucHV0J1wiPnt7Y2l0eUxhYmVsfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgZ3JvdXAuY29udHJvbHNbJ2NpdHknXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIlxuICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJpc1NlYXJjaCA/ICdzZWFyY2gnIDogJ3RleHQnXCIgcGxhY2Vob2xkZXI9XCJDaXR5XCIgbWF4bGVuZ3RoPVwiMzBcIiBmb3JtQ29udHJvbE5hbWU9XCJjaXR5XCIgW21heGxlbmd0aF09XCJjaXR5TWF4TGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvbXBvbmVudElkKydfQ2l0eUlucHV0J1wiPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdyb3VwLmNvbnRyb2xzWydjaXR5J10uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj57e2NpdHlMYWJlbH19IGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJncm91cC5jb250cm9sc1snY2l0eSddLmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiPnt7Y2l0eUxhYmVsfX0gaGFzIGV4Y2VlZGVkIGl0cyBtYXhpbXVtIGxlbmd0aDwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTdGF0ZXMgJiYgKCFncm91cC5jb250cm9sc1snY291bnRyeSddIHx8IGdyb3VwLmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0nVVNBJylcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJjb21wb25lbnRJZCsnX1N0YXRlU2VsZWN0J1wiPnt7c3RhdGVMYWJlbH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzWydzdGF0ZSddLnN0YXR1cyA9PT0gJ0lOVkFMSUQnfVwiIFxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiQWRkcmVzc1N0YXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RhdGVcIiBbaWRdPVwiY29tcG9uZW50SWQrJ19TdGF0ZVNlbGVjdCdcIiBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlU3RhdGUgfHwgZ3JvdXAuZGlzYWJsZWQgPyAnJyA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBzIG9mIHVzU3RhdGVzXCIgW25nVmFsdWVdPVwic1wiPnt7c319PC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdyb3VwLmNvbnRyb2xzWydzdGF0ZSddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+U3RhdGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZ3JvdXAuY29udHJvbHNbJ2NvdW50cnknXSAgfHwgZ3JvdXAuZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSdVU0EnXCIgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiY29tcG9uZW50SWQrJ19aaXBJbnB1dCdcIj57e3ppcENvZGVMYWJlbH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzWydwb3N0YWxDb2RlJ10uc3RhdHVzID09PSAnSU5WQUxJRCd9XCJcbiAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiaXNTZWFyY2ggPyAnc2VhcmNoJyA6ICd0ZXh0J1wiIHBsYWNlaG9sZGVyPVwiWmlwIENvZGVcIiBmb3JtQ29udHJvbE5hbWU9XCJwb3N0YWxDb2RlXCIgW2lkXT1cImNvbXBvbmVudElkKydfWmlwSW5wdXQnXCIgbWFzaz1cIjAwMDAwXCI+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ3JvdXAuY29udHJvbHNbJ3Bvc3RhbENvZGUnXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPnt7emlwQ29kZUxhYmVsfX0gaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdyb3VwLmNvbnRyb2xzWydwb3N0YWxDb2RlJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpXCI+e3t6aXBDb2RlTGFiZWx9fSBtdXN0IGNvbnRhaW4gZXhhY3RseSA1IGRpZ2l0czwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImdyb3VwLmNvbnRyb2xzWydjb3VudHJ5J10gJiYgZ3JvdXAuZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlICE9PSdVU0EnXCIgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cImNvbXBvbmVudElkKydfRm9yZWlnblN0YXRlSW5wdXQnXCI+e3tmb3JlaWduU3RhdGVMYWJlbH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzWydmb3JlaWduU3RhdGUnXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJGb3JlaWduIFN0YXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZm9yZWlnblN0YXRlXCIgW2lkXT1cImNvbXBvbmVudElkKydfRm9yZWlnblN0YXRlSW5wdXQnXCIgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZVN0YXRlIHx8IGdyb3VwLmRpc2FibGVkID8gJycgOiBudWxsXCIgPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdyb3VwLmNvbnRyb2xzWydmb3JlaWduU3RhdGUnXS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPnt7Zm9yZWlnblN0YXRlTGFiZWx9fSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJjb21wb25lbnRJZCsnX2ZvcmVpZ25aaXBJbnB1dCdcIj57e2ZvcmVpZ25aaXBMYWJlbH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzWydmb3JlaWduWmlwJ10uc3RhdHVzID09PSAnSU5WQUxJRCd9XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRm9yZWlnbiBaaXAgQ29kZVwiIGZvcm1Db250cm9sTmFtZT1cImZvcmVpZ25aaXBcIiBbaWRdPVwiY29tcG9uZW50SWQrJ19mb3JlaWduWmlwSW5wdXQnXCIgID5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJncm91cC5jb250cm9sc1snZm9yZWlnblppcCddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+e3tmb3JlaWduWmlwTGFiZWx9fSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ3JvdXAuY29udHJvbHNbJ2ZvcmVpZ25aaXAnXS5oYXNFcnJvcignbWlubGVuZ3RoJylcIj57e2ZvcmVpZ25aaXBMYWJlbH19IG11c3QgY29udGFpbiBleGFjdGx5ID8gZGlnaXRzPC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PiBcbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImdyb3VwLmNvbnRyb2xzWydjb3VudHJ5J11cIiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiY29tcG9uZW50SWQrJ19Db3VudHJ5U2VsZWN0J1wiPnt7Y291bnRyeUxhYmVsfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6c2hvd1ZhbGlkYXRpb24gJiYgZ3JvdXAuY29udHJvbHNbJ2NvdW50cnknXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIiBcbiAgICAgICAgICAgICAgICBuYW1lPVwiQWRkcmVzc0NvdW50cnlcIiBmb3JtQ29udHJvbE5hbWU9XCJjb3VudHJ5XCIgW2lkXT1cImNvbXBvbmVudElkKydfQ291bnRyeVNlbGVjdCdcIiBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlU3RhdGUgfHwgZ3JvdXAuZGlzYWJsZWQgPyAnJyA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvdW50cmllc1wiIFtuZ1ZhbHVlXT1cImNcIj57e2N9fTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJncm91cC5jb250cm9sc1snY291bnRyeSddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+Q291bnRyeXt7Y291bnRyeUxhYmVsfX0gaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
@@ -107,11 +107,11 @@ export class FileUploadComponent {
107
107
  }
108
108
  }
109
109
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileUploadComponent, deps: [{ token: i1.OepaComponentIdService }, { token: i1.OepaFileUtilService }, { token: i2.BsModalService }], target: i0.ɵɵFactoryTarget.Component });
110
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FileUploadComponent, selector: "oepa-file-upload", inputs: { group: "group", field: "field", label: "label", errorLabel: "errorLabel", blankForm: "blankForm", blankFormUrl: "blankFormUrl", showValidation: "showValidation", domain: "domain", attachment: "attachment", accept: "accept", removeAllowed: "removeAllowed", parserName: "parserName", parserReport: "parserReport" }, outputs: { fileUploaded: "fileUploaded", fileRemoved: "fileRemoved", download: "download" }, ngImport: i0, template: "<form [formGroup]=\"group\">\n <div *ngIf=\"!attachment || !attachment.userFilename\" class=\"form-group\">\n <div>\n <label *ngIf=\"label\">{{label}}</label>\n <span *ngIf=\"blankFormUrl\">&nbsp;<a href=\"{{blankFormUrl}}\" target=\"_blank\">Blank Form</a></span>\n <span *ngIf=\"blankForm\">&nbsp;<a href=\"javascript:void(0)\" (click)=\"downloadBlankForm()\">Blank Form</a></span>\n <div class=\"form-group\">\n <div class=\"input-group\">\n <span class=\"input-group-btn\">\n <label class=\"btn btn-primary btn-file\">\n Browse&hellip; \n <input type=\"file\" style=\"display: none;\" (change)=\"fileChange($event)\" \n [id]=\"componentId+'_BrowseBtn'\" [name]=\"componentId+'_BrowseBtn'\" class=\"form-control\"\n [attr.accept]=\"accept ? accept : null\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">\n </label>\n </span>\n <input [ngClass]=\"{'is-invalid':showValidation && group.controls[field].status === 'INVALID'}\" \n type=\"text\" class=\"form-control\" placeholder=\"No file chosen\" [id]=\"componentId+'_Input'\" [name]=\"componentId+'_Input'\" readonly>\n <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls[field].status === 'INVALID'\">{{errorLabel || label}} is required</small>\n </div>\n <!-- dummy input field for validation purposes -->\n <input type=\"text\" [hidden]=\"true\" [formControlName]=\"field\" id=\"field\"/>\n </div>\n </div>\n <div *ngIf=\"uploadError\" class=\"alert alert-danger\" role=\"alert\">{{uploadError}}</div>\n <div *ngIf=\"parserReport\">\n <div *ngIf=\"parserReport.successful\" class=\"alert alert-info\" role=\"alert\">Spreadsheet was successfully parsed.</div>\n <div *ngIf=\"!parserReport.successful\" class=\"alert alert-danger\" role=\"alert\">\n There are errors in the uploaded spreadsheet:\n <ul>\n <li *ngFor=\"let error of parserReport.errors\">{{error.message}}</li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"attachment && attachment.userFilename\">\n <div>\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <a (click)=\"downloadFile(attachment)\" [id]=\"componentId+'_DownloadFileLink'\" [name]=\"componentId+'_DownloadFileLink'\" \n class=\"form-control\">{{attachment.userFilename}}</a>\n <span *ngIf=\"removeAllowed\" class=\"input-group-btn\">\n <button type=\"button\" class=\"btn btn-primary\" [id]=\"componentId+'_RemoveFileBtn'\" [name]=\"componentId+'_RemoveFileBtn'\"\n (click)=\"removeFile()\" [disabled]=\"group.controls[field].status === 'DISABLED'\" aria-label=\"Remove Attachment\">Remove Attachment</button>\n \n\t\t\t</span>\n </div>\n </div>\n </div>\n</form>", styles: ["a:hover{cursor:pointer}a{color:#3399f3!important}\n"], dependencies: [{ 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: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
110
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FileUploadComponent, selector: "oepa-file-upload", inputs: { group: "group", field: "field", label: "label", errorLabel: "errorLabel", blankForm: "blankForm", blankFormUrl: "blankFormUrl", showValidation: "showValidation", domain: "domain", attachment: "attachment", accept: "accept", removeAllowed: "removeAllowed", parserName: "parserName", parserReport: "parserReport" }, outputs: { fileUploaded: "fileUploaded", fileRemoved: "fileRemoved", download: "download" }, ngImport: i0, template: "<form [formGroup]=\"group\">\n <div *ngIf=\"!attachment || !attachment.userFilename\" class=\"form-group\">\n <div>\n <span *ngIf=\"label\">{{label}}</span>\n <span *ngIf=\"blankFormUrl\">&nbsp;<a href=\"{{blankFormUrl}}\" target=\"_blank\">Blank Form</a></span>\n <span *ngIf=\"blankForm\">&nbsp;<a href=\"javascript:void(0)\" (click)=\"downloadBlankForm()\">Blank Form</a></span>\n <div class=\"form-group\">\n <div class=\"input-group\">\n <span class=\"input-group-btn\">\n <label class=\"btn btn-primary btn-file\" [for]=\"componentId+'_BrowseBtn'\">\n Browse&hellip; \n <input type=\"file\" style=\"display: none;\" (change)=\"fileChange($event)\" \n [id]=\"componentId+'_BrowseBtn'\" [name]=\"componentId+'_BrowseBtn'\" class=\"form-control\"\n [attr.accept]=\"accept ? accept : null\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">\n </label>\n </span>\n <label [for]=\"componentId+'_Input'\" class=\"sr-only\">Selected file</label>\n <input [ngClass]=\"{'is-invalid':showValidation && group.controls[field].status === 'INVALID'}\" \n type=\"text\" class=\"form-control\" placeholder=\"No file chosen\" [id]=\"componentId+'_Input'\" [name]=\"componentId+'_Input'\" readonly>\n <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls[field].status === 'INVALID'\">{{errorLabel || label}} is required</small>\n </div>\n <!-- dummy input field for validation purposes -->\n <input type=\"hidden\" [hidden]=\"true\" [formControlName]=\"field\" id=\"field\"/>\n </div>\n </div>\n <div *ngIf=\"uploadError\" class=\"alert alert-danger\" role=\"alert\">{{uploadError}}</div>\n <div *ngIf=\"parserReport\">\n <div *ngIf=\"parserReport.successful\" class=\"alert alert-info\" role=\"alert\">Spreadsheet was successfully parsed.</div>\n <div *ngIf=\"!parserReport.successful\" class=\"alert alert-danger\" role=\"alert\">\n There are errors in the uploaded spreadsheet:\n <ul>\n <li *ngFor=\"let error of parserReport.errors\">{{error.message}}</li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"attachment && attachment.userFilename\">\n <div>\n <span *ngIf=\"label\">{{label}}</span>\n <div class=\"input-group\">\n <a (click)=\"downloadFile(attachment)\" [id]=\"componentId+'_DownloadFileLink'\" [name]=\"componentId+'_DownloadFileLink'\" \n class=\"form-control\">{{attachment.userFilename}}</a>\n <span *ngIf=\"removeAllowed\" class=\"input-group-btn\">\n <button type=\"button\" class=\"btn btn-primary\" [id]=\"componentId+'_RemoveFileBtn'\" [name]=\"componentId+'_RemoveFileBtn'\"\n (click)=\"removeFile()\" [disabled]=\"group.controls[field].status === 'DISABLED'\" aria-label=\"Remove Attachment\">Remove Attachment</button>\n \n\t\t\t</span>\n </div>\n </div>\n </div>\n</form>", styles: ["a:hover{cursor:pointer}a{color:#3399f3!important}\n"], dependencies: [{ 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: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
111
111
  }
112
112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileUploadComponent, decorators: [{
113
113
  type: Component,
114
- args: [{ selector: 'oepa-file-upload', template: "<form [formGroup]=\"group\">\n <div *ngIf=\"!attachment || !attachment.userFilename\" class=\"form-group\">\n <div>\n <label *ngIf=\"label\">{{label}}</label>\n <span *ngIf=\"blankFormUrl\">&nbsp;<a href=\"{{blankFormUrl}}\" target=\"_blank\">Blank Form</a></span>\n <span *ngIf=\"blankForm\">&nbsp;<a href=\"javascript:void(0)\" (click)=\"downloadBlankForm()\">Blank Form</a></span>\n <div class=\"form-group\">\n <div class=\"input-group\">\n <span class=\"input-group-btn\">\n <label class=\"btn btn-primary btn-file\">\n Browse&hellip; \n <input type=\"file\" style=\"display: none;\" (change)=\"fileChange($event)\" \n [id]=\"componentId+'_BrowseBtn'\" [name]=\"componentId+'_BrowseBtn'\" class=\"form-control\"\n [attr.accept]=\"accept ? accept : null\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">\n </label>\n </span>\n <input [ngClass]=\"{'is-invalid':showValidation && group.controls[field].status === 'INVALID'}\" \n type=\"text\" class=\"form-control\" placeholder=\"No file chosen\" [id]=\"componentId+'_Input'\" [name]=\"componentId+'_Input'\" readonly>\n <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls[field].status === 'INVALID'\">{{errorLabel || label}} is required</small>\n </div>\n <!-- dummy input field for validation purposes -->\n <input type=\"text\" [hidden]=\"true\" [formControlName]=\"field\" id=\"field\"/>\n </div>\n </div>\n <div *ngIf=\"uploadError\" class=\"alert alert-danger\" role=\"alert\">{{uploadError}}</div>\n <div *ngIf=\"parserReport\">\n <div *ngIf=\"parserReport.successful\" class=\"alert alert-info\" role=\"alert\">Spreadsheet was successfully parsed.</div>\n <div *ngIf=\"!parserReport.successful\" class=\"alert alert-danger\" role=\"alert\">\n There are errors in the uploaded spreadsheet:\n <ul>\n <li *ngFor=\"let error of parserReport.errors\">{{error.message}}</li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"attachment && attachment.userFilename\">\n <div>\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <a (click)=\"downloadFile(attachment)\" [id]=\"componentId+'_DownloadFileLink'\" [name]=\"componentId+'_DownloadFileLink'\" \n class=\"form-control\">{{attachment.userFilename}}</a>\n <span *ngIf=\"removeAllowed\" class=\"input-group-btn\">\n <button type=\"button\" class=\"btn btn-primary\" [id]=\"componentId+'_RemoveFileBtn'\" [name]=\"componentId+'_RemoveFileBtn'\"\n (click)=\"removeFile()\" [disabled]=\"group.controls[field].status === 'DISABLED'\" aria-label=\"Remove Attachment\">Remove Attachment</button>\n \n\t\t\t</span>\n </div>\n </div>\n </div>\n</form>", styles: ["a:hover{cursor:pointer}a{color:#3399f3!important}\n"] }]
114
+ args: [{ selector: 'oepa-file-upload', template: "<form [formGroup]=\"group\">\n <div *ngIf=\"!attachment || !attachment.userFilename\" class=\"form-group\">\n <div>\n <span *ngIf=\"label\">{{label}}</span>\n <span *ngIf=\"blankFormUrl\">&nbsp;<a href=\"{{blankFormUrl}}\" target=\"_blank\">Blank Form</a></span>\n <span *ngIf=\"blankForm\">&nbsp;<a href=\"javascript:void(0)\" (click)=\"downloadBlankForm()\">Blank Form</a></span>\n <div class=\"form-group\">\n <div class=\"input-group\">\n <span class=\"input-group-btn\">\n <label class=\"btn btn-primary btn-file\" [for]=\"componentId+'_BrowseBtn'\">\n Browse&hellip; \n <input type=\"file\" style=\"display: none;\" (change)=\"fileChange($event)\" \n [id]=\"componentId+'_BrowseBtn'\" [name]=\"componentId+'_BrowseBtn'\" class=\"form-control\"\n [attr.accept]=\"accept ? accept : null\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">\n </label>\n </span>\n <label [for]=\"componentId+'_Input'\" class=\"sr-only\">Selected file</label>\n <input [ngClass]=\"{'is-invalid':showValidation && group.controls[field].status === 'INVALID'}\" \n type=\"text\" class=\"form-control\" placeholder=\"No file chosen\" [id]=\"componentId+'_Input'\" [name]=\"componentId+'_Input'\" readonly>\n <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls[field].status === 'INVALID'\">{{errorLabel || label}} is required</small>\n </div>\n <!-- dummy input field for validation purposes -->\n <input type=\"hidden\" [hidden]=\"true\" [formControlName]=\"field\" id=\"field\"/>\n </div>\n </div>\n <div *ngIf=\"uploadError\" class=\"alert alert-danger\" role=\"alert\">{{uploadError}}</div>\n <div *ngIf=\"parserReport\">\n <div *ngIf=\"parserReport.successful\" class=\"alert alert-info\" role=\"alert\">Spreadsheet was successfully parsed.</div>\n <div *ngIf=\"!parserReport.successful\" class=\"alert alert-danger\" role=\"alert\">\n There are errors in the uploaded spreadsheet:\n <ul>\n <li *ngFor=\"let error of parserReport.errors\">{{error.message}}</li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"attachment && attachment.userFilename\">\n <div>\n <span *ngIf=\"label\">{{label}}</span>\n <div class=\"input-group\">\n <a (click)=\"downloadFile(attachment)\" [id]=\"componentId+'_DownloadFileLink'\" [name]=\"componentId+'_DownloadFileLink'\" \n class=\"form-control\">{{attachment.userFilename}}</a>\n <span *ngIf=\"removeAllowed\" class=\"input-group-btn\">\n <button type=\"button\" class=\"btn btn-primary\" [id]=\"componentId+'_RemoveFileBtn'\" [name]=\"componentId+'_RemoveFileBtn'\"\n (click)=\"removeFile()\" [disabled]=\"group.controls[field].status === 'DISABLED'\" aria-label=\"Remove Attachment\">Remove Attachment</button>\n \n\t\t\t</span>\n </div>\n </div>\n </div>\n</form>", styles: ["a:hover{cursor:pointer}a{color:#3399f3!important}\n"] }]
115
115
  }], ctorParameters: () => [{ type: i1.OepaComponentIdService }, { type: i1.OepaFileUtilService }, { type: i2.BsModalService }], propDecorators: { group: [{
116
116
  type: Input
117
117
  }], field: [{
@@ -145,4 +145,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
145
145
  }], download: [{
146
146
  type: Output
147
147
  }] } });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7OztBQVNoRyxNQUFNLE9BQU8sbUJBQW1CO0lBc0JWO0lBQTJDO0lBQ3JEO0lBdEJILFdBQVcsR0FBRyx5QkFBeUIsQ0FBQztJQUN4QyxXQUFXLEdBQVcsRUFBRSxDQUFDO0lBRXZCLEtBQUssQ0FBYTtJQUNsQixLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixTQUFTLENBQTZCO0lBQ3RDLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixNQUFNLEdBQUcsYUFBYSxDQUFDO0lBQ3ZCLFVBQVUsQ0FBNEI7SUFDdEMsTUFBTSxHQUFXLEVBQUUsQ0FBQztJQUNwQixhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFDeEIsWUFBWSxDQUFvQjtJQUUvQixZQUFZLEdBQWlDLElBQUksWUFBWSxFQUFFLENBQUM7SUFDaEUsV0FBVyxHQUFpQyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQy9ELFFBQVEsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUV0RSxZQUFvQixTQUFpQyxFQUFVLGVBQW9DLEVBQ3pGLFlBQTRCO1FBRGxCLGNBQVMsR0FBVCxTQUFTLENBQXdCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQXFCO1FBQ3pGLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtJQUFJLENBQUM7SUFFM0MsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzVFLENBQUM7SUFDSCxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQVU7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsTUFBTSxRQUFRLEdBQWEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDOUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxHQUFTLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUvQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQzlDLElBQUksRUFBRSxDQUFDLFVBQTBCLEVBQUUsRUFBRTt3QkFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ2xFLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7d0JBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNyQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO3dCQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsdUJBQXVCLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDekQsQ0FBQztpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxpRUFBaUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3JHLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUlPLHFCQUFxQixDQUFDLElBQVE7UUFDcEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFDYixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVNLFVBQVU7UUFDZixNQUFNLEtBQUssR0FBZSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0UsS0FBSyxDQUFDLE9BQVEsQ0FBQyxVQUFVLEdBQUcsbUJBQW1CLENBQUM7UUFDaEQsS0FBSyxDQUFDLE9BQVEsQ0FBQyxRQUFRLEdBQUcsd0NBQXdDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLElBQUksV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN4SCxLQUFLLENBQUMsT0FBUSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDdkMsS0FBSyxDQUFDLE9BQVEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLEtBQUssQ0FBQyxPQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDeEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLFVBQTBCO1FBQzVDLG1GQUFtRjtRQUNuRixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6RSxPQUFPLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FDM0QsSUFBSSxDQUFDLEVBQUU7Z0JBQ0wsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkYsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDYixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3BELENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsV0FBVyxHQUFHLDJCQUEyQixHQUFHLFVBQVUsQ0FBQyxZQUFZLEdBQUcsOEJBQThCLENBQUM7Z0JBQzVHLENBQUM7WUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLFdBQVcsR0FBRywwQkFBMEIsR0FBRyxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7WUFDdkYsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQzt3R0F6R1UsbUJBQW1COzRGQUFuQixtQkFBbUIseWRDaEJoQyxxMUZBa0RPOzs0RkRsQ00sbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGtCQUFrQjswSkFRbkIsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5cbmltcG9ydCB7IE9lcGFBdHRhY2htZW50LCBPZXBhUGFyc2VyUmVwb3J0LCBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1jb21tb24tbGliJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybWF0aW9uLW1vZGFsL2NvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2VwYUZpbGVVdGlsU2VydmljZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtY29tbW9uLWxpYic7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1maWxlLXVwbG9hZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIGNvbXBvbmVudElkID0gJ09lcGFGaWxlVXBsb2FkQ29tcG9uZW50JztcbiAgcHVibGljIHVwbG9hZEVycm9yOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBncm91cCE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgZmllbGQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yTGFiZWw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBibGFua0Zvcm06IE9lcGFBdHRhY2htZW50IHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBibGFua0Zvcm1Vcmw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBzaG93VmFsaWRhdGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkb21haW4gPSAnYXBwbGljYXRpb24nO1xuICBASW5wdXQoKSBhdHRhY2htZW50OiBPZXBhQXR0YWNobWVudHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBhY2NlcHQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSByZW1vdmVBbGxvd2VkID0gdHJ1ZTtcbiAgQElucHV0KCkgcGFyc2VyTmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHBhcnNlclJlcG9ydCE6IE9lcGFQYXJzZXJSZXBvcnQ7XG5cbiAgQE91dHB1dCgpIGZpbGVVcGxvYWRlZDogRXZlbnRFbWl0dGVyPE9lcGFBdHRhY2htZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZpbGVSZW1vdmVkOiBFdmVudEVtaXR0ZXI8T2VwYUF0dGFjaG1lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZG93bmxvYWQ6IEV2ZW50RW1pdHRlcjxPZXBhQXR0YWNobWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpZFNlcnZpY2U6IE9lcGFDb21wb25lbnRJZFNlcnZpY2UsIHByaXZhdGUgZmlsZVV0aWxTZXJ2aWNlOiBPZXBhRmlsZVV0aWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZ3JvdXApIHtcbiAgICAgIHRoaXMuY29tcG9uZW50SWQgPSB0aGlzLmlkU2VydmljZS5nZXRDb21wb25lbnRJZCh0aGlzLmdyb3VwKTtcbiAgICAgIHRoaXMuY29tcG9uZW50SWQgKz0gKHRoaXMuY29tcG9uZW50SWQubGVuZ3RoID4gMCA/ICdfJyA6ICcnKSArIHRoaXMuZmllbGQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudXBsb2FkRXJyb3IgPSAnJztcbiAgICBjb25zdCBmaWxlTGlzdDogRmlsZUxpc3QgPSBldmVudC50YXJnZXQuZmlsZXM7XG4gICAgaWYgKGZpbGVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBmaWxlTGlzdFswXTtcblxuICAgICAgaWYgKHRoaXMuZmlsZVR5cGVDYW5CZUFjY2VwdGVkKGZpbGUpKSB7XG4gICAgICAgIHRoaXMuZmlsZVV0aWxTZXJ2aWNlLnVwbG9hZEZpbGUoZmlsZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoYXR0YWNobWVudDogT2VwYUF0dGFjaG1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZF0uc2V0VmFsdWUoYXR0YWNobWVudC51c2VyRmlsZW5hbWUpO1xuICAgICAgICAgICAgYXR0YWNobWVudC5maWxlUGFyc2VyID0gdGhpcy5wYXJzZXJOYW1lIHx8ICcnO1xuICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkZWQuZW1pdChhdHRhY2htZW50KTtcbiAgICAgICAgICB9LCBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSAnRXJyb3IgdXBsb2FkaW5nIGZpbGUgJyArIGVyciB8fCAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGxvYWRFcnJvciA9ICdDYW5ub3QgYWNjZXB0IHRoaXMgdHlwZSBvZiBmaWxlLiBQbGVhc2UgdXBsb2FkIGEgZmlsZSBvZiB0eXBlOiAnICsgdGhpcy5hY2NlcHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBcbiAgcHJpdmF0ZSBmaWxlVHlwZUNhbkJlQWNjZXB0ZWQoZmlsZTphbnkpOiBib29sZWFuIHtcbiAgICBsZXQgb2sgPSB0cnVlO1xuICAgIGlmICh0aGlzLmFjY2VwdCkge1xuICAgICAgY29uc3QgbWltZVR5cGUgPSB0aGlzLmZpbGVVdGlsU2VydmljZS5taW1lVHlwZUZvckZpbGUoZmlsZS5uYW1lKTtcbiAgICAgIGlmICh0aGlzLmFjY2VwdC5pbmRleE9mKG1pbWVUeXBlKSA8IDApIHtcbiAgICAgICAgb2sgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9rO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUZpbGUoKSB7XG4gICAgY29uc3QgbW9kYWw6IEJzTW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCB7IGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUgfSk7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5oZWFkZXJUZXh0ID0gJ1JlbW92ZSBBdHRhY2htZW50JztcbiAgICAoPENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50Pm1vZGFsLmNvbnRlbnQpLmJvZHlUZXh0ID0gJ0RvIHlvdSB3YW50IHRvIHJlbW92ZSB0aGUgYXR0YWNobWVudDogJyArIHRoaXMuYXR0YWNobWVudD8udXNlckZpbGVuYW1lIHx8ICc8dW5rbm93bj4nICsgJz8nO1xuICAgICg8Q29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkuY29uZmlybUJ0bkxhYmVsID0gJ1llcyc7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5jYW5jZWxCdG5MYWJlbCA9ICdObyc7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5jb25maXJtQ2xpY2tlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkXS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5maWxlUmVtb3ZlZC5lbWl0KHRoaXMuYXR0YWNobWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWRGaWxlKGF0dGFjaG1lbnQ6IE9lcGFBdHRhY2htZW50KSB7XG4gICAgLy8gbGV0IHBhcmVudCBjb21wb25lbnQgaGFuZGxlIGRvd25sb2FkIGlmIHN5c3RlbSBmaWxlIG5hbWUgaXMgbm90IHByZXNlbnQgb3IgZW1wdHlcbiAgICBpZiAoIWF0dGFjaG1lbnQuc3lzdGVtRmlsZW5hbWUgfHwgYXR0YWNobWVudC5zeXN0ZW1GaWxlbmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdkb3dubG9hZEZpbGUgLSBubyBmaWxlIG5hbWUsIGRlZmVycmluZyB0byBwYXJlbnQnKTtcbiAgICAgIHRoaXMuZG93bmxvYWQuZW1pdChhdHRhY2htZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ2Rvd25sb2FkaW5nIGZpbGU6ICcgKyBhdHRhY2htZW50LnN5c3RlbUZpbGVuYW1lKTtcbiAgICAgIHRoaXMuZmlsZVV0aWxTZXJ2aWNlLmRvd25sb2FkQXR0YWNobWVudChhdHRhY2htZW50KS5zdWJzY3JpYmUoXG4gICAgICAgIGRhdGEgPT4ge1xuICAgICAgICAgIGNvbnN0IG1pbWVUeXBlID0gdGhpcy5maWxlVXRpbFNlcnZpY2UubWltZVR5cGVGb3JGaWxlKGF0dGFjaG1lbnQuc3lzdGVtRmlsZW5hbWUgfHwgJycpO1xuICAgICAgICAgIGlmIChtaW1lVHlwZSkge1xuICAgICAgICAgICAgdGhpcy5maWxlVXRpbFNlcnZpY2UuZG93bmxvYWRGaWxlKGRhdGEsIG1pbWVUeXBlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRFcnJvciA9ICdVbmFibGUgdG8gZG93bmxvYWQgZmlsZTogJyArIGF0dGFjaG1lbnQudXNlckZpbGVuYW1lICsgJy4gQ2Fubm90IGRldGVybWluZSBtaW1lIHR5cGUnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICB0aGlzLnVwbG9hZEVycm9yID0gJ0Vycm9yIGRvd25sb2FkaW5nIGZpbGU6ICcgKyBhdHRhY2htZW50LnVzZXJGaWxlbmFtZSArICc6ICcgKyBlcnI7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRvd25sb2FkQmxhbmtGb3JtKCkge1xuICAgIGlmICh0aGlzLmJsYW5rRm9ybSkge1xuICAgICAgdGhpcy5kb3dubG9hZEZpbGUodGhpcy5ibGFua0Zvcm0pO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XG4gIDxkaXYgKm5nSWY9XCIhYXR0YWNobWVudCB8fCAhYXR0YWNobWVudC51c2VyRmlsZW5hbWVcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8ZGl2PlxuICAgICAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsfX08L2xhYmVsPlxuICAgICAgPHNwYW4gKm5nSWY9XCJibGFua0Zvcm1VcmxcIj4mbmJzcDs8YSBocmVmPVwie3tibGFua0Zvcm1Vcmx9fVwiIHRhcmdldD1cIl9ibGFua1wiPkJsYW5rIEZvcm08L2E+PC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJibGFua0Zvcm1cIj4mbmJzcDs8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImRvd25sb2FkQmxhbmtGb3JtKClcIj5CbGFuayBGb3JtPC9hPjwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWZpbGVcIj5cbiAgICAgICAgICAgIEJyb3dzZSZoZWxsaXA7IFxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZSgkZXZlbnQpXCIgXG4gICAgICAgICAgICAgIFtpZF09XCJjb21wb25lbnRJZCsnX0Jyb3dzZUJ0bidcIiBbbmFtZV09XCJjb21wb25lbnRJZCsnX0Jyb3dzZUJ0bidcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIFthdHRyLmFjY2VwdF09XCJhY2NlcHQgPyBhY2NlcHQgOiBudWxsXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdESVNBQkxFRCdcIj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpbnB1dCBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIiBcbiAgICAgICAgICB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJObyBmaWxlIGNob3NlblwiIFtpZF09XCJjb21wb25lbnRJZCsnX0lucHV0J1wiIFtuYW1lXT1cImNvbXBvbmVudElkKydfSW5wdXQnXCIgcmVhZG9ubHk+XG4gICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cInNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdJTlZBTElEJ1wiPnt7ZXJyb3JMYWJlbCB8fCBsYWJlbH19IGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBkdW1teSBpbnB1dCBmaWVsZCBmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcyAtLT5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtoaWRkZW5dPVwidHJ1ZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGRcIiBpZD1cImZpZWxkXCIvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwidXBsb2FkRXJyb3JcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiIHJvbGU9XCJhbGVydFwiPnt7dXBsb2FkRXJyb3J9fTwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJwYXJzZXJSZXBvcnRcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJwYXJzZXJSZXBvcnQuc3VjY2Vzc2Z1bFwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiIHJvbGU9XCJhbGVydFwiPlNwcmVhZHNoZWV0IHdhcyBzdWNjZXNzZnVsbHkgcGFyc2VkLjwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cIiFwYXJzZXJSZXBvcnQuc3VjY2Vzc2Z1bFwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgIFRoZXJlIGFyZSBlcnJvcnMgaW4gdGhlIHVwbG9hZGVkIHNwcmVhZHNoZWV0OlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlcnJvciBvZiBwYXJzZXJSZXBvcnQuZXJyb3JzXCI+e3tlcnJvci5tZXNzYWdlfX08L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiYXR0YWNobWVudCAmJiBhdHRhY2htZW50LnVzZXJGaWxlbmFtZVwiPlxuICAgIDxkaXY+XG4gICAgICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWx9fTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgPGEgKGNsaWNrKT1cImRvd25sb2FkRmlsZShhdHRhY2htZW50KVwiIFtpZF09XCJjb21wb25lbnRJZCsnX0Rvd25sb2FkRmlsZUxpbmsnXCIgW25hbWVdPVwiY29tcG9uZW50SWQrJ19Eb3dubG9hZEZpbGVMaW5rJ1wiIFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+e3thdHRhY2htZW50LnVzZXJGaWxlbmFtZX19PC9hPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInJlbW92ZUFsbG93ZWRcIiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFtpZF09XCJjb21wb25lbnRJZCsnX1JlbW92ZUZpbGVCdG4nXCIgW25hbWVdPVwiY29tcG9uZW50SWQrJ19SZW1vdmVGaWxlQnRuJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpbGUoKVwiIFtkaXNhYmxlZF09XCJncm91cC5jb250cm9sc1tmaWVsZF0uc3RhdHVzID09PSAnRElTQUJMRUQnXCIgYXJpYS1sYWJlbD1cIlJlbW92ZSBBdHRhY2htZW50XCI+UmVtb3ZlIEF0dGFjaG1lbnQ8L2J1dHRvbj5cbiAgICAgICAgXG5cdFx0XHQ8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+Il19
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7OztBQVNoRyxNQUFNLE9BQU8sbUJBQW1CO0lBc0JWO0lBQTJDO0lBQ3JEO0lBdEJILFdBQVcsR0FBRyx5QkFBeUIsQ0FBQztJQUN4QyxXQUFXLEdBQVcsRUFBRSxDQUFDO0lBRXZCLEtBQUssQ0FBYTtJQUNsQixLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixTQUFTLENBQTZCO0lBQ3RDLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixNQUFNLEdBQUcsYUFBYSxDQUFDO0lBQ3ZCLFVBQVUsQ0FBNEI7SUFDdEMsTUFBTSxHQUFXLEVBQUUsQ0FBQztJQUNwQixhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFDeEIsWUFBWSxDQUFvQjtJQUUvQixZQUFZLEdBQWlDLElBQUksWUFBWSxFQUFFLENBQUM7SUFDaEUsV0FBVyxHQUFpQyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQy9ELFFBQVEsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUV0RSxZ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QUFHLFVBQVUsQ0FBQyxZQUFZLEdBQUcsOEJBQThCLENBQUM7Z0JBQzVHLENBQUM7WUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLFdBQVcsR0FBRywwQkFBMEIsR0FBRyxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7WUFDdkYsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQzt3R0F6R1UsbUJBQW1COzRGQUFuQixtQkFBbUIseWRDaEJoQyw2OEZBbURPOzs0RkRuQ00sbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGtCQUFrQjswSkFRbkIsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5cbmltcG9ydCB7IE9lcGFBdHRhY2htZW50LCBPZXBhUGFyc2VyUmVwb3J0LCBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1jb21tb24tbGliJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybWF0aW9uLW1vZGFsL2NvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2VwYUZpbGVVdGlsU2VydmljZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtY29tbW9uLWxpYic7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1maWxlLXVwbG9hZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIGNvbXBvbmVudElkID0gJ09lcGFGaWxlVXBsb2FkQ29tcG9uZW50JztcbiAgcHVibGljIHVwbG9hZEVycm9yOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBncm91cCE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgZmllbGQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGVycm9yTGFiZWw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBibGFua0Zvcm06IE9lcGFBdHRhY2htZW50IHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBibGFua0Zvcm1Vcmw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBzaG93VmFsaWRhdGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkb21haW4gPSAnYXBwbGljYXRpb24nO1xuICBASW5wdXQoKSBhdHRhY2htZW50OiBPZXBhQXR0YWNobWVudHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBhY2NlcHQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSByZW1vdmVBbGxvd2VkID0gdHJ1ZTtcbiAgQElucHV0KCkgcGFyc2VyTmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHBhcnNlclJlcG9ydCE6IE9lcGFQYXJzZXJSZXBvcnQ7XG5cbiAgQE91dHB1dCgpIGZpbGVVcGxvYWRlZDogRXZlbnRFbWl0dGVyPE9lcGFBdHRhY2htZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZpbGVSZW1vdmVkOiBFdmVudEVtaXR0ZXI8T2VwYUF0dGFjaG1lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZG93bmxvYWQ6IEV2ZW50RW1pdHRlcjxPZXBhQXR0YWNobWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpZFNlcnZpY2U6IE9lcGFDb21wb25lbnRJZFNlcnZpY2UsIHByaXZhdGUgZmlsZVV0aWxTZXJ2aWNlOiBPZXBhRmlsZVV0aWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZ3JvdXApIHtcbiAgICAgIHRoaXMuY29tcG9uZW50SWQgPSB0aGlzLmlkU2VydmljZS5nZXRDb21wb25lbnRJZCh0aGlzLmdyb3VwKTtcbiAgICAgIHRoaXMuY29tcG9uZW50SWQgKz0gKHRoaXMuY29tcG9uZW50SWQubGVuZ3RoID4gMCA/ICdfJyA6ICcnKSArIHRoaXMuZmllbGQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudXBsb2FkRXJyb3IgPSAnJztcbiAgICBjb25zdCBmaWxlTGlzdDogRmlsZUxpc3QgPSBldmVudC50YXJnZXQuZmlsZXM7XG4gICAgaWYgKGZpbGVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBmaWxlTGlzdFswXTtcblxuICAgICAgaWYgKHRoaXMuZmlsZVR5cGVDYW5CZUFjY2VwdGVkKGZpbGUpKSB7XG4gICAgICAgIHRoaXMuZmlsZVV0aWxTZXJ2aWNlLnVwbG9hZEZpbGUoZmlsZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoYXR0YWNobWVudDogT2VwYUF0dGFjaG1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZF0uc2V0VmFsdWUoYXR0YWNobWVudC51c2VyRmlsZW5hbWUpO1xuICAgICAgICAgICAgYXR0YWNobWVudC5maWxlUGFyc2VyID0gdGhpcy5wYXJzZXJOYW1lIHx8ICcnO1xuICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkZWQuZW1pdChhdHRhY2htZW50KTtcbiAgICAgICAgICB9LCBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSAnRXJyb3IgdXBsb2FkaW5nIGZpbGUgJyArIGVyciB8fCAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGxvYWRFcnJvciA9ICdDYW5ub3QgYWNjZXB0IHRoaXMgdHlwZSBvZiBmaWxlLiBQbGVhc2UgdXBsb2FkIGEgZmlsZSBvZiB0eXBlOiAnICsgdGhpcy5hY2NlcHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBcbiAgcHJpdmF0ZSBmaWxlVHlwZUNhbkJlQWNjZXB0ZWQoZmlsZTphbnkpOiBib29sZWFuIHtcbiAgICBsZXQgb2sgPSB0cnVlO1xuICAgIGlmICh0aGlzLmFjY2VwdCkge1xuICAgICAgY29uc3QgbWltZVR5cGUgPSB0aGlzLmZpbGVVdGlsU2VydmljZS5taW1lVHlwZUZvckZpbGUoZmlsZS5uYW1lKTtcbiAgICAgIGlmICh0aGlzLmFjY2VwdC5pbmRleE9mKG1pbWVUeXBlKSA8IDApIHtcbiAgICAgICAgb2sgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9rO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUZpbGUoKSB7XG4gICAgY29uc3QgbW9kYWw6IEJzTW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCB7IGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUgfSk7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5oZWFkZXJUZXh0ID0gJ1JlbW92ZSBBdHRhY2htZW50JztcbiAgICAoPENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50Pm1vZGFsLmNvbnRlbnQpLmJvZHlUZXh0ID0gJ0RvIHlvdSB3YW50IHRvIHJlbW92ZSB0aGUgYXR0YWNobWVudDogJyArIHRoaXMuYXR0YWNobWVudD8udXNlckZpbGVuYW1lIHx8ICc8dW5rbm93bj4nICsgJz8nO1xuICAgICg8Q29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkuY29uZmlybUJ0bkxhYmVsID0gJ1llcyc7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5jYW5jZWxCdG5MYWJlbCA9ICdObyc7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5jb25maXJtQ2xpY2tlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkXS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5maWxlUmVtb3ZlZC5lbWl0KHRoaXMuYXR0YWNobWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWRGaWxlKGF0dGFjaG1lbnQ6IE9lcGFBdHRhY2htZW50KSB7XG4gICAgLy8gbGV0IHBhcmVudCBjb21wb25lbnQgaGFuZGxlIGRvd25sb2FkIGlmIHN5c3RlbSBmaWxlIG5hbWUgaXMgbm90IHByZXNlbnQgb3IgZW1wdHlcbiAgICBpZiAoIWF0dGFjaG1lbnQuc3lzdGVtRmlsZW5hbWUgfHwgYXR0YWNobWVudC5zeXN0ZW1GaWxlbmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdkb3dubG9hZEZpbGUgLSBubyBmaWxlIG5hbWUsIGRlZmVycmluZyB0byBwYXJlbnQnKTtcbiAgICAgIHRoaXMuZG93bmxvYWQuZW1pdChhdHRhY2htZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ2Rvd25sb2FkaW5nIGZpbGU6ICcgKyBhdHRhY2htZW50LnN5c3RlbUZpbGVuYW1lKTtcbiAgICAgIHRoaXMuZmlsZVV0aWxTZXJ2aWNlLmRvd25sb2FkQXR0YWNobWVudChhdHRhY2htZW50KS5zdWJzY3JpYmUoXG4gICAgICAgIGRhdGEgPT4ge1xuICAgICAgICAgIGNvbnN0IG1pbWVUeXBlID0gdGhpcy5maWxlVXRpbFNlcnZpY2UubWltZVR5cGVGb3JGaWxlKGF0dGFjaG1lbnQuc3lzdGVtRmlsZW5hbWUgfHwgJycpO1xuICAgICAgICAgIGlmIChtaW1lVHlwZSkge1xuICAgICAgICAgICAgdGhpcy5maWxlVXRpbFNlcnZpY2UuZG93bmxvYWRGaWxlKGRhdGEsIG1pbWVUeXBlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRFcnJvciA9ICdVbmFibGUgdG8gZG93bmxvYWQgZmlsZTogJyArIGF0dGFjaG1lbnQudXNlckZpbGVuYW1lICsgJy4gQ2Fubm90IGRldGVybWluZSBtaW1lIHR5cGUnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICB0aGlzLnVwbG9hZEVycm9yID0gJ0Vycm9yIGRvd25sb2FkaW5nIGZpbGU6ICcgKyBhdHRhY2htZW50LnVzZXJGaWxlbmFtZSArICc6ICcgKyBlcnI7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRvd25sb2FkQmxhbmtGb3JtKCkge1xuICAgIGlmICh0aGlzLmJsYW5rRm9ybSkge1xuICAgICAgdGhpcy5kb3dubG9hZEZpbGUodGhpcy5ibGFua0Zvcm0pO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XG4gIDxkaXYgKm5nSWY9XCIhYXR0YWNobWVudCB8fCAhYXR0YWNobWVudC51c2VyRmlsZW5hbWVcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8ZGl2PlxuICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWx9fTwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiYmxhbmtGb3JtVXJsXCI+Jm5ic3A7PGEgaHJlZj1cInt7YmxhbmtGb3JtVXJsfX1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5CbGFuayBGb3JtPC9hPjwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiYmxhbmtGb3JtXCI+Jm5ic3A7PGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJkb3dubG9hZEJsYW5rRm9ybSgpXCI+QmxhbmsgRm9ybTwvYT48L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1maWxlXCIgW2Zvcl09XCJjb21wb25lbnRJZCsnX0Jyb3dzZUJ0bidcIj5cbiAgICAgICAgICAgIEJyb3dzZSZoZWxsaXA7IFxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZSgkZXZlbnQpXCIgXG4gICAgICAgICAgICAgIFtpZF09XCJjb21wb25lbnRJZCsnX0Jyb3dzZUJ0bidcIiBbbmFtZV09XCJjb21wb25lbnRJZCsnX0Jyb3dzZUJ0bidcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIFthdHRyLmFjY2VwdF09XCJhY2NlcHQgPyBhY2NlcHQgOiBudWxsXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdESVNBQkxFRCdcIj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxsYWJlbCBbZm9yXT1cImNvbXBvbmVudElkKydfSW5wdXQnXCIgY2xhc3M9XCJzci1vbmx5XCI+U2VsZWN0ZWQgZmlsZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIiBcbiAgICAgICAgICB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJObyBmaWxlIGNob3NlblwiIFtpZF09XCJjb21wb25lbnRJZCsnX0lucHV0J1wiIFtuYW1lXT1cImNvbXBvbmVudElkKydfSW5wdXQnXCIgcmVhZG9ubHk+XG4gICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cInNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdJTlZBTElEJ1wiPnt7ZXJyb3JMYWJlbCB8fCBsYWJlbH19IGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBkdW1teSBpbnB1dCBmaWVsZCBmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcyAtLT5cbiAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgW2hpZGRlbl09XCJ0cnVlXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZFwiIGlkPVwiZmllbGRcIi8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJ1cGxvYWRFcnJvclwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+e3t1cGxvYWRFcnJvcn19PC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInBhcnNlclJlcG9ydFwiPlxuICAgICAgPGRpdiAqbmdJZj1cInBhcnNlclJlcG9ydC5zdWNjZXNzZnVsXCIgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCIgcm9sZT1cImFsZXJ0XCI+U3ByZWFkc2hlZXQgd2FzIHN1Y2Nlc3NmdWxseSBwYXJzZWQuPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiIXBhcnNlclJlcG9ydC5zdWNjZXNzZnVsXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgVGhlcmUgYXJlIGVycm9ycyBpbiB0aGUgdXBsb2FkZWQgc3ByZWFkc2hlZXQ6XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGVycm9yIG9mIHBhcnNlclJlcG9ydC5lcnJvcnNcIj57e2Vycm9yLm1lc3NhZ2V9fTwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJhdHRhY2htZW50ICYmIGF0dGFjaG1lbnQudXNlckZpbGVuYW1lXCI+XG4gICAgPGRpdj5cbiAgICAgIDxzcGFuICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsfX08L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgPGEgKGNsaWNrKT1cImRvd25sb2FkRmlsZShhdHRhY2htZW50KVwiIFtpZF09XCJjb21wb25lbnRJZCsnX0Rvd25sb2FkRmlsZUxpbmsnXCIgW25hbWVdPVwiY29tcG9uZW50SWQrJ19Eb3dubG9hZEZpbGVMaW5rJ1wiIFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+e3thdHRhY2htZW50LnVzZXJGaWxlbmFtZX19PC9hPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInJlbW92ZUFsbG93ZWRcIiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFtpZF09XCJjb21wb25lbnRJZCsnX1JlbW92ZUZpbGVCdG4nXCIgW25hbWVdPVwiY29tcG9uZW50SWQrJ19SZW1vdmVGaWxlQnRuJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpbGUoKVwiIFtkaXNhYmxlZF09XCJncm91cC5jb250cm9sc1tmaWVsZF0uc3RhdHVzID09PSAnRElTQUJMRUQnXCIgYXJpYS1sYWJlbD1cIlJlbW92ZSBBdHRhY2htZW50XCI+UmVtb3ZlIEF0dGFjaG1lbnQ8L2J1dHRvbj5cbiAgICAgICAgXG5cdFx0XHQ8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+Il19
@@ -99,11 +99,11 @@ export class MultiFileUploadComponent {
99
99
  }
100
100
  }
101
101
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultiFileUploadComponent, deps: [{ token: i1.OepaComponentIdService }, { token: i1.OepaFileUtilService }, { token: i2.BsModalService }], target: i0.ɵɵFactoryTarget.Component });
102
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MultiFileUploadComponent, selector: "oepa-multi-file-upload", inputs: { group: "group", field: "field", label: "label", errorLabel: "errorLabel", blankForm: "blankForm", blankFormUrl: "blankFormUrl", showValidation: "showValidation", domain: "domain", attachments: "attachments", removeAllowed: "removeAllowed" }, outputs: { fileUploaded: "fileUploaded", fileRemoved: "fileRemoved", download: "download" }, viewQueries: [{ propertyName: "myFileInput", first: true, predicate: ["myFileInput"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<form [formGroup]=\"group\">\n <div class=\"form-group\">\n <div>\n <label *ngIf=\"label\">{{label}}</label>\n <span *ngIf=\"blankFormUrl\">&nbsp;<a href=\"{{blankFormUrl}}\" target=\"_blank\">Blank Form</a></span>\n <span *ngIf=\"blankForm\">&nbsp;<a href=\"\" (click)=\"downloadBlankForm()\">Blank Form</a></span>\n <div class=\"form-group\">\n <div class=\"input-group\">\n <span class=\"input-group-btn\">\n <label class=\"btn btn-primary btn-file\">\n Browse&hellip; \n <input #myFileInput type=\"file\" style=\"display: none;\" (change)=\"fileChange($event)\" \n [id]=\"componentId+'_BrowseBtn'\" [name]=\"componentId+'_BrowseBtn'\" class=\"form-control\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">\n </label>\n </span>\n <input [ngClass]=\"{'is-invalid':showValidation && group.controls[field].status === 'INVALID'}\"\n type=\"text\" class=\"form-control\" \n [placeholder]=\"(!attachments || attachments.length === 0) ? 'No files uploaded' : (attachments.length + ' file(s) uploaded')\"\n [id]=\"componentId+'_Input'\" [name]=\"componentId+'_Input'\" readonly>\n <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls[field].status === 'INVALID'\">{{errorLabel || label}} is required</small>\n </div>\n <!-- dummy input field for validation purposes -->\n <input type=\"text\" [hidden]=\"true\" [formControlName]=\"field\" id=\"field\"/>\n </div>\n </div>\n <div *ngIf=\"uploadError\" class=\"alert alert-danger\" role=\"alert\">{{uploadError}}</div>\n <div *ngIf=\"parserReport\">\n <div *ngIf=\"!attachments[0] && parserReport.successful\" class=\"alert alert-info\" role=\"alert\">Spreadsheet was successfully parsed.</div>\n <div [hidden]=\"parserReport.successful\" class=\"alert alert-danger\" role=\"alert\">\n There are errors in the uploaded spreadsheet:\n <ul>\n <li *ngFor=\"let error of parserReport.errors\">{{error.message}}</li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"attachments && attachments[0]\">\n <div *ngFor=\"let attachment of attachments; let i=index;\">\n <div class=\"form-group\">\n <div class=\"input-group\">\n <a (click)=\"downloadFile(attachment)\" [id]=\"componentId+'_DownloadFileLink_'+i\" [name]=\"componentId+'_DownloadFileLink_'+i\"\n class=\"form-control\">{{attachment.userFilename}}</a>\n <span *ngIf=\"removeAllowed\" class=\"input-group-btn\">\n <button type=\"button\" class=\"btn btn-primary\" [id]=\"componentId+'_RemoveFileBtn_'+i\" [name]=\"componentId+'_RemoveFileBtn_'+i\"\n (click)=\"removeFile(attachment)\" [disabled]=\"group.controls[field].status === 'DISABLED'\" aria-label=\"Remove Attachment\">Remove Attachment</button>\n </span>\n </div>\n </div>\n </div>\n </div>\n</form>", styles: ["a:hover{cursor:pointer}a{color:#3399f3!important}\n"], dependencies: [{ 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: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
102
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MultiFileUploadComponent, selector: "oepa-multi-file-upload", inputs: { group: "group", field: "field", label: "label", errorLabel: "errorLabel", blankForm: "blankForm", blankFormUrl: "blankFormUrl", showValidation: "showValidation", domain: "domain", attachments: "attachments", removeAllowed: "removeAllowed" }, outputs: { fileUploaded: "fileUploaded", fileRemoved: "fileRemoved", download: "download" }, viewQueries: [{ propertyName: "myFileInput", first: true, predicate: ["myFileInput"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<form [formGroup]=\"group\">\n <div class=\"form-group\">\n <div>\n <span *ngIf=\"label\">{{label}}</span>\n <span *ngIf=\"blankFormUrl\">&nbsp;<a href=\"{{blankFormUrl}}\" target=\"_blank\">Blank Form</a></span>\n <span *ngIf=\"blankForm\">&nbsp;<a href=\"\" (click)=\"downloadBlankForm()\">Blank Form</a></span>\n <div class=\"form-group\">\n <div class=\"input-group\">\n <span class=\"input-group-btn\">\n <label class=\"btn btn-primary btn-file\" [for]=\"componentId+'_BrowseBtn'\">\n Browse&hellip; \n <input #myFileInput type=\"file\" style=\"display: none;\" (change)=\"fileChange($event)\" \n [id]=\"componentId+'_BrowseBtn'\" [name]=\"componentId+'_BrowseBtn'\" class=\"form-control\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">\n </label>\n </span>\n <label [for]=\"componentId+'_Input'\" class=\"sr-only\">Selected file</label>\n <input [ngClass]=\"{'is-invalid':showValidation && group.controls[field].status === 'INVALID'}\"\n type=\"text\" class=\"form-control\" \n [placeholder]=\"(!attachments || attachments.length === 0) ? 'No files uploaded' : (attachments.length + ' file(s) uploaded')\"\n [id]=\"componentId+'_Input'\" [name]=\"componentId+'_Input'\" readonly>\n <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls[field].status === 'INVALID'\">{{errorLabel || label}} is required</small>\n </div>\n <!-- dummy input field for validation purposes -->\n <input type=\"hidden\" [hidden]=\"true\" [formControlName]=\"field\" id=\"field\"/>\n </div>\n </div>\n <div *ngIf=\"uploadError\" class=\"alert alert-danger\" role=\"alert\">{{uploadError}}</div>\n <div *ngIf=\"parserReport\">\n <div *ngIf=\"!attachments[0] && parserReport.successful\" class=\"alert alert-info\" role=\"alert\">Spreadsheet was successfully parsed.</div>\n <div [hidden]=\"parserReport.successful\" class=\"alert alert-danger\" role=\"alert\">\n There are errors in the uploaded spreadsheet:\n <ul>\n <li *ngFor=\"let error of parserReport.errors\">{{error.message}}</li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"attachments && attachments[0]\">\n <div *ngFor=\"let attachment of attachments; let i=index;\">\n <div class=\"form-group\">\n <div class=\"input-group\">\n <a (click)=\"downloadFile(attachment)\" [id]=\"componentId+'_DownloadFileLink_'+i\" [name]=\"componentId+'_DownloadFileLink_'+i\"\n class=\"form-control\">{{attachment.userFilename}}</a>\n <span *ngIf=\"removeAllowed\" class=\"input-group-btn\">\n <button type=\"button\" class=\"btn btn-primary\" [id]=\"componentId+'_RemoveFileBtn_'+i\" [name]=\"componentId+'_RemoveFileBtn_'+i\"\n (click)=\"removeFile(attachment)\" [disabled]=\"group.controls[field].status === 'DISABLED'\" aria-label=\"Remove Attachment\">Remove Attachment</button>\n </span>\n </div>\n </div>\n </div>\n </div>\n</form>", styles: ["a:hover{cursor:pointer}a{color:#3399f3!important}\n"], dependencies: [{ 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: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
103
103
  }
104
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultiFileUploadComponent, decorators: [{
105
105
  type: Component,
106
- args: [{ selector: 'oepa-multi-file-upload', template: "<form [formGroup]=\"group\">\n <div class=\"form-group\">\n <div>\n <label *ngIf=\"label\">{{label}}</label>\n <span *ngIf=\"blankFormUrl\">&nbsp;<a href=\"{{blankFormUrl}}\" target=\"_blank\">Blank Form</a></span>\n <span *ngIf=\"blankForm\">&nbsp;<a href=\"\" (click)=\"downloadBlankForm()\">Blank Form</a></span>\n <div class=\"form-group\">\n <div class=\"input-group\">\n <span class=\"input-group-btn\">\n <label class=\"btn btn-primary btn-file\">\n Browse&hellip; \n <input #myFileInput type=\"file\" style=\"display: none;\" (change)=\"fileChange($event)\" \n [id]=\"componentId+'_BrowseBtn'\" [name]=\"componentId+'_BrowseBtn'\" class=\"form-control\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">\n </label>\n </span>\n <input [ngClass]=\"{'is-invalid':showValidation && group.controls[field].status === 'INVALID'}\"\n type=\"text\" class=\"form-control\" \n [placeholder]=\"(!attachments || attachments.length === 0) ? 'No files uploaded' : (attachments.length + ' file(s) uploaded')\"\n [id]=\"componentId+'_Input'\" [name]=\"componentId+'_Input'\" readonly>\n <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls[field].status === 'INVALID'\">{{errorLabel || label}} is required</small>\n </div>\n <!-- dummy input field for validation purposes -->\n <input type=\"text\" [hidden]=\"true\" [formControlName]=\"field\" id=\"field\"/>\n </div>\n </div>\n <div *ngIf=\"uploadError\" class=\"alert alert-danger\" role=\"alert\">{{uploadError}}</div>\n <div *ngIf=\"parserReport\">\n <div *ngIf=\"!attachments[0] && parserReport.successful\" class=\"alert alert-info\" role=\"alert\">Spreadsheet was successfully parsed.</div>\n <div [hidden]=\"parserReport.successful\" class=\"alert alert-danger\" role=\"alert\">\n There are errors in the uploaded spreadsheet:\n <ul>\n <li *ngFor=\"let error of parserReport.errors\">{{error.message}}</li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"attachments && attachments[0]\">\n <div *ngFor=\"let attachment of attachments; let i=index;\">\n <div class=\"form-group\">\n <div class=\"input-group\">\n <a (click)=\"downloadFile(attachment)\" [id]=\"componentId+'_DownloadFileLink_'+i\" [name]=\"componentId+'_DownloadFileLink_'+i\"\n class=\"form-control\">{{attachment.userFilename}}</a>\n <span *ngIf=\"removeAllowed\" class=\"input-group-btn\">\n <button type=\"button\" class=\"btn btn-primary\" [id]=\"componentId+'_RemoveFileBtn_'+i\" [name]=\"componentId+'_RemoveFileBtn_'+i\"\n (click)=\"removeFile(attachment)\" [disabled]=\"group.controls[field].status === 'DISABLED'\" aria-label=\"Remove Attachment\">Remove Attachment</button>\n </span>\n </div>\n </div>\n </div>\n </div>\n</form>", styles: ["a:hover{cursor:pointer}a{color:#3399f3!important}\n"] }]
106
+ args: [{ selector: 'oepa-multi-file-upload', template: "<form [formGroup]=\"group\">\n <div class=\"form-group\">\n <div>\n <span *ngIf=\"label\">{{label}}</span>\n <span *ngIf=\"blankFormUrl\">&nbsp;<a href=\"{{blankFormUrl}}\" target=\"_blank\">Blank Form</a></span>\n <span *ngIf=\"blankForm\">&nbsp;<a href=\"\" (click)=\"downloadBlankForm()\">Blank Form</a></span>\n <div class=\"form-group\">\n <div class=\"input-group\">\n <span class=\"input-group-btn\">\n <label class=\"btn btn-primary btn-file\" [for]=\"componentId+'_BrowseBtn'\">\n Browse&hellip; \n <input #myFileInput type=\"file\" style=\"display: none;\" (change)=\"fileChange($event)\" \n [id]=\"componentId+'_BrowseBtn'\" [name]=\"componentId+'_BrowseBtn'\" class=\"form-control\"\n [disabled]=\"group.controls[field].status === 'DISABLED'\">\n </label>\n </span>\n <label [for]=\"componentId+'_Input'\" class=\"sr-only\">Selected file</label>\n <input [ngClass]=\"{'is-invalid':showValidation && group.controls[field].status === 'INVALID'}\"\n type=\"text\" class=\"form-control\" \n [placeholder]=\"(!attachments || attachments.length === 0) ? 'No files uploaded' : (attachments.length + ' file(s) uploaded')\"\n [id]=\"componentId+'_Input'\" [name]=\"componentId+'_Input'\" readonly>\n <small class=\"invalid-feedback\" *ngIf=\"showValidation && group.controls[field].status === 'INVALID'\">{{errorLabel || label}} is required</small>\n </div>\n <!-- dummy input field for validation purposes -->\n <input type=\"hidden\" [hidden]=\"true\" [formControlName]=\"field\" id=\"field\"/>\n </div>\n </div>\n <div *ngIf=\"uploadError\" class=\"alert alert-danger\" role=\"alert\">{{uploadError}}</div>\n <div *ngIf=\"parserReport\">\n <div *ngIf=\"!attachments[0] && parserReport.successful\" class=\"alert alert-info\" role=\"alert\">Spreadsheet was successfully parsed.</div>\n <div [hidden]=\"parserReport.successful\" class=\"alert alert-danger\" role=\"alert\">\n There are errors in the uploaded spreadsheet:\n <ul>\n <li *ngFor=\"let error of parserReport.errors\">{{error.message}}</li>\n </ul>\n </div>\n </div>\n </div>\n <div *ngIf=\"attachments && attachments[0]\">\n <div *ngFor=\"let attachment of attachments; let i=index;\">\n <div class=\"form-group\">\n <div class=\"input-group\">\n <a (click)=\"downloadFile(attachment)\" [id]=\"componentId+'_DownloadFileLink_'+i\" [name]=\"componentId+'_DownloadFileLink_'+i\"\n class=\"form-control\">{{attachment.userFilename}}</a>\n <span *ngIf=\"removeAllowed\" class=\"input-group-btn\">\n <button type=\"button\" class=\"btn btn-primary\" [id]=\"componentId+'_RemoveFileBtn_'+i\" [name]=\"componentId+'_RemoveFileBtn_'+i\"\n (click)=\"removeFile(attachment)\" [disabled]=\"group.controls[field].status === 'DISABLED'\" aria-label=\"Remove Attachment\">Remove Attachment</button>\n </span>\n </div>\n </div>\n </div>\n </div>\n</form>", styles: ["a:hover{cursor:pointer}a{color:#3399f3!important}\n"] }]
107
107
  }], ctorParameters: () => [{ type: i1.OepaComponentIdService }, { type: i1.OepaFileUtilService }, { type: i2.BsModalService }], propDecorators: { group: [{
108
108
  type: Input
109
109
  }], field: [{
@@ -134,4 +134,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
134
134
  type: ViewChild,
135
135
  args: ['myFileInput', { static: true }]
136
136
  }] } });
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9tdWx0aS1maWxlLXVwbG9hZC9tdWx0aS1maWxlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL211bHRpLWZpbGUtdXBsb2FkL211bHRpLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9DLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU9wSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7O0FBVWhHLE1BQU0sT0FBTyx3QkFBd0I7SUFzQmY7SUFBMkM7SUFDckQ7SUF0QkQsS0FBSyxDQUFhO0lBQ2xCLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLFNBQVMsQ0FBNkI7SUFDdEMsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sR0FBRyxhQUFhLENBQUM7SUFDdkIsV0FBVyxHQUEwQixFQUFFLENBQUM7SUFDeEMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUVwQixZQUFZLEdBQWlDLElBQUksWUFBWSxFQUFFLENBQUM7SUFDaEUsV0FBVyxHQUFpQyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQy9ELFFBQVEsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUUzQixXQUFXLENBQU07SUFFNUQsV0FBVyxHQUFHLDhCQUE4QixDQUFDO0lBQzdDLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsWUFB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QUM7UUFDcEMsQ0FBQztJQUNILENBQUM7d0dBOUZVLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLHNpQkNqQnJDLHE4RkFtRE87OzRGRGxDTSx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0Usd0JBQXdCOzBKQUt6QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRW9DLFdBQVc7c0JBQXJELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5cbmltcG9ydCB7IE9lcGFBdHRhY2htZW50LCBPZXBhUGFyc2VyUmVwb3J0LCBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1jb21tb24tbGliJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybWF0aW9uLW1vZGFsL2NvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2VwYUZpbGVVdGlsU2VydmljZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtY29tbW9uLWxpYic7XG5cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLW11bHRpLWZpbGUtdXBsb2FkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktZmlsZS11cGxvYWQuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpRmlsZVVwbG9hZENvbXBvbmVudCAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGdyb3VwITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBmaWVsZDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZXJyb3JMYWJlbDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGJsYW5rRm9ybTogT2VwYUF0dGFjaG1lbnQgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGJsYW5rRm9ybVVybDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNob3dWYWxpZGF0aW9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRvbWFpbiA9ICdhcHBsaWNhdGlvbic7XG4gIEBJbnB1dCgpIGF0dGFjaG1lbnRzOiBBcnJheTxPZXBhQXR0YWNobWVudD4gPSBbXTtcbiAgQElucHV0KCkgcmVtb3ZlQWxsb3dlZCA9IHRydWU7XG5cbiAgQE91dHB1dCgpIGZpbGVVcGxvYWRlZDogRXZlbnRFbWl0dGVyPE9lcGFBdHRhY2htZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZpbGVSZW1vdmVkOiBFdmVudEVtaXR0ZXI8T2VwYUF0dGFjaG1lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZG93bmxvYWQ6IEV2ZW50RW1pdHRlcjxPZXBhQXR0YWNobWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnbXlGaWxlSW5wdXQnLCB7IHN0YXRpYzogdHJ1ZX0pIG15RmlsZUlucHV0OiBhbnk7XG5cbiAgY29tcG9uZW50SWQgPSAnT2VwYU11bHRpRmlsZVVwbG9hZENvbXBvbmVudCc7XG4gIHVwbG9hZEVycm9yOiBzdHJpbmcgPSAnJztcbiAgcGFyc2VyUmVwb3J0ITogT2VwYVBhcnNlclJlcG9ydDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGlkU2VydmljZTogT2VwYUNvbXBvbmVudElkU2VydmljZSwgcHJpdmF0ZSBmaWxlVXRpbFNlcnZpY2U6IE9lcGFGaWxlVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5ncm91cCkge1xuICAgICAgdGhpcy5jb21wb25lbnRJZCA9IHRoaXMuaWRTZXJ2aWNlLmdldENvbXBvbmVudElkKHRoaXMuZ3JvdXApO1xuICAgICAgdGhpcy5jb21wb25lbnRJZCArPSAodGhpcy5jb21wb25lbnRJZC5sZW5ndGggPiAwID8gJ18nIDogJycpICsgdGhpcy5maWVsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ09PUFMgTm8gZ3JvdXAgeWV0Jyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydhdHRhY2htZW50cyddICYmIGNoYW5nZXNbJ2F0dGFjaG1lbnRzJ10gLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKGNoYW5nZXNbJ2F0dGFjaG1lbnRzJ10gLmN1cnJlbnRWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmaWxlIGNoYW5nZWQgdG86ICcgKyBjaGFuZ2VzWydhdHRhY2htZW50cyddIC5jdXJyZW50VmFsdWVbMF0udXNlckZpbGVuYW1lKTtcbiAgICAgICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkXS5zZXRWYWx1ZShjaGFuZ2VzWydhdHRhY2htZW50cyddIC5jdXJyZW50VmFsdWVbMF0udXNlckZpbGVuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZF0uc2V0VmFsdWUoJycpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZmlsZSBjaGFuZ2VkIGFuZCBpcyBub3cgZW1wdHknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3QgZmlsZUxpc3Q6IEZpbGVMaXN0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgIGlmIChmaWxlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWxlOiBGaWxlID0gZmlsZUxpc3RbMF07XG4gICAgICB0aGlzLmZpbGVVdGlsU2VydmljZS51cGxvYWRGaWxlKGZpbGUpLnN1YnNjcmliZSgoYXR0YWNobWVudDogT2VwYUF0dGFjaG1lbnQpID0+IHtcbiAgICAgICAgdGhpcy5maWxlVXBsb2FkZWQuZW1pdChhdHRhY2htZW50KTtcbiAgICAgICAgdGhpcy5teUZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICB9LCBlcnIgPT4ge1xuICAgICAgICB0aGlzLnVwbG9hZEVycm9yID0gJ0Vycm9yIHVwbG9hZGluZyBmaWxlICcgKyBlcnI7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRmlsZShhdHRhY2htZW50OiBPZXBhQXR0YWNobWVudCkge1xuICAgIGNvbnN0IG1vZGFsOiBCc01vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwgeyBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlIH0pO1xuICAgICg8Q29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkuaGVhZGVyVGV4dCA9ICdSZW1vdmUgQXR0YWNobWVudCc7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5ib2R5VGV4dCA9ICdEbyB5b3Ugd2FudCB0byByZW1vdmUgdGhlIGF0dGFjaG1lbnQ6ICcgKyBhdHRhY2htZW50LnVzZXJGaWxlbmFtZSArICc/JztcbiAgICAoPENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50Pm1vZGFsLmNvbnRlbnQpLmNvbmZpcm1CdG5MYWJlbCA9ICdZZXMnO1xuICAgICg8Q29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkuY2FuY2VsQnRuTGFiZWwgPSAnTm8nO1xuICAgICg8Q29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkuY29uZmlybUNsaWNrZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZmlsZVJlbW92ZWQuZW1pdChhdHRhY2htZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZEZpbGUoYXR0YWNobWVudDogT2VwYUF0dGFjaG1lbnQpIHtcbiAgICBpZiAoIWF0dGFjaG1lbnQuc3lzdGVtRmlsZW5hbWUgfHwgYXR0YWNobWVudC5zeXN0ZW1GaWxlbmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZG93bmxvYWQuZW1pdChhdHRhY2htZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWxlVXRpbFNlcnZpY2UuZG93bmxvYWRBdHRhY2htZW50KGF0dGFjaG1lbnQpLnN1YnNjcmliZShcbiAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ0ZpbGUgZG93bmxvYWQgc3VjY2VzcycpO1xuICAgICAgICAgIGNvbnN0IG1pbWVUeXBlOiBzdHJpbmcgPSB0aGlzLmZpbGVVdGlsU2VydmljZS5taW1lVHlwZUZvckZpbGUoYXR0YWNobWVudC5zeXN0ZW1GaWxlbmFtZSB8fCAnJyk7XG4gICAgICAgICAgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVVdGlsU2VydmljZS5kb3dubG9hZEZpbGUoZGF0YSwgbWltZVR5cGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZEVycm9yID0gJ1VuYWJsZSB0byBkb3dubG9hZCBmaWxlOiAnICsgYXR0YWNobWVudC51c2VyRmlsZW5hbWUgKyAnLiBDYW5ub3QgZGV0ZXJtaW5lIG1pbWUgdHlwZSc7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSAnRXJyb3IgZG93bmxvYWRpbmcgZmlsZTogJyArIGF0dGFjaG1lbnQudXNlckZpbGVuYW1lICsgJy4gJyArIGVycjtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWRCbGFua0Zvcm0oKSB7XG4gICAgaWYgKHRoaXMuYmxhbmtGb3JtKSB7XG4gICAgICB0aGlzLmRvd25sb2FkRmlsZSh0aGlzLmJsYW5rRm9ybSk7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIj5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8ZGl2PlxuICAgICAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsfX08L2xhYmVsPlxuICAgICAgPHNwYW4gKm5nSWY9XCJibGFua0Zvcm1VcmxcIj4mbmJzcDs8YSBocmVmPVwie3tibGFua0Zvcm1Vcmx9fVwiIHRhcmdldD1cIl9ibGFua1wiPkJsYW5rIEZvcm08L2E+PC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJibGFua0Zvcm1cIj4mbmJzcDs8YSBocmVmPVwiXCIgKGNsaWNrKT1cImRvd25sb2FkQmxhbmtGb3JtKClcIj5CbGFuayBGb3JtPC9hPjwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWZpbGVcIj5cbiAgICAgICAgICAgIEJyb3dzZSZoZWxsaXA7IFxuICAgICAgICAgICAgPGlucHV0ICNteUZpbGVJbnB1dCB0eXBlPVwiZmlsZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAoY2hhbmdlKT1cImZpbGVDaGFuZ2UoJGV2ZW50KVwiIFxuICAgICAgICAgICAgICBbaWRdPVwiY29tcG9uZW50SWQrJ19Ccm93c2VCdG4nXCIgW25hbWVdPVwiY29tcG9uZW50SWQrJ19Ccm93c2VCdG4nXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JvdXAuY29udHJvbHNbZmllbGRdLnN0YXR1cyA9PT0gJ0RJU0FCTEVEJ1wiPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGlucHV0ICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiKCFhdHRhY2htZW50cyB8fCBhdHRhY2htZW50cy5sZW5ndGggPT09IDApID8gJ05vIGZpbGVzIHVwbG9hZGVkJyA6IChhdHRhY2htZW50cy5sZW5ndGggKyAnIGZpbGUocykgdXBsb2FkZWQnKVwiXG4gICAgICAgICAgW2lkXT1cImNvbXBvbmVudElkKydfSW5wdXQnXCIgW25hbWVdPVwiY29tcG9uZW50SWQrJ19JbnB1dCdcIiByZWFkb25seT5cbiAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJzaG93VmFsaWRhdGlvbiAmJiBncm91cC5jb250cm9sc1tmaWVsZF0uc3RhdHVzID09PSAnSU5WQUxJRCdcIj57e2Vycm9yTGFiZWwgfHwgbGFiZWx9fSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gZHVtbXkgaW5wdXQgZmllbGQgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMgLS0+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbaGlkZGVuXT1cInRydWVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkXCIgaWQ9XCJmaWVsZFwiLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInVwbG9hZEVycm9yXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiByb2xlPVwiYWxlcnRcIj57e3VwbG9hZEVycm9yfX08L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwicGFyc2VyUmVwb3J0XCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiIWF0dGFjaG1lbnRzWzBdICYmIHBhcnNlclJlcG9ydC5zdWNjZXNzZnVsXCIgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCIgcm9sZT1cImFsZXJ0XCI+U3ByZWFkc2hlZXQgd2FzIHN1Y2Nlc3NmdWxseSBwYXJzZWQuPC9kaXY+XG4gICAgICA8ZGl2IFtoaWRkZW5dPVwicGFyc2VyUmVwb3J0LnN1Y2Nlc3NmdWxcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiIHJvbGU9XCJhbGVydFwiPlxuICAgICAgICBUaGVyZSBhcmUgZXJyb3JzIGluIHRoZSB1cGxvYWRlZCBzcHJlYWRzaGVldDpcbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgcGFyc2VyUmVwb3J0LmVycm9yc1wiPnt7ZXJyb3IubWVzc2FnZX19PC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImF0dGFjaG1lbnRzICYmIGF0dGFjaG1lbnRzWzBdXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50czsgbGV0IGk9aW5kZXg7XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICA8YSAoY2xpY2spPVwiZG93bmxvYWRGaWxlKGF0dGFjaG1lbnQpXCIgW2lkXT1cImNvbXBvbmVudElkKydfRG93bmxvYWRGaWxlTGlua18nK2lcIiBbbmFtZV09XCJjb21wb25lbnRJZCsnX0Rvd25sb2FkRmlsZUxpbmtfJytpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+e3thdHRhY2htZW50LnVzZXJGaWxlbmFtZX19PC9hPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVtb3ZlQWxsb3dlZFwiIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFtpZF09XCJjb21wb25lbnRJZCsnX1JlbW92ZUZpbGVCdG5fJytpXCIgW25hbWVdPVwiY29tcG9uZW50SWQrJ19SZW1vdmVGaWxlQnRuXycraVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWxlKGF0dGFjaG1lbnQpXCIgW2Rpc2FibGVkXT1cImdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdESVNBQkxFRCdcIiBhcmlhLWxhYmVsPVwiUmVtb3ZlIEF0dGFjaG1lbnRcIj5SZW1vdmUgQXR0YWNobWVudDwvYnV0dG9uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+Il19
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9tdWx0aS1maWxlLXVwbG9hZC9tdWx0aS1maWxlLXVwbG9hZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL211bHRpLWZpbGUtdXBsb2FkL211bHRpLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9DLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU9wSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7O0FBVWhHLE1BQU0sT0FBTyx3QkFBd0I7SUFzQmY7SUFBMkM7SUFDckQ7SUF0QkQsS0FBSyxDQUFhO0lBQ2xCLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLFNBQVMsQ0FBNkI7SUFDdEMsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sR0FBRyxhQUFhLENBQUM7SUFDdkIsV0FBVyxHQUEwQixFQUFFLENBQUM7SUFDeEMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUVwQixZQUFZLEdBQWlDLElBQUksWUFBWSxFQUFFLENBQUM7SUFDaEUsV0FBVyxHQUFpQyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQy9ELFFBQVEsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUUzQixXQUFXLENBQU07SUFFNUQsV0FBVyxHQUFHLDhCQUE4QixDQUFDO0lBQzdDLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsWUFB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QUM7UUFDcEMsQ0FBQztJQUNILENBQUM7d0dBOUZVLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLHNpQkNqQnJDLCtqR0FvRE87OzRGRG5DTSx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0Usd0JBQXdCOzBKQUt6QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRW9DLFdBQVc7c0JBQXJELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5cbmltcG9ydCB7IE9lcGFBdHRhY2htZW50LCBPZXBhUGFyc2VyUmVwb3J0LCBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1jb21tb24tbGliJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybWF0aW9uLW1vZGFsL2NvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2VwYUZpbGVVdGlsU2VydmljZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtY29tbW9uLWxpYic7XG5cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLW11bHRpLWZpbGUtdXBsb2FkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLWZpbGUtdXBsb2FkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktZmlsZS11cGxvYWQuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpRmlsZVVwbG9hZENvbXBvbmVudCAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGdyb3VwITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBmaWVsZDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZXJyb3JMYWJlbDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGJsYW5rRm9ybTogT2VwYUF0dGFjaG1lbnQgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGJsYW5rRm9ybVVybDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNob3dWYWxpZGF0aW9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRvbWFpbiA9ICdhcHBsaWNhdGlvbic7XG4gIEBJbnB1dCgpIGF0dGFjaG1lbnRzOiBBcnJheTxPZXBhQXR0YWNobWVudD4gPSBbXTtcbiAgQElucHV0KCkgcmVtb3ZlQWxsb3dlZCA9IHRydWU7XG5cbiAgQE91dHB1dCgpIGZpbGVVcGxvYWRlZDogRXZlbnRFbWl0dGVyPE9lcGFBdHRhY2htZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZpbGVSZW1vdmVkOiBFdmVudEVtaXR0ZXI8T2VwYUF0dGFjaG1lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZG93bmxvYWQ6IEV2ZW50RW1pdHRlcjxPZXBhQXR0YWNobWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnbXlGaWxlSW5wdXQnLCB7IHN0YXRpYzogdHJ1ZX0pIG15RmlsZUlucHV0OiBhbnk7XG5cbiAgY29tcG9uZW50SWQgPSAnT2VwYU11bHRpRmlsZVVwbG9hZENvbXBvbmVudCc7XG4gIHVwbG9hZEVycm9yOiBzdHJpbmcgPSAnJztcbiAgcGFyc2VyUmVwb3J0ITogT2VwYVBhcnNlclJlcG9ydDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGlkU2VydmljZTogT2VwYUNvbXBvbmVudElkU2VydmljZSwgcHJpdmF0ZSBmaWxlVXRpbFNlcnZpY2U6IE9lcGFGaWxlVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5ncm91cCkge1xuICAgICAgdGhpcy5jb21wb25lbnRJZCA9IHRoaXMuaWRTZXJ2aWNlLmdldENvbXBvbmVudElkKHRoaXMuZ3JvdXApO1xuICAgICAgdGhpcy5jb21wb25lbnRJZCArPSAodGhpcy5jb21wb25lbnRJZC5sZW5ndGggPiAwID8gJ18nIDogJycpICsgdGhpcy5maWVsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ09PUFMgTm8gZ3JvdXAgeWV0Jyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydhdHRhY2htZW50cyddICYmIGNoYW5nZXNbJ2F0dGFjaG1lbnRzJ10gLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKGNoYW5nZXNbJ2F0dGFjaG1lbnRzJ10gLmN1cnJlbnRWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmaWxlIGNoYW5nZWQgdG86ICcgKyBjaGFuZ2VzWydhdHRhY2htZW50cyddIC5jdXJyZW50VmFsdWVbMF0udXNlckZpbGVuYW1lKTtcbiAgICAgICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLmZpZWxkXS5zZXRWYWx1ZShjaGFuZ2VzWydhdHRhY2htZW50cyddIC5jdXJyZW50VmFsdWVbMF0udXNlckZpbGVuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5maWVsZF0uc2V0VmFsdWUoJycpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZmlsZSBjaGFuZ2VkIGFuZCBpcyBub3cgZW1wdHknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmlsZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3QgZmlsZUxpc3Q6IEZpbGVMaXN0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgIGlmIChmaWxlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWxlOiBGaWxlID0gZmlsZUxpc3RbMF07XG4gICAgICB0aGlzLmZpbGVVdGlsU2VydmljZS51cGxvYWRGaWxlKGZpbGUpLnN1YnNjcmliZSgoYXR0YWNobWVudDogT2VwYUF0dGFjaG1lbnQpID0+IHtcbiAgICAgICAgdGhpcy5maWxlVXBsb2FkZWQuZW1pdChhdHRhY2htZW50KTtcbiAgICAgICAgdGhpcy5teUZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICB9LCBlcnIgPT4ge1xuICAgICAgICB0aGlzLnVwbG9hZEVycm9yID0gJ0Vycm9yIHVwbG9hZGluZyBmaWxlICcgKyBlcnI7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRmlsZShhdHRhY2htZW50OiBPZXBhQXR0YWNobWVudCkge1xuICAgIGNvbnN0IG1vZGFsOiBCc01vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwgeyBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlIH0pO1xuICAgICg8Q29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkuaGVhZGVyVGV4dCA9ICdSZW1vdmUgQXR0YWNobWVudCc7XG4gICAgKDxDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5ib2R5VGV4dCA9ICdEbyB5b3Ugd2FudCB0byByZW1vdmUgdGhlIGF0dGFjaG1lbnQ6ICcgKyBhdHRhY2htZW50LnVzZXJGaWxlbmFtZSArICc/JztcbiAgICAoPENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50Pm1vZGFsLmNvbnRlbnQpLmNvbmZpcm1CdG5MYWJlbCA9ICdZZXMnO1xuICAgICg8Q29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkuY2FuY2VsQnRuTGFiZWwgPSAnTm8nO1xuICAgICg8Q29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkuY29uZmlybUNsaWNrZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZmlsZVJlbW92ZWQuZW1pdChhdHRhY2htZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZEZpbGUoYXR0YWNobWVudDogT2VwYUF0dGFjaG1lbnQpIHtcbiAgICBpZiAoIWF0dGFjaG1lbnQuc3lzdGVtRmlsZW5hbWUgfHwgYXR0YWNobWVudC5zeXN0ZW1GaWxlbmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZG93bmxvYWQuZW1pdChhdHRhY2htZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWxlVXRpbFNlcnZpY2UuZG93bmxvYWRBdHRhY2htZW50KGF0dGFjaG1lbnQpLnN1YnNjcmliZShcbiAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ0ZpbGUgZG93bmxvYWQgc3VjY2VzcycpO1xuICAgICAgICAgIGNvbnN0IG1pbWVUeXBlOiBzdHJpbmcgPSB0aGlzLmZpbGVVdGlsU2VydmljZS5taW1lVHlwZUZvckZpbGUoYXR0YWNobWVudC5zeXN0ZW1GaWxlbmFtZSB8fCAnJyk7XG4gICAgICAgICAgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVVdGlsU2VydmljZS5kb3dubG9hZEZpbGUoZGF0YSwgbWltZVR5cGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZEVycm9yID0gJ1VuYWJsZSB0byBkb3dubG9hZCBmaWxlOiAnICsgYXR0YWNobWVudC51c2VyRmlsZW5hbWUgKyAnLiBDYW5ub3QgZGV0ZXJtaW5lIG1pbWUgdHlwZSc7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMudXBsb2FkRXJyb3IgPSAnRXJyb3IgZG93bmxvYWRpbmcgZmlsZTogJyArIGF0dGFjaG1lbnQudXNlckZpbGVuYW1lICsgJy4gJyArIGVycjtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWRCbGFua0Zvcm0oKSB7XG4gICAgaWYgKHRoaXMuYmxhbmtGb3JtKSB7XG4gICAgICB0aGlzLmRvd25sb2FkRmlsZSh0aGlzLmJsYW5rRm9ybSk7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIj5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8ZGl2PlxuICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWx9fTwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiYmxhbmtGb3JtVXJsXCI+Jm5ic3A7PGEgaHJlZj1cInt7YmxhbmtGb3JtVXJsfX1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5CbGFuayBGb3JtPC9hPjwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiYmxhbmtGb3JtXCI+Jm5ic3A7PGEgaHJlZj1cIlwiIChjbGljayk9XCJkb3dubG9hZEJsYW5rRm9ybSgpXCI+QmxhbmsgRm9ybTwvYT48L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1maWxlXCIgW2Zvcl09XCJjb21wb25lbnRJZCsnX0Jyb3dzZUJ0bidcIj5cbiAgICAgICAgICAgIEJyb3dzZSZoZWxsaXA7IFxuICAgICAgICAgICAgPGlucHV0ICNteUZpbGVJbnB1dCB0eXBlPVwiZmlsZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAoY2hhbmdlKT1cImZpbGVDaGFuZ2UoJGV2ZW50KVwiIFxuICAgICAgICAgICAgICBbaWRdPVwiY29tcG9uZW50SWQrJ19Ccm93c2VCdG4nXCIgW25hbWVdPVwiY29tcG9uZW50SWQrJ19Ccm93c2VCdG4nXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JvdXAuY29udHJvbHNbZmllbGRdLnN0YXR1cyA9PT0gJ0RJU0FCTEVEJ1wiPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGxhYmVsIFtmb3JdPVwiY29tcG9uZW50SWQrJ19JbnB1dCdcIiBjbGFzcz1cInNyLW9ubHlcIj5TZWxlY3RlZCBmaWxlPC9sYWJlbD5cbiAgICAgICAgPGlucHV0ICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOnNob3dWYWxpZGF0aW9uICYmIGdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdJTlZBTElEJ31cIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiKCFhdHRhY2htZW50cyB8fCBhdHRhY2htZW50cy5sZW5ndGggPT09IDApID8gJ05vIGZpbGVzIHVwbG9hZGVkJyA6IChhdHRhY2htZW50cy5sZW5ndGggKyAnIGZpbGUocykgdXBsb2FkZWQnKVwiXG4gICAgICAgICAgW2lkXT1cImNvbXBvbmVudElkKydfSW5wdXQnXCIgW25hbWVdPVwiY29tcG9uZW50SWQrJ19JbnB1dCdcIiByZWFkb25seT5cbiAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJzaG93VmFsaWRhdGlvbiAmJiBncm91cC5jb250cm9sc1tmaWVsZF0uc3RhdHVzID09PSAnSU5WQUxJRCdcIj57e2Vycm9yTGFiZWwgfHwgbGFiZWx9fSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gZHVtbXkgaW5wdXQgZmllbGQgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMgLS0+XG4gICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIFtoaWRkZW5dPVwidHJ1ZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGRcIiBpZD1cImZpZWxkXCIvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwidXBsb2FkRXJyb3JcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiIHJvbGU9XCJhbGVydFwiPnt7dXBsb2FkRXJyb3J9fTwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJwYXJzZXJSZXBvcnRcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCIhYXR0YWNobWVudHNbMF0gJiYgcGFyc2VyUmVwb3J0LnN1Y2Nlc3NmdWxcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIiByb2xlPVwiYWxlcnRcIj5TcHJlYWRzaGVldCB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC48L2Rpdj5cbiAgICAgIDxkaXYgW2hpZGRlbl09XCJwYXJzZXJSZXBvcnQuc3VjY2Vzc2Z1bFwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgIFRoZXJlIGFyZSBlcnJvcnMgaW4gdGhlIHVwbG9hZGVkIHNwcmVhZHNoZWV0OlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlcnJvciBvZiBwYXJzZXJSZXBvcnQuZXJyb3JzXCI+e3tlcnJvci5tZXNzYWdlfX08L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiYXR0YWNobWVudHMgJiYgYXR0YWNobWVudHNbMF1cIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzOyBsZXQgaT1pbmRleDtcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgIDxhIChjbGljayk9XCJkb3dubG9hZEZpbGUoYXR0YWNobWVudClcIiBbaWRdPVwiY29tcG9uZW50SWQrJ19Eb3dubG9hZEZpbGVMaW5rXycraVwiIFtuYW1lXT1cImNvbXBvbmVudElkKydfRG93bmxvYWRGaWxlTGlua18nK2lcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj57e2F0dGFjaG1lbnQudXNlckZpbGVuYW1lfX08L2E+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZW1vdmVBbGxvd2VkXCIgY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgW2lkXT1cImNvbXBvbmVudElkKydfUmVtb3ZlRmlsZUJ0bl8nK2lcIiBbbmFtZV09XCJjb21wb25lbnRJZCsnX1JlbW92ZUZpbGVCdG5fJytpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpbGUoYXR0YWNobWVudClcIiBbZGlzYWJsZWRdPVwiZ3JvdXAuY29udHJvbHNbZmllbGRdLnN0YXR1cyA9PT0gJ0RJU0FCTEVEJ1wiIGFyaWEtbGFiZWw9XCJSZW1vdmUgQXR0YWNobWVudFwiPlJlbW92ZSBBdHRhY2htZW50PC9idXR0b24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZm9ybT4iXX0=