@ngez/core
Version:
A collection of minimalistic, easy-to-use and fully customizable Angular components, directives and services
203 lines • 20.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, ViewEncapsulation, ViewChild, ElementRef, ContentChild, Output, EventEmitter, HostBinding, PLATFORM_ID, Inject } from "@angular/core";
import { PrettifyService } from "./prettify.service";
import { CodeService } from "./code.service";
import { map, tap } from "rxjs/operators";
import { DomSanitizer } from "@angular/platform-browser";
import { NgEzCodeLoadingComponent } from "./code-loading.component";
import { NgEzCodeLoadingErrorComponent } from "./code-loading-error.component";
import { of } from "rxjs";
import { faClone } from '@fortawesome/free-regular-svg-icons';
import { isPlatformBrowser } from "@angular/common";
var NgEzCodePrettifyComponent = /** @class */ (function () {
function NgEzCodePrettifyComponent(platformId, sanitizer, prettify, service) {
this.platformId = platformId;
this.sanitizer = sanitizer;
this.prettify = prettify;
this.service = service;
this.reload = new EventEmitter();
this.faClone = faClone;
this._loading = false;
this._error = false;
}
Object.defineProperty(NgEzCodePrettifyComponent.prototype, "classes", {
get: /**
* @return {?}
*/
function () {
return this.config && this.config.theme ? this.config.theme : 'dark';
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
NgEzCodePrettifyComponent.prototype.ngOnChanges = /**
* @return {?}
*/
function () {
this.update();
};
/**
* @return {?}
*/
NgEzCodePrettifyComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.update();
};
/**
* @return {?}
*/
NgEzCodePrettifyComponent.prototype.ngAfterContentInit = /**
* @return {?}
*/
function () {
var _this = this;
if (!this.codeLoadingErrorComponent || !this.codeLoadingErrorComponent.reloadDirective)
return;
this.subscription = this.codeLoadingErrorComponent.reloadDirective.reload.subscribe(function () {
_this.reload.emit();
_this.update();
});
};
/**
* @return {?}
*/
NgEzCodePrettifyComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.subscription)
this.subscription.unsubscribe();
};
/**
* @private
* @return {?}
*/
NgEzCodePrettifyComponent.prototype.update = /**
* @private
* @return {?}
*/
function () {
var _this = this;
if (!isPlatformBrowser(this.platformId) || !this.config || !(this.config.code || this.config.path))
return;
this._loading = true;
this._error = false;
/** @type {?} */
var code$ = this.config.code
? of(this.config.code)
: this.service.get(this.config.path);
/** @type {?} */
var prettifiedCode$ = code$.pipe(tap(function (code) { return _this._code = code; }), map(function (code) { return _this.prettify.formatCode(code, _this.config.language, _this.config.linenums); }), map(function (code) { return _this.sanitizer.bypassSecurityTrustHtml(code); }), tap(function () { return _this._loading = false; }, function () {
_this._loading = false;
_this._error = true;
}));
this.prettifiedCode$ = prettifiedCode$;
};
Object.defineProperty(NgEzCodePrettifyComponent.prototype, "isLoading", {
get: /**
* @return {?}
*/
function () {
return this.loading || this._loading;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgEzCodePrettifyComponent.prototype, "hasError", {
get: /**
* @return {?}
*/
function () {
return this.error || this._error;
},
enumerable: true,
configurable: true
});
NgEzCodePrettifyComponent.decorators = [
{ type: Component, args: [{
selector: 'ngez-code-prettify',
template: "<div *ngIf=\"config && config.header\" class=\"ngez-code-prettify-header\">\r\n {{config.header}}\r\n</div>\r\n<div class=\"ngez-code-prettify-content-container\" style=\"position: relative\">\r\n <div *ngIf=\"config && config.canCopy && !isLoading && !hasError\" class=\"ngez-copy-container\">\r\n <button [ngezClipboard]=\"_code\" class=\"ngez-copy-button\">\r\n <fa-icon size=\"2x\" [icon]=\"faClone\"></fa-icon>\r\n </button>\r\n </div>\r\n <div [style.max-height.px]=\"config ? config.maxHeight : null\" class=\"ngez-code-prettify-content\">\r\n <ng-container *ngIf=\"codeLoadingComponent && isLoading\">\r\n <ng-container *ngTemplateOutlet=\"codeLoadingComponent.template\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"codeLoadingErrorComponent && hasError\">\r\n <ng-container *ngTemplateOutlet=\"codeLoadingErrorComponent.template\"></ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"(prettifiedCode$ | async) as code\">\r\n <pre #pre class=\"ngez-code-prettify\" [innerHTML]=\"code\"></pre>\r\n </ng-container>\r\n </div>\r\n</div>",
encapsulation: ViewEncapsulation.None,
styles: ["ngez-code-prettify{display:block}.ngez-code-prettify{margin-top:0;margin-bottom:0}.ngez-code-prettify-content-container:hover .ngez-copy-button{display:inline-block}.ngez-code-prettify-content{overflow:auto;padding:12px}.ngez-copy-container{z-index:2;position:absolute;top:5px;right:16px}.ngez-copy-container .ngez-copy-button{outline:0;display:none;border:none;background-color:transparent;margin:0;text-decoration:none;cursor:pointer;text-align:center;transition:background 250ms ease-in-out,transform 150ms,-webkit-transform 150ms;-webkit-appearance:none;-moz-appearance:none}ol.linenums{margin-top:0;margin-bottom:0;color:#aeaeae}ol.linenums li.L0,ol.linenums li.L1,ol.linenums li.L2,ol.linenums li.L3,ol.linenums li.L5,ol.linenums li.L6,ol.linenums li.L7,ol.linenums li.L8,ol.linenums li.L9{list-style-type:decimal;background-color:inherit}.ngez-code-prettify-header{padding:10px}.light .ngez-copy-button:hover{color:#000b29}.light .ngez-code-prettify-header{background-color:#000b29;color:#fff}.light .ngez-code-prettify-content{background-color:rgba(241,241,241,.2)}.light .ngez-copy-button{color:#1e1e1e}.light .ngez-code-prettify{background-color:rgba(241,241,241,.2)}.light .ngez-code-prettify .str{color:#183691}.light .ngez-code-prettify .kwd{color:#a71d5d}.light .ngez-code-prettify .com{color:#969896}.light .ngez-code-prettify .lit,.light .ngez-code-prettify .typ{color:#0086b3}.light .ngez-code-prettify .clo,.light .ngez-code-prettify .opn,.light .ngez-code-prettify .pun{color:#333}.light .ngez-code-prettify .tag{color:navy}.light .ngez-code-prettify .atn{color:#795da3}.light .ngez-code-prettify .atv{color:#183691}.light .ngez-code-prettify .dec{color:#333}.light .ngez-code-prettify .var{color:teal}.light .ngez-code-prettify .fun{color:#900}.dark .ngez-copy-button:hover{color:#d70026}.dark .ngez-code-prettify-header{background-color:#d70026;color:#fff}.dark .ngez-code-prettify-content{border:0;background-color:#1e1e1e}.dark .ngez-copy-button{color:#fff}.dark .ngez-code-prettify{background-color:#1e1e1e}.dark .ngez-code-prettify.nocode{color:#fff}.dark .ngez-code-prettify .str{color:#b5bd68}.dark .ngez-code-prettify .kwd{color:#b294bb}.dark .ngez-code-prettify .pln{color:#fff}.dark .ngez-code-prettify .com{color:#969896}.dark .ngez-code-prettify .typ{color:#81a2be}.dark .ngez-code-prettify .lit{color:#de935f}.dark .ngez-code-prettify .clo,.dark .ngez-code-prettify .opn,.dark .ngez-code-prettify .pun{color:#c5c8c6}.dark .ngez-code-prettify .tag{color:#c66}.dark .ngez-code-prettify .atn{color:#de935f}.dark .ngez-code-prettify .atv{color:#8abeb7}.dark .ngez-code-prettify .dec{color:#de935f}.dark .ngez-code-prettify .var{color:#c66}.dark .ngez-code-prettify .fun{color:#81a2be}"]
}] }
];
/** @nocollapse */
NgEzCodePrettifyComponent.ctorParameters = function () { return [
{ type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] },
{ type: DomSanitizer },
{ type: PrettifyService },
{ type: CodeService }
]; };
NgEzCodePrettifyComponent.propDecorators = {
config: [{ type: Input }],
loading: [{ type: Input }],
error: [{ type: Input }],
reload: [{ type: Output }],
pre: [{ type: ViewChild, args: ['pre',] }],
codeLoadingComponent: [{ type: ContentChild, args: [NgEzCodeLoadingComponent,] }],
codeLoadingErrorComponent: [{ type: ContentChild, args: [NgEzCodeLoadingErrorComponent,] }],
classes: [{ type: HostBinding, args: ['class',] }]
};
return NgEzCodePrettifyComponent;
}());
export { NgEzCodePrettifyComponent };
if (false) {
/** @type {?} */
NgEzCodePrettifyComponent.prototype.config;
/** @type {?} */
NgEzCodePrettifyComponent.prototype.loading;
/** @type {?} */
NgEzCodePrettifyComponent.prototype.error;
/** @type {?} */
NgEzCodePrettifyComponent.prototype.reload;
/** @type {?} */
NgEzCodePrettifyComponent.prototype.pre;
/** @type {?} */
NgEzCodePrettifyComponent.prototype.codeLoadingComponent;
/** @type {?} */
NgEzCodePrettifyComponent.prototype.codeLoadingErrorComponent;
/** @type {?} */
NgEzCodePrettifyComponent.prototype.faClone;
/** @type {?} */
NgEzCodePrettifyComponent.prototype._code;
/** @type {?} */
NgEzCodePrettifyComponent.prototype._loading;
/** @type {?} */
NgEzCodePrettifyComponent.prototype._error;
/** @type {?} */
NgEzCodePrettifyComponent.prototype.prettifiedCode$;
/**
* @type {?}
* @private
*/
NgEzCodePrettifyComponent.prototype.subscription;
/**
* @type {?}
* @private
*/
NgEzCodePrettifyComponent.prototype.platformId;
/**
* @type {?}
* @private
*/
NgEzCodePrettifyComponent.prototype.sanitizer;
/**
* @type {?}
* @private
*/
NgEzCodePrettifyComponent.prototype.prettify;
/**
* @type {?}
* @private
*/
NgEzCodePrettifyComponent.prototype.service;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1wcmV0dGlmeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmdlei9jb3JlLyIsInNvdXJjZXMiOlsiY29kZS1wcmV0dGlmeS9jb2RlLXByZXR0aWZ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUVaLE1BQU0sRUFDTixZQUFZLEVBRVosV0FBVyxFQUdYLFdBQVcsRUFDWCxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsR0FBRyxFQUFhLEdBQUcsRUFBUyxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRSxPQUFPLEVBQWMsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUdwRCxPQUFPLEVBQUUsT0FBTyxFQUFrQixNQUFNLHFDQUFxQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBEO0lBc0NJLG1DQUNpQyxVQUFrQixFQUN2QyxTQUF1QixFQUN2QixRQUF5QixFQUN6QixPQUFvQjtRQUhDLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixZQUFPLEdBQVAsT0FBTyxDQUFhO1FBNUJ0QixXQUFNLEdBQUcsSUFBSSxZQUFZ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REFBUzs7OztRQUFiO1lBQ0ksT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDekMsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSwrQ0FBUTs7OztRQUFaO1lBQ0ksT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckMsQ0FBQzs7O09BQUE7O2dCQWpHSixTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsMnFDQUE2QztvQkFFN0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7O2lCQUN4Qzs7OztnQkFrQ2dELE1BQU0sdUJBQTlDLE1BQU0sU0FBQyxXQUFXO2dCQWhEbEIsWUFBWTtnQkFIWixlQUFlO2dCQUNmLFdBQVc7Ozt5QkFtQmYsS0FBSzswQkFFTCxLQUFLO3dCQUVMLEtBQUs7eUJBRUwsTUFBTTtzQkFFTixTQUFTLFNBQUMsS0FBSzt1Q0FFZixZQUFZLFNBQUMsd0JBQXdCOzRDQUVyQyxZQUFZLFNBQUMsNkJBQTZCOzBCQUUxQyxXQUFXLFNBQUMsT0FBTzs7SUE0RXhCLGdDQUFDO0NBQUEsQUFsR0QsSUFrR0M7U0E1RlkseUJBQXlCOzs7SUFFbEMsMkNBQXdDOztJQUV4Qyw0Q0FBMEI7O0lBRTFCLDBDQUF3Qjs7SUFFeEIsMkNBQXNDOztJQUV0Qyx3Q0FBa0M7O0lBRWxDLHlEQUF1Rjs7SUFFdkYsOERBQXNHOztJQU10Ryw0Q0FBa0M7O0lBRWxDLDBDQUFjOztJQUVkLDZDQUFpQjs7SUFFakIsMkNBQWU7O0lBRWYsb0RBQXNDOzs7OztJQUV0QyxpREFBbUM7Ozs7O0lBRy9CLCtDQUErQzs7Ozs7SUFDL0MsOENBQStCOzs7OztJQUMvQiw2Q0FBaUM7Ozs7O0lBQ2pDLDRDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFxyXG4gICAgQ29tcG9uZW50LCBcclxuICAgIElucHV0LCBcclxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLCBcclxuICAgIFZpZXdDaGlsZCwgXHJcbiAgICBFbGVtZW50UmVmLCBcclxuICAgIENvbnRlbnRDaGlsZCwgIFxyXG4gICAgQWZ0ZXJDb250ZW50SW5pdCwgXHJcbiAgICBPdXRwdXQsIFxyXG4gICAgRXZlbnRFbWl0dGVyLCBcclxuICAgIE9uRGVzdHJveSwgXHJcbiAgICBIb3N0QmluZGluZyxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uSW5pdCxcclxuICAgIFBMQVRGT1JNX0lELCBcclxuICAgIEluamVjdH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUHJldHRpZnlTZXJ2aWNlIH0gZnJvbSBcIi4vcHJldHRpZnkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb2RlU2VydmljZSB9IGZyb20gXCIuL2NvZGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFwLCBkZWxheSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgTmdFekNvZGVMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSBcIi4vY29kZS1sb2FkaW5nLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBOZ0V6Q29kZUxvYWRpbmdFcnJvckNvbXBvbmVudCB9IGZyb20gXCIuL2NvZGUtbG9hZGluZy1lcnJvci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE5nRXpDb2RlUHJldHRpZnlDb25maWcgfSBmcm9tIFwiLi9tb2RlbHNcIjtcclxuaW1wb3J0IHsgTmdFelJlbG9hZERpcmVjdGl2ZSB9IGZyb20gXCIuL3JlbG9hZC5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgZmFDbG9uZSwgSWNvbkRlZmluaXRpb24gfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1yZWd1bGFyLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ25nZXotY29kZS1wcmV0dGlmeScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29kZS1wcmV0dGlmeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2RlLXByZXR0aWZ5LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ0V6Q29kZVByZXR0aWZ5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gICAgQElucHV0KCkgY29uZmlnOiBOZ0V6Q29kZVByZXR0aWZ5Q29uZmlnO1xyXG5cclxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KCkgZXJyb3I6IGJvb2xlYW47XHJcblxyXG4gICAgQE91dHB1dCgpIHJlbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdwcmUnKSBwcmU6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZChOZ0V6Q29kZUxvYWRpbmdDb21wb25lbnQpIGNvZGVMb2FkaW5nQ29tcG9uZW50OiBOZ0V6Q29kZUxvYWRpbmdDb21wb25lbnQ7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZChOZ0V6Q29kZUxvYWRpbmdFcnJvckNvbXBvbmVudCkgY29kZUxvYWRpbmdFcnJvckNvbXBvbmVudDogTmdFekNvZGVMb2FkaW5nRXJyb3JDb21wb25lbnQ7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGdldCBjbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLnRoZW1lID8gdGhpcy5jb25maWcudGhlbWUgOiAnZGFyayc7XHJcbiAgICB9XHJcblxyXG4gICAgZmFDbG9uZTogSWNvbkRlZmluaXRpb24gPSBmYUNsb25lO1xyXG5cclxuICAgIF9jb2RlOiBzdHJpbmc7XHJcbiAgICBcclxuICAgIF9sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgX2Vycm9yID0gZmFsc2U7XHJcblxyXG4gICAgcHJldHRpZmllZENvZGUkOiBPYnNlcnZhYmxlPFNhZmVIdG1sPjtcclxuXHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxyXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBwcmV0dGlmeTogUHJldHRpZnlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc2VydmljZTogQ29kZVNlcnZpY2UpIHsgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvZGVMb2FkaW5nRXJyb3JDb21wb25lbnQgfHwgIXRoaXMuY29kZUxvYWRpbmdFcnJvckNvbXBvbmVudC5yZWxvYWREaXJlY3RpdmUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY29kZUxvYWRpbmdFcnJvckNvbXBvbmVudC5yZWxvYWREaXJlY3RpdmUucmVsb2FkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVsb2FkLmVtaXQoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBpZih0aGlzLnN1YnNjcmlwdGlvbilcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZSgpIHtcclxuXHJcbiAgICAgICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpIHx8ICF0aGlzLmNvbmZpZyB8fCAhKHRoaXMuY29uZmlnLmNvZGUgfHwgdGhpcy5jb25maWcucGF0aCkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5fbG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgY29kZSQgPSB0aGlzLmNvbmZpZy5jb2RlXHJcbiAgICAgICAgICAgID8gb2YodGhpcy5jb25maWcuY29kZSlcclxuICAgICAgICAgICAgOiB0aGlzLnNlcnZpY2UuZ2V0KHRoaXMuY29uZmlnLnBhdGgpO1xyXG5cclxuICAgICAgICBjb25zdCBwcmV0dGlmaWVkQ29kZSQgPSBjb2RlJC5waXBlKFxyXG4gICAgICAgICAgICB0YXAoY29kZSA9PiB0aGlzLl9jb2RlID0gY29kZSksXHJcbiAgICAgICAgICAgIG1hcChjb2RlID0+IHRoaXMucHJldHRpZnkuZm9ybWF0Q29kZShjb2RlLCB0aGlzLmNvbmZpZy5sYW5ndWFnZSwgdGhpcy5jb25maWcubGluZW51bXMpKSxcclxuICAgICAgICAgICAgbWFwKGNvZGUgPT4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoY29kZSkpLFxyXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5fbG9hZGluZyA9IGZhbHNlLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmV0dGlmaWVkQ29kZSQgPSBwcmV0dGlmaWVkQ29kZSQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nIHx8IHRoaXMuX2xvYWRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGhhc0Vycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yIHx8IHRoaXMuX2Vycm9yO1xyXG4gICAgfVxyXG59Il19