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.

229 lines 21.2 kB
/** * @fileoverview added by tsickle * Generated from: lib/sidebar/pdf-sidebar/pdf-sidebar-content/pdf-sidebar-content.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, TemplateRef, ViewChild, ElementRef, EventEmitter, Output } from '@angular/core'; /** @type {?} */ var THUMBNAIL_CANVAS_BORDER_WIDTH = 1; // px var PdfSidebarContentComponent = /** @class */ (function () { function PdfSidebarContentComponent() { var _this = this; this.thumbnailDrawn = new EventEmitter(); this.top = '32px'; this._hideSidebarToolbar = false; if (typeof window !== 'undefined') { ((/** @type {?} */ (window))).pdfThumbnailGeneratorReady = (/** * @return {?} */ function () { return _this.pdfThumbnailGeneratorReady(); }); ((/** @type {?} */ (window))).pdfThumbnailGenerator = (/** * @param {?} pdfThumbnailView * @param {?} linkService * @param {?} id * @param {?} container * @param {?} thumbPageTitlePromise * @return {?} */ function (pdfThumbnailView, linkService, id, container, thumbPageTitlePromise) { return _this.createThumbnail(pdfThumbnailView, linkService, id, container, thumbPageTitlePromise); }); } } /** * @return {?} */ PdfSidebarContentComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.linkService = undefined; }; /** * @return {?} */ PdfSidebarContentComponent.prototype.pdfThumbnailGeneratorReady = /** * @return {?} */ function () { if (!this.thumbnailViewTemplate) { return false; } /** @type {?} */ var t = (/** @type {?} */ (this.thumbnailViewTemplate.nativeElement)); return !!t && !!t.innerHTML && t.innerHTML.length > 0; }; /** * @private * @param {?} pdfThumbnailView * @param {?} linkService * @param {?} id * @param {?} container * @param {?} thumbPageTitlePromise * @return {?} */ PdfSidebarContentComponent.prototype.createThumbnail = /** * @private * @param {?} pdfThumbnailView * @param {?} linkService * @param {?} id * @param {?} container * @param {?} thumbPageTitlePromise * @return {?} */ function (pdfThumbnailView, linkService, id, container, thumbPageTitlePromise) { this.linkService = linkService; /** @type {?} */ var template = this.thumbnailViewTemplate; // get the inner HTML without the attributes and classes added by Angular /** @type {?} */ var inner = template.nativeElement.innerHTML .split(/_ng\w+-\w+-\w+=""/g) .join('') .split(/ng-\w+-\w+/g) .join('') .split(/<!--[\s\S]*?-->/g) .join(''); /** @type {?} */ var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; /** @type {?} */ var widthOfRing = pdfThumbnailView.canvasWidth + borderAdjustment + 'px'; /** @type {?} */ var heightOfRing = pdfThumbnailView.canvasHeight + borderAdjustment + 'px'; /** @type {?} */ var newHtml = inner.split('WIDTH_OF_RING').join(widthOfRing).split('HEIGHT_OF_RING').join(heightOfRing).split('PAGE_NUMBER').join(id); /** @type {?} */ var newElement = this.createElementFromHTML(newHtml); newElement.classList.remove('pdf-viewer-template'); /** @type {?} */ var anchor = (/** @type {?} */ (newElement)); anchor.href = linkService.getAnchorUrl('#page=' + id); thumbPageTitlePromise.then((/** * @param {?} msg * @return {?} */ function (msg) { anchor.title = msg; })); anchor.onclick = (/** * @return {?} */ function () { linkService.page = id; return false; }); pdfThumbnailView.anchor = anchor; /** @type {?} */ var ring = (/** @type {?} */ (newElement.getElementsByClassName('image-container')[0])); pdfThumbnailView.ring = ring; pdfThumbnailView.div = (/** @type {?} */ (newElement.getElementsByClassName('thumbnail')[0])); container.appendChild(newElement); /** @type {?} */ var thumbnailDrawnEvent = { thumbnail: newElement, container: container, pageId: id, }; this.thumbnailDrawn.emit(thumbnailDrawnEvent); }; /** * @private * @param {?} htmlString * @return {?} */ PdfSidebarContentComponent.prototype.createElementFromHTML = /** * @private * @param {?} htmlString * @return {?} */ function (htmlString) { /** @type {?} */ var div = document.createElement('div'); div.innerHTML = htmlString.trim(); // Change this to div.childNodes to support multiple top-level nodes return (/** @type {?} */ (div.firstChild)); }; /** * @param {?} event * @return {?} */ PdfSidebarContentComponent.prototype.onKeyDown = /** * @param {?} event * @return {?} */ function (event) { if (event.code === 'ArrowDown') { if (this.linkService) { if (event.ctrlKey || event.metaKey) { this.linkService.page = this.linkService.pagesCount; } else if (this.linkService.page < this.linkService.pagesCount) { this.linkService.page = this.linkService.page + 1; } event.preventDefault(); } } else if (event.code === 'ArrowUp') { if (this.linkService) { if (event.ctrlKey || event.metaKey) { this.linkService.page = 1; } else if (this.linkService.page > 1) { this.linkService.page = this.linkService.page - 1; } event.preventDefault(); } } }; Object.defineProperty(PdfSidebarContentComponent.prototype, "hideSidebarToolbar", { set: /** * @param {?} h * @return {?} */ function (h) { this._hideSidebarToolbar = h; if (this._hideSidebarToolbar) { this.top = '0'; } else { this.top = '32px'; } }, enumerable: true, configurable: true }); PdfSidebarContentComponent.decorators = [ { type: Component, args: [{ selector: 'pdf-sidebar-content', template: "<div id=\"sidebarContent\" [style.top]=\"top\">\n <div #thumbnailViewTemplate>\n <ng-content *ngTemplateOutlet=\"customThumbnail ? customThumbnail : defaultThumbnail\"></ng-content>\n </div>\n <div id=\"thumbnailView\" (keydown)=\"onKeyDown($event)\"></div>\n <div id=\"outlineView\" class=\"hidden\"></div>\n <div id=\"attachmentsView\" class=\"hidden\"></div>\n <div id=\"layersView\" class=\"hidden\"></div>\n</div>\n\n<ng-template #defaultThumbnail>\n <a class=\"pdf-viewer-template\">\n <div class=\"thumbnail\" data-page-number=\"$page\">\n <div class=\"thumbnailSelectionRing image-container\" style=\"width: WIDTH_OF_RING; height: HEIGHT_OF_RING\">\n <!-- image is automatically inserted here -->\n <!-- <img class=\"thumbnailImage\" style=\"width: 98px; height: 73px;\" /> -->\n </div>\n </div>\n </a>\n</ng-template>\n", styles: [""] }] } ]; /** @nocollapse */ PdfSidebarContentComponent.ctorParameters = function () { return []; }; PdfSidebarContentComponent.propDecorators = { customThumbnail: [{ type: Input }], thumbnailViewTemplate: [{ type: ViewChild, args: ['thumbnailViewTemplate',] }], thumbnailDrawn: [{ type: Output }], hideSidebarToolbar: [{ type: Input }] }; return PdfSidebarContentComponent; }()); export { PdfSidebarContentComponent }; if (false) { /** @type {?} */ PdfSidebarContentComponent.prototype.customThumbnail; /** @type {?} */ PdfSidebarContentComponent.prototype.thumbnailViewTemplate; /** * @type {?} * @private */ PdfSidebarContentComponent.prototype.linkService; /** @type {?} */ PdfSidebarContentComponent.prototype.thumbnailDrawn; /** @type {?} */ PdfSidebarContentComponent.prototype.top; /** @type {?} */ PdfSidebarContentComponent.prototype._hideSidebarToolbar; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLXNpZGViYXItY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZXh0ZW5kZWQtcGRmLXZpZXdlci8iLCJzb3VyY2VzIjpbImxpYi9zaWRlYmFyL3BkZi1zaWRlYmFyL3BkZi1zaWRlYmFyLWNvbnRlbnQvcGRmLXNpZGViYXItY29udGVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBYSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztJQWlCaEgsNkJBQTZCLEdBQUcsQ0FBQzs7QUFFdkM7SUFxQkU7UUFBQSxpQkFXQztRQWpCTSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDO1FBRTVELFFBQUcsR0FBRyxNQUFNLENBQUM7UUFFYix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFHakMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFDakMsQ0FBQyxtQkFBQSxNQUFNLEVBQU8sQ0FBQyxDQUFDLDBCQUEwQjs7O1lBQUcsY0FBTSxPQUFBLEtBQUksQ0FBQywwQkFBMEIsRUFBRSxFQUFqQyxDQUFpQyxDQUFBLENBQUM7WUFDckYsQ0FBQyxtQkFBQSxNQUFNLEVBQU8sQ0FBQyxDQUFDLHFCQUFxQjs7Ozs7Ozs7WUFBRyxVQUN0QyxnQkFBa0MsRUFDbEMsV0FBZ0IsRUFDaEIsRUFBVSxFQUNWLFNBQXlCLEVBQ3pCLHFCQUFzQyxJQUNuQyxPQUFBLEtBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUscUJBQXFCLENBQUMsRUFBekYsQ0FBeUYsQ0FBQSxDQUFDO1NBQ2hHO0lBQ0gsQ0FBQzs7OztJQUVNLGdEQUFXOzs7SUFBbEI7UUFDRSxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUMv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Q0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2lCQUNuRDtnQkFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDeEI7U0FDRjtJQUNILENBQUM7SUFFRCxzQkFDVywwREFBa0I7Ozs7O1FBRDdCLFVBQzhCLENBQVU7WUFDdEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7YUFDaEI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7YUFDbkI7UUFDSCxDQUFDOzs7T0FBQTs7Z0JBeElGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixpM0JBQW1EOztpQkFFcEQ7Ozs7O2tDQUVFLEtBQUs7d0NBR0wsU0FBUyxTQUFDLHVCQUF1QjtpQ0FLakMsTUFBTTtxQ0FrSE4sS0FBSzs7SUFTUixpQ0FBQztDQUFBLEFBeklELElBeUlDO1NBcElZLDBCQUEwQjs7O0lBQ3JDLHFEQUN5Qzs7SUFFekMsMkRBQ3lDOzs7OztJQUV6QyxpREFBZ0Q7O0lBRWhELG9EQUNtRTs7SUFFbkUseUNBQW9COztJQUVwQix5REFBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQZGZUaHVtYm5haWxEcmF3bkV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vZXZlbnRzL3BkZi10aHVtYm5haWwtZHJhd24tZXZlbnQnO1xuXG5kZWNsYXJlIGNsYXNzIFBERlRodW1ibmFpbFZpZXcge1xuICBhbmNob3I6IEhUTUxBbmNob3JFbGVtZW50O1xuICBkaXY6IEhUTUxFbGVtZW50O1xuICByaW5nOiBIVE1MRWxlbWVudDtcbiAgY2FudmFzV2lkdGg6IG51bWJlcjtcbiAgY2FudmFzSGVpZ2h0OiBudW1iZXI7XG59XG5cbmRlY2xhcmUgY2xhc3MgUERGTGlua1NlcnZpY2Uge1xuICBwdWJsaWMgcGFnZTogbnVtYmVyO1xuICBwdWJsaWMgcGFnZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgZ2V0QW5jaG9yVXJsKHRhcmdldFVybDogc3RyaW5nKTogc3RyaW5nO1xufVxuXG5jb25zdCBUSFVNQk5BSUxfQ0FOVkFTX0JPUkRFUl9XSURUSCA9IDE7IC8vIHB4XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BkZi1zaWRlYmFyLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGRmLXNpZGViYXItY29udGVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BkZi1zaWRlYmFyLWNvbnRlbnQuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQZGZTaWRlYmFyQ29udGVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXN0b21UaHVtYm5haWw6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgndGh1bWJuYWlsVmlld1RlbXBsYXRlJylcbiAgcHVibGljIHRodW1ibmFpbFZpZXdUZW1wbGF0ZTogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIGxpbmtTZXJ2aWNlOiBQREZMaW5rU2VydmljZSB8IHVuZGVmaW5lZDtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHRodW1ibmFpbERyYXduID0gbmV3IEV2ZW50RW1pdHRlcjxQZGZUaHVtYm5haWxEcmF3bkV2ZW50PigpO1xuXG4gIHB1YmxpYyB0b3AgPSAnMzJweCc7XG5cbiAgcHVibGljIF9oaWRlU2lkZWJhclRvb2xiYXIgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICh3aW5kb3cgYXMgYW55KS5wZGZUaHVtYm5haWxHZW5lcmF0b3JSZWFkeSA9ICgpID0+IHRoaXMucGRmVGh1bWJuYWlsR2VuZXJhdG9yUmVhZHkoKTtcbiAgICAgICh3aW5kb3cgYXMgYW55KS5wZGZUaHVtYm5haWxHZW5lcmF0b3IgPSAoXG4gICAgICAgIHBkZlRodW1ibmFpbFZpZXc6IFBERlRodW1ibmFpbFZpZXcsXG4gICAgICAgIGxpbmtTZXJ2aWNlOiBhbnksXG4gICAgICAgIGlkOiBudW1iZXIsXG4gICAgICAgIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgICAgIHRodW1iUGFnZVRpdGxlUHJvbWlzZTogUHJvbWlzZTxzdHJpbmc+XG4gICAgICApID0+IHRoaXMuY3JlYXRlVGh1bWJuYWlsKHBkZlRodW1ibmFpbFZpZXcsIGxpbmtTZXJ2aWNlLCBpZCwgY29udGFpbmVyLCB0aHVtYlBhZ2VUaXRsZVByb21pc2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmtTZXJ2aWNlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHBkZlRodW1ibmFpbEdlbmVyYXRvclJlYWR5KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy50aHVtYm5haWxWaWV3VGVtcGxhdGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdCA9IHRoaXMudGh1bWJuYWlsVmlld1RlbXBsYXRlLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgcmV0dXJuICEhdCAmJiAhIXQuaW5uZXJIVE1MICYmIHQuaW5uZXJIVE1MLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRodW1ibmFpbChcbiAgICBwZGZUaHVtYm5haWxWaWV3OiBQREZUaHVtYm5haWxWaWV3LFxuICAgIGxpbmtTZXJ2aWNlOiBQREZMaW5rU2VydmljZSxcbiAgICBpZDogbnVtYmVyLFxuICAgIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgdGh1bWJQYWdlVGl0bGVQcm9taXNlOiBQcm9taXNlPHN0cmluZz5cbiAgKSB7XG4gICAgdGhpcy5saW5rU2VydmljZSA9IGxpbmtTZXJ2aWNlO1xuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50aHVtYm5haWxWaWV3VGVtcGxhdGU7XG4gICAgLy8gZ2V0IHRoZSBpbm5lciBIVE1MIHdpdGhvdXQgdGhlIGF0dHJpYnV0ZXMgYW5kIGNsYXNzZXMgYWRkZWQgYnkgQW5ndWxhclxuICAgIGNvbnN0IGlubmVyID0gdGVtcGxhdGUubmF0aXZlRWxlbWVudC5pbm5lckhUTUxcbiAgICAgIC5zcGxpdCgvX25nXFx3Ky1cXHcrLVxcdys9XCJcIi9nKVxuICAgICAgLmpvaW4oJycpXG4gICAgICAuc3BsaXQoL25nLVxcdystXFx3Ky9nKVxuICAgICAgLmpvaW4oJycpXG4gICAgICAuc3BsaXQoLzwhLS1bXFxzXFxTXSo/LS0+L2cpXG4gICAgICAuam9pbignJyk7XG5cbiAgICBjb25zdCBib3JkZXJBZGp1c3RtZW50ID0gMiAqIFRIVU1CTkFJTF9DQU5WQVNfQk9SREVSX1dJRFRIO1xuXG4gICAgY29uc3Qgd2lkdGhPZlJpbmcgPSBwZGZUaHVtYm5haWxWaWV3LmNhbnZhc1dpZHRoICsgYm9yZGVyQWRqdXN0bWVudCArICdweCc7XG4gICAgY29uc3QgaGVpZ2h0T2ZSaW5nID0gcGRmVGh1bWJuYWlsVmlldy5jYW52YXNIZWlnaHQgKyBib3JkZXJBZGp1c3RtZW50ICsgJ3B4JztcblxuICAgIGNvbnN0IG5ld0h0bWwgPSBpbm5lci5zcGxpdCgnV0lEVEhfT0ZfUklORycpLmpvaW4od2lkdGhPZlJpbmcpLnNwbGl0KCdIRUlHSFRfT0ZfUklORycpLmpvaW4oaGVpZ2h0T2ZSaW5nKS5zcGxpdCgnUEFHRV9OVU1CRVInKS5qb2luKGlkKTtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50RnJvbUhUTUwobmV3SHRtbCk7XG4gICAgbmV3RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdwZGYtdmlld2VyLXRlbXBsYXRlJyk7XG5cbiAgICBjb25zdCBhbmNob3IgPSBuZXdFbGVtZW50IGFzIEhUTUxBbmNob3JFbGVtZW50O1xuICAgIGFuY2hvci5ocmVmID0gbGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKCcjcGFnZT0nICsgaWQpO1xuICAgIHRodW1iUGFnZVRpdGxlUHJvbWlzZS50aGVuKChtc2cpID0+IHtcbiAgICAgIGFuY2hvci50aXRsZSA9IG1zZztcbiAgICB9KTtcbiAgICBhbmNob3Iub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGxpbmtTZXJ2aWNlLnBhZ2UgPSBpZDtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHBkZlRodW1ibmFpbFZpZXcuYW5jaG9yID0gYW5jaG9yO1xuXG4gICAgY29uc3QgcmluZyA9IG5ld0VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW1hZ2UtY29udGFpbmVyJylbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgcGRmVGh1bWJuYWlsVmlldy5yaW5nID0gcmluZztcbiAgICBwZGZUaHVtYm5haWxWaWV3LmRpdiA9IG5ld0VsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGh1bWJuYWlsJylbMF0gYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG5cbiAgICBjb25zdCB0aHVtYm5haWxEcmF3bkV2ZW50OiBQZGZUaHVtYm5haWxEcmF3bkV2ZW50ID0ge1xuICAgICAgdGh1bWJuYWlsOiBuZXdFbGVtZW50LFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICBwYWdlSWQ6IGlkLFxuICAgIH07XG4gICAgdGhpcy50aHVtYm5haWxEcmF3bi5lbWl0KHRodW1ibmFpbERyYXduRXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFbGVtZW50RnJvbUhUTUwoaHRtbFN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gaHRtbFN0cmluZy50cmltKCk7XG5cbiAgICAvLyBDaGFuZ2UgdGhpcyB0byBkaXYuY2hpbGROb2RlcyB0byBzdXBwb3J0IG11bHRpcGxlIHRvcC1sZXZlbCBub2Rlc1xuICAgIHJldHVybiBkaXYuZmlyc3RDaGlsZCBhcyBIVE1MRWxlbWVudDtcbiAgfVxuXG4gIHB1YmxpYyBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIGlmICh0aGlzLmxpbmtTZXJ2aWNlKSB7XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHtcbiAgICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLnBhZ2UgPSB0aGlzLmxpbmtTZXJ2aWNlLnBhZ2VzQ291bnQ7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5saW5rU2VydmljZS5wYWdlIDwgdGhpcy5saW5rU2VydmljZS5wYWdlc0NvdW50KSB7XG4gICAgICAgICAgdGhpcy5saW5rU2VydmljZS5wYWdlID0gdGhpcy5saW5rU2VydmljZS5wYWdlICsgMTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQuY29kZSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBpZiAodGhpcy5saW5rU2VydmljZSkge1xuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XG4gICAgICAgICAgdGhpcy5saW5rU2VydmljZS5wYWdlID0gMTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxpbmtTZXJ2aWNlLnBhZ2UgPiAxKSB7XG4gICAgICAgICAgdGhpcy5saW5rU2VydmljZS5wYWdlID0gdGhpcy5saW5rU2VydmljZS5wYWdlIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaGlkZVNpZGViYXJUb29sYmFyKGg6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oaWRlU2lkZWJhclRvb2xiYXIgPSBoO1xuICAgIGlmICh0aGlzLl9oaWRlU2lkZWJhclRvb2xiYXIpIHtcbiAgICAgIHRoaXMudG9wID0gJzAnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRvcCA9ICczMnB4JztcbiAgICB9XG4gIH1cbn1cbiJdfQ==