UNPKG

ngx-extended-pdf-viewer

Version:

Embedding PDF files in your Angular application. Highly configurable viewer including the toolbar, sidebar, and all the features you're used to.

185 lines 37.4 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../pdf-book-mode/pdf-book-mode.component"; import * as i3 from "../pdf-document-properties/pdf-document-properties.component"; import * as i4 from "../pdf-download/pdf-download.component"; import * as i5 from "../pdf-editor/pdf-editor.component"; import * as i6 from "../pdf-even-spread/pdf-even-spread.component"; import * as i7 from "../pdf-find-button/pdf-find-button.component"; import * as i8 from "../pdf-hand-tool/pdf-hand-tool.component"; import * as i9 from "../pdf-horizontal-scroll/pdf-horizontal-scroll.component"; import * as i10 from "../pdf-infinite-scroll/pdf-infinite-scroll.component"; import * as i11 from "../pdf-no-spread/pdf-no-spread.component"; import * as i12 from "../pdf-odd-spread/pdf-odd-spread.component"; import * as i13 from "../pdf-open-file/pdf-open-file.component"; import * as i14 from "../pdf-paging-area/pdf-paging-area.component"; import * as i15 from "../pdf-presentation-mode/pdf-presentation-mode.component"; import * as i16 from "../pdf-print/pdf-print.component"; import * as i17 from "../pdf-rotate-page-cw/pdf-rotate-page-cw.component"; import * as i18 from "../pdf-rotate-page-ccw/pdf-rotate-page-ccw.component"; import * as i19 from "../pdf-select-tool/pdf-select-tool.component"; import * as i20 from "../pdf-single-page-mode/pdf-single-page-mode.component"; import * as i21 from "../pdf-toggle-secondary-toolbar/pdf-toggle-secondary-toolbar.component"; import * as i22 from "../pdf-toggle-sidebar/pdf-toggle-sidebar.component"; import * as i23 from "../pdf-vertical-scroll-button/pdf-vertical-scroll-mode.component"; import * as i24 from "../pdf-wrapped-scroll-mode/pdf-wrapped-scroll-mode.component"; import * as i25 from "../pdf-zoom-toolbar/pdf-zoom-toolbar.component"; export class PdfToolbarComponent { elementRef; customToolbar; // This is set internally by the viewer after loading a document. If the document has a text layer, the viewer will set this to true. hasTextLayer = false; mobileFriendlyZoomScale = 1; primaryMenuVisible = true; showDownloadButton = true; showDrawEditor = false; showHighlightEditor = true; showTextEditor = false; showStampEditor = false; showFindButton = undefined; showHandToolButton = true; showZoomDropdown = true; handTool = false; showOpenFileButton = true; showPrintButton = true; showPagingButtons = true; showFirstAndLastPageButtons = true; showPreviousAndNextPageButtons = true; showPageNumber = true; showPageLabel = true; showPresentationModeButton = false; showRotateCwButton = true; showRotateCcwButton = true; showSecondaryToolbarButton = true; showSidebarButton = true; sidebarVisible = false; showZoomButtons = true; textLayer = undefined; toolbarMarginTop = '0px'; toolbarWidth = '100%'; zoomLevels = ['auto', 'page-actual', 'page-fit', 'page-width', 0.5, 0.75, 1, 1.25, 1.5, 2, 3, 4]; pageViewMode; pageViewModeChange = new EventEmitter(); spread; scrollMode; showPropertiesButton = true; showSpreadButton = true; showSinglePageModeButton = true; showVerticalScrollButton = true; showHorizontalScrollButton = true; showWrappedScrollButton = true; showInfiniteScrollButton = true; showBookModeButton = true; onToolbarLoaded = new EventEmitter(); findbarVisible = false; constructor(elementRef) { this.elementRef = elementRef; } ngAfterViewInit() { this.onToolbarLoaded.emit(this.elementRef.nativeElement.getElementsByClassName('toolbar')[0]); } updatePageViewMode(pageViewMode) { if (pageViewMode) { this.pageViewModeChange.emit(pageViewMode); this.pageViewMode = pageViewMode; } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PdfToolbarComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PdfToolbarComponent, selector: "pdf-toolbar", inputs: { customToolbar: "customToolbar", hasTextLayer: "hasTextLayer", mobileFriendlyZoomScale: "mobileFriendlyZoomScale", primaryMenuVisible: "primaryMenuVisible", showDownloadButton: "showDownloadButton", showDrawEditor: "showDrawEditor", showHighlightEditor: "showHighlightEditor", showTextEditor: "showTextEditor", showStampEditor: "showStampEditor", showFindButton: "showFindButton", showHandToolButton: "showHandToolButton", showZoomDropdown: "showZoomDropdown", handTool: "handTool", showOpenFileButton: "showOpenFileButton", showPrintButton: "showPrintButton", showPagingButtons: "showPagingButtons", showFirstAndLastPageButtons: "showFirstAndLastPageButtons", showPreviousAndNextPageButtons: "showPreviousAndNextPageButtons", showPageNumber: "showPageNumber", showPageLabel: "showPageLabel", showPresentationModeButton: "showPresentationModeButton", showRotateCwButton: "showRotateCwButton", showRotateCcwButton: "showRotateCcwButton", showSecondaryToolbarButton: "showSecondaryToolbarButton", showSidebarButton: "showSidebarButton", sidebarVisible: "sidebarVisible", showZoomButtons: "showZoomButtons", textLayer: "textLayer", toolbarMarginTop: "toolbarMarginTop", toolbarWidth: "toolbarWidth", zoomLevels: "zoomLevels", pageViewMode: "pageViewMode", spread: "spread", scrollMode: "scrollMode", showPropertiesButton: "showPropertiesButton", showSpreadButton: "showSpreadButton", showSinglePageModeButton: "showSinglePageModeButton", showVerticalScrollButton: "showVerticalScrollButton", showHorizontalScrollButton: "showHorizontalScrollButton", showWrappedScrollButton: "showWrappedScrollButton", showInfiniteScrollButton: "showInfiniteScrollButton", showBookModeButton: "showBookModeButton", findbarVisible: "findbarVisible" }, outputs: { pageViewModeChange: "pageViewModeChange", onToolbarLoaded: "onToolbarLoaded" }, ngImport: i0, template: "<div class=\"toolbar\" [class.invisible]=\"!primaryMenuVisible\"\n [style.transform]=\"'scale(' + mobileFriendlyZoomScale + ')'\" [style.transformOrigin]=\"'left center'\"\n [style.width]=\"toolbarWidth\" [style.marginTop]=\"toolbarMarginTop\">\n <div id=\"toolbarContainer\">\n <ng-content *ngTemplateOutlet=\"customToolbar ? customToolbar : defaultToolbar\"></ng-content>\n <div id=\"loadingBar\">\n <div class=\"progress\">\n <div class=\"glimmer\"></div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultToolbar>\n <div id=\"toolbarViewer\">\n <div id=\"toolbarViewerLeft\">\n <pdf-toggle-sidebar [show]=\"showSidebarButton\" [sidebarVisible]=\"sidebarVisible\"></pdf-toggle-sidebar>\n <pdf-find-button [showFindButton]=\"showFindButton\" [textLayer]=\"textLayer\" [findbarVisible]=\"findbarVisible\"\n [hasTextLayer]=\"hasTextLayer\"></pdf-find-button>\n <pdf-paging-area [showPagingButtons]=\"showPagingButtons\"\n [showFirstAndLastPageButtons]=\"showFirstAndLastPageButtons\"\n [showPreviousAndNextPageButtons]=\"showPreviousAndNextPageButtons\" [showPageNumber]=\"showPageNumber\"\n [showPageLabel]=\"showPageLabel\"></pdf-paging-area>\n </div>\n <pdf-zoom-toolbar id=\"toolbarViewerMiddleContainer\" [showZoomButtons]=\"showZoomButtons\"\n [showZoomDropdown]=\"showZoomDropdown\" [zoomLevels]=\"zoomLevels\"></pdf-zoom-toolbar>\n <div id=\"toolbarViewerRight\">\n <pdf-document-properties [show]=\"showPropertiesButton\"></pdf-document-properties>\n <pdf-no-spread [scrollMode]=\"scrollMode\" [show]=\"showSpreadButton\"></pdf-no-spread>\n <pdf-odd-spread [scrollMode]=\"scrollMode\" [show]=\"showSpreadButton\"></pdf-odd-spread>\n <pdf-even-spread [scrollMode]=\"scrollMode\" [show]=\"showSpreadButton\"></pdf-even-spread>\n <pdf-single-page-mode [show]=\"showSinglePageModeButton\" [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\" [scrollMode]=\"scrollMode\"></pdf-single-page-mode>\n <pdf-vertical-scroll-mode [show]=\"showVerticalScrollButton\" [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\" [scrollMode]=\"scrollMode\"></pdf-vertical-scroll-mode>\n <pdf-horizontal-scroll [show]=\"showHorizontalScrollButton\" [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\" [scrollMode]=\"scrollMode\"></pdf-horizontal-scroll>\n <pdf-wrapped-scroll-mode [show]=\"showWrappedScrollButton\" [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\" [scrollMode]=\"scrollMode\"></pdf-wrapped-scroll-mode>\n <pdf-infinite-scroll [show]=\"showInfiniteScrollButton\" [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\" [scrollMode]=\"scrollMode\"></pdf-infinite-scroll>\n <pdf-book-mode [show]=\"showBookModeButton\" [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\" [scrollMode]=\"scrollMode\"></pdf-book-mode>\n <pdf-hand-tool [showHandToolButton]=\"showHandToolButton\" [handTool]=\"handTool\"></pdf-hand-tool>\n <pdf-select-tool [showSelectToolButton]=\"showHandToolButton\" [handTool]=\"handTool\"></pdf-select-tool>\n <pdf-rotate-page-cw [showRotateCwButton]=\"showRotateCwButton\"> </pdf-rotate-page-cw>\n <pdf-rotate-page-ccw [showRotateCcwButton]=\"showRotateCcwButton\"> </pdf-rotate-page-ccw>\n <pdf-presentation-mode [showPresentationModeButton]=\"showPresentationModeButton\"></pdf-presentation-mode>\n <pdf-open-file [showOpenFileButton]=\"showOpenFileButton\"></pdf-open-file>\n <pdf-print [showPrintButton]=\"showPrintButton\"></pdf-print>\n <pdf-download [showDownloadButton]=\"showDownloadButton\"></pdf-download>\n\n <pdf-editor [showDrawEditor]=\"showDrawEditor\" [showHighlightEditor]=\"showHighlightEditor\"\n [showTextEditor]=\"showTextEditor\" [showStampEditor]=\"showStampEditor\"></pdf-editor>\n <pdf-toggle-secondary-toolbar [showSecondaryToolbarButton]=\"showSecondaryToolbarButton\">\n </pdf-toggle-secondary-toolbar>\n </div>\n </div>\n</ng-template>", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.PdfBookModeComponent, selector: "pdf-book-mode", inputs: ["show", "pageViewMode", "scrollMode"], outputs: ["pageViewModeChange"] }, { kind: "component", type: i3.PdfDocumentPropertiesComponent, selector: "pdf-document-properties", inputs: ["show"] }, { kind: "component", type: i4.PdfDownloadComponent, selector: "pdf-download", inputs: ["showDownloadButton"] }, { kind: "component", type: i5.PdfEditorComponent, selector: "pdf-editor", inputs: ["showDrawEditor", "showHighlightEditor", "showTextEditor", "showStampEditor"] }, { kind: "component", type: i6.PdfEvenSpreadComponent, selector: "pdf-even-spread", inputs: ["show", "scrollMode"] }, { kind: "component", type: i7.PdfFindButtonComponent, selector: "pdf-find-button", inputs: ["showFindButton", "hasTextLayer", "textLayer", "findbarVisible"] }, { kind: "component", type: i8.PdfHandToolComponent, selector: "pdf-hand-tool", inputs: ["showHandToolButton", "handTool"] }, { kind: "component", type: i9.PdfHorizontalScrollComponent, selector: "pdf-horizontal-scroll", inputs: ["show", "scrollMode", "pageViewMode"], outputs: ["pageViewModeChange"] }, { kind: "component", type: i10.PdfInfiniteScrollComponent, selector: "pdf-infinite-scroll", inputs: ["show", "pageViewMode", "scrollMode"], outputs: ["pageViewModeChange"] }, { kind: "component", type: i11.PdfNoSpreadComponent, selector: "pdf-no-spread", inputs: ["show", "scrollMode"] }, { kind: "component", type: i12.PdfOddSpreadComponent, selector: "pdf-odd-spread", inputs: ["show", "scrollMode"] }, { kind: "component", type: i13.PdfOpenFileComponent, selector: "pdf-open-file", inputs: ["showOpenFileButton"] }, { kind: "component", type: i14.PdfPagingAreaComponent, selector: "pdf-paging-area", inputs: ["showPagingButtons", "showFirstAndLastPageButtons", "showPreviousAndNextPageButtons", "showPageNumber", "showPageLabel"] }, { kind: "component", type: i15.PdfPresentationModeComponent, selector: "pdf-presentation-mode", inputs: ["showPresentationModeButton"] }, { kind: "component", type: i16.PdfPrintComponent, selector: "pdf-print", inputs: ["showPrintButton"] }, { kind: "component", type: i17.PdfRotatePageCwComponent, selector: "pdf-rotate-page-cw", inputs: ["showRotateCwButton", "clockwise", "counterClockwise"] }, { kind: "component", type: i18.PdfRotatePageCcwComponent, selector: "pdf-rotate-page-ccw", inputs: ["showRotateCcwButton", "counterClockwise"] }, { kind: "component", type: i19.PdfSelectToolComponent, selector: "pdf-select-tool", inputs: ["showSelectToolButton", "handTool"] }, { kind: "component", type: i20.PdfSinglePageModeComponent, selector: "pdf-single-page-mode", inputs: ["show", "scrollMode", "pageViewMode"], outputs: ["pageViewModeChange"] }, { kind: "component", type: i21.PdfToggleSecondaryToolbarComponent, selector: "pdf-toggle-secondary-toolbar", inputs: ["showSecondaryToolbarButton"] }, { kind: "component", type: i22.PdfToggleSidebarComponent, selector: "pdf-toggle-sidebar", inputs: ["show", "sidebarVisible"], outputs: ["showChange"] }, { kind: "component", type: i23.PdfVerticalScrollModeComponent, selector: "pdf-vertical-scroll-mode", inputs: ["show", "scrollMode", "pageViewMode"], outputs: ["pageViewModeChange"] }, { kind: "component", type: i24.PdfWrappedScrollModeComponent, selector: "pdf-wrapped-scroll-mode", inputs: ["show", "scrollMode", "pageViewMode"], outputs: ["pageViewModeChange"] }, { kind: "component", type: i25.PdfZoomToolbarComponent, selector: "pdf-zoom-toolbar", inputs: ["showZoomButtons", "zoomLevels", "showZoomDropdown"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PdfToolbarComponent, decorators: [{ type: Component, args: [{ selector: 'pdf-toolbar', template: "<div class=\"toolbar\" [class.invisible]=\"!primaryMenuVisible\"\n [style.transform]=\"'scale(' + mobileFriendlyZoomScale + ')'\" [style.transformOrigin]=\"'left center'\"\n [style.width]=\"toolbarWidth\" [style.marginTop]=\"toolbarMarginTop\">\n <div id=\"toolbarContainer\">\n <ng-content *ngTemplateOutlet=\"customToolbar ? customToolbar : defaultToolbar\"></ng-content>\n <div id=\"loadingBar\">\n <div class=\"progress\">\n <div class=\"glimmer\"></div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #defaultToolbar>\n <div id=\"toolbarViewer\">\n <div id=\"toolbarViewerLeft\">\n <pdf-toggle-sidebar [show]=\"showSidebarButton\" [sidebarVisible]=\"sidebarVisible\"></pdf-toggle-sidebar>\n <pdf-find-button [showFindButton]=\"showFindButton\" [textLayer]=\"textLayer\" [findbarVisible]=\"findbarVisible\"\n [hasTextLayer]=\"hasTextLayer\"></pdf-find-button>\n <pdf-paging-area [showPagingButtons]=\"showPagingButtons\"\n [showFirstAndLastPageButtons]=\"showFirstAndLastPageButtons\"\n [showPreviousAndNextPageButtons]=\"showPreviousAndNextPageButtons\" [showPageNumber]=\"showPageNumber\"\n [showPageLabel]=\"showPageLabel\"></pdf-paging-area>\n </div>\n <pdf-zoom-toolbar id=\"toolbarViewerMiddleContainer\" [showZoomButtons]=\"showZoomButtons\"\n [showZoomDropdown]=\"showZoomDropdown\" [zoomLevels]=\"zoomLevels\"></pdf-zoom-toolbar>\n <div id=\"toolbarViewerRight\">\n <pdf-document-properties [show]=\"showPropertiesButton\"></pdf-document-properties>\n <pdf-no-spread [scrollMode]=\"scrollMode\" [show]=\"showSpreadButton\"></pdf-no-spread>\n <pdf-odd-spread [scrollMode]=\"scrollMode\" [show]=\"showSpreadButton\"></pdf-odd-spread>\n <pdf-even-spread [scrollMode]=\"scrollMode\" [show]=\"showSpreadButton\"></pdf-even-spread>\n <pdf-single-page-mode [show]=\"showSinglePageModeButton\" [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\" [scrollMode]=\"scrollMode\"></pdf-single-page-mode>\n <pdf-vertical-scroll-mode [show]=\"showVerticalScrollButton\" [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\" [scrollMode]=\"scrollMode\"></pdf-vertical-scroll-mode>\n <pdf-horizontal-scroll [show]=\"showHorizontalScrollButton\" [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\" [scrollMode]=\"scrollMode\"></pdf-horizontal-scroll>\n <pdf-wrapped-scroll-mode [show]=\"showWrappedScrollButton\" [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\" [scrollMode]=\"scrollMode\"></pdf-wrapped-scroll-mode>\n <pdf-infinite-scroll [show]=\"showInfiniteScrollButton\" [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\" [scrollMode]=\"scrollMode\"></pdf-infinite-scroll>\n <pdf-book-mode [show]=\"showBookModeButton\" [pageViewMode]=\"pageViewMode\"\n (pageViewModeChange)=\"updatePageViewMode($event)\" [scrollMode]=\"scrollMode\"></pdf-book-mode>\n <pdf-hand-tool [showHandToolButton]=\"showHandToolButton\" [handTool]=\"handTool\"></pdf-hand-tool>\n <pdf-select-tool [showSelectToolButton]=\"showHandToolButton\" [handTool]=\"handTool\"></pdf-select-tool>\n <pdf-rotate-page-cw [showRotateCwButton]=\"showRotateCwButton\"> </pdf-rotate-page-cw>\n <pdf-rotate-page-ccw [showRotateCcwButton]=\"showRotateCcwButton\"> </pdf-rotate-page-ccw>\n <pdf-presentation-mode [showPresentationModeButton]=\"showPresentationModeButton\"></pdf-presentation-mode>\n <pdf-open-file [showOpenFileButton]=\"showOpenFileButton\"></pdf-open-file>\n <pdf-print [showPrintButton]=\"showPrintButton\"></pdf-print>\n <pdf-download [showDownloadButton]=\"showDownloadButton\"></pdf-download>\n\n <pdf-editor [showDrawEditor]=\"showDrawEditor\" [showHighlightEditor]=\"showHighlightEditor\"\n [showTextEditor]=\"showTextEditor\" [showStampEditor]=\"showStampEditor\"></pdf-editor>\n <pdf-toggle-secondary-toolbar [showSecondaryToolbarButton]=\"showSecondaryToolbarButton\">\n </pdf-toggle-secondary-toolbar>\n </div>\n </div>\n</ng-template>" }] }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { customToolbar: [{ type: Input }], hasTextLayer: [{ type: Input }], mobileFriendlyZoomScale: [{ type: Input }], primaryMenuVisible: [{ type: Input }], showDownloadButton: [{ type: Input }], showDrawEditor: [{ type: Input }], showHighlightEditor: [{ type: Input }], showTextEditor: [{ type: Input }], showStampEditor: [{ type: Input }], showFindButton: [{ type: Input }], showHandToolButton: [{ type: Input }], showZoomDropdown: [{ type: Input }], handTool: [{ type: Input }], showOpenFileButton: [{ type: Input }], showPrintButton: [{ type: Input }], showPagingButtons: [{ type: Input }], showFirstAndLastPageButtons: [{ type: Input }], showPreviousAndNextPageButtons: [{ type: Input }], showPageNumber: [{ type: Input }], showPageLabel: [{ type: Input }], showPresentationModeButton: [{ type: Input }], showRotateCwButton: [{ type: Input }], showRotateCcwButton: [{ type: Input }], showSecondaryToolbarButton: [{ type: Input }], showSidebarButton: [{ type: Input }], sidebarVisible: [{ type: Input }], showZoomButtons: [{ type: Input }], textLayer: [{ type: Input }], toolbarMarginTop: [{ type: Input }], toolbarWidth: [{ type: Input }], zoomLevels: [{ type: Input }], pageViewMode: [{ type: Input }], pageViewModeChange: [{ type: Output }], spread: [{ type: Input }], scrollMode: [{ type: Input }], showPropertiesButton: [{ type: Input }], showSpreadButton: [{ type: Input }], showSinglePageModeButton: [{ type: Input }], showVerticalScrollButton: [{ type: Input }], showHorizontalScrollButton: [{ type: Input }], showWrappedScrollButton: [{ type: Input }], showInfiniteScrollButton: [{ type: Input }], showBookModeButton: [{ type: Input }], onToolbarLoaded: [{ type: Output }], findbarVisible: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWV4dGVuZGVkLXBkZi12aWV3ZXIvc3JjL2xpYi90b29sYmFyL3BkZi10b29sYmFyL3BkZi10b29sYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1leHRlbmRlZC1wZGYtdmlld2VyL3NyYy9saWIvdG9vbGJhci9wZGYtdG9vbGJhci9wZGYtdG9vbGJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVS9HLE1BQU0sT0FBTyxtQkFBbUI7SUF5SVY7SUF2SWIsYUFBYSxDQUErQjtJQUVuRCxxSUFBcUk7SUFFOUgsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUdyQix1QkFBdUIsR0FBRyxDQUFDLENBQUM7SUFHNUIsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0lBRzFCLGtCQUFrQixHQUF5QixJQUFJLENBQUM7SUFHaEQsY0FBYyxHQUF5QixLQUFLLENBQUM7SUFHN0MsbUJBQW1CLEdBQXlCLElBQUksQ0FBQztJQUdqRCxjQUFjLEdBQXlCLEtBQUssQ0FBQztJQUc3QyxlQUFlLEdBQXlCLEtBQUssQ0FBQztJQUc5QyxjQUFjLEdBQXFDLFNBQVMsQ0FBQztJQUc3RCxrQkFBa0IsR0FBeUIsSUFBSSxDQUFDO0lBR2hELGdCQUFnQixHQUF5QixJQUFJLENBQUM7SUFHOUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUdqQixrQkFBa0IsR0FBeUIsSUFBSSxDQUFDO0lBR2hELGVBQWUsR0FBeUIsSUFBSSxDQUFDO0lBRzdDLGlCQUFpQixHQUF5QixJQUFJLENBQUM7SUFHL0MsMkJBQTJCLEdB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LEtBQUs7Z0JBSUMsMEJBQTBCO3NCQURoQyxLQUFLO2dCQUlDLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFJQyxtQkFBbUI7c0JBRHpCLEtBQUs7Z0JBSUMsMEJBQTBCO3NCQURoQyxLQUFLO2dCQUlDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQUlDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBSUMsU0FBUztzQkFEZixLQUFLO2dCQUlDLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFJQyxZQUFZO3NCQURsQixLQUFLO2dCQUlDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBSUMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxrQkFBa0I7c0JBRHhCLE1BQU07Z0JBSUEsTUFBTTtzQkFEWixLQUFLO2dCQUlDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBSUMsb0JBQW9CO3NCQUQxQixLQUFLO2dCQUlDLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFJQyx3QkFBd0I7c0JBRDlCLEtBQUs7Z0JBSUMsd0JBQXdCO3NCQUQ5QixLQUFLO2dCQUlDLDBCQUEwQjtzQkFEaEMsS0FBSztnQkFJQyx1QkFBdUI7c0JBRDdCLEtBQUs7Z0JBSUMsd0JBQXdCO3NCQUQ5QixLQUFLO2dCQUlDLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFJQyxlQUFlO3NCQURyQixNQUFNO2dCQUlBLGNBQWM7c0JBRHBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhZ2VWaWV3TW9kZVR5cGUsIFNjcm9sbE1vZGVUeXBlIH0gZnJvbSAnLi4vLi4vb3B0aW9ucy9wZGYtdmlld2VyJztcbmltcG9ydCB7IFNwcmVhZFR5cGUgfSBmcm9tICcuLi8uLi9vcHRpb25zL3NwcmVhZC10eXBlJztcbmltcG9ydCB7IFJlc3BvbnNpdmVWaXNpYmlsaXR5IH0gZnJvbSAnLi4vLi4vcmVzcG9uc2l2ZS12aXNpYmlsaXR5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGRmLXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcGRmLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wZGYtdG9vbGJhci5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFBkZlRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KClcbiAgcHVibGljIGN1c3RvbVRvb2xiYXI6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgLy8gVGhpcyBpcyBzZXQgaW50ZXJuYWxseSBieSB0aGUgdmlld2VyIGFmdGVyIGxvYWRpbmcgYSBkb2N1bWVudC4gSWYgdGhlIGRvY3VtZW50IGhhcyBhIHRleHQgbGF5ZXIsIHRoZSB2aWV3ZXIgd2lsbCBzZXQgdGhpcyB0byB0cnVlLlxuICBASW5wdXQoKVxuICBwdWJsaWMgaGFzVGV4dExheWVyID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1vYmlsZUZyaWVuZGx5Wm9vbVNjYWxlID0gMTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcHJpbWFyeU1lbnVWaXNpYmxlID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0Rvd25sb2FkQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dEcmF3RWRpdG9yOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93SGlnaGxpZ2h0RWRpdG9yOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dUZXh0RWRpdG9yOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93U3RhbXBFZGl0b3I6IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dGaW5kQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd0hhbmRUb29sQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dab29tRHJvcGRvd246IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaGFuZFRvb2wgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd09wZW5GaWxlQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dQcmludEJ1dHRvbjogUmVzcG9uc2l2ZVZpc2liaWxpdHkgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93UGFnaW5nQnV0dG9uczogUmVzcG9uc2l2ZVZpc2liaWxpdHkgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93Rmlyc3RBbmRMYXN0UGFnZUJ1dHRvbnM6IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1ByZXZpb3VzQW5kTmV4dFBhZ2VCdXR0b25zOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dQYWdlTnVtYmVyOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dQYWdlTGFiZWw6IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1ByZXNlbnRhdGlvbk1vZGVCdXR0b246IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dSb3RhdGVDd0J1dHRvbjogUmVzcG9uc2l2ZVZpc2liaWxpdHkgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93Um90YXRlQ2N3QnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dTZWNvbmRhcnlUb29sYmFyQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dTaWRlYmFyQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNpZGViYXJWaXNpYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dab29tQnV0dG9uczogUmVzcG9uc2l2ZVZpc2liaWxpdHkgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZXh0TGF5ZXI6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRvb2xiYXJNYXJnaW5Ub3AgPSAnMHB4JztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdG9vbGJhcldpZHRoID0gJzEwMCUnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB6b29tTGV2ZWxzID0gWydhdXRvJywgJ3BhZ2UtYWN0dWFsJywgJ3BhZ2UtZml0JywgJ3BhZ2Utd2lkdGgnLCAwLjUsIDAuNzUsIDEsIDEuMjUsIDEuNSwgMiwgMywgNF07XG5cbiAgQElucHV0KClcbiAgcHVibGljIHBhZ2VWaWV3TW9kZTogUGFnZVZpZXdNb2RlVHlwZTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHBhZ2VWaWV3TW9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZVZpZXdNb2RlVHlwZT4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc3ByZWFkOiBTcHJlYWRUeXBlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzY3JvbGxNb2RlOiBTY3JvbGxNb2RlVHlwZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1Byb3BlcnRpZXNCdXR0b246IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1NwcmVhZEJ1dHRvbjogUmVzcG9uc2l2ZVZpc2liaWxpdHkgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93U2luZ2xlUGFnZU1vZGVCdXR0b246IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1ZlcnRpY2FsU2Nyb2xsQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dIb3Jpem9udGFsU2Nyb2xsQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dXcmFwcGVkU2Nyb2xsQnV0dG9uOiBSZXNwb25zaXZlVmlzaWJpbGl0eSA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dJbmZpbml0ZVNjcm9sbEJ1dHRvbjogUmVzcG9uc2l2ZVZpc2liaWxpdHkgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93Qm9va01vZGVCdXR0b246IFJlc3BvbnNpdmVWaXNpYmlsaXR5ID0gdHJ1ZTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIG9uVG9vbGJhckxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnQ+KCk7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZpbmRiYXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG9vbGJhckxvYWRlZC5lbWl0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3Rvb2xiYXInKVswXSBhcyBIVE1MRWxlbWVudCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUGFnZVZpZXdNb2RlKHBhZ2VWaWV3TW9kZTogUGFnZVZpZXdNb2RlVHlwZSk6IHZvaWQge1xuICAgIGlmIChwYWdlVmlld01vZGUpIHtcbiAgICAgIHRoaXMucGFnZVZpZXdNb2RlQ2hhbmdlLmVtaXQocGFnZVZpZXdNb2RlKTtcbiAgICAgIHRoaXMucGFnZVZpZXdNb2RlID0gcGFnZVZpZXdNb2RlO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRvb2xiYXJcIiBbY2xhc3MuaW52aXNpYmxlXT1cIiFwcmltYXJ5TWVudVZpc2libGVcIlxuICBbc3R5bGUudHJhbnNmb3JtXT1cIidzY2FsZSgnICsgbW9iaWxlRnJpZW5kbHlab29tU2NhbGUgKyAnKSdcIiBbc3R5bGUudHJhbnNmb3JtT3JpZ2luXT1cIidsZWZ0IGNlbnRlcidcIlxuICBbc3R5bGUud2lkdGhdPVwidG9vbGJhcldpZHRoXCIgW3N0eWxlLm1hcmdpblRvcF09XCJ0b29sYmFyTWFyZ2luVG9wXCI+XG4gIDxkaXYgaWQ9XCJ0b29sYmFyQ29udGFpbmVyXCI+XG4gICAgPG5nLWNvbnRlbnQgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21Ub29sYmFyID8gY3VzdG9tVG9vbGJhciA6IGRlZmF1bHRUb29sYmFyXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgaWQ9XCJsb2FkaW5nQmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdsaW1tZXJcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRUb29sYmFyPlxuICA8ZGl2IGlkPVwidG9vbGJhclZpZXdlclwiPlxuICAgIDxkaXYgaWQ9XCJ0b29sYmFyVmlld2VyTGVmdFwiPlxuICAgICAgPHBkZi10b2dnbGUtc2lkZWJhciBbc2hvd109XCJzaG93U2lkZWJhckJ1dHRvblwiIFtzaWRlYmFyVmlzaWJsZV09XCJzaWRlYmFyVmlzaWJsZVwiPjwvcGRmLXRvZ2dsZS1zaWRlYmFyPlxuICAgICAgPHBkZi1maW5kLWJ1dHRvbiBbc2hvd0ZpbmRCdXR0b25dPVwic2hvd0ZpbmRCdXR0b25cIiBbdGV4dExheWVyXT1cInRleHRMYXllclwiIFtmaW5kYmFyVmlzaWJsZV09XCJmaW5kYmFyVmlzaWJsZVwiXG4gICAgICAgIFtoYXNUZXh0TGF5ZXJdPVwiaGFzVGV4dExheWVyXCI+PC9wZGYtZmluZC1idXR0b24+XG4gICAgICA8cGRmLXBhZ2luZy1hcmVhIFtzaG93UGFnaW5nQnV0dG9uc109XCJzaG93UGFnaW5nQnV0dG9uc1wiXG4gICAgICAgIFtzaG93Rmlyc3RBbmRMYXN0UGFnZUJ1dHRvbnNdPVwic2hvd0ZpcnN0QW5kTGFzdFBhZ2VCdXR0b25zXCJcbiAgICAgICAgW3Nob3dQcmV2aW91c0FuZE5leHRQYWdlQnV0dG9uc109XCJzaG93UHJldmlvdXNBbmROZXh0UGFnZUJ1dHRvbnNcIiBbc2hvd1BhZ2VOdW1iZXJdPVwic2hvd1BhZ2VOdW1iZXJcIlxuICAgICAgICBbc2hvd1BhZ2VMYWJlbF09XCJzaG93UGFnZUxhYmVsXCI+PC9wZGYtcGFnaW5nLWFyZWE+XG4gICAgPC9kaXY+XG4gICAgPHBkZi16b29tLXRvb2xiYXIgaWQ9XCJ0b29sYmFyVmlld2VyTWlkZGxlQ29udGFpbmVyXCIgW3Nob3dab29tQnV0dG9uc109XCJzaG93Wm9vbUJ1dHRvbnNcIlxuICAgICAgW3Nob3dab29tRHJvcGRvd25dPVwic2hvd1pvb21Ecm9wZG93blwiIFt6b29tTGV2ZWxzXT1cInpvb21MZXZlbHNcIj48L3BkZi16b29tLXRvb2xiYXI+XG4gICAgPGRpdiBpZD1cInRvb2xiYXJWaWV3ZXJSaWdodFwiPlxuICAgICAgPHBkZi1kb2N1bWVudC1wcm9wZXJ0aWVzIFtzaG93XT1cInNob3dQcm9wZXJ0aWVzQnV0dG9uXCI+PC9wZGYtZG9jdW1lbnQtcHJvcGVydGllcz5cbiAgICAgIDxwZGYtbm8tc3ByZWFkIFtzY3JvbGxNb2RlXT1cInNjcm9sbE1vZGVcIiBbc2hvd109XCJzaG93U3ByZWFkQnV0dG9uXCI+PC9wZGYtbm8tc3ByZWFkPlxuICAgICAgPHBkZi1vZGQtc3ByZWFkIFtzY3JvbGxNb2RlXT1cInNjcm9sbE1vZGVcIiBbc2hvd109XCJzaG93U3ByZWFkQnV0dG9uXCI+PC9wZGYtb2RkLXNwcmVhZD5cbiAgICAgIDxwZGYtZXZlbi1zcHJlYWQgW3Njcm9sbE1vZGVdPVwic2Nyb2xsTW9kZVwiIFtzaG93XT1cInNob3dTcHJlYWRCdXR0b25cIj48L3BkZi1ldmVuLXNwcmVhZD5cbiAgICAgIDxwZGYtc2luZ2xlLXBhZ2UtbW9kZSBbc2hvd109XCJzaG93U2luZ2xlUGFnZU1vZGVCdXR0b25cIiBbcGFnZVZpZXdNb2RlXT1cInBhZ2VWaWV3TW9kZVwiXG4gICAgICAgIChwYWdlVmlld01vZGVDaGFuZ2UpPVwidXBkYXRlUGFnZVZpZXdNb2RlKCRldmVudClcIiBbc2Nyb2xsTW9kZV09XCJzY3JvbGxNb2RlXCI+PC9wZGYtc2luZ2xlLXBhZ2UtbW9kZT5cbiAgICAgIDxwZGYtdmVydGljYWwtc2Nyb2xsLW1vZGUgW3Nob3ddPVwic2hvd1ZlcnRpY2FsU2Nyb2xsQnV0dG9uXCIgW3BhZ2VWaWV3TW9kZV09XCJwYWdlVmlld01vZGVcIlxuICAgICAgICAocGFnZVZpZXdNb2RlQ2hhbmdlKT1cInVwZGF0ZVBhZ2VWaWV3TW9kZSgkZXZlbnQpXCIgW3Njcm9sbE1vZGVdPVwic2Nyb2xsTW9kZVwiPjwvcGRmLXZlcnRpY2FsLXNjcm9sbC1tb2RlPlxuICAgICAgPHBkZi1ob3Jpem9udGFsLXNjcm9sbCBbc2hvd109XCJzaG93SG9yaXpvbnRhbFNjcm9sbEJ1dHRvblwiIFtwYWdlVmlld01vZGVdPVwicGFnZVZpZXdNb2RlXCJcbiAgICAgICAgKHBhZ2VWaWV3TW9kZUNoYW5nZSk9XCJ1cGRhdGVQYWdlVmlld01vZGUoJGV2ZW50KVwiIFtzY3JvbGxNb2RlXT1cInNjcm9sbE1vZGVcIj48L3BkZi1ob3Jpem9udGFsLXNjcm9sbD5cbiAgICAgIDxwZGYtd3JhcHBlZC1zY3JvbGwtbW9kZSBbc2hvd109XCJzaG93V3JhcHBlZFNjcm9sbEJ1dHRvblwiIFtwYWdlVmlld01vZGVdPVwicGFnZVZpZXdNb2RlXCJcbiAgICAgICAgKHBhZ2VWaWV3TW9kZUNoYW5nZSk9XCJ1cGRhdGVQYWdlVmlld01vZGUoJGV2ZW50KVwiIFtzY3JvbGxNb2RlXT1cInNjcm9sbE1vZGVcIj48L3BkZi13cmFwcGVkLXNjcm9sbC1tb2RlPlxuICAgICAgPHBkZi1pbmZpbml0ZS1zY3JvbGwgW3Nob3ddPVwic2hvd0luZmluaXRlU2Nyb2xsQnV0dG9uXCIgW3BhZ2VWaWV3TW9kZV09XCJwYWdlVmlld01vZGVcIlxuICAgICAgICAocGFnZVZpZXdNb2RlQ2hhbmdlKT1cInVwZGF0ZVBhZ2VWaWV3TW9kZSgkZXZlbnQpXCIgW3Njcm9sbE1vZGVdPVwic2Nyb2xsTW9kZVwiPjwvcGRmLWluZmluaXRlLXNjcm9sbD5cbiAgICAgIDxwZGYtYm9vay1tb2RlIFtzaG93XT1cInNob3dCb29rTW9kZUJ1dHRvblwiIFtwYWdlVmlld01vZGVdPVwicGFnZVZpZXdNb2RlXCJcbiAgICAgICAgKHBhZ2VWaWV3TW9kZUNoYW5nZSk9XCJ1cGRhdGVQYWdlVmlld01vZGUoJGV2ZW50KVwiIFtzY3JvbGxNb2RlXT1cInNjcm9sbE1vZGVcIj48L3BkZi1ib29rLW1vZGU+XG4gICAgICA8cGRmLWhhbmQtdG9vbCBbc2hvd0hhbmRUb29sQnV0dG9uXT1cInNob3dIYW5kVG9vbEJ1dHRvblwiIFtoYW5kVG9vbF09XCJoYW5kVG9vbFwiPjwvcGRmLWhhbmQtdG9vbD5cbiAgICAgIDxwZGYtc2VsZWN0LXRvb2wgW3Nob3dTZWxlY3RUb29sQnV0dG9uXT1cInNob3dIYW5kVG9vbEJ1dHRvblwiIFtoYW5kVG9vbF09XCJoYW5kVG9vbFwiPjwvcGRmLXNlbGVjdC10b29sPlxuICAgICAgPHBkZi1yb3RhdGUtcGFnZS1jdyBbc2hvd1JvdGF0ZUN3QnV0dG9uXT1cInNob3dSb3RhdGVDd0J1dHRvblwiPiA8L3BkZi1yb3RhdGUtcGFnZS1jdz5cbiAgICAgIDxwZGYtcm90YXRlLXBhZ2UtY2N3IFtzaG93Um90YXRlQ2N3QnV0dG9uXT1cInNob3dSb3RhdGVDY3dCdXR0b25cIj4gPC9wZGYtcm90YXRlLXBhZ2UtY2N3PlxuICAgICAgPHBkZi1wcmVzZW50YXRpb24tbW9kZSBbc2hvd1ByZXNlbnRhdGlvbk1vZGVCdXR0b25dPVwic2hvd1ByZXNlbnRhdGlvbk1vZGVCdXR0b25cIj48L3BkZi1wcmVzZW50YXRpb24tbW9kZT5cbiAgICAgIDxwZGYtb3Blbi1maWxlIFtzaG93T3BlbkZpbGVCdXR0b25dPVwic2hvd09wZW5GaWxlQnV0dG9uXCI+PC9wZGYtb3Blbi1maWxlPlxuICAgICAgPHBkZi1wcmludCBbc2hvd1ByaW50QnV0dG9uXT1cInNob3dQcmludEJ1dHRvblwiPjwvcGRmLXByaW50PlxuICAgICAgPHBkZi1kb3dubG9hZCBbc2hvd0Rvd25sb2FkQnV0dG9uXT1cInNob3dEb3dubG9hZEJ1dHRvblwiPjwvcGRmLWRvd25sb2FkPlxuXG4gICAgICA8cGRmLWVkaXRvciBbc2hvd0RyYXdFZGl0b3JdPVwic2hvd0RyYXdFZGl0b3JcIiBbc2hvd0hpZ2hsaWdodEVkaXRvcl09XCJzaG93SGlnaGxpZ2h0RWRpdG9yXCJcbiAgICAgICAgW3Nob3dUZXh0RWRpdG9yXT1cInNob3dUZXh0RWRpdG9yXCIgW3Nob3dTdGFtcEVkaXRvcl09XCJzaG93U3RhbXBFZGl0b3JcIj48L3BkZi1lZGl0b3I+XG4gICAgICA8cGRmLXRvZ2dsZS1zZWNvbmRhcnktdG9vbGJhciBbc2hvd1NlY29uZGFyeVRvb2xiYXJCdXR0b25dPVwic2hvd1NlY29uZGFyeVRvb2xiYXJCdXR0b25cIj5cbiAgICAgIDwvcGRmLXRvZ2dsZS1zZWNvbmRhcnktdG9vbGJhcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==