@bpost/bp-address-auto-complete-by-component 1.1.26 → 1.1.27

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.
@@ -394,6 +394,12 @@ export class StreetNumberComponent {
394
394
  if (this.businessNameInResponse) {
395
395
  param.setIncludeBusinessName(true);
396
396
  }
397
+ if (this.includeListOfBoxes) {
398
+ param.setIncludeListOfBoxes(true);
399
+ }
400
+ if (this.includeListOfBusinessNameWithBoxes) {
401
+ param.setIncludeListOfBusinessNameWithBoxes(true);
402
+ }
397
403
  return param;
398
404
  }
399
405
  handleGetStreetResponse(data, source) {
@@ -1047,7 +1053,7 @@ export class StreetNumberComponent {
1047
1053
  }
1048
1054
  }
1049
1055
  StreetNumberComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: StreetNumberComponent, deps: [{ token: i1.AddressService }, { token: i2.LocaleService }, { token: i3.TranslateService }, { token: i4.UnicodeService }], target: i0.ɵɵFactoryTarget.Component });
1050
- StreetNumberComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: StreetNumberComponent, selector: "bp-street-number", inputs: { prefillData: "prefillData", autofillData: "autofillData", showDebugMessageToConsole: "showDebugMessageToConsole", labelResourceKey: "labelResourceKey", maxSuggesionCount: "maxSuggesionCount", visibleSuggesionCount: "visibleSuggesionCount", sortCriteria: "sortCriteria", baseUrl: "baseUrl", addressParams: "addressParams", postalCode: "postalCode", locality: "locality", streetName: "streetName", notInListAllowed: "notInListAllowed", selectedAddress: "selectedAddress", allowNoValidation: "allowNoValidation", validatedByBackend: "validatedByBackend", numberOfExceptions: "numberOfExceptions", nis9InResponse: "nis9InResponse", businessNameInResponse: "businessNameInResponse", inputLang: "inputLang", messageOption: "messageOption", inputText: "inputText", isReadonly: "isReadonly", suggestionLevel: "suggestionLevel" }, outputs: { messageChanged: "messageChanged", addressChanged: "addressChanged", focusEvent: "focusEvent", blurEvent: "blurEvent", textChangeEvent: "textChangeEvent", emptyResponseEvent: "emptyResponseEvent", clearInputEventEmitter: "clearInputEventEmitter", prefillEventEmitter: "prefillEventEmitter", streetNumberChanged: "streetNumberChanged", numberOfExceptionsEmitter: "numberOfExceptionsEmitter" }, viewQueries: [{ propertyName: "streetNumberSearchInput", first: true, predicate: ["streetNumberSearchInput"], descendants: true }, { propertyName: "streetNumberList", first: true, predicate: ["streetNumberList"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<span *ngIf=\"labelResourceKey\">{{ labelResourceKey | translate}}</span>\n<div class=\"bpaac-dropdown\">\n <div class=\"bpaac-search-bar\">\n <div class=\"bpaac-input-width\">\n <!-- [disabled]=\"isDisabled()\" -->\n <input type=\"text\" #streetNumberSearchInput class=\"bpaac-input\" \n [readonly]=\"isReadonly\"\n (keyup) = (checkKeyUP($event))\n [style.background-color]=\"!isParamsComplete() ? 'lightgrey' : ''\" \n [style.color]=\" getTextColor() \"\n [disabled]=\"!streetName || streetName.trim().length === 0\" (keydown)=\"checkKeyDown($event)\" \n (input)=\"onInputChange()\" (click)=\"onInputClick()\"\n [(ngModel)]=\"searchText\" id=\"streetNumberInputField\" \n [attr.title]=\"placeHolderText\" \n [attr.placeholder]=\"placeHolderText\" autocomplete=\"off\"\n (blur)=\"onBlur($event)\" (focus)=\"onFocus()\" />\n <div id=\"bpaac-clear-streetNb-button\" *ngIf=\"mayShowClearButton()\" \n (click)=\"onClearStreetNumberInput(true)\" class=\"bpaac-clear\">\n </div>\n </div>\n <!--<div ng-transclude></div>-->\n <input id=\"bpaac-streetNb-typeahead\" type=\"text\" disabled autocomplete=\"off\" [(ngModel)]=\"bpTypeAhead\" />\n <!-- <span>addressIsComplete: {{ addressIsComplete }}. </span>\n <span>addressIsValidated: {{ addressIsValidated }}. </span> -->\n <span *ngIf=\"addressIsComplete\" class=\"streetNbChekmark\"><span class=\"checkmark\"></span></span>\n </div>\n <div [hidden]=\"collapseDropdown\" class=\"bpaac-dropdown-menu-container\" \n *ngIf=\"(suggestionLevel===SuggestionLevelType.StreetNumber || suggestionLevel===SuggestionLevelType.StreetAndBoxNumber) && suggestions && suggestions.length>0\">\n <div #streetNumberList [appVisibleSuggestion]=\"visibleSuggesionCount\" \n id=\"bpaac-streetnumber-dropdown\" class=\"bpaac-dropdown-menu\">\n <ul role=\"listbox\" id=\"bpaac-streetNb-suggestionsList\" class=\"list-unstyled\">\n <li role=\"option\" *ngFor=\"let option of suggestions; let idx = index\" [ngClass]=\"{'active':(selectedIndex==idx)}\" (mousedown)=\"clickSuggestion($event, option)\"\n (mouseenter)=\"selectedIndex=idx\" (mouseleave)=\"selectedIndex=-1\">\n <span *ngIf=\"option\" [innerHtml]=\"option['not-in-list'] ? emptyResponseText : option.string | highlightSuggestion : wordList\"></span>\n </li>\n </ul>\n </div>\n </div>\n</div>", styles: [""], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.VisibleSuggestionDirective, selector: "[appVisibleSuggestion]", inputs: ["appVisibleSuggestion"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i3.TranslatePipe, "highlightSuggestion": i8.HighlightSuggestionPipe } });
1056
+ StreetNumberComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: StreetNumberComponent, selector: "bp-street-number", inputs: { prefillData: "prefillData", autofillData: "autofillData", showDebugMessageToConsole: "showDebugMessageToConsole", labelResourceKey: "labelResourceKey", maxSuggesionCount: "maxSuggesionCount", visibleSuggesionCount: "visibleSuggesionCount", sortCriteria: "sortCriteria", baseUrl: "baseUrl", addressParams: "addressParams", postalCode: "postalCode", locality: "locality", streetName: "streetName", notInListAllowed: "notInListAllowed", selectedAddress: "selectedAddress", allowNoValidation: "allowNoValidation", validatedByBackend: "validatedByBackend", numberOfExceptions: "numberOfExceptions", nis9InResponse: "nis9InResponse", businessNameInResponse: "businessNameInResponse", includeListOfBoxes: "includeListOfBoxes", includeListOfBusinessNameWithBoxes: "includeListOfBusinessNameWithBoxes", inputLang: "inputLang", messageOption: "messageOption", inputText: "inputText", isReadonly: "isReadonly", suggestionLevel: "suggestionLevel" }, outputs: { messageChanged: "messageChanged", addressChanged: "addressChanged", focusEvent: "focusEvent", blurEvent: "blurEvent", textChangeEvent: "textChangeEvent", emptyResponseEvent: "emptyResponseEvent", clearInputEventEmitter: "clearInputEventEmitter", prefillEventEmitter: "prefillEventEmitter", streetNumberChanged: "streetNumberChanged", numberOfExceptionsEmitter: "numberOfExceptionsEmitter" }, viewQueries: [{ propertyName: "streetNumberSearchInput", first: true, predicate: ["streetNumberSearchInput"], descendants: true }, { propertyName: "streetNumberList", first: true, predicate: ["streetNumberList"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<span *ngIf=\"labelResourceKey\">{{ labelResourceKey | translate}}</span>\n<div class=\"bpaac-dropdown\">\n <div class=\"bpaac-search-bar\">\n <div class=\"bpaac-input-width\">\n <!-- [disabled]=\"isDisabled()\" -->\n <input type=\"text\" #streetNumberSearchInput class=\"bpaac-input\" \n [readonly]=\"isReadonly\"\n (keyup) = (checkKeyUP($event))\n [style.background-color]=\"!isParamsComplete() ? 'lightgrey' : ''\" \n [style.color]=\" getTextColor() \"\n [disabled]=\"!streetName || streetName.trim().length === 0\" (keydown)=\"checkKeyDown($event)\" \n (input)=\"onInputChange()\" (click)=\"onInputClick()\"\n [(ngModel)]=\"searchText\" id=\"streetNumberInputField\" \n [attr.title]=\"placeHolderText\" \n [attr.placeholder]=\"placeHolderText\" autocomplete=\"off\"\n (blur)=\"onBlur($event)\" (focus)=\"onFocus()\" />\n <div id=\"bpaac-clear-streetNb-button\" *ngIf=\"mayShowClearButton()\" \n (click)=\"onClearStreetNumberInput(true)\" class=\"bpaac-clear\">\n </div>\n </div>\n <!--<div ng-transclude></div>-->\n <input id=\"bpaac-streetNb-typeahead\" type=\"text\" disabled autocomplete=\"off\" [(ngModel)]=\"bpTypeAhead\" />\n <!-- <span>addressIsComplete: {{ addressIsComplete }}. </span>\n <span>addressIsValidated: {{ addressIsValidated }}. </span> -->\n <span *ngIf=\"addressIsComplete\" class=\"streetNbChekmark\"><span class=\"checkmark\"></span></span>\n </div>\n <div [hidden]=\"collapseDropdown\" class=\"bpaac-dropdown-menu-container\" \n *ngIf=\"(suggestionLevel===SuggestionLevelType.StreetNumber || suggestionLevel===SuggestionLevelType.StreetAndBoxNumber) && suggestions && suggestions.length>0\">\n <div #streetNumberList [appVisibleSuggestion]=\"visibleSuggesionCount\" \n id=\"bpaac-streetnumber-dropdown\" class=\"bpaac-dropdown-menu\">\n <ul role=\"listbox\" id=\"bpaac-streetNb-suggestionsList\" class=\"list-unstyled\">\n <li role=\"option\" *ngFor=\"let option of suggestions; let idx = index\" [ngClass]=\"{'active':(selectedIndex==idx)}\" (mousedown)=\"clickSuggestion($event, option)\"\n (mouseenter)=\"selectedIndex=idx\" (mouseleave)=\"selectedIndex=-1\">\n <span *ngIf=\"option\" [innerHtml]=\"option['not-in-list'] ? emptyResponseText : option.string | highlightSuggestion : wordList\"></span>\n </li>\n </ul>\n </div>\n </div>\n</div>", styles: [""], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.VisibleSuggestionDirective, selector: "[appVisibleSuggestion]", inputs: ["appVisibleSuggestion"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i3.TranslatePipe, "highlightSuggestion": i8.HighlightSuggestionPipe } });
1051
1057
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: StreetNumberComponent, decorators: [{
1052
1058
  type: Component,
1053
1059
  args: [{ selector: 'bp-street-number', template: "<span *ngIf=\"labelResourceKey\">{{ labelResourceKey | translate}}</span>\n<div class=\"bpaac-dropdown\">\n <div class=\"bpaac-search-bar\">\n <div class=\"bpaac-input-width\">\n <!-- [disabled]=\"isDisabled()\" -->\n <input type=\"text\" #streetNumberSearchInput class=\"bpaac-input\" \n [readonly]=\"isReadonly\"\n (keyup) = (checkKeyUP($event))\n [style.background-color]=\"!isParamsComplete() ? 'lightgrey' : ''\" \n [style.color]=\" getTextColor() \"\n [disabled]=\"!streetName || streetName.trim().length === 0\" (keydown)=\"checkKeyDown($event)\" \n (input)=\"onInputChange()\" (click)=\"onInputClick()\"\n [(ngModel)]=\"searchText\" id=\"streetNumberInputField\" \n [attr.title]=\"placeHolderText\" \n [attr.placeholder]=\"placeHolderText\" autocomplete=\"off\"\n (blur)=\"onBlur($event)\" (focus)=\"onFocus()\" />\n <div id=\"bpaac-clear-streetNb-button\" *ngIf=\"mayShowClearButton()\" \n (click)=\"onClearStreetNumberInput(true)\" class=\"bpaac-clear\">\n </div>\n </div>\n <!--<div ng-transclude></div>-->\n <input id=\"bpaac-streetNb-typeahead\" type=\"text\" disabled autocomplete=\"off\" [(ngModel)]=\"bpTypeAhead\" />\n <!-- <span>addressIsComplete: {{ addressIsComplete }}. </span>\n <span>addressIsValidated: {{ addressIsValidated }}. </span> -->\n <span *ngIf=\"addressIsComplete\" class=\"streetNbChekmark\"><span class=\"checkmark\"></span></span>\n </div>\n <div [hidden]=\"collapseDropdown\" class=\"bpaac-dropdown-menu-container\" \n *ngIf=\"(suggestionLevel===SuggestionLevelType.StreetNumber || suggestionLevel===SuggestionLevelType.StreetAndBoxNumber) && suggestions && suggestions.length>0\">\n <div #streetNumberList [appVisibleSuggestion]=\"visibleSuggesionCount\" \n id=\"bpaac-streetnumber-dropdown\" class=\"bpaac-dropdown-menu\">\n <ul role=\"listbox\" id=\"bpaac-streetNb-suggestionsList\" class=\"list-unstyled\">\n <li role=\"option\" *ngFor=\"let option of suggestions; let idx = index\" [ngClass]=\"{'active':(selectedIndex==idx)}\" (mousedown)=\"clickSuggestion($event, option)\"\n (mouseenter)=\"selectedIndex=idx\" (mouseleave)=\"selectedIndex=-1\">\n <span *ngIf=\"option\" [innerHtml]=\"option['not-in-list'] ? emptyResponseText : option.string | highlightSuggestion : wordList\"></span>\n </li>\n </ul>\n </div>\n </div>\n</div>", styles: [""] }]
@@ -1095,6 +1101,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
1095
1101
  type: Input
1096
1102
  }], businessNameInResponse: [{
1097
1103
  type: Input
1104
+ }], includeListOfBoxes: [{
1105
+ type: Input
1106
+ }], includeListOfBusinessNameWithBoxes: [{
1107
+ type: Input
1098
1108
  }], inputLang: [{
1099
1109
  type: Input
1100
1110
  }], messageOption: [{
@@ -1126,4 +1136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
1126
1136
  }], numberOfExceptionsEmitter: [{
1127
1137
  type: Output
1128
1138
  }] } });
