@rangertechnologies/ngnxt 2.1.185 → 2.1.187

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.
@@ -9,7 +9,7 @@ export const VERSION = {
9
9
  "semver": null,
10
10
  "suffix": "05a52cb-dirty",
11
11
  "semverString": null,
12
- "version": "2.1.185"
12
+ "version": "2.1.187"
13
13
  };
14
14
  /* tslint:enable */
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2Vudmlyb25tZW50cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJFQUEyRTtBQUMzRSxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxJQUFJO0lBQ2IsS0FBSyxFQUFFLGVBQWU7SUFDdEIsTUFBTSxFQUFFLFNBQVM7SUFDakIsVUFBVSxFQUFFLElBQUk7SUFDaEIsS0FBSyxFQUFFLElBQUk7SUFDWCxRQUFRLEVBQUUsSUFBSTtJQUNkLFFBQVEsRUFBRSxlQUFlO0lBQ3pCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLFNBQVMsRUFBRSxTQUFTO0NBQ3ZCLENBQUM7QUFDRixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJTVBPUlRBTlQ6IFRISVMgRklMRSBJUyBBVVRPIEdFTkVSQVRFRCEgRE8gTk9UIE1BTlVBTExZIEVESVQgT1IgQ0hFQ0tJTiFcbi8qIHRzbGludDpkaXNhYmxlICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IHtcbiAgICBcImRpcnR5XCI6IHRydWUsXG4gICAgXCJyYXdcIjogXCIwNWE1MmNiLWRpcnR5XCIsXG4gICAgXCJoYXNoXCI6IFwiMDVhNTJjYlwiLFxuICAgIFwiZGlzdGFuY2VcIjogbnVsbCxcbiAgICBcInRhZ1wiOiBudWxsLFxuICAgIFwic2VtdmVyXCI6IG51bGwsXG4gICAgXCJzdWZmaXhcIjogXCIwNWE1MmNiLWRpcnR5XCIsXG4gICAgXCJzZW12ZXJTdHJpbmdcIjogbnVsbCxcbiAgICBcInZlcnNpb25cIjogXCIyLjEuMTg1XCJcbn07XG4vKiB0c2xpbnQ6ZW5hYmxlICovXG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2Vudmlyb25tZW50cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJFQUEyRTtBQUMzRSxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxJQUFJO0lBQ2IsS0FBSyxFQUFFLGVBQWU7SUFDdEIsTUFBTSxFQUFFLFNBQVM7SUFDakIsVUFBVSxFQUFFLElBQUk7SUFDaEIsS0FBSyxFQUFFLElBQUk7SUFDWCxRQUFRLEVBQUUsSUFBSTtJQUNkLFFBQVEsRUFBRSxlQUFlO0lBQ3pCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLFNBQVMsRUFBRSxTQUFTO0NBQ3ZCLENBQUM7QUFDRixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJTVBPUlRBTlQ6IFRISVMgRklMRSBJUyBBVVRPIEdFTkVSQVRFRCEgRE8gTk9UIE1BTlVBTExZIEVESVQgT1IgQ0hFQ0tJTiFcbi8qIHRzbGludDpkaXNhYmxlICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IHtcbiAgICBcImRpcnR5XCI6IHRydWUsXG4gICAgXCJyYXdcIjogXCIwNWE1MmNiLWRpcnR5XCIsXG4gICAgXCJoYXNoXCI6IFwiMDVhNTJjYlwiLFxuICAgIFwiZGlzdGFuY2VcIjogbnVsbCxcbiAgICBcInRhZ1wiOiBudWxsLFxuICAgIFwic2VtdmVyXCI6IG51bGwsXG4gICAgXCJzdWZmaXhcIjogXCIwNWE1MmNiLWRpcnR5XCIsXG4gICAgXCJzZW12ZXJTdHJpbmdcIjogbnVsbCxcbiAgICBcInZlcnNpb25cIjogXCIyLjEuMTg3XCJcbn07XG4vKiB0c2xpbnQ6ZW5hYmxlICovXG4iXX0=
@@ -227,13 +227,13 @@ export class CustomDropdownComponent {
227
227
  }
228
228
  }
