UNPKG

@sam17896/ngx-speech-recognition

Version:

Angular 5+ speech recognition service (based on browser implementation such as Chrome).

235 lines 21.7 kB
/** * @fileoverview added by tsickle * Generated from: lib/service/rx-speech-recognition.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Observable, pipe, Subject, BehaviorSubject, } from 'rxjs'; import { filter, map } from 'rxjs/operators'; import { Injectable, ApplicationRef, Inject, Optional } from '@angular/core'; import { SpeechRecognitionGrammars, SpeechRecognitionLang, SpeechRecognitionContinuous, SpeechRecognitionInterimResults, SpeechRecognitionMaxAlternatives, SpeechRecognitionServiceUri, } from './speech-recognition.token'; import { SpeechRecognitionCommon, } from './speech-recognition.common'; /** @type {?} */ var onType = (/** * @param {?} type * @return {?} */ function (type) { return filter((/** * @param {?} e * @return {?} */ function (e) { return (e.type === type); })); }); var ɵ0 = onType; /** @type {?} */ export var resultList = pipe(onType('result'), map((/** * @param {?} e * @return {?} */ function (e) { return e.results; }))); var RxSpeechRecognitionService = /** @class */ (function (_super) { tslib_1.__extends(RxSpeechRecognitionService, _super); function RxSpeechRecognitionService(ref, grammars, lang, continuous, interimResults, maxAlternatives, serviceURI) { var _this = _super.call(this, grammars, lang, continuous, interimResults, maxAlternatives, serviceURI) || this; _this.ref = ref; _this.proxy$ = new Subject(); _this._started$ = new BehaviorSubject(false); _this.initInternal(); return _this; } Object.defineProperty(RxSpeechRecognitionService.prototype, "$", { get: /** * @return {?} */ function () { return (/** @type {?} */ (this.proxy$)); }, enumerable: true, configurable: true }); Object.defineProperty(RxSpeechRecognitionService.prototype, "started$", { get: /** * @return {?} */ function () { return (/** @type {?} */ (this._started$)); }, enumerable: true, configurable: true }); /** * @private * @return {?} */ RxSpeechRecognitionService.prototype.initInternal = /** * @private * @return {?} */ function () { var _this = this; // set handlers /** @type {?} */ var handler = (/** * @param {?} e * @return {?} */ function (e) { _this.proxy$.next(e); _this.ref.tick(); }); /** @type {?} */ var errHandler = (/** * @param {?} e * @return {?} */ function (e) { _this.proxy$.error(e); _this.ref.tick(); }); this.internal.onaudiostart = handler; this.internal.onsoundstart = handler; this.internal.onspeechstart = handler; this.internal.onspeechend = handler; this.internal.onsoundend = handler; this.internal.onaudioend = handler; this.internal.onresult = handler; this.internal.onnomatch = handler; this.internal.onerror = errHandler; this.internal.onstart = handler; this.internal.onend = handler; // see setter methods this.grammars = this._grammars; this.lang = this._lang; this.continuous = this._continuous; this.interimResults = this._interimResults; this.maxAlternatives = this._maxAlternatives; this.serviceURI = this._serviceURI; this.proxy$.subscribe((/** * @param {?} e * @return {?} */ function (e) { switch (e.type) { case 'start': _this._started$.next(true); break; case 'end': _this._started$.next(false); break; } })); }; // The listen() method aims to recognize the grammar associated with the current SpeechRecognition, // Observable is returned for handling voice recognition service listening to incoming voice. // When you subscrive the return value, listening begins and listening ends when an end event occurs. // Interrupt listening by unsubscribing in the middle. // // listen() メソッドは、現在のSpeechRecognitionに // 関連付けられた文法を認識することを目的として、 // 着信音声を聴取する音声認識サービスを扱うためのObservableが返されます。 // 返り値をsubscriveすると聴取が開始され、endのイベントが発生すると聴取を終了します。 // 途中でunsbscriveすることで聴取を中断します。 // The listen() method aims to recognize the grammar associated with the current SpeechRecognition, // Observable is returned for handling voice recognition service listening to incoming voice. // When you subscrive the return value, listening begins and listening ends when an end event occurs. // Interrupt listening by unsubscribing in the middle. // // listen() メソッドは、現在のSpeechRecognitionに // 関連付けられた文法を認識することを目的として、 // 着信音声を聴取する音声認識サービスを扱うためのObservableが返されます。 // 返り値をsubscriveすると聴取が開始され、endのイベントが発生すると聴取を終了します。 // 途中でunsbscriveすることで聴取を中断します。 /** * @return {?} */ RxSpeechRecognitionService.prototype.listen = // The listen() method aims to recognize the grammar associated with the current SpeechRecognition, // Observable is returned for handling voice recognition service listening to incoming voice. // When you subscrive the return value, listening begins and listening ends when an end event occurs. // Interrupt listening by unsubscribing in the middle. // // listen() メソッドは、現在のSpeechRecognitionに // 関連付けられた文法を認識することを目的として、 // 着信音声を聴取する音声認識サービスを扱うためのObservableが返されます。 // 返り値をsubscriveすると聴取が開始され、endのイベントが発生すると聴取を終了します。 // 途中でunsbscriveすることで聴取を中断します。 /** * @return {?} */ function () { var _this = this; /** @type {?} */ var listener = new Observable((/** * @param {?} ovserver * @return {?} */ function (ovserver) { // create subscriotion /** @type {?} */ var subscriotion = _this.proxy$.subscribe({ next: (/** * @param {?} e * @return {?} */ function (e) { ovserver.next(e); if (e.type && e.type === 'end') { _this.internal.stop(); ovserver.complete(); subscriotion.unsubscribe(); } }), error: (/** * @param {?} e * @return {?} */ function (e) { return ovserver.error(e); }), }); // Speech Recognition start _this.internal.start(); return (/** * @return {?} */ function () { _this.internal.abort(); subscriotion.unsubscribe(); }); })); return listener; }; RxSpeechRecognitionService.decorators = [ { type: Injectable } ]; /** @nocollapse */ RxSpeechRecognitionService.ctorParameters = function () { return [ { type: ApplicationRef }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [SpeechRecognitionGrammars,] }] }, { type: String, decorators: [{ type: Optional }, { type: Inject, args: [SpeechRecognitionLang,] }] }, { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [SpeechRecognitionContinuous,] }] }, { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [SpeechRecognitionInterimResults,] }] }, { type: Number, decorators: [{ type: Optional }, { type: Inject, args: [SpeechRecognitionMaxAlternatives,] }] }, { type: String, decorators: [{ type: Optional }, { type: Inject, args: [SpeechRecognitionServiceUri,] }] } ]; }; return RxSpeechRecognitionService; }(SpeechRecognitionCommon)); export { RxSpeechRecognitionService }; if (false) { /** * @type {?} * @private */ RxSpeechRecognitionService.prototype.proxy$; /** * @type {?} * @private */ RxSpeechRecognitionService.prototype._started$; /** * @type {?} * @private */ RxSpeechRecognitionService.prototype.ref; } export { ɵ0 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtc3BlZWNoLXJlY29nbml0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2FtMTc4OTYvbmd4LXNwZWVjaC1yZWNvZ25pdGlvbi8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlL3J4LXNwZWVjaC1yZWNvZ25pdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsSUFBSSxFQUVKLE9BQU8sRUFDUCxlQUFlLEdBQ2hCLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLDJCQUEyQixFQUMzQiwrQkFBK0IsRUFDL0IsZ0NBQWdDLEVBQ2hDLDJCQUEyQixHQUM1QixNQUFNLDRCQUE0QixDQUFDO0FBT3BDLE9BQU8sRUFDTCx1QkFBdUIsR0FDeEIsTUFBTSw2QkFBNkIsQ0FBQzs7SUFFL0IsTUFBTTs7OztBQUFHLFVBQUMsSUFBWTtJQUMxQixPQUFPLE1BQU07Ozs7SUFBQyxVQUFDLENBQWdDLElBQUssT0FBQSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQWpCLENBQWlCLEVBQUMsQ0FBQztBQUN6RSxDQUFDLENBQUE7OztBQUVELE1BQU0sS0FBTyxVQUFVLEdBQStGLElBQUksQ0FDeEgsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUNoQixHQUFHOzs7O0FBQUMsVUFBQyxDQUF5QixJQUFrQyxPQUFBLENBQUMsQ0FBQyxPQUFPLEVBQVQsQ0FBUyxFQUFDLENBQzNFO0FBRUQ7SUFDZ0Qsc0RBQXVCO0lBY3JFLG9DQUNVLEdBQW1CLEVBRzNCLFFBQStCLEVBRy9CLElBQVksRUFHWixVQUFt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QzlCLFFBQVEsWUFBSSxNQUFNLFNBQUMseUJBQXlCOzZDQUc1QyxRQUFRLFlBQUksTUFBTSxTQUFDLHFCQUFxQjs4Q0FHeEMsUUFBUSxZQUFJLE1BQU0sU0FBQywyQkFBMkI7OENBRzlDLFFBQVEsWUFBSSxNQUFNLFNBQUMsK0JBQStCOzZDQUdsRCxRQUFRLFlBQUksTUFBTSxTQUFDLGdDQUFnQzs2Q0FHbkQsUUFBUSxZQUFJLE1BQU0sU0FBQywyQkFBMkI7O0lBMkZuRCxpQ0FBQztDQUFBLEFBNUhELENBQ2dELHVCQUF1QixHQTJIdEU7U0EzSFksMEJBQTBCOzs7Ozs7SUFFckMsNENBQXVFOzs7OztJQUV2RSwrQ0FBd0Q7Ozs7O0lBV3RELHlDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgT2JzZXJ2YWJsZSxcclxuICBwaXBlLFxyXG4gIFVuYXJ5RnVuY3Rpb24sXHJcbiAgU3ViamVjdCxcclxuICBCZWhhdmlvclN1YmplY3QsXHJcbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgQXBwbGljYXRpb25SZWYsIEluamVjdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU3BlZWNoUmVjb2duaXRpb25HcmFtbWFycyxcclxuICBTcGVlY2hSZWNvZ25pdGlvbkxhbmcsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25Db250aW51b3VzLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uSW50ZXJpbVJlc3VsdHMsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25NYXhBbHRlcm5hdGl2ZXMsXHJcbiAgU3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlVXJpLFxyXG59IGZyb20gJy4vc3BlZWNoLXJlY29nbml0aW9uLnRva2VuJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU3BlZWNoR3JhbW1hckxpc3RUeXBlLFxyXG4gIFNwZWVjaFJlY29nbml0aW9uU2VydmljZUV2ZW50LFxyXG59IGZyb20gJy4uL2FkYXB0ZXInO1xyXG5cclxuaW1wb3J0IHtcclxuICBTcGVlY2hSZWNvZ25pdGlvbkNvbW1vbixcclxufSBmcm9tICcuL3NwZWVjaC1yZWNvZ25pdGlvbi5jb21tb24nO1xyXG5cclxuY29uc3Qgb25UeXBlID0gKHR5cGU6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBmaWx0ZXIoKGU6IFNwZWVjaFJlY29nbml0aW9uU2VydmljZUV2ZW50KSA9PiAoZS50eXBlID09PSB0eXBlKSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgcmVzdWx0TGlzdDogVW5hcnlGdW5jdGlvbjxPYnNlcnZhYmxlPFNwZWVjaFJlY29nbml0aW9uRXZlbnQ+LCBPYnNlcnZhYmxlPFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdD4+ID0gcGlwZShcclxuICBvblR5cGUoJ3Jlc3VsdCcpLFxyXG4gIG1hcCgoZTogU3BlZWNoUmVjb2duaXRpb25FdmVudCk6IFNwZWVjaFJlY29nbml0aW9uUmVzdWx0TGlzdCA9PiBlLnJlc3VsdHMpLFxyXG4pO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUnhTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2UgZXh0ZW5kcyBTcGVlY2hSZWNvZ25pdGlvbkNvbW1vbiB7XHJcblxyXG4gIHByaXZhdGUgcHJveHkkOiBTdWJqZWN0PFNwZWVjaFJlY29nbml0aW9uU2VydmljZUV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGdldCAkKCk6IE9ic2VydmFibGU8U3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlRXZlbnQ+IHtcclxuICAgIHJldHVybiB0aGlzLnByb3h5JCBhcyBPYnNlcnZhYmxlPFNwZWVjaFJlY29nbml0aW9uU2VydmljZUV2ZW50PjtcclxuICB9XHJcblxyXG4gIGdldCBzdGFydGVkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLl9zdGFydGVkJCBhcyBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlZjogQXBwbGljYXRpb25SZWYsXHJcblxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChTcGVlY2hSZWNvZ25pdGlvbkdyYW1tYXJzKVxyXG4gICAgZ3JhbW1hcnM6IFNwZWVjaEdyYW1tYXJMaXN0VHlwZSxcclxuXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNwZWVjaFJlY29nbml0aW9uTGFuZylcclxuICAgIGxhbmc6IHN0cmluZyxcclxuXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNwZWVjaFJlY29nbml0aW9uQ29udGludW91cylcclxuICAgIGNvbnRpbnVvdXM6IGJvb2xlYW4sXHJcblxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChTcGVlY2hSZWNvZ25pdGlvbkludGVyaW1SZXN1bHRzKVxyXG4gICAgaW50ZXJpbVJlc3VsdHM6IGJvb2xlYW4sXHJcblxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChTcGVlY2hSZWNvZ25pdGlvbk1heEFsdGVybmF0aXZlcylcclxuICAgIG1heEFsdGVybmF0aXZlczogbnVtYmVyLFxyXG5cclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoU3BlZWNoUmVjb2duaXRpb25TZXJ2aWNlVXJpKVxyXG4gICAgc2VydmljZVVSSTogc3RyaW5nLFxyXG4gICkge1xyXG4gICAgc3VwZXIoZ3JhbW1hcnMsIGxhbmcsIGNvbnRpbnVvdXMsIGludGVyaW1SZXN1bHRzLCBtYXhBbHRlcm5hdGl2ZXMsIHNlcnZpY2VVUkkpO1xyXG4gICAgdGhpcy5pbml0SW50ZXJuYWwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEludGVybmFsKCkge1xyXG4gICAgLy8gc2V0IGhhbmRsZXJzXHJcbiAgICBjb25zdCBoYW5kbGVyID0gKGUpID0+IHtcclxuICAgICAgdGhpcy5wcm94eSQubmV4dChlKTtcclxuICAgICAgdGhpcy5yZWYudGljaygpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGVyckhhbmRsZXIgPSAoZSkgPT4ge1xyXG4gICAgICB0aGlzLnByb3h5JC5lcnJvcihlKTtcclxuICAgICAgdGhpcy5yZWYudGljaygpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuaW50ZXJuYWwub25hdWRpb3N0YXJ0ID0gaGFuZGxlcjtcclxuICAgIHRoaXMuaW50ZXJuYWwub25zb3VuZHN0YXJ0ID0gaGFuZGxlcjtcclxuICAgIHRoaXMuaW50ZXJuYWwub25zcGVlY2hzdGFydCA9IGhhbmRsZXI7XHJcblxyXG4gICAgdGhpcy5pbnRlcm5hbC5vbnNwZWVjaGVuZCA9IGhhbmRsZXI7XHJcbiAgICB0aGlzLmludGVybmFsLm9uc291bmRlbmQgPSBoYW5kbGVyO1xyXG4gICAgdGhpcy5pbnRlcm5hbC5vbmF1ZGlvZW5kID0gaGFuZGxlcjtcclxuXHJcbiAgICB0aGlzLmludGVybmFsLm9ucmVzdWx0ID0gaGFuZGxlcjtcclxuICAgIHRoaXMuaW50ZXJuYWwub25ub21hdGNoID0gaGFuZGxlcjtcclxuICAgIHRoaXMuaW50ZXJuYWwub25lcnJvciA9IGVyckhhbmRsZXI7XHJcblxyXG4gICAgdGhpcy5pbnRlcm5hbC5vbnN0YXJ0ID0gaGFuZGxlcjtcclxuICAgIHRoaXMuaW50ZXJuYWwub25lbmQgPSBoYW5kbGVyO1xyXG5cclxuICAgIC8vIHNlZSBzZXR0ZXIgbWV0aG9kc1xyXG4gICAgdGhpcy5ncmFtbWFycyA9IHRoaXMuX2dyYW1tYXJzO1xyXG4gICAgdGhpcy5sYW5nID0gdGhpcy5fbGFuZztcclxuICAgIHRoaXMuY29udGludW91cyA9IHRoaXMuX2NvbnRpbnVvdXM7XHJcbiAgICB0aGlzLmludGVyaW1SZXN1bHRzID0gdGhpcy5faW50ZXJpbVJlc3VsdHM7XHJcbiAgICB0aGlzLm1heEFsdGVybmF0aXZlcyA9IHRoaXMuX21heEFsdGVybmF0aXZlcztcclxuICAgIHRoaXMuc2VydmljZVVSSSA9IHRoaXMuX3NlcnZpY2VVUkk7XHJcblxyXG4gICAgdGhpcy5wcm94eSQuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoZS50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnc3RhcnQnOlxyXG4gICAgICAgICAgdGhpcy5fc3RhcnRlZCQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2VuZCc6XHJcbiAgICAgICAgICB0aGlzLl9zdGFydGVkJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIFRoZSBsaXN0ZW4oKSBtZXRob2QgYWltcyB0byByZWNvZ25pemUgdGhlIGdyYW1tYXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IFNwZWVjaFJlY29nbml0aW9uLFxyXG4gIC8vIE9ic2VydmFibGUgaXMgcmV0dXJuZWQgZm9yIGhhbmRsaW5nIHZvaWNlIHJlY29nbml0aW9uIHNlcnZpY2UgbGlzdGVuaW5nIHRvIGluY29taW5nIHZvaWNlLlxyXG4gIC8vIFdoZW4geW91IHN1YnNjcml2ZSB0aGUgcmV0dXJuIHZhbHVlLCBsaXN0ZW5pbmcgYmVnaW5zIGFuZCBsaXN0ZW5pbmcgZW5kcyB3aGVuIGFuIGVuZCBldmVudCBvY2N1cnMuXHJcbiAgLy8gSW50ZXJydXB0IGxpc3RlbmluZyBieSB1bnN1YnNjcmliaW5nIGluIHRoZSBtaWRkbGUuXHJcbiAgLy9cclxuICAvLyBsaXN0ZW4oKSDjg6Hjgr3jg4Pjg4njga/jgIHnj77lnKjjga5TcGVlY2hSZWNvZ25pdGlvbuOBq1xyXG4gIC8vIOmWoumAo+S7mOOBkeOCieOCjOOBn+aWh+azleOCkuiqjeitmOOBmeOCi+OBk+OBqOOCkuebrueahOOBqOOBl+OBpuOAgVxyXG4gIC8vIOedgOS/oemfs+WjsOOCkuiBtOWPluOBmeOCi+mfs+WjsOiqjeitmOOCteODvOODk+OCueOCkuaJseOBhuOBn+OCgeOBrk9ic2VydmFibGXjgYzov5TjgZXjgozjgb7jgZnjgIJcclxuICAvLyDov5TjgorlgKTjgpJzdWJzY3JpdmXjgZnjgovjgajogbTlj5bjgYzplovlp4vjgZXjgozjgIFlbmTjga7jgqTjg5njg7Pjg4jjgYznmbrnlJ/jgZnjgovjgajogbTlj5bjgpLntYLkuobjgZfjgb7jgZnjgIJcclxuICAvLyDpgJTkuK3jgad1bnNic2NyaXZl44GZ44KL44GT44Go44Gn6IG05Y+W44KS5Lit5pat44GX44G+44GZ44CCXHJcbiAgcHVibGljIGxpc3RlbigpOiBPYnNlcnZhYmxlPFNwZWVjaFJlY29nbml0aW9uU2VydmljZUV2ZW50PiB7XHJcblxyXG4gICAgY29uc3QgbGlzdGVuZXIgPSBuZXcgT2JzZXJ2YWJsZTxTcGVlY2hSZWNvZ25pdGlvblNlcnZpY2VFdmVudD4oKG92c2VydmVyKSA9PiB7XHJcbiAgICAgIC8vIGNyZWF0ZSBzdWJzY3Jpb3Rpb25cclxuICAgICAgY29uc3Qgc3Vic2NyaW90aW9uID0gdGhpcy5wcm94eSQuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZSkgPT4ge1xyXG4gICAgICAgICAgb3ZzZXJ2ZXIubmV4dChlKTtcclxuXHJcbiAgICAgICAgICBpZiAoZS50eXBlICYmIGUudHlwZSA9PT0gJ2VuZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbC5zdG9wKCk7XHJcbiAgICAgICAgICAgIG92c2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIHN1YnNjcmlvdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlKSA9PiBvdnNlcnZlci5lcnJvcihlKSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyBTcGVlY2ggUmVjb2duaXRpb24gc3RhcnRcclxuICAgICAgdGhpcy5pbnRlcm5hbC5zdGFydCgpO1xyXG5cclxuICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICB0aGlzLmludGVybmFsLmFib3J0KCk7XHJcbiAgICAgICAgc3Vic2NyaW90aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbGlzdGVuZXI7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=