1129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvc3RyZWV0LW51bWJlci9zdHJlZXQtbnVtYmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQvc3JjL2xpYi9zdHJlZXQtbnVtYmVyL3N0cmVldC1udW1iZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEQsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUc3SixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUs3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7OztBQVF6RSxNQUFNLE9BQU8scUJBQXFCO0lBa0doQyxZQUNVLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxjQUE4QjtRQUg5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7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d0NoZWNrZWQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcmVmaWxsZWRQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vdXRpbHMvcHJlZmlsbGVkLXBhcmFtZXRlcnMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vZW51bS92YWxpZGF0aW9uLW1lc3NhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFkZHJlc3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWRyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVuaWNvZGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdW5pY29kZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICcuLi91dGlscy9kb21oYW5kbGVyJztcbmltcG9ydCB7IEFERFJFU1NMRVZFTCB9IGZyb20gJy4uL2VudW0vYWRkcmVzcy1sZXZlbC5lbnVtJztcbmltcG9ydCB7IFF1ZXJ5UGFyYW1ldGVycyB9IGZyb20gJy4uL21vZGVsL3F1ZXJ5LXBhcmFtZXRlcnMubW9kZWwnO1xuaW1wb3J0IHsgUHJlZmlsbERhdGEgfSBmcm9tICcuLi91dGlscy9wcmVmaWxsLWRhdGEnO1xuaW1wb3J0IHsgU291cmNlVHlwZSB9IGZyb20gJy4uL2VudW0vc291cmNlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQcmVmaWxsRXZlbnQgfSBmcm9tICcuLi91dGlscy9wcmVmbGxsLmV2ZW50JztcbmltcG9ydCB7IElucHV0TmFtZVR5cGUgfSBmcm9tICcuLi9lbnVtL2lucHV0LW5hbWUuZW51bSc7XG5pbXBvcnQgeyBTdWdnZXN0aW9uTGV2ZWxUeXBlIH0gZnJvbSAnLi4vZW51bS9zdWdnZXN0aW9uLWxldmVsLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBdXRvZmlsbERhdGEgfSBmcm9tICcuLi91dGlscy9hdXRvZmlsbC1kYXRhJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnAtc3RyZWV0LW51bWJlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdHJlZXQtbnVtYmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RyZWV0LW51bWJlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFN0cmVldE51bWJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG5cbiAgQFZpZXdDaGlsZCgnc3RyZWV0TnVtYmVyU2VhcmNoSW5wdXQnLCB7c3RhdGljOiBmYWxzZX0gKSBzdHJlZXROdW1iZXJTZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3RyZWV0TnVtYmVyTGlzdCcsIHtzdGF0aWM6IGZhbHNlfSApIHN0cmVldE51bWJlckxpc3Q6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvLyAyMDIwLTA2LTE1XG4gIC8qICAgQElucHV0KClcbiAgb25Gb2N1c1Nob3dTdWdnZXN0aW9uc0FmdGVyUHJlZmlsbCA9IHRydWU7ICovXG4gIEBJbnB1dCgpIHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YTtcbiAgQElucHV0KCkgYXV0b2ZpbGxEYXRhOiBBdXRvZmlsbERhdGE7XG4gIEBJbnB1dCgpIHNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGxhYmVsUmVzb3VyY2VLZXkgPSAnY29tbW9uLmxhYmVsLnN0cmVldE51bWJlcic7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc2lvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc2lvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhID0gJyc7XG4gIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgYWRkcmVzc1BhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgQElucHV0KCkgcG9zdGFsQ29kZTogc3RyaW5nO1xuICBASW5wdXQoKSBsb2NhbGl0eTogc3RyaW5nO1xuICBASW5wdXQoKSBzdHJlZXROYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5vdEluTGlzdEFsbG93ZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNlbGVjdGVkQWRkcmVzcztcbiAgQElucHV0KCkgYWxsb3dOb1ZhbGlkYXRpb246IGJvb2xlYW5cbiAgQElucHV0KCkgdmFsaWRhdGVkQnlCYWNrZW5kOiBib29sZWFuO1xuICBASW5wdXQoKSBudW1iZXJPZkV4Y2VwdGlvbnM6IG51bWJlcjtcbiAgQElucHV0KCkgbmlzOUluUmVzcG9uc2U6IGJvb2xlYW5cbiAgQElucHV0KCkgYnVzaW5lc3NOYW1lSW5SZXNwb25zZTogYm9vbGVhblxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IGlucHV0TGFuZyh2YWw6IHN0cmluZykge1xuICAgIHRoaXMubG9jYWxlU2VydmljZS5jaGFuZ2VMYW5nKHZhbCk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZSh2YWwpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZExhbmd1YWdlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBASW5wdXQoKSBtZXNzYWdlT3B0aW9uID0gJ1knO1xuICBASW5wdXQoKSBpbnB1dFRleHQ6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBpc1JlYWRvbmx5PWZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHN1Z2dlc3Rpb25MZXZlbDogU3VnZ2VzdGlvbkxldmVsVHlwZTtcblxuICBAT3V0cHV0KCkgbWVzc2FnZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjx7bWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZ30+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYWRkcmVzc0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBibHVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdGV4dENoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGVtcHR5UmVzcG9uc2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblxuICBAT3V0cHV0KCkgY2xlYXJJbnB1dEV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHByZWZpbGxFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxQcmVmaWxsRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQcmVmaWxsRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHN0cmVldE51bWJlckNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuXG4gIGFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICBhZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICBzdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbiAgc3VnZ2VzdGlvbnM6IGFueTtcbiAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICBsYXN0U2VhcmNoVmFsdWU6IHN0cmluZztcbiAgd29yZExpc3Q6IGFueTtcbiAgc3VnZ2VzdGlvbnNXb3JkTGlzdDogYW55O1xuICBicFR5cGVBaGVhZDogc3RyaW5nO1xuICBwbGFjZUhvbGRlclRleHQ6IHN0cmluZztcbiAgc2tpcE5leHRCbHVyOiBib29sZWFuOyAvLyBPbkJsdXIgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHN1Z2dlc3Rpb24vdmFsaWRhdG9yIGJ1dHRvblxuICBlcnJvckNvZGU6IGFueTtcblxuICBtaW5MZXZlbDogbnVtYmVyO1xuICBzZWxlY3RlZEluZGV4OiBudW1iZXI7XG4gIGNvbGxhcHNlRHJvcGRvd246IGJvb2xlYW47XG4gIHR5cGVBaGVhZFdvcmQ6IHN0cmluZztcbiAgc2VxdWVuY2VOdW1iZXI6IG51bWJlcjtcbiAgY29uc3VtZWROdW1iZXI6IG51bWJlcjtcbiAgc2VsZWN0aW9uQ2hhbmdlZDogYm9vbGVhbjtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gbnVsbDtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgZW1wdHlSZXNwb25zZVRleHQ6IHN0cmluZztcbiAgZW1wdHlSZXNwb25zZTogYm9vbGVhbjtcblxuICBwcmVmaWxsaW5nID0gZmFsc2U7XG4gIGlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG5cbiAgU3VnZ2VzdGlvbkxldmVsVHlwZT1TdWdnZXN0aW9uTGV2ZWxUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWRkcmVzc1NlcnZpY2U6IEFkZHJlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1bmljb2RlU2VydmljZTogVW5pY29kZVNlcnZpY2UsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgLy8gaW5zdGFuY2UgcHJvcGVydGllc1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMucHJldmlvdXNJbmRleCA9IC0xO1xuICAgIHRoaXMubGFzdFNlYXJjaFZhbHVlID0gJyc7XG4gICAgdGhpcy53b3JkTGlzdCA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNXb3JkTGlzdCA9IFtdO1xuICAgIHRoaXMuYnBUeXBlQWhlYWQgPSAnJztcbiAgICB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9ICcnO1xuICAgIHRoaXMuc2tpcE5leHRCbHVyID0gZmFsc2U7IC8vIE9uQmx1ciBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgc3VnZ2VzdGlvbi92YWxpZGF0b3IgYnV0dG9uXG4gICAgdGhpcy5lcnJvckNvZGUgPSBudWxsO1xuICAgIC8vIHNjb3BlIHByb3BlcnRpZXNcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAvLyBwcm9wZXJ0aWVzXG4gICAgdGhpcy50eXBlQWhlYWRXb3JkID0gJyc7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyID0gMTtcbiAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gMTtcbiAgICAvLyBpbml0aWFsaXphdGlvblxuICAgIHRoaXMuc2V0U2VhcmNoVGV4dCgnJyk7XG4gICAgLy8gdGhpcy5zZXRQbGFjZUhvbGRlclRleHQoKTtcbiAgICB0aGlzLnNldEVtcHR5UmVzcG9uc2VUZXh0KCk7XG4gICAgdGhpcy5lbXB0eVJlc3BvbnNlID0gdHJ1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlZExhbmd1YWdlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cblxuICBvbkNoYW5nZWRMYW5ndWFnZSgpIHtcbiAgICAvLyB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdzdHJlZXROdW1iZXIucGxhY2Vob2xkZXIuaW5wdXQtcGxhY2Vob2xkZXInKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdzdHJlZXROdW1iZXIucGxhY2Vob2xkZXIuaW5wdXQtcGxhY2Vob2xkZXInKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ25ldyBwbGFjZWhvbGRlcicsIHJlcyk7XG4gICAgICAgIC8vID0+ICdoZWxsbyB3b3JsZCdcbiAgICAgICAgdGhpcy5wbGFjZUhvbGRlclRleHQgPSByZXM7XG4gICAgICAgIHRoaXMuc2V0RW1wdHlSZXNwb25zZVRleHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkKSB7XG4gICAgICBjb25zdCBvdmVybGF5OiBIVE1MRGl2RWxlbWVudCA9IHRoaXMuc3RyZWV0TnVtYmVyTGlzdC5uYXRpdmVFbGVtZW50O1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3RJdGVtID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKG92ZXJsYXksICdsaS5hY3RpdmUnKTtcbiAgICAgICAgaWYgKGxpc3RJdGVtKSB7XG4gICAgICAgICAgRG9tSGFuZGxlci5zY3JvbGxJblZpZXcob3ZlcmxheSwgbGlzdEl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9LCAxKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcykge1xuICAgICAgaWYoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYXV0b2ZpbGxEYXRhJykgJiYgY2hhbmdlcy5hdXRvZmlsbERhdGEuY3VycmVudFZhbHVlICE9PSBudWxsICYmIGNoYW5nZXMuYXV0b2ZpbGxEYXRhLmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0PXRoaXMubG9hZEF1dG9GaWxsUGFyYW1zKGNoYW5nZXMuYXV0b2ZpbGxEYXRhLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRBZGRyZXNzKHRoaXMuYXV0b2ZpbGxEYXRhLnNlbGVjdGVkQWRkcmVzcyk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3N0cmVldE5hbWUnKVxuICAgICAgICAgICYmICFjaGFuZ2VzLnN0cmVldE5hbWUuZmlyc3RDaGFuZ2VcbiAgICAgICAgICAmJiAhY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgncHJlZmlsbERhdGEnKSAmJiAhIHRoaXMucHJlZmlsbGluZyApIHtcbiAgICAgICAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgICAgLy8gdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3N0cmVldCBuYW1lIC0gbmdPbmNoYW5nZXMgLSBzdHJlZXROYW1lIGNoYW5nZXMgZGV0ZWN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zdHJlZXROYW1lLmN1cnJlbnRWYWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnaW5wdXRUZXh0JykgJiYgIWNoYW5nZXMuaW5wdXRUZXh0LmZpcnN0Q2hhbmdlICYmICEgdGhpcy5wcmVmaWxsaW5nICkge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdzdHJlZXQgbnVtYmVyIC0gbmdPbmNoYW5nZXMgLSBpbnB1dFRleHQgY2hhbmdlcyBkZXRlY3Rpb24nLCB0aGlzLnNlYXJjaFRleHQsIGNoYW5nZXMuaW5wdXRUZXh0LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubm90RXF1YWxJZ25vcmVDYXNlKHRoaXMuc2VhcmNoVGV4dCwgY2hhbmdlcy5pbnB1dFRleHQuY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybignc3RyZWV0IG51bWJlciAtIG5nT25jaGFuZ2VzIC0gaW5wdXRUZXh0IGNoYW5nZXMgZGV0ZWN0aW9uIC0+IGNhbGxpbmcgY2xlYXJXaWRnZXQoKSAhJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBjaGFuZ2VzLmlucHV0VGV4dC5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdwcmVmaWxsRGF0YScpICYmICFjaGFuZ2VzLnByZWZpbGxEYXRhLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3N0cmVldE51bWJlcjo6bmdPbkNoYW5nZXMnLCB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSB0aGlzLmxvYWRQYXJhbXMoY2hhbmdlcy5wcmVmaWxsRGF0YS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgIT09ICcnICYmIHRoaXMubWluTGV2ZWwgPT09IEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKSB7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKC8qJ3ByZWZpbGxlZCcqIC8gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKTtcbiAgICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyU2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclxuICAgICAgICAgICAgID0gdGhpcy50cmFuc2Zvcm1TdHJlZXROdW1iZXJJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXIpO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKC8qJ3ByZWZpbGxlZCcqLyBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQgKTtcbiAgICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXI6Om5nT25DaGFuZ2VzIC0tIGFmdGVyIGNhbGN1bGF0aW9ucycsIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUpO1xuICAgICAgICB9IFxuICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtU3RyZWV0TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyhzdHJlZXROdW1iZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcbiAgICBpZiAoc3RyZWV0TnVtYmVyICE9PSBudWxsICYmIHN0cmVldE51bWJlciAhPT0gdW5kZWZpbmVkIClcbiAgICB7XG4gICAgICByZXN1bHQgPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3Moc3RyZWV0TnVtYmVyKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnVHJhbnNmb3JtZWQgc3RyZWV0IG51bWJlcjonLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBub3RFcXVhbElnbm9yZUNhc2Uob2xkVmFsOiBzdHJpbmcsIG5ld1ZhbDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG9sZFZhbC50b0xvd2VyQ2FzZSgpICE9PSBuZXdWYWwudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHNldEVtcHR5UmVzcG9uc2VUZXh0KCkge1xuICAgIHRoaXMuZW1wdHlSZXNwb25zZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnc3RyZWV0TnVtYmVyLm1lc3NhZ2Uubm90LWluLWxpc3QnKTtcbiAgfVxuXG4gIC8qXG4gIG9uQ2xlYXJJbnB1dEV2ZW50KGV2ZW50LCBmb2N1cykge1xuICAgIHRoaXMuY2xlYXJJbnB1dChmb2N1cyk7XG4gIH1cbiAgKi9cblxuICAvKlxuICByZXRyYW5zbGF0ZSgpIHtcbiAgICB0aGlzLnNldFBsYWNlSG9sZGVyVGV4dCgpO1xuICAgIHRoaXMuc2V0RW1wdHlSZXNwb25zZVRleHQoKTtcbiAgICBpZiAodGhpcy5lcnJvckNvZGUpIHtcbiAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2UodGhpcy5lcnJvckNvZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy52YWxpZGF0aW9uTWVzc2FnZUNvZGUpIHtcbiAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSh0aGlzLnZhbGlkYXRpb25NZXNzYWdlQ29kZSwgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAqL1xuXG4gIG9uQmx1cihldikge1xuICAgIGlmICh0aGlzLmlzQnJvd3NlcklFKCkgJiYgdGhpcy5pc0Ryb3Bkb3duQ2xpY2tlZChldikpIHtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyU2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5za2lwTmV4dEJsdXIpIHtcbiAgICAgIHRoaXMuc2tpcE5leHRCbHVyID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgICB0aGlzLmJsdXJFdmVudC5lbWl0KEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICB9XG4gIH1cblxuICBpc0Jyb3dzZXJJRSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL21zaWVcXHN8dHJpZGVudFxcL3xlZGdlXFwvL2kudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIH1cblxuICBpc0Ryb3Bkb3duQ2xpY2tlZChldikge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2LmV4cGxpY2l0T3JpZ2luYWxUYXJnZXQgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gKHRhcmdldC5pZCA9PT0gJ2JwYWFjLXN0cmVldG51bWJlci1kcm9wZG93bicpO1xuICB9XG5cbiAgb25Gb2N1cygpIHtcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSBmYWxzZTtcbiAgICAvLyB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSAodGhpcy5wcmVmaWxsaW5nID09PSB0cnVlICYmIHRoaXMucHJlZmlsbERhdGEgIT09IG51bGwpXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgPyAhdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgOiBmYWxzZTtcbiAgICAvLyB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNraXBOZXh0Qmx1ciA9IGZhbHNlO1xuICAgIHRoaXMuZm9jdXNFdmVudC5lbWl0KEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgfVxuXG4gIHZhbHVlQ2hhbmdlZCgpIHtcbiAgICAvLyBjb25zb2xlLndhcm4oJ3N0cmVldC1udW1iZXI6OnZhbHVlQ2hhbmdlZCBESVNBQkxFRCcpO1xuICAgIHRoaXMudGV4dENoYW5nZUV2ZW50LmVtaXQodGhpcy5zZWFyY2hUZXh0KTtcbiAgfVxuXG4gIG1heVNob3dEcm9wZG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwICYmICF0aGlzLmNvbGxhcHNlRHJvcGRvd247XG4gIH1cblxuICBidWlsZElucHV0V29yZExpc3QoKSB7XG4gICAgdGhpcy53b3JkTGlzdCA9IHRoaXMuc2VhcmNoVGV4dC5zcGxpdCgvW1xccywgXSsvKTtcbiAgfVxuXG4gIG1heUFkZFR5cGVBaGVhZCgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKC9bXlxccywgXFxcXFxcL10kLykudGVzdCh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgYnVpbGRUeXBlQWhlYWQoc291cmNlOiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICghdGhpcy5tYXlBZGRUeXBlQWhlYWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hUZXh0V29yZHMgPSB0aGlzLnNlYXJjaFRleHQuc3BsaXQoL1tcXHMsIF0rLyk7XG4gICAgY29uc3QgbGFzdFdvcmQgPSBzZWFyY2hUZXh0V29yZHNbc2VhcmNoVGV4dFdvcmRzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMuc29tZShmdW5jdGlvbihzdWcpIHtcbiAgICAgIGlmICghc3VnIHx8ICFzdWcuaGFzT3duUHJvcGVydHkoJ3N0cmluZycpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWcuc3RyaW5nLnNwbGl0KC9bXFxzLV0rLykuc29tZShmdW5jdGlvbih3b3JkKSB7XG4gICAgICAgIGlmICh0aGlzLnN0cmluZ1N0YXJ0c1dpdGhJZ25vcmVEaWFjcml0aWNzKHdvcmQsIGxhc3RXb3JkKSkge1xuICAgICAgICAgIHRoaXMudHlwZUFoZWFkV29yZCA9IHdvcmQ7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfS5iaW5kKHRoaXMpKSkge1xuICAgICAgY29uc3QgYXBwZW5kaXggPSB0aGlzLnR5cGVBaGVhZFdvcmQuc2xpY2UobGFzdFdvcmQubGVuZ3RoLCB0aGlzLnR5cGVBaGVhZFdvcmQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdGhpcy5icFR5cGVBaGVhZCA9IHRoaXMuc2VhcmNoVGV4dCArIGFwcGVuZGl4O1xuICAgIH1cbiAgfVxuXG4gIHN0cmluZ1N0YXJ0c1dpdGhJZ25vcmVEaWFjcml0aWNzKHZhbHVlLCBwcmVmaXgpIHtcbiAgICB2YWx1ZSA9ICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbiAgICBwcmVmaXggPSAocHJlZml4ICE9PSBudWxsICYmIHByZWZpeCAhPT0gdW5kZWZpbmVkKSA/IHByZWZpeC50b0xvd2VyQ2FzZSgpIDogcHJlZml4O1xuICAgIHJldHVybiB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3ModmFsdWUpLnNsaWNlKDAsIHByZWZpeC5sZW5ndGgpXG4gICAgICAudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcyhwcmVmaXgpKSAhPT0gLTE7XG4gIH1cblxuICBnZXRCYWNrZ3JvdW5kQ29sb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gIXRoaXMuaXNQYXJhbXNDb21wbGV0ZSgpID8gJ2xpZ2h0Z3JleScgOiAnJztcbiAgfVxuXG4gIGdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyICs9IDE7XG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLmdlbmVyYXRlUGFyYW1ldGVycygpO1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ1NUUkVFVC1OVU1CRVIgY2FsbGluZyBzZXJ2aWNlIHBhcmFtcycsIHBhcmFtKTsgfVxuICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5hZGRyZXNzU2VydmljZS5nZXRTdHJlZXQodGhpcy5iYXNlVXJsLCB0aGlzLmxvY2FsaXR5LCB0aGlzLnBvc3RhbENvZGUsIHBhcmFtKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ1NUUkVFVC1OVU1CRVIgc2VydmljZSByZXNwb25zZScsIHJlc3BvbnNlKTsgfVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVHZXRTdHJlZXRSZXNwb25zZShyZXNwb25zZSwgc291cmNlKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdzdHJlZXQgbnVtYmVyIHNlcnZpY2UgcmVzcG9uc2UnLCByZXNwb25zZSwgc291cmNlKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaEZvdW5kICE9PSB0cnVlIClcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAvLyB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5wcmVmaWxsQW5hbHl6ZURhdGEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAsXG4gICAgICAgICAgKCkgPT4gdGhpcy5oYW5kbGVHZXRTdHJlZXRFcnJvcihzb3VyY2UpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldFRleHRDb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAoIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPT09IHRydWUgKSA/ICdvcmFuZ2VyZWQnIDogJyc7XG4gIH1cblxuICBwcmVmaWxsQW5hbHl6ZURhdGEoKVxuICB7XG4gICAgaWYgKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMucHJlZmlsbEV2ZW50RW1pdHRlci5lbWl0KG5ldyBQcmVmaWxsRXZlbnQoQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIsIHRoaXMucHJlZmlsbERhdGEpICk7XG4gIH1cblxuICBsb2FkUGFyYW1zKHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSkge1xuICAgIGxldCBjb25jYXRTdHIgPSAnJztcbiAgICBpZiAocHJlZmlsbERhdGEgIT09IG51bGwgJiYgcHJlZmlsbERhdGEucGFyYW1ldGVycyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdtaW5MZXZlbCcpKSB7XG4gICAgICAgICAgdGhpcy5taW5MZXZlbCA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ3Bvc3RhbENvZGUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSkpIHtcbiAgICAgICAgICB0aGlzLnBvc3RhbENvZGUgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ211bmljaXBhbGl0eU5hbWUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSkpIHtcbiAgICAgICAgICB0aGlzLmxvY2FsaXR5ID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdzdHJlZXROYW1lJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWUpKSB7XG4gICAgICAgICAgdGhpcy5zdHJlZXROYW1lID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdzdHJlZXROdW1iZXInKVxuICAgICAgICAgICAgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcikgJiYgdGhpcy5pc1BhcmFtc0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICBjb25jYXRTdHIgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uY2F0U3RyO1xuICB9XG5cbiAgIGxvYWRBdXRvRmlsbFBhcmFtcyhhdXRvRmlsbERhdGE6IEF1dG9maWxsRGF0YSkge1xuICAgIGxldCBjb25jYXRTdHIgPSAnJztcbiAgICBpZiAoYXV0b0ZpbGxEYXRhICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgaWYgKGF1dG9GaWxsRGF0YS5oYXNPd25Qcm9wZXJ0eSgncG9zdGFsQ29kZScpICYmIHRoaXMuaXNTdHJpbmcoYXV0b0ZpbGxEYXRhLnBvc3RhbENvZGUpKSB7XG4gICAgICAgICAgdGhpcy5wb3N0YWxDb2RlID0gYXV0b0ZpbGxEYXRhLnBvc3RhbENvZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF1dG9GaWxsRGF0YS5oYXNPd25Qcm9wZXJ0eSgnbXVuaWNpcGFsaXR5TmFtZScpICYmIHRoaXMuaXNTdHJpbmcoYXV0b0ZpbGxEYXRhLm11bmljaXBhbGl0eU5hbWUpKSB7XG4gICAgICAgICAgdGhpcy5sb2NhbGl0eSA9IGF1dG9GaWxsRGF0YS5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRvRmlsbERhdGEuaGFzT3duUHJvcGVydHkoJ3N0cmVldE5hbWUnKSAmJiB0aGlzLmlzU3RyaW5nKGF1dG9GaWxsRGF0YS5zdHJlZXROYW1lKSkge1xuICAgICAgICAgIHRoaXMuc3RyZWV0TmFtZSA9IGF1dG9GaWxsRGF0YS5zdHJlZXROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRvRmlsbERhdGEuaGFzT3duUHJvcGVydHkoJ3N0cmVldE51bWJlcicpXG4gICAgICAgICAgICAmJiB0aGlzLmlzU3RyaW5nKGF1dG9GaWxsRGF0YS5zdHJlZXROdW1iZXIpKSB7XG4gICAgICAgICAgY29uY2F0U3RyID0gYXV0b0ZpbGxEYXRhLnN0cmVldE51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBpZihhdXRvRmlsbERhdGEuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGVTdHJlZXROdW1iZXInKSl7XG4gICAgICAgIHRoaXMuYWRkcmVzc0lzQ29tcGxldGU9dGhpcy5hdXRvZmlsbERhdGEuaXNDb21wbGV0ZVN0cmVldE51bWJlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uY2F0U3RyO1xuICB9XG5cbiAgaXNTdHJpbmcodmFsKTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsLmNvbnN0cnVjdG9yID09PSBTdHJpbmc7XG4gIH1cblxuICBpc1ZhbGlkKHZhbCkge1xuICAgIHJldHVybiB0aGlzLmlzU3RyaW5nKHZhbCkgJiYgdmFsICE9PSAnJztcbiAgfVxuXG4gIGlzUGFyYW1zQ29tcGxldGUoKTogYm9vbGVhbiB7XG4vKiAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgY29uc29sZS5sb2coJ3N0cmVldC1udW1iZXI6OmlzUGFyYW1zQ29tcGxldGUnLCB0aGlzLnBvc3RhbENvZGUsIHRoaXMubG9jYWxpdHksIHRoaXMuc3RyZWV0TmFtZSk7XG4gICAgfSAqL1xuICAgIGlmKCF0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCl7XG4gICAgICByZXR1cm4gKHRoaXMuaXNWYWxpZCh0aGlzLnBvc3RhbENvZGUpIHx8IHRoaXMuaXNWYWxpZCh0aGlzLmxvY2FsaXR5KSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMuc3RyZWV0TmFtZSlcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQodGhpcy5wb3N0YWxDb2RlKSAmJiB0aGlzLmlzVmFsaWQodGhpcy5sb2NhbGl0eSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMuc3RyZWV0TmFtZSk7XG4gICAgfVxuICAgIH1cblxuICBnZW5lcmF0ZVBhcmFtZXRlcnMoKTogUXVlcnlQYXJhbWV0ZXJzIHtcbiAgICBjb25zdCBwYXJhbSA9IG5ldyBRdWVyeVBhcmFtZXRlcnMoe1xuICAgICAgaWQ6IHRoaXMuc2VxdWVuY2VOdW1iZXIsXG4gICAgICBxOiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICBwb3N0YWxDb2RlOiB0aGlzLnBvc3RhbENvZGUsXG4gICAgICBsb2NhbGl0eTogdGhpcy5sb2NhbGl0eSxcbiAgICAgIHN0cmVldDogdGhpcy5zdHJlZXROYW1lLFxuICAgICAgbWF4TnVtYmVyT2ZTdWdnZXN0aW9uczogdGhpcy5tYXhTdWdnZXNpb25Db3VudFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc29ydENyaXRlcmlhID09PSAnUycpIHtcbiAgICAgIHBhcmFtLnNvcnRCeVN0cmVldE5iKHRydWUpO1xuICAgIH1cblxuICAgIGlmKHRoaXMubmlzOUluUmVzcG9uc2Upe1xuICAgICAgcGFyYW0uc2V0SW5jbHVkZU5pc0NvZGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5idXNpbmVzc05hbWVJblJlc3BvbnNlKXtcbiAgICAgIHBhcmFtLnNldEluY2x1ZGVCdXNpbmVzc05hbWUodHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbTtcbiAgfVxuXG4gIGhhbmRsZUdldFN0cmVldFJlc3BvbnNlKGRhdGE6IGFueSwgc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmIChkYXRhICYmIGRhdGEucmVzcG9uc2UgJiYgZGF0YS5yZXNwb25zZS5zZXF1ZW5jZU51bWJlciAmJiBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyID49IHRoaXMuY29uc3VtZWROdW1iZXIgJiZcbiAgICAgIGRhdGEucmVzcG9uc2UudG9wU3VnZ2VzdGlvbnMpIHtcbiAgICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyO1xuICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgICB0aGlzLnBhcnNlVG9wU3VnZ2VzdGlvbnMoZGF0YS5yZXNwb25zZS50b3BTdWdnZXN0aW9ucywgc291cmNlKTtcbiAgICAgIHRoaXMuYnVpbGRUeXBlQWhlYWQoc291cmNlKTtcbiAgICAgIHRoaXMuY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgICB0aGlzLmJ1aWxkSW5wdXRXb3JkTGlzdCgpO1xuICAgIH1cbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSAodGhpcy5wcmVmaWxsaW5nID09PSB0cnVlICYmIHRoaXMucHJlZmlsbERhdGEgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAhdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgOiBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZUdldFN0cmVldEVycm9yKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAodGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiB0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCkge1xuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMgKz0gMTtcbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlci5lbWl0KHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKTtcbiAgICAgIHRoaXMuc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgIH1cbiAgICBpZih0aGlzLmFsbG93Tm9WYWxpZGF0aW9uICYmIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kICYmIHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKXtcblxuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMrPTE7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXIuZW1pdCh0aGlzLm51bWJlck9mRXhjZXB0aW9ucyk7XG4gICAgICB0aGlzLnNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICAgIHRoaXMub25JbnB1dENoYW5nZShzb3VyY2UpO1xuICAgIH1cbiAgICBpZih0aGlzLmFsbG93Tm9WYWxpZGF0aW9uICYmICF0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCAmJiBzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCAgKVxuICAgIHtcbiAgICAgIHRoaXMub25JbnB1dENoYW5nZShzb3VyY2UpO1xuICAgIH1cbiAgICBpZighdGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiB0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZClcbiAgICB7XG4gICAgICB0aGlzLnNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBzZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCkge1xuICAgIHRoaXMuZXJyb3JDb2RlID0gJ3NlcnZpY2UtdW5hdmFpbGFibGUnO1xuICAgIC8vIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2UodGhpcy5lcnJvckNvZGUpO1xuICAgIHRoaXMuZW1pdFRyYW5zbGF0ZWRWYWxpZGF0aW9uTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZVR5cGUuU2VydmljZV9VbmF2YWlsYWJsZSk7XG4gIH1cblxuICBjbGVhckNvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JDb2RlKSB7XG4gICAgICBjb25zdCByZXMgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmVycm9yQ29kZSk7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPT09IHJlcyApIHtcbiAgICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvckNvZGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlVG9wU3VnZ2VzdGlvbnModG9wU3VnZ2VzdGlvbnMsIHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAodG9wU3VnZ2VzdGlvbnMuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XG4gICAgICAvLyB0b3BTdWdnZXN0aW9ucy5mb3JFYWNoKHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uLmJpbmQodGhpcykpO1xuICAgICAgZm9yIChjb25zdCBzdWcgb2YgdG9wU3VnZ2VzdGlvbnMpXG4gICAgICB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpXG4gICAgICAgIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnc3RyZWV0bnVtYmVyOjpwYXJzZVRvcFN1Z2dlc3Rpb25zIC0gc3VnZ2VzdGlvbjonLHN1Zywnc291cmNlOicsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJzZVNpbmdsZVN1Z2dlc3Rpb24oc3VnLCBzb3VyY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNvdXJjZSlcbiAgICAgIHtcbiAgICAgICAgaWYgKCh0b3BTdWdnZXN0aW9ucy5sZW5ndGggPT09IDAgfHwgdGhpcy5lbXB0eVJlc3BvbnNlKSAmJiB0aGlzLm5vdEluTGlzdEFsbG93ZWQpIHtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zLnB1c2goe3N0cmluZzogdGhpcy5zZWFyY2hUZXh0LCAnbm90LWluLWxpc3QnOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgLy8gSWYgcHJlZmlsbGluZywgdGhlbiBjaGVjayBpZiBubyBtYXRjaCBmb3IgYSBub24tZW1wdHkgYm94TnVtYmVyXG4gICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHNpbXVsYXRlIHRoZSBzZWxlY3Rpb24gb2YgdGhlICdub3QtaW4tbGlzdCcgc3VnZ2VzdGlvblxuICAgICAgICBpZiAodGhpcy5wcmVmaWxsaW5nICYmIHRoaXMubm90SW5MaXN0QWxsb3dlZFxuICAgICAgICAgICAgJiYgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IGZhbHNlXG4gICAgICAgICAgICAmJiB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXIgIT09IG51bGxcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAmJiB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXIubGVuZ3RoID4gMClcbiAgICAgICAge1xuICAgICAgICAgIC8vIGNvbnN0IG5vdEluTGlzdFN1Z2dlc3Rpb24gPSB7c3RyaW5nOiB0aGlzLnNlYXJjaFRleHQsICdub3QtaW4tbGlzdCc6IHRydWV9O1xuICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSB0aGlzLnByZWZpbGxCdWlsZE5vdEluTGlzdFN1Z2dlc3Rpb24oKTtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdTVFJFRVQgTlVNQkVSIC0gUFJFRklMTCBOT1QgSU4gTElTVCBTVUdHRVNUSU9OOicsIHN1Z2dlc3Rpb24pOyB9XG4gICAgICAgICAgdGhpcy5wcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbih0b3BTdWdnZXN0aW9ucywgc291cmNlKTtcbiAgICB9XG4gIH1cblxuICBwcmVmaWxsQnVpbGROb3RJbkxpc3RTdWdnZXN0aW9uKCk6IGFueSB7XG4gICAgY29uc3Qgbm90SW5MaXN0U3VnZ2VzdGlvbiA9IHtzdHJpbmc6IHRoaXMuc2VhcmNoVGV4dCwgJ25vdC1pbi1saXN0JzogdHJ1ZX07XG4gICAgY29uc3Qgc3RyZWV0U3VnZ2VzdGlvbiA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgY29uc3QgY29tYmluZWQgPSB7Li4uc3RyZWV0U3VnZ2VzdGlvbi5hZGRyZXNzLCAuLi5ub3RJbkxpc3RTdWdnZXN0aW9ufTtcbiAgICBkZWxldGUgY29tYmluZWQubWFpbEJveGlkO1xuICAgIGRlbGV0ZSBjb21iaW5lZC5zdWZmaXhJZDtcbiAgICAvLyBjb21iaW5lZC5ib3hOdW1iZXIgPSBjb21iaW5lZC5zdHJpbmc7XG4gICAgY29tYmluZWQuaG91c2VOdW1iZXIgPSBjb21iaW5lZC5zdHJpbmc7XG4gICAgY29tYmluZWQuc2VhcmNoQmFyU3RyaW5nID0gY29tYmluZWQuc3RyaW5nO1xuICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgaWYgKHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eSgnYm94TnVtYmVyJykgKVxuICAgIHtcbiAgICAgIGNvbnN0IGJuID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgIGlzQ29tcGxldGUgPSAoYm4gIT09IG51bGwgJiYgYm4gIT09IHVuZGVmaW5lZCAmJiBibi5sZW5ndGggPiAwICkgPyBmYWxzZSA6IHRydWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGlzQ29tcGxldGUgPT09IHRydWUpIHtcbiAgICAgIGNvbWJpbmVkLmlzQ29tcGxldGUgPSBpc0NvbXBsZXRlO1xuICAgIH1cbiAgICBzdHJlZXRTdWdnZXN0aW9uLmFkZHJlc3MgPSBjb21iaW5lZDtcbiAgICByZXR1cm4gc3RyZWV0U3VnZ2VzdGlvbjtcbiAgfVxuXG4gIHBhcnNlU2luZ2xlU3VnZ2VzdGlvbihzdWdnZXN0aW9uOiBhbnksIHNvdXJjZTogU291cmNlVHlwZSkge1xuICAgIGxldCBzdWdnZXN0aW9uVG9BZGQ6IGFueTtcbiAgICBpZiAodGhpcy5sb2NhbGVTZXJ2aWNlLmlzTG9jYWxlRnJlbmNoKCkgJiYgc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZnJlbmNoJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uZnJlbmNoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2NhbGVTZXJ2aWNlLmlzTG9jYWxlRHV0Y2goKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdkdXRjaCcpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmR1dGNoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2NhbGVTZXJ2aWNlLmlzTG9jYWxlR2VybWFuKCkgJiYgc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZ2VybWFuJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uZ2VybWFuO1xuICAgIH0gZWxzZSBpZiAoc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYWRkcmVzcycpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgfVxuICAgIGlmIChzdWdnZXN0aW9uVG9BZGQpIHtcbiAgICAgIGlmIChzdWdnZXN0aW9uLm1lc3NhZ2VzKSB7XG4gICAgICAgIHN1Z2dlc3Rpb25Ub0FkZC5tZXNzYWdlcyA9IHN1Z2dlc3Rpb24ubWVzc2FnZXM7XG4gICAgICB9XG4gICAgICBpZiAoc3VnZ2VzdGlvblRvQWRkLmhvdXNlTnVtYmVyID09PSB0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zLnB1c2goc3VnZ2VzdGlvblRvQWRkKTtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3N0cmVldE51bWJlciAtIGFkZCBzdWdnZXN0aW9uIHRvIGxpc3QnLCBzdWdnZXN0aW9uVG9BZGQpO1xuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKVxuICAgICAge1xuICAgICAgICBzdWdnZXN0aW9uLmFkZHJlc3MgPSBzdWdnZXN0aW9uVG9BZGQ7XG4gICAgICAgIHRoaXMucHJlZmlsbENoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uTGV2ZWwgIT09IFN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyICYmIHRoaXMuc3VnZ2VzdGlvbkxldmVsICE9PSBTdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldEFuZEJveE51bWJlcilcbiAgICAgIHtcbiAgICAgICAgc3VnZ2VzdGlvbi5hZGRyZXNzID0gc3VnZ2VzdGlvblRvQWRkO1xuICAgICAgICBjb25zdCBpc1BlcmZlY3RNYXRjaD10aGlzLmNoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pO1xuICAgICAgICBpZighIGlzUGVyZmVjdE1hdGNoKVxuICAgICAgICB7XG4gICAgICAgICAgLy8gc2VlbXMgbm90aGluZyB0byBkbz9cbiAgICAgICAgICAvLyBObyBuZWVkIHRvIG5vdGlmeSBmb3IgYSBpbmNvbXBsZXRlIGFkZHJlc3NcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pOiBib29sZWFuXG4gIHtcbiAgICBpZiAoICF0aGlzLmFkZHJlc3NJc0NvbXBsZXRlIClcbiAgICB7XG4gICAgICAvLyBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXIgLSBjaGVja2luZyBzdWdnZXN0aW9uIGZvciBwZXJmZWN0IG1hdGNoJywgc3VnZ2VzdGlvbiwgdGhpcy5zZWFyY2hUZXh0KTtcbiAgICAgIC8vIH1cbiAgICAgIGNvbnN0IHN1Z0FkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uU3RyZWV0TnVtYmVyID0gdGhpcy50cmFuc2Zvcm1TdHJlZXROdW1iZXJJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKCcnICsgc3VnQWRkcmVzcy5ob3VzZU51bWJlcik7XG5cbiAgICAgIGlmIChzdWdnZXN0aW9uU3RyZWV0TnVtYmVyID09PSAoJycgKyB0aGlzLnNlYXJjaFRleHQpIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc3VnQWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgaWYgKHN1Z0FkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBzdWdBZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgKSB7XG4gICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24obnVsbCwgc3VnQWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7IFxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXI6OnByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaCcsIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUpO1xuICAgICAgICAgIC8vIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUgJiYgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0FERFJFU1MgQ09NUExFVEUgT04gU1RSRUVUIE5VTUJFUiAhJyk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsICE9PSBTdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldE51bWJlciAmJiB0aGlzLnN1Z2dlc3Rpb25MZXZlbCAhPT0gU3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXRBbmRCb3hOdW1iZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tTdWdnZXN0aW9uKG51bGwsIHN1Z0FkZHJlc3MpOy8vIGhvdXNlIG51bWJlciBmb3VuZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpwcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2ggLSBBZGRyZXNzIGNvbXBsZXRlLCBza2lwcGluZyBzdWdnZXN0aW9uIGNoZWNrJywgc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJlZmlsbENoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pXG4gIHtcbiAgICBpZiAoICF0aGlzLmFkZHJlc3NJc0NvbXBsZXRlIClcbiAgICB7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXIgLSBjaGVja2luZyBzdWdnZXN0aW9uIGZvciBwZXJmZWN0IG1hdGNoJywgdGhpcy5wcmVmaWxsRGF0YSwgc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWdBZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvblN0cmVldE51bWJlciA9IHRoaXMudHJhbnNmb3JtU3RyZWV0TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcygnJyArIHN1Z0FkZHJlc3MuaG91c2VOdW1iZXIpO1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnY29tcGFyaW5nIHN0cmVldCBudW1iZXJzJywgc3VnZ2VzdGlvblN0cmVldE51bWJlciwgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdWdnZXN0aW9uU3RyZWV0TnVtYmVyID09PSAoJycgKyB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXIpIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPSB0cnVlO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uID0gc3VnZ2VzdGlvbjtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc3VnQWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICAgICAgaWYgKHN1Z0FkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBzdWdBZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUgKSB7XG4gICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24obnVsbCwgc3VnQWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3N0cmVldE51bWJlcjo6cHJlZmlsbENoZWNrRm9yUGVyZmVjdE1hdGNoJywgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSk7XG4gICAgICAgICAgLy8gaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSAmJiB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQUREUkVTUyBDT01QTEVURSBPTiBTVFJFRVQgTlVNQkVSICEnKTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3N0cmVldE51bWJlcjo6cHJlZmlsbENoZWNrRm9yUGVyZmVjdE1hdGNoIC0gQWRkcmVzcyBjb21wbGV0ZSwgc2tpcHBpbmcgc3VnZ2VzdGlvbiBjaGVjaycsIHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2VfbmV3KHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpvbklucHV0Q2hhbmdlJywgc291cmNlKTtcbiAgICB9XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgLy8gY29uc29sZS5sb2coJ3N0cmVldE51bWJlcjo6b25JbnB1dENoYW5nZScsIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUpO1xuICAgIHRoaXMuZW1wdHlSZXNwb25zZSA9IHRydWU7XG4gICAgdGhpcy5yZXNldEFycm93U2VsZWN0ZWRJbmRleCgpO1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3N0cmVldE51bWJlcjo6b25JbnB1dENoYW5nZSAtPiBjYWxsaW5nIHZhbHVlQ2hhbmdlZCcpO1xuICAgICAgfVxuICAgICAgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWwhPT1TdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUpXG4gICAgICB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0ID09PSAnJykge1xuICAgICAgdGhpcy5zZXF1ZW5jZU51bWJlciArPSAxO1xuICAgICAgdGhpcy5jb25zdW1lZE51bWJlciA9IHRoaXMuc2VxdWVuY2VOdW1iZXI7XG4gICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLmxvZygnKEEpIGRvIG5vdCB1c2Ugc3VnZ2VzdGlvbnMgZm9yIHN0cmVldCBudW1iZXInKTtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJDaGFuZ2VkLmVtaXQodGhpcy5zZWFyY2hUZXh0KTtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKVxuICAgICAgICAgIHRoaXMucHJlZmlsbEFuYWx5emVEYXRhKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLmxvZygnKEIpIGRvIG5vdCB1c2Ugc3VnZ2VzdGlvbnMgZm9yIHN0cmVldCBudW1iZXInKTtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJDaGFuZ2VkLmVtaXQodGhpcy5zZWFyY2hUZXh0KTtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKVxuICAgICAgICAgIHRoaXMucHJlZmlsbEFuYWx5emVEYXRhKCk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIGlmKCF0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCl7XG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb24gPSB7XG4gICAgICAgICAgICAnc3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnbXVuaWNpcGFsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgICAnbG9jYWxpdHlOYW1lJzogdGhpcy5sb2NhbGl0eSxcbiAgICAgICAgICAgICdwb3N0YWxDb2RlJzogdGhpcy5wb3N0YWxDb2RlLFxuICAgICAgICAgICAgJ3NlYXJjaEJhclN0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgJ2hvdXNlTnVtYmVyJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnc3RyZWV0TmFtZSc6dGhpcy5zdHJlZXROYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb24pO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aGlzLmdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5idWlsZElucHV0V29yZExpc3QoKTtcbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2Uoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXI6Om9uSW5wdXRDaGFuZ2UnLCBzb3VyY2UpO1xuICAgIH1cbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSBmYWxzZTtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAvLyBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpvbklucHV0Q2hhbmdlJywgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSk7XG4gICAgdGhpcy5lbXB0eVJlc3BvbnNlID0gdHJ1ZTtcbiAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpvbklucHV0Q2hhbmdlIC0+IGNhbGxpbmcgdmFsdWVDaGFuZ2VkJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIH1cbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgKz0gMTtcbiAgICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSB0aGlzLnNlcXVlbmNlTnVtYmVyO1xuICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgICBpZih0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSlcbiAgICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coJyhBKSBkbyBub3QgdXNlIHN1Z2dlc3Rpb25zIGZvciBzdHJlZXQgbnVtYmVyJyk7XG4gICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQ2hhbmdlZC5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRClcbiAgICAgICAgICB0aGlzLnByZWZpbGxBbmFseXplRGF0YSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZih0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSlcbiAgICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coJyhCKSBkbyBub3QgdXNlIHN1Z2dlc3Rpb25zIGZvciBzdHJlZXQgbnVtYmVyJyk7XG4gICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyQ2hhbmdlZC5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCl7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPSB0cnVlO1xuXG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb24gPXtcbiAgICAgICAgICAnYWRkcmVzcyc6e1xuICAgICAgICAgICAgJ3N0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgJ211bmljaXBhbGl0eU5hbWUnOiB0aGlzLmxvY2FsaXR5LFxuICAgICAgICAgICAgJ2xvY2FsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgICAncG9zdGFsQ29kZSc6IHRoaXMucG9zdGFsQ29kZSxcbiAgICAgICAgICAgICdzZWFyY2hCYXJTdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICdob3VzZU51bWJlcic6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgJ3N0cmVldE5hbWUnOnRoaXMuc3RyZWV0TmFtZVxuICAgICAgICAgIH19XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uXG4gICAgICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsQW5hbHl6ZURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZighdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpe1xuICAgICAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpIHtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9IHRydWU7XG5cbiAgICAgICAgICBsZXQgc3VnZ2VzdGlvbiA9e1xuICAgICAgICAgICdhZGRyZXNzJzp7XG4gICAgICAgICAgICAnc3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnbXVuaWNpcGFsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgICAnbG9jYWxpdHlOYW1lJzogdGhpcy5sb2NhbGl0eSxcbiAgICAgICAgICAgICdwb3N0YWxDb2RlJzogdGhpcy5wb3N0YWxDb2RlLFxuICAgICAgICAgICAgJ3NlYXJjaEJhclN0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgJ2hvdXNlTnVtYmVyJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnc3RyZWV0TmFtZSc6dGhpcy5zdHJlZXROYW1lXG4gICAgICAgICAgfX1cbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25cbiAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB0aGlzLnByZWZpbGxBbmFseXplRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICBsZXQgc3VnZ2VzdGlvbiA9IHtcbiAgICAgICAgICAnc3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgJ211bmljaXBhbGl0eU5hbWUnOiB0aGlzLmxvY2FsaXR5LFxuICAgICAgICAgICdsb2NhbGl0eU5hbWUnOiB0aGlzLmxvY2FsaXR5LFxuICAgICAgICAgICdwb3N0YWxDb2RlJzogdGhpcy5wb3N0YWxDb2RlLFxuICAgICAgICAgICdzZWFyY2hCYXJTdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAnaG91c2VOdW1iZXInOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAnc3RyZWV0TmFtZSc6dGhpcy5zdHJlZXROYW1lXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbik7fVxuICAgICAgfWVsc2V7XG4gICAgICAgIHRoaXMuZ2V0VG9wU3VnZ2VzdGlvbnMoc291cmNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5idWlsZElucHV0V29yZExpc3QoKTtcbiAgfVxuXG5cbiAgY2xpY2tTdWdnZXN0aW9uKGV2ZW50OiBhbnksIHN1Z2dlc3Rpb24/OiBhbnkpIHtcbiAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpjbGlja1N1Z2dlc3Rpb24nLCBldmVudCwgc3VnZ2VzdGlvbik7IH1cbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoc3VnZ2VzdGlvbikge1xuICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgdGhpcy5yZXNldEFycm93U2VsZWN0ZWRJbmRleCgpO1xuICAgICAgaWYgKHN1Z2dlc3Rpb24uc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dChzdWdnZXN0aW9uLnNlYXJjaEJhclN0cmluZyk7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuXG4gICAgICBjb25zdCBub3RJbkxpc3QgPSBzdWdnZXN0aW9uWydub3QtaW4tbGlzdCddO1xuICAgICAgY29uc3QgaXNOb3RJbkxpc3QgPSBub3RJbkxpc3QgIT09IG51bGwgJiYgbm90SW5MaXN0ICE9PSB1bmRlZmluZWQgJiYgbm90SW5MaXN0ID09PSB0cnVlO1xuXG4gICAgICBpZiAoc3VnZ2VzdGlvblsnbm90LWluLWxpc3QnXSkge1xuICAgICAgICBzdWdnZXN0aW9uID0gdGhpcy5tb2RpZnlTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbik7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ3N0cmVldE51bWJlcjo6Y2xpY2tTdWdnZXN0aW9uIC0gTk9ULUlOLUxJU1QnLCBldmVudCwgc3VnZ2VzdGlvbik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgc3VnZ2VzdGlvbi5pc0NvbXBsZXRlID09PSB0cnVlICYmICFpc05vdEluTGlzdCAmJiAhc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYm94TnVtYmVyJykgKSB7XG4gICAgICAgIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAvLyB0aGlzLm5vdGlmeUFkZHJlc3NJc1ZhbGlkYXRlZCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9ucygpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbik7XG4gICAgfVxuICB9XG5cbiAgbW9kaWZ5U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb246IG9iamVjdCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdzdHJlZXQgbnVtYmVyIC0gY29tYmluZSBzZWxlY3RlZEFkZHJlc3Mgd2l0aCBub3QgaW4gbGlzdCcsIHN1Z2dlc3Rpb24sIHRoaXMuc2VsZWN0ZWRBZGRyZXNzKTtcbiAgICB9XG4gICAgY29uc3QgY29tYmluZWQgPSB7Li4udGhpcy5zZWxlY3RlZEFkZHJlc3MsIC4uLnN1Z2dlc3Rpb259O1xuICAgIGRlbGV0ZSBjb21iaW5lZC5sYXRpdHVkZTtcbiAgICBkZWxldGUgY29tYmluZWQubG9uZ2l0dWRlO1xuICAgIGRlbGV0ZSBjb21iaW5lZC5tYWlsYm94SWQ7XG4gICAgZGVsZXRlIGNvbWJpbmVkLnBkcElkO1xuICAgIGRlbGV0ZSBjb21iaW5lZC5zdWZmaXhJZDtcbiAgICBkZWxldGUgY29tYmluZWQucGRwSWQ7XG4gICAgZGVsZXRlIGNvbWJpbmVkLnBkcElkO1xuICAgIGNvbWJpbmVkLmhvdXNlTnVtYmVyID0gY29tYmluZWQuc3RyaW5nO1xuICAgIGNvbWJpbmVkLnNlYXJjaEJhclN0cmluZyA9IGNvbWJpbmVkLnN0cmluZztcbiAgICBjb21iaW5lZC5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICByZXR1cm4gY29tYmluZWQ7XG4gIH1cblxuICBzZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3N0cmVldCBudW1iZXIgLSBlbWl0IHN1Z2dlc3Rpb24nLCBzdWdnZXN0aW9uKTtcbiAgICBjb25zdCBub3RJbkxpc3QgPSBzdWdnZXN0aW9uWydub3QtaW4tbGlzdCddO1xuICAgIGNvbnN0IGlzTm90SW5MaXN0ID0gbm90SW5MaXN0ICE9PSBudWxsICYmIG5vdEluTGlzdCAhPT0gdW5kZWZpbmVkICYmIG5vdEluTGlzdCA9PT0gdHJ1ZTtcbiAgICB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gIChzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgc3VnZ2VzdGlvbi5pc0NvbXBsZXRlID09PSB0cnVlICYmICFpc05vdEluTGlzdCAmJiAhc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnYm94TnVtYmVyJykpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChzdWdnZXN0aW9uKTtcbiAgfVxuXG4gIC8qXG4gIGNsZWFyU2VsZWN0ZWRBZGRyZXNzKCkge1xuICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChudWxsKTtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAvLyBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpjbGVhclNlbGVjdGVkQWRkcmVzcycsIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUpO1xuICB9XG4gICovXG5cbiAgZW1pdFRyYW5zbGF0ZWRWYWxpZGF0aW9uTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgb3B0aW9ucz86IHN0cmluZ1tdKSB7XG4gICAgLy8gTW9tZW50bHksIG9wdGlvbnMgYXJlIE5PVCB1c2VkOyBzbyBkYXRhIHR5cGUgb2YgdGhlc2Ugb3B0aW9ucyB3aWxsIGJlIHJldmlld2VkIG9uY2UgbmVlZGVkLlxuICAgIGlmICh2YWxpZGF0aW9uTWVzc2FnZVR5cGUgPT09IG51bGwgfHwgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlID09PSB1bmRlZmluZWQgKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBlbWl0IHZhbGlkYXRpb24gbWVzc2FnZSAtIG1lc3NhZ2Uga2V5IGlzIGludmFsaWQhJywgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHZhbGlkYXRpb25NZXNzYWdlVHlwZSkge1xuXG4gICAgICBjYXNlIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX05vdF9Gb3VuZDpcbiAgICAgIGNhc2UgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfVmFsaWRhdGVkOlxuICAgICAgY2FzZSBWYWxpZGF0aW9uTWVzc2FnZVR5cGUuU2VydmljZV9VbmF2YWlsYWJsZToge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh2YWxpZGF0aW9uTWVzc2FnZVR5cGUpO1xuICAgICAgICAgIC8vIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdChtZXNzYWdlKTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQoe21lc3NhZ2VUeXBlOiB2YWxpZGF0aW9uTWVzc2FnZVR5cGUsIHRyYW5zbGF0ZWRNZXNzYWdlOiBtZXNzYWdlfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmFsaWduXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5hYmxlIHRvIGVtaXQgdmFsaWRhdGlvbiBtZXNzYWdlIC0gbWVzc2FnZSBrZXkgTk9UIHN1cHBvcnRlZCEnLCB2YWxpZGF0aW9uTWVzc2FnZVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTphbGlnblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgfVxuXG4gIG5vdGlmeUFkZHJlc3NJc1ZhbGlkYXRlZCgpIHtcbiAgICB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAvLyBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpub3RpZnlBZGRyZXNzSXNWYWxpZGF0ZWQnLCB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlKTtcbiAgICAvLyB0aGlzLnNldFZhbGlkYXRpb25NZXNzYWdlKCdhZGRyZXNzLXZhbGlkYXRlZCcpO1xuICAgIHRoaXMuZW1pdFRyYW5zbGF0ZWRWYWxpZGF0aW9uTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19WYWxpZGF0ZWQpO1xuICB9XG5cbiAgY2hlY2tLZXlEb3duKGV2ZW50KSB7XG4gICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgLy8gZG93biBrZXksIGluY3JlbWVudCBzZWxlY3RlZEluZGV4XG4gICAgICBjYXNlIDQwOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm1vdmVBcnJvd1NlbGVjdGVkSW5kZXhEb3duKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyB1cCBrZXksIGRlY3JlbWVudCBzZWxlY3RlZEluZGV4XG4gICAgICBjYXNlIDM4OlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm1vdmVBcnJvd1NlbGVjdGVkSW5kZXhVcCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIHJpZ2h0IGFycm93IGtleVxuICAgICAgY2FzZSAzOTpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihldmVudCwgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy50eXBlQWhlYWRXb3JkICYmIHRoaXMudHlwZUFoZWFkSXNTaG93bigpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlYXJjaFRleHQodGhpcy5icFR5cGVBaGVhZCk7XG4gICAgICAgICAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyB0YWIga2V5XG4gICAgICBjYXNlIDk6XG4gICAgICAgIGlmICghdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdEZpcnN0SW5MaXN0T2ZTdWdnZXNpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDY6XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gZW50ZXIgcHJlc3NlZFxuICAgICAgY2FzZSAxMzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihldmVudCwgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgICBicmVhaztcblxuICAgIH1cbiAgfVxuICBjaGVja0tleVVQKGV2ZW50KVxuICB7XG4gICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgXG4gICAgICBjYXNlIDg6XG4gICAgICAgXG4gICAgICAgIGlmKHRoaXMuc2VhcmNoVGV4dC5sZW5ndGg+MClcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdQQVJUSUFMX0NMRUFSX1NUUkVFVF9OVU1CRVInKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnU1RSRUVUX05VTUJFUicpO1xuICAgICAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdCT1hfTlVNQkVSJyk7XG4gICAgICAgIC8vICB0aGlzLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICAgYnJlYWs7ICAgICAgICAgXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICB9XG4gICAgXG4gIH1cbiAgY2xlYXJXaWRnZXQoKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnc3RyZWV0IG51bWJlcjo6IGNsZWFyV2lkZ2V0Jyk7IH1cbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAvLyBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpjbGVhcldpZGdldCcsIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUpO1xuICAgIHRoaXMuY2xlYXJTZWFyY2hUZXh0KCk7XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIHRoaXMucHJlZmlsbERhdGEgPSBudWxsO1xuXG4gICAgLy8gdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gIH1cblxuICBjbGVhclNlYXJjaFRleHQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gIH1cblxuICB0eXBlQWhlYWRJc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLmJwVHlwZUFoZWFkICYmIHRoaXMuYnBUeXBlQWhlYWQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG5cbiAgbW92ZUFycm93U2VsZWN0ZWRJbmRleERvd24oKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCArIDEgIT09IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXgrKztcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZEluZGV4LCB0aGlzLnNlbGVjdGVkSW5kZXggLSAxKTtcbiAgICB9XG4gIH1cblxuICBtb3ZlQXJyb3dTZWxlY3RlZEluZGV4VXAoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCAtIDEgIT09IC0yKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXgtLTtcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZEluZGV4LCB0aGlzLnNlbGVjdGVkSW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICBjdXJzb3JJc09uU3VnZ2VzdGlvbkxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJbmRleCA+PSAwO1xuICB9XG5cbiAgc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbihuZXdWYWwsIG9sZFZhbCkge1xuICAgIGlmIChuZXdWYWwgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuZXdWYWwgIT09IC0xKSB7XG4gICAgICBpZiAob2xkVmFsID09PSAtMSkge1xuICAgICAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoVGV4dDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dCh0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0uc3RyaW5nKTtcbiAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHRoaXMubGFzdFNlYXJjaFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtYXlTaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoVGV4dCAmJiB0aGlzLnNlYXJjaFRleHQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIG9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmb2N1czogYm9vbGVhbiwgZW1pdDogYm9vbGVhbiA9IHRydWUpIHtcblxuICAgIC8vIGNvbnNvbGUud2Fybignc3RyZWV0IG51bWJlciA6OiBjbGVhcklucHV0Jyk7XG4gICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICB0aGlzLnByZXZpb3VzSW5kZXggPSAtMTtcbiAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9ICcnO1xuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIHRoaXMuY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgaWYgKGZvY3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnN0cmVldE51bWJlclNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLy8gdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KG51bGwpO1xuICAgIGlmIChlbWl0KSB7XG4gICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoLyonU1RSRUVUX05VTUJFUicqLyBJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpO1xuICAgICAgLy8gIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KC8qJ0JPWF9OVU1CRVInKi8gSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICB9XG4gIH1cbiAgLypcbiAgY2xlYXJJbnB1dChmb2N1cz8pIHtcbiAgICBjb25zb2xlLndhcm4oJ3N0cmVldCBudW1iZXIgOjogY2xlYXJJbnB1dCcpO1xuICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgdGhpcy5wcmV2aW91c0luZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSAnJztcbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLmNsZWFyQ29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgIGlmIChmb2N1cykge1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChudWxsKTtcbiAgfVxuICAqL1xuXG4gIGNsZWFyU3VnZ2VzdGlvbnMoKSB7XG4gICAgdGhpcy53b3JkTGlzdCA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zV29yZExpc3QgPSBbXTtcbiAgfVxuXG4gIGNsZWFyVHlwZUFoZWFkKCkge1xuICAgIHRoaXMuYnBUeXBlQWhlYWQgPSAnJztcbiAgfVxuXG4gIGNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCkge1xuICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSBmYWxzZTtcbiAgICAvLyB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQodGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdCh7bWVzc2FnZVR5cGU6IG51bGwsIHRyYW5zbGF0ZWRNZXNzYWdlOiB0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZX0pO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlQ29kZSA9IG51bGw7XG4gIH1cblxuICBzZXRTZWFyY2hUZXh0KHZhbHVlKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWU7XG4gIH1cblxuICBzZWxlY3RGaXJzdEluTGlzdE9mU3VnZ2VzaW9ucygpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwO1xuICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5zZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRJbmRleCwgdGhpcy5zZWxlY3RlZEluZGV4IC0gMSk7XG4gIH1cblxuICBjaGFuZ2VTZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzdWdnZXN0aW9uTW91c2VMZWF2ZSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgfVxuXG4gIHNob3dBZGRyZXNzTm90Rm91bmRNZXNzYWdlKCkge1xuICAgIC8vIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2UoJ2FkZHJlc3Mtbm90LWZvdW5kJyk7XG4gICAgdGhpcy5lbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX05vdF9Gb3VuZCk7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIHJldHVybiAodGhpcy5sb2NhbGl0eSA9PT0gJycgfHwgdGhpcy5wb3N0YWxDb2RlID09PSAnJyB8fCB0aGlzLm1pbkxldmVsID4gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIpO1xuICB9XG5cbiAgb25JbnB1dENsaWNrKCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ3N0cmVldCBudW1iZXIgY2xpY2snKTsgfVxuICB9XG5cbn1cbiIsIjxzcGFuICpuZ0lmPVwibGFiZWxSZXNvdXJjZUtleVwiPnt7IGxhYmVsUmVzb3VyY2VLZXkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbjxkaXYgY2xhc3M9XCJicGFhYy1kcm9wZG93blwiPlxuICAgIDxkaXYgY2xhc3M9XCJicGFhYy1zZWFyY2gtYmFyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJicGFhYy1pbnB1dC13aWR0aFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiIC0tPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgI3N0cmVldE51bWJlclNlYXJjaElucHV0IGNsYXNzPVwiYnBhYWMtaW5wdXRcIiBcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgIChrZXl1cCkgPSAoY2hlY2tLZXlVUCgkZXZlbnQpKVxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIiFpc1BhcmFtc0NvbXBsZXRlKCkgPyAnbGlnaHRncmV5JyA6ICcnXCIgXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIiBnZXRUZXh0Q29sb3IoKSBcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc3RyZWV0TmFtZSB8fCBzdHJlZXROYW1lLnRyaW0oKS5sZW5ndGggPT09IDBcIiAoa2V5ZG93bik9XCJjaGVja0tleURvd24oJGV2ZW50KVwiIFxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKClcIiAoY2xpY2spPVwib25JbnB1dENsaWNrKClcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIGlkPVwic3RyZWV0TnVtYmVySW5wdXRGaWVsZFwiIFxuICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cInBsYWNlSG9sZGVyVGV4dFwiIFxuICAgICAgICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyVGV4dFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIiAoZm9jdXMpPVwib25Gb2N1cygpXCIgLz5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJicGFhYy1jbGVhci1zdHJlZXROYi1idXR0b25cIiAqbmdJZj1cIm1heVNob3dDbGVhckJ1dHRvbigpXCIgXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dCh0cnVlKVwiIGNsYXNzPVwiYnBhYWMtY2xlYXJcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLTxkaXYgbmctdHJhbnNjbHVkZT48L2Rpdj4tLT5cbiAgICAgICAgPGlucHV0IGlkPVwiYnBhYWMtc3RyZWV0TmItdHlwZWFoZWFkXCIgdHlwZT1cInRleHRcIiBkaXNhYmxlZCBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cImJwVHlwZUFoZWFkXCIgLz5cbiA8IS0tICAgICAgICA8c3Bhbj5hZGRyZXNzSXNDb21wbGV0ZToge3sgYWRkcmVzc0lzQ29tcGxldGUgfX0uIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4+YWRkcmVzc0lzVmFsaWRhdGVkOiB7eyBhZGRyZXNzSXNWYWxpZGF0ZWQgfX0uIDwvc3Bhbj4gLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiYWRkcmVzc0lzQ29tcGxldGVcIiBjbGFzcz1cInN0cmVldE5iQ2hla21hcmtcIj48c3BhbiBjbGFzcz1cImNoZWNrbWFya1wiPjwvc3Bhbj48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBbaGlkZGVuXT1cImNvbGxhcHNlRHJvcGRvd25cIiBjbGFzcz1cImJwYWFjLWRyb3Bkb3duLW1lbnUtY29udGFpbmVyXCIgXG4gICAgICAgICpuZ0lmPVwiKHN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyIHx8IHN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0QW5kQm94TnVtYmVyKSAmJiBzdWdnZXN0aW9ucyAmJiBzdWdnZXN0aW9ucy5sZW5ndGg+MFwiPlxuICAgICAgICA8ZGl2ICNzdHJlZXROdW1iZXJMaXN0IFthcHBWaXNpYmxlU3VnZ2VzdGlvbl09XCJ2aXNpYmxlU3VnZ2VzaW9uQ291bnRcIiBcbiAgICAgICAgICAgIGlkPVwiYnBhYWMtc3RyZWV0bnVtYmVyLWRyb3Bkb3duXCIgY2xhc3M9XCJicGFhYy1kcm9wZG93bi1tZW51XCI+XG4gICAgICAgICAgICA8dWwgcm9sZT1cImxpc3Rib3hcIiBpZD1cImJwYWFjLXN0cmVldE5iLXN1Z2dlc3Rpb25zTGlzdFwiIGNsYXNzPVwibGlzdC11bnN0eWxlZFwiPlxuICAgICAgICAgICAgICAgIDxsaSByb2xlPVwib3B0aW9uXCIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzdWdnZXN0aW9uczsgbGV0IGlkeCA9IGluZGV4XCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOihzZWxlY3RlZEluZGV4PT1pZHgpfVwiIChtb3VzZWRvd24pPVwiY2xpY2tTdWdnZXN0aW9uKCRldmVudCwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2VsZWN0ZWRJbmRleD1pZHhcIiAobW91c2VsZWF2ZSk9XCJzZWxlY3RlZEluZGV4PS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib3B0aW9uXCIgW2lubmVySHRtbF09XCJvcHRpb25bJ25vdC1pbi1saXN0J10gPyBlbXB0eVJlc3BvbnNlVGV4dCA6IG9wdGlvbi5zdHJpbmcgfCBoaWdobGlnaHRTdWdnZXN0aW9uIDogd29yZExpc3RcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
1139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWV0LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvc3RyZWV0LW51bWJlci9zdHJlZXQtbnVtYmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQvc3JjL2xpYi9zdHJlZXQtbnVtYmVyL3N0cmVldC1udW1iZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEQsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUc3SixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUs3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7OztBQVF6RSxNQUFNLE9BQU8scUJBQXFCO0lBb0doQyxZQUNVLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxjQUE4QjtRQUg5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7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bEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUdQLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFFRyx5QkFBeUI7c0JBQWxDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFByZWZpbGxlZFBhcmFtZXRlcnMgfSBmcm9tICcuLi91dGlscy9wcmVmaWxsZWQtcGFyYW1ldGVycyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZVR5cGUgfSBmcm9tICcuLi9lbnVtL3ZhbGlkYXRpb24tbWVzc2FnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgQWRkcmVzc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hZHJlc3Muc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVW5pY29kZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91bmljb2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRG9tSGFuZGxlciB9IGZyb20gJy4uL3V0aWxzL2RvbWhhbmRsZXInO1xuaW1wb3J0IHsgQUREUkVTU0xFVkVMIH0gZnJvbSAnLi4vZW51bS9hZGRyZXNzLWxldmVsLmVudW0nO1xuaW1wb3J0IHsgUXVlcnlQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vbW9kZWwvcXVlcnktcGFyYW1ldGVycy5tb2RlbCc7XG5pbXBvcnQgeyBQcmVmaWxsRGF0YSB9IGZyb20gJy4uL3V0aWxzL3ByZWZpbGwtZGF0YSc7XG5pbXBvcnQgeyBTb3VyY2VUeXBlIH0gZnJvbSAnLi4vZW51bS9zb3VyY2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IFByZWZpbGxFdmVudCB9IGZyb20gJy4uL3V0aWxzL3ByZWZsbGwuZXZlbnQnO1xuaW1wb3J0IHsgSW5wdXROYW1lVHlwZSB9IGZyb20gJy4uL2VudW0vaW5wdXQtbmFtZS5lbnVtJztcbmltcG9ydCB7IFN1Z2dlc3Rpb25MZXZlbFR5cGUgfSBmcm9tICcuLi9lbnVtL3N1Z2dlc3Rpb24tbGV2ZWwtdHlwZS5lbnVtJztcbmltcG9ydCB7IEF1dG9maWxsRGF0YSB9IGZyb20gJy4uL3V0aWxzL2F1dG9maWxsLWRhdGEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicC1zdHJlZXQtbnVtYmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0cmVldC1udW1iZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdHJlZXQtbnVtYmVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3RyZWV0TnVtYmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cblxuICBAVmlld0NoaWxkKCdzdHJlZXROdW1iZXJTZWFyY2hJbnB1dCcsIHtzdGF0aWM6IGZhbHNlfSApIHN0cmVldE51bWJlclNlYXJjaElucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdHJlZXROdW1iZXJMaXN0Jywge3N0YXRpYzogZmFsc2V9ICkgc3RyZWV0TnVtYmVyTGlzdDogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIDIwMjAtMDYtMTVcbiAgLyogICBASW5wdXQoKVxuICBvbkZvY3VzU2hvd1N1Z2dlc3Rpb25zQWZ0ZXJQcmVmaWxsID0gdHJ1ZTsgKi9cbiAgQElucHV0KCkgcHJlZmlsbERhdGE6IFByZWZpbGxEYXRhO1xuICBASW5wdXQoKSBhdXRvZmlsbERhdGE6IEF1dG9maWxsRGF0YTtcbiAgQElucHV0KCkgc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSA9IHRydWU7XG5cbiAgQElucHV0KCkgbGFiZWxSZXNvdXJjZUtleSA9ICdjb21tb24ubGFiZWwuc3RyZWV0TnVtYmVyJztcbiAgQElucHV0KCkgbWF4U3VnZ2VzaW9uQ291bnQgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzaW9uQ291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWEgPSAnJztcbiAgQElucHV0KCkgYmFzZVVybDogc3RyaW5nO1xuICBASW5wdXQoKSBhZGRyZXNzUGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBASW5wdXQoKSBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxvY2FsaXR5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0cmVldE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgbm90SW5MaXN0QWxsb3dlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgc2VsZWN0ZWRBZGRyZXNzO1xuICBASW5wdXQoKSBhbGxvd05vVmFsaWRhdGlvbjogYm9vbGVhblxuICBASW5wdXQoKSB2YWxpZGF0ZWRCeUJhY2tlbmQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG51bWJlck9mRXhjZXB0aW9uczogbnVtYmVyO1xuICBASW5wdXQoKSBuaXM5SW5SZXNwb25zZTogYm9vbGVhblxuICBASW5wdXQoKSBidXNpbmVzc05hbWVJblJlc3BvbnNlOiBib29sZWFuXG4gIEBJbnB1dCgpIGluY2x1ZGVMaXN0T2ZCb3hlczogYm9vbGVhblxuICBASW5wdXQoKSBpbmNsdWRlTGlzdE9mQnVzaW5lc3NOYW1lV2l0aEJveGVzIDogYm9vbGVhblxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IGlucHV0TGFuZyh2YWw6IHN0cmluZykge1xuICAgIHRoaXMubG9jYWxlU2VydmljZS5jaGFuZ2VMYW5nKHZhbCk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZSh2YWwpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZExhbmd1YWdlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBASW5wdXQoKSBtZXNzYWdlT3B0aW9uID0gJ1knO1xuICBASW5wdXQoKSBpbnB1dFRleHQ6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBpc1JlYWRvbmx5PWZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHN1Z2dlc3Rpb25MZXZlbDogU3VnZ2VzdGlvbkxldmVsVHlwZTtcblxuICBAT3V0cHV0KCkgbWVzc2FnZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjx7bWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZ30+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYWRkcmVzc0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBibHVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdGV4dENoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGVtcHR5UmVzcG9uc2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblxuICBAT3V0cHV0KCkgY2xlYXJJbnB1dEV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHByZWZpbGxFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxQcmVmaWxsRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQcmVmaWxsRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHN0cmVldE51bWJlckNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuXG4gIGFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICBhZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICBzdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbiAgc3VnZ2VzdGlvbnM6IGFueTtcbiAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICBsYXN0U2VhcmNoVmFsdWU6IHN0cmluZztcbiAgd29yZExpc3Q6IGFueTtcbiAgc3VnZ2VzdGlvbnNXb3JkTGlzdDogYW55O1xuICBicFR5cGVBaGVhZDogc3RyaW5nO1xuICBwbGFjZUhvbGRlclRleHQ6IHN0cmluZztcbiAgc2tpcE5leHRCbHVyOiBib29sZWFuOyAvLyBPbkJsdXIgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHN1Z2dlc3Rpb24vdmFsaWRhdG9yIGJ1dHRvblxuICBlcnJvckNvZGU6IGFueTtcblxuICBtaW5MZXZlbDogbnVtYmVyO1xuICBzZWxlY3RlZEluZGV4OiBudW1iZXI7XG4gIGNvbGxhcHNlRHJvcGRvd246IGJvb2xlYW47XG4gIHR5cGVBaGVhZFdvcmQ6IHN0cmluZztcbiAgc2VxdWVuY2VOdW1iZXI6IG51bWJlcjtcbiAgY29uc3VtZWROdW1iZXI6IG51bWJlcjtcbiAgc2VsZWN0aW9uQ2hhbmdlZDogYm9vbGVhbjtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gbnVsbDtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgZW1wdHlSZXNwb25zZVRleHQ6IHN0cmluZztcbiAgZW1wdHlSZXNwb25zZTogYm9vbGVhbjtcblxuICBwcmVmaWxsaW5nID0gZmFsc2U7XG4gIGlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG5cbiAgU3VnZ2VzdGlvbkxldmVsVHlwZT1TdWdnZXN0aW9uTGV2ZWxUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWRkcmVzc1NlcnZpY2U6IEFkZHJlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1bmljb2RlU2VydmljZTogVW5pY29kZVNlcnZpY2UsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgLy8gaW5zdGFuY2UgcHJvcGVydGllc1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMucHJldmlvdXNJbmRleCA9IC0xO1xuICAgIHRoaXMubGFzdFNlYXJjaFZhbHVlID0gJyc7XG4gICAgdGhpcy53b3JkTGlzdCA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNXb3JkTGlzdCA9IFtdO1xuICAgIHRoaXMuYnBUeXBlQWhlYWQgPSAnJztcbiAgICB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9ICcnO1xuICAgIHRoaXMuc2tpcE5leHRCbHVyID0gZmFsc2U7IC8vIE9uQmx1ciBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgc3VnZ2VzdGlvbi92YWxpZGF0b3IgYnV0dG9uXG4gICAgdGhpcy5lcnJvckNvZGUgPSBudWxsO1xuICAgIC8vIHNjb3BlIHByb3BlcnRpZXNcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAvLyBwcm9wZXJ0aWVzXG4gICAgdGhpcy50eXBlQWhlYWRXb3JkID0gJyc7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyID0gMTtcbiAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gMTtcbiAgICAvLyBpbml0aWFsaXphdGlvblxuICAgIHRoaXMuc2V0U2VhcmNoVGV4dCgnJyk7XG4gICAgLy8gdGhpcy5zZXRQbGFjZUhvbGRlclRleHQoKTtcbiAgICB0aGlzLnNldEVtcHR5UmVzcG9uc2VUZXh0KCk7XG4gICAgdGhpcy5lbXB0eVJlc3BvbnNlID0gdHJ1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlZExhbmd1YWdlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cblxuICBvbkNoYW5nZWRMYW5ndWFnZSgpIHtcbiAgICAvLyB0aGlzLnBsYWNlSG9sZGVyVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdzdHJlZXROdW1iZXIucGxhY2Vob2xkZXIuaW5wdXQtcGxhY2Vob2xkZXInKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdzdHJlZXROdW1iZXIucGxhY2Vob2xkZXIuaW5wdXQtcGxhY2Vob2xkZXInKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ25ldyBwbGFjZWhvbGRlcicsIHJlcyk7XG4gICAgICAgIC8vID0+ICdoZWxsbyB3b3JsZCdcbiAgICAgICAgdGhpcy5wbGFjZUhvbGRlclRleHQgPSByZXM7XG4gICAgICAgIHRoaXMuc2V0RW1wdHlSZXNwb25zZVRleHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkKSB7XG4gICAgICBjb25zdCBvdmVybGF5OiBIVE1MRGl2RWxlbWVudCA9IHRoaXMuc3RyZWV0TnVtYmVyTGlzdC5uYXRpdmVFbGVtZW50O1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3RJdGVtID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKG92ZXJsYXksICdsaS5hY3RpdmUnKTtcbiAgICAgICAgaWYgKGxpc3RJdGVtKSB7XG4gICAgICAgICAgRG9tSGFuZGxlci5zY3JvbGxJblZpZXcob3ZlcmxheSwgbGlzdEl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9LCAxKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcykge1xuICAgICAgaWYoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYXV0b2ZpbGxEYXRhJykgJiYgY2hhbmdlcy5hdXRvZmlsbERhdGEuY3VycmVudFZhbHVlICE9PSBudWxsICYmIGNoYW5nZXMuYXV0b2ZpbGxEYXRhLmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0PXRoaXMubG9hZEF1dG9GaWxsUGFyYW1zKGNoYW5nZXMuYXV0b2ZpbGxEYXRhLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRBZGRyZXNzKHRoaXMuYXV0b2ZpbGxEYXRhLnNlbGVjdGVkQWRkcmVzcyk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3N0cmVldE5hbWUnKVxuICAgICAgICAgICYmICFjaGFuZ2VzLnN0cmVldE5hbWUuZmlyc3RDaGFuZ2VcbiAgICAgICAgICAmJiAhY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgncHJlZmlsbERhdGEnKSAmJiAhIHRoaXMucHJlZmlsbGluZyApIHtcbiAgICAgICAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUjtcbiAgICAgICAgLy8gdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3N0cmVldCBuYW1lIC0gbmdPbmNoYW5nZXMgLSBzdHJlZXROYW1lIGNoYW5nZXMgZGV0ZWN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zdHJlZXROYW1lLmN1cnJlbnRWYWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnaW5wdXRUZXh0JykgJiYgIWNoYW5nZXMuaW5wdXRUZXh0LmZpcnN0Q2hhbmdlICYmICEgdGhpcy5wcmVmaWxsaW5nICkge1xuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdzdHJlZXQgbnVtYmVyIC0gbmdPbmNoYW5nZXMgLSBpbnB1dFRleHQgY2hhbmdlcyBkZXRlY3Rpb24nLCB0aGlzLnNlYXJjaFRleHQsIGNoYW5nZXMuaW5wdXRUZXh0LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubm90RXF1YWxJZ25vcmVDYXNlKHRoaXMuc2VhcmNoVGV4dCwgY2hhbmdlcy5pbnB1dFRleHQuY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybignc3RyZWV0IG51bWJlciAtIG5nT25jaGFuZ2VzIC0gaW5wdXRUZXh0IGNoYW5nZXMgZGV0ZWN0aW9uIC0+IGNhbGxpbmcgY2xlYXJXaWRnZXQoKSAhJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBjaGFuZ2VzLmlucHV0VGV4dC5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdwcmVmaWxsRGF0YScpICYmICFjaGFuZ2VzLnByZWZpbGxEYXRhLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3N0cmVldE51bWJlcjo6bmdPbkNoYW5nZXMnLCB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSB0aGlzLmxvYWRQYXJhbXMoY2hhbmdlcy5wcmVmaWxsRGF0YS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgIT09ICcnICYmIHRoaXMubWluTGV2ZWwgPT09IEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKSB7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKC8qJ3ByZWZpbGxlZCcqIC8gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKTtcbiAgICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyU2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclxuICAgICAgICAgICAgID0gdGhpcy50cmFuc2Zvcm1TdHJlZXROdW1iZXJJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXIpO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKC8qJ3ByZWZpbGxlZCcqLyBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQgKTtcbiAgICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXI6Om5nT25DaGFuZ2VzIC0tIGFmdGVyIGNhbGN1bGF0aW9ucycsIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUpO1xuICAgICAgICB9IFxuICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtU3RyZWV0TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyhzdHJlZXROdW1iZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcbiAgICBpZiAoc3RyZWV0TnVtYmVyICE9PSBudWxsICYmIHN0cmVldE51bWJlciAhPT0gdW5kZWZpbmVkIClcbiAgICB7XG4gICAgICByZXN1bHQgPSB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3Moc3RyZWV0TnVtYmVyKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnVHJhbnNmb3JtZWQgc3RyZWV0IG51bWJlcjonLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBub3RFcXVhbElnbm9yZUNhc2Uob2xkVmFsOiBzdHJpbmcsIG5ld1ZhbDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG9sZFZhbC50b0xvd2VyQ2FzZSgpICE9PSBuZXdWYWwudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHNldEVtcHR5UmVzcG9uc2VUZXh0KCkge1xuICAgIHRoaXMuZW1wdHlSZXNwb25zZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnc3RyZWV0TnVtYmVyLm1lc3NhZ2Uubm90LWluLWxpc3QnKTtcbiAgfVxuXG4gIC8qXG4gIG9uQ2xlYXJJbnB1dEV2ZW50KGV2ZW50LCBmb2N1cykge1xuICAgIHRoaXMuY2xlYXJJbnB1dChmb2N1cyk7XG4gIH1cbiAgKi9cblxuICAvKlxuICByZXRyYW5zbGF0ZSgpIHtcbiAgICB0aGlzLnNldFBsYWNlSG9sZGVyVGV4dCgpO1xuICAgIHRoaXMuc2V0RW1wdHlSZXNwb25zZVRleHQoKTtcbiAgICBpZiAodGhpcy5lcnJvckNvZGUpIHtcbiAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2UodGhpcy5lcnJvckNvZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy52YWxpZGF0aW9uTWVzc2FnZUNvZGUpIHtcbiAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSh0aGlzLnZhbGlkYXRpb25NZXNzYWdlQ29kZSwgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAqL1xuXG4gIG9uQmx1cihldikge1xuICAgIGlmICh0aGlzLmlzQnJvd3NlcklFKCkgJiYgdGhpcy5pc0Ryb3Bkb3duQ2xpY2tlZChldikpIHtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyU2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5za2lwTmV4dEJsdXIpIHtcbiAgICAgIHRoaXMuc2tpcE5leHRCbHVyID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgICB0aGlzLmJsdXJFdmVudC5lbWl0KEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICB9XG4gIH1cblxuICBpc0Jyb3dzZXJJRSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL21zaWVcXHN8dHJpZGVudFxcL3xlZGdlXFwvL2kudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIH1cblxuICBpc0Ryb3Bkb3duQ2xpY2tlZChldikge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2LmV4cGxpY2l0T3JpZ2luYWxUYXJnZXQgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gKHRhcmdldC5pZCA9PT0gJ2JwYWFjLXN0cmVldG51bWJlci1kcm9wZG93bicpO1xuICB9XG5cbiAgb25Gb2N1cygpIHtcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSBmYWxzZTtcbiAgICAvLyB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSAodGhpcy5wcmVmaWxsaW5nID09PSB0cnVlICYmIHRoaXMucHJlZmlsbERhdGEgIT09IG51bGwpXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgPyAhdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgOiBmYWxzZTtcbiAgICAvLyB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNraXBOZXh0Qmx1ciA9IGZhbHNlO1xuICAgIHRoaXMuZm9jdXNFdmVudC5lbWl0KEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgfVxuXG4gIHZhbHVlQ2hhbmdlZCgpIHtcbiAgICAvLyBjb25zb2xlLndhcm4oJ3N0cmVldC1udW1iZXI6OnZhbHVlQ2hhbmdlZCBESVNBQkxFRCcpO1xuICAgIHRoaXMudGV4dENoYW5nZUV2ZW50LmVtaXQodGhpcy5zZWFyY2hUZXh0KTtcbiAgfVxuXG4gIG1heVNob3dEcm9wZG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwICYmICF0aGlzLmNvbGxhcHNlRHJvcGRvd247XG4gIH1cblxuICBidWlsZElucHV0V29yZExpc3QoKSB7XG4gICAgdGhpcy53b3JkTGlzdCA9IHRoaXMuc2VhcmNoVGV4dC5zcGxpdCgvW1xccywgXSsvKTtcbiAgfVxuXG4gIG1heUFkZFR5cGVBaGVhZCgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKC9bXlxccywgXFxcXFxcL10kLykudGVzdCh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgYnVpbGRUeXBlQWhlYWQoc291cmNlOiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICghdGhpcy5tYXlBZGRUeXBlQWhlYWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hUZXh0V29yZHMgPSB0aGlzLnNlYXJjaFRleHQuc3BsaXQoL1tcXHMsIF0rLyk7XG4gICAgY29uc3QgbGFzdFdvcmQgPSBzZWFyY2hUZXh0V29yZHNbc2VhcmNoVGV4dFdvcmRzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMuc29tZShmdW5jdGlvbihzdWcpIHtcbiAgICAgIGlmICghc3VnIHx8ICFzdWcuaGFzT3duUHJvcGVydHkoJ3N0cmluZycpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWcuc3RyaW5nLnNwbGl0KC9bXFxzLV0rLykuc29tZShmdW5jdGlvbih3b3JkKSB7XG4gICAgICAgIGlmICh0aGlzLnN0cmluZ1N0YXJ0c1dpdGhJZ25vcmVEaWFjcml0aWNzKHdvcmQsIGxhc3RXb3JkKSkge1xuICAgICAgICAgIHRoaXMudHlwZUFoZWFkV29yZCA9IHdvcmQ7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfS5iaW5kKHRoaXMpKSkge1xuICAgICAgY29uc3QgYXBwZW5kaXggPSB0aGlzLnR5cGVBaGVhZFdvcmQuc2xpY2UobGFzdFdvcmQubGVuZ3RoLCB0aGlzLnR5cGVBaGVhZFdvcmQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdGhpcy5icFR5cGVBaGVhZCA9IHRoaXMuc2VhcmNoVGV4dCArIGFwcGVuZGl4O1xuICAgIH1cbiAgfVxuXG4gIHN0cmluZ1N0YXJ0c1dpdGhJZ25vcmVEaWFjcml0aWNzKHZhbHVlLCBwcmVmaXgpIHtcbiAgICB2YWx1ZSA9ICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbiAgICBwcmVmaXggPSAocHJlZml4ICE9PSBudWxsICYmIHByZWZpeCAhPT0gdW5kZWZpbmVkKSA/IHByZWZpeC50b0xvd2VyQ2FzZSgpIDogcHJlZml4O1xuICAgIHJldHVybiB0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3ModmFsdWUpLnNsaWNlKDAsIHByZWZpeC5sZW5ndGgpXG4gICAgICAudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcyhwcmVmaXgpKSAhPT0gLTE7XG4gIH1cblxuICBnZXRCYWNrZ3JvdW5kQ29sb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gIXRoaXMuaXNQYXJhbXNDb21wbGV0ZSgpID8gJ2xpZ2h0Z3JleScgOiAnJztcbiAgfVxuXG4gIGdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICB0aGlzLnNlcXVlbmNlTnVtYmVyICs9IDE7XG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLmdlbmVyYXRlUGFyYW1ldGVycygpO1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ1NUUkVFVC1OVU1CRVIgY2FsbGluZyBzZXJ2aWNlIHBhcmFtcycsIHBhcmFtKTsgfVxuICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5hZGRyZXNzU2VydmljZS5nZXRTdHJlZXQodGhpcy5iYXNlVXJsLCB0aGlzLmxvY2FsaXR5LCB0aGlzLnBvc3RhbENvZGUsIHBhcmFtKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ1NUUkVFVC1OVU1CRVIgc2VydmljZSByZXNwb25zZScsIHJlc3BvbnNlKTsgfVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVHZXRTdHJlZXRSZXNwb25zZShyZXNwb25zZSwgc291cmNlKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdzdHJlZXQgbnVtYmVyIHNlcnZpY2UgcmVzcG9uc2UnLCByZXNwb25zZSwgc291cmNlKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaEZvdW5kICE9PSB0cnVlIClcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAvLyB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5wcmVmaWxsQW5hbHl6ZURhdGEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAsXG4gICAgICAgICAgKCkgPT4gdGhpcy5oYW5kbGVHZXRTdHJlZXRFcnJvcihzb3VyY2UpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldFRleHRDb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAoIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPT09IHRydWUgKSA/ICdvcmFuZ2VyZWQnIDogJyc7XG4gIH1cblxuICBwcmVmaWxsQW5hbHl6ZURhdGEoKVxuICB7XG4gICAgaWYgKHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMucHJlZmlsbEV2ZW50RW1pdHRlci5lbWl0KG5ldyBQcmVmaWxsRXZlbnQoQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVIsIHRoaXMucHJlZmlsbERhdGEpICk7XG4gIH1cblxuICBsb2FkUGFyYW1zKHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSkge1xuICAgIGxldCBjb25jYXRTdHIgPSAnJztcbiAgICBpZiAocHJlZmlsbERhdGEgIT09IG51bGwgJiYgcHJlZmlsbERhdGEucGFyYW1ldGVycyAhPT0gbnVsbClcbiAgICB7XG4gICAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdtaW5MZXZlbCcpKSB7XG4gICAgICAgICAgdGhpcy5taW5MZXZlbCA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubWluTGV2ZWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ3Bvc3RhbENvZGUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSkpIHtcbiAgICAgICAgICB0aGlzLnBvc3RhbENvZGUgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ211bmljaXBhbGl0eU5hbWUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSkpIHtcbiAgICAgICAgICB0aGlzLmxvY2FsaXR5ID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdzdHJlZXROYW1lJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWUpKSB7XG4gICAgICAgICAgdGhpcy5zdHJlZXROYW1lID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdzdHJlZXROdW1iZXInKVxuICAgICAgICAgICAgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcikgJiYgdGhpcy5pc1BhcmFtc0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICBjb25jYXRTdHIgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uY2F0U3RyO1xuICB9XG5cbiAgIGxvYWRBdXRvRmlsbFBhcmFtcyhhdXRvRmlsbERhdGE6IEF1dG9maWxsRGF0YSkge1xuICAgIGxldCBjb25jYXRTdHIgPSAnJztcbiAgICBpZiAoYXV0b0ZpbGxEYXRhICE9PSBudWxsKVxuICAgIHtcbiAgICAgICAgaWYgKGF1dG9GaWxsRGF0YS5oYXNPd25Qcm9wZXJ0eSgncG9zdGFsQ29kZScpICYmIHRoaXMuaXNTdHJpbmcoYXV0b0ZpbGxEYXRhLnBvc3RhbENvZGUpKSB7XG4gICAgICAgICAgdGhpcy5wb3N0YWxDb2RlID0gYXV0b0ZpbGxEYXRhLnBvc3RhbENvZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF1dG9GaWxsRGF0YS5oYXNPd25Qcm9wZXJ0eSgnbXVuaWNpcGFsaXR5TmFtZScpICYmIHRoaXMuaXNTdHJpbmcoYXV0b0ZpbGxEYXRhLm11bmljaXBhbGl0eU5hbWUpKSB7XG4gICAgICAgICAgdGhpcy5sb2NhbGl0eSA9IGF1dG9GaWxsRGF0YS5tdW5pY2lwYWxpdHlOYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRvRmlsbERhdGEuaGFzT3duUHJvcGVydHkoJ3N0cmVldE5hbWUnKSAmJiB0aGlzLmlzU3RyaW5nKGF1dG9GaWxsRGF0YS5zdHJlZXROYW1lKSkge1xuICAgICAgICAgIHRoaXMuc3RyZWV0TmFtZSA9IGF1dG9GaWxsRGF0YS5zdHJlZXROYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRvRmlsbERhdGEuaGFzT3duUHJvcGVydHkoJ3N0cmVldE51bWJlcicpXG4gICAgICAgICAgICAmJiB0aGlzLmlzU3RyaW5nKGF1dG9GaWxsRGF0YS5zdHJlZXROdW1iZXIpKSB7XG4gICAgICAgICAgY29uY2F0U3RyID0gYXV0b0ZpbGxEYXRhLnN0cmVldE51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBpZihhdXRvRmlsbERhdGEuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGVTdHJlZXROdW1iZXInKSl7XG4gICAgICAgIHRoaXMuYWRkcmVzc0lzQ29tcGxldGU9dGhpcy5hdXRvZmlsbERhdGEuaXNDb21wbGV0ZVN0cmVldE51bWJlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uY2F0U3RyO1xuICB9XG5cbiAgaXNTdHJpbmcodmFsKTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsLmNvbnN0cnVjdG9yID09PSBTdHJpbmc7XG4gIH1cblxuICBpc1ZhbGlkKHZhbCkge1xuICAgIHJldHVybiB0aGlzLmlzU3RyaW5nKHZhbCkgJiYgdmFsICE9PSAnJztcbiAgfVxuXG4gIGlzUGFyYW1zQ29tcGxldGUoKTogYm9vbGVhbiB7XG4vKiAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgY29uc29sZS5sb2coJ3N0cmVldC1udW1iZXI6OmlzUGFyYW1zQ29tcGxldGUnLCB0aGlzLnBvc3RhbENvZGUsIHRoaXMubG9jYWxpdHksIHRoaXMuc3RyZWV0TmFtZSk7XG4gICAgfSAqL1xuICAgIGlmKCF0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCl7XG4gICAgICByZXR1cm4gKHRoaXMuaXNWYWxpZCh0aGlzLnBvc3RhbENvZGUpIHx8IHRoaXMuaXNWYWxpZCh0aGlzLmxvY2FsaXR5KSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMuc3RyZWV0TmFtZSlcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQodGhpcy5wb3N0YWxDb2RlKSAmJiB0aGlzLmlzVmFsaWQodGhpcy5sb2NhbGl0eSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMuc3RyZWV0TmFtZSk7XG4gICAgfVxuICAgIH1cblxuICBnZW5lcmF0ZVBhcmFtZXRlcnMoKTogUXVlcnlQYXJhbWV0ZXJzIHtcbiAgICBjb25zdCBwYXJhbSA9IG5ldyBRdWVyeVBhcmFtZXRlcnMoe1xuICAgICAgaWQ6IHRoaXMuc2VxdWVuY2VOdW1iZXIsXG4gICAgICBxOiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICBwb3N0YWxDb2RlOiB0aGlzLnBvc3RhbENvZGUsXG4gICAgICBsb2NhbGl0eTogdGhpcy5sb2NhbGl0eSxcbiAgICAgIHN0cmVldDogdGhpcy5zdHJlZXROYW1lLFxuICAgICAgbWF4TnVtYmVyT2ZTdWdnZXN0aW9uczogdGhpcy5tYXhTdWdnZXNpb25Db3VudFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc29ydENyaXRlcmlhID09PSAnUycpIHtcbiAgICAgIHBhcmFtLnNvcnRCeVN0cmVldE5iKHRydWUpO1xuICAgIH1cblxuICAgIGlmKHRoaXMubmlzOUluUmVzcG9uc2Upe1xuICAgICAgcGFyYW0uc2V0SW5jbHVkZU5pc0NvZGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5idXNpbmVzc05hbWVJblJlc3BvbnNlKXtcbiAgICAgIHBhcmFtLnNldEluY2x1ZGVCdXNpbmVzc05hbWUodHJ1ZSk7XG4gICAgfVxuXHRcblx0aWYodGhpcy5pbmNsdWRlTGlzdE9mQm94ZXMpe1xuICAgICAgcGFyYW0uc2V0SW5jbHVkZUxpc3RPZkJveGVzKHRydWUpO1xuICAgIH1cbiAgICBpZih0aGlzLmluY2x1ZGVMaXN0T2ZCdXNpbmVzc05hbWVXaXRoQm94ZXMpe1xuICAgICAgcGFyYW0uc2V0SW5jbHVkZUxpc3RPZkJ1c2luZXNzTmFtZVdpdGhCb3hlcyh0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtO1xuICB9XG5cbiAgaGFuZGxlR2V0U3RyZWV0UmVzcG9uc2UoZGF0YTogYW55LCBzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5yZXNwb25zZSAmJiBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyICYmIGRhdGEucmVzcG9uc2Uuc2VxdWVuY2VOdW1iZXIgPj0gdGhpcy5jb25zdW1lZE51bWJlciAmJlxuICAgICAgZGF0YS5yZXNwb25zZS50b3BTdWdnZXN0aW9ucykge1xuICAgICAgdGhpcy5jb25zdW1lZE51bWJlciA9IGRhdGEucmVzcG9uc2Uuc2VxdWVuY2VOdW1iZXI7XG4gICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICAgIHRoaXMucGFyc2VUb3BTdWdnZXN0aW9ucyhkYXRhLnJlc3BvbnNlLnRvcFN1Z2dlc3Rpb25zLCBzb3VyY2UpO1xuICAgICAgdGhpcy5idWlsZFR5cGVBaGVhZChzb3VyY2UpO1xuICAgICAgdGhpcy5jbGVhckNvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICAgIHRoaXMuYnVpbGRJbnB1dFdvcmRMaXN0KCk7XG4gICAgfVxuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9ICh0aGlzLnByZWZpbGxpbmcgPT09IHRydWUgJiYgdGhpcy5wcmVmaWxsRGF0YSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICF0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMub25Gb2N1c1Nob3dTdWdnZXN0aW9uc0FmdGVyUHJlZmlsbCA6IGZhbHNlO1xuICB9XG5cbiAgaGFuZGxlR2V0U3RyZWV0RXJyb3Ioc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmICh0aGlzLmFsbG93Tm9WYWxpZGF0aW9uICYmIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kKSB7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9ucyArPSAxO1xuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyLmVtaXQodGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMpO1xuICAgICAgdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgfVxuICAgIGlmKHRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQgJiYgc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpe1xuXG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9ucys9MTtcbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlci5lbWl0KHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKTtcbiAgICAgIHRoaXMuc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKHNvdXJjZSk7XG4gICAgfVxuICAgIGlmKHRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgIXRoaXMudmFsaWRhdGVkQnlCYWNrZW5kICYmIHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEICApXG4gICAge1xuICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKHNvdXJjZSk7XG4gICAgfVxuICAgIGlmKCF0aGlzLmFsbG93Tm9WYWxpZGF0aW9uICYmIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kKVxuICAgIHtcbiAgICAgIHRoaXMuc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKSB7XG4gICAgdGhpcy5lcnJvckNvZGUgPSAnc2VydmljZS11bmF2YWlsYWJsZSc7XG4gICAgLy8gdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSh0aGlzLmVycm9yQ29kZSk7XG4gICAgdGhpcy5lbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlVHlwZS5TZXJ2aWNlX1VuYXZhaWxhYmxlKTtcbiAgfVxuXG4gIGNsZWFyQ29ubmVjdGlvbkVycm9yTWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5lcnJvckNvZGUpIHtcbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuZXJyb3JDb2RlKTtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9PT0gcmVzICkge1xuICAgICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVycm9yQ29kZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VUb3BTdWdnZXN0aW9ucyh0b3BTdWdnZXN0aW9ucywgc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmICh0b3BTdWdnZXN0aW9ucy5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcbiAgICAgIC8vIHRvcFN1Z2dlc3Rpb25zLmZvckVhY2godGhpcy5wYXJzZVNpbmdsZVN1Z2dlc3Rpb24uYmluZCh0aGlzKSk7XG4gICAgICBmb3IgKGNvbnN0IHN1ZyBvZiB0b3BTdWdnZXN0aW9ucylcbiAgICAgIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSlcbiAgICAgICAge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdzdHJlZXRudW1iZXI6OnBhcnNlVG9wU3VnZ2VzdGlvbnMgLSBzdWdnZXN0aW9uOicsc3VnLCdzb3VyY2U6Jywgc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbihzdWcsIHNvdXJjZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc291cmNlKVxuICAgICAge1xuICAgICAgICBpZiAoKHRvcFN1Z2dlc3Rpb25zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmVtcHR5UmVzcG9uc2UpICYmIHRoaXMubm90SW5MaXN0QWxsb3dlZCkge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMucHVzaCh7c3RyaW5nOiB0aGlzLnNlYXJjaFRleHQsICdub3QtaW4tbGlzdCc6IHRydWV9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBJZiBwcmVmaWxsaW5nLCB0aGVuIGNoZWNrIGlmIG5vIG1hdGNoIGZvciBhIG5vbi1lbXB0eSBib3hOdW1iZXJcbiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgc2ltdWxhdGUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgJ25vdC1pbi1saXN0JyBzdWdnZXN0aW9uXG4gICAgICAgIGlmICh0aGlzLnByZWZpbGxpbmcgJiYgdGhpcy5ub3RJbkxpc3RBbGxvd2VkXG4gICAgICAgICAgICAmJiB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gZmFsc2VcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlciAhPT0gbnVsbFxuICAgICAgICAgICAgJiYgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlci5sZW5ndGggPiAwKVxuICAgICAgICB7XG4gICAgICAgICAgLy8gY29uc3Qgbm90SW5MaXN0U3VnZ2VzdGlvbiA9IHtzdHJpbmc6IHRoaXMuc2VhcmNoVGV4dCwgJ25vdC1pbi1saXN0JzogdHJ1ZX07XG4gICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IHRoaXMucHJlZmlsbEJ1aWxkTm90SW5MaXN0U3VnZ2VzdGlvbigpO1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ1NUUkVFVCBOVU1CRVIgLSBQUkVGSUxMIE5PVCBJTiBMSVNUIFNVR0dFU1RJT046Jywgc3VnZ2VzdGlvbik7IH1cbiAgICAgICAgICB0aGlzLnByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uKHRvcFN1Z2dlc3Rpb25zLCBzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByZWZpbGxCdWlsZE5vdEluTGlzdFN1Z2dlc3Rpb24oKTogYW55IHtcbiAgICBjb25zdCBub3RJbkxpc3RTdWdnZXN0aW9uID0ge3N0cmluZzogdGhpcy5zZWFyY2hUZXh0LCAnbm90LWluLWxpc3QnOiB0cnVlfTtcbiAgICBjb25zdCBzdHJlZXRTdWdnZXN0aW9uID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0UGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICBjb25zdCBjb21iaW5lZCA9IHsuLi5zdHJlZXRTdWdnZXN0aW9uLmFkZHJlc3MsIC4uLm5vdEluTGlzdFN1Z2dlc3Rpb259O1xuICAgIGRlbGV0ZSBjb21iaW5lZC5tYWlsQm94aWQ7XG4gICAgZGVsZXRlIGNvbWJpbmVkLnN1ZmZpeElkO1xuICAgIC8vIGNvbWJpbmVkLmJveE51bWJlciA9IGNvbWJpbmVkLnN0cmluZztcbiAgICBjb21iaW5lZC5ob3VzZU51bWJlciA9IGNvbWJpbmVkLnN0cmluZztcbiAgICBjb21iaW5lZC5zZWFyY2hCYXJTdHJpbmcgPSBjb21iaW5lZC5zdHJpbmc7XG4gICAgbGV0IGlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdib3hOdW1iZXInKSApXG4gICAge1xuICAgICAgY29uc3QgYm4gPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgaXNDb21wbGV0ZSA9IChibiAhPT0gbnVsbCAmJiBibiAhPT0gdW5kZWZpbmVkICYmIGJuLmxlbmd0aCA+IDAgKSA/IGZhbHNlIDogdHJ1ZTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGlzQ29tcGxldGUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoaXNDb21wbGV0ZSA9PT0gdHJ1ZSkge1xuICAgICAgY29tYmluZWQuaXNDb21wbGV0ZSA9IGlzQ29tcGxldGU7XG4gICAgfVxuICAgIHN0cmVldFN1Z2dlc3Rpb24uYWRkcmVzcyA9IGNvbWJpbmVkO1xuICAgIHJldHVybiBzdHJlZXRTdWdnZXN0aW9uO1xuICB9XG5cbiAgcGFyc2VTaW5nbGVTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IGFueSwgc291cmNlOiBTb3VyY2VUeXBlKSB7XG4gICAgbGV0IHN1Z2dlc3Rpb25Ub0FkZDogYW55O1xuICAgIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVGcmVuY2goKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdmcmVuY2gnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5mcmVuY2g7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVEdXRjaCgpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2R1dGNoJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uZHV0Y2g7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVHZXJtYW4oKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdnZXJtYW4nKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5nZXJtYW47XG4gICAgfSBlbHNlIGlmIChzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdhZGRyZXNzJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICB9XG4gICAgaWYgKHN1Z2dlc3Rpb25Ub0FkZCkge1xuICAgICAgaWYgKHN1Z2dlc3Rpb24ubWVzc2FnZXMpIHtcbiAgICAgICAgc3VnZ2VzdGlvblRvQWRkLm1lc3NhZ2VzID0gc3VnZ2VzdGlvbi5tZXNzYWdlcztcbiAgICAgIH1cbiAgICAgIGlmIChzdWdnZXN0aW9uVG9BZGQuaG91c2VOdW1iZXIgPT09IHRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3VnZ2VzdGlvbnMucHVzaChzdWdnZXN0aW9uVG9BZGQpO1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyIC0gYWRkIHN1Z2dlc3Rpb24gdG8gbGlzdCcsIHN1Z2dlc3Rpb25Ub0FkZCk7XG4gICAgICB9XG4gICAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpXG4gICAgICB7XG4gICAgICAgIHN1Z2dlc3Rpb24uYWRkcmVzcyA9IHN1Z2dlc3Rpb25Ub0FkZDtcbiAgICAgICAgdGhpcy5wcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25MZXZlbCAhPT0gU3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXROdW1iZXIgJiYgdGhpcy5zdWdnZXN0aW9uTGV2ZWwgIT09IFN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0QW5kQm94TnVtYmVyKVxuICAgICAge1xuICAgICAgICBzdWdnZXN0aW9uLmFkZHJlc3MgPSBzdWdnZXN0aW9uVG9BZGQ7XG4gICAgICAgIGNvbnN0IGlzUGVyZmVjdE1hdGNoPXRoaXMuY2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbik7XG4gICAgICAgIGlmKCEgaXNQZXJmZWN0TWF0Y2gpXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBzZWVtcyBub3RoaW5nIHRvIGRvP1xuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gbm90aWZ5IGZvciBhIGluY29tcGxldGUgYWRkcmVzc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbik6IGJvb2xlYW5cbiAge1xuICAgIGlmICggIXRoaXMuYWRkcmVzc0lzQ29tcGxldGUgKVxuICAgIHtcbiAgICAgIC8vIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3N0cmVldE51bWJlciAtIGNoZWNraW5nIHN1Z2dlc3Rpb24gZm9yIHBlcmZlY3QgbWF0Y2gnLCBzdWdnZXN0aW9uLCB0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgLy8gfVxuICAgICAgY29uc3Qgc3VnQWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25TdHJlZXROdW1iZXIgPSB0aGlzLnRyYW5zZm9ybVN0cmVldE51bWJlckluTG93ZXJjYXNlQW5kV2l0aG91dERpYWNyaXRpY3MoJycgKyBzdWdBZGRyZXNzLmhvdXNlTnVtYmVyKTtcblxuICAgICAgaWYgKHN1Z2dlc3Rpb25TdHJlZXROdW1iZXIgPT09ICgnJyArIHRoaXMuc2VhcmNoVGV4dCkgKVxuICAgICAge1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBzdWdBZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICBpZiAoc3VnQWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIHN1Z0FkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSApIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihudWxsLCBzdWdBZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTsgXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3N0cmVldE51bWJlcjo6cHJlZmlsbENoZWNrRm9yUGVyZmVjdE1hdGNoJywgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSk7XG4gICAgICAgICAgLy8gaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSAmJiB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQUREUkVTUyBDT01QTEVURSBPTiBTVFJFRVQgTlVNQkVSICEnKTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWwgIT09IFN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyICYmIHRoaXMuc3VnZ2VzdGlvbkxldmVsICE9PSBTdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldEFuZEJveE51bWJlcikge1xuICAgICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24obnVsbCwgc3VnQWRkcmVzcyk7Ly8gaG91c2UgbnVtYmVyIGZvdW5kXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXI6OnByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaCAtIEFkZHJlc3MgY29tcGxldGUsIHNraXBwaW5nIHN1Z2dlc3Rpb24gY2hlY2snLCBzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbilcbiAge1xuICAgIGlmICggIXRoaXMuYWRkcmVzc0lzQ29tcGxldGUgKVxuICAgIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3N0cmVldE51bWJlciAtIGNoZWNraW5nIHN1Z2dlc3Rpb24gZm9yIHBlcmZlY3QgbWF0Y2gnLCB0aGlzLnByZWZpbGxEYXRhLCBzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1Z0FkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uU3RyZWV0TnVtYmVyID0gdGhpcy50cmFuc2Zvcm1TdHJlZXROdW1iZXJJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKCcnICsgc3VnQWRkcmVzcy5ob3VzZU51bWJlcik7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb21wYXJpbmcgc3RyZWV0IG51bWJlcnMnLCBzdWdnZXN0aW9uU3RyZWV0TnVtYmVyLCB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXIpO1xuICAgICAgfVxuICAgICAgaWYgKHN1Z2dlc3Rpb25TdHJlZXROdW1iZXIgPT09ICgnJyArIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlcikgKVxuICAgICAge1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uO1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBzdWdBZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICBpZiAoc3VnQWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIHN1Z0FkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSApIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihudWxsLCBzdWdBZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpwcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2gnLCB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlKTtcbiAgICAgICAgICAvLyBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlICYmIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBRERSRVNTIENPTVBMRVRFIE9OIFNUUkVFVCBOVU1CRVIgIScpO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpwcmVmaWxsQ2hlY2tGb3JQZXJmZWN0TWF0Y2ggLSBBZGRyZXNzIGNvbXBsZXRlLCBza2lwcGluZyBzdWdnZXN0aW9uIGNoZWNrJywgc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dENoYW5nZV9uZXcoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXI6Om9uSW5wdXRDaGFuZ2UnLCBzb3VyY2UpO1xuICAgIH1cbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSBmYWxzZTtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAvLyBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpvbklucHV0Q2hhbmdlJywgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSk7XG4gICAgdGhpcy5lbXB0eVJlc3BvbnNlID0gdHJ1ZTtcbiAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpvbklucHV0Q2hhbmdlIC0+IGNhbGxpbmcgdmFsdWVDaGFuZ2VkJyk7XG4gICAgICB9XG4gICAgICBpZih0aGlzLnN1Z2dlc3Rpb25MZXZlbCE9PVN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSlcbiAgICAgIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgIGlmICh0aGlzLnNlYXJjaFRleHQgPT09ICcnKSB7XG4gICAgICB0aGlzLnNlcXVlbmNlTnVtYmVyICs9IDE7XG4gICAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gdGhpcy5zZXF1ZW5jZU51bWJlcjtcbiAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9ucygpO1xuICAgICAgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUpXG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKCcoQSkgZG8gbm90IHVzZSBzdWdnZXN0aW9ucyBmb3Igc3RyZWV0IG51bWJlcicpO1xuICAgICAgICB0aGlzLnN0cmVldE51bWJlckNoYW5nZWQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpXG4gICAgICAgICAgdGhpcy5wcmVmaWxsQW5hbHl6ZURhdGEoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUpXG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKCcoQikgZG8gbm90IHVzZSBzdWdnZXN0aW9ucyBmb3Igc3RyZWV0IG51bWJlcicpO1xuICAgICAgICB0aGlzLnN0cmVldE51bWJlckNoYW5nZWQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgICBpZiAoc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQpXG4gICAgICAgICAgdGhpcy5wcmVmaWxsQW5hbHl6ZURhdGEoKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgaWYoIXRoaXMudmFsaWRhdGVkQnlCYWNrZW5kKXtcbiAgICAgICAgICBsZXQgc3VnZ2VzdGlvbiA9IHtcbiAgICAgICAgICAgICdzdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICdtdW5pY2lwYWxpdHlOYW1lJzogdGhpcy5sb2NhbGl0eSxcbiAgICAgICAgICAgICdsb2NhbGl0eU5hbWUnOiB0aGlzLmxvY2FsaXR5LFxuICAgICAgICAgICAgJ3Bvc3RhbENvZGUnOiB0aGlzLnBvc3RhbENvZGUsXG4gICAgICAgICAgICAnc2VhcmNoQmFyU3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnaG91c2VOdW1iZXInOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICdzdHJlZXROYW1lJzp0aGlzLnN0cmVldE5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbik7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHRoaXMuZ2V0VG9wU3VnZ2VzdGlvbnMoc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmJ1aWxkSW5wdXRXb3JkTGlzdCgpO1xuICB9XG5cbiAgb25JbnB1dENoYW5nZShzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgY29uc29sZS5sb2coJ3N0cmVldE51bWJlcjo6b25JbnB1dENoYW5nZScsIHNvdXJjZSk7XG4gICAgfVxuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IGZhbHNlO1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXI6Om9uSW5wdXRDaGFuZ2UnLCB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlKTtcbiAgICB0aGlzLmVtcHR5UmVzcG9uc2UgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXI6Om9uSW5wdXRDaGFuZ2UgLT4gY2FsbGluZyB2YWx1ZUNoYW5nZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0ID09PSAnJykge1xuICAgICAgdGhpcy5zZXF1ZW5jZU51bWJlciArPSAxO1xuICAgICAgdGhpcy5jb25zdW1lZE51bWJlciA9IHRoaXMuc2VxdWVuY2VOdW1iZXI7XG4gICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLmxvZygnKEEpIGRvIG5vdCB1c2Ugc3VnZ2VzdGlvbnMgZm9yIHN0cmVldCBudW1iZXInKTtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJDaGFuZ2VkLmVtaXQodGhpcy5zZWFyY2hUZXh0KTtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKVxuICAgICAgICAgIHRoaXMucHJlZmlsbEFuYWx5emVEYXRhKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLmxvZygnKEIpIGRvIG5vdCB1c2Ugc3VnZ2VzdGlvbnMgZm9yIHN0cmVldCBudW1iZXInKTtcbiAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJDaGFuZ2VkLmVtaXQodGhpcy5zZWFyY2hUZXh0KTtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKXtcbiAgICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9IHRydWU7XG5cbiAgICAgICAgICBsZXQgc3VnZ2VzdGlvbiA9e1xuICAgICAgICAgICdhZGRyZXNzJzp7XG4gICAgICAgICAgICAnc3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnbXVuaWNpcGFsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgICAnbG9jYWxpdHlOYW1lJzogdGhpcy5sb2NhbGl0eSxcbiAgICAgICAgICAgICdwb3N0YWxDb2RlJzogdGhpcy5wb3N0YWxDb2RlLFxuICAgICAgICAgICAgJ3NlYXJjaEJhclN0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgJ2hvdXNlTnVtYmVyJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnc3RyZWV0TmFtZSc6dGhpcy5zdHJlZXROYW1lXG4gICAgICAgICAgfX1cbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25cbiAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB0aGlzLnByZWZpbGxBbmFseXplRGF0YSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmKCF0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCl7XG4gICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCkge1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTtcblxuICAgICAgICAgIGxldCBzdWdnZXN0aW9uID17XG4gICAgICAgICAgJ2FkZHJlc3MnOntcbiAgICAgICAgICAgICdzdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICdtdW5pY2lwYWxpdHlOYW1lJzogdGhpcy5sb2NhbGl0eSxcbiAgICAgICAgICAgICdsb2NhbGl0eU5hbWUnOiB0aGlzLmxvY2FsaXR5LFxuICAgICAgICAgICAgJ3Bvc3RhbENvZGUnOiB0aGlzLnBvc3RhbENvZGUsXG4gICAgICAgICAgICAnc2VhcmNoQmFyU3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnaG91c2VOdW1iZXInOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICdzdHJlZXROYW1lJzp0aGlzLnN0cmVldE5hbWVcbiAgICAgICAgICB9fVxuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uID0gc3VnZ2VzdGlvblxuICAgICAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIHRoaXMucHJlZmlsbEFuYWx5emVEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgIGxldCBzdWdnZXN0aW9uID0ge1xuICAgICAgICAgICdzdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAnbXVuaWNpcGFsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgJ2xvY2FsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgJ3Bvc3RhbENvZGUnOiB0aGlzLnBvc3RhbENvZGUsXG4gICAgICAgICAgJ3NlYXJjaEJhclN0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICdob3VzZU51bWJlcic6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICdzdHJlZXROYW1lJzp0aGlzLnN0cmVldE5hbWVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTt9XG4gICAgICB9ZWxzZXtcbiAgICAgICAgdGhpcy5nZXRUb3BTdWdnZXN0aW9ucyhzb3VyY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmJ1aWxkSW5wdXRXb3JkTGlzdCgpO1xuICB9XG5cblxuICBjbGlja1N1Z2dlc3Rpb24oZXZlbnQ6IGFueSwgc3VnZ2VzdGlvbj86IGFueSkge1xuICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSBmYWxzZTtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXI6OmNsaWNrU3VnZ2VzdGlvbicsIGV2ZW50LCBzdWdnZXN0aW9uKTsgfVxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgICBpZiAoc3VnZ2VzdGlvbi5zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHN1Z2dlc3Rpb24uc2VhcmNoQmFyU3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG5cbiAgICAgIGNvbnN0IG5vdEluTGlzdCA9IHN1Z2dlc3Rpb25bJ25vdC1pbi1saXN0J107XG4gICAgICBjb25zdCBpc05vdEluTGlzdCA9IG5vdEluTGlzdCAhPT0gbnVsbCAmJiBub3RJbkxpc3QgIT09IHVuZGVmaW5lZCAmJiBub3RJbkxpc3QgPT09IHRydWU7XG5cbiAgICAgIGlmIChzdWdnZXN0aW9uWydub3QtaW4tbGlzdCddKSB7XG4gICAgICAgIHN1Z2dlc3Rpb24gPSB0aGlzLm1vZGlmeVNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnc3RyZWV0TnVtYmVyOjpjbGlja1N1Z2dlc3Rpb24gLSBOT1QtSU4tTElTVCcsIGV2ZW50LCBzdWdnZXN0aW9uKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBzdWdnZXN0aW9uLmlzQ29tcGxldGUgPT09IHRydWUgJiYgIWlzTm90SW5MaXN0ICYmICFzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdib3hOdW1iZXInKSApIHtcbiAgICAgICAgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgIC8vIHRoaXMubm90aWZ5QWRkcmVzc0lzVmFsaWRhdGVkKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IHRydWU7XG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBtb2RpZnlTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbjogb2JqZWN0KSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgY29uc29sZS5sb2coJ3N0cmVldCBudW1iZXIgLSBjb21iaW5lIHNlbGVjdGVkQWRkcmVzcyB3aXRoIG5vdCBpbiBsaXN0Jywgc3VnZ2VzdGlvbiwgdGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgIH1cbiAgICBjb25zdCBjb21iaW5lZCA9IHsuLi50aGlzLnNlbGVjdGVkQWRkcmVzcywgLi4uc3VnZ2VzdGlvbn07XG4gICAgZGVsZXRlIGNvbWJpbmVkLmxhdGl0dWRlO1xuICAgIGRlbGV0ZSBjb21iaW5lZC5sb25naXR1ZGU7XG4gICAgZGVsZXRlIGNvbWJpbmVkLm1haWxib3hJZDtcbiAgICBkZWxldGUgY29tYmluZWQucGRwSWQ7XG4gICAgZGVsZXRlIGNvbWJpbmVkLnN1ZmZpeElkO1xuICAgIGRlbGV0ZSBjb21iaW5lZC5wZHBJZDtcbiAgICBkZWxldGUgY29tYmluZWQucGRwSWQ7XG4gICAgY29tYmluZWQuaG91c2VOdW1iZXIgPSBjb21iaW5lZC5zdHJpbmc7XG4gICAgY29tYmluZWQuc2VhcmNoQmFyU3RyaW5nID0gY29tYmluZWQuc3RyaW5nO1xuICAgIGNvbWJpbmVkLmlzQ29tcGxldGUgPSB0cnVlO1xuICAgIHJldHVybiBjb21iaW5lZDtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uOiBhbnkpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnc3RyZWV0IG51bWJlciAtIGVtaXQgc3VnZ2VzdGlvbicsIHN1Z2dlc3Rpb24pO1xuICAgIGNvbnN0IG5vdEluTGlzdCA9IHN1Z2dlc3Rpb25bJ25vdC1pbi1saXN0J107XG4gICAgY29uc3QgaXNOb3RJbkxpc3QgPSBub3RJbkxpc3QgIT09IG51bGwgJiYgbm90SW5MaXN0ICE9PSB1bmRlZmluZWQgJiYgbm90SW5MaXN0ID09PSB0cnVlO1xuICAgIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPSAgKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBzdWdnZXN0aW9uLmlzQ29tcGxldGUgPT09IHRydWUgJiYgIWlzTm90SW5MaXN0ICYmICFzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdib3hOdW1iZXInKSkgPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KHN1Z2dlc3Rpb24pO1xuICB9XG5cbiAgLypcbiAgY2xlYXJTZWxlY3RlZEFkZHJlc3MoKSB7XG4gICAgdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KG51bGwpO1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXI6OmNsZWFyU2VsZWN0ZWRBZGRyZXNzJywgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSk7XG4gIH1cbiAgKi9cblxuICBlbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCBvcHRpb25zPzogc3RyaW5nW10pIHtcbiAgICAvLyBNb21lbnRseSwgb3B0aW9ucyBhcmUgTk9UIHVzZWQ7IHNvIGRhdGEgdHlwZSBvZiB0aGVzZSBvcHRpb25zIHdpbGwgYmUgcmV2aWV3ZWQgb25jZSBuZWVkZWQuXG4gICAgaWYgKHZhbGlkYXRpb25NZXNzYWdlVHlwZSA9PT0gbnVsbCB8fCB2YWxpZGF0aW9uTWVzc2FnZVR5cGUgPT09IHVuZGVmaW5lZCApIHtcbiAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGVtaXQgdmFsaWRhdGlvbiBtZXNzYWdlIC0gbWVzc2FnZSBrZXkgaXMgaW52YWxpZCEnLCB2YWxpZGF0aW9uTWVzc2FnZVR5cGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAodmFsaWRhdGlvbk1lc3NhZ2VUeXBlKSB7XG5cbiAgICAgIGNhc2UgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfTm90X0ZvdW5kOlxuICAgICAgY2FzZSBWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19WYWxpZGF0ZWQ6XG4gICAgICBjYXNlIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5TZXJ2aWNlX1VuYXZhaWxhYmxlOiB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHZhbGlkYXRpb25NZXNzYWdlVHlwZSk7XG4gICAgICAgICAgLy8gdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KG1lc3NhZ2UpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdCh7bWVzc2FnZVR5cGU6IHZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IG1lc3NhZ2V9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmFibGUgdG8gZW1pdCB2YWxpZGF0aW9uIG1lc3NhZ2UgLSBtZXNzYWdlIGtleSBOT1Qgc3VwcG9ydGVkIScsIHZhbGlkYXRpb25NZXNzYWdlVHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmFsaWduXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICB9XG5cbiAgbm90aWZ5QWRkcmVzc0lzVmFsaWRhdGVkKCkge1xuICAgIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXI6Om5vdGlmeUFkZHJlc3NJc1ZhbGlkYXRlZCcsIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUpO1xuICAgIC8vIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2UoJ2FkZHJlc3MtdmFsaWRhdGVkJyk7XG4gICAgdGhpcy5lbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX1ZhbGlkYXRlZCk7XG4gIH1cblxuICBjaGVja0tleURvd24oZXZlbnQpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICAvLyBkb3duIGtleSwgaW5jcmVtZW50IHNlbGVjdGVkSW5kZXhcbiAgICAgIGNhc2UgNDA6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUFycm93U2VsZWN0ZWRJbmRleERvd24oKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIHVwIGtleSwgZGVjcmVtZW50IHNlbGVjdGVkSW5kZXhcbiAgICAgIGNhc2UgMzg6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUFycm93U2VsZWN0ZWRJbmRleFVwKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gcmlnaHQgYXJyb3cga2V5XG4gICAgICBjYXNlIDM5OlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JJc09uU3VnZ2VzdGlvbkxpc3QoKSkge1xuICAgICAgICAgIHRoaXMuY2xpY2tTdWdnZXN0aW9uKGV2ZW50LCB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnR5cGVBaGVhZFdvcmQgJiYgdGhpcy50eXBlQWhlYWRJc1Nob3duKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dCh0aGlzLmJwVHlwZUFoZWFkKTtcbiAgICAgICAgICAgIHRoaXMudHlwZUFoZWFkV29yZCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIC8vIHRhYiBrZXlcbiAgICAgIGNhc2UgOTpcbiAgICAgICAgaWYgKCF0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0Rmlyc3RJbkxpc3RPZlN1Z2dlc2lvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0NjpcbiAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBlbnRlciBwcmVzc2VkXG4gICAgICBjYXNlIDEzOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JJc09uU3VnZ2VzdGlvbkxpc3QoKSkge1xuICAgICAgICAgIHRoaXMuY2xpY2tTdWdnZXN0aW9uKGV2ZW50LCB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuICB9XG4gIGNoZWNrS2V5VVAoZXZlbnQpXG4gIHtcbiAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICBcbiAgICAgIGNhc2UgODpcbiAgICAgICBcbiAgICAgICAgaWYodGhpcy5zZWFyY2hUZXh0Lmxlbmd0aD4wKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1BBUlRJQUxfQ0xFQVJfU1RSRUVUX05VTUJFUicpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdTVFJFRVRfTlVNQkVSJyk7XG4gICAgICAgICAgLy8gdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ0JPWF9OVU1CRVInKTtcbiAgICAgICAgLy8gIHRoaXMub25DbGVhclN0cmVldE51bWJlcklucHV0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgICBicmVhazsgICAgICAgICBcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgICAgICBicmVhaztcblxuICAgIH1cbiAgICBcbiAgfVxuICBjbGVhcldpZGdldCgpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdzdHJlZXQgbnVtYmVyOjogY2xlYXJXaWRnZXQnKTsgfVxuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzdHJlZXROdW1iZXI6OmNsZWFyV2lkZ2V0JywgdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSk7XG4gICAgdGhpcy5jbGVhclNlYXJjaFRleHQoKTtcbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgdGhpcy5wcmVmaWxsRGF0YSA9IG51bGw7XG5cbiAgICAvLyB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGNsZWFyU2VhcmNoVGV4dCgpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgfVxuXG4gIHR5cGVBaGVhZElzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYnBUeXBlQWhlYWQgJiYgdGhpcy5icFR5cGVBaGVhZC5sZW5ndGggPiAwO1xuICB9XG5cbiAgcmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1cblxuICBtb3ZlQXJyb3dTZWxlY3RlZEluZGV4RG93bigpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ICsgMSAhPT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCsrO1xuICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbih0aGlzLnNlbGVjdGVkSW5kZXgsIHRoaXMuc2VsZWN0ZWRJbmRleCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVBcnJvd1NlbGVjdGVkSW5kZXhVcCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4IC0gMSAhPT0gLTIpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleC0tO1xuICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbih0aGlzLnNlbGVjdGVkSW5kZXgsIHRoaXMuc2VsZWN0ZWRJbmRleCArIDEpO1xuICAgIH1cbiAgfVxuXG4gIGN1cnNvcklzT25TdWdnZXN0aW9uTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEluZGV4ID49IDA7XG4gIH1cblxuICBzZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgaWYgKG5ld1ZhbCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5ld1ZhbCAhPT0gLTEpIHtcbiAgICAgIGlmIChvbGRWYWwgPT09IC0xKSB7XG4gICAgICAgIHRoaXMubGFzdFNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hUZXh0O1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS5zdHJpbmcpO1xuICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHQodGhpcy5sYXN0U2VhcmNoVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG1heVNob3dDbGVhckJ1dHRvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hUZXh0ICYmIHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPiAwO1xuICB9XG5cbiAgb25DbGVhclN0cmVldE51bWJlcklucHV0KGZvY3VzOiBib29sZWFuLCBlbWl0OiBib29sZWFuID0gdHJ1ZSkge1xuXG4gICAgLy8gY29uc29sZS53YXJuKCdzdHJlZXQgbnVtYmVyIDo6IGNsZWFySW5wdXQnKTtcbiAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgdGhpcy5yZXNldEFycm93U2VsZWN0ZWRJbmRleCgpO1xuICAgIHRoaXMucHJldmlvdXNJbmRleCA9IC0xO1xuICAgIHRoaXMubGFzdFNlYXJjaFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgdGhpcy5jbGVhckNvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICBpZiAoZm9jdXMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyU2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICAvLyB0aGlzLmFkZHJlc3NDaGFuZ2VkLmVtaXQobnVsbCk7XG4gICAgaWYgKGVtaXQpIHtcbiAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgvKidTVFJFRVRfTlVNQkVSJyovIElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgICAvLyAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoLyonQk9YX05VTUJFUicqLyBJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgIH1cbiAgfVxuICAvKlxuICBjbGVhcklucHV0KGZvY3VzPykge1xuICAgIGNvbnNvbGUud2Fybignc3RyZWV0IG51bWJlciA6OiBjbGVhcklucHV0Jyk7XG4gICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICB0aGlzLnByZXZpb3VzSW5kZXggPSAtMTtcbiAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9ICcnO1xuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIHRoaXMuY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgaWYgKGZvY3VzKSB7XG4gICAgICB0aGlzLnN0cmVldE51bWJlclNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KG51bGwpO1xuICB9XG4gICovXG5cbiAgY2xlYXJTdWdnZXN0aW9ucygpIHtcbiAgICB0aGlzLndvcmRMaXN0ID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnNXb3JkTGlzdCA9IFtdO1xuICB9XG5cbiAgY2xlYXJUeXBlQWhlYWQoKSB7XG4gICAgdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICB9XG5cbiAgY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKSB7XG4gICAgdGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICAgIC8vIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdCh0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHttZXNzYWdlVHlwZTogbnVsbCwgdHJhbnNsYXRlZE1lc3NhZ2U6IHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlfSk7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMgPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gbnVsbDtcbiAgfVxuXG4gIHNldFNlYXJjaFRleHQodmFsdWUpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZTtcbiAgfVxuXG4gIHNlbGVjdEZpcnN0SW5MaXN0T2ZTdWdnZXNpb25zKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XG4gICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oKTtcbiAgICB0aGlzLnNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZEluZGV4LCB0aGlzLnNlbGVjdGVkSW5kZXggLSAxKTtcbiAgfVxuXG4gIGNoYW5nZVNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHN1Z2dlc3Rpb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG5cbiAgc2hvd0FkZHJlc3NOb3RGb3VuZE1lc3NhZ2UoKSB7XG4gICAgLy8gdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSgnYWRkcmVzcy1ub3QtZm91bmQnKTtcbiAgICB0aGlzLmVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfTm90X0ZvdW5kKTtcbiAgfVxuXG4gIGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuICh0aGlzLmxvY2FsaXR5ID09PSAnJyB8fCB0aGlzLnBvc3RhbENvZGUgPT09ICcnIHx8IHRoaXMubWluTGV2ZWwgPiBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gIH1cblxuICBvbklucHV0Q2xpY2soKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnc3RyZWV0IG51bWJlciBjbGljaycpOyB9XG4gIH1cblxufVxuIiwiPHNwYW4gKm5nSWY9XCJsYWJlbFJlc291cmNlS2V5XCI+e3sgbGFiZWxSZXNvdXJjZUtleSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuPGRpdiBjbGFzcz1cImJwYWFjLWRyb3Bkb3duXCI+XG4gICAgPGRpdiBjbGFzcz1cImJwYWFjLXNlYXJjaC1iYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJwYWFjLWlucHV0LXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCIgLS0+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAjc3RyZWV0TnVtYmVyU2VhcmNoSW5wdXQgY2xhc3M9XCJicGFhYy1pbnB1dFwiIFxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgKGtleXVwKSA9IChjaGVja0tleVVQKCRldmVudCkpXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiIWlzUGFyYW1zQ29tcGxldGUoKSA/ICdsaWdodGdyZXknIDogJydcIiBcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiIGdldFRleHRDb2xvcigpIFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzdHJlZXROYW1lIHx8IHN0cmVldE5hbWUudHJpbSgpLmxlbmd0aCA9PT0gMFwiIChrZXlkb3duKT1cImNoZWNrS2V5RG93bigkZXZlbnQpXCIgXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoKVwiIChjbGljayk9XCJvbklucHV0Q2xpY2soKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgaWQ9XCJzdHJlZXROdW1iZXJJbnB1dEZpZWxkXCIgXG4gICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwicGxhY2VIb2xkZXJUZXh0XCIgXG4gICAgICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2VIb2xkZXJUZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkZvY3VzKClcIiAvPlxuICAgICAgICAgICAgPGRpdiBpZD1cImJwYWFjLWNsZWFyLXN0cmVldE5iLWJ1dHRvblwiICpuZ0lmPVwibWF5U2hvd0NsZWFyQnV0dG9uKClcIiBcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGVhclN0cmVldE51bWJlcklucHV0KHRydWUpXCIgY2xhc3M9XCJicGFhYy1jbGVhclwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tPGRpdiBuZy10cmFuc2NsdWRlPjwvZGl2Pi0tPlxuICAgICAgICA8aW5wdXQgaWQ9XCJicGFhYy1zdHJlZXROYi10eXBlYWhlYWRcIiB0eXBlPVwidGV4dFwiIGRpc2FibGVkIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFsobmdNb2RlbCldPVwiYnBUeXBlQWhlYWRcIiAvPlxuIDwhLS0gICAgICAgIDxzcGFuPmFkZHJlc3NJc0NvbXBsZXRlOiB7eyBhZGRyZXNzSXNDb21wbGV0ZSB9fS4gPC9zcGFuPlxuICAgICAgICA8c3Bhbj5hZGRyZXNzSXNWYWxpZGF0ZWQ6IHt7IGFkZHJlc3NJc1ZhbGlkYXRlZCB9fS4gPC9zcGFuPiAtLT5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJhZGRyZXNzSXNDb21wbGV0ZVwiIGNsYXNzPVwic3RyZWV0TmJDaGVrbWFya1wiPjxzcGFuIGNsYXNzPVwiY2hlY2ttYXJrXCI+PC9zcGFuPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IFtoaWRkZW5dPVwiY29sbGFwc2VEcm9wZG93blwiIGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tbWVudS1jb250YWluZXJcIiBcbiAgICAgICAgKm5nSWY9XCIoc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXROdW1iZXIgfHwgc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXRBbmRCb3hOdW1iZXIpICYmIHN1Z2dlc3Rpb25zICYmIHN1Z2dlc3Rpb25zLmxlbmd0aD4wXCI+XG4gICAgICAgIDxkaXYgI3N0cmVldE51bWJlckxpc3QgW2FwcFZpc2libGVTdWdnZXN0aW9uXT1cInZpc2libGVTdWdnZXNpb25Db3VudFwiIFxuICAgICAgICAgICAgaWQ9XCJicGFhYy1zdHJlZXRudW1iZXItZHJvcGRvd25cIiBjbGFzcz1cImJwYWFjLWRyb3Bkb3duLW1lbnVcIj5cbiAgICAgICAgICAgIDx1bCByb2xlPVwibGlzdGJveFwiIGlkPVwiYnBhYWMtc3RyZWV0TmItc3VnZ2VzdGlvbnNMaXN0XCIgY2xhc3M9XCJsaXN0LXVuc3R5bGVkXCI+XG4gICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJvcHRpb25cIiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHN1Z2dlc3Rpb25zOyBsZXQgaWR4ID0gaW5kZXhcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6KHNlbGVjdGVkSW5kZXg9PWlkeCl9XCIgKG1vdXNlZG93bik9XCJjbGlja1N1Z2dlc3Rpb24oJGV2ZW50LCBvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzZWxlY3RlZEluZGV4PWlkeFwiIChtb3VzZWxlYXZlKT1cInNlbGVjdGVkSW5kZXg9LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvcHRpb25cIiBbaW5uZXJIdG1sXT1cIm9wdGlvblsnbm90LWluLWxpc3QnXSA/IGVtcHR5UmVzcG9uc2VUZXh0IDogb3B0aW9uLnN0cmluZyB8IGhpZ2hsaWdodFN1Z2dlc3Rpb24gOiB3b3JkTGlzdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=