229
229
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomDropdownComponent, deps: [{ token: i1.ChangeService }, { token: i2.DataService }, { token: i3.I18nService }], target: i0.ɵɵFactoryTarget.Component });
230
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomDropdownComponent, isStandalone: true, selector: "app-custom-dropdown", inputs: { options: "options", placeholder: "placeholder", apiMeta: "apiMeta", selectedValue: "selectedValue", progressBar: "progressBar", id: "id", readOnly: "readOnly", errorMessage: "errorMessage", error: "error", fromShengel: "fromShengel", question: "question", referenceField: "referenceField", token: "token", mode: "mode" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "dropdownWrapper", first: true, predicate: ["dropdownWrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #dropdownWrapper class=\"dropdown-close\">\n <nxt-input \n [type]=\"'dropdown'\"\n [mode]=\"mode\"\n [value]=\"selectedValue\"\n (onFocus)=\"getOptions()\"\n [labelFont]=\"question.font\"\n [label]=\"removeCharacters(question?.questionText)\"\n [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\"\n [inputValueSize]=\"question.fontSize\"\n [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\"\n [showLabel]=\"question.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"placeholder\"\n [required]=\"question.isOptional\" inputBgColor=\"#F5F5F5\"\n [inputId]=\"question.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\"\n (toggleEmit)=\"toggle()\"\n (clearInputEmit)=\"clearSelection()\"\n (inputValue)=\"inputValue($event.value,$event.question)\"\n >\n</nxt-input>\n\n <!-- SKS11JUN25 Dropdown list -->\n <ul class=\"nxt-dropdown-menu\" *ngIf=\"showOptions && options.length > 0\">\n <li *ngFor=\"let item of options\" (mousedown)=\"selectChange(item)\">\n {{ apiObj && !apiObj.isDependentField && item[labelField] ? item[labelField] : item?.value }}\n </li>\n </ul>\n</div>\n<span *ngIf=\"error || invalidFieldIds.includes(id)\" class=\"error-msg\">{{ errorMessage }}</span>\n", styles: [".shengel-custom-select-wrapper{position:relative}.nxt-dropdown-menu{position:absolute;z-index:10;background:#fff;border:1px solid #ccc;max-height:200px;overflow-y:auto;width:100%;margin-top:2px;list-style:none;padding:0}.nxt-dropdown-menu li{padding:8px;cursor:pointer}.nxt-dropdown-menu li:hover{background-color:#f0f0f0}.invalid .shengel-custom-select{border-color:red}.shengel-custom-select{width:100%;padding-right:50px}.dropdown-close{position:relative}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "clearInputEmit", "nativeInputRef"] }] });
230
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomDropdownComponent, isStandalone: true, selector: "app-custom-dropdown", inputs: { options: "options", placeholder: "placeholder", apiMeta: "apiMeta", selectedValue: "selectedValue", progressBar: "progressBar", id: "id", readOnly: "readOnly", errorMessage: "errorMessage", error: "error", fromShengel: "fromShengel", question: "question", referenceField: "referenceField", token: "token", mode: "mode" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "dropdownWrapper", first: true, predicate: ["dropdownWrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #dropdownWrapper class=\"dropdown-close\">\n <nxt-input \n [type]=\"'dropdown'\"\n [mode]=\"mode\"\n [value]=\"selectedValue\"\n (onFocus)=\"getOptions()\"\n [labelFont]=\"question.font\"\n [label]=\"removeCharacters(question?.questionText)\"\n [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\"\n [inputValueSize]=\"question.fontSize\"\n [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\"\n [showLabel]=\"question.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"placeholder\"\n [required]=\"question.isOptional\" inputBgColor=\"#F5F5F5\"\n [inputId]=\"question.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\"\n (toggleEmit)=\"toggle()\"\n (clearInputEmit)=\"clearSelection()\"\n [question]=\"question\"\n (inputValue)=\"inputValue($event.value,$event.question)\"\n >\n</nxt-input>\n\n <!-- SKS11JUN25 Dropdown list -->\n <ul class=\"nxt-dropdown-menu\" *ngIf=\"showOptions && options.length > 0\">\n <li *ngFor=\"let item of options\" (mousedown)=\"selectChange(item)\">\n {{ apiObj && !apiObj.isDependentField && item[labelField] ? item[labelField] : item?.value }}\n </li>\n </ul>\n</div>\n<span *ngIf=\"error || invalidFieldIds.includes(id)\" class=\"error-msg\">{{ errorMessage }}</span>\n", styles: [".shengel-custom-select-wrapper{position:relative}.nxt-dropdown-menu{position:absolute;z-index:10;background:#fff;border:1px solid #ccc;max-height:200px;overflow-y:auto;width:100%;margin-top:2px;list-style:none;padding:0}.nxt-dropdown-menu li{padding:8px;cursor:pointer}.nxt-dropdown-menu li:hover{background-color:#f0f0f0}.invalid .shengel-custom-select{border-color:red}.shengel-custom-select{width:100%;padding-right:50px}.dropdown-close{position:relative}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "clearInputEmit", "nativeInputRef"] }] });
231
231
  }
232
232
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomDropdownComponent, decorators: [{
233
233
  type: Component,
234
234
  args: [{ selector: 'app-custom-dropdown', standalone: true, imports: [
235
235
  CommonModule, FormsModule, NxtInput
236
- ], template: "<div #dropdownWrapper class=\"dropdown-close\">\n <nxt-input \n [type]=\"'dropdown'\"\n [mode]=\"mode\"\n [value]=\"selectedValue\"\n (onFocus)=\"getOptions()\"\n [labelFont]=\"question.font\"\n [label]=\"removeCharacters(question?.questionText)\"\n [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\"\n [inputValueSize]=\"question.fontSize\"\n [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\"\n [showLabel]=\"question.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"placeholder\"\n [required]=\"question.isOptional\" inputBgColor=\"#F5F5F5\"\n [inputId]=\"question.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\"\n (toggleEmit)=\"toggle()\"\n (clearInputEmit)=\"clearSelection()\"\n (inputValue)=\"inputValue($event.value,$event.question)\"\n >\n</nxt-input>\n\n <!-- SKS11JUN25 Dropdown list -->\n <ul class=\"nxt-dropdown-menu\" *ngIf=\"showOptions && options.length > 0\">\n <li *ngFor=\"let item of options\" (mousedown)=\"selectChange(item)\">\n {{ apiObj && !apiObj.isDependentField && item[labelField] ? item[labelField] : item?.value }}\n </li>\n </ul>\n</div>\n<span *ngIf=\"error || invalidFieldIds.includes(id)\" class=\"error-msg\">{{ errorMessage }}</span>\n", styles: [".shengel-custom-select-wrapper{position:relative}.nxt-dropdown-menu{position:absolute;z-index:10;background:#fff;border:1px solid #ccc;max-height:200px;overflow-y:auto;width:100%;margin-top:2px;list-style:none;padding:0}.nxt-dropdown-menu li{padding:8px;cursor:pointer}.nxt-dropdown-menu li:hover{background-color:#f0f0f0}.invalid .shengel-custom-select{border-color:red}.shengel-custom-select{width:100%;padding-right:50px}.dropdown-close{position:relative}\n"] }]
236
+ ], template: "<div #dropdownWrapper class=\"dropdown-close\">\n <nxt-input \n [type]=\"'dropdown'\"\n [mode]=\"mode\"\n [value]=\"selectedValue\"\n (onFocus)=\"getOptions()\"\n [labelFont]=\"question.font\"\n [label]=\"removeCharacters(question?.questionText)\"\n [labelColor]=\"question.fontColor\"\n [labelSize]=\"question.fontSize\"\n [inputValueSize]=\"question.fontSize\"\n [labelWeight]=\"question.fontWeight\"\n [inputWeight]=\"question.fontWeight\"\n [showLabel]=\"question.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"placeholder\"\n [required]=\"question.isOptional\" inputBgColor=\"#F5F5F5\"\n [inputId]=\"question.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"question.iconLeftSrc\"\n (toggleEmit)=\"toggle()\"\n (clearInputEmit)=\"clearSelection()\"\n [question]=\"question\"\n (inputValue)=\"inputValue($event.value,$event.question)\"\n >\n</nxt-input>\n\n <!-- SKS11JUN25 Dropdown list -->\n <ul class=\"nxt-dropdown-menu\" *ngIf=\"showOptions && options.length > 0\">\n <li *ngFor=\"let item of options\" (mousedown)=\"selectChange(item)\">\n {{ apiObj && !apiObj.isDependentField && item[labelField] ? item[labelField] : item?.value }}\n </li>\n </ul>\n</div>\n<span *ngIf=\"error || invalidFieldIds.includes(id)\" class=\"error-msg\">{{ errorMessage }}</span>\n", styles: [".shengel-custom-select-wrapper{position:relative}.nxt-dropdown-menu{position:absolute;z-index:10;background:#fff;border:1px solid #ccc;max-height:200px;overflow-y:auto;width:100%;margin-top:2px;list-style:none;padding:0}.nxt-dropdown-menu li{padding:8px;cursor:pointer}.nxt-dropdown-menu li:hover{background-color:#f0f0f0}.invalid .shengel-custom-select{border-color:red}.shengel-custom-select{width:100%;padding-right:50px}.dropdown-close{position:relative}\n"] }]
237
237
  }], ctorParameters: () => [{ type: i1.ChangeService }, { type: i2.DataService }, { type: i3.I18nService }], propDecorators: { options: [{
238
238
  type: Input
239
239
  }], placeholder: [{
@@ -271,4 +271,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
271
271
  type: HostListener,
272
272
  args: ['document:click', ['$event']]
273
273
  }] } });
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1kcm9wZG93bi9jdXN0b20tZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLWRyb3Bkb3duL2N1c3RvbS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFZLFlBQVksRUFBYyxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRzdJLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU0xRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7O0FBVzVELE1BQU0sT0FBTyx1QkFBdUI7SUFxQnhCO0lBQ0E7SUFDRDtJQXRCQSxPQUFPLEdBQVUsRUFBRSxDQUFDO0lBQ3BCLFdBQVcsQ0FBUztJQUNwQixPQUFPLENBQVM7SUFDaEIsYUFBYSxDQUFTO0lBQ3RCLFdBQVcsQ0FBVTtJQUNyQixFQUFFLENBQVM7SUFDWCxRQUFRLEdBQVksS0FBSyxDQUFDLENBQUMsK0JBQStCO0lBQzFELFlBQVksQ0FBUztJQUNyQixLQUFLLENBQU07SUFDWCxXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCLFFBQVEsQ0FBTTtJQUNkLGNBQWMsQ0FBUztJQUN2QixLQUFLLENBQVMsQ0FBSSxzQ0FBc0M7SUFDeEQsSUFBSSxHQUE4QixNQUFNLENBQUMs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SSxZQUFZLCtQQUFFLFdBQVcsK0JBQUUsUUFBUTs7NEZBSzFCLHVCQUF1QjtrQkFUbkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQO3dCQUNQLFlBQVksRUFBRSxXQUFXLEVBQUUsUUFBUTtxQkFDcEM7c0lBS1EsT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRXVCLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQWtMOUIsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT3B0aW9uYWwsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFQSU1ldGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FwaW1ldGEnO1xuaW1wb3J0IHsgQ2hhbmdlV3JhcHBlciB9IGZyb20gJy4uLy4uL21vZGVsL2NoYW5nZVdyYXBwZXInO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xuLy8gVkQgMjNKQU4yNCB1c2VkIHNlcnZpY2UgZmlsZSBmb3IgY2FsbG91dFxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTnh0SW5wdXQgfSBmcm9tICcuLi9ueHQtaW5wdXQvbnh0LWlucHV0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jdXN0b20tZHJvcGRvd24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTnh0SW5wdXRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1kcm9wZG93bi5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBvcHRpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBhcGlNZXRhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcbiAgQElucHV0KCkgcHJvZ3Jlc3NCYXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7IC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2VcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGVycm9yOiBhbnk7XG4gIEBJbnB1dCgpIGZyb21TaGVuZ2VsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIHJlZmVyZW5jZUZpZWxkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRva2VuOiBzdHJpbmc7ICAgIC8vIFZEIDE5SkFOMjQgLSBnZXR0aW5nIHRva2VuIGFzIGlucHV0XG4gIEBJbnB1dCgpIG1vZGU6ICd2aWV3JyB8ICdlZGl0JyB8ICdwcmludCcgPSAnZWRpdCc7IC8vIFNLUzExSlVOMjUgTmV3IG1vZGUgaW5wdXRcbiAgICBcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duV3JhcHBlcicpIGRyb3Bkb3duV3JhcHBlcjogRWxlbWVudFJlZjtcbiAgaW52YWxpZEZpZWxkSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLnN1Ym1pdFZhbGlkYXRlJC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIC8vIHRvIGdldCB0aGUgZXJyb3IgbWVzc2FnZSdzIGZpZWxkIGlkJ3NcbiAgICAgIHRoaXMuaW52YWxpZEZpZWxkSWRzLnB1c2goZGF0YSk7XG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBsYWJlbEZpZWxkOiBzdHJpbmc7XG4gIHB1YmxpYyB2YWx1ZUZpZWxkOiBzdHJpbmc7XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAvL3B1YmxpYyBhcGlPYmo6QVBJTWV0YTtcbiAgcHVibGljIHVuaXF1ZUtleTogc3RyaW5nO1xuICBhcGlPYmo6IGFueSA9IHt9O1xuICBzaG93T3B0aW9ucyA9IGZhbHNlO1xuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ21vZGUnXSkge1xuICAgICAgdGhpcy5tb2RlID0gY2hhbmdlc1snbW9kZSddLmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gIH1cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICB0aGlzLnNob3dPcHRpb25zID0gdHJ1ZTtcbiAgICBjb25zb2xlLmxvZygndGVzdCBjbGljaycpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgb25pbml0IG9mIGN1c3RvbS1kcm9wZG93biBvZiAnICsgdGhpcy5pZCk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5hcGlNZXRhKTtcbiAgICAvL1ZEIDA3QXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxuICAgIC8vIFZEIDI1T2N0MjQgLSBjaGFuZ2VzXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXIgPyB0aGlzLnBsYWNlaG9sZGVyIDogJy0tLVNlbGVjdCBvcHRpb24tLS0nO1xuICAgIGlmICh0aGlzLmFwaU1ldGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIE1TTS0yN01BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgICAgICAgdGhpcy5hcGlPYmogPSB0eXBlb2YgdGhpcy5hcGlNZXRhID09PSAnb2JqZWN0JyA/IHRoaXMuYXBpTWV0YSA6IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcblxuICAgICAgICAvLyBDaGVjayBpZiBhcGlPYmogYW5kIGFwaU9iai5maWVsZCBhcmUgZGVmaW5lZFxuICAgICAgICBpZiAodGhpcy5hcGlPYmogJiYgdGhpcy5hcGlPYmouZmllbGQpIHtcbiAgICAgICAgICB0aGlzLnNob3dPcHRpb25zID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmxhYmVsRmllbGQgPSB0aGlzLmFwaU9iai5maWVsZDtcbiAgICAgICAgICB0aGlzLnVuaXF1ZUtleSA9IHRoaXMuYXBpT2JqLnVuaXF1ZUtleTtcbiAgICAgICAgICBjb25zdCBjYWNoZWRPcHRpb25zID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy51bmlxdWVLZXkpO1xuICAgICAgICAgIGlmIChjYWNoZWRPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBKU09OLnBhcnNlKGNhY2hlZE9wdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYXBpT2JqLmlzRGVwZW5kZW50RmllbGQpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFZEIDA5U2VwMjQtIHNldHVwIHRoZSBxdWVyeSBwYXJhbSBmb3IgYXBpIGNhbGwgLy8gTVIgMDhKQU4yNCBEZXBlbmRlbnRGaWVsZCBBUEkgRml4IG1vdmVkIGJlbG93IGxvZ2ljIGZyb20gYWJvdmUgaWYgY29uZGl0aW9uXG4gICAgICAgICAgICBsZXQgZnVsbEVuZFBvaW50O1xuICAgICAgICAgICAgaWYgKHRoaXMuYXBpT2JqLmVuZHBvaW50KSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmFwaU9iai5xdWVyeVZhbHVlUmVmZXJlbmNlICYmIHRoaXMuYXBpT2JqLnF1ZXJ5RmllbGQpIHtcbiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIHRoZSBlbmQgcG9pbnQgd2l0aCBxdWVyeSBwYXJhbVxuICAgICAgICAgICAgICAgIGxldCBxdWVyeVJlZmVyZW5jZXMgPSB0aGlzLmFwaU9iai5xdWVyeVZhbHVlUmVmZXJlbmNlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgbGV0IHF1ZXJ5RmllbGRzID0gdGhpcy5hcGlPYmoucXVlcnlGaWVsZC5zcGxpdCgnLCcpOyAgICAvLyBNUiAwOEpBTjI0IHNpbWlsYXIgdG8gYWJvdmUgdmFsdWVyZWZlcmVuY2UgZ2V0IGxpc3Qgb2YgUVVFUlkgRmllbGRzXG4gICAgICAgICAgICAgICAgbGV0IHF1ZXJ5VmFsdWVzID0gdGhpcy5hcGlPYmoucXVlcnlWYWx1ZS5zcGxpdCgnLCcpOyAgICAvLyBNUiAwOEpBTjI0IHNpbWlsYXIgdG8gYWJvdmUgdmFsdWVyZWZlcmVuY2UgZ2V0IGxpc3Qgb2YgUVVFUlkgVmFsdWVzIChEZWZhdWx0KVxuICAgICAgICAgICAgICAgIGxldCBxdWVyeVBhcmFtcyA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBxSW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTVIgMDhKQU4yNCBRdWVyeSBJbmRleFxuICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBxdWVyeVJlZmVyZW5jZXMgYW5kIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiByZWZlcmVuY2VEYXRhXG4gICAgICAgICAgICAgICAgcXVlcnlSZWZlcmVuY2VzLmZvckVhY2gocmVmZXJlbmNlID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGVsZW1lbnQgaW4gcmVmZXJlbmNlRGF0YSB0aGF0IG1hdGNoZXMgdGhlIGN1cnJlbnQgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAgICAgICAgICAgICAgICAgbGV0IG1hdGNoaW5nRWxlbWVudCA9IHRoaXMucXVlc3Rpb24/LnJlZmVyZW5jZVF1ZXJ5RGF0YS5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC5yZWZlcmVuY2VGaWVsZCA9PT0gcmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICAgIC8vIElmIGEgbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZCwgZ2V0IGl0cyBpbnB1dCB2YWx1ZSBhbmQgY3JlYXRlIGEgcXVlcnkgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlICYmIG1hdGNoaW5nRWxlbWVudCkgeyAgIC8vIE1SIDA4SkFOMjQgaWYgcmVmZXJlbmNlIGV4aXN0ICYgbWF0Y2hpbmcgZWxlbWVudCBmb3VuZFxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcy5wdXNoKGAke3F1ZXJ5RmllbGRzW3FJbmRleF19PSR7bWF0Y2hpbmdFbGVtZW50LmlucHV0fWApOyAgICAvLyBNUiAwOEpBTjI0IHJlbW92ZWQgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAvLyBNUiAwOEpBTjI0IGluY2x1ZGVkIG9wdGlvbiBmb3IgbXVsdGlwbGUgcXVlcnkgcGFyYW1zIGFuZCBkZWZhdWx0IHZhbHVlIGluIGNhc2Ugb2YgcmVmZXJlbmNlIGlzIG5vdCBmb3VuZFxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcy5wdXNoKGAke3F1ZXJ5RmllbGRzW3FJbmRleF19PSR7cXVlcnlWYWx1ZXNbcUluZGV4XX1gKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcUluZGV4Kys7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZnVsbEVuZFBvaW50ID0gdGhpcy5hcGlPYmouZW5kcG9pbnQgKyAnPycgKyBxdWVyeVBhcmFtcy5qb2luKCcmJyk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZnVsbEVuZFBvaW50KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBubyBxdWVyeSBwYXJhbSBnZXQgdGhlIGFjdHVhbCBlbmRQb2ludFxuICAgICAgICAgICAgICAgIGZ1bGxFbmRQb2ludCA9IHRoaXMuYXBpT2JqLmVuZHBvaW50O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gVkQgMTlKQU4yNCAtIGFkZGVkIG9uZSBtb3JlIHBhcmFtIGZvciBhdXRoZW50aWNhdGlvblxuICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwaVJlc3BvbnNlKGZ1bGxFbmRQb2ludCk/LnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBIQSAxOC1KQU4tMjQgQXNzaWduZWQgYXBpcmVzcG9uc2UgZGlyZWN0bHkgaWYgd2UgaGF2ZSB0aGUgcmVzcG9uc2UgaW4gYXJyYXkgYWxzb1xuICAgICAgICAgICAgICAgIC8vIFZEIDE5SkFOMjQgLSBpZiByZXNwb25zZSBoYXMga2V5IHdpdGggdmFsdWUod2hpY2ggaXMgYXJyYXkpXG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlcztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcGlPYmoudmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFZEIDIxTWF5MjQgLSBoYW5kbGluZyBtdWx0aXBsZSBjaGlsZCBvYmplY3RzXG4gICAgICAgICAgICAgICAgICAvLyBWRCAyMk1heTI0IC0gdXNlZCBjb21tb24gc2VydmljZSBmaWxlXG4gICAgICAgICAgICAgICAgICByZXNwb25zZXMgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGFwaVJlc3BvbnNlLCB0aGlzLmFwaU9iai52YXJpYWJsZSk7XG4gICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgLy8gSEEgMTlKQU4yNCBUbyBhdm9pZCB1bmRlZmluZWQgZXJyb3IgaW4gY29uc29sZVxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNwID0gcmVzcG9uc2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzcCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAvLyBWRCAxOUpBTjI0IC0gaWYgcmVzcG9uc2UgaGFzIHZhbHVlKHdoaWNoIGlzIGFycmF5KSBvbmx5XG4gICAgICAgICAgICAgICAgICByZXNwb25zZXMgPSBhcGlSZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3BvbnNlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVkQgMjVPY3QyNCAtIFN0b3JlIGZldGNoZWQgb3B0aW9ucyBpbiBsb2NhbCBzdG9yYWdlXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5pcXVlS2V5KSB7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnVuaXF1ZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBWRCBOT1YyMyAtIGhhbmRsZSB0aGUgZGVwZW5kZW50IHVwZGF0ZSBmb3IgZHJvcGRvd25cbiAgICAgICAgICAgIC8vIFZEIDA5U2VwMjQtIHB1c2ggdGhlIGRlcGVuZGVudCBmaWVsZCB2YWx1ZXMgZm9yIGRyb3Bkb3duXG4gICAgICAgICAgICBsZXQgc291cmNlSWQgPSB0aGlzLmFwaU9iai5zb3VyY2VRdWVzdGlvbklkO1xuICAgICAgICAgICAgaWYgKHNvdXJjZUlkICYmIHRoaXMuYXBpT2JqLnZhcmlhYmxlIHx8IHRoaXMuYXBpT2JqLnZhbHVlRmllbGQpIHtcbiAgICAgICAgICAgICAgLy8gU3Vic2NyaWJlIGZvciB0aGUgY2hhbmdlc1xuICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jaGFuZ2VBbm5vdW5jZWQkLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzdWJzY3JpcHRpb24gZm9yIHRoZSBjaGFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZVZhbHVlLnZhbHVlT2JqICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCA9PSB0aGlzLmFwaU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGNoYW5nZVZhbHVlLnZhbHVlT2JqW3RoaXMuYXBpT2JqLnZhbHVlRmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICBsZXQgdmFsdWUgPXt9O1xuICAgICAgICAgICAgICAgICAgICAgIC8vICB2YWx1ZVsnbmFtZSddID0gdGhpcy5zZWxlY3RlZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZXM7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXBpT2JqLnZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGNoYW5nZVZhbHVlLnZhbHVlT2JqLCB0aGlzLmFwaU9iai52YXJpYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNwID0gcmVzcG9uc2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSByZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMgPSBjaGFuZ2VWYWx1ZS52YWx1ZU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3BvbnNlcztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVkQgMjVPY3QyNCAtIFN0b3JlIGZldGNoZWQgb3B0aW9ucyBpbiBsb2NhbCBzdG9yYWdlXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5pcXVlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnVuaXF1ZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VydmljZS5jb25maXJtQ2hhbmdlKHRoaXMuYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgYXBpTWV0YTonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIFZEIDIyTWF5MjQgLSB1c2VkIGNvbW1vbiBzZXJ2aWNlIGZpbGVcblxuICBzZWxlY3RDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdpbnNpZGUgc2VsZWN0Q2hhbmdlIGZyb20gJyArIHRoaXMuaWQpO1xuICAgIGxldCBjaGFuZ2UgPSBuZXcgQ2hhbmdlV3JhcHBlcigpOyAvLyBDaGFuZ2VXcmFwcGVyID0gSlNPTi5wYXJzZSgne30nKTtcbiAgICBjaGFuZ2UuZnJvbVF1ZXN0aW9uSWQgPSB0aGlzLmlkO1xuICAgIGNoYW5nZS52YWx1ZU9iaiA9IGV2ZW50ID8gZXZlbnRbdGhpcy5sYWJlbEZpZWxkXSA/IGV2ZW50W3RoaXMubGFiZWxGaWVsZF0gOiBldmVudD8udmFsdWUgOiAnJztcbiAgICBjaGFuZ2UucmVmZXJlbmNlRmllbGQgPSB0aGlzLnJlZmVyZW5jZUZpZWxkO1xuICAgIGNoYW5nZS5zZWxlY3RlZE9iaiA9IGV2ZW50ID8gZXZlbnRbdGhpcy5sYWJlbEZpZWxkXSA/IGV2ZW50W3RoaXMubGFiZWxGaWVsZF0gOiBldmVudD8udmFsdWUgOiAnJztcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoe3F1ZXN0aW9uIDogdGhpcy5xdWVzdGlvbiwgdmFsdWU6IGNoYW5nZX0pO1xuICAgIC8vIG9uY2UgZ290IHZhbHVlIGluIGRyb3Bkb3duIHJlbW92ZSB0aGUgZXJyb3IgdmFsaWRhdGlvblxuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5pbnZhbGlkRmllbGRJZHMgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5zaG93T3B0aW9ucyA9IGZhbHNlO1xuICB9XG50b2dnbGUoKXtcbiAgdGhpcy5zaG93T3B0aW9ucyA9ICF0aGlzLnNob3dPcHRpb25zO1xufVxuXG5ASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG5vbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICBpZiAodGhpcy5kcm9wZG93bldyYXBwZXIgJiYgIXRoaXMuZHJvcGRvd25XcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgIHRoaXMuc2hvd09wdGlvbnMgPSBmYWxzZTtcbiAgfVxufVxuXG5cbiAgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gJyc7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtxdWVzdGlvbiA6IHRoaXMucXVlc3Rpb24sIHZhbHVlOiB7XG4gICAgICBmcm9tUXVlc3Rpb25JZDogdGhpcy5pZCxcbiAgICAgIHZhbHVlT2JqOiAnJyxcbiAgICAgIHJlZmVyZW5jZUZpZWxkOiB0aGlzLnJlZmVyZW5jZUZpZWxkLFxuICAgICAgc2VsZWN0ZWRPYmo6ICcnXG4gICAgfX0pO1xuICAgIHRoaXMuaW52YWxpZEZpZWxkSWRzID0gW107XG4gIH1cbiAgcmVtb3ZlQ2hhcmFjdGVycyhxdWVzdGlvblRleHQ6c3RyaW5nKXtcbiAgICBsZXQgdXBkYXRlZFRleHQgPSBxdWVzdGlvblRleHQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpO1xuICAgIHJldHVybiB1cGRhdGVkVGV4dDtcbiAgfVxuICBpbnB1dFZhbHVlKGV2ZW50LHF1ZXMpe1xuICAgIGlmKHF1ZXMuc2luZ2xlRmllbGRDaGFuZ2Upe1xuICAgICAgbGV0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7IC8vIENoYW5nZVdyYXBwZXIgPSBKU09OLnBhcnNlKCd7fScpO1xuICAgICAgY2hhbmdlLmZyb21RdWVzdGlvbklkID0gdGhpcy5pZDtcbiAgICAgIGNoYW5nZS52YWx1ZU9iaiA9IGV2ZW50O1xuICAgICAgY2hhbmdlLnJlZmVyZW5jZUZpZWxkID0gdGhpcy5yZWZlcmVuY2VGaWVsZDtcbiAgICAgIGNoYW5nZS5zZWxlY3RlZE9iaiA9IGV2ZW50O1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtxdWVzdGlvbiA6IHF1ZXMsIHZhbHVlOiBjaGFuZ2V9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgI2Ryb3Bkb3duV3JhcHBlciBjbGFzcz1cImRyb3Bkb3duLWNsb3NlXCI+XG4gIDxueHQtaW5wdXQgXG4gIFt0eXBlXT1cIidkcm9wZG93bidcIlxuICBbbW9kZV09XCJtb2RlXCJcbiAgW3ZhbHVlXT1cInNlbGVjdGVkVmFsdWVcIlxuICAob25Gb2N1cyk9XCJnZXRPcHRpb25zKClcIlxuICBbbGFiZWxGb250XT1cInF1ZXN0aW9uLmZvbnRcIlxuICBbbGFiZWxdPVwicmVtb3ZlQ2hhcmFjdGVycyhxdWVzdGlvbj8ucXVlc3Rpb25UZXh0KVwiXG4gIFtsYWJlbENvbG9yXT1cInF1ZXN0aW9uLmZvbnRDb2xvclwiXG4gIFtsYWJlbFNpemVdPVwicXVlc3Rpb24uZm9udFNpemVcIlxuICBbaW5wdXRWYWx1ZVNpemVdPVwicXVlc3Rpb24uZm9udFNpemVcIlxuICBbbGFiZWxXZWlnaHRdPVwicXVlc3Rpb24uZm9udFdlaWdodFwiXG4gIFtpbnB1dFdlaWdodF09XCJxdWVzdGlvbi5mb250V2VpZ2h0XCJcbiAgW3Nob3dMYWJlbF09XCJxdWVzdGlvbi5zdHlsZT8uc2hvd0xhYmVsXCJcbiAgaW5wdXRCb3JkZXI9XCJub25lXCIgc3ZnSGVpZ2h0PVwiMjBweFwiIHN2Z1dpZHRoPVwiMjBweFwiXG4gIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gIFtyZXF1aXJlZF09XCJxdWVzdGlvbi5pc09wdGlvbmFsXCIgaW5wdXRCZ0NvbG9yPVwiI0Y1RjVGNVwiXG4gIFtpbnB1dElkXT1cInF1ZXN0aW9uLnRyYWNraW5nSWRcIlxuICBbZXJyb3JNZXNzYWdlc109XCJ7IHJlcXVpcmVkOiAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcgfVwiXG4gIFtpbnB1dEljb25MZWZ0U3JjXT1cInF1ZXN0aW9uLmljb25MZWZ0U3JjXCJcbiAgKHRvZ2dsZUVtaXQpPVwidG9nZ2xlKClcIlxuICAoY2xlYXJJbnB1dEVtaXQpPVwiY2xlYXJTZWxlY3Rpb24oKVwiXG4gIChpbnB1dFZhbHVlKT1cImlucHV0VmFsdWUoJGV2ZW50LnZhbHVlLCRldmVudC5xdWVzdGlvbilcIlxuICA+XG48L254dC1pbnB1dD5cblxuICA8IS0tIFNLUzExSlVOMjUgRHJvcGRvd24gbGlzdCAtLT5cbiAgPHVsIGNsYXNzPVwibnh0LWRyb3Bkb3duLW1lbnVcIiAqbmdJZj1cInNob3dPcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zXCIgKG1vdXNlZG93bik9XCJzZWxlY3RDaGFuZ2UoaXRlbSlcIj5cbiAgICAgIHt7IGFwaU9iaiAmJiAhYXBpT2JqLmlzRGVwZW5kZW50RmllbGQgJiYgaXRlbVtsYWJlbEZpZWxkXSA/IGl0ZW1bbGFiZWxGaWVsZF0gOiBpdGVtPy52YWx1ZSB9fVxuICAgIDwvbGk+XG4gIDwvdWw+XG48L2Rpdj5cbjxzcGFuICpuZ0lmPVwiZXJyb3IgfHwgaW52YWxpZEZpZWxkSWRzLmluY2x1ZGVzKGlkKVwiIGNsYXNzPVwiZXJyb3ItbXNnXCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuIl19
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1kcm9wZG93bi9jdXN0b20tZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLWRyb3Bkb3duL2N1c3RvbS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFZLFlBQVksRUFBYyxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRzdJLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU0xRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7O0FBVzVELE1BQU0sT0FBTyx1QkFBdUI7SUFxQnhCO0lBQ0E7SUFDRDtJQXRCQSxPQUFPLEdBQVUsRUFBRSxDQUFDO0lBQ3BCLFdBQVcsQ0FBUztJQUNwQixPQUFPLENBQVM7SUFDaEIsYUFBYSxDQUFTO0lBQ3RCLFdBQVcsQ0FBVTtJQUNyQixFQUFFLENBQVM7SUFDWCxRQUFRLEdBQVksS0FBSyxDQUFDLENBQUMsK0JBQStCO0lBQzFELFlBQVksQ0FBUztJQUNyQixLQUFLLENBQU07SUFDWCxXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCLFFBQVEsQ0FBTTtJQUNkLGNBQWMsQ0FBUztJQUN2QixLQUFLLENBQVMsQ0FBSSxzQ0FBc0M7SUFDeEQsSUFBSSxHQUE4QixNQUFNLENBQUMs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SSxZQUFZLCtQQUFFLFdBQVcsK0JBQUUsUUFBUTs7NEZBSzFCLHVCQUF1QjtrQkFUbkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQO3dCQUNQLFlBQVksRUFBRSxXQUFXLEVBQUUsUUFBUTtxQkFDcEM7c0lBS1EsT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBRXVCLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQWtMOUIsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT3B0aW9uYWwsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFQSU1ldGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FwaW1ldGEnO1xuaW1wb3J0IHsgQ2hhbmdlV3JhcHBlciB9IGZyb20gJy4uLy4uL21vZGVsL2NoYW5nZVdyYXBwZXInO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xuLy8gVkQgMjNKQU4yNCB1c2VkIHNlcnZpY2UgZmlsZSBmb3IgY2FsbG91dFxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTnh0SW5wdXQgfSBmcm9tICcuLi9ueHQtaW5wdXQvbnh0LWlucHV0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jdXN0b20tZHJvcGRvd24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTnh0SW5wdXRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1kcm9wZG93bi5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBvcHRpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBhcGlNZXRhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcbiAgQElucHV0KCkgcHJvZ3Jlc3NCYXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7IC8vIFZEIDEySnVuMjQgLSByZWFkb25seSBjaGFuZ2VcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGVycm9yOiBhbnk7XG4gIEBJbnB1dCgpIGZyb21TaGVuZ2VsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIHJlZmVyZW5jZUZpZWxkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRva2VuOiBzdHJpbmc7ICAgIC8vIFZEIDE5SkFOMjQgLSBnZXR0aW5nIHRva2VuIGFzIGlucHV0XG4gIEBJbnB1dCgpIG1vZGU6ICd2aWV3JyB8ICdlZGl0JyB8ICdwcmludCcgPSAnZWRpdCc7IC8vIFNLUzExSlVOMjUgTmV3IG1vZGUgaW5wdXRcbiAgICBcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duV3JhcHBlcicpIGRyb3Bkb3duV3JhcHBlcjogRWxlbWVudFJlZjtcbiAgaW52YWxpZEZpZWxkSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLnN1Ym1pdFZhbGlkYXRlJC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIC8vIHRvIGdldCB0aGUgZXJyb3IgbWVzc2FnZSdzIGZpZWxkIGlkJ3NcbiAgICAgIHRoaXMuaW52YWxpZEZpZWxkSWRzLnB1c2goZGF0YSk7XG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBsYWJlbEZpZWxkOiBzdHJpbmc7XG4gIHB1YmxpYyB2YWx1ZUZpZWxkOiBzdHJpbmc7XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAvL3B1YmxpYyBhcGlPYmo6QVBJTWV0YTtcbiAgcHVibGljIHVuaXF1ZUtleTogc3RyaW5nO1xuICBhcGlPYmo6IGFueSA9IHt9O1xuICBzaG93T3B0aW9ucyA9IGZhbHNlO1xuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ21vZGUnXSkge1xuICAgICAgdGhpcy5tb2RlID0gY2hhbmdlc1snbW9kZSddLmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gIH1cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICB0aGlzLnNob3dPcHRpb25zID0gdHJ1ZTtcbiAgICBjb25zb2xlLmxvZygndGVzdCBjbGljaycpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgb25pbml0IG9mIGN1c3RvbS1kcm9wZG93biBvZiAnICsgdGhpcy5pZCk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5hcGlNZXRhKTtcbiAgICAvL1ZEIDA3QXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxuICAgIC8vIFZEIDI1T2N0MjQgLSBjaGFuZ2VzXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXIgPyB0aGlzLnBsYWNlaG9sZGVyIDogJy0tLVNlbGVjdCBvcHRpb24tLS0nO1xuICAgIGlmICh0aGlzLmFwaU1ldGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIE1TTS0yN01BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgICAgICAgdGhpcy5hcGlPYmogPSB0eXBlb2YgdGhpcy5hcGlNZXRhID09PSAnb2JqZWN0JyA/IHRoaXMuYXBpTWV0YSA6IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcblxuICAgICAgICAvLyBDaGVjayBpZiBhcGlPYmogYW5kIGFwaU9iai5maWVsZCBhcmUgZGVmaW5lZFxuICAgICAgICBpZiAodGhpcy5hcGlPYmogJiYgdGhpcy5hcGlPYmouZmllbGQpIHtcbiAgICAgICAgICB0aGlzLnNob3dPcHRpb25zID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmxhYmVsRmllbGQgPSB0aGlzLmFwaU9iai5maWVsZDtcbiAgICAgICAgICB0aGlzLnVuaXF1ZUtleSA9IHRoaXMuYXBpT2JqLnVuaXF1ZUtleTtcbiAgICAgICAgICBjb25zdCBjYWNoZWRPcHRpb25zID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy51bmlxdWVLZXkpO1xuICAgICAgICAgIGlmIChjYWNoZWRPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBKU09OLnBhcnNlKGNhY2hlZE9wdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYXBpT2JqLmlzRGVwZW5kZW50RmllbGQpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFZEIDA5U2VwMjQtIHNldHVwIHRoZSBxdWVyeSBwYXJhbSBmb3IgYXBpIGNhbGwgLy8gTVIgMDhKQU4yNCBEZXBlbmRlbnRGaWVsZCBBUEkgRml4IG1vdmVkIGJlbG93IGxvZ2ljIGZyb20gYWJvdmUgaWYgY29uZGl0aW9uXG4gICAgICAgICAgICBsZXQgZnVsbEVuZFBvaW50O1xuICAgICAgICAgICAgaWYgKHRoaXMuYXBpT2JqLmVuZHBvaW50KSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmFwaU9iai5xdWVyeVZhbHVlUmVmZXJlbmNlICYmIHRoaXMuYXBpT2JqLnF1ZXJ5RmllbGQpIHtcbiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIHRoZSBlbmQgcG9pbnQgd2l0aCBxdWVyeSBwYXJhbVxuICAgICAgICAgICAgICAgIGxldCBxdWVyeVJlZmVyZW5jZXMgPSB0aGlzLmFwaU9iai5xdWVyeVZhbHVlUmVmZXJlbmNlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgbGV0IHF1ZXJ5RmllbGRzID0gdGhpcy5hcGlPYmoucXVlcnlGaWVsZC5zcGxpdCgnLCcpOyAgICAvLyBNUiAwOEpBTjI0IHNpbWlsYXIgdG8gYWJvdmUgdmFsdWVyZWZlcmVuY2UgZ2V0IGxpc3Qgb2YgUVVFUlkgRmllbGRzXG4gICAgICAgICAgICAgICAgbGV0IHF1ZXJ5VmFsdWVzID0gdGhpcy5hcGlPYmoucXVlcnlWYWx1ZS5zcGxpdCgnLCcpOyAgICAvLyBNUiAwOEpBTjI0IHNpbWlsYXIgdG8gYWJvdmUgdmFsdWVyZWZlcmVuY2UgZ2V0IGxpc3Qgb2YgUVVFUlkgVmFsdWVzIChEZWZhdWx0KVxuICAgICAgICAgICAgICAgIGxldCBxdWVyeVBhcmFtcyA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCBxSW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTVIgMDhKQU4yNCBRdWVyeSBJbmRleFxuICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBxdWVyeVJlZmVyZW5jZXMgYW5kIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpbiByZWZlcmVuY2VEYXRhXG4gICAgICAgICAgICAgICAgcXVlcnlSZWZlcmVuY2VzLmZvckVhY2gocmVmZXJlbmNlID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGVsZW1lbnQgaW4gcmVmZXJlbmNlRGF0YSB0aGF0IG1hdGNoZXMgdGhlIGN1cnJlbnQgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAgICAgICAgICAgICAgICAgbGV0IG1hdGNoaW5nRWxlbWVudCA9IHRoaXMucXVlc3Rpb24/LnJlZmVyZW5jZVF1ZXJ5RGF0YS5maW5kKGVsZW1lbnQgPT4gZWxlbWVudC5yZWZlcmVuY2VGaWVsZCA9PT0gcmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICAgIC8vIElmIGEgbWF0Y2hpbmcgZWxlbWVudCBpcyBmb3VuZCwgZ2V0IGl0cyBpbnB1dCB2YWx1ZSBhbmQgY3JlYXRlIGEgcXVlcnkgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlICYmIG1hdGNoaW5nRWxlbWVudCkgeyAgIC8vIE1SIDA4SkFOMjQgaWYgcmVmZXJlbmNlIGV4aXN0ICYgbWF0Y2hpbmcgZWxlbWVudCBmb3VuZFxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcy5wdXNoKGAke3F1ZXJ5RmllbGRzW3FJbmRleF19PSR7bWF0Y2hpbmdFbGVtZW50LmlucHV0fWApOyAgICAvLyBNUiAwOEpBTjI0IHJlbW92ZWQgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAvLyBNUiAwOEpBTjI0IGluY2x1ZGVkIG9wdGlvbiBmb3IgbXVsdGlwbGUgcXVlcnkgcGFyYW1zIGFuZCBkZWZhdWx0IHZhbHVlIGluIGNhc2Ugb2YgcmVmZXJlbmNlIGlzIG5vdCBmb3VuZFxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcy5wdXNoKGAke3F1ZXJ5RmllbGRzW3FJbmRleF19PSR7cXVlcnlWYWx1ZXNbcUluZGV4XX1gKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcUluZGV4Kys7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZnVsbEVuZFBvaW50ID0gdGhpcy5hcGlPYmouZW5kcG9pbnQgKyAnPycgKyBxdWVyeVBhcmFtcy5qb2luKCcmJyk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZnVsbEVuZFBvaW50KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBubyBxdWVyeSBwYXJhbSBnZXQgdGhlIGFjdHVhbCBlbmRQb2ludFxuICAgICAgICAgICAgICAgIGZ1bGxFbmRQb2ludCA9IHRoaXMuYXBpT2JqLmVuZHBvaW50O1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gVkQgMTlKQU4yNCAtIGFkZGVkIG9uZSBtb3JlIHBhcmFtIGZvciBhdXRoZW50aWNhdGlvblxuICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwaVJlc3BvbnNlKGZ1bGxFbmRQb2ludCk/LnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBIQSAxOC1KQU4tMjQgQXNzaWduZWQgYXBpcmVzcG9uc2UgZGlyZWN0bHkgaWYgd2UgaGF2ZSB0aGUgcmVzcG9uc2UgaW4gYXJyYXkgYWxzb1xuICAgICAgICAgICAgICAgIC8vIFZEIDE5SkFOMjQgLSBpZiByZXNwb25zZSBoYXMga2V5IHdpdGggdmFsdWUod2hpY2ggaXMgYXJyYXkpXG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlcztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcGlPYmoudmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFZEIDIxTWF5MjQgLSBoYW5kbGluZyBtdWx0aXBsZSBjaGlsZCBvYmplY3RzXG4gICAgICAgICAgICAgICAgICAvLyBWRCAyMk1heTI0IC0gdXNlZCBjb21tb24gc2VydmljZSBmaWxlXG4gICAgICAgICAgICAgICAgICByZXNwb25zZXMgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGFwaVJlc3BvbnNlLCB0aGlzLmFwaU9iai52YXJpYWJsZSk7XG4gICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgLy8gSEEgMTlKQU4yNCBUbyBhdm9pZCB1bmRlZmluZWQgZXJyb3IgaW4gY29uc29sZVxuICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNwID0gcmVzcG9uc2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzcCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAvLyBWRCAxOUpBTjI0IC0gaWYgcmVzcG9uc2UgaGFzIHZhbHVlKHdoaWNoIGlzIGFycmF5KSBvbmx5XG4gICAgICAgICAgICAgICAgICByZXNwb25zZXMgPSBhcGlSZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3BvbnNlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVkQgMjVPY3QyNCAtIFN0b3JlIGZldGNoZWQgb3B0aW9ucyBpbiBsb2NhbCBzdG9yYWdlXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5pcXVlS2V5KSB7XG4gICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnVuaXF1ZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBWRCBOT1YyMyAtIGhhbmRsZSB0aGUgZGVwZW5kZW50IHVwZGF0ZSBmb3IgZHJvcGRvd25cbiAgICAgICAgICAgIC8vIFZEIDA5U2VwMjQtIHB1c2ggdGhlIGRlcGVuZGVudCBmaWVsZCB2YWx1ZXMgZm9yIGRyb3Bkb3duXG4gICAgICAgICAgICBsZXQgc291cmNlSWQgPSB0aGlzLmFwaU9iai5zb3VyY2VRdWVzdGlvbklkO1xuICAgICAgICAgICAgaWYgKHNvdXJjZUlkICYmIHRoaXMuYXBpT2JqLnZhcmlhYmxlIHx8IHRoaXMuYXBpT2JqLnZhbHVlRmllbGQpIHtcbiAgICAgICAgICAgICAgLy8gU3Vic2NyaWJlIGZvciB0aGUgY2hhbmdlc1xuICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jaGFuZ2VBbm5vdW5jZWQkLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzdWJzY3JpcHRpb24gZm9yIHRoZSBjaGFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZVZhbHVlLnZhbHVlT2JqICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCA9PSB0aGlzLmFwaU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGNoYW5nZVZhbHVlLnZhbHVlT2JqW3RoaXMuYXBpT2JqLnZhbHVlRmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgIC8vICBsZXQgdmFsdWUgPXt9O1xuICAgICAgICAgICAgICAgICAgICAgIC8vICB2YWx1ZVsnbmFtZSddID0gdGhpcy5zZWxlY3RlZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZXM7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXBpT2JqLnZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGNoYW5nZVZhbHVlLnZhbHVlT2JqLCB0aGlzLmFwaU9iai52YXJpYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNwID0gcmVzcG9uc2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSByZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMgPSBjaGFuZ2VWYWx1ZS52YWx1ZU9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3BvbnNlcztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVkQgMjVPY3QyNCAtIFN0b3JlIGZldGNoZWQgb3B0aW9ucyBpbiBsb2NhbCBzdG9yYWdlXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5pcXVlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnVuaXF1ZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VydmljZS5jb25maXJtQ2hhbmdlKHRoaXMuYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgYXBpTWV0YTonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIFZEIDIyTWF5MjQgLSB1c2VkIGNvbW1vbiBzZXJ2aWNlIGZpbGVcblxuICBzZWxlY3RDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdpbnNpZGUgc2VsZWN0Q2hhbmdlIGZyb20gJyArIHRoaXMuaWQpO1xuICAgIGxldCBjaGFuZ2UgPSBuZXcgQ2hhbmdlV3JhcHBlcigpOyAvLyBDaGFuZ2VXcmFwcGVyID0gSlNPTi5wYXJzZSgne30nKTtcbiAgICBjaGFuZ2UuZnJvbVF1ZXN0aW9uSWQgPSB0aGlzLmlkO1xuICAgIGNoYW5nZS52YWx1ZU9iaiA9IGV2ZW50ID8gZXZlbnRbdGhpcy5sYWJlbEZpZWxkXSA/IGV2ZW50W3RoaXMubGFiZWxGaWVsZF0gOiBldmVudD8udmFsdWUgOiAnJztcbiAgICBjaGFuZ2UucmVmZXJlbmNlRmllbGQgPSB0aGlzLnJlZmVyZW5jZUZpZWxkO1xuICAgIGNoYW5nZS5zZWxlY3RlZE9iaiA9IGV2ZW50ID8gZXZlbnRbdGhpcy5sYWJlbEZpZWxkXSA/IGV2ZW50W3RoaXMubGFiZWxGaWVsZF0gOiBldmVudD8udmFsdWUgOiAnJztcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoe3F1ZXN0aW9uIDogdGhpcy5xdWVzdGlvbiwgdmFsdWU6IGNoYW5nZX0pO1xuICAgIC8vIG9uY2UgZ290IHZhbHVlIGluIGRyb3Bkb3duIHJlbW92ZSB0aGUgZXJyb3IgdmFsaWRhdGlvblxuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5pbnZhbGlkRmllbGRJZHMgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5zaG93T3B0aW9ucyA9IGZhbHNlO1xuICB9XG50b2dnbGUoKXtcbiAgdGhpcy5zaG93T3B0aW9ucyA9ICF0aGlzLnNob3dPcHRpb25zO1xufVxuXG5ASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG5vbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICBpZiAodGhpcy5kcm9wZG93bldyYXBwZXIgJiYgIXRoaXMuZHJvcGRvd25XcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgIHRoaXMuc2hvd09wdGlvbnMgPSBmYWxzZTtcbiAgfVxufVxuXG5cbiAgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gJyc7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtxdWVzdGlvbiA6IHRoaXMucXVlc3Rpb24sIHZhbHVlOiB7XG4gICAgICBmcm9tUXVlc3Rpb25JZDogdGhpcy5pZCxcbiAgICAgIHZhbHVlT2JqOiAnJyxcbiAgICAgIHJlZmVyZW5jZUZpZWxkOiB0aGlzLnJlZmVyZW5jZUZpZWxkLFxuICAgICAgc2VsZWN0ZWRPYmo6ICcnXG4gICAgfX0pO1xuICAgIHRoaXMuaW52YWxpZEZpZWxkSWRzID0gW107XG4gIH1cbiAgcmVtb3ZlQ2hhcmFjdGVycyhxdWVzdGlvblRleHQ6c3RyaW5nKXtcbiAgICBsZXQgdXBkYXRlZFRleHQgPSBxdWVzdGlvblRleHQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpO1xuICAgIHJldHVybiB1cGRhdGVkVGV4dDtcbiAgfVxuICBpbnB1dFZhbHVlKGV2ZW50LHF1ZXMpe1xuICAgIGlmKHF1ZXMuc2luZ2xlRmllbGRDaGFuZ2Upe1xuICAgICAgbGV0IGNoYW5nZSA9IG5ldyBDaGFuZ2VXcmFwcGVyKCk7IC8vIENoYW5nZVdyYXBwZXIgPSBKU09OLnBhcnNlKCd7fScpO1xuICAgICAgY2hhbmdlLmZyb21RdWVzdGlvbklkID0gdGhpcy5pZDtcbiAgICAgIGNoYW5nZS52YWx1ZU9iaiA9IGV2ZW50O1xuICAgICAgY2hhbmdlLnJlZmVyZW5jZUZpZWxkID0gdGhpcy5yZWZlcmVuY2VGaWVsZDtcbiAgICAgIGNoYW5nZS5zZWxlY3RlZE9iaiA9IGV2ZW50O1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtxdWVzdGlvbiA6IHF1ZXMsIHZhbHVlOiBjaGFuZ2V9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgI2Ryb3Bkb3duV3JhcHBlciBjbGFzcz1cImRyb3Bkb3duLWNsb3NlXCI+XG4gIDxueHQtaW5wdXQgXG4gIFt0eXBlXT1cIidkcm9wZG93bidcIlxuICBbbW9kZV09XCJtb2RlXCJcbiAgW3ZhbHVlXT1cInNlbGVjdGVkVmFsdWVcIlxuICAob25Gb2N1cyk9XCJnZXRPcHRpb25zKClcIlxuICBbbGFiZWxGb250XT1cInF1ZXN0aW9uLmZvbnRcIlxuICBbbGFiZWxdPVwicmVtb3ZlQ2hhcmFjdGVycyhxdWVzdGlvbj8ucXVlc3Rpb25UZXh0KVwiXG4gIFtsYWJlbENvbG9yXT1cInF1ZXN0aW9uLmZvbnRDb2xvclwiXG4gIFtsYWJlbFNpemVdPVwicXVlc3Rpb24uZm9udFNpemVcIlxuICBbaW5wdXRWYWx1ZVNpemVdPVwicXVlc3Rpb24uZm9udFNpemVcIlxuICBbbGFiZWxXZWlnaHRdPVwicXVlc3Rpb24uZm9udFdlaWdodFwiXG4gIFtpbnB1dFdlaWdodF09XCJxdWVzdGlvbi5mb250V2VpZ2h0XCJcbiAgW3Nob3dMYWJlbF09XCJxdWVzdGlvbi5zdHlsZT8uc2hvd0xhYmVsXCJcbiAgaW5wdXRCb3JkZXI9XCJub25lXCIgc3ZnSGVpZ2h0PVwiMjBweFwiIHN2Z1dpZHRoPVwiMjBweFwiXG4gIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gIFtyZXF1aXJlZF09XCJxdWVzdGlvbi5pc09wdGlvbmFsXCIgaW5wdXRCZ0NvbG9yPVwiI0Y1RjVGNVwiXG4gIFtpbnB1dElkXT1cInF1ZXN0aW9uLnRyYWNraW5nSWRcIlxuICBbZXJyb3JNZXNzYWdlc109XCJ7IHJlcXVpcmVkOiAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcgfVwiXG4gIFtpbnB1dEljb25MZWZ0U3JjXT1cInF1ZXN0aW9uLmljb25MZWZ0U3JjXCJcbiAgKHRvZ2dsZUVtaXQpPVwidG9nZ2xlKClcIlxuICAoY2xlYXJJbnB1dEVtaXQpPVwiY2xlYXJTZWxlY3Rpb24oKVwiXG4gIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiXG4gIChpbnB1dFZhbHVlKT1cImlucHV0VmFsdWUoJGV2ZW50LnZhbHVlLCRldmVudC5xdWVzdGlvbilcIlxuICA+XG48L254dC1pbnB1dD5cblxuICA8IS0tIFNLUzExSlVOMjUgRHJvcGRvd24gbGlzdCAtLT5cbiAgPHVsIGNsYXNzPVwibnh0LWRyb3Bkb3duLW1lbnVcIiAqbmdJZj1cInNob3dPcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zXCIgKG1vdXNlZG93bik9XCJzZWxlY3RDaGFuZ2UoaXRlbSlcIj5cbiAgICAgIHt7IGFwaU9iaiAmJiAhYXBpT2JqLmlzRGVwZW5kZW50RmllbGQgJiYgaXRlbVtsYWJlbEZpZWxkXSA/IGl0ZW1bbGFiZWxGaWVsZF0gOiBpdGVtPy52YWx1ZSB9fVxuICAgIDwvbGk+XG4gIDwvdWw+XG48L2Rpdj5cbjxzcGFuICpuZ0lmPVwiZXJyb3IgfHwgaW52YWxpZEZpZWxkSWRzLmluY2x1ZGVzKGlkKVwiIGNsYXNzPVwiZXJyb3ItbXNnXCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxuIl19