UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

208 lines 23.3 kB
import { __decorate } from "tslib"; /** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewEncapsulation } from '@angular/core'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { WithConfig } from 'ng-zorro-antd/core/config'; import { warn } from 'ng-zorro-antd/core/logger'; import { InputBoolean } from 'ng-zorro-antd/core/util'; import { NzImageDirective } from 'ng-zorro-antd/image'; import { defaultImageSrcLoader } from './image-loader'; import { isFixedSize } from './utils'; import * as i0 from "@angular/core"; import * as i1 from "ng-zorro-antd/core/config"; import * as i2 from "ng-zorro-antd/core/services"; export const NZ_CONFIG_MODULE_NAME = 'imageExperimental'; const sizeBreakpoints = [16, 32, 48, 64, 96, 128, 256, 384, 640, 750, 828, 1080, 1200, 1920, 2048, 3840]; export class NzImageViewComponent { constructor(cdr, nzConfigService, imagePreloadService) { this.cdr = cdr; this.nzConfigService = nzConfigService; this.imagePreloadService = imagePreloadService; this._nzModuleName = NZ_CONFIG_MODULE_NAME; this.nzSrc = ''; this.nzAlt = ''; this.nzWidth = 'auto'; this.nzHeight = 'auto'; this.nzSrcLoader = defaultImageSrcLoader; this.nzAutoSrcset = false; this.nzPriority = false; this.nzFallback = null; this.nzPlaceholder = null; this.nzDisablePreview = false; this.src = ''; this.width = 'auto'; this.height = 'auto'; this.srcset = ''; this.destroy$ = new Subject(); this.reloadDisposeHandler = () => void 0; this.nzConfigService .getConfigChangeEventForComponent(NZ_CONFIG_MODULE_NAME) .pipe(takeUntil(this.destroy$)) .subscribe(() => { this.composeImageAttrs(); this.cdr.markForCheck(); }); } ngOnInit() { if (this.nzPriority) { this.preload(); } } ngOnChanges(changes) { const { nzLoader, nzSrc, nzOptimize } = changes; if (nzSrc || nzLoader || nzOptimize) { this.composeImageAttrs(); } } ngOnDestroy() { this.reloadDisposeHandler(); this.destroy$.next(); this.destroy$.complete(); } preload() { this.reloadDisposeHandler = this.imagePreloadService.addPreload({ src: this.src, srcset: this.srcset }); } optimizable() { if (this.nzAutoSrcset) { if (!isFixedSize(this.nzWidth) || !isFixedSize(this.nzHeight)) { warn(`When using "nzAutoSrcset" you should use a fixed size width and height, for more information please refer to CLS (https://web.dev/cls/) performance metrics`); return false; } if (this.nzSrc.endsWith('.svg')) { warn(`SVG does not need to be optimized`); return false; } if (this.nzSrc.startsWith('data:')) { warn(`Data URLs cannot be optimized`); return false; } return true; } return false; } composeImageAttrs() { const loader = this.getLoader(); if (!this.optimizable()) { this.src = loader({ src: this.nzSrc }); this.width = this.nzWidth; this.height = this.nzHeight; return; } this.width = typeof this.nzWidth === 'number' ? this.nzWidth : parseInt(this.nzWidth, 10); this.height = typeof this.nzHeight === 'number' ? this.nzHeight : parseInt(this.nzHeight, 10); const widths = this.convertWidths(this.width, sizeBreakpoints); this.src = loader({ src: this.nzSrc, width: widths[0] }); this.srcset = widths .map((w, i) => `${loader({ src: this.nzSrc, width: w })} ${i + 1}x`) .join(', '); } getLoader() { return this.nzSrcLoader || defaultImageSrcLoader; } convertWidths(width, optimizeSizes) { const allSizes = [...optimizeSizes].sort((a, b) => a - b); return [ ...new Set( // 2x scale is sufficient // https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices.html [width, width * 2].map(w => allSizes.find(p => p >= w) || w)) ]; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: NzImageViewComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NzConfigService }, { token: i2.ImagePreloadService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: NzImageViewComponent, isStandalone: true, selector: "nz-image", inputs: { nzSrc: "nzSrc", nzAlt: "nzAlt", nzWidth: "nzWidth", nzHeight: "nzHeight", nzSrcLoader: "nzSrcLoader", nzAutoSrcset: "nzAutoSrcset", nzPriority: "nzPriority", nzFallback: "nzFallback", nzPlaceholder: "nzPlaceholder", nzDisablePreview: "nzDisablePreview" }, viewQueries: [{ propertyName: "imageRef", first: true, predicate: ["imageRef"], descendants: true }], exportAs: ["nzImage"], usesOnChanges: true, ngImport: i0, template: ` <img #imageRef nz-image [nzSrc]="src" [nzSrcset]="srcset" [nzDisablePreview]="nzDisablePreview" [nzFallback]="nzFallback" [nzPlaceholder]="nzPlaceholder" [attr.width]="width" [attr.height]="height" [attr.srcset]="srcset" [attr.alt]="nzAlt || null" /> `, isInline: true, dependencies: [{ kind: "directive", type: NzImageDirective, selector: "img[nz-image]", inputs: ["nzSrc", "nzSrcset", "nzDisablePreview", "nzFallback", "nzPlaceholder", "nzScaleStep"], exportAs: ["nzImage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } } __decorate([ WithConfig() ], NzImageViewComponent.prototype, "nzSrcLoader", void 0); __decorate([ InputBoolean(), WithConfig() ], NzImageViewComponent.prototype, "nzAutoSrcset", void 0); __decorate([ InputBoolean() ], NzImageViewComponent.prototype, "nzPriority", void 0); __decorate([ WithConfig() ], NzImageViewComponent.prototype, "nzFallback", void 0); __decorate([ WithConfig() ], NzImageViewComponent.prototype, "nzPlaceholder", void 0); __decorate([ InputBoolean(), WithConfig() ], NzImageViewComponent.prototype, "nzDisablePreview", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: NzImageViewComponent, decorators: [{ type: Component, args: [{ selector: 'nz-image', exportAs: 'nzImage', template: ` <img #imageRef nz-image [nzSrc]="src" [nzSrcset]="srcset" [nzDisablePreview]="nzDisablePreview" [nzFallback]="nzFallback" [nzPlaceholder]="nzPlaceholder" [attr.width]="width" [attr.height]="height" [attr.srcset]="srcset" [attr.alt]="nzAlt || null" /> `, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NzImageDirective], standalone: true }] }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.NzConfigService }, { type: i2.ImagePreloadService }], propDecorators: { nzSrc: [{ type: Input }], nzAlt: [{ type: Input }], nzWidth: [{ type: Input }], nzHeight: [{ type: Input }], nzSrcLoader: [{ type: Input }], nzAutoSrcset: [{ type: Input }], nzPriority: [{ type: Input }], nzFallback: [{ type: Input }], nzPlaceholder: [{ type: Input }], nzDisablePreview: [{ type: Input }], imageRef: [{ type: ViewChild, args: ['imageRef'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29tcG9uZW50cy9leHBlcmltZW50YWwvaW1hZ2UvaW1hZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxLQUFLLEVBS0wsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQWdDLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7OztBQUV0QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBZ0IsbUJBQW1CLENBQUM7QUFDdEUsTUFBTSxlQUFlLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQTBCekcsTUFBTSxPQUFPLG9CQUFvQjtJQTRCL0IsWUFDVSxHQUFzQixFQUN2QixlQUFnQyxFQUMvQixt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LEVBQUUsVUFBVTtvQkFDcEIsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7R0FjVDtvQkFDRCxtQkFBbUIsRUFBRSxLQUFLO29CQUMxQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUMzQixVQUFVLEVBQUUsSUFBSTtpQkFDakI7c0pBT1UsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDaUIsV0FBVztzQkFBakMsS0FBSztnQkFDaUMsWUFBWTtzQkFBbEQsS0FBSztnQkFDbUIsVUFBVTtzQkFBbEMsS0FBSztnQkFDaUIsVUFBVTtzQkFBaEMsS0FBSztnQkFDaUIsYUFBYTtzQkFBbkMsS0FBSztnQkFDaUMsZ0JBQWdCO3NCQUF0RCxLQUFLO2dCQUNpQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ORy1aT1JSTy9uZy16b3Jyby1hbnRkL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE56Q29uZmlnS2V5LCBOekNvbmZpZ1NlcnZpY2UsIFdpdGhDb25maWcgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvY29uZmlnJztcbmltcG9ydCB7IHdhcm4gfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvbG9nZ2VyJztcbmltcG9ydCB7IEltYWdlUHJlbG9hZFNlcnZpY2UsIFByZWxvYWREaXNwb3NlSGFuZGxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3NlcnZpY2VzJztcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdXRpbCc7XG5pbXBvcnQgeyBOekltYWdlRGlyZWN0aXZlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pbWFnZSc7XG5cbmltcG9ydCB7IGRlZmF1bHRJbWFnZVNyY0xvYWRlciB9IGZyb20gJy4vaW1hZ2UtbG9hZGVyJztcbmltcG9ydCB7IE56SW1hZ2VTcmNMb2FkZXIgfSBmcm9tICcuL3R5cGluZ3MnO1xuaW1wb3J0IHsgaXNGaXhlZFNpemUgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IE5aX0NPTkZJR19NT0RVTEVfTkFNRTogTnpDb25maWdLZXkgPSAnaW1hZ2VFeHBlcmltZW50YWwnO1xuY29uc3Qgc2l6ZUJyZWFrcG9pbnRzID0gWzE2LCAzMiwgNDgsIDY0LCA5NiwgMTI4LCAyNTYsIDM4NCwgNjQwLCA3NTAsIDgyOCwgMTA4MCwgMTIwMCwgMTkyMCwgMjA0OCwgMzg0MF07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ256LWltYWdlJyxcbiAgZXhwb3J0QXM6ICduekltYWdlJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aW1nXG4gICAgICAjaW1hZ2VSZWZcbiAgICAgIG56LWltYWdlXG4gICAgICBbbnpTcmNdPVwic3JjXCJcbiAgICAgIFtuelNyY3NldF09XCJzcmNzZXRcIlxuICAgICAgW256RGlzYWJsZVByZXZpZXddPVwibnpEaXNhYmxlUHJldmlld1wiXG4gICAgICBbbnpGYWxsYmFja109XCJuekZhbGxiYWNrXCJcbiAgICAgIFtuelBsYWNlaG9sZGVyXT1cIm56UGxhY2Vob2xkZXJcIlxuICAgICAgW2F0dHIud2lkdGhdPVwid2lkdGhcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgICBbYXR0ci5zcmNzZXRdPVwic3Jjc2V0XCJcbiAgICAgIFthdHRyLmFsdF09XCJuekFsdCB8fCBudWxsXCJcbiAgICAvPlxuICBgLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtOekltYWdlRGlyZWN0aXZlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBOekltYWdlVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICByZWFkb25seSBfbnpNb2R1bGVOYW1lOiBOekNvbmZpZ0tleSA9IE5aX0NPTkZJR19NT0RVTEVfTkFNRTtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX256QXV0b1NyY3NldDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpQcmlvcml0eTogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbnpEaXNhYmxlUHJldmlldzogQm9vbGVhbklucHV0O1xuXG4gIEBJbnB1dCgpIG56U3JjOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgbnpBbHQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBueldpZHRoOiBzdHJpbmcgfCBudW1iZXIgPSAnYXV0byc7XG4gIEBJbnB1dCgpIG56SGVpZ2h0OiBzdHJpbmcgfCBudW1iZXIgPSAnYXV0byc7XG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgbnpTcmNMb2FkZXI6IE56SW1hZ2VTcmNMb2FkZXIgPSBkZWZhdWx0SW1hZ2VTcmNMb2FkZXI7XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBAV2l0aENvbmZpZygpIG56QXV0b1NyY3NldDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpQcmlvcml0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBAV2l0aENvbmZpZygpIG56RmFsbGJhY2s6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBAV2l0aENvbmZpZygpIG56UGxhY2Vob2xkZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgQFdpdGhDb25maWcoKSBuekRpc2FibGVQcmV2aWV3OiBib29sZWFuID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGQoJ2ltYWdlUmVmJykgaW1hZ2VSZWYhOiBFbGVtZW50UmVmPEhUTUxJbWFnZUVsZW1lbnQ+O1xuXG4gIHNyYyA9ICcnO1xuXG4gIHdpZHRoOiBzdHJpbmcgfCBudW1iZXIgPSAnYXV0byc7XG4gIGhlaWdodDogc3RyaW5nIHwgbnVtYmVyID0gJ2F1dG8nO1xuICBzcmNzZXQgPSAnJztcbiAgaW50ZXJuYWxJbWFnZSE6IEhUTUxJbWFnZUVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVsb2FkRGlzcG9zZUhhbmRsZXI6IFByZWxvYWREaXNwb3NlSGFuZGxlID0gKCkgPT4gdm9pZCAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgbnpDb25maWdTZXJ2aWNlOiBOekNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbWFnZVByZWxvYWRTZXJ2aWNlOiBJbWFnZVByZWxvYWRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubnpDb25maWdTZXJ2aWNlXG4gICAgICAuZ2V0Q29uZmlnQ2hhbmdlRXZlbnRGb3JDb21wb25lbnQoTlpfQ09ORklHX01PRFVMRV9OQU1FKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29tcG9zZUltYWdlQXR0cnMoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm56UHJpb3JpdHkpIHtcbiAgICAgIHRoaXMucHJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB7IG56TG9hZGVyLCBuelNyYywgbnpPcHRpbWl6ZSB9ID0gY2hhbmdlcztcblxuICAgIGlmIChuelNyYyB8fCBuekxvYWRlciB8fCBuek9wdGltaXplKSB7XG4gICAgICB0aGlzLmNvbXBvc2VJbWFnZUF0dHJzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZWxvYWREaXNwb3NlSGFuZGxlcigpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbG9hZERpc3Bvc2VIYW5kbGVyID0gdGhpcy5pbWFnZVByZWxvYWRTZXJ2aWNlLmFkZFByZWxvYWQoe1xuICAgICAgc3JjOiB0aGlzLnNyYyxcbiAgICAgIHNyY3NldDogdGhpcy5zcmNzZXRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3B0aW1pemFibGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubnpBdXRvU3Jjc2V0KSB7XG4gICAgICBpZiAoIWlzRml4ZWRTaXplKHRoaXMubnpXaWR0aCkgfHwgIWlzRml4ZWRTaXplKHRoaXMubnpIZWlnaHQpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgYFdoZW4gdXNpbmcgXCJuekF1dG9TcmNzZXRcIiB5b3Ugc2hvdWxkIHVzZSBhIGZpeGVkIHNpemUgd2lkdGggYW5kIGhlaWdodCwgZm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHJlZmVyIHRvIENMUyAoaHR0cHM6Ly93ZWIuZGV2L2Nscy8pIHBlcmZvcm1hbmNlIG1ldHJpY3NgXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm56U3JjLmVuZHNXaXRoKCcuc3ZnJykpIHtcbiAgICAgICAgd2FybihgU1ZHIGRvZXMgbm90IG5lZWQgdG8gYmUgb3B0aW1pemVkYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm56U3JjLnN0YXJ0c1dpdGgoJ2RhdGE6JykpIHtcbiAgICAgICAgd2FybihgRGF0YSBVUkxzIGNhbm5vdCBiZSBvcHRpbWl6ZWRgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcG9zZUltYWdlQXR0cnMoKTogdm9pZCB7XG4gICAgY29uc3QgbG9hZGVyID0gdGhpcy5nZXRMb2FkZXIoKTtcbiAgICBpZiAoIXRoaXMub3B0aW1pemFibGUoKSkge1xuICAgICAgdGhpcy5zcmMgPSBsb2FkZXIoeyBzcmM6IHRoaXMubnpTcmMgfSk7XG4gICAgICB0aGlzLndpZHRoID0gdGhpcy5ueldpZHRoO1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLm56SGVpZ2h0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLndpZHRoID0gdHlwZW9mIHRoaXMubnpXaWR0aCA9PT0gJ251bWJlcicgPyB0aGlzLm56V2lkdGggOiBwYXJzZUludCh0aGlzLm56V2lkdGgsIDEwKTtcbiAgICB0aGlzLmhlaWdodCA9IHR5cGVvZiB0aGlzLm56SGVpZ2h0ID09PSAnbnVtYmVyJyA/IHRoaXMubnpIZWlnaHQgOiBwYXJzZUludCh0aGlzLm56SGVpZ2h0LCAxMCk7XG4gICAgY29uc3Qgd2lkdGhzID0gdGhpcy5jb252ZXJ0V2lkdGhzKHRoaXMud2lkdGgsIHNpemVCcmVha3BvaW50cyk7XG4gICAgdGhpcy5zcmMgPSBsb2FkZXIoeyBzcmM6IHRoaXMubnpTcmMsIHdpZHRoOiB3aWR0aHNbMF0gfSk7XG4gICAgdGhpcy5zcmNzZXQgPSB3aWR0aHNcbiAgICAgIC5tYXAoXG4gICAgICAgICh3LCBpKSA9PlxuICAgICAgICAgIGAke2xvYWRlcih7XG4gICAgICAgICAgICBzcmM6IHRoaXMubnpTcmMsXG4gICAgICAgICAgICB3aWR0aDogd1xuICAgICAgICAgIH0pfSAke2kgKyAxfXhgXG4gICAgICApXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9hZGVyKCk6IE56SW1hZ2VTcmNMb2FkZXIge1xuICAgIHJldHVybiB0aGlzLm56U3JjTG9hZGVyIHx8IGRlZmF1bHRJbWFnZVNyY0xvYWRlcjtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFdpZHRocyh3aWR0aDogbnVtYmVyLCBvcHRpbWl6ZVNpemVzOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCBhbGxTaXplcyA9IFsuLi5vcHRpbWl6ZVNpemVzXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgIC8vIDJ4IHNjYWxlIGlzIHN1ZmZpY2llbnRcbiAgICAgICAgLy8gaHR0cHM6Ly9ibG9nLnR3aXR0ZXIuY29tL2VuZ2luZWVyaW5nL2VuX3VzL3RvcGljcy9pbmZyYXN0cnVjdHVyZS8yMDE5L2NhcHBpbmctaW1hZ2UtZmlkZWxpdHktb24tdWx0cmEtaGlnaC1yZXNvbHV0aW9uLWRldmljZXMuaHRtbFxuICAgICAgICBbd2lkdGgsIHdpZHRoICogMl0ubWFwKHcgPT4gYWxsU2l6ZXMuZmluZChwID0+IHAgPj0gdykgfHwgdylcbiAgICAgIClcbiAgICBdO1xuICB9XG59XG4iXX0=