UNPKG

survey-angular-ui

Version:

survey.js is a JavaScript Survey Library. It is a modern way to add a survey to your website. It uses JSON for survey metadata and results.

69 lines 14.9 kB
import { Component, Input, ViewChild } from "@angular/core"; import { ProgressButtonsResponsivityManager } from "survey-core"; import { AngularComponentFactory } from "../../../component-factory"; import * as i0 from "@angular/core"; import * as i1 from "../../../survey-string.component"; import * as i2 from "@angular/common"; export class ProgressButtonsComponent { constructor(changeDetectorRef) { this.changeDetectorRef = changeDetectorRef; this.hasScroller = false; this.canShowHeader = false; this.canShowFooter = false; this.canShowItemTitles = true; } onResize(canShowItemTitles) { this.canShowItemTitles = canShowItemTitles; this.canShowHeader = !this.canShowItemTitles; this.changeDetectorRef.detectChanges(); } onUpdateScroller(hasScroller) { this.hasScroller = hasScroller; this.changeDetectorRef.detectChanges(); } onUpdateSettings() { this.canShowItemTitles = this.model.showItemTitles; this.canShowFooter = !this.model.showItemTitles; this.changeDetectorRef.detectChanges(); } ngOnInit() { } ngOnChanges(changes) { } clickScrollButton(isLeftScroll) { if (this.progressButtonsListContainer) { this.progressButtonsListContainer.nativeElement.scrollLeft += (isLeftScroll ? -1 : 1) * 70; } } ngAfterViewInit() { var _a; if (!!((_a = this.progressButtonsListContainer) === null || _a === void 0 ? void 0 : _a.nativeElement)) { const element = this.progressButtonsListContainer.nativeElement; this.respManager = new ProgressButtonsResponsivityManager(this.model, element, this); } } ngOnDestroy() { var _a; (_a = this.respManager) === null || _a === void 0 ? void 0 : _a.dispose(); } } ProgressButtonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressButtonsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); ProgressButtonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProgressButtonsComponent, selector: "sv-ng-progress-buttons", inputs: { model: "model", survey: "survey", container: "container" }, viewQueries: [{ propertyName: "progressButtonsListContainer", first: true, predicate: ["progressButtonsListContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [class]=\"model.getRootCss(container)\" [style.maxWidth]=\"model.progressWidth\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-label=\"progress\">\n <div *ngIf=\"canShowHeader\" [class]=\"survey.css.progressButtonsHeader\">\n <div [class]=\"survey.css.progressButtonsPageTitle\" [title]=\"model.headerText\">{{ model.headerText }}</div>\n </div>\n <div [class]=\"survey.css.progressButtonsContainer\">\n <div\n [class]=\"model.getScrollButtonCss(hasScroller, true)\"\n (click)=\"clickScrollButton(true)\"\n role=\"button\"\n ></div>\n <div\n [class]=\"survey.css.progressButtonsListContainer\" #progressButtonsListContainer>\n <ul [class]=\"survey.css.progressButtonsList\">\n <li\n *ngFor=\"let page of survey.visiblePages; index as index\"\n [class]=\"model.getListElementCss(index)\"\n (click)=\"model.isListElementClickable(index) ? model.clickListElement(page) : null\"\n [attr.data-page-number]=\"model.getItemNumber(page)\">\n <div [class]=\"survey.css.progressButtonsConnector\"></div>\n <div *ngIf=\"canShowItemTitles\"\n [class]=\"survey.css.progressButtonsPageTitle\"\n [title]=\"page.renderedNavigationTitle\"\n >\n <sv-ng-string [model]=\"page.locNavigationTitle\"></sv-ng-string>\n </div>\n <div *ngIf=\"canShowItemTitles\"\n [class]=\"survey.css.progressButtonsPageDescription\"\n [title]=\"page.locNavigationDescription.renderedHtml\"\n >\n {{ page.locNavigationDescription.renderedHtml }}\n </div>\n <div [class]=\"survey.css.progressButtonsButton\"><div [class]=\"survey.css.progressButtonsButtonBackground\"></div><div [class]=\"survey.css.progressButtonsButtonContent\"></div><span>{{model.getItemNumber(page)}}</span></div>\n </li>\n </ul>\n </div>\n <div\n [class]=\"model.getScrollButtonCss(hasScroller, false)\"\n (click)=\"clickScrollButton(false)\"\n role=\"button\"\n ></div>\n </div>\n <div *ngIf=\"canShowFooter\" [class]=\"survey.css.progressButtonsFooter\">\n <div [class]=\"survey.css.progressButtonsPageTitle\" [title]=\"model.footerText\">{{ model.footerText }}</div>\n </div>\n</div>", components: [{ type: i1.SurveyStringComponent, selector: "sv-ng-string, '[sv-ng-string]'", inputs: ["model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProgressButtonsComponent, decorators: [{ type: Component, args: [{ selector: "sv-ng-progress-buttons", templateUrl: "./progress.component.html" }] }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { model: [{ type: Input }], survey: [{ type: Input }], container: [{ type: Input }], progressButtonsListContainer: [{ type: ViewChild, args: ["progressButtonsListContainer"] }] } }); AngularComponentFactory.Instance.registerComponent("sv-progress-buttons", ProgressButtonsComponent); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcHJvZ3Jlc3MvYnV0dG9ucy9wcm9ncmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9wcm9ncmVzcy9idXR0b25zL3Byb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFjLEtBQUssRUFBK0MsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZKLE9BQU8sRUFBZ0Msa0NBQWtDLEVBQTZCLE1BQU0sYUFBYSxDQUFDO0FBQzFILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBTXJFLE1BQU0sT0FBTyx3QkFBd0I7SUFVbkMsWUFBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFMakQsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0Isa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isc0JBQWlCLEdBQVksSUFBSSxDQUFDO0lBR3pDLENBQUM7SUFDRCxRQUFRLENBQUMsaUJBQTBCO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsV0FBb0I7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ2hELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsUUFBUTtJQUNSLENBQUM7SUFDRCxXQUFXLENBQUMsT0FBc0I7SUFDbEMsQ0FBQztJQUNNLGlCQUFpQixDQUN0QixZQUFxQjtRQUVyQixJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUNyQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUM1RjtJQUNILENBQUM7SUFDTSxlQUFlOztRQUNwQixJQUFJLENBQUMsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLDRCQUE0QiwwQ0FBRSxhQUFhLENBQUEsRUFBRTtZQUN0RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsYUFBYSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7SUFDTSxXQUFXOztRQUNoQixNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzlCLENBQUM7O3NIQTdDVSx3QkFBd0I7MEdBQXhCLHdCQUF3Qix1U0NSckMsc3dFQTRDTTs0RkRwQ08sd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFdBQVcsRUFBRSwyQkFBMkI7aUJBQ3pDO3dHQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDcUMsNEJBQTRCO3NCQUF0RSxTQUFTO3VCQUFDLDhCQUE4Qjs7QUEyQzNDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCwgUHJvZ3Jlc3NCdXR0b25zLCBQcm9ncmVzc0J1dHRvbnNSZXNwb25zaXZpdHlNYW5hZ2VyLCBJUHJvZ3Jlc3NCdXR0b25zVmlld01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBBbmd1bGFyQ29tcG9uZW50RmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnQtZmFjdG9yeVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwic3YtbmctcHJvZ3Jlc3MtYnV0dG9uc1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3Byb2dyZXNzLmNvbXBvbmVudC5odG1sXCJcbn0pXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NCdXR0b25zQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uSW5pdCwgSVByb2dyZXNzQnV0dG9uc1ZpZXdNb2RlbCB7XG4gIEBJbnB1dCgpIG1vZGVsITogUHJvZ3Jlc3NCdXR0b25zO1xuICBASW5wdXQoKSBzdXJ2ZXkhOiBTdXJ2ZXlNb2RlbDtcbiAgQElucHV0KCkgY29udGFpbmVyITogc3RyaW5nO1xuICBAVmlld0NoaWxkKFwicHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lclwiKSBwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIHB1YmxpYyBoYXNTY3JvbGxlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2FuU2hvd0hlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2FuU2hvd0Zvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2FuU2hvd0l0ZW1UaXRsZXM6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIHJlc3BNYW5hZ2VyPzogUHJvZ3Jlc3NCdXR0b25zUmVzcG9uc2l2aXR5TWFuYWdlcjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgfVxuICBvblJlc2l6ZShjYW5TaG93SXRlbVRpdGxlczogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2FuU2hvd0l0ZW1UaXRsZXMgPSBjYW5TaG93SXRlbVRpdGxlcztcbiAgICB0aGlzLmNhblNob3dIZWFkZXIgPSAhdGhpcy5jYW5TaG93SXRlbVRpdGxlcztcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBvblVwZGF0ZVNjcm9sbGVyKGhhc1Njcm9sbGVyOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5oYXNTY3JvbGxlciA9IGhhc1Njcm9sbGVyO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIG9uVXBkYXRlU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5TaG93SXRlbVRpdGxlcyA9IHRoaXMubW9kZWwuc2hvd0l0ZW1UaXRsZXM7XG4gICAgdGhpcy5jYW5TaG93Rm9vdGVyID0gIXRoaXMubW9kZWwuc2hvd0l0ZW1UaXRsZXM7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICB9XG4gIHB1YmxpYyBjbGlja1Njcm9sbEJ1dHRvbihcbiAgICBpc0xlZnRTY3JvbGw6IGJvb2xlYW5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcikge1xuICAgICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCArPSAoaXNMZWZ0U2Nyb2xsID8gLTEgOiAxKSAqIDcwO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghIXRoaXMucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgdGhpcy5yZXNwTWFuYWdlciA9IG5ldyBQcm9ncmVzc0J1dHRvbnNSZXNwb25zaXZpdHlNYW5hZ2VyKHRoaXMubW9kZWwsIGVsZW1lbnQsIHRoaXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNwTWFuYWdlcj8uZGlzcG9zZSgpO1xuICB9XG59XG5Bbmd1bGFyQ29tcG9uZW50RmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlckNvbXBvbmVudChcInN2LXByb2dyZXNzLWJ1dHRvbnNcIiwgUHJvZ3Jlc3NCdXR0b25zQ29tcG9uZW50KTtcbiIsIjxkaXYgW2NsYXNzXT1cIm1vZGVsLmdldFJvb3RDc3MoY29udGFpbmVyKVwiIFtzdHlsZS5tYXhXaWR0aF09XCJtb2RlbC5wcm9ncmVzc1dpZHRoXCIgcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW1pbj1cIjBcIiBhcmlhLXZhbHVlbWF4PVwiMTAwXCIgYXJpYS1sYWJlbD1cInByb2dyZXNzXCI+XG4gIDxkaXYgKm5nSWY9XCJjYW5TaG93SGVhZGVyXCIgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zSGVhZGVyXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGVcIiBbdGl0bGVdPVwibW9kZWwuaGVhZGVyVGV4dFwiPnt7IG1vZGVsLmhlYWRlclRleHQgfX08L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyXCI+XG4gICAgPGRpdlxuICAgICAgW2NsYXNzXT1cIm1vZGVsLmdldFNjcm9sbEJ1dHRvbkNzcyhoYXNTY3JvbGxlciwgdHJ1ZSlcIlxuICAgICAgKGNsaWNrKT1cImNsaWNrU2Nyb2xsQnV0dG9uKHRydWUpXCJcbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgID48L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyXCIgI3Byb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXI+XG4gICAgICA8dWwgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdFwiPlxuICAgICAgICA8bGlcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcGFnZSBvZiBzdXJ2ZXkudmlzaWJsZVBhZ2VzOyBpbmRleCBhcyBpbmRleFwiXG4gICAgICAgICAgW2NsYXNzXT1cIm1vZGVsLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm1vZGVsLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpID8gbW9kZWwuY2xpY2tMaXN0RWxlbWVudChwYWdlKSA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmRhdGEtcGFnZS1udW1iZXJdPVwibW9kZWwuZ2V0SXRlbU51bWJlcihwYWdlKVwiPlxuICAgICAgICAgIDxkaXYgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zQ29ubmVjdG9yXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNhblNob3dJdGVtVGl0bGVzXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJzdXJ2ZXkuY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwicGFnZS5yZW5kZXJlZE5hdmlnYXRpb25UaXRsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN2LW5nLXN0cmluZyBbbW9kZWxdPVwicGFnZS5sb2NOYXZpZ2F0aW9uVGl0bGVcIj48L3N2LW5nLXN0cmluZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FuU2hvd0l0ZW1UaXRsZXNcIlxuICAgICAgICAgICAgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zUGFnZURlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJwYWdlLmxvY05hdmlnYXRpb25EZXNjcmlwdGlvbi5yZW5kZXJlZEh0bWxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHBhZ2UubG9jTmF2aWdhdGlvbkRlc2NyaXB0aW9uLnJlbmRlcmVkSHRtbCB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zQnV0dG9uXCI+PGRpdiBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNCdXR0b25CYWNrZ3JvdW5kXCI+PC9kaXY+PGRpdiBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNCdXR0b25Db250ZW50XCI+PC9kaXY+PHNwYW4+e3ttb2RlbC5nZXRJdGVtTnVtYmVyKHBhZ2UpfX08L3NwYW4+PC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIFtjbGFzc109XCJtb2RlbC5nZXRTY3JvbGxCdXR0b25Dc3MoaGFzU2Nyb2xsZXIsIGZhbHNlKVwiXG4gICAgICAoY2xpY2spPVwiY2xpY2tTY3JvbGxCdXR0b24oZmFsc2UpXCJcbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgID48L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJjYW5TaG93Rm9vdGVyXCIgW2NsYXNzXT1cInN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zRm9vdGVyXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwic3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGVcIiBbdGl0bGVdPVwibW9kZWwuZm9vdGVyVGV4dFwiPnt7IG1vZGVsLmZvb3RlclRleHQgfX08L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=