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.

296 lines 27.1 kB
/** * @fileoverview added by tsickle * Generated from: lib/ngx-extended-pdf-viewer.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { NgxExtendedPdfViewerComponent } from './ngx-extended-pdf-viewer.component'; /** * @record */ export function FindOptions() { } if (false) { /** @type {?|undefined} */ FindOptions.prototype.highlightAll; /** @type {?|undefined} */ FindOptions.prototype.matchCase; /** @type {?|undefined} */ FindOptions.prototype.wholeWords; /** @type {?|undefined} */ FindOptions.prototype.ignoreAccents; /** @type {?|undefined} */ FindOptions.prototype.findMultipleSearchTexts; } var NgxExtendedPdfViewerService = /** @class */ (function () { function NgxExtendedPdfViewerService() { } /** * @param {?} text * @param {?=} options * @return {?} */ NgxExtendedPdfViewerService.prototype.findMultiple = /** * @param {?} text * @param {?=} options * @return {?} */ function (text, options) { if (options === void 0) { options = {}; } options = tslib_1.__assign({}, options, { findMultipleSearchTexts: true }); /** @type {?} */ var searchString = text.join('\n') + '\n'; return this.find(searchString, options); }; /** * @param {?} text * @param {?=} options * @return {?} */ NgxExtendedPdfViewerService.prototype.find = /** * @param {?} text * @param {?=} options * @return {?} */ function (text, options) { if (options === void 0) { options = {}; } if (!NgxExtendedPdfViewerComponent.ngxExtendedPdfViewerInitialized) { // tslint:disable-next-line:quotemark console.error("The PDF viewer hasn't finished initializing. Please call find() later."); return false; } else { /** @type {?} */ var highlightAllCheckbox = (/** @type {?} */ (document.getElementById('findHighlightAll'))); if (highlightAllCheckbox) { highlightAllCheckbox.checked = options.highlightAll || false; } /** @type {?} */ var matchCaseCheckbox = (/** @type {?} */ (document.getElementById('findMatchCase'))); if (matchCaseCheckbox) { matchCaseCheckbox.checked = options.matchCase || false; } /** @type {?} */ var entireWordCheckbox = (/** @type {?} */ (document.getElementById('findEntireWord'))); if (entireWordCheckbox) { entireWordCheckbox.checked = options.wholeWords || false; } /** @type {?} */ var findIgnoreAccentsCheckbox = (/** @type {?} */ (document.getElementById('findIgnoreAccents'))); if (findIgnoreAccentsCheckbox) { findIgnoreAccentsCheckbox.checked = options.ignoreAccents || false; } /** @type {?} */ var multipleSearchTerms = options.findMultipleSearchTexts || text.includes('\n') || false; /** @type {?} */ var findMultipleSearchTextsCheckbox = (/** @type {?} */ (document.getElementById('findMultipleSearchTexts'))); if (findMultipleSearchTextsCheckbox) { findMultipleSearchTextsCheckbox.checked = multipleSearchTerms; } /** @type {?} */ var individualWordsModeCheckbox = (/** @type {?} */ (document.getElementById('individualWordsMode'))); if (individualWordsModeCheckbox) { individualWordsModeCheckbox.checked = false; } /** @type {?} */ var inputField = multipleSearchTerms ? document.getElementById('findInputMultiline') : document.getElementById('findInput'); if (inputField) { if (inputField instanceof HTMLTextAreaElement) { inputField.value = text; // todo dirty hack! inputField.classList.remove('hidden'); ((/** @type {?} */ (document.getElementById('findInput')))).classList.add('hidden'); ((/** @type {?} */ (document.getElementById('individualWordsModeLabel')))).classList.remove('hidden'); ((/** @type {?} */ (document.getElementById('individualWordsMode')))).classList.remove('hidden'); // end of the dirty hack } else if (inputField instanceof HTMLInputElement) { inputField.value = text; // todo dirty hack! inputField.classList.remove('hidden'); ((/** @type {?} */ (document.getElementById('findInputMultiline')))).classList.add('hidden'); ((/** @type {?} */ (document.getElementById('individualWordsModeLabel')))).classList.add('hidden'); ((/** @type {?} */ (document.getElementById('individualWordsMode')))).classList.add('hidden'); // end of the dirty hack } inputField.dispatchEvent(new Event('input')); return true; } else { // tslint:disable-next-line:quotemark console.error("Unexpected error: the input field used to search isn't part of the DOM."); return false; } } }; /** * @return {?} */ NgxExtendedPdfViewerService.prototype.findNext = /** * @return {?} */ function () { if (!NgxExtendedPdfViewerComponent.ngxExtendedPdfViewerInitialized) { // tslint:disable-next-line:quotemark console.error("The PDF viewer hasn't finished initializing. Please call findNext() later."); return false; } else { /** @type {?} */ var button = document.getElementById('findNext'); if (button) { button.click(); return true; } return false; } }; /** * @return {?} */ NgxExtendedPdfViewerService.prototype.findPrevious = /** * @return {?} */ function () { if (!NgxExtendedPdfViewerComponent.ngxExtendedPdfViewerInitialized) { // tslint:disable-next-line:quotemark console.error("The PDF viewer hasn't finished initializing. Please call findPrevious() later."); return false; } else { /** @type {?} */ var button = document.getElementById('findPrevious'); if (button) { button.click(); return true; } return false; } }; /** * @param {?=} printRange * @return {?} */ NgxExtendedPdfViewerService.prototype.print = /** * @param {?=} printRange * @return {?} */ function (printRange) { var _this = this; /** @type {?} */ var PDFViewerApplication = ((/** @type {?} */ (window))).PDFViewerApplication; /** @type {?} */ var alreadyThere = !!window['isInPDFPrintRange'] && (!printRange); if (!alreadyThere) { if (!printRange) { printRange = (/** @type {?} */ ({})); } this.setPrintRange(printRange); } ((/** @type {?} */ (window))).printPDF(); if (!alreadyThere) { PDFViewerApplication.eventBus.on('afterprint', (/** * @return {?} */ function () { _this.removePrintRange(); })); } }; /** * @return {?} */ NgxExtendedPdfViewerService.prototype.removePrintRange = /** * @return {?} */ function () { window['isInPDFPrintRange'] = undefined; window['filteredPageCount'] = undefined; }; /** * @param {?} printRange * @return {?} */ NgxExtendedPdfViewerService.prototype.setPrintRange = /** * @param {?} printRange * @return {?} */ function (printRange) { var _this = this; /** @type {?} */ var PDFViewerApplication = ((/** @type {?} */ (window))).PDFViewerApplication; window['isInPDFPrintRange'] = (/** * @param {?} page * @return {?} */ function (page) { return _this.isInPDFPrintRange(page, (/** @type {?} */ (printRange))); }); window['filteredPageCount'] = this.filteredPageCount(PDFViewerApplication.pagesCount, printRange); }; /** * @param {?} pageCount * @param {?} range * @return {?} */ NgxExtendedPdfViewerService.prototype.filteredPageCount = /** * @param {?} pageCount * @param {?} range * @return {?} */ function (pageCount, range) { /** @type {?} */ var result = 0; for (var page = 1; page <= pageCount; page++) { if (this.isInPDFPrintRange(page, range)) { result++; } } return result; }; /** * @param {?} pageIndex * @param {?} printRange * @return {?} */ NgxExtendedPdfViewerService.prototype.isInPDFPrintRange = /** * @param {?} pageIndex * @param {?} printRange * @return {?} */ function (pageIndex, printRange) { /** @type {?} */ var page = pageIndex + 1; if (printRange.from) { if (page < printRange.from) { return false; } } if (printRange.to) { if (page > printRange.to) { return false; } } if (printRange.excluded) { /** @type {?} */ var e = (/** @type {?} */ (printRange.excluded)); if (e.some((/** * @param {?} p * @return {?} */ function (p) { return p === page; }))) { return false; } } if (printRange.included) { if (!printRange.included.some((/** * @param {?} p * @return {?} */ function (p) { return p === page; }))) { return false; } } return true; }; return NgxExtendedPdfViewerService; }()); export { NgxExtendedPdfViewerService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWV4dGVuZGVkLXBkZi12aWV3ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1leHRlbmRlZC1wZGYtdmlld2VyLyIsInNvdXJjZXMiOlsibGliL25neC1leHRlbmRlZC1wZGYtdmlld2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7QUFJcEYsaUNBTUM7OztJQUxDLG1DQUF1Qjs7SUFDdkIsZ0NBQW9COztJQUNwQixpQ0FBcUI7O0lBQ3JCLG9DQUF3Qjs7SUFDeEIsOENBQWtDOztBQUdwQztJQUNFO0lBQWUsQ0FBQzs7Ozs7O0lBRVQsa0RBQVk7Ozs7O0lBQW5CLFVBQW9CLElBQW1CLEVBQUUsT0FBeUI7UUFBekIsd0JBQUEsRUFBQSxZQUF5QjtRQUNoRSxPQUFPLHdCQUNGLE9BQU8sSUFDVix1QkFBdUIsRUFBRSxJQUFJLEdBQzlCLENBQUM7O1lBQ0ksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSTtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7Ozs7OztJQUVNLDBDQUFJOzs7OztJQUFYLFVBQVksSUFBWSxFQUFFLE9BQXlCO1FBQXpCLHdCQUFBLEVBQUEsWUFBeUI7UUFDakQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLCtCQUErQixFQUFFO1lBQ2xFLHFDQUFxQztZQUNyQyxPQUFPLENBQUMsS0FBSyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7WUFDeEYsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNOztnQkFDQyxvQkFBb0IsR0FBRyxtQkFBQSxRQUFRLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLEVBQW9CO1lBQzVGLElBQUksb0JBQW9CLEVBQUU7Z0JBQ3hCLG9CQUFvQixDQUFDLE9BQU8sR0FBRyxPQUFP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QUFDLElBQUksT0FBQSxDQUFDLEtBQUssSUFBSSxFQUFWLENBQVUsRUFBQyxFQUFFO2dCQUM5QyxPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDSCxrQ0FBQztBQUFELENBQUMsQUF2S0QsSUF1S0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ3hFeHRlbmRlZFBkZlZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4vbmd4LWV4dGVuZGVkLXBkZi12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFBERlByaW50UmFuZ2UgfSBmcm9tICcuL29wdGlvbnMvcGRmLXByaW50LXJhbmdlJztcbmltcG9ydCB7IElQREZWaWV3ZXJBcHBsaWNhdGlvbiB9IGZyb20gJy4vb3B0aW9ucy9wZGYtdmlld2VyLWFwcGxpY2F0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBGaW5kT3B0aW9ucyB7XG4gIGhpZ2hsaWdodEFsbD86IGJvb2xlYW47XG4gIG1hdGNoQ2FzZT86IGJvb2xlYW47XG4gIHdob2xlV29yZHM/OiBib29sZWFuO1xuICBpZ25vcmVBY2NlbnRzPzogYm9vbGVhbjtcbiAgZmluZE11bHRpcGxlU2VhcmNoVGV4dHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgTmd4RXh0ZW5kZWRQZGZWaWV3ZXJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBmaW5kTXVsdGlwbGUodGV4dDogQXJyYXk8c3RyaW5nPiwgb3B0aW9uczogRmluZE9wdGlvbnMgPSB7fSk6IGJvb2xlYW4ge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgZmluZE11bHRpcGxlU2VhcmNoVGV4dHM6IHRydWUsXG4gICAgfTtcbiAgICBjb25zdCBzZWFyY2hTdHJpbmcgPSB0ZXh0LmpvaW4oJ1xcbicpICsgJ1xcbic7XG4gICAgcmV0dXJuIHRoaXMuZmluZChzZWFyY2hTdHJpbmcsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGZpbmQodGV4dDogc3RyaW5nLCBvcHRpb25zOiBGaW5kT3B0aW9ucyA9IHt9KTogYm9vbGVhbiB7XG4gICAgaWYgKCFOZ3hFeHRlbmRlZFBkZlZpZXdlckNvbXBvbmVudC5uZ3hFeHRlbmRlZFBkZlZpZXdlckluaXRpYWxpemVkKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cXVvdGVtYXJrXG4gICAgICBjb25zb2xlLmVycm9yKFwiVGhlIFBERiB2aWV3ZXIgaGFzbid0IGZpbmlzaGVkIGluaXRpYWxpemluZy4gUGxlYXNlIGNhbGwgZmluZCgpIGxhdGVyLlwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaGlnaGxpZ2h0QWxsQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluZEhpZ2hsaWdodEFsbCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAoaGlnaGxpZ2h0QWxsQ2hlY2tib3gpIHtcbiAgICAgICAgaGlnaGxpZ2h0QWxsQ2hlY2tib3guY2hlY2tlZCA9IG9wdGlvbnMuaGlnaGxpZ2h0QWxsIHx8IGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hDYXNlQ2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluZE1hdGNoQ2FzZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAobWF0Y2hDYXNlQ2hlY2tib3gpIHtcbiAgICAgICAgbWF0Y2hDYXNlQ2hlY2tib3guY2hlY2tlZCA9IG9wdGlvbnMubWF0Y2hDYXNlIHx8IGZhbHNlO1xuICAgICAgfVxuICAgICAgY29uc3QgZW50aXJlV29yZENoZWNrYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbmRFbnRpcmVXb3JkJykgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmIChlbnRpcmVXb3JkQ2hlY2tib3gpIHtcbiAgICAgICAgZW50aXJlV29yZENoZWNrYm94LmNoZWNrZWQgPSBvcHRpb25zLndob2xlV29yZHMgfHwgZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBmaW5kSWdub3JlQWNjZW50c0NoZWNrYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbmRJZ25vcmVBY2NlbnRzJykgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmIChmaW5kSWdub3JlQWNjZW50c0NoZWNrYm94KSB7XG4gICAgICAgIGZpbmRJZ25vcmVBY2NlbnRzQ2hlY2tib3guY2hlY2tlZCA9IG9wdGlvbnMuaWdub3JlQWNjZW50cyB8fCBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG11bHRpcGxlU2VhcmNoVGVybXMgPSBvcHRpb25zLmZpbmRNdWx0aXBsZVNlYXJjaFRleHRzIHx8IHRleHQuaW5jbHVkZXMoJ1xcbicpIHx8IGZhbHNlO1xuICAgICAgY29uc3QgZmluZE11bHRpcGxlU2VhcmNoVGV4dHNDaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5kTXVsdGlwbGVTZWFyY2hUZXh0cycpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAoZmluZE11bHRpcGxlU2VhcmNoVGV4dHNDaGVja2JveCkge1xuICAgICAgICBmaW5kTXVsdGlwbGVTZWFyY2hUZXh0c0NoZWNrYm94LmNoZWNrZWQgPSBtdWx0aXBsZVNlYXJjaFRlcm1zO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5kaXZpZHVhbFdvcmRzTW9kZUNoZWNrYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luZGl2aWR1YWxXb3Jkc01vZGUnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgaWYgKGluZGl2aWR1YWxXb3Jkc01vZGVDaGVja2JveCkge1xuICAgICAgICBpbmRpdmlkdWFsV29yZHNNb2RlQ2hlY2tib3guY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnB1dEZpZWxkID0gbXVsdGlwbGVTZWFyY2hUZXJtcyA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5kSW5wdXRNdWx0aWxpbmUnKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5kSW5wdXQnKTtcbiAgICAgIGlmIChpbnB1dEZpZWxkKSB7XG4gICAgICAgIGlmIChpbnB1dEZpZWxkIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuICAgICAgICAgIGlucHV0RmllbGQudmFsdWUgPSB0ZXh0O1xuXG4gICAgICAgICAgLy8gdG9kbyBkaXJ0eSBoYWNrIVxuICAgICAgICAgIGlucHV0RmllbGQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5kSW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luZGl2aWR1YWxXb3Jkc01vZGVMYWJlbCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5kaXZpZHVhbFdvcmRzTW9kZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgICAgIC8vIGVuZCBvZiB0aGUgZGlydHkgaGFja1xuICAgICAgICB9IGVsc2UgaWYgKGlucHV0RmllbGQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgaW5wdXRGaWVsZC52YWx1ZSA9IHRleHQ7XG4gICAgICAgICAgLy8gdG9kbyBkaXJ0eSBoYWNrIVxuICAgICAgICAgIGlucHV0RmllbGQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5kSW5wdXRNdWx0aWxpbmUnKSBhcyBIVE1MSW5wdXRFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luZGl2aWR1YWxXb3Jkc01vZGVMYWJlbCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5kaXZpZHVhbFdvcmRzTW9kZScpIGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgICAgIC8vIGVuZCBvZiB0aGUgZGlydHkgaGFja1xuICAgICAgICB9XG4gICAgICAgIGlucHV0RmllbGQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JykpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpxdW90ZW1hcmtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3I6IHRoZSBpbnB1dCBmaWVsZCB1c2VkIHRvIHNlYXJjaCBpc24ndCBwYXJ0IG9mIHRoZSBET00uXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbmROZXh0KCk6IGJvb2xlYW4ge1xuICAgIGlmICghTmd4RXh0ZW5kZWRQZGZWaWV3ZXJDb21wb25lbnQubmd4RXh0ZW5kZWRQZGZWaWV3ZXJJbml0aWFsaXplZCkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnF1b3RlbWFya1xuICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBQREYgdmlld2VyIGhhc24ndCBmaW5pc2hlZCBpbml0aWFsaXppbmcuIFBsZWFzZSBjYWxsIGZpbmROZXh0KCkgbGF0ZXIuXCIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluZE5leHQnKTtcbiAgICAgIGlmIChidXR0b24pIHtcbiAgICAgICAgYnV0dG9uLmNsaWNrKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaW5kUHJldmlvdXMoKTogYm9vbGVhbiB7XG4gICAgaWYgKCFOZ3hFeHRlbmRlZFBkZlZpZXdlckNvbXBvbmVudC5uZ3hFeHRlbmRlZFBkZlZpZXdlckluaXRpYWxpemVkKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cXVvdGVtYXJrXG4gICAgICBjb25zb2xlLmVycm9yKFwiVGhlIFBERiB2aWV3ZXIgaGFzbid0IGZpbmlzaGVkIGluaXRpYWxpemluZy4gUGxlYXNlIGNhbGwgZmluZFByZXZpb3VzKCkgbGF0ZXIuXCIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluZFByZXZpb3VzJyk7XG4gICAgICBpZiAoYnV0dG9uKSB7XG4gICAgICAgIGJ1dHRvbi5jbGljaygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJpbnQocHJpbnRSYW5nZT86IFBERlByaW50UmFuZ2UpIHtcbiAgICBjb25zdCBQREZWaWV3ZXJBcHBsaWNhdGlvbjogSVBERlZpZXdlckFwcGxpY2F0aW9uID0gKHdpbmRvdyBhcyBhbnkpLlBERlZpZXdlckFwcGxpY2F0aW9uO1xuICAgIGNvbnN0IGFscmVhZHlUaGVyZSA9ICEhd2luZG93Wydpc0luUERGUHJpbnRSYW5nZSddICYmICghcHJpbnRSYW5nZSk7XG4gICAgaWYgKCFhbHJlYWR5VGhlcmUpIHtcbiAgICAgIGlmICghcHJpbnRSYW5nZSkge1xuICAgICAgICBwcmludFJhbmdlID0ge30gYXMgUERGUHJpbnRSYW5nZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0UHJpbnRSYW5nZShwcmludFJhbmdlKTtcbiAgICB9XG4gICAgKHdpbmRvdyBhcyBhbnkpLnByaW50UERGKCk7XG4gICAgaWYgKCFhbHJlYWR5VGhlcmUpIHtcbiAgICAgIFBERlZpZXdlckFwcGxpY2F0aW9uLmV2ZW50QnVzLm9uKCdhZnRlcnByaW50JywgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZVByaW50UmFuZ2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVQcmludFJhbmdlKCkge1xuICAgIHdpbmRvd1snaXNJblBERlByaW50UmFuZ2UnXSA9IHVuZGVmaW5lZDtcbiAgICB3aW5kb3dbJ2ZpbHRlcmVkUGFnZUNvdW50J10gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0UHJpbnRSYW5nZShwcmludFJhbmdlOiBQREZQcmludFJhbmdlKSB7XG4gICAgY29uc3QgUERGVmlld2VyQXBwbGljYXRpb246IElQREZWaWV3ZXJBcHBsaWNhdGlvbiA9ICh3aW5kb3cgYXMgYW55KS5QREZWaWV3ZXJBcHBsaWNhdGlvbjtcbiAgICB3aW5kb3dbJ2lzSW5QREZQcmludFJhbmdlJ10gPSAocGFnZTogbnVtYmVyKSA9PiB0aGlzLmlzSW5QREZQcmludFJhbmdlKHBhZ2UsIHByaW50UmFuZ2UgYXMgUERGUHJpbnRSYW5nZSk7XG4gICAgd2luZG93WydmaWx0ZXJlZFBhZ2VDb3VudCddID0gdGhpcy5maWx0ZXJlZFBhZ2VDb3VudChQREZWaWV3ZXJBcHBsaWNhdGlvbi5wYWdlc0NvdW50LCBwcmludFJhbmdlKTtcbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXJlZFBhZ2VDb3VudChwYWdlQ291bnQ6IG51bWJlciwgcmFuZ2U6IFBERlByaW50UmFuZ2UpOiBudW1iZXIge1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGZvciAobGV0IHBhZ2UgPSAxOyBwYWdlIDw9IHBhZ2VDb3VudDsgcGFnZSsrKSB7XG4gICAgICBpZiAodGhpcy5pc0luUERGUHJpbnRSYW5nZShwYWdlLCByYW5nZSkpIHtcbiAgICAgICAgcmVzdWx0Kys7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgaXNJblBERlByaW50UmFuZ2UocGFnZUluZGV4OiBudW1iZXIsIHByaW50UmFuZ2U6IFBERlByaW50UmFuZ2UpIHtcbiAgICBjb25zdCBwYWdlID0gcGFnZUluZGV4ICsgMTtcbiAgICBpZiAocHJpbnRSYW5nZS5mcm9tKSB7XG4gICAgICBpZiAocGFnZSA8IHByaW50UmFuZ2UuZnJvbSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcmludFJhbmdlLnRvKSB7XG4gICAgICBpZiAocGFnZSA+IHByaW50UmFuZ2UudG8pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJpbnRSYW5nZS5leGNsdWRlZCkge1xuICAgICAgbGV0IGUgPSBwcmludFJhbmdlLmV4Y2x1ZGVkIGFzIEFycmF5PG51bWJlcj47XG4gICAgICBpZiAoZS5zb21lKHAgPT4gcCA9PT0gcGFnZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJpbnRSYW5nZS5pbmNsdWRlZCkge1xuICAgICAgaWYgKCFwcmludFJhbmdlLmluY2x1ZGVkLnNvbWUocCA9PiBwID09PSBwYWdlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=