@bpost/bp-address-auto-complete-by-component 1.1.20 → 1.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/box-number/box-number.component.mjs +12 -2
- package/esm2020/lib/lib-address-autocomplete-by-component.component.mjs +45 -38
- package/esm2020/lib/model/query-parameters.model.mjs +7 -1
- package/esm2020/lib/street-number/street-number.component.mjs +12 -2
- package/fesm2015/bpost-bp-address-auto-complete-by-component.mjs +72 -39
- package/fesm2015/bpost-bp-address-auto-complete-by-component.mjs.map +1 -1
- package/fesm2020/bpost-bp-address-auto-complete-by-component.mjs +72 -39
- package/fesm2020/bpost-bp-address-auto-complete-by-component.mjs.map +1 -1
- package/lib/box-number/box-number.component.d.ts +3 -1
- package/lib/lib-address-autocomplete-by-component.component.d.ts +3 -2
- package/lib/model/query-parameters.model.d.ts +4 -0
- package/lib/street-number/street-number.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -324,6 +324,12 @@ export class BoxNumberComponent {
|
|
|
324
324
|
if (this.sortCriteria === 'B') {
|
|
325
325
|
param.sortByBox(true);
|
|
326
326
|
}
|
|
327
|
+
if (this.nis9InResponse) {
|
|
328
|
+
param.setIncludeNisCode(true);
|
|
329
|
+
}
|
|
330
|
+
if (this.businessNameInResponse) {
|
|
331
|
+
param.setIncludeBusinessName(true);
|
|
332
|
+
}
|
|
327
333
|
return param;
|
|
328
334
|
}
|
|
329
335
|
handleGetBoxResponse(data, source) {
|
|
@@ -902,7 +908,7 @@ export class BoxNumberComponent {
|
|
|
902
908
|
}
|
|
903
909
|
}
|
|
904
910
|
BoxNumberComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BoxNumberComponent, deps: [{ token: i1.AddressService }, { token: i2.LocaleService }, { token: i3.TranslateService }, { token: i4.UnicodeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
905
|
-
BoxNumberComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BoxNumberComponent, selector: "bp-box-number", inputs: { prefillData: "prefillData", showDebugMessageToConsole: "showDebugMessageToConsole", labelResourceKey: "labelResourceKey", maxSuggesionCount: "maxSuggesionCount", visibleSuggesionCount: "visibleSuggesionCount", sortCriteria: "sortCriteria", baseUrl: "baseUrl", addressParams: "addressParams", postalCode: "postalCode", locality: "locality", streetName: "streetName", streetNumber: "streetNumber", selectedAddress: "selectedAddress", notInListAllowed: "notInListAllowed", allowNoValidation: "allowNoValidation", validatedByBackend: "validatedByBackend", numberOfExceptions: "numberOfExceptions", inputLang: "inputLang", messageOption: "messageOption", isReadonly: "isReadonly", suggestionLevel: "suggestionLevel" }, outputs: { messageChanged: "messageChanged", addressChanged: "addressChanged", focusEvent: "focusEvent", blurEvent: "blurEvent", textChangeEvent: "textChangeEvent", emptyResponseEvent: "emptyResponseEvent", clearInputEventEmitter: "clearInputEventEmitter", prefillEventEmitter: "prefillEventEmitter", boxNumberChanged: "boxNumberChanged", numberOfExceptionsEmitter: "numberOfExceptionsEmitter" }, viewQueries: [{ propertyName: "boxNumberSearchInput", first: true, predicate: ["boxNumberSearchInput"], descendants: true }, { propertyName: "boxNumberList", first: true, predicate: ["boxNumberList"], 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\" #boxNumberSearchInput class=\"bpaac-input\" \n [readonly]=\"isReadonly\"\n (keyup) = (checkKeyUP($event))\n [style.background-color]=\"!isParamsComplete() ? 'lightgrey' : ''\" \n [style.color]=\" getTextColor() \"\n [disabled]=\"!streetNumber || streetNumber.trim().length === 0\" (keydown)=\"checkKeyDown($event)\" \n (input)=\"onInputChange()\" (click)=\"onInputClick()\"\n [(ngModel)]=\"searchText\" id=\"boxNumberInputField\" [attr.title]=\"placeHolderText\" [attr.placeholder]=\"placeHolderText\" autocomplete=\"off\"\n (blur)=\"onBlur($event)\" (focus)=\"onFocus()\" />\n <div id=\"bpaac-clear-boxNb-button\" *ngIf=\"mayShowClearButton()\" (click)=\"clearInput(true)\" class=\"bpaac-clear\">\n </div>\n </div>\n <!--<div ng-transclude></div>-->\n <input id=\"bpaac-boxNb-typeahead\" type=\"text\" disabled autocomplete=\"off\" [(ngModel)]=\"bpTypeAhead\" />\n <span *ngIf=\"addressIsValidated\" class=\"boxNbChekmark\"><span class=\"checkmark\"></span></span>\n </div>\n <div [hidden]=\"collapseDropdown\" class=\"bpaac-dropdown-menu-container\" \n *ngIf=\"suggestionLevel===SuggestionLevelType.StreetAndBoxNumber && suggestions && suggestions.length>0\">\n <div #boxNumberList [appVisibleSuggestion]=\"visibleSuggesionCount\" id=\"bpaac-box-dropdown\" class=\"bpaac-dropdown-menu\">\n <ul role=\"listbox\" id=\"bpaac-boxNb-suggestionsList\" class=\"list-unstyled\">\n <li role=\"option\" *ngFor=\"let option of suggestions; let idx = index\" [ngClass]=\"{'active':(selectedIndex==idx)}\" \n (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>\n", 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 } });
|
|
911
|
+
BoxNumberComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BoxNumberComponent, selector: "bp-box-number", inputs: { prefillData: "prefillData", showDebugMessageToConsole: "showDebugMessageToConsole", labelResourceKey: "labelResourceKey", maxSuggesionCount: "maxSuggesionCount", visibleSuggesionCount: "visibleSuggesionCount", sortCriteria: "sortCriteria", baseUrl: "baseUrl", addressParams: "addressParams", postalCode: "postalCode", locality: "locality", streetName: "streetName", streetNumber: "streetNumber", selectedAddress: "selectedAddress", notInListAllowed: "notInListAllowed", allowNoValidation: "allowNoValidation", validatedByBackend: "validatedByBackend", numberOfExceptions: "numberOfExceptions", inputLang: "inputLang", messageOption: "messageOption", isReadonly: "isReadonly", suggestionLevel: "suggestionLevel", nis9InResponse: "nis9InResponse", businessNameInResponse: "businessNameInResponse" }, outputs: { messageChanged: "messageChanged", addressChanged: "addressChanged", focusEvent: "focusEvent", blurEvent: "blurEvent", textChangeEvent: "textChangeEvent", emptyResponseEvent: "emptyResponseEvent", clearInputEventEmitter: "clearInputEventEmitter", prefillEventEmitter: "prefillEventEmitter", boxNumberChanged: "boxNumberChanged", numberOfExceptionsEmitter: "numberOfExceptionsEmitter" }, viewQueries: [{ propertyName: "boxNumberSearchInput", first: true, predicate: ["boxNumberSearchInput"], descendants: true }, { propertyName: "boxNumberList", first: true, predicate: ["boxNumberList"], 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\" #boxNumberSearchInput class=\"bpaac-input\" \n [readonly]=\"isReadonly\"\n (keyup) = (checkKeyUP($event))\n [style.background-color]=\"!isParamsComplete() ? 'lightgrey' : ''\" \n [style.color]=\" getTextColor() \"\n [disabled]=\"!streetNumber || streetNumber.trim().length === 0\" (keydown)=\"checkKeyDown($event)\" \n (input)=\"onInputChange()\" (click)=\"onInputClick()\"\n [(ngModel)]=\"searchText\" id=\"boxNumberInputField\" [attr.title]=\"placeHolderText\" [attr.placeholder]=\"placeHolderText\" autocomplete=\"off\"\n (blur)=\"onBlur($event)\" (focus)=\"onFocus()\" />\n <div id=\"bpaac-clear-boxNb-button\" *ngIf=\"mayShowClearButton()\" (click)=\"clearInput(true)\" class=\"bpaac-clear\">\n </div>\n </div>\n <!--<div ng-transclude></div>-->\n <input id=\"bpaac-boxNb-typeahead\" type=\"text\" disabled autocomplete=\"off\" [(ngModel)]=\"bpTypeAhead\" />\n <span *ngIf=\"addressIsValidated\" class=\"boxNbChekmark\"><span class=\"checkmark\"></span></span>\n </div>\n <div [hidden]=\"collapseDropdown\" class=\"bpaac-dropdown-menu-container\" \n *ngIf=\"suggestionLevel===SuggestionLevelType.StreetAndBoxNumber && suggestions && suggestions.length>0\">\n <div #boxNumberList [appVisibleSuggestion]=\"visibleSuggesionCount\" id=\"bpaac-box-dropdown\" class=\"bpaac-dropdown-menu\">\n <ul role=\"listbox\" id=\"bpaac-boxNb-suggestionsList\" class=\"list-unstyled\">\n <li role=\"option\" *ngFor=\"let option of suggestions; let idx = index\" [ngClass]=\"{'active':(selectedIndex==idx)}\" \n (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>\n", 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 } });
|
|
906
912
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BoxNumberComponent, decorators: [{
|
|
907
913
|
type: Component,
|
|
908
914
|
args: [{ selector: 'bp-box-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\" #boxNumberSearchInput class=\"bpaac-input\" \n [readonly]=\"isReadonly\"\n (keyup) = (checkKeyUP($event))\n [style.background-color]=\"!isParamsComplete() ? 'lightgrey' : ''\" \n [style.color]=\" getTextColor() \"\n [disabled]=\"!streetNumber || streetNumber.trim().length === 0\" (keydown)=\"checkKeyDown($event)\" \n (input)=\"onInputChange()\" (click)=\"onInputClick()\"\n [(ngModel)]=\"searchText\" id=\"boxNumberInputField\" [attr.title]=\"placeHolderText\" [attr.placeholder]=\"placeHolderText\" autocomplete=\"off\"\n (blur)=\"onBlur($event)\" (focus)=\"onFocus()\" />\n <div id=\"bpaac-clear-boxNb-button\" *ngIf=\"mayShowClearButton()\" (click)=\"clearInput(true)\" class=\"bpaac-clear\">\n </div>\n </div>\n <!--<div ng-transclude></div>-->\n <input id=\"bpaac-boxNb-typeahead\" type=\"text\" disabled autocomplete=\"off\" [(ngModel)]=\"bpTypeAhead\" />\n <span *ngIf=\"addressIsValidated\" class=\"boxNbChekmark\"><span class=\"checkmark\"></span></span>\n </div>\n <div [hidden]=\"collapseDropdown\" class=\"bpaac-dropdown-menu-container\" \n *ngIf=\"suggestionLevel===SuggestionLevelType.StreetAndBoxNumber && suggestions && suggestions.length>0\">\n <div #boxNumberList [appVisibleSuggestion]=\"visibleSuggesionCount\" id=\"bpaac-box-dropdown\" class=\"bpaac-dropdown-menu\">\n <ul role=\"listbox\" id=\"bpaac-boxNb-suggestionsList\" class=\"list-unstyled\">\n <li role=\"option\" *ngFor=\"let option of suggestions; let idx = index\" [ngClass]=\"{'active':(selectedIndex==idx)}\" \n (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>\n", styles: [""] }]
|
|
@@ -954,6 +960,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
954
960
|
type: Input
|
|
955
961
|
}], suggestionLevel: [{
|
|
956
962
|
type: Input
|
|
963
|
+
}], nis9InResponse: [{
|
|
964
|
+
type: Input
|
|
965
|
+
}], businessNameInResponse: [{
|
|
966
|
+
type: Input
|
|
957
967
|
}], messageChanged: [{
|
|
958
968
|
type: Output
|
|
959
969
|
}], addressChanged: [{
|
|
@@ -975,4 +985,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
975
985
|
}], numberOfExceptionsEmitter: [{
|
|
976
986
|
type: Output
|
|
977
987
|
}] } });
|
|
978
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvYm94LW51bWJlci9ib3gtbnVtYmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQvc3JjL2xpYi9ib3gtbnVtYmVyL2JveC1udW1iZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBa0QsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUc3SixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUs3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7OztBQU96RSxNQUFNLE9BQU8sa0JBQWtCO0lBa0c3QixZQUNVLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxjQUE4QjtRQUg5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWdCLEdB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QkFFRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBR1AsZ0JBQWdCO3NCQURmLE1BQU07Z0JBRUcseUJBQXlCO3NCQUFsQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcmVmaWxsZWRQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vdXRpbHMvcHJlZmlsbGVkLXBhcmFtZXRlcnMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vZW51bS92YWxpZGF0aW9uLW1lc3NhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFkZHJlc3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWRyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFVuaWNvZGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdW5pY29kZS5zZXJ2aWNlJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICcuLi91dGlscy9kb21oYW5kbGVyJztcbmltcG9ydCB7IEFERFJFU1NMRVZFTCB9IGZyb20gJy4uL2VudW0vYWRkcmVzcy1sZXZlbC5lbnVtJztcbmltcG9ydCB7IFF1ZXJ5UGFyYW1ldGVycyB9IGZyb20gJy4uL21vZGVsL3F1ZXJ5LXBhcmFtZXRlcnMubW9kZWwnO1xuaW1wb3J0IHsgUHJlZmlsbERhdGEgfSBmcm9tICcuLi91dGlscy9wcmVmaWxsLWRhdGEnO1xuaW1wb3J0IHsgU291cmNlVHlwZSB9IGZyb20gJy4uL2VudW0vc291cmNlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQcmVmaWxsRXZlbnQgfSBmcm9tICcuLi91dGlscy9wcmVmbGxsLmV2ZW50JztcbmltcG9ydCB7IElucHV0TmFtZVR5cGUgfSBmcm9tICcuLi9lbnVtL2lucHV0LW5hbWUuZW51bSc7XG5pbXBvcnQgeyBTdWdnZXN0aW9uTGV2ZWxUeXBlIH0gZnJvbSAnLi4vZW51bS9zdWdnZXN0aW9uLWxldmVsLXR5cGUuZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JwLWJveC1udW1iZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYm94LW51bWJlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2JveC1udW1iZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBCb3hOdW1iZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKCdib3hOdW1iZXJTZWFyY2hJbnB1dCcsIHtzdGF0aWM6IGZhbHNlfSApIGJveE51bWJlclNlYXJjaElucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdib3hOdW1iZXJMaXN0Jywge3N0YXRpYzogZmFsc2V9ICkgYm94TnVtYmVyTGlzdDogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIDIwMjAtMDYtMTVcbiAgLy8gQElucHV0KClcbiAgLy8gb25Gb2N1c1Nob3dTdWdnZXN0aW9uc0FmdGVyUHJlZmlsbCA9IHRydWU7XG5cbiAgQElucHV0KCkgcHJlZmlsbERhdGE6IFByZWZpbGxEYXRhO1xuICBASW5wdXQoKSBzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbGFiZWxSZXNvdXJjZUtleSA9ICdjb21tb24ubGFiZWwuYm94TnVtYmVyJztcbiAgQElucHV0KCkgbWF4U3VnZ2VzaW9uQ291bnQgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzaW9uQ291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWEgPSAnJztcbiAgQElucHV0KCkgYmFzZVVybDogc3RyaW5nO1xuICBASW5wdXQoKSBhZGRyZXNzUGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBASW5wdXQoKSBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxvY2FsaXR5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0cmVldE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgc3RyZWV0TnVtYmVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlbGVjdGVkQWRkcmVzcztcbiAgQElucHV0KCkgbm90SW5MaXN0QWxsb3dlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgYWxsb3dOb1ZhbGlkYXRpb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIHZhbGlkYXRlZEJ5QmFja2VuZDogYm9vbGVhbjtcbiAgQElucHV0KCkgbnVtYmVyT2ZFeGNlcHRpb25zOiBudW1iZXI7XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgaW5wdXRMYW5nKHZhbDogc3RyaW5nKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3NldCBsYW5nJywgdmFsKTtcbiAgICB0aGlzLmxvY2FsZVNlcnZpY2UuY2hhbmdlTGFuZyh2YWwpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS51c2UodmFsKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3NldCBsYW5nIGFmdGVyIHN1YnNjcmliZScsIHJlcyk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgICAgICAgLy8gaWYgKHJlcyAhPT0gdW5kZWZpbmVkICkge1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIEBJbnB1dCgpIG1lc3NhZ2VPcHRpb24gPSAnWSc7wrVcblxuICBASW5wdXQoKVxuICBpc1JlYWRvbmx5PWZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHN1Z2dlc3Rpb25MZXZlbDogU3VnZ2VzdGlvbkxldmVsVHlwZTtcblxuICBAT3V0cHV0KCkgbWVzc2FnZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjx7bWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZ30+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYWRkcmVzc0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBibHVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdGV4dENoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGVtcHR5UmVzcG9uc2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGNsZWFySW5wdXRFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBwcmVmaWxsRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8UHJlZmlsbEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UHJlZmlsbEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBib3hOdW1iZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID1uZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG5cbiAgYWRkcmVzc0lzVmFsaWRhdGVkOiBib29sZWFuO1xuICBzdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbiAgc3VnZ2VzdGlvbnM6IGFueTtcbiAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICBsYXN0U2VhcmNoVmFsdWU6IHN0cmluZztcbiAgd29yZExpc3Q6IGFueTtcbiAgc3VnZ2VzdGlvbnNXb3JkTGlzdDogYW55O1xuICBicFR5cGVBaGVhZDogc3RyaW5nO1xuICBwbGFjZUhvbGRlclRleHQ6IHN0cmluZztcbiAgc2tpcE5leHRCbHVyOiBib29sZWFuOyAvLyBPbkJsdXIgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHN1Z2dlc3Rpb24vdmFsaWRhdG9yIGJ1dHRvblxuICBlcnJvckNvZGU6IGFueTtcblxuICBtaW5MZXZlbDogbnVtYmVyO1xuICBzZWxlY3RlZEluZGV4OiBudW1iZXI7XG4gIGNvbGxhcHNlRHJvcGRvd246IGJvb2xlYW47XG4gIHR5cGVBaGVhZFdvcmQ6IHN0cmluZztcbiAgc2VxdWVuY2VOdW1iZXI6IG51bWJlcjtcbiAgY29uc3VtZWROdW1iZXI6IG51bWJlcjtcbiAgc2VsZWN0aW9uQ2hhbmdlZDogYm9vbGVhbjtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gbnVsbDtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgZW1wdHlSZXNwb25zZVRleHQ6IHN0cmluZztcbiAgZW1wdHlSZXNwb25zZTogYm9vbGVhbjtcblxuICBwcmVmaWxsaW5nID0gZmFsc2U7XG4gIGlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG5cbiAgU3VnZ2VzdGlvbkxldmVsVHlwZT1TdWdnZXN0aW9uTGV2ZWxUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWRkcmVzc1NlcnZpY2U6IEFkZHJlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1bmljb2RlU2VydmljZTogVW5pY29kZVNlcnZpY2UsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgLy8gaW5zdGFuY2UgcHJvcGVydGllc1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5wcmV2aW91c0luZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSAnJztcbiAgICB0aGlzLndvcmRMaXN0ID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc1dvcmRMaXN0ID0gW107XG4gICAgdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICAgIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gJyc7XG4gICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTsgLy8gT25CbHVyIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBzdWdnZXN0aW9uL3ZhbGlkYXRvciBidXR0b25cbiAgICB0aGlzLmVycm9yQ29kZSA9IG51bGw7XG4gICAgLy8gc2NvcGUgcHJvcGVydGllc1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIHByb3BlcnRpZXNcbiAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSAnJztcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgPSAxO1xuICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSAxO1xuICAgIC8vIGluaXRpYWxpemF0aW9uXG4gICAgdGhpcy5zZXRTZWFyY2hUZXh0KCcnKTtcbiAgICAvLyB0aGlzLnNldFBsYWNlSG9sZGVyVGV4dCgpO1xuICAgIHRoaXMuc2V0RW1wdHlSZXNwb25zZVRleHQoKTtcbiAgICB0aGlzLmVtcHR5UmVzcG9uc2UgPSB0cnVlO1xuICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkKSB7XG4gICAgICBjb25zdCBvdmVybGF5OiBIVE1MRGl2RWxlbWVudCA9IHRoaXMuYm94TnVtYmVyTGlzdC5uYXRpdmVFbGVtZW50O1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3RJdGVtID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKG92ZXJsYXksICdsaS5hY3RpdmUnKTtcbiAgICAgICAgaWYgKGxpc3RJdGVtKSB7XG4gICAgICAgICAgRG9tSGFuZGxlci5zY3JvbGxJblZpZXcob3ZlcmxheSwgbGlzdEl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9LCAxKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcykge1xuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ByZWZpbGxEYXRhJykgJiYgIWNoYW5nZXMucHJlZmlsbERhdGEuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdGhpcy5sb2FkUGFyYW1zKGNoYW5nZXMucHJlZmlsbERhdGEuY3VycmVudFZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAhPT0gJycgJiYgdGhpcy5taW5MZXZlbCA9PT0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpIHtcbiAgICAgICAgICAvLyB0aGlzLm9uSW5wdXRDaGFuZ2UoJ3ByZWZpbGxlZCcpO1xuICAgICAgICAgIC8vIHRoaXMuYm94TnVtYmVyU2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyXG4gICAgICAgICAgICA9IHRoaXMudHJhbnNmb3JtQm94TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyh0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyKTtcbiAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UoLyoncHJlZmlsbGVkJyovIFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdHJlZXROdW1iZXInKSAmJiAhY2hhbmdlcy5zdHJlZXROdW1iZXIuZmlyc3RDaGFuZ2UgJiYgIWNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ByZWZpbGxEYXRhJykpIHtcblxuICAgICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWwgIT09IFN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSlcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdpbnB1dExhbmcnKSAvIComJiAhY2hhbmdlcy5hZGRyZXNzUGFyYW1zLmZpcnN0Q2hhbmdlKiAvKSB7XG4gICAgICAgIGNvbnN0IGxhbmcgPSBjaGFuZ2VzLmlucHV0TGFuZy5jdXJyZW50VmFsdWU7XG4gICAgICAgIGNvbnNvbGUubG9nKCdvbiBjaGFuZ2VzIC0gaW5wdXRMYW5nJywgbGFuZyk7XG4gICAgICAgIGlmIChjaGFuZ2VzLmlucHV0TGFuZy5jdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXREZWZhdWx0TGFuZyhsYW5nKTtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxhbmcpO1xuICAgICAgICAgIHRoaXMubG9jYWxlU2VydmljZS5jaGFuZ2VMYW5nKGxhbmcpO1xuICAgICAgICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKi9cbiAgICB9XG4gIH1cblxuICB0cmFuc2Zvcm1Cb3hOdW1iZXJJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKGJveE51bWJlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSBudWxsO1xuICAgIGlmIChib3hOdW1iZXIgIT09IG51bGwgJiYgYm94TnVtYmVyICE9PSB1bmRlZmluZWQgKVxuICAgIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcyhib3hOdW1iZXIpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCdUcmFuc2Zvcm1lZCBzdHJlZXQgbnVtYmVyOicsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuXG4gIG9uQ2hhbmdlZExhbmd1YWdlKCkge1xuICAgIC8vIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2JveE51bWJlci5wbGFjZWhvbGRlci5pbnB1dC1wbGFjZWhvbGRlcicpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdwbGFjZSBob2xkZXInLCB0aGlzLnBsYWNlSG9sZGVyVGV4dCk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCgnYm94TnVtYmVyLnBsYWNlaG9sZGVyLmlucHV0LXBsYWNlaG9sZGVyJylcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCduZXcgcGxhY2Vob2xkZXInLCByZXMpO1xuICAgICAgICAvLyA9PiAnaGVsbG8gd29ybGQnXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gcmVzO1xuICAgICAgICB0aGlzLnNldEVtcHR5UmVzcG9uc2VUZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRFbXB0eVJlc3BvbnNlVGV4dCgpIHtcbiAgICAvLyB0aGlzLmVtcHR5UmVzcG9uc2VUZXh0ID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdub3QtaW4tbGlzdCcpO1xuICAgIHRoaXMuZW1wdHlSZXNwb25zZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnYm94TnVtYmVyLm1lc3NhZ2Uubm90LWluLWxpc3QnKTtcbiAgfVxuXG4gIG9uQ2xlYXJJbnB1dEV2ZW50KGV2ZW50LCBmb2N1cykge1xuICAgIHRoaXMuY2xlYXJJbnB1dChmb2N1cyk7XG4gIH1cblxuICBvbkJsdXIoZXYpIHtcbiAgICBpZiAodGhpcy5pc0Jyb3dzZXJJRSgpICYmIHRoaXMuaXNEcm9wZG93bkNsaWNrZWQoZXYpKSB7XG4gICAgICB0aGlzLmJveE51bWJlclNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2tpcE5leHRCbHVyKSB7XG4gICAgICB0aGlzLnNraXBOZXh0Qmx1ciA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgICAgdGhpcy5ibHVyRXZlbnQuZW1pdChBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gICAgfVxuICB9XG5cbiAgaXNCcm93c2VySUUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9tc2llXFxzfHRyaWRlbnRcXC98ZWRnZVxcLy9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xuICB9XG5cbiAgaXNEcm9wZG93bkNsaWNrZWQoZXYpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldi5leHBsaWNpdE9yaWdpbmFsVGFyZ2V0IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YXJnZXQuaWQgPT09ICdicGFhYy1ib3gtZHJvcGRvd24nKTtcbiAgfVxuXG4gIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gZmFsc2U7XG4gICAgLy8gdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gKHRoaXMucHJlZmlsbGluZyA9PT0gdHJ1ZSAmJiB0aGlzLnByZWZpbGxEYXRhICE9PSBudWxsKVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgPyAhdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgOiBmYWxzZTtcbiAgICAvLyB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNraXBOZXh0Qmx1ciA9IGZhbHNlO1xuICAgIHRoaXMuZm9jdXNFdmVudC5lbWl0KEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgfVxuXG4gIHZhbHVlQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnRleHRDaGFuZ2VFdmVudC5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gIH1cblxuICBtYXlTaG93RHJvcGRvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCAmJiAhdGhpcy5jb2xsYXBzZURyb3Bkb3duO1xuICB9XG5cbiAgYnVpbGRJbnB1dFdvcmRMaXN0KCkge1xuICAgIHRoaXMud29yZExpc3QgPSB0aGlzLnNlYXJjaFRleHQuc3BsaXQoL1tcXHMsIF0rLyk7XG4gIH1cblxuICBtYXlBZGRUeXBlQWhlYWQoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICgvW15cXHMsIFxcXFxcXC9dJC8pLnRlc3QodGhpcy5zZWFyY2hUZXh0KTtcbiAgfVxuXG4gIGJ1aWxkVHlwZUFoZWFkKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAoIXRoaXMubWF5QWRkVHlwZUFoZWFkKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoVGV4dFdvcmRzID0gdGhpcy5zZWFyY2hUZXh0LnNwbGl0KC9bXFxzLCBdKy8pO1xuICAgIGNvbnN0IGxhc3RXb3JkID0gc2VhcmNoVGV4dFdvcmRzW3NlYXJjaFRleHRXb3Jkcy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zLnNvbWUoZnVuY3Rpb24oc3VnKSB7XG4gICAgICBpZiAoIXN1ZyB8fCAhc3VnLmhhc093blByb3BlcnR5KCdzdHJpbmcnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VnLnN0cmluZy5zcGxpdCgvW1xccy1dKy8pLnNvbWUoZnVuY3Rpb24od29yZCkge1xuICAgICAgICBpZiAodGhpcy5zdHJpbmdTdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh3b3JkLCBsYXN0V29yZCkpIHtcbiAgICAgICAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSB3b3JkO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0uYmluZCh0aGlzKSkpIHtcbiAgICAgIGNvbnN0IGFwcGVuZGl4ID0gdGhpcy50eXBlQWhlYWRXb3JkLnNsaWNlKGxhc3RXb3JkLmxlbmd0aCwgdGhpcy50eXBlQWhlYWRXb3JkLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMuYnBUeXBlQWhlYWQgPSB0aGlzLnNlYXJjaFRleHQgKyBhcHBlbmRpeDtcbiAgICB9XG4gIH1cblxuICBzdHJpbmdTdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh2YWx1ZSwgcHJlZml4KSB7XG4gICAgdmFsdWUgPSAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XG4gICAgcHJlZml4ID0gKHByZWZpeCAhPT0gbnVsbCAmJiBwcmVmaXggIT09IHVuZGVmaW5lZCkgPyBwcmVmaXgudG9Mb3dlckNhc2UoKSA6IHByZWZpeDtcbiAgICByZXR1cm4gdGhpcy51bmljb2RlU2VydmljZS5yZW1vdmVEaWFjcml0aWNzKHZhbHVlKS5zbGljZSgwLCBwcmVmaXgubGVuZ3RoKVxuICAgICAgLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MocHJlZml4KSkgIT09IC0xO1xuICB9XG5cbiAgZ2V0VG9wU3VnZ2VzdGlvbnMoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgKz0gMTtcbiAgICBjb25zdCBwYXJhbSA9IHRoaXMuZ2VuZXJhdGVQYXJhbWV0ZXJzKCk7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnQk9YLU5VTUJFUiBjYWxsaW5nIHNlcnZpY2UgcGFyYW1zJywgcGFyYW0pOyB9XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmFkZHJlc3NTZXJ2aWNlLmdldEJveCh0aGlzLmJhc2VVcmwsIHRoaXMubG9jYWxpdHksIHRoaXMucG9zdGFsQ29kZSwgcGFyYW0pXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVHZXRCb3hSZXNwb25zZShyZXNwb25zZSwgc291cmNlKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLnByZWZpbGxBbmFseXplRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgICxcbiAgICAgICAgICAoKSA9PiB0aGlzLmhhbmRsZUdldEJveEVycm9yKHNvdXJjZSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGV4dENvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICggdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9PT0gdHJ1ZSApID8gJ29yYW5nZXJlZCcgOiAnJztcbiAgfVxuXG4gIHByZWZpbGxBbmFseXplRGF0YSgpXG4gIHtcbiAgICBpZiAodGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpXG4gICAge1xuICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5wcmVmaWxsRXZlbnRFbWl0dGVyLmVtaXQobmV3IFByZWZpbGxFdmVudChBRERSRVNTTEVWRUwuQk9YX05VTUJFUiwgdGhpcy5wcmVmaWxsRGF0YSkgKTtcbiAgfVxuXG4gIGxvYWRQYXJhbXMocHJlZmlsbERhdGE6IFByZWZpbGxEYXRhKSB7XG4gICAgbGV0IGNvbmNhdFN0ciA9ICcnO1xuICAgIGlmIChwcmVmaWxsRGF0YSAhPT0gbnVsbCAmJiBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzICE9PSBudWxsKVxuICAgIHtcbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdtaW5MZXZlbCcpKSB7XG4gICAgICAgIHRoaXMubWluTGV2ZWwgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsO1xuICAgICAgfVxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ3Bvc3RhbENvZGUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSkpIHtcbiAgICAgICAgdGhpcy5wb3N0YWxDb2RlID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlO1xuICAgICAgfVxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ211bmljaXBhbGl0eU5hbWUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSkpIHtcbiAgICAgICAgdGhpcy5sb2NhbGl0eSA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdzdHJlZXROYW1lJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWUpKSB7XG4gICAgICAgIHRoaXMuc3RyZWV0TmFtZSA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdzdHJlZXROdW1iZXInKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyKSkge1xuICAgICAgICB0aGlzLnN0cmVldE51bWJlciA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyO1xuICAgICAgfVxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpXG4gICAgICAgICAgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcikgJiYgdGhpcy5pc1BhcmFtc0NvbXBsZXRlKCkpIHtcbiAgICAgICAgY29uY2F0U3RyID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25jYXRTdHI7XG4gIH1cblxuICBpc1N0cmluZyh2YWwpOiBib29sZWFuIHtcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB2YWwuY29uc3RydWN0b3IgPT09IFN0cmluZztcbiAgfVxuXG4gIGlzVmFsaWQodmFsKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTdHJpbmcodmFsKSAmJiB2YWwgIT09ICcnO1xuICB9XG5cbiAgaXNQYXJhbXNDb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICBpZighdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpe1xuICAgICAgcmV0dXJuICh0aGlzLmlzVmFsaWQodGhpcy5wb3N0YWxDb2RlKSB8fCB0aGlzLmlzVmFsaWQodGhpcy5sb2NhbGl0eSkpICYmIHRoaXMuaXNWYWxpZCh0aGlzLnN0cmVldE5hbWUpICYmIHRoaXMuaXNWYWxpZCh0aGlzLnN0cmVldE51bWJlcik7XG4gICAgfWVsc2UgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWwgPT09IFN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSAmJiB0aGlzLnByZWZpbGxEYXRhKXtcbiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQodGhpcy5wb3N0YWxDb2RlKSAmJiB0aGlzLmlzVmFsaWQodGhpcy5sb2NhbGl0eSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMuc3RyZWV0TmFtZSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMuc3RyZWV0TnVtYmVyKSAmJiB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyIT09Jyc7IFxuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCh0aGlzLnBvc3RhbENvZGUpICYmIHRoaXMuaXNWYWxpZCh0aGlzLmxvY2FsaXR5KSAmJiB0aGlzLmlzVmFsaWQodGhpcy5zdHJlZXROYW1lKSAmJiB0aGlzLmlzVmFsaWQodGhpcy5zdHJlZXROdW1iZXIpO1xuICAgIH1cbiAgICBcbiAgfVxuXG4gIGdlbmVyYXRlUGFyYW1ldGVycygpOiBRdWVyeVBhcmFtZXRlcnMge1xuICAgIC8vIHRzbGludDpkaXNhYmxlXG4gICAgY29uc3QgcGFyYW0gPSBuZXcgUXVlcnlQYXJhbWV0ZXJzKHtcbiAgICAgIGlkOiB0aGlzLnNlcXVlbmNlTnVtYmVyLFxuICAgICAgcTogdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgcG9zdGFsQ29kZTogdGhpcy5wb3N0YWxDb2RlLFxuICAgICAgbG9jYWxpdHk6IHRoaXMubG9jYWxpdHksXG4gICAgICBzdHJlZXQ6IHRoaXMuc3RyZWV0TmFtZSxcbiAgICAgIHN0cmVldE51bWJlcjogdGhpcy5zdHJlZXROdW1iZXIsXG4gICAgICBtYXhOdW1iZXJPZlN1Z2dlc3Rpb25zOiB0aGlzLm1heFN1Z2dlc2lvbkNvdW50XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zb3J0Q3JpdGVyaWEgPT09ICdCJykge1xuICAgICAgcGFyYW0uc29ydEJ5Qm94KHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW07XG4gIH1cblxuICBoYW5kbGVHZXRCb3hSZXNwb25zZShkYXRhOiBhbnksIHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAoZGF0YSAmJiBkYXRhLnJlc3BvbnNlICYmIGRhdGEucmVzcG9uc2Uuc2VxdWVuY2VOdW1iZXIgJiYgZGF0YS5yZXNwb25zZS5zZXF1ZW5jZU51bWJlciA+PSB0aGlzLmNvbnN1bWVkTnVtYmVyICYmXG4gICAgICBkYXRhLnJlc3BvbnNlLnRvcFN1Z2dlc3Rpb25zKSB7XG4gICAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gZGF0YS5yZXNwb25zZS5zZXF1ZW5jZU51bWJlcjtcbiAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9ucygpO1xuICAgICAgdGhpcy5wYXJzZVRvcFN1Z2dlc3Rpb25zKGRhdGEucmVzcG9uc2UudG9wU3VnZ2VzdGlvbnMsIHNvdXJjZSk7XG4gICAgICB0aGlzLmJ1aWxkVHlwZUFoZWFkKHNvdXJjZSk7XG4gICAgICB0aGlzLmNsZWFyQ29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgICAgdGhpcy5idWlsZElucHV0V29yZExpc3QoKTtcbiAgICB9XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gKHRoaXMucHJlZmlsbGluZyA9PT0gdHJ1ZSAmJiB0aGlzLnByZWZpbGxEYXRhICE9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIXRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5vbkZvY3VzU2hvd1N1Z2dlc3Rpb25zQWZ0ZXJQcmVmaWxsIDogZmFsc2U7XG4gIH1cblxuICBoYW5kbGVHZXRCb3hFcnJvcihzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpIHtcbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zICs9IDE7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXIuZW1pdCh0aGlzLm51bWJlck9mRXhjZXB0aW9ucyk7XG4gICAgICB0aGlzLnNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICB9XG4gICAgaWYodGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiB0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCAmJiBzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCl7XG5cbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKz0xO1xuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnNFbWl0dGVyLmVtaXQodGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMpO1xuICAgICAgdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgICB0aGlzLm9uSW5wdXRDaGFuZ2Uoc291cmNlKTtcbiAgICB9XG4gICAgaWYodGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiAhdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQgJiYgc291cmNlID09PSBTb3VyY2VUeXBlLlNPVVJDRV9QUkVGSUxMRUQgIClcbiAgICB7XG4gICAgICB0aGlzLm9uSW5wdXRDaGFuZ2Uoc291cmNlKTtcbiAgICB9XG4gICAgaWYoIXRoaXMuYWxsb3dOb1ZhbGlkYXRpb24gJiYgdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpXG4gICAge1xuICAgICAgdGhpcy5zZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpIHtcbiAgICB0aGlzLmVycm9yQ29kZSA9ICdzZXJ2aWNlLXVuYXZhaWxhYmxlJztcbiAgICAvLyB0aGlzLnNldFZhbGlkYXRpb25NZXNzYWdlKHRoaXMuZXJyb3JDb2RlKTtcbiAgICB0aGlzLmVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLlNlcnZpY2VfVW5hdmFpbGFibGUpO1xuICB9XG5cbiAgY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCkge1xuICAgIGlmICh0aGlzLmVycm9yQ29kZSkge1xuICAgICAgY29uc3QgcmVzID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5lcnJvckNvZGUpO1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID09PSByZXMgKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JDb2RlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwYXJzZVRvcFN1Z2dlc3Rpb25zKHRvcFN1Z2dlc3Rpb25zLCBzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgaWYgKHRvcFN1Z2dlc3Rpb25zLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgLy8gdG9wU3VnZ2VzdGlvbnMuZm9yRWFjaCh0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbi5iaW5kKHRoaXMpKTtcbiAgICAgIGxldCBwZXJmZWN0TWF0Y2hGb3VuZD1mYWxzZTtcbiAgICAgIGZvciAoY29uc3Qgc3VnIG9mIHRvcFN1Z2dlc3Rpb25zKVxuICAgICAge1xuICAgICAgICBpZih0aGlzLnBhcnNlU2luZ2xlU3VnZ2VzdGlvbihzdWcsIHNvdXJjZSkgPT09IHRydWUgKVxuICAgICAgICB7XG4gICAgICAgICAgcGVyZmVjdE1hdGNoRm91bmQ9dHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZighc291cmNlKVxuICAgICAge1xuICAgICAgICBpZiAoKHRvcFN1Z2dlc3Rpb25zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmVtcHR5UmVzcG9uc2UpICYmIHRoaXMubm90SW5MaXN0QWxsb3dlZCkge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMucHVzaCh7c3RyaW5nOiB0aGlzLnNlYXJjaFRleHQsICdub3QtaW4tbGlzdCc6IHRydWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsID09PSBTdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUgfHwgdGhpcy5zdWdnZXN0aW9uTGV2ZWwgPT09IFN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyKVxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgY29uc29sZS53YXJuKCdib3ggbnVtYmVyOjogbm8gbWF0Y2ggZm91bmQgLSBjdXJyZW50IGFkZHJlc3M6ICcsIHRoaXMuc2VsZWN0ZWRBZGRyZXNzKTtcbiAgICAgICAgICBpZiggISBwZXJmZWN0TWF0Y2hGb3VuZClcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBmYWtlU3VnID0gey4uLnRoaXMuc2VsZWN0ZWRBZGRyZXNzfTtcbiAgICAgICAgICAgIGZha2VTdWcuYm94TnVtYmVyID0gdGhpcy5zZWFyY2hUZXh0O1xuICAgICAgICAgICAgZmFrZVN1Zy5zdHJpbmc9dGhpcy5zZWFyY2hUZXh0O1xuICAgICAgICAgICAgZmFrZVN1Zy5pc0NvbXBsZXRlPWZhbHNlO1xuICAgICAgICAgICAgLy90aGlzLmNsaWNrU3VnZ2VzdGlvbihudWxsLCBmYWtlU3VnKTsgLy8gZG8gbm90IGRvIHRoaXNcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYmV0dGVyICFcbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChmYWtlU3VnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgLy8gSWYgcHJlZmlsbGluZywgdGhlbiBjaGVjayBpZiBubyBtYXRjaCBmb3IgYSBub24tZW1wdHkgYm94TnVtYmVyXG4gICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHNpbXVsYXRlIHRoZSBzZWxlY3Rpb24gb2YgdGhlICdub3QtaW4tbGlzdCcgc3VnZ2VzdGlvblxuICAgICAgICBpZih0aGlzLnByZWZpbGxpbmcgJiYgdGhpcy5ub3RJbkxpc3RBbGxvd2VkXG4gICAgICAgICAgICAmJiB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gZmFsc2VcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlciAhPT0gbnVsbFxuICAgICAgICAgICAgJiYgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlci5sZW5ndGggPiAwKVxuICAgICAgICB7XG4gICAgICAgICAgLy8gY29uc3Qgbm90SW5MaXN0U3VnZ2VzdGlvbiA9IHtzdHJpbmc6IHRoaXMuc2VhcmNoVGV4dCwgJ25vdC1pbi1saXN0JzogdHJ1ZX07XG4gICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IHRoaXMucHJlZmlsbEJ1aWxkTm90SW5MaXN0U3VnZ2VzdGlvbigpO1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ0JPWCBOVU1CRVIgLSBQUkVGSUxMIE5PVCBJTiBMSVNUIFNVR0dFU1RJT046Jywgc3VnZ2VzdGlvbik7IH1cbiAgICAgICAgICB0aGlzLnByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uKHRvcFN1Z2dlc3Rpb25zLCBzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByZWZpbGxCdWlsZE5vdEluTGlzdFN1Z2dlc3Rpb24oKTogYW55IHtcbiAgICBjb25zdCBub3RJbkxpc3RTdWdnZXN0aW9uID0ge3N0cmluZzogdGhpcy5zZWFyY2hUZXh0LCAnbm90LWluLWxpc3QnOiB0cnVlfTtcbiAgICBjb25zdCBzdHJlZXROdW1iZXJTdWdnZXN0aW9uID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsU3RyZWV0TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbjtcbiAgICBjb25zdCBjb21iaW5lZCA9IHsuLi5zdHJlZXROdW1iZXJTdWdnZXN0aW9uLmFkZHJlc3MsIC4uLm5vdEluTGlzdFN1Z2dlc3Rpb259O1xuICAgIGRlbGV0ZSBjb21iaW5lZC5tYWlsQm94aWQ7XG4gICAgZGVsZXRlIGNvbWJpbmVkLnN1ZmZpeElkO1xuICAgIGNvbWJpbmVkLmJveE51bWJlciA9IGNvbWJpbmVkLnN0cmluZztcbiAgICBjb21iaW5lZC5zZWFyY2hCYXJTdHJpbmcgPSBjb21iaW5lZC5zdHJpbmc7XG4gICAgY29tYmluZWQuaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgc3RyZWV0TnVtYmVyU3VnZ2VzdGlvbi5hZGRyZXNzID0gY29tYmluZWQ7XG4gICAgcmV0dXJuIHN0cmVldE51bWJlclN1Z2dlc3Rpb247XG4gIH1cblxuICBwYXJzZVNpbmdsZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogYW55LCBzb3VyY2U6IFNvdXJjZVR5cGUpOiBib29sZWFuICB7XG4gICAgbGV0IHN1Z2dlc3Rpb25Ub0FkZDogYW55O1xuICAgIGxldCBpc1BlcmZlY3RNYXRjaD1mYWxzZTtcblxuICAgIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVGcmVuY2goKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdmcmVuY2gnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5mcmVuY2g7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVEdXRjaCgpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2R1dGNoJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uZHV0Y2g7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UuaXNMb2NhbGVHZXJtYW4oKSAmJiBzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdnZXJtYW4nKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5nZXJtYW47XG4gICAgfSBlbHNlIGlmIChzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdhZGRyZXNzJykpIHtcbiAgICAgIHN1Z2dlc3Rpb25Ub0FkZCA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICB9XG4gICAgaWYgKHN1Z2dlc3Rpb25Ub0FkZCkge1xuICAgICAgaWYgKHN1Z2dlc3Rpb24ubWVzc2FnZXMpIHtcbiAgICAgICAgc3VnZ2VzdGlvblRvQWRkLm1lc3NhZ2VzID0gc3VnZ2VzdGlvbi5tZXNzYWdlcztcbiAgICAgIH1cbiAgICAgIGlmIChzdWdnZXN0aW9uVG9BZGQuYm94TnVtYmVyID09PSB0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zLnB1c2goc3VnZ2VzdGlvblRvQWRkKTtcbiAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRClcbiAgICAgIHtcbiAgICAgICAgc3VnZ2VzdGlvbi5hZGRyZXNzID0gc3VnZ2VzdGlvblRvQWRkO1xuICAgICAgICBpc1BlcmZlY3RNYXRjaD10aGlzLnByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbkxldmVsICE9PSBTdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldEFuZEJveE51bWJlcilcbiAgICAgIHtcbiAgICAgICAgc3VnZ2VzdGlvbi5hZGRyZXNzID0gc3VnZ2VzdGlvblRvQWRkO1xuICAgICAgICBpc1BlcmZlY3RNYXRjaD10aGlzLmNoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pO1xuICAgICAgICBpZighIGlzUGVyZmVjdE1hdGNoKVxuICAgICAgICB7XG4gICAgICAgICAgLy8gc2VlbXMgbm90aGluZyB0byBkbz9cbiAgICAgICAgICAvLyBObyBuZWVkIHRvIG5vdGlmeSBmb3IgYSBpbmNvbXBsZXRlIGFkZHJlc3NcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXNQZXJmZWN0TWF0Y2g7XG4gIH1cblxuICBjaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTogYm9vbGVhblxuICB7XG4gICAgLy9pZiAoICF0aGlzLmFkZHJlc3NJc0NvbXBsZXRlIClcbiAgICB7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdib3ggbnVtYmVyIC0gY2hlY2tpbmcgc3VnZ2VzdGlvbiBmb3IgcGVyZmVjdCBtYXRjaCcsIHN1Z2dlc3Rpb24sIHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWdBZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbkJveE51bWJlciA9IHRoaXMudHJhbnNmb3JtQm94TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcygnJyArIHN1Z0FkZHJlc3MuYm94TnVtYmVyKTtcblxuICAgICAgaWYgKHN1Z2dlc3Rpb25Cb3hOdW1iZXIgPT09ICgnJyArIHRoaXMuc2VhcmNoVGV4dCkgKVxuICAgICAge1xuICAgICAgICAvL3RoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTvDp1xuICAgICAgICAvL3RoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uO1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBzdWdBZGRyZXNzLmJveE51bWJlcjtcbiAgICAgICAgaWYgKHN1Z0FkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBzdWdBZGRyZXNzLmlzQ29tcGxldGUgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihudWxsLCBzdWdBZGRyZXNzKTtcbiAgICAgICAgICAvLyB0aGlzLmFkZHJlc3NJc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQUREUkVTUyBDT01QTEVURSBPTiBCT1ggTlVNQkVSICEnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgfVxuXG4gIHByZWZpbGxDaGVja0ZvclBlcmZlY3RNYXRjaChzdWdnZXN0aW9uKTogYm9vbGVhblxuICB7XG4gICAgLy9pZiAoICF0aGlzLmFkZHJlc3NJc0NvbXBsZXRlIClcbiAgICB7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdib3ggbnVtYmVyIC0gUFJFRklMTCBjaGVja2luZyBzdWdnZXN0aW9uIGZvciBwZXJmZWN0IG1hdGNoJywgdGhpcy5wcmVmaWxsRGF0YSwgc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWdBZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbkJveE51bWJlciA9IHRoaXMudHJhbnNmb3JtQm94TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcygnJyArIHN1Z0FkZHJlc3MuYm94TnVtYmVyKTtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2NvbXBhcmluZyBib3ggbnVtYmVycycsIHN1Z2dlc3Rpb25Cb3hOdW1iZXIsIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlcik7XG4gICAgICB9XG4gICAgICBpZiAoc3VnZ2VzdGlvbkJveE51bWJlciA9PT0gKCcnICsgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyKSApXG4gICAgICB7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb247XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHN1Z0FkZHJlc3MuYm94TnVtYmVyO1xuICAgICAgICBpZiAoc3VnQWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIHN1Z0FkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuY2xpY2tTdWdnZXN0aW9uKG51bGwsIHN1Z0FkZHJlc3MpO1xuICAgICAgICAgIC8vIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBRERSRVNTIENPTVBMRVRFIE9OIEJPWCBOVU1CRVIgIScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvKiBlbHNlXG4gICAge1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnQWRkcmVzcyBjb21wbGV0ZSwgc2tpcHBpbmcgc3VnZ2VzdGlvbiBjaGVjaycsIHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgIH0gKi9cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2VfbmV3KHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSBmYWxzZTtcbiAgICB0aGlzLmVtcHR5UmVzcG9uc2UgPSB0cnVlO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIH1cbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCk7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCA9PT0gJycpIHtcbiAgICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgKz0gMTtcbiAgICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSB0aGlzLnNlcXVlbmNlTnVtYmVyO1xuICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgICBpZih0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSB8fCB0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLmxvZygnZG8gbm90IHVzZSBzdWdnZXN0aW9ucyBmb3IgYm94IG51bWJlcicpO1xuICAgICAgICB0aGlzLmJveE51bWJlckNoYW5nZWQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZih0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSB8fCB0aGlzLnN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0TnVtYmVyKVxuICAgICAge1xuICAgICAgICBjb25zb2xlLmxvZygnZG8gbm90IHVzZSBzdWdnZXN0aW9ucyBmb3IgYm94IG51bWJlcicpO1xuICAgICAgICB0aGlzLmJveE51bWJlckNoYW5nZWQuZW1pdCh0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBpZighdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpe1xuICAgICAgICAgIGxldCBzdWdnZXN0aW9uID0ge1xuICAgICAgICAgICAgJ3N0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgJ211bmljaXBhbGl0eU5hbWUnOiB0aGlzLmxvY2FsaXR5LFxuICAgICAgICAgICAgJ2xvY2FsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgICAncG9zdGFsQ29kZSc6IHRoaXMucG9zdGFsQ29kZSxcbiAgICAgICAgICAgICdzZWFyY2hCYXJTdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICdzdHJlZXROYW1lJzogdGhpcy5zdHJlZXROYW1lLFxuICAgICAgICAgICAgJ2hvdXNlTnVtYmVyJzp0aGlzLnN0cmVldE51bWJlcixcbiAgICAgICAgICAgICdib3hOdW1iZXInOnRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb24pO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aGlzLmdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5idWlsZElucHV0V29yZExpc3QoKTtcbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2Uoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IGZhbHNlO1xuICAgIHRoaXMuZW1wdHlSZXNwb25zZSA9IHRydWU7XG4gICAgdGhpcy5yZXNldEFycm93U2VsZWN0ZWRJbmRleCgpO1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0ID09PSAnJykge1xuICAgICAgdGhpcy5zZXF1ZW5jZU51bWJlciArPSAxO1xuICAgICAgdGhpcy5jb25zdW1lZE51bWJlciA9IHRoaXMuc2VxdWVuY2VOdW1iZXI7XG4gICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lIHx8IHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXROdW1iZXIpXG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkbyBub3QgdXNlIHN1Z2dlc3Rpb25zIGZvciBib3ggbnVtYmVyJyk7XG4gICAgICAgIHRoaXMuYm94TnVtYmVyQ2hhbmdlZC5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lIHx8IHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXROdW1iZXIpXG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkbyBub3QgdXNlIHN1Z2dlc3Rpb25zIGZvciBib3ggbnVtYmVyJyk7XG4gICAgICAgIHRoaXMuYm94TnVtYmVyQ2hhbmdlZC5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKCF0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCl7XG4gICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCkge1xuICAgICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID0gdHJ1ZTtcblxuICAgICAgICAgIGxldCBzdWdnZXN0aW9uID17XG4gICAgICAgICAgJ2FkZHJlc3MnOiB7XG4gICAgICAgICAgICAnc3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnbXVuaWNpcGFsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgICAnbG9jYWxpdHlOYW1lJzogdGhpcy5sb2NhbGl0eSxcbiAgICAgICAgICAgICdwb3N0YWxDb2RlJzogdGhpcy5wb3N0YWxDb2RlLFxuICAgICAgICAgICAgJ3NlYXJjaEJhclN0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgJ3N0cmVldE5hbWUnOiB0aGlzLnN0cmVldE5hbWUsXG4gICAgICAgICAgICAnaG91c2VOdW1iZXInOnRoaXMuc3RyZWV0TnVtYmVyLFxuICAgICAgICAgICAgJ2JveE51bWJlcic6dGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9fVxuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uID0gc3VnZ2VzdGlvblxuICAgICAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIHRoaXMucHJlZmlsbEFuYWx5emVEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgIGxldCBzdWdnZXN0aW9uID0ge1xuICAgICAgICAgICdzdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAnbXVuaWNpcGFsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgJ2xvY2FsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgJ3Bvc3RhbENvZGUnOiB0aGlzLnBvc3RhbENvZGUsXG4gICAgICAgICAgJ3NlYXJjaEJhclN0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICdzdHJlZXROYW1lJzogdGhpcy5zdHJlZXROYW1lLFxuICAgICAgICAgICdob3VzZU51bWJlcic6dGhpcy5zdHJlZXROdW1iZXIsXG4gICAgICAgICAgJ2JveE51bWJlcic6dGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICB0aGlzLmdldFRvcFN1Z2dlc3Rpb25zKHNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYnVpbGRJbnB1dFdvcmRMaXN0KCk7XG4gIH1cblxuXG4gIGNsaWNrU3VnZ2VzdGlvbihldmVudDogYW55LCBzdWdnZXN0aW9uPzogYW55KSB7XG4gICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IGZhbHNlO1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgICBpZiAoc3VnZ2VzdGlvbi5zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHN1Z2dlc3Rpb24uc3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgICAvLyBpZiAoc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpKSB7XG4gICAgICAvLyAgIHRoaXMuc2hvd0FkZHJlc3NJc1ZhbGlkYXRlZCgpO1xuICAgICAgLy8gfVxuICAgICAgaWYgKHN1Z2dlc3Rpb25bJ25vdC1pbi1saXN0J10pIHtcbiAgICAgICAgc3VnZ2VzdGlvbiA9IHRoaXMubW9kaWZ5U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgc3VnZ2VzdGlvbi5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIG1vZGlmeVNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uOiBvYmplY3QpIHtcbiAgICBjb25zdCBjb21iaW5lZCA9IHsuLi50aGlzLnNlbGVjdGVkQWRkcmVzcywgLi4uc3VnZ2VzdGlvbn07XG4gICAgZGVsZXRlIGNvbWJpbmVkLm1haWxCb3hpZDtcbiAgICBkZWxldGUgY29tYmluZWQuc3VmZml4SWQ7XG4gICAgY29tYmluZWQuYm94TnVtYmVyID0gY29tYmluZWQuc3RyaW5nO1xuICAgIGNvbWJpbmVkLnNlYXJjaEJhclN0cmluZyA9IGNvbWJpbmVkLnN0cmluZztcbiAgICBjb21iaW5lZC5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICByZXR1cm4gY29tYmluZWQ7XG4gIH1cblxuICBzZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2JveCBudW1iZXI6OnNldFNlbGVjdGVkQWRkcmVzcycsIHN1Z2dlc3Rpb24pO1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBzdWdnZXN0aW9uLmlzQ29tcGxldGUgPT09IHRydWUpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChzdWdnZXN0aW9uKTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0ZWRBZGRyZXNzKCkge1xuICAgIHRoaXMuYWRkcmVzc0NoYW5nZWQuZW1pdChudWxsKTtcbiAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IGZhbHNlO1xuICB9XG5cbiAgLypcbiAgc2V0VmFsaWRhdGlvbk1lc3NhZ2UodHJhbnNsYXRpb25Db2RlLCBvcHRpb25zPywgcmV0cmFuc2xhdGVPcHRpb25zPykge1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAocmV0cmFuc2xhdGVPcHRpb25zICYmIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnNbJ3VudHJhbnNsYXRlZC1zcHJpbnRmJ10pICYmXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucy5zcHJpbnRmKSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkRWxlbWVudHMgPSBbXTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zWyd1bnRyYW5zbGF0ZWQtc3ByaW50ZiddLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICB0cmFuc2xhdGVkRWxlbWVudHMucHVzaCh0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoZWxlbWVudCkpO1xuICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICApO1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMuc3ByaW50ZiA9IHRyYW5zbGF0ZWRFbGVtZW50cztcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZUNvZGUgPSB0cmFuc2xhdGlvbkNvZGU7XG4gICAgLy8gZW1pdCB0cmFuc2xhdGlvbiBrZXkgdG8gd3JhcHBlciBjb21wb25lbnQgZm9yIGN1c3RvbWl6ZWQgdHJhbnNsYXRpb25zXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VDb2RlLCB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucyk7XG4gICAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQodGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQodGhpcy52YWxpZGF0aW9uTWVzc2FnZUNvZGUpO1xuICAgIH1cbiAgfVxuICAqL1xuXG4gIGVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIG9wdGlvbnM/OiBzdHJpbmdbXSkge1xuICAgIC8vIE1vbWVudGx5LCBvcHRpb25zIGFyZSBOT1QgdXNlZDsgc28gZGF0YSB0eXBlIG9mIHRoZXNlIG9wdGlvbnMgd2lsbCBiZSByZXZpZXdlZCBvbmNlIG5lZWRlZC5cbiAgICBpZiAodmFsaWRhdGlvbk1lc3NhZ2VUeXBlID09PSBudWxsIHx8IHZhbGlkYXRpb25NZXNzYWdlVHlwZSA9PT0gdW5kZWZpbmVkICkge1xuICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gZW1pdCB2YWxpZGF0aW9uIG1lc3NhZ2UgLSBtZXNzYWdlIGtleSBpcyBpbnZhbGlkIScsIHZhbGlkYXRpb25NZXNzYWdlVHlwZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoICh2YWxpZGF0aW9uTWVzc2FnZVR5cGUpIHtcblxuICAgICAgY2FzZSBWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19Ob3RfRm91bmQ6XG4gICAgICBjYXNlIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX1ZhbGlkYXRlZDpcbiAgICAgIGNhc2UgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLlNlcnZpY2VfVW5hdmFpbGFibGU6IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgICAgICAvLyB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQobWVzc2FnZSk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHttZXNzYWdlVHlwZTogdmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCB0cmFuc2xhdGVkTWVzc2FnZTogbWVzc2FnZX0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTphbGlnblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBlbWl0IHZhbGlkYXRpb24gbWVzc2FnZSAtIG1lc3NhZ2Uga2V5IE5PVCBzdXBwb3J0ZWQhJywgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gIH1cbiAgc2hvd0FkZHJlc3NJc1ZhbGlkYXRlZCgpIHtcbiAgICAvLyB0aGlzLnNldFZhbGlkYXRpb25NZXNzYWdlKCdhZGRyZXNzLXZhbGlkYXRlZCcpO1xuICAgIHRoaXMuZW1pdFRyYW5zbGF0ZWRWYWxpZGF0aW9uTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19WYWxpZGF0ZWQpO1xuICB9XG5cbiAgY2hlY2tLZXlEb3duKGV2ZW50KSB7XG4gICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgLy8gZG93biBrZXksIGluY3JlbWVudCBzZWxlY3RlZEluZGV4XG4gICAgICBjYXNlIDQwOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm1vdmVBcnJvd1NlbGVjdGVkSW5kZXhEb3duKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICAvLyB1cCBrZXksIGRlY3JlbWVudCBzZWxlY3RlZEluZGV4XG4gICAgICBjYXNlIDM4OlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm1vdmVBcnJvd1NlbGVjdGVkSW5kZXhVcCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIHJpZ2h0IGFycm93IGtleVxuICAgICAgY2FzZSAzOTpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihldmVudCwgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy50eXBlQWhlYWRXb3JkICYmIHRoaXMudHlwZUFoZWFkSXNTaG93bigpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlYXJjaFRleHQodGhpcy5icFR5cGVBaGVhZCk7XG4gICAgICAgICAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyB0YWIga2V5XG4gICAgICBjYXNlIDk6XG4gICAgICAgIGlmICghdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdEZpcnN0SW5MaXN0T2ZTdWdnZXNpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDY6XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gZW50ZXIgcHJlc3NlZFxuICAgICAgY2FzZSAxMzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29ySXNPblN1Z2dlc3Rpb25MaXN0KCkpIHtcbiAgICAgICAgICB0aGlzLmNsaWNrU3VnZ2VzdGlvbihldmVudCwgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuICB9XG4gIGNoZWNrS2V5VVAoZXZlbnQpXG4gIHtcbiAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICBcbiAgICAgIGNhc2UgODpcbiAgICAgICBcbiAgICAgICAgaWYodGhpcy5zZWFyY2hUZXh0Lmxlbmd0aD4wKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ1BBUlRJQUxfQ0xFQVJfQk9YX05VTUJFUicpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdCT1hfTlVNQkVSJyk7XG4gICAgICAgIH1cbiAgICAgICAgIGJyZWFrOyAgICAgICAgIFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuICAgIFxuICB9XG4gIGNsZWFyV2lkZ2V0KCkge1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhclNlYXJjaFRleHQoKTtcbiAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICB0aGlzLmNsZWFyVHlwZUFoZWFkKCk7XG4gICAgdGhpcy5wcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgLy8gdGhpcy5wcmVmaWxsaW5nID0gZmFsc2U7XG4gIH1cblxuICBjbGVhclNlYXJjaFRleHQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gIH1cblxuICB0eXBlQWhlYWRJc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLmJwVHlwZUFoZWFkICYmIHRoaXMuYnBUeXBlQWhlYWQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG5cbiAgbW92ZUFycm93U2VsZWN0ZWRJbmRleERvd24oKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCArIDEgIT09IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXgrKztcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZEluZGV4LCB0aGlzLnNlbGVjdGVkSW5kZXggLSAxKTtcbiAgICB9XG4gIH1cblxuICBtb3ZlQXJyb3dTZWxlY3RlZEluZGV4VXAoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCAtIDEgIT09IC0yKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXgtLTtcbiAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZEluZGV4LCB0aGlzLnNlbGVjdGVkSW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICBjdXJzb3JJc09uU3VnZ2VzdGlvbkxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJbmRleCA+PSAwO1xuICB9XG5cbiAgc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbihuZXdWYWwsIG9sZFZhbCkge1xuICAgIGlmIChuZXdWYWwgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuZXdWYWwgIT09IC0xKSB7XG4gICAgICBpZiAob2xkVmFsID09PSAtMSkge1xuICAgICAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoVGV4dDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dCh0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0uc3RyaW5nKTtcbiAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHRoaXMubGFzdFNlYXJjaFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtYXlTaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPiAwO1xuICB9XG5cbiAgY2xlYXJJbnB1dChmb2N1cz8sIGVtaXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICB0aGlzLnByZXZpb3VzSW5kZXggPSAtMTtcbiAgICB0aGlzLmxhc3RTZWFyY2hWYWx1ZSA9ICcnO1xuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuICAgIHRoaXMuY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgaWYgKGZvY3VzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJveE51bWJlclNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLy8gdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KG51bGwpO1xuICAgIGlmKGVtaXQpIHtcbiAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KC8qJ0JPWF9OVU1CRVInKi8gSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclN1Z2dlc3Rpb25zKCkge1xuICAgIHRoaXMud29yZExpc3QgPSBbXTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc1dvcmRMaXN0ID0gW107XG4gIH1cblxuICBjbGVhclR5cGVBaGVhZCgpIHtcbiAgICB0aGlzLmJwVHlwZUFoZWFkID0gJyc7XG4gIH1cblxuICBjbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICB0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5tZXNzYWdlQ2hhbmdlZC5lbWl0KHttZXNzYWdlVHlwZTogbnVsbCwgdHJhbnNsYXRlZE1lc3NhZ2U6IHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlfSk7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMgPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gbnVsbDtcbiAgfVxuXG4gIHNldFNlYXJjaFRleHQodmFsdWUpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZTtcbiAgfVxuXG4gIHNlbGVjdEZpcnN0SW5MaXN0T2ZTdWdnZXNpb25zKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XG4gICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oKTtcbiAgICB0aGlzLnNldFNlYXJjaFRleHRCYXNlZE9uQXJyb3dTZWxlY3Rpb24odGhpcy5zZWxlY3RlZEluZGV4LCB0aGlzLnNlbGVjdGVkSW5kZXggLSAxKTtcbiAgfVxuXG4gIGNoYW5nZVNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHN1Z2dlc3Rpb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICB9XG5cbiAgc2hvd0FkZHJlc3NOb3RGb3VuZE1lc3NhZ2UoKSB7XG4gICAgLy8gdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZSgnYWRkcmVzcy1ub3QtZm91bmQnKTtcbiAgICB0aGlzLmVtaXRUcmFuc2xhdGVkVmFsaWRhdGlvbk1lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfTm90X0ZvdW5kKTtcbiAgfVxuXG4gIGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuICh0aGlzLmxvY2FsaXR5ID09PSAnJyB8fCB0aGlzLnBvc3RhbENvZGUgPT09ICcnIHx8IHRoaXMubWluTGV2ZWwgPiBBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gIH1cblxuICBvbklucHV0Q2xpY2soKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnYm94IG51bWJlciBjbGljaycpOyB9XG4gIH1cbn1cbiIsIjxzcGFuICpuZ0lmPVwibGFiZWxSZXNvdXJjZUtleVwiPnt7IGxhYmVsUmVzb3VyY2VLZXkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbjxkaXYgY2xhc3M9XCJicGFhYy1kcm9wZG93blwiPlxuICAgIDxkaXYgY2xhc3M9XCJicGFhYy1zZWFyY2gtYmFyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJicGFhYy1pbnB1dC13aWR0aFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiIC0tPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgI2JveE51bWJlclNlYXJjaElucHV0IGNsYXNzPVwiYnBhYWMtaW5wdXRcIiBcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAgICAgIChrZXl1cCkgPSAoY2hlY2tLZXlVUCgkZXZlbnQpKVxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIiFpc1BhcmFtc0NvbXBsZXRlKCkgPyAnbGlnaHRncmV5JyA6ICcnXCIgXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIiBnZXRUZXh0Q29sb3IoKSBcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc3RyZWV0TnVtYmVyIHx8IHN0cmVldE51bWJlci50cmltKCkubGVuZ3RoID09PSAwXCIgKGtleWRvd24pPVwiY2hlY2tLZXlEb3duKCRldmVudClcIiBcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dENoYW5nZSgpXCIgKGNsaWNrKT1cIm9uSW5wdXRDbGljaygpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiBpZD1cImJveE51bWJlcklucHV0RmllbGRcIiBbYXR0ci50aXRsZV09XCJwbGFjZUhvbGRlclRleHRcIiBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZUhvbGRlclRleHRcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIC8+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiYnBhYWMtY2xlYXItYm94TmItYnV0dG9uXCIgKm5nSWY9XCJtYXlTaG93Q2xlYXJCdXR0b24oKVwiIChjbGljayk9XCJjbGVhcklucHV0KHRydWUpXCIgY2xhc3M9XCJicGFhYy1jbGVhclwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tPGRpdiBuZy10cmFuc2NsdWRlPjwvZGl2Pi0tPlxuICAgICAgICA8aW5wdXQgaWQ9XCJicGFhYy1ib3hOYi10eXBlYWhlYWRcIiB0eXBlPVwidGV4dFwiIGRpc2FibGVkIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFsobmdNb2RlbCldPVwiYnBUeXBlQWhlYWRcIiAvPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImFkZHJlc3NJc1ZhbGlkYXRlZFwiIGNsYXNzPVwiYm94TmJDaGVrbWFya1wiPjxzcGFuIGNsYXNzPVwiY2hlY2ttYXJrXCI+PC9zcGFuPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IFtoaWRkZW5dPVwiY29sbGFwc2VEcm9wZG93blwiIGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tbWVudS1jb250YWluZXJcIiBcbiAgICAgICAgKm5nSWY9XCJzdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldEFuZEJveE51bWJlciAmJiAgc3VnZ2VzdGlvbnMgJiYgc3VnZ2VzdGlvbnMubGVuZ3RoPjBcIj5cbiAgICAgICAgPGRpdiAjYm94TnVtYmVyTGlzdCBbYXBwVmlzaWJsZVN1Z2dlc3Rpb25dPVwidmlzaWJsZVN1Z2dlc2lvbkNvdW50XCIgaWQ9XCJicGFhYy1ib3gtZHJvcGRvd25cIiBjbGFzcz1cImJwYWFjLWRyb3Bkb3duLW1lbnVcIj5cbiAgICAgICAgICAgIDx1bCByb2xlPVwibGlzdGJveFwiIGlkPVwiYnBhYWMtYm94TmItc3VnZ2VzdGlvbnNMaXN0XCIgY2xhc3M9XCJsaXN0LXVuc3R5bGVkXCI+XG4gICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJvcHRpb25cIiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHN1Z2dlc3Rpb25zOyBsZXQgaWR4ID0gaW5kZXhcIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6KHNlbGVjdGVkSW5kZXg9PWlkeCl9XCIgXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJjbGlja1N1Z2dlc3Rpb24oJGV2ZW50LCBvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzZWxlY3RlZEluZGV4PWlkeFwiIChtb3VzZWxlYXZlKT1cInNlbGVjdGVkSW5kZXg9LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvcHRpb25cIiBbaW5uZXJIdG1sXT1cIm9wdGlvblsnbm90LWluLWxpc3QnXSA/IGVtcHR5UmVzcG9uc2VUZXh0IDogb3B0aW9uLnN0cmluZyB8IGhpZ2hsaWdodFN1Z2dlc3Rpb24gOiB3b3JkTGlzdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
988
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50L3NyYy9saWIvYm94LW51bWJlci9ib3gtbnVtYmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQvc3JjL2xpYi9ib3gtbnVtYmVyL2JveC1udW1iZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBa0QsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUc3SixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUs3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7OztBQU96RSxNQUFNLE9BQU8sa0JBQWtCO0lBb0c3QixZQUNVLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxjQUE4QjtRQUg5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWdCLEdB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Y0FBYztzQkFBdEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFFRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUdQLGdCQUFnQjtzQkFEZixNQUFNO2dCQUVHLHlCQUF5QjtzQkFBbEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJlZmlsbGVkUGFyYW1ldGVycyB9IGZyb20gJy4uL3V0aWxzL3ByZWZpbGxlZC1wYXJhbWV0ZXJzJztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlVHlwZSB9IGZyb20gJy4uL2VudW0vdmFsaWRhdGlvbi1tZXNzYWdlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FkcmVzcy5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBVbmljb2RlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VuaWNvZGUuc2VydmljZSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAnLi4vdXRpbHMvZG9taGFuZGxlcic7XG5pbXBvcnQgeyBBRERSRVNTTEVWRUwgfSBmcm9tICcuLi9lbnVtL2FkZHJlc3MtbGV2ZWwuZW51bSc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtZXRlcnMgfSBmcm9tICcuLi9tb2RlbC9xdWVyeS1wYXJhbWV0ZXJzLm1vZGVsJztcbmltcG9ydCB7IFByZWZpbGxEYXRhIH0gZnJvbSAnLi4vdXRpbHMvcHJlZmlsbC1kYXRhJztcbmltcG9ydCB7IFNvdXJjZVR5cGUgfSBmcm9tICcuLi9lbnVtL3NvdXJjZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgUHJlZmlsbEV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvcHJlZmxsbC5ldmVudCc7XG5pbXBvcnQgeyBJbnB1dE5hbWVUeXBlIH0gZnJvbSAnLi4vZW51bS9pbnB1dC1uYW1lLmVudW0nO1xuaW1wb3J0IHsgU3VnZ2VzdGlvbkxldmVsVHlwZSB9IGZyb20gJy4uL2VudW0vc3VnZ2VzdGlvbi1sZXZlbC10eXBlLmVudW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicC1ib3gtbnVtYmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JveC1udW1iZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ib3gtbnVtYmVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQm94TnVtYmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgQFZpZXdDaGlsZCgnYm94TnVtYmVyU2VhcmNoSW5wdXQnLCB7c3RhdGljOiBmYWxzZX0gKSBib3hOdW1iZXJTZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnYm94TnVtYmVyTGlzdCcsIHtzdGF0aWM6IGZhbHNlfSApIGJveE51bWJlckxpc3Q6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAvLyAyMDIwLTA2LTE1XG4gIC8vIEBJbnB1dCgpXG4gIC8vIG9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YTtcbiAgQElucHV0KCkgc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGxhYmVsUmVzb3VyY2VLZXkgPSAnY29tbW9uLmxhYmVsLmJveE51bWJlcic7XG4gIEBJbnB1dCgpIG1heFN1Z2dlc2lvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc2lvbkNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhID0gJyc7XG4gIEBJbnB1dCgpIGJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgYWRkcmVzc1BhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgQElucHV0KCkgcG9zdGFsQ29kZTogc3RyaW5nO1xuICBASW5wdXQoKSBsb2NhbGl0eTogc3RyaW5nO1xuICBASW5wdXQoKSBzdHJlZXROYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0cmVldE51bWJlcjogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxlY3RlZEFkZHJlc3M7XG4gIEBJbnB1dCgpIG5vdEluTGlzdEFsbG93ZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFsbG93Tm9WYWxpZGF0aW9uOiBib29sZWFuO1xuICBASW5wdXQoKSB2YWxpZGF0ZWRCeUJhY2tlbmQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG51bWJlck9mRXhjZXB0aW9uczogbnVtYmVyO1xuXG4gIC8vIEB0cy1pZ25vcmVcbiAgQElucHV0KCkgc2V0IGlucHV0TGFuZyh2YWw6IHN0cmluZykge1xuICAgIC8vIGNvbnNvbGUubG9nKCdzZXQgbGFuZycsIHZhbCk7XG4gICAgdGhpcy5sb2NhbGVTZXJ2aWNlLmNoYW5nZUxhbmcodmFsKTtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKHZhbCkuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdzZXQgbGFuZyBhZnRlciBzdWJzY3JpYmUnLCByZXMpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZExhbmd1YWdlKCk7XG4gICAgICAgIC8vIGlmIChyZXMgIT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBASW5wdXQoKSBtZXNzYWdlT3B0aW9uID0gJ1knO8K1XG5cbiAgQElucHV0KClcbiAgaXNSZWFkb25seT1mYWxzZTtcblxuICBASW5wdXQoKVxuICBzdWdnZXN0aW9uTGV2ZWw6IFN1Z2dlc3Rpb25MZXZlbFR5cGU7XG5cbiAgQElucHV0KCkgbmlzOUluUmVzcG9uc2U6IGJvb2xlYW5cbiAgQElucHV0KCkgYnVzaW5lc3NOYW1lSW5SZXNwb25zZTogYm9vbGVhblxuICBAT3V0cHV0KCkgbWVzc2FnZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjx7bWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZ30+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYWRkcmVzc0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBibHVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdGV4dENoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGVtcHR5UmVzcG9uc2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIGNsZWFySW5wdXRFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBwcmVmaWxsRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8UHJlZmlsbEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UHJlZmlsbEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBib3hOdW1iZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID1uZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG5cbiAgYWRkcmVzc0lzVmFsaWRhdGVkOiBib29sZWFuO1xuICBzdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbiAgc3VnZ2VzdGlvbnM6IGFueTtcbiAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICBsYXN0U2VhcmNoVmFsdWU6IHN0cmluZztcbiAgd29yZExpc3Q6IGFueTtcbiAgc3VnZ2VzdGlvbnNXb3JkTGlzdDogYW55O1xuICBicFR5cGVBaGVhZDogc3RyaW5nO1xuICBwbGFjZUhvbGRlclRleHQ6IHN0cmluZztcbiAgc2tpcE5leHRCbHVyOiBib29sZWFuOyAvLyBPbkJsdXIgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHN1Z2dlc3Rpb24vdmFsaWRhdG9yIGJ1dHRvblxuICBlcnJvckNvZGU6IGFueTtcblxuICBtaW5MZXZlbDogbnVtYmVyO1xuICBzZWxlY3RlZEluZGV4OiBudW1iZXI7XG4gIGNvbGxhcHNlRHJvcGRvd246IGJvb2xlYW47XG4gIHR5cGVBaGVhZFdvcmQ6IHN0cmluZztcbiAgc2VxdWVuY2VOdW1iZXI6IG51bWJlcjtcbiAgY29uc3VtZWROdW1iZXI6IG51bWJlcjtcbiAgc2VsZWN0aW9uQ2hhbmdlZDogYm9vbGVhbjtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VDb2RlID0gbnVsbDtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zID0gbnVsbDtcbiAgZW1wdHlSZXNwb25zZVRleHQ6IHN0cmluZztcbiAgZW1wdHlSZXNwb25zZTogYm9vbGVhbjtcblxuICBwcmVmaWxsaW5nID0gZmFsc2U7XG4gIGlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG5cbiAgU3VnZ2VzdGlvbkxldmVsVHlwZT1TdWdnZXN0aW9uTGV2ZWxUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWRkcmVzc1NlcnZpY2U6IEFkZHJlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1bmljb2RlU2VydmljZTogVW5pY29kZVNlcnZpY2UsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgLy8gaW5zdGFuY2UgcHJvcGVydGllc1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5wcmV2aW91c0luZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0U2VhcmNoVmFsdWUgPSAnJztcbiAgICB0aGlzLndvcmRMaXN0ID0gW107XG4gICAgdGhpcy5zdWdnZXN0aW9uc1dvcmRMaXN0ID0gW107XG4gICAgdGhpcy5icFR5cGVBaGVhZCA9ICcnO1xuICAgIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gJyc7XG4gICAgdGhpcy5za2lwTmV4dEJsdXIgPSBmYWxzZTsgLy8gT25CbHVyIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBzdWdnZXN0aW9uL3ZhbGlkYXRvciBidXR0b25cbiAgICB0aGlzLmVycm9yQ29kZSA9IG51bGw7XG4gICAgLy8gc2NvcGUgcHJvcGVydGllc1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgIC8vIHByb3BlcnRpZXNcbiAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSAnJztcbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgPSAxO1xuICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSAxO1xuICAgIC8vIGluaXRpYWxpemF0aW9uXG4gICAgdGhpcy5zZXRTZWFyY2hUZXh0KCcnKTtcbiAgICAvLyB0aGlzLnNldFBsYWNlSG9sZGVyVGV4dCgpO1xuICAgIHRoaXMuc2V0RW1wdHlSZXNwb25zZVRleHQoKTtcbiAgICB0aGlzLmVtcHR5UmVzcG9uc2UgPSB0cnVlO1xuICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VkKSB7XG4gICAgICBjb25zdCBvdmVybGF5OiBIVE1MRGl2RWxlbWVudCA9IHRoaXMuYm94TnVtYmVyTGlzdC5uYXRpdmVFbGVtZW50O1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3RJdGVtID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKG92ZXJsYXksICdsaS5hY3RpdmUnKTtcbiAgICAgICAgaWYgKGxpc3RJdGVtKSB7XG4gICAgICAgICAgRG9tSGFuZGxlci5zY3JvbGxJblZpZXcob3ZlcmxheSwgbGlzdEl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9LCAxKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcykge1xuICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ByZWZpbGxEYXRhJykgJiYgIWNoYW5nZXMucHJlZmlsbERhdGEuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdGhpcy5sb2FkUGFyYW1zKGNoYW5nZXMucHJlZmlsbERhdGEuY3VycmVudFZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCAhPT0gJycgJiYgdGhpcy5taW5MZXZlbCA9PT0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVIpIHtcbiAgICAgICAgICAvLyB0aGlzLm9uSW5wdXRDaGFuZ2UoJ3ByZWZpbGxlZCcpO1xuICAgICAgICAgIC8vIHRoaXMuYm94TnVtYmVyU2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyXG4gICAgICAgICAgICA9IHRoaXMudHJhbnNmb3JtQm94TnVtYmVySW5Mb3dlcmNhc2VBbmRXaXRob3V0RGlhY3JpdGljcyh0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyKTtcbiAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UoLyoncHJlZmlsbGVkJyovIFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzdHJlZXROdW1iZXInKSAmJiAhY2hhbmdlcy5zdHJlZXROdW1iZXIuZmlyc3RDaGFuZ2UgJiYgIWNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3ByZWZpbGxEYXRhJykpIHtcblxuICAgICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgIHRoaXMuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWwgIT09IFN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSlcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdpbnB1dExhbmcnKSAvIComJiAhY2hhbmdlcy5hZGRyZXNzUGFyYW1zLmZpcnN0Q2hhbmdlKiAvKSB7XG4gICAgICAgIGNvbnN0IGxhbmcgPSBjaGFuZ2VzLmlucHV0TGFuZy5jdXJyZW50VmFsdWU7XG4gICAgICAgIGNvbnNvbGUubG9nKCdvbiBjaGFuZ2VzIC0gaW5wdXRMYW5nJywgbGFuZyk7XG4gICAgICAgIGlmIChjaGFuZ2VzLmlucHV0TGFuZy5jdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXREZWZhdWx0TGFuZyhsYW5nKTtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxhbmcpO1xuICAgICAgICAgIHRoaXMubG9jYWxlU2VydmljZS5jaGFuZ2VMYW5nKGxhbmcpO1xuICAgICAgICAgIHRoaXMub25DaGFuZ2VkTGFuZ3VhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKi9cbiAgICB9XG4gIH1cblxuICB0cmFuc2Zvcm1Cb3hOdW1iZXJJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKGJveE51bWJlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSBudWxsO1xuICAgIGlmIChib3hOdW1iZXIgIT09IG51bGwgJiYgYm94TnVtYmVyICE9PSB1bmRlZmluZWQgKVxuICAgIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMudW5pY29kZVNlcnZpY2UucmVtb3ZlRGlhY3JpdGljcyhib3hOdW1iZXIpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCdUcmFuc2Zvcm1lZCBzdHJlZXQgbnVtYmVyOicsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuXG4gIG9uQ2hhbmdlZExhbmd1YWdlKCkge1xuICAgIC8vIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2JveE51bWJlci5wbGFjZWhvbGRlci5pbnB1dC1wbGFjZWhvbGRlcicpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdwbGFjZSBob2xkZXInLCB0aGlzLnBsYWNlSG9sZGVyVGV4dCk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCgnYm94TnVtYmVyLnBsYWNlaG9sZGVyLmlucHV0LXBsYWNlaG9sZGVyJylcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCduZXcgcGxhY2Vob2xkZXInLCByZXMpO1xuICAgICAgICAvLyA9PiAnaGVsbG8gd29ybGQnXG4gICAgICAgIHRoaXMucGxhY2VIb2xkZXJUZXh0ID0gcmVzO1xuICAgICAgICB0aGlzLnNldEVtcHR5UmVzcG9uc2VUZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRFbXB0eVJlc3BvbnNlVGV4dCgpIHtcbiAgICAvLyB0aGlzLmVtcHR5UmVzcG9uc2VUZXh0ID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdub3QtaW4tbGlzdCcpO1xuICAgIHRoaXMuZW1wdHlSZXNwb25zZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnYm94TnVtYmVyLm1lc3NhZ2Uubm90LWluLWxpc3QnKTtcbiAgfVxuXG4gIG9uQ2xlYXJJbnB1dEV2ZW50KGV2ZW50LCBmb2N1cykge1xuICAgIHRoaXMuY2xlYXJJbnB1dChmb2N1cyk7XG4gIH1cblxuICBvbkJsdXIoZXYpIHtcbiAgICBpZiAodGhpcy5pc0Jyb3dzZXJJRSgpICYmIHRoaXMuaXNEcm9wZG93bkNsaWNrZWQoZXYpKSB7XG4gICAgICB0aGlzLmJveE51bWJlclNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2tpcE5leHRCbHVyKSB7XG4gICAgICB0aGlzLnNraXBOZXh0Qmx1ciA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSB0cnVlO1xuICAgICAgdGhpcy5ibHVyRXZlbnQuZW1pdChBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gICAgfVxuICB9XG5cbiAgaXNCcm93c2VySUUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9tc2llXFxzfHRyaWRlbnRcXC98ZWRnZVxcLy9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xuICB9XG5cbiAgaXNEcm9wZG93bkNsaWNrZWQoZXYpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldi5leHBsaWNpdE9yaWdpbmFsVGFyZ2V0IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YXJnZXQuaWQgPT09ICdicGFhYy1ib3gtZHJvcGRvd24nKTtcbiAgfVxuXG4gIG9uRm9jdXMoKSB7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gZmFsc2U7XG4gICAgLy8gdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gKHRoaXMucHJlZmlsbGluZyA9PT0gdHJ1ZSAmJiB0aGlzLnByZWZpbGxEYXRhICE9PSBudWxsKVxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgPyAhdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgOiBmYWxzZTtcbiAgICAvLyB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNraXBOZXh0Qmx1ciA9IGZhbHNlO1xuICAgIHRoaXMuZm9jdXNFdmVudC5lbWl0KEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgfVxuXG4gIHZhbHVlQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnRleHRDaGFuZ2VFdmVudC5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gIH1cblxuICBtYXlTaG93RHJvcGRvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCAmJiAhdGhpcy5jb2xsYXBzZURyb3Bkb3duO1xuICB9XG5cbiAgYnVpbGRJbnB1dFdvcmRMaXN0KCkge1xuICAgIHRoaXMud29yZExpc3QgPSB0aGlzLnNlYXJjaFRleHQuc3BsaXQoL1tcXHMsIF0rLyk7XG4gIH1cblxuICBtYXlBZGRUeXBlQWhlYWQoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICgvW15cXHMsIFxcXFxcXC9dJC8pLnRlc3QodGhpcy5zZWFyY2hUZXh0KTtcbiAgfVxuXG4gIGJ1aWxkVHlwZUFoZWFkKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAoIXRoaXMubWF5QWRkVHlwZUFoZWFkKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoVGV4dFdvcmRzID0gdGhpcy5zZWFyY2hUZXh0LnNwbGl0KC9bXFxzLCBdKy8pO1xuICAgIGNvbnN0IGxhc3RXb3JkID0gc2VhcmNoVGV4dFdvcmRzW3NlYXJjaFRleHRXb3Jkcy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zLnNvbWUoZnVuY3Rpb24oc3VnKSB7XG4gICAgICBpZiAoIXN1ZyB8fCAhc3VnLmhhc093blByb3BlcnR5KCdzdHJpbmcnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VnLnN0cmluZy5zcGxpdCgvW1xccy1dKy8pLnNvbWUoZnVuY3Rpb24od29yZCkge1xuICAgICAgICBpZiAodGhpcy5zdHJpbmdTdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh3b3JkLCBsYXN0V29yZCkpIHtcbiAgICAgICAgICB0aGlzLnR5cGVBaGVhZFdvcmQgPSB3b3JkO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0uYmluZCh0aGlzKSkpIHtcbiAgICAgIGNvbnN0IGFwcGVuZGl4ID0gdGhpcy50eXBlQWhlYWRXb3JkLnNsaWNlKGxhc3RXb3JkLmxlbmd0aCwgdGhpcy50eXBlQWhlYWRXb3JkLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMuYnBUeXBlQWhlYWQgPSB0aGlzLnNlYXJjaFRleHQgKyBhcHBlbmRpeDtcbiAgICB9XG4gIH1cblxuICBzdHJpbmdTdGFydHNXaXRoSWdub3JlRGlhY3JpdGljcyh2YWx1ZSwgcHJlZml4KSB7XG4gICAgdmFsdWUgPSAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XG4gICAgcHJlZml4ID0gKHByZWZpeCAhPT0gbnVsbCAmJiBwcmVmaXggIT09IHVuZGVmaW5lZCkgPyBwcmVmaXgudG9Mb3dlckNhc2UoKSA6IHByZWZpeDtcbiAgICByZXR1cm4gdGhpcy51bmljb2RlU2VydmljZS5yZW1vdmVEaWFjcml0aWNzKHZhbHVlKS5zbGljZSgwLCBwcmVmaXgubGVuZ3RoKVxuICAgICAgLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnVuaWNvZGVTZXJ2aWNlLnJlbW92ZURpYWNyaXRpY3MocHJlZml4KSkgIT09IC0xO1xuICB9XG5cbiAgZ2V0VG9wU3VnZ2VzdGlvbnMoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIHRoaXMuc2VxdWVuY2VOdW1iZXIgKz0gMTtcbiAgICBjb25zdCBwYXJhbSA9IHRoaXMuZ2VuZXJhdGVQYXJhbWV0ZXJzKCk7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnQk9YLU5VTUJFUiBjYWxsaW5nIHNlcnZpY2UgcGFyYW1zJywgcGFyYW0pOyB9XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmFkZHJlc3NTZXJ2aWNlLmdldEJveCh0aGlzLmJhc2VVcmwsIHRoaXMubG9jYWxpdHksIHRoaXMucG9zdGFsQ29kZSwgcGFyYW0pXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVHZXRCb3hSZXNwb25zZShyZXNwb25zZSwgc291cmNlKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLnByZWZpbGxBbmFseXplRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgICxcbiAgICAgICAgICAoKSA9PiB0aGlzLmhhbmRsZUdldEJveEVycm9yKHNvdXJjZSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGV4dENvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICggdGhpcy5pc1ByZWZpbGxXaXRoTm9NYXRjaCA9PT0gdHJ1ZSApID8gJ29yYW5nZXJlZCcgOiAnJztcbiAgfVxuXG4gIHByZWZpbGxBbmFseXplRGF0YSgpXG4gIHtcbiAgICBpZiAodGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUpXG4gICAge1xuICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5wcmVmaWxsRXZlbnRFbWl0dGVyLmVtaXQobmV3IFByZWZpbGxFdmVudChBRERSRVNTTEVWRUwuQk9YX05VTUJFUiwgdGhpcy5wcmVmaWxsRGF0YSkgKTtcbiAgfVxuXG4gIGxvYWRQYXJhbXMocHJlZmlsbERhdGE6IFByZWZpbGxEYXRhKSB7XG4gICAgbGV0IGNvbmNhdFN0ciA9ICcnO1xuICAgIGlmIChwcmVmaWxsRGF0YSAhPT0gbnVsbCAmJiBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzICE9PSBudWxsKVxuICAgIHtcbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdtaW5MZXZlbCcpKSB7XG4gICAgICAgIHRoaXMubWluTGV2ZWwgPSBwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsO1xuICAgICAgfVxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ3Bvc3RhbENvZGUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSkpIHtcbiAgICAgICAgdGhpcy5wb3N0YWxDb2RlID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlO1xuICAgICAgfVxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ211bmljaXBhbGl0eU5hbWUnKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSkpIHtcbiAgICAgICAgdGhpcy5sb2NhbGl0eSA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdzdHJlZXROYW1lJykgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE5hbWUpKSB7XG4gICAgICAgIHRoaXMuc3RyZWV0TmFtZSA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KCdzdHJlZXROdW1iZXInKSAmJiB0aGlzLmlzU3RyaW5nKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyKSkge1xuICAgICAgICB0aGlzLnN0cmVldE51bWJlciA9IHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TnVtYmVyO1xuICAgICAgfVxuICAgICAgaWYgKHByZWZpbGxEYXRhLnBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoJ2JveE51bWJlcicpXG4gICAgICAgICAgJiYgdGhpcy5pc1N0cmluZyhwcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcikgJiYgdGhpcy5pc1BhcmFtc0NvbXBsZXRlKCkpIHtcbiAgICAgICAgY29uY2F0U3RyID0gcHJlZmlsbERhdGEucGFyYW1ldGVycy5ib3hOdW1iZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25jYXRTdHI7XG4gIH1cblxuICBpc1N0cmluZyh2YWwpOiBib29sZWFuIHtcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB2YWwuY29uc3RydWN0b3IgPT09IFN0cmluZztcbiAgfVxuXG4gIGlzVmFsaWQodmFsKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTdHJpbmcodmFsKSAmJiB2YWwgIT09ICcnO1xuICB9XG5cbiAgaXNQYXJhbXNDb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICBpZighdGhpcy52YWxpZGF0ZWRCeUJhY2tlbmQpe1xuICAgICAgcmV0dXJuICh0aGlzLmlzVmFsaWQodGhpcy5wb3N0YWxDb2RlKSB8fCB0aGlzLmlzVmFsaWQodGhpcy5sb2NhbGl0eSkpICYmIHRoaXMuaXNWYWxpZCh0aGlzLnN0cmVldE5hbWUpICYmIHRoaXMuaXNWYWxpZCh0aGlzLnN0cmVldE51bWJlcik7XG4gICAgfWVsc2UgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWwgPT09IFN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSAmJiB0aGlzLnByZWZpbGxEYXRhKXtcbiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQodGhpcy5wb3N0YWxDb2RlKSAmJiB0aGlzLmlzVmFsaWQodGhpcy5sb2NhbGl0eSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMuc3RyZWV0TmFtZSkgJiYgdGhpcy5pc1ZhbGlkKHRoaXMuc3RyZWV0TnVtYmVyKSAmJiB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyIT09Jyc7IFxuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCh0aGlzLnBvc3RhbENvZGUpICYmIHRoaXMuaXNWYWxpZCh0aGlzLmxvY2FsaXR5KSAmJiB0aGlzLmlzVmFsaWQodGhpcy5zdHJlZXROYW1lKSAmJiB0aGlzLmlzVmFsaWQodGhpcy5zdHJlZXROdW1iZXIpO1xuICAgIH1cbiAgICBcbiAgfVxuXG4gIGdlbmVyYXRlUGFyYW1ldGVycygpOiBRdWVyeVBhcmFtZXRlcnMge1xuICAgIC8vIHRzbGludDpkaXNhYmxlXG4gICAgY29uc3QgcGFyYW0gPSBuZXcgUXVlcnlQYXJhbWV0ZXJzKHtcbiAgICAgIGlkOiB0aGlzLnNlcXVlbmNlTnVtYmVyLFxuICAgICAgcTogdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgcG9zdGFsQ29kZTogdGhpcy5wb3N0YWxDb2RlLFxuICAgICAgbG9jYWxpdHk6IHRoaXMubG9jYWxpdHksXG4gICAgICBzdHJlZXQ6IHRoaXMuc3RyZWV0TmFtZSxcbiAgICAgIHN0cmVldE51bWJlcjogdGhpcy5zdHJlZXROdW1iZXIsXG4gICAgICBtYXhOdW1iZXJPZlN1Z2dlc3Rpb25zOiB0aGlzLm1heFN1Z2dlc2lvbkNvdW50XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zb3J0Q3JpdGVyaWEgPT09ICdCJykge1xuICAgICAgcGFyYW0uc29ydEJ5Qm94KHRydWUpO1xuICAgIH1cbiAgICBpZih0aGlzLm5pczlJblJlc3BvbnNlKXtcbiAgICAgIHBhcmFtLnNldEluY2x1ZGVOaXNDb2RlKHRydWUpXG4gICAgfVxuICAgIGlmKHRoaXMuYnVzaW5lc3NOYW1lSW5SZXNwb25zZSl7XG4gICAgICBwYXJhbS5zZXRJbmNsdWRlQnVzaW5lc3NOYW1lKHRydWUpXG4gICAgfVxuICAgIHJldHVybiBwYXJhbTtcbiAgfVxuXG4gIGhhbmRsZUdldEJveFJlc3BvbnNlKGRhdGE6IGFueSwgc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIGlmIChkYXRhICYmIGRhdGEucmVzcG9uc2UgJiYgZGF0YS5yZXNwb25zZS5zZXF1ZW5jZU51bWJlciAmJiBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyID49IHRoaXMuY29uc3VtZWROdW1iZXIgJiZcbiAgICAgIGRhdGEucmVzcG9uc2UudG9wU3VnZ2VzdGlvbnMpIHtcbiAgICAgIHRoaXMuY29uc3VtZWROdW1iZXIgPSBkYXRhLnJlc3BvbnNlLnNlcXVlbmNlTnVtYmVyO1xuICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25zKCk7XG4gICAgICB0aGlzLnBhcnNlVG9wU3VnZ2VzdGlvbnMoZGF0YS5yZXNwb25zZS50b3BTdWdnZXN0aW9ucywgc291cmNlKTtcbiAgICAgIHRoaXMuYnVpbGRUeXBlQWhlYWQoc291cmNlKTtcbiAgICAgIHRoaXMuY2xlYXJDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCk7XG4gICAgICB0aGlzLmJ1aWxkSW5wdXRXb3JkTGlzdCgpO1xuICAgIH1cbiAgICB0aGlzLmNvbGxhcHNlRHJvcGRvd24gPSAodGhpcy5wcmVmaWxsaW5nID09PSB0cnVlICYmIHRoaXMucHJlZmlsbERhdGEgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAhdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm9uRm9jdXNTaG93U3VnZ2VzdGlvbnNBZnRlclByZWZpbGwgOiBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZUdldEJveEVycm9yKHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAodGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiB0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCkge1xuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMgKz0gMTtcbiAgICAgIHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zRW1pdHRlci5lbWl0KHRoaXMubnVtYmVyT2ZFeGNlcHRpb25zKTtcbiAgICAgIHRoaXMuc2V0Q29ubmVjdGlvbkVycm9yTWVzc2FnZSgpO1xuICAgIH1cbiAgICBpZih0aGlzLmFsbG93Tm9WYWxpZGF0aW9uICYmIHRoaXMudmFsaWRhdGVkQnlCYWNrZW5kICYmIHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKXtcblxuICAgICAgdGhpcy5udW1iZXJPZkV4Y2VwdGlvbnMrPTE7XG4gICAgICB0aGlzLm51bWJlck9mRXhjZXB0aW9uc0VtaXR0ZXIuZW1pdCh0aGlzLm51bWJlck9mRXhjZXB0aW9ucyk7XG4gICAgICB0aGlzLnNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICAgIHRoaXMub25JbnB1dENoYW5nZShzb3VyY2UpO1xuICAgIH1cbiAgICBpZih0aGlzLmFsbG93Tm9WYWxpZGF0aW9uICYmICF0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCAmJiBzb3VyY2UgPT09IFNvdXJjZVR5cGUuU09VUkNFX1BSRUZJTExFRCAgKVxuICAgIHtcbiAgICAgIHRoaXMub25JbnB1dENoYW5nZShzb3VyY2UpO1xuICAgIH1cbiAgICBpZighdGhpcy5hbGxvd05vVmFsaWRhdGlvbiAmJiB0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZClcbiAgICB7XG4gICAgICB0aGlzLnNldENvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBzZXRDb25uZWN0aW9uRXJyb3JNZXNzYWdlKCkge1xuICAgIHRoaXMuZXJyb3JDb2RlID0gJ3NlcnZpY2UtdW5hdmFpbGFibGUnO1xuICAgIC8vIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2UodGhpcy5lcnJvckNvZGUpO1xuICAgIHRoaXMuZW1pdFRyYW5zbGF0ZWRWYWxpZGF0aW9uTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZVR5cGUuU2VydmljZV9VbmF2YWlsYWJsZSk7XG4gIH1cblxuICBjbGVhckNvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JDb2RlKSB7XG4gICAgICBjb25zdCByZXMgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmVycm9yQ29kZSk7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPT09IHJlcyApIHtcbiAgICAgICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvckNvZGUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlVG9wU3VnZ2VzdGlvbnModG9wU3VnZ2VzdGlvbnMsIHNvdXJjZT86IFNvdXJjZVR5cGUpIHtcbiAgICBpZiAodG9wU3VnZ2VzdGlvbnMuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XG4gICAgICAvLyB0b3BTdWdnZXN0aW9ucy5mb3JFYWNoKHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uLmJpbmQodGhpcykpO1xuICAgICAgbGV0IHBlcmZlY3RNYXRjaEZvdW5kPWZhbHNlO1xuICAgICAgZm9yIChjb25zdCBzdWcgb2YgdG9wU3VnZ2VzdGlvbnMpXG4gICAgICB7XG4gICAgICAgIGlmKHRoaXMucGFyc2VTaW5nbGVTdWdnZXN0aW9uKHN1Zywgc291cmNlKSA9PT0gdHJ1ZSApXG4gICAgICAgIHtcbiAgICAgICAgICBwZXJmZWN0TWF0Y2hGb3VuZD10cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKCFzb3VyY2UpXG4gICAgICB7XG4gICAgICAgIGlmICgodG9wU3VnZ2VzdGlvbnMubGVuZ3RoID09PSAwIHx8IHRoaXMuZW1wdHlSZXNwb25zZSkgJiYgdGhpcy5ub3RJbkxpc3RBbGxvd2VkKSB7XG4gICAgICAgICAgdGhpcy5zdWdnZXN0aW9ucy5wdXNoKHtzdHJpbmc6IHRoaXMuc2VhcmNoVGV4dCwgJ25vdC1pbi1saXN0JzogdHJ1ZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWwgPT09IFN1Z2dlc3Rpb25MZXZlbFR5cGUuTm9uZSB8fCB0aGlzLnN1Z2dlc3Rpb25MZXZlbCA9PT0gU3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXROdW1iZXIpXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSBjb25zb2xlLndhcm4oJ2JveCBudW1iZXI6OiBubyBtYXRjaCBmb3VuZCAtIGN1cnJlbnQgYWRkcmVzczogJywgdGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgICAgICAgIGlmKCAhIHBlcmZlY3RNYXRjaEZvdW5kKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGZha2VTdWcgPSB7Li4udGhpcy5zZWxlY3RlZEFkZHJlc3N9O1xuICAgICAgICAgICAgZmFrZVN1Zy5ib3hOdW1iZXIgPSB0aGlzLnNlYXJjaFRleHQ7XG4gICAgICAgICAgICBmYWtlU3VnLnN0cmluZz10aGlzLnNlYXJjaFRleHQ7XG4gICAgICAgICAgICBmYWtlU3VnLmlzQ29tcGxldGU9ZmFsc2U7XG4gICAgICAgICAgICAvL3RoaXMuY2xpY2tTdWdnZXN0aW9uKG51bGwsIGZha2VTdWcpOyAvLyBkbyBub3QgZG8gdGhpc1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBiZXR0ZXIgIVxuICAgICAgICAgICAgdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KGZha2VTdWcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICAvLyBJZiBwcmVmaWxsaW5nLCB0aGVuIGNoZWNrIGlmIG5vIG1hdGNoIGZvciBhIG5vbi1lbXB0eSBib3hOdW1iZXJcbiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgc2ltdWxhdGUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgJ25vdC1pbi1saXN0JyBzdWdnZXN0aW9uXG4gICAgICAgIGlmKHRoaXMucHJlZmlsbGluZyAmJiB0aGlzLm5vdEluTGlzdEFsbG93ZWRcbiAgICAgICAgICAgICYmIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSBmYWxzZVxuICAgICAgICAgICAgJiYgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyICE9PSBudWxsXG4gICAgICAgICAgICAmJiB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgJiYgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyLmxlbmd0aCA+IDApXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBjb25zdCBub3RJbkxpc3RTdWdnZXN0aW9uID0ge3N0cmluZzogdGhpcy5zZWFyY2hUZXh0LCAnbm90LWluLWxpc3QnOiB0cnVlfTtcbiAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uID0gdGhpcy5wcmVmaWxsQnVpbGROb3RJbkxpc3RTdWdnZXN0aW9uKCk7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnQk9YIE5VTUJFUiAtIFBSRUZJTEwgTk9UIElOIExJU1QgU1VHR0VTVElPTjonLCBzdWdnZXN0aW9uKTsgfVxuICAgICAgICAgIHRoaXMucHJlZmlsbENoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJzZVNpbmdsZVN1Z2dlc3Rpb24odG9wU3VnZ2VzdGlvbnMsIHNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgcHJlZmlsbEJ1aWxkTm90SW5MaXN0U3VnZ2VzdGlvbigpOiBhbnkge1xuICAgIGNvbnN0IG5vdEluTGlzdFN1Z2dlc3Rpb24gPSB7c3RyaW5nOiB0aGlzLnNlYXJjaFRleHQsICdub3QtaW4tbGlzdCc6IHRydWV9O1xuICAgIGNvbnN0IHN0cmVldE51bWJlclN1Z2dlc3Rpb24gPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgIGNvbnN0IGNvbWJpbmVkID0gey4uLnN0cmVldE51bWJlclN1Z2dlc3Rpb24uYWRkcmVzcywgLi4ubm90SW5MaXN0U3VnZ2VzdGlvbn07XG4gICAgZGVsZXRlIGNvbWJpbmVkLm1haWxCb3hpZDtcbiAgICBkZWxldGUgY29tYmluZWQuc3VmZml4SWQ7XG4gICAgY29tYmluZWQuYm94TnVtYmVyID0gY29tYmluZWQuc3RyaW5nO1xuICAgIGNvbWJpbmVkLnNlYXJjaEJhclN0cmluZyA9IGNvbWJpbmVkLnN0cmluZztcbiAgICBjb21iaW5lZC5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICBzdHJlZXROdW1iZXJTdWdnZXN0aW9uLmFkZHJlc3MgPSBjb21iaW5lZDtcbiAgICByZXR1cm4gc3RyZWV0TnVtYmVyU3VnZ2VzdGlvbjtcbiAgfVxuXG4gIHBhcnNlU2luZ2xlU3VnZ2VzdGlvbihzdWdnZXN0aW9uOiBhbnksIHNvdXJjZTogU291cmNlVHlwZSk6IGJvb2xlYW4gIHtcbiAgICBsZXQgc3VnZ2VzdGlvblRvQWRkOiBhbnk7XG4gICAgbGV0IGlzUGVyZmVjdE1hdGNoPWZhbHNlO1xuXG4gICAgaWYgKHRoaXMubG9jYWxlU2VydmljZS5pc0xvY2FsZUZyZW5jaCgpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2ZyZW5jaCcpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmZyZW5jaDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxlU2VydmljZS5pc0xvY2FsZUR1dGNoKCkgJiYgc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnZHV0Y2gnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5kdXRjaDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxlU2VydmljZS5pc0xvY2FsZUdlcm1hbigpICYmIHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2dlcm1hbicpKSB7XG4gICAgICBzdWdnZXN0aW9uVG9BZGQgPSBzdWdnZXN0aW9uLmdlcm1hbjtcbiAgICB9IGVsc2UgaWYgKHN1Z2dlc3Rpb24uaGFzT3duUHJvcGVydHkoJ2FkZHJlc3MnKSkge1xuICAgICAgc3VnZ2VzdGlvblRvQWRkID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgIH1cbiAgICBpZiAoc3VnZ2VzdGlvblRvQWRkKSB7XG4gICAgICBpZiAoc3VnZ2VzdGlvbi5tZXNzYWdlcykge1xuICAgICAgICBzdWdnZXN0aW9uVG9BZGQubWVzc2FnZXMgPSBzdWdnZXN0aW9uLm1lc3NhZ2VzO1xuICAgICAgfVxuICAgICAgaWYgKHN1Z2dlc3Rpb25Ub0FkZC5ib3hOdW1iZXIgPT09IHRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3VnZ2VzdGlvbnMucHVzaChzdWdnZXN0aW9uVG9BZGQpO1xuICAgICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKVxuICAgICAge1xuICAgICAgICBzdWdnZXN0aW9uLmFkZHJlc3MgPSBzdWdnZXN0aW9uVG9BZGQ7XG4gICAgICAgIGlzUGVyZmVjdE1hdGNoPXRoaXMucHJlZmlsbENoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uTGV2ZWwgIT09IFN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0QW5kQm94TnVtYmVyKVxuICAgICAge1xuICAgICAgICBzdWdnZXN0aW9uLmFkZHJlc3MgPSBzdWdnZXN0aW9uVG9BZGQ7XG4gICAgICAgIGlzUGVyZmVjdE1hdGNoPXRoaXMuY2hlY2tGb3JQZXJmZWN0TWF0Y2goc3VnZ2VzdGlvbik7XG4gICAgICAgIGlmKCEgaXNQZXJmZWN0TWF0Y2gpXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBzZWVtcyBub3RoaW5nIHRvIGRvP1xuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gbm90aWZ5IGZvciBhIGluY29tcGxldGUgYWRkcmVzc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpc1BlcmZlY3RNYXRjaDtcbiAgfVxuXG4gIGNoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pOiBib29sZWFuXG4gIHtcbiAgICAvL2lmICggIXRoaXMuYWRkcmVzc0lzQ29tcGxldGUgKVxuICAgIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2JveCBudW1iZXIgLSBjaGVja2luZyBzdWdnZXN0aW9uIGZvciBwZXJmZWN0IG1hdGNoJywgc3VnZ2VzdGlvbiwgdGhpcy5zZWFyY2hUZXh0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1Z0FkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uQm94TnVtYmVyID0gdGhpcy50cmFuc2Zvcm1Cb3hOdW1iZXJJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKCcnICsgc3VnQWRkcmVzcy5ib3hOdW1iZXIpO1xuXG4gICAgICBpZiAoc3VnZ2VzdGlvbkJveE51bWJlciA9PT0gKCcnICsgdGhpcy5zZWFyY2hUZXh0KSApXG4gICAgICB7XG4gICAgICAgIC8vdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPSB0cnVlO8OnXG4gICAgICAgIC8vdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb247XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHN1Z0FkZHJlc3MuYm94TnVtYmVyO1xuICAgICAgICBpZiAoc3VnQWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIHN1Z0FkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMuY2xpY2tTdWdnZXN0aW9uKG51bGwsIHN1Z0FkZHJlc3MpO1xuICAgICAgICAgIC8vIHRoaXMuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBRERSRVNTIENPTVBMRVRFIE9OIEJPWCBOVU1CRVIgIScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcblxuICB9XG5cbiAgcHJlZmlsbENoZWNrRm9yUGVyZmVjdE1hdGNoKHN1Z2dlc3Rpb24pOiBib29sZWFuXG4gIHtcbiAgICAvL2lmICggIXRoaXMuYWRkcmVzc0lzQ29tcGxldGUgKVxuICAgIHtcbiAgICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2JveCBudW1iZXIgLSBQUkVGSUxMIGNoZWNraW5nIHN1Z2dlc3Rpb24gZm9yIHBlcmZlY3QgbWF0Y2gnLCB0aGlzLnByZWZpbGxEYXRhLCBzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1Z0FkZHJlc3MgPSBzdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uQm94TnVtYmVyID0gdGhpcy50cmFuc2Zvcm1Cb3hOdW1iZXJJbkxvd2VyY2FzZUFuZFdpdGhvdXREaWFjcml0aWNzKCcnICsgc3VnQWRkcmVzcy5ib3hOdW1iZXIpO1xuICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnY29tcGFyaW5nIGJveCBudW1iZXJzJywgc3VnZ2VzdGlvbkJveE51bWJlciwgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdWdnZXN0aW9uQm94TnVtYmVyID09PSAoJycgKyB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXIpIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPSB0cnVlO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uID0gc3VnZ2VzdGlvbjtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gc3VnQWRkcmVzcy5ib3hOdW1iZXI7XG4gICAgICAgIGlmIChzdWdBZGRyZXNzLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykgJiYgc3VnQWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5jbGlja1N1Z2dlc3Rpb24obnVsbCwgc3VnQWRkcmVzcyk7XG4gICAgICAgICAgLy8gdGhpcy5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0FERFJFU1MgQ09NUExFVEUgT04gQk9YIE5VTUJFUiAhJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qIGVsc2VcbiAgICB7XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBZGRyZXNzIGNvbXBsZXRlLCBza2lwcGluZyBzdWdnZXN0aW9uIGNoZWNrJywgc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgfSAqL1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgb25JbnB1dENoYW5nZV9uZXcoc291cmNlPzogU291cmNlVHlwZSkge1xuICAgIHRoaXMuY29sbGFwc2VEcm9wZG93biA9IGZhbHNlO1xuICAgIHRoaXMuZW1wdHlSZXNwb25zZSA9IHRydWU7XG4gICAgdGhpcy5yZXNldEFycm93U2VsZWN0ZWRJbmRleCgpO1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0ID09PSAnJykge1xuICAgICAgdGhpcy5zZXF1ZW5jZU51bWJlciArPSAxO1xuICAgICAgdGhpcy5jb25zdW1lZE51bWJlciA9IHRoaXMuc2VxdWVuY2VOdW1iZXI7XG4gICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoKTtcbiAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lIHx8IHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXROdW1iZXIpXG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkbyBub3QgdXNlIHN1Z2dlc3Rpb25zIGZvciBib3ggbnVtYmVyJyk7XG4gICAgICAgIHRoaXMuYm94TnVtYmVyQ2hhbmdlZC5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5Ob25lIHx8IHRoaXMuc3VnZ2VzdGlvbkxldmVsPT09U3VnZ2VzdGlvbkxldmVsVHlwZS5TdHJlZXROdW1iZXIpXG4gICAgICB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkbyBub3QgdXNlIHN1Z2dlc3Rpb25zIGZvciBib3ggbnVtYmVyJyk7XG4gICAgICAgIHRoaXMuYm94TnVtYmVyQ2hhbmdlZC5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIGlmKCF0aGlzLnZhbGlkYXRlZEJ5QmFja2VuZCl7XG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb24gPSB7XG4gICAgICAgICAgICAnc3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnbXVuaWNpcGFsaXR5TmFtZSc6IHRoaXMubG9jYWxpdHksXG4gICAgICAgICAgICAnbG9jYWxpdHlOYW1lJzogdGhpcy5sb2NhbGl0eSxcbiAgICAgICAgICAgICdwb3N0YWxDb2RlJzogdGhpcy5wb3N0YWxDb2RlLFxuICAgICAgICAgICAgJ3NlYXJjaEJhclN0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICAgJ3N0cmVldE5hbWUnOiB0aGlzLnN0cmVldE5hbWUsXG4gICAgICAgICAgICAnaG91c2VOdW1iZXInOnRoaXMuc3RyZWV0TnVtYmVyLFxuICAgICAgICAgICAgJ2JveE51bWJlcic6dGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbik7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHRoaXMuZ2V0VG9wU3VnZ2VzdGlvbnMoc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmJ1aWxkSW5wdXRXb3JkTGlzdCgpO1xuICB9XG5cbiAgb25JbnB1dENoYW5nZShzb3VyY2U/OiBTb3VyY2VUeXBlKSB7XG4gICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gZmFsc2U7XG4gICAgdGhpcy5lbXB0eVJlc3BvbnNlID0gdHJ1ZTtcbiAgICB0aGlzLnJlc2V0QXJyb3dTZWxlY3RlZEluZGV4KCk7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHRoaXMucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICB9XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgIGlmICh0aGlzLnNlYXJjaFRleHQgPT09ICcnKSB7XG4gICAgICB0aGlzLnNlcXVlbmNlTnVtYmVyICs9IDE7XG4gICAgICB0aGlzLmNvbnN1bWVkTnVtYmVyID0gdGhpcy5zZXF1ZW5jZU51bWJlcjtcbiAgICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9ucygpO1xuICAgICAgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUgfHwgdGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldE51bWJlcilcbiAgICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2RvIG5vdCB1c2Ugc3VnZ2VzdGlvbnMgZm9yIGJveCBudW1iZXInKTtcbiAgICAgICAgdGhpcy5ib3hOdW1iZXJDaGFuZ2VkLmVtaXQodGhpcy5zZWFyY2hUZXh0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYodGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLk5vbmUgfHwgdGhpcy5zdWdnZXN0aW9uTGV2ZWw9PT1TdWdnZXN0aW9uTGV2ZWxUeXBlLlN0cmVldE51bWJlcilcbiAgICAgIHtcbiAgICAgICAgY29uc29sZS5sb2coJ2RvIG5vdCB1c2Ugc3VnZ2VzdGlvbnMgZm9yIGJveCBudW1iZXInKTtcbiAgICAgICAgdGhpcy5ib3hOdW1iZXJDaGFuZ2VkLmVtaXQodGhpcy5zZWFyY2hUZXh0KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoIXRoaXMudmFsaWRhdGVkQnlCYWNrZW5kKXtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gU291cmNlVHlwZS5TT1VSQ0VfUFJFRklMTEVEKSB7XG4gICAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wcmVmaWxsQm94TnVtYmVyUGVyZmVjdE1hdGNoRm91bmQgPSB0cnVlO1xuXG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb24gPXtcbiAgICAgICAgICAnYWRkcmVzcyc6IHtcbiAgICAgICAgICAgICdzdHJpbmcnOiB0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICdtdW5pY2lwYWxpdHlOYW1lJzogdGhpcy5sb2NhbGl0eSxcbiAgICAgICAgICAgICdsb2NhbGl0eU5hbWUnOiB0aGlzLmxvY2FsaXR5LFxuICAgICAgICAgICAgJ3Bvc3RhbENvZGUnOiB0aGlzLnBvc3RhbENvZGUsXG4gICAgICAgICAgICAnc2VhcmNoQmFyU3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAnc3RyZWV0TmFtZSc6IHRoaXMuc3RyZWV0TmFtZSxcbiAgICAgICAgICAgICdob3VzZU51bWJlcic6dGhpcy5zdHJlZXROdW1iZXIsXG4gICAgICAgICAgICAnYm94TnVtYmVyJzp0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKVxuICAgICAgICAgIH19XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uXG4gICAgICAgIHRoaXMuaXNQcmVmaWxsV2l0aE5vTWF0Y2ggPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsQW5hbHl6ZURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgbGV0IHN1Z2dlc3Rpb24gPSB7XG4gICAgICAgICAgJ3N0cmluZyc6IHRoaXMuc2VhcmNoVGV4dC50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgICdtdW5pY2lwYWxpdHlOYW1lJzogdGhpcy5sb2NhbGl0eSxcbiAgICAgICAgICAnbG9jYWxpdHlOYW1lJzogdGhpcy5sb2NhbGl0eSxcbiAgICAgICAgICAncG9zdGFsQ29kZSc6IHRoaXMucG9zdGFsQ29kZSxcbiAgICAgICAgICAnc2VhcmNoQmFyU3RyaW5nJzogdGhpcy5zZWFyY2hUZXh0LnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgJ3N0cmVldE5hbWUnOiB0aGlzLnN0cmVldE5hbWUsXG4gICAgICAgICAgJ2hvdXNlTnVtYmVyJzp0aGlzLnN0cmVldE51bWJlcixcbiAgICAgICAgICAnYm94TnVtYmVyJzp0aGlzLnNlYXJjaFRleHQudG9VcHBlckNhc2UoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgICAgfWVsc2V7XG4gICAgICAgIHRoaXMuZ2V0VG9wU3VnZ2VzdGlvbnMoc291cmNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5idWlsZElucHV0V29yZExpc3QoKTtcbiAgfVxuXG5cbiAgY2xpY2tTdWdnZXN0aW9uKGV2ZW50OiBhbnksIHN1Z2dlc3Rpb24/OiBhbnkpIHtcbiAgICB0aGlzLmlzUHJlZmlsbFdpdGhOb01hdGNoID0gZmFsc2U7XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHN1Z2dlc3Rpb24pIHtcbiAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICAgIHRoaXMucmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKTtcbiAgICAgIGlmIChzdWdnZXN0aW9uLnN0cmluZykge1xuICAgICAgICB0aGlzLnNldFNlYXJjaFRleHQoc3VnZ2VzdGlvbi5zdHJpbmcpO1xuICAgICAgfVxuICAgICAgdGhpcy5jb2xsYXBzZURyb3Bkb3duID0gdHJ1ZTtcbiAgICAgIC8vIGlmIChzdWdnZXN0aW9uLmhhc093blByb3BlcnR5KCdpc0NvbXBsZXRlJykpIHtcbiAgICAgIC8vICAgdGhpcy5zaG93QWRkcmVzc0lzVmFsaWRhdGVkKCk7XG4gICAgICAvLyB9XG4gICAgICBpZiAoc3VnZ2VzdGlvblsnbm90LWluLWxpc3QnXSkge1xuICAgICAgICBzdWdnZXN0aW9uID0gdGhpcy5tb2RpZnlTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCA9IHRydWU7XG4gICAgICBzdWdnZXN0aW9uLmlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRTZWxlY3RlZEFkZHJlc3Moc3VnZ2VzdGlvbik7XG4gICAgfVxuICB9XG5cbiAgbW9kaWZ5U2VsZWN0ZWRBZGRyZXNzKHN1Z2dlc3Rpb246IG9iamVjdCkge1xuICAgIGNvbnN0IGNvbWJpbmVkID0gey4uLnRoaXMuc2VsZWN0ZWRBZGRyZXNzLCAuLi5zdWdnZXN0aW9ufTtcbiAgICBkZWxldGUgY29tYmluZWQubWFpbEJveGlkO1xuICAgIGRlbGV0ZSBjb21iaW5lZC5zdWZmaXhJZDtcbiAgICBjb21iaW5lZC5ib3hOdW1iZXIgPSBjb21iaW5lZC5zdHJpbmc7XG4gICAgY29tYmluZWQuc2VhcmNoQmFyU3RyaW5nID0gY29tYmluZWQuc3RyaW5nO1xuICAgIGNvbWJpbmVkLmlzQ29tcGxldGUgPSB0cnVlO1xuICAgIHJldHVybiBjb21iaW5lZDtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQWRkcmVzcyhzdWdnZXN0aW9uOiBhbnkpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnYm94IG51bWJlcjo6c2V0U2VsZWN0ZWRBZGRyZXNzJywgc3VnZ2VzdGlvbik7XG4gICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSAoc3VnZ2VzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIHN1Z2dlc3Rpb24uaXNDb21wbGV0ZSA9PT0gdHJ1ZSkgPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KHN1Z2dlc3Rpb24pO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZEFkZHJlc3MoKSB7XG4gICAgdGhpcy5hZGRyZXNzQ2hhbmdlZC5lbWl0KG51bGwpO1xuICAgIHRoaXMuYWRkcmVzc0lzVmFsaWRhdGVkID0gZmFsc2U7XG4gIH1cblxuICAvKlxuICBzZXRWYWxpZGF0aW9uTWVzc2FnZSh0cmFuc2xhdGlvbkNvZGUsIG9wdGlvbnM/LCByZXRyYW5zbGF0ZU9wdGlvbnM/KSB7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChyZXRyYW5zbGF0ZU9wdGlvbnMgJiYgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9uc1sndW50cmFuc2xhdGVkLXNwcmludGYnXSkgJiZcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zLnNwcmludGYpIHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRFbGVtZW50cyA9IFtdO1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvbnNbJ3VudHJhbnNsYXRlZC1zcHJpbnRmJ10uZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHRyYW5zbGF0ZWRFbGVtZW50cy5wdXNoKHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZShlbGVtZW50KSk7XG4gICAgICB9LmJpbmQodGhpcylcbiAgICAgICk7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucy5zcHJpbnRmID0gdHJhbnNsYXRlZEVsZW1lbnRzO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlQ29kZSA9IHRyYW5zbGF0aW9uQ29kZTtcbiAgICAvLyBlbWl0IHRyYW5zbGF0aW9uIGtleSB0byB3cmFwcGVyIGNvbXBvbmVudCBmb3IgY3VzdG9taXplZCB0cmFuc2xhdGlvbnNcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUodGhpcy52YWxpZGF0aW9uTWVzc2FnZUNvZGUsIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25zKTtcbiAgICAgIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdCh0aGlzLnN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlQ29kZSk7XG4gICAgfVxuICB9XG4gICovXG5cbiAgZW1pdFRyYW5zbGF0ZWRWYWxpZGF0aW9uTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgb3B0aW9ucz86IHN0cmluZ1tdKSB7XG4gICAgLy8gTW9tZW50bHksIG9wdGlvbnMgYXJlIE5PVCB1c2VkOyBzbyBkYXRhIHR5cGUgb2YgdGhlc2Ugb3B0aW9ucyB3aWxsIGJlIHJldmlld2VkIG9uY2UgbmVlZGVkLlxuICAgIGlmICh2YWxpZGF0aW9uTWVzc2FnZVR5cGUgPT09IG51bGwgfHwgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlID09PSB1bmRlZmluZWQgKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBlbWl0IHZhbGlkYXRpb24gbWVzc2FnZSAtIG1lc3NhZ2Uga2V5IGlzIGludmFsaWQhJywgdmFsaWRhdGlvbk1lc3NhZ2VUeXBlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHZhbGlkYXRpb25NZXNzYWdlVHlwZSkge1xuXG4gICAgICBjYXNlIFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX05vdF9Gb3VuZDpcbiAgICAgIGNhc2UgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLkFkZHJlc3NfVmFsaWRhdGVkOlxuICAgICAgY2FzZSBWYWxpZGF0aW9uTWVzc2FnZVR5cGUuU2VydmljZV9VbmF2YWlsYWJsZToge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh2YWxpZGF0aW9uTWVzc2FnZVR5cGUpO1xuICAgICAgICAgIC8vIHRoaXMubWVzc2FnZUNoYW5nZWQuZW1pdChtZXNzYWdlKTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQoe21lc3NhZ2VUeXBlOiB2YWxpZGF0aW9uTWVzc2FnZVR5cGUsIHRyYW5zbGF0ZWRNZXNzYWdlOiBtZXNzYWdlfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmFsaWduXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5hYmxlIHRvIGVtaXQgdmFsaWRhdGlvbiBtZXNzYWdlIC0gbWVzc2FnZSBrZXkgTk9UIHN1cHBvcnRlZCEnLCB2YWxpZGF0aW9uTWVzc2FnZVR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTphbGlnblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgfVxuICBzaG93QWRkcmVzc0lzVmFsaWRhdGVkKCkge1xuICAgIC8vIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2UoJ2FkZHJlc3MtdmFsaWRhdGVkJyk7XG4gICAgdGhpcy5lbWl0VHJhbnNsYXRlZFZhbGlkYXRpb25NZXNzYWdlKFZhbGlkYXRpb25NZXNzYWdlVHlwZS5BZGRyZXNzX1ZhbGlkYXRlZCk7XG4gIH1cblxuICBjaGVja0tleURvd24oZXZlbnQpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XG4gICAgICAvLyBkb3duIGtleSwgaW5jcmVtZW50IHNlbGVjdGVkSW5kZXhcbiAgICAgIGNhc2UgNDA6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUFycm93U2VsZWN0ZWRJbmRleERvd24oKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIHVwIGtleSwgZGVjcmVtZW50IHNlbGVjdGVkSW5kZXhcbiAgICAgIGNhc2UgMzg6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMubW92ZUFycm93U2VsZWN0ZWRJbmRleFVwKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gcmlnaHQgYXJyb3cga2V5XG4gICAgICBjYXNlIDM5OlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JJc09uU3VnZ2VzdGlvbkxpc3QoKSkge1xuICAgICAgICAgIHRoaXMuY2xpY2tTdWdnZXN0aW9uKGV2ZW50LCB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnR5cGVBaGVhZFdvcmQgJiYgdGhpcy50eXBlQWhlYWRJc1Nob3duKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dCh0aGlzLmJwVHlwZUFoZWFkKTtcbiAgICAgICAgICAgIHRoaXMudHlwZUFoZWFkV29yZCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIC8vIHRhYiBrZXlcbiAgICAgIGNhc2UgOTpcbiAgICAgICAgaWYgKCF0aGlzLmFkZHJlc3NJc1ZhbGlkYXRlZCAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0Rmlyc3RJbkxpc3RPZlN1Z2dlc2lvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0NjpcbiAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBlbnRlciBwcmVzc2VkXG4gICAgICBjYXNlIDEzOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JJc09uU3VnZ2VzdGlvbkxpc3QoKSkge1xuICAgICAgICAgIHRoaXMuY2xpY2tTdWdnZXN0aW9uKGV2ZW50LCB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0ZWRJbmRleF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICB9XG4gIH1cbiAgY2hlY2tLZXlVUChldmVudClcbiAge1xuICAgIHN3aXRjaCAoZXZlbnQud2hpY2gpIHtcbiAgICAgIFxuICAgICAgY2FzZSA4OlxuICAgICAgIFxuICAgICAgICBpZih0aGlzLnNlYXJjaFRleHQubGVuZ3RoPjApXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnUEFSVElBTF9DTEVBUl9CT1hfTlVNQkVSJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoJ0JPWF9OVU1CRVInKTtcbiAgICAgICAgfVxuICAgICAgICAgYnJlYWs7ICAgICAgICAgXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICB9XG4gICAgXG4gIH1cbiAgY2xlYXJXaWRnZXQoKSB7XG4gICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNsZWFyU2VhcmNoVGV4dCgpO1xuICAgIHRoaXMuY2xlYXJTdWdnZXN0aW9ucygpO1xuICAgIHRoaXMuY2xlYXJUeXBlQWhlYWQoKTtcbiAgICB0aGlzLnByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAvLyB0aGlzLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGNsZWFyU2VhcmNoVGV4dCgpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcbiAgfVxuXG4gIHR5cGVBaGVhZElzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYnBUeXBlQWhlYWQgJiYgdGhpcy5icFR5cGVBaGVhZC5sZW5ndGggPiAwO1xuICB9XG5cbiAgcmVzZXRBcnJvd1NlbGVjdGVkSW5kZXgoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1cblxuICBtb3ZlQXJyb3dTZWxlY3RlZEluZGV4RG93bigpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ICsgMSAhPT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCsrO1xuICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbih0aGlzLnNlbGVjdGVkSW5kZXgsIHRoaXMuc2VsZWN0ZWRJbmRleCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVBcnJvd1NlbGVjdGVkSW5kZXhVcCgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4IC0gMSAhPT0gLTIpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleC0tO1xuICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbih0aGlzLnNlbGVjdGVkSW5kZXgsIHRoaXMuc2VsZWN0ZWRJbmRleCArIDEpO1xuICAgIH1cbiAgfVxuXG4gIGN1cnNvcklzT25TdWdnZXN0aW9uTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEluZGV4ID49IDA7XG4gIH1cblxuICBzZXRTZWFyY2hUZXh0QmFzZWRPbkFycm93U2VsZWN0aW9uKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgaWYgKG5ld1ZhbCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5ld1ZhbCAhPT0gLTEpIHtcbiAgICAgIGlmIChvbGRWYWwgPT09IC0xKSB7XG4gICAgICAgIHRoaXMubGFzdFNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hUZXh0O1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTZWFyY2hUZXh0KHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS5zdHJpbmcpO1xuICAgICAgdGhpcy5jbGVhclR5cGVBaGVhZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFNlYXJjaFRleHQodGhpcy5sYXN0U2VhcmNoVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG1heVNob3dDbGVhckJ1dHRvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hUZXh0Lmxlbmd0aCA+IDA7XG4gIH1cblxuICBjbGVhcklucHV0KGZvY3VzPywgZW1pdDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgdGhpcy5yZXNldEFycm93U2VsZWN0ZWRJbmRleCgpO1xuICAgIHRoaXMucHJldmlvdXNJbmRleCA9IC0xO1xuICAgIHRoaXMubGFzdFNlYXJjaFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhclN1Z2dlc3Rpb25WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgdGhpcy5jbGVhckNvbm5lY3Rpb25FcnJvck1lc3NhZ2UoKTtcbiAgICBpZiAoZm9jdXMgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYm94TnVtYmVyU2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICAvLyB0aGlzLmFkZHJlc3NDaGFuZ2VkLmVtaXQobnVsbCk7XG4gICAgaWYoZW1pdCkge1xuICAgICAgdGhpcy5jbGVhcklucHV0RXZlbnRFbWl0dGVyLmVtaXQoLyonQk9YX05VTUJFUicqLyBJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyU3VnZ2VzdGlvbnMoKSB7XG4gICAgdGhpcy53b3JkTGlzdCA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zV29yZExpc3QgPSBbXTtcbiAgfVxuXG4gIGNsZWFyVHlwZUFoZWFkKCkge1xuICAgIHRoaXMuYnBUeXBlQWhlYWQgPSAnJztcbiAgfVxuXG4gIGNsZWFyU3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlKCkge1xuICAgIHRoaXMuc3VnZ2VzdGlvblZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgdGhpcy5hZGRyZXNzSXNWYWxpZGF0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLm1lc3NhZ2VDaGFuZ2VkLmVtaXQoe21lc3NhZ2VUeXBlOiBudWxsLCB0cmFuc2xhdGVkTWVzc2FnZTogdGhpcy5zdWdnZXN0aW9uVmFsaWRhdGlvbk1lc3NhZ2V9KTtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9ucyA9IG51bGw7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZUNvZGUgPSBudWxsO1xuICB9XG5cbiAgc2V0U2VhcmNoVGV4dCh2YWx1ZSkge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlO1xuICB9XG5cbiAgc2VsZWN0Rmlyc3RJbkxpc3RPZlN1Z2dlc2lvbnMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcbiAgICB0aGlzLmNoYW5nZVNlbGVjdGlvbigpO1xuICAgIHRoaXMuc2V0U2VhcmNoVGV4dEJhc2VkT25BcnJvd1NlbGVjdGlvbih0aGlzLnNlbGVjdGVkSW5kZXgsIHRoaXMuc2VsZWN0ZWRJbmRleCAtIDEpO1xuICB9XG5cbiAgY2hhbmdlU2VsZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc3VnZ2VzdGlvbk1vdXNlTGVhdmUoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1cblxuICBzaG93QWRkcmVzc05vdEZvdW5kTWVzc2FnZSgpIHtcbiAgICAvLyB0aGlzLnNldFZhbGlkYXRpb25NZXNzYWdlKCdhZGRyZXNzLW5vdC1mb3VuZCcpO1xuICAgIHRoaXMuZW1pdFRyYW5zbGF0ZWRWYWxpZGF0aW9uTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZVR5cGUuQWRkcmVzc19Ob3RfRm91bmQpO1xuICB9XG5cbiAgaXNEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gKHRoaXMubG9jYWxpdHkgPT09ICcnIHx8IHRoaXMucG9zdGFsQ29kZSA9PT0gJycgfHwgdGhpcy5taW5MZXZlbCA+IEFERFJFU1NMRVZFTC5CT1hfTlVNQkVSKTtcbiAgfVxuXG4gIG9uSW5wdXRDbGljaygpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdib3ggbnVtYmVyIGNsaWNrJyk7IH1cbiAgfVxufVxuIiwiPHNwYW4gKm5nSWY9XCJsYWJlbFJlc291cmNlS2V5XCI+e3sgbGFiZWxSZXNvdXJjZUtleSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuPGRpdiBjbGFzcz1cImJwYWFjLWRyb3Bkb3duXCI+XG4gICAgPGRpdiBjbGFzcz1cImJwYWFjLXNlYXJjaC1iYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJwYWFjLWlucHV0LXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCIgLS0+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAjYm94TnVtYmVyU2VhcmNoSW5wdXQgY2xhc3M9XCJicGFhYy1pbnB1dFwiIFxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgKGtleXVwKSA9IChjaGVja0tleVVQKCRldmVudCkpXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiIWlzUGFyYW1zQ29tcGxldGUoKSA/ICdsaWdodGdyZXknIDogJydcIiBcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiIGdldFRleHRDb2xvcigpIFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzdHJlZXROdW1iZXIgfHwgc3RyZWV0TnVtYmVyLnRyaW0oKS5sZW5ndGggPT09IDBcIiAoa2V5ZG93bik9XCJjaGVja0tleURvd24oJGV2ZW50KVwiIFxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKClcIiAoY2xpY2spPVwib25JbnB1dENsaWNrKClcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIGlkPVwiYm94TnVtYmVySW5wdXRGaWVsZFwiIFthdHRyLnRpdGxlXT1cInBsYWNlSG9sZGVyVGV4dFwiIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlSG9sZGVyVGV4dFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIiAoZm9jdXMpPVwib25Gb2N1cygpXCIgLz5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJicGFhYy1jbGVhci1ib3hOYi1idXR0b25cIiAqbmdJZj1cIm1heVNob3dDbGVhckJ1dHRvbigpXCIgKGNsaWNrKT1cImNsZWFySW5wdXQodHJ1ZSlcIiBjbGFzcz1cImJwYWFjLWNsZWFyXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS08ZGl2IG5nLXRyYW5zY2x1ZGU+PC9kaXY+LS0+XG4gICAgICAgIDxpbnB1dCBpZD1cImJwYWFjLWJveE5iLXR5cGVhaGVhZFwiIHR5cGU9XCJ0ZXh0XCIgZGlzYWJsZWQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgWyhuZ01vZGVsKV09XCJicFR5cGVBaGVhZFwiIC8+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiYWRkcmVzc0lzVmFsaWRhdGVkXCIgY2xhc3M9XCJib3hOYkNoZWttYXJrXCI+PHNwYW4gY2xhc3M9XCJjaGVja21hcmtcIj48L3NwYW4+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgW2hpZGRlbl09XCJjb2xsYXBzZURyb3Bkb3duXCIgY2xhc3M9XCJicGFhYy1kcm9wZG93bi1tZW51LWNvbnRhaW5lclwiIFxuICAgICAgICAqbmdJZj1cInN1Z2dlc3Rpb25MZXZlbD09PVN1Z2dlc3Rpb25MZXZlbFR5cGUuU3RyZWV0QW5kQm94TnVtYmVyICYmICBzdWdnZXN0aW9ucyAmJiBzdWdnZXN0aW9ucy5sZW5ndGg+MFwiPlxuICAgICAgICA8ZGl2ICNib3hOdW1iZXJMaXN0IFthcHBWaXNpYmxlU3VnZ2VzdGlvbl09XCJ2aXNpYmxlU3VnZ2VzaW9uQ291bnRcIiBpZD1cImJwYWFjLWJveC1kcm9wZG93blwiIGNsYXNzPVwiYnBhYWMtZHJvcGRvd24tbWVudVwiPlxuICAgICAgICAgICAgPHVsIHJvbGU9XCJsaXN0Ym94XCIgaWQ9XCJicGFhYy1ib3hOYi1zdWdnZXN0aW9uc0xpc3RcIiBjbGFzcz1cImxpc3QtdW5zdHlsZWRcIj5cbiAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm9wdGlvblwiICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc3VnZ2VzdGlvbnM7IGxldCBpZHggPSBpbmRleFwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzooc2VsZWN0ZWRJbmRleD09aWR4KX1cIiBcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cImNsaWNrU3VnZ2VzdGlvbigkZXZlbnQsIG9wdGlvbilcIlxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNlbGVjdGVkSW5kZXg9aWR4XCIgKG1vdXNlbGVhdmUpPVwic2VsZWN0ZWRJbmRleD0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9wdGlvblwiIFtpbm5lckh0bWxdPVwib3B0aW9uWydub3QtaW4tbGlzdCddID8gZW1wdHlSZXNwb25zZVRleHQgOiBvcHRpb24uc3RyaW5nIHwgaGlnaGxpZ2h0U3VnZ2VzdGlvbiA6IHdvcmRMaXN0XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|