ngx-typed-js-aot
Version:
An Angular integration for [Typed.js](https://github.com/mattboldt/typed.js/).
217 lines • 19.3 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import Typed from 'typed.js';
let NgxTypedJsComponent = class NgxTypedJsComponent {
constructor() {
this.completed = new EventEmitter();
this.preStringTyped = new EventEmitter();
this.stringTyped = new EventEmitter();
this.lastStringBackspaced = new EventEmitter();
this.typingPaused = new EventEmitter();
this.typingResumed = new EventEmitter();
this.reset = new EventEmitter();
this.stopped = new EventEmitter();
this.started = new EventEmitter();
this.destroyed = new EventEmitter();
}
ngAfterViewInit() {
this.typed = new Typed(this.content.nativeElement.querySelector('.typing'), this.options);
if (this.showCursor !== false) {
this.updateCursorStyle();
}
}
toggle() {
this.typed.toggle();
}
stop() {
this.typed.stop();
}
start() {
this.typed.start();
}
destroy() {
this.typed.destroy();
}
doReset(restart) {
this.typed.reset(restart);
}
get options() {
const emit = (emitter) => () => emitter.emit();
const emitIndex = (emitter) => (index) => emitter.emit(index);
const opts = {
strings: this.strings,
stringsElement: this.stringsElement,
typeSpeed: this.typeSpeed,
startDelay: this.startDelay,
backSpeed: this.backSpeed,
smartBackspace: this.smartBackspace,
shuffle: this.shuffle,
backDelay: this.backDelay,
fadeOut: this.fadeOut,
fadeOutClass: this.fadeOutClass,
fadeOutDelay: this.fadeOutDelay,
loop: this.loop,
loopCount: this.loopCount,
showCursor: this.showCursor,
autoInsertCss: this.autoInsertCss,
attr: this.attr,
bindInputFocusEvents: this.bindInputFocusEvents,
contentType: this.contentType,
onComplete: emit(this.completed),
preStringTyped: emitIndex(this.preStringTyped),
onStringTyped: emitIndex(this.stringTyped),
onLastStringBackspaced: emit(this.lastStringBackspaced),
onTypingPaused: emitIndex(this.typingPaused),
onTypingResumed: emitIndex(this.typingResumed),
onReset: emit(this.reset),
onStop: emitIndex(this.stopped),
onStart: emitIndex(this.started),
onDestroy: emit(this.destroyed),
};
Object.keys(opts).forEach(key => {
if (opts[key] === undefined) {
delete opts[key];
}
});
return opts;
}
updateCursorStyle() {
const textElementStyle = getComputedStyle(this.content.nativeElement.querySelector('.typing'));
const cursorElementStyle = this.content.nativeElement.querySelector('.typed-cursor').style;
cursorElementStyle.fontSize = textElementStyle.fontSize;
cursorElementStyle.color = this.cursorColor || textElementStyle.color;
}
};
__decorate([
Input(),
__metadata("design:type", String)
], NgxTypedJsComponent.prototype, "cursorColor", void 0);
__decorate([
Input(),
__metadata("design:type", Array)
], NgxTypedJsComponent.prototype, "strings", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], NgxTypedJsComponent.prototype, "stringsElement", void 0);
__decorate([
Input(),
__metadata("design:type", Number)
], NgxTypedJsComponent.prototype, "typeSpeed", void 0);
__decorate([
Input(),
__metadata("design:type", Number)
], NgxTypedJsComponent.prototype, "startDelay", void 0);
__decorate([
Input(),
__metadata("design:type", Number)
], NgxTypedJsComponent.prototype, "backSpeed", void 0);
__decorate([
Input(),
__metadata("design:type", Boolean)
], NgxTypedJsComponent.prototype, "smartBackspace", void 0);
__decorate([
Input(),
__metadata("design:type", Boolean)
], NgxTypedJsComponent.prototype, "shuffle", void 0);
__decorate([
Input(),
__metadata("design:type", Number)
], NgxTypedJsComponent.prototype, "backDelay", void 0);
__decorate([
Input(),
__metadata("design:type", Boolean)
], NgxTypedJsComponent.prototype, "fadeOut", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], NgxTypedJsComponent.prototype, "fadeOutClass", void 0);
__decorate([
Input(),
__metadata("design:type", Boolean)
], NgxTypedJsComponent.prototype, "fadeOutDelay", void 0);
__decorate([
Input(),
__metadata("design:type", Boolean)
], NgxTypedJsComponent.prototype, "loop", void 0);
__decorate([
Input(),
__metadata("design:type", Number)
], NgxTypedJsComponent.prototype, "loopCount", void 0);
__decorate([
Input(),
__metadata("design:type", Boolean)
], NgxTypedJsComponent.prototype, "showCursor", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], NgxTypedJsComponent.prototype, "cursorChar", void 0);
__decorate([
Input(),
__metadata("design:type", Boolean)
], NgxTypedJsComponent.prototype, "autoInsertCss", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], NgxTypedJsComponent.prototype, "attr", void 0);
__decorate([
Input(),
__metadata("design:type", Boolean)
], NgxTypedJsComponent.prototype, "bindInputFocusEvents", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], NgxTypedJsComponent.prototype, "contentType", void 0);
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], NgxTypedJsComponent.prototype, "completed", void 0);
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], NgxTypedJsComponent.prototype, "preStringTyped", void 0);
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], NgxTypedJsComponent.prototype, "stringTyped", void 0);
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], NgxTypedJsComponent.prototype, "lastStringBackspaced", void 0);
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], NgxTypedJsComponent.prototype, "typingPaused", void 0);
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], NgxTypedJsComponent.prototype, "typingResumed", void 0);
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], NgxTypedJsComponent.prototype, "reset", void 0);
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], NgxTypedJsComponent.prototype, "stopped", void 0);
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], NgxTypedJsComponent.prototype, "started", void 0);
__decorate([
Output(),
__metadata("design:type", EventEmitter)
], NgxTypedJsComponent.prototype, "destroyed", void 0);
__decorate([
ViewChild('wrapper', { static: true }),
__metadata("design:type", Object)
], NgxTypedJsComponent.prototype, "content", void 0);
NgxTypedJsComponent = __decorate([
Component({
selector: 'ngx-typed-js',
template: "<div #wrapper>\n <ng-content></ng-content>\n</div>\n",
styles: [":host>>>.typing{display:inline}"]
})
], NgxTypedJsComponent);
export { NgxTypedJsComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXR5cGVkLWpzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC10eXBlZC1qcy1hb3QvIiwic291cmNlcyI6WyJsaWIvbmd4LXR5cGVkLWpzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFnQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sS0FBcUIsTUFBTSxVQUFVLENBQUM7QUFPN0MsSUFBYSxtQkFBbUIsR0FBaEMsTUFBYSxtQkFBbUI7SUFBaEM7UUF1Qm1CLGNBQVMsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN6RCxtQkFBYyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2xFLGdCQUFXLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDL0QseUJBQW9CLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDcEUsaUJBQVksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNoRSxrQkFBYSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2pFLFVBQUssR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNyRCxZQUFPLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDM0QsWUFBTyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzNELGNBQVMsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQTBGNUUsQ0FBQztJQXJGQyxlQUFlO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUNuRCxJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFO1lBQzdCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxD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dUM7QUFDdEM7SUFBUixLQUFLLEVBQUU7O3dEQUE2QjtBQUUzQjtJQUFULE1BQU0sRUFBRTs4QkFBbUIsWUFBWTtzREFBa0M7QUFDaEU7SUFBVCxNQUFNLEVBQUU7OEJBQXdCLFlBQVk7MkRBQXNDO0FBQ3pFO0lBQVQsTUFBTSxFQUFFOzhCQUFxQixZQUFZO3dEQUFzQztBQUN0RTtJQUFULE1BQU0sRUFBRTs4QkFBOEIsWUFBWTtpRUFBa0M7QUFDM0U7SUFBVCxNQUFNLEVBQUU7OEJBQXNCLFlBQVk7eURBQXNDO0FBQ3ZFO0lBQVQsTUFBTSxFQUFFOzhCQUF1QixZQUFZOzBEQUFzQztBQUN4RTtJQUFULE1BQU0sRUFBRTs4QkFBZSxZQUFZO2tEQUFrQztBQUM1RDtJQUFULE1BQU0sRUFBRTs4QkFBaUIsWUFBWTtvREFBc0M7QUFDbEU7SUFBVCxNQUFNLEVBQUU7OEJBQWlCLFlBQVk7b0RBQXNDO0FBQ2xFO0lBQVQsTUFBTSxFQUFFOzhCQUFtQixZQUFZO3NEQUFrQztBQUdsQztJQUF2QyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDOztvREFBaUI7QUFuQzdDLG1CQUFtQjtJQUwvQixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsY0FBYztRQUN4QixpRUFBMEM7O0tBRTNDLENBQUM7R0FDVyxtQkFBbUIsQ0EwSC9CO1NBMUhZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgVHlwZWQsIHtUeXBlZE9wdGlvbnN9IGZyb20gJ3R5cGVkLmpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LXR5cGVkLWpzJyxcbiAgdGVtcGxhdGVVcmw6ICduZ3gtdHlwZWQtanMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnbmd4LXR5cGVkLWpzLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3hUeXBlZEpzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHB1YmxpYyBjdXJzb3JDb2xvcj86IHN0cmluZztcblxuICBASW5wdXQoKSBwdWJsaWMgc3RyaW5ncz86IHN0cmluZ1tdO1xuICBASW5wdXQoKSBwdWJsaWMgc3RyaW5nc0VsZW1lbnQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyB0eXBlU3BlZWQ/OiBudW1iZXI7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGFydERlbGF5PzogbnVtYmVyO1xuICBASW5wdXQoKSBwdWJsaWMgYmFja1NwZWVkPzogbnVtYmVyO1xuICBASW5wdXQoKSBwdWJsaWMgc21hcnRCYWNrc3BhY2U/OiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgc2h1ZmZsZT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHB1YmxpYyBiYWNrRGVsYXk/OiBudW1iZXI7XG4gIEBJbnB1dCgpIHB1YmxpYyBmYWRlT3V0PzogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIGZhZGVPdXRDbGFzcz86IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGZhZGVPdXREZWxheT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHB1YmxpYyBsb29wPzogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIGxvb3BDb3VudD86IG51bWJlcjtcbiAgQElucHV0KCkgcHVibGljIHNob3dDdXJzb3I/OiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgY3Vyc29yQ2hhcj86IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGF1dG9JbnNlcnRDc3M/OiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgYXR0cj86IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGJpbmRJbnB1dEZvY3VzRXZlbnRzPzogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIGNvbnRlbnRUeXBlPzogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgY29tcGxldGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcHJlU3RyaW5nVHlwZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgc3RyaW5nVHlwZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgbGFzdFN0cmluZ0JhY2tzcGFjZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyB0eXBpbmdQYXVzZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgdHlwaW5nUmVzdW1lZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyByZXNldDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcHVibGljIHN0b3BwZWQ6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgc3RhcnRlZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBkZXN0cm95ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwcml2YXRlIHR5cGVkOiBUeXBlZDtcbiAgQFZpZXdDaGlsZCgnd3JhcHBlcicsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgY29udGVudDtcblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy50eXBlZCA9IG5ldyBUeXBlZChcbiAgICAgIHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50eXBpbmcnKSxcbiAgICAgIHRoaXMub3B0aW9ucyxcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuc2hvd0N1cnNvciAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ3Vyc29yU3R5bGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMudHlwZWQudG9nZ2xlKCk7XG4gIH1cblxuICBwdWJsaWMgc3RvcCgpOiB2b2lkIHtcbiAgICB0aGlzLnR5cGVkLnN0b3AoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLnR5cGVkLnN0YXJ0KCk7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnR5cGVkLmRlc3Ryb3koKTtcbiAgfVxuXG4gIHB1YmxpYyBkb1Jlc2V0KHJlc3RhcnQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy50eXBlZC5yZXNldChyZXN0YXJ0KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IG9wdGlvbnMoKTogVHlwZWRPcHRpb25zIHtcbiAgICBjb25zdCBlbWl0OiAoZW1pdHRlcjogRXZlbnRFbWl0dGVyPHZvaWQ+KSA9PiAoc2VsZjogVHlwZWQpID0+IHZvaWRcbiAgICAgID0gKGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjx2b2lkPikgPT4gKCkgPT4gZW1pdHRlci5lbWl0KCk7XG5cbiAgICBjb25zdCBlbWl0SW5kZXg6IChlbWl0dGVyOiBFdmVudEVtaXR0ZXI8bnVtYmVyPikgPT4gKGluZGV4OiBudW1iZXIsIHNlbGY6IFR5cGVkKSA9PiB2b2lkXG4gICAgICA9IChlbWl0dGVyOiBFdmVudEVtaXR0ZXI8bnVtYmVyPikgPT4gKGluZGV4OiBudW1iZXIpID0+IGVtaXR0ZXIuZW1pdChpbmRleCk7XG5cbiAgICBjb25zdCBvcHRzID0ge1xuICAgICAgc3RyaW5nczogdGhpcy5zdHJpbmdzLFxuICAgICAgc3RyaW5nc0VsZW1lbnQ6IHRoaXMuc3RyaW5nc0VsZW1lbnQsXG4gICAgICB0eXBlU3BlZWQ6IHRoaXMudHlwZVNwZWVkLFxuICAgICAgc3RhcnREZWxheTogdGhpcy5zdGFydERlbGF5LFxuICAgICAgYmFja1NwZWVkOiB0aGlzLmJhY2tTcGVlZCxcbiAgICAgIHNtYXJ0QmFja3NwYWNlOiB0aGlzLnNtYXJ0QmFja3NwYWNlLFxuICAgICAgc2h1ZmZsZTogdGhpcy5zaHVmZmxlLFxuICAgICAgYmFja0RlbGF5OiB0aGlzLmJhY2tEZWxheSxcbiAgICAgIGZhZGVPdXQ6IHRoaXMuZmFkZU91dCxcbiAgICAgIGZhZGVPdXRDbGFzczogdGhpcy5mYWRlT3V0Q2xhc3MsXG4gICAgICBmYWRlT3V0RGVsYXk6IHRoaXMuZmFkZU91dERlbGF5LFxuICAgICAgbG9vcDogdGhpcy5sb29wLFxuICAgICAgbG9vcENvdW50OiB0aGlzLmxvb3BDb3VudCxcbiAgICAgIHNob3dDdXJzb3I6IHRoaXMuc2hvd0N1cnNvcixcbiAgICAgIGF1dG9JbnNlcnRDc3M6IHRoaXMuYXV0b0luc2VydENzcyxcbiAgICAgIGF0dHI6IHRoaXMuYXR0cixcbiAgICAgIGJpbmRJbnB1dEZvY3VzRXZlbnRzOiB0aGlzLmJpbmRJbnB1dEZvY3VzRXZlbnRzLFxuICAgICAgY29udGVudFR5cGU6IHRoaXMuY29udGVudFR5cGUsXG4gICAgICBvbkNvbXBsZXRlOiBlbWl0KHRoaXMuY29tcGxldGVkKSxcbiAgICAgIHByZVN0cmluZ1R5cGVkOiBlbWl0SW5kZXgodGhpcy5wcmVTdHJpbmdUeXBlZCksXG4gICAgICBvblN0cmluZ1R5cGVkOiBlbWl0SW5kZXgodGhpcy5zdHJpbmdUeXBlZCksXG4gICAgICBvbkxhc3RTdHJpbmdCYWNrc3BhY2VkOiBlbWl0KHRoaXMubGFzdFN0cmluZ0JhY2tzcGFjZWQpLFxuICAgICAgb25UeXBpbmdQYXVzZWQ6IGVtaXRJbmRleCh0aGlzLnR5cGluZ1BhdXNlZCksXG4gICAgICBvblR5cGluZ1Jlc3VtZWQ6IGVtaXRJbmRleCh0aGlzLnR5cGluZ1Jlc3VtZWQpLFxuICAgICAgb25SZXNldDogZW1pdCh0aGlzLnJlc2V0KSxcbiAgICAgIG9uU3RvcDogZW1pdEluZGV4KHRoaXMuc3RvcHBlZCksXG4gICAgICBvblN0YXJ0OiBlbWl0SW5kZXgodGhpcy5zdGFydGVkKSxcbiAgICAgIG9uRGVzdHJveTogZW1pdCh0aGlzLmRlc3Ryb3llZCksXG4gICAgfSBhcyBUeXBlZE9wdGlvbnM7XG5cbiAgICBPYmplY3Qua2V5cyhvcHRzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAob3B0c1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIG9wdHNba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBvcHRzO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDdXJzb3JTdHlsZSgpOiB2b2lkIHtcbiAgICBjb25zdCB0ZXh0RWxlbWVudFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudHlwaW5nJykpO1xuICAgIGNvbnN0IGN1cnNvckVsZW1lbnRTdHlsZSA9IHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50eXBlZC1jdXJzb3InKS5zdHlsZTtcblxuICAgIGN1cnNvckVsZW1lbnRTdHlsZS5mb250U2l6ZSA9IHRleHRFbGVtZW50U3R5bGUuZm9udFNpemU7XG4gICAgY3Vyc29yRWxlbWVudFN0eWxlLmNvbG9yID0gdGhpcy5jdXJzb3JDb2xvciB8fCB0ZXh0RWxlbWVudFN0eWxlLmNvbG9yO1xuICB9XG59XG4iXX0=