UNPKG

@sam17896/ngx-speech-recognition

Version:

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

281 lines 23.9 kB
/** * @fileoverview added by tsickle * Generated from: lib/service/speech-recognition.common.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var SpeechRecognitionCommon = /** @class */ (function () { function SpeechRecognitionCommon(_grammars, _lang, _continuous, _interimResults, _maxAlternatives, _serviceURI) { this._grammars = _grammars; this._lang = _lang; this._continuous = _continuous; this._interimResults = _interimResults; this._maxAlternatives = _maxAlternatives; this._serviceURI = _serviceURI; this.internal = new SpeechRecognition(); } Object.defineProperty(SpeechRecognitionCommon.prototype, "grammars", { /** * Property */ // The grammars property of the SpeechRecognition interface returns and sets // a collection of SpeechGrammar objects // that represent the grammars that will be understood // by the current SpeechRecognition. // // SpeechRecognitionインターフェイスのgrammarsプロパティは、 // 現在のSpeechRecognitionで認識される文法を表す // SpeechGrammarオブジェクトのコレクションを返して設定します。 get: /** * Property * @return {?} */ // The grammars property of the SpeechRecognition interface returns and sets // a collection of SpeechGrammar objects // that represent the grammars that will be understood // by the current SpeechRecognition. // // SpeechRecognitionインターフェイスのgrammarsプロパティは、 // 現在のSpeechRecognitionで認識される文法を表す // SpeechGrammarオブジェクトのコレクションを返して設定します。 function () { return this._grammars; }, set: /** * @param {?} grammars * @return {?} */ function (grammars) { this._grammars = grammars; if (this._grammars !== undefined && this._grammars != null && this.internal) { this.internal.grammars = this._grammars; } }, enumerable: true, configurable: true }); Object.defineProperty(SpeechRecognitionCommon.prototype, "lang", { // The lang property of the SpeechRecognition interface returns // and sets the language of the current SpeechRecognition. // If not specified, this defaults to the HTML lang attribute value, // or the user agent's language setting if that isn't set either. // // SpeechRecognitionインターフェイスのlangプロパティは、 // 現在のSpeechRecognitionの言語を返して設定します。 // 指定されていない場合、これはデフォルトでHTMLのlang属性の値、 // またはユーザエージェントの言語設定が設定されていない場合は // その値になります。 get: // The lang property of the SpeechRecognition interface returns // and sets the language of the current SpeechRecognition. // If not specified, this defaults to the HTML lang attribute value, // or the user agent's language setting if that isn't set either. // // SpeechRecognitionインターフェイスのlangプロパティは、 // 現在のSpeechRecognitionの言語を返して設定します。 // 指定されていない場合、これはデフォルトでHTMLのlang属性の値、 // またはユーザエージェントの言語設定が設定されていない場合は // その値になります。 /** * @return {?} */ function () { return this._lang; }, set: /** * @param {?} lang * @return {?} */ function (lang) { this._lang = lang; if (this._lang !== undefined && this._lang != null && this.internal) { this.internal.lang = this._lang; } }, enumerable: true, configurable: true }); Object.defineProperty(SpeechRecognitionCommon.prototype, "continuous", { // The continuous property of the SpeechRecognition interface controls // whether continuous results are returned for each recognition, or only a single result. // // SpeechRecognitionインターフェイスの連続プロパティは、 // 認識結果ごとに連続した結果を返すか、単一の結果のみを返すかを制御します。 get: // The continuous property of the SpeechRecognition interface controls // whether continuous results are returned for each recognition, or only a single result. // // SpeechRecognitionインターフェイスの連続プロパティは、 // 認識結果ごとに連続した結果を返すか、単一の結果のみを返すかを制御します。 /** * @return {?} */ function () { return this._continuous; }, set: /** * @param {?} continuous * @return {?} */ function (continuous) { this._continuous = continuous; if (this._continuous !== undefined && this._continuous != null && this.internal) { this.internal.continuous = this._continuous; } }, enumerable: true, configurable: true }); Object.defineProperty(SpeechRecognitionCommon.prototype, "interimResults", { // The interimResults property of the SpeechRecognition interface controls // whether interim results should be returned (true) // or not (false.) Interim results are results that are not yet final // (e.g. the SpeechRecognitionResult.isFinal property is false.) // // SpeechRecognitionインターフェイスのinterimResultsプロパティは、 // 中間結果を返すかどうか(true)、そうでないか(false)を制御します。 // 中間結果は、最終段階ではない結果です(SpeechRecognitionResult.isFinalプロパティはfalseです)。 get: // The interimResults property of the SpeechRecognition interface controls // whether interim results should be returned (true) // or not (false.) Interim results are results that are not yet final // (e.g. the SpeechRecognitionResult.isFinal property is false.) // // SpeechRecognitionインターフェイスのinterimResultsプロパティは、 // 中間結果を返すかどうか(true)、そうでないか(false)を制御します。 // 中間結果は、最終段階ではない結果です(SpeechRecognitionResult.isFinalプロパティはfalseです)。 /** * @return {?} */ function () { return this._interimResults; }, set: /** * @param {?} interimResults * @return {?} */ function (interimResults) { this._interimResults = interimResults; if (this._interimResults !== undefined && this._interimResults != null && this.internal) { this.internal.interimResults = this._interimResults; } }, enumerable: true, configurable: true }); Object.defineProperty(SpeechRecognitionCommon.prototype, "maxAlternatives", { // The maxAlternatives property of the SpeechRecognition interface sets // the maximum number of SpeechRecognitionAlternatives // provided per SpeechRecognitionResult. // // SpeechRecognitionインターフェイスのmaxAlternativesプロパティは、 // SpeechRecognitionResultごとに提供される // SpeechRecognitionAlternativesの最大数を設定します。 get: // The maxAlternatives property of the SpeechRecognition interface sets // the maximum number of SpeechRecognitionAlternatives // provided per SpeechRecognitionResult. // // SpeechRecognitionインターフェイスのmaxAlternativesプロパティは、 // SpeechRecognitionResultごとに提供される // SpeechRecognitionAlternativesの最大数を設定します。 /** * @return {?} */ function () { return this._maxAlternatives; }, set: /** * @param {?} maxAlternatives * @return {?} */ function (maxAlternatives) { this._maxAlternatives = maxAlternatives; if (this._maxAlternatives !== undefined && this._maxAlternatives != null && this.internal) { this.internal.maxAlternatives = this._maxAlternatives; } }, enumerable: true, configurable: true }); Object.defineProperty(SpeechRecognitionCommon.prototype, "serviceURI", { // The serviceURI property of the SpeechRecognition interface specifies // the location of the speech recognition service // used by the current SpeechRecognition to handle // the actual recognition. The default is the user agent's // default speech service. // // SpeechRecognitionインターフェイスのserviceURIプロパティは、 // 現在のSpeechRecognitionが実際の認識を処理するために使用する // 音声認識サービスの場所を指定します。 // デフォルトはユーザエージェントのデフォルト音声サービスです。 get: // The serviceURI property of the SpeechRecognition interface specifies // the location of the speech recognition service // used by the current SpeechRecognition to handle // the actual recognition. The default is the user agent's // default speech service. // // SpeechRecognitionインターフェイスのserviceURIプロパティは、 // 現在のSpeechRecognitionが実際の認識を処理するために使用する // 音声認識サービスの場所を指定します。 // デフォルトはユーザエージェントのデフォルト音声サービスです。 /** * @return {?} */ function () { return this._serviceURI; }, set: /** * @param {?} serviceURI * @return {?} */ function (serviceURI) { this._serviceURI = serviceURI; if (this._serviceURI !== undefined && this._serviceURI != null && this.internal) { this.internal.serviceURI = this._serviceURI; } }, enumerable: true, configurable: true }); return SpeechRecognitionCommon; }()); export { SpeechRecognitionCommon }; if (false) { /** * @type {?} * @protected */ SpeechRecognitionCommon.prototype.internal; /** * @type {?} * @protected */ SpeechRecognitionCommon.prototype._grammars; /** * @type {?} * @protected */ SpeechRecognitionCommon.prototype._lang; /** * @type {?} * @protected */ SpeechRecognitionCommon.prototype._continuous; /** * @type {?} * @protected */ SpeechRecognitionCommon.prototype._interimResults; /** * @type {?} * @protected */ SpeechRecognitionCommon.prototype._maxAlternatives; /** * @type {?} * @protected */ SpeechRecognitionCommon.prototype._serviceURI; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlZWNoLXJlY29nbml0aW9uLmNvbW1vbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzYW0xNzg5Ni9uZ3gtc3BlZWNoLXJlY29nbml0aW9uLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2Uvc3BlZWNoLXJlY29nbml0aW9uLmNvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUlBO0lBSUUsaUNBQ1ksU0FBZ0MsRUFDaEMsS0FBYSxFQUNiLFdBQW9CLEVBQ3BCLGVBQXdCLEVBQ3hCLGdCQUF3QixFQUN4QixXQUFtQjtRQUxuQixjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUNoQyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFDcEIsb0JBQWUsR0FBZixlQUFlLENBQVM7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBUnJCLGFBQVEsR0FBc0IsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0lBUzVELENBQUM7SUFnQkwsc0JBQUksNkNBQVE7UUFiWjs7V0FFRztRQUdILDRFQUE0RTtRQUM1RSx3Q0FBd0M7UUFDeEMsc0RBQXNEO1FBQ3RELG9DQUFvQztRQUNwQyxFQUFFO1FBQ0YsNENBQTRDO1FBQzVDLGtDQUFrQztRQUNsQyx1Q0FBdUM7Ozs7Ozs7Ozs7Ozs7UUFDdkM7WUFDRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEIsQ0FBQzs7Ozs7UUFFRCxVQUFhLFFBQStCO1lBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1lBQzFCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDM0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQzthQUN6QztRQUNILENBQUM7OztPQVBBO0lBbUJELHNCQUFJLHlDQUFJO1FBVlIsK0RBQStEO1FBQy9ELDBEQUEwRDtRQUMxRCxvRUFBb0U7UUFDcEUsaUVBQWlFO1FBQ2pFLEVBQUU7UUFDRix3Q0FBd0M7UUFDeEMsb0NBQW9DO1FBQ3BDLHFDQUFxQztRQUNyQyxnQ0FBZ0M7UUFDaEMsWUFBWTs7Ozs7Ozs7Ozs7Ozs7O1FBQ1o7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQzs7Ozs7UUFFRCxVQUFTLElBQVk7WUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNuRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ2pDO1FBQ0gsQ0FBQzs7O09BUEE7SUFjRCxzQkFBSSwrQ0FBVTtRQUxkLHNFQUFzRTtRQUN0RSx5RkFBeUY7UUFDekYsRUFBRTtRQUNGLHNDQUFzQztRQUN0Qyx1Q0FBdUM7Ozs7Ozs7Ozs7UUFDdkM7WUFDRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUIsQ0FBQzs7Ozs7UUFFRCxVQUFlLFVBQW1CO1lBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDL0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUM3QztRQUNILENBQUM7OztPQVBBO0lBaUJELHNCQUFJLG1EQUFjO1FBUmxCLDBFQUEwRTtRQUMxRSxvREFBb0Q7UUFDcEQscUVBQXFFO1FBQ3JFLGdFQUFnRTtRQUNoRSxFQUFFO1FBQ0Ysa0RBQWtEO1FBQ2xELHlDQUF5QztRQUN6QyxvRUFBb0U7Ozs7Ozs7Ozs7Ozs7UUFDcEU7WUFDRSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDOUIsQ0FBQzs7Ozs7UUFDRCxVQUFtQixjQUF1QjtZQUN4QyxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3ZGLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7YUFDckQ7UUFDSCxDQUFDOzs7T0FOQTtJQWVELHNCQUFJLG9EQUFlO1FBUG5CLHVFQUF1RTtRQUN2RSxzREFBc0Q7UUFDdEQsd0NBQXdDO1FBQ3hDLEVBQUU7UUFDRixtREFBbUQ7UUFDbkQsa0NBQWtDO1FBQ2xDLDJDQUEyQzs7Ozs7Ozs7Ozs7O1FBQzNDO1lBQ0UsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0IsQ0FBQzs7Ozs7UUFDRCxVQUFvQixlQUF1QjtZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO1lBQ3hDLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pGLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzthQUN2RDtRQUNILENBQUM7OztPQU5BO0lBa0JELHNCQUFJLCtDQUFVO1FBVmQsdUVBQXVFO1FBQ3ZFLGlEQUFpRDtRQUNqRCxrREFBa0Q7UUFDbEQsMERBQTBEO1FBQzFELDBCQUEwQjtRQUMxQixFQUFFO1FBQ0YsOENBQThDO1FBQzlDLHlDQUF5QztRQUN6QyxxQkFBcUI7UUFDckIsaUNBQWlDOzs7Ozs7Ozs7Ozs7Ozs7UUFDakM7WUFDRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUIsQ0FBQzs7Ozs7UUFDRCxVQUFlLFVBQWtCO1lBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDL0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUM3QztRQUNILENBQUM7OztPQU5BO0lBUUgsOEJBQUM7QUFBRCxDQUFDLEFBbElELElBa0lDOzs7Ozs7O0lBaElDLDJDQUFnRTs7Ozs7SUFHOUQsNENBQTBDOzs7OztJQUMxQyx3Q0FBdUI7Ozs7O0lBQ3ZCLDhDQUE4Qjs7Ozs7SUFDOUIsa0RBQWtDOzs7OztJQUNsQyxtREFBa0M7Ozs7O0lBQ2xDLDhDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgU3BlZWNoR3JhbW1hckxpc3RUeXBlLFxyXG59IGZyb20gJy4uL2FkYXB0ZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNwZWVjaFJlY29nbml0aW9uQ29tbW9uIHtcclxuXHJcbiAgcHJvdGVjdGVkIGludGVybmFsOiBTcGVlY2hSZWNvZ25pdGlvbiA9IG5ldyBTcGVlY2hSZWNvZ25pdGlvbigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBfZ3JhbW1hcnM6IFNwZWVjaEdyYW1tYXJMaXN0VHlwZSxcclxuICAgIHByb3RlY3RlZCBfbGFuZzogc3RyaW5nLFxyXG4gICAgcHJvdGVjdGVkIF9jb250aW51b3VzOiBib29sZWFuLFxyXG4gICAgcHJvdGVjdGVkIF9pbnRlcmltUmVzdWx0czogYm9vbGVhbixcclxuICAgIHByb3RlY3RlZCBfbWF4QWx0ZXJuYXRpdmVzOiBudW1iZXIsXHJcbiAgICBwcm90ZWN0ZWQgX3NlcnZpY2VVUkk6IHN0cmluZyxcclxuICApIHsgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvcGVydHlcclxuICAgKi9cclxuXHJcblxyXG4gIC8vIFRoZSBncmFtbWFycyBwcm9wZXJ0eSBvZiB0aGUgU3BlZWNoUmVjb2duaXRpb24gaW50ZXJmYWNlIHJldHVybnMgYW5kIHNldHNcclxuICAvLyBhIGNvbGxlY3Rpb24gb2YgU3BlZWNoR3JhbW1hciBvYmplY3RzXHJcbiAgLy8gdGhhdCByZXByZXNlbnQgdGhlIGdyYW1tYXJzIHRoYXQgd2lsbCBiZSB1bmRlcnN0b29kXHJcbiAgLy8gYnkgdGhlIGN1cnJlbnQgU3BlZWNoUmVjb2duaXRpb24uXHJcbiAgLy9cclxuICAvLyBTcGVlY2hSZWNvZ25pdGlvbuOCpOODs+OCv+ODvOODleOCp+OCpOOCueOBrmdyYW1tYXJz44OX44Ot44OR44OG44Kj44Gv44CBXHJcbiAgLy8g54++5Zyo44GuU3BlZWNoUmVjb2duaXRpb27jgafoqo3orZjjgZXjgozjgovmlofms5XjgpLooajjgZlcclxuICAvLyBTcGVlY2hHcmFtbWFy44Kq44OW44K444Kn44Kv44OI44Gu44Kz44Os44Kv44K344On44Oz44KS6L+U44GX44Gm6Kit5a6a44GX44G+44GZ44CCXHJcbiAgZ2V0IGdyYW1tYXJzKCk6IFNwZWVjaEdyYW1tYXJMaXN0VHlwZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ3JhbW1hcnM7XHJcbiAgfVxyXG5cclxuICBzZXQgZ3JhbW1hcnMoZ3JhbW1hcnM6IFNwZWVjaEdyYW1tYXJMaXN0VHlwZSkge1xyXG4gICAgdGhpcy5fZ3JhbW1hcnMgPSBncmFtbWFycztcclxuICAgIGlmICh0aGlzLl9ncmFtbWFycyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2dyYW1tYXJzICE9IG51bGwgJiYgdGhpcy5pbnRlcm5hbCkge1xyXG4gICAgICB0aGlzLmludGVybmFsLmdyYW1tYXJzID0gdGhpcy5fZ3JhbW1hcnM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgbGFuZyBwcm9wZXJ0eSBvZiB0aGUgU3BlZWNoUmVjb2duaXRpb24gaW50ZXJmYWNlIHJldHVybnNcclxuICAvLyBhbmQgc2V0cyB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGN1cnJlbnQgU3BlZWNoUmVjb2duaXRpb24uXHJcbiAgLy8gSWYgbm90IHNwZWNpZmllZCwgdGhpcyBkZWZhdWx0cyB0byB0aGUgSFRNTCBsYW5nIGF0dHJpYnV0ZSB2YWx1ZSxcclxuICAvLyBvciB0aGUgdXNlciBhZ2VudCdzIGxhbmd1YWdlIHNldHRpbmcgaWYgdGhhdCBpc24ndCBzZXQgZWl0aGVyLlxyXG4gIC8vXHJcbiAgLy8gU3BlZWNoUmVjb2duaXRpb27jgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5sYW5n44OX44Ot44OR44OG44Kj44Gv44CBXHJcbiAgLy8g54++5Zyo44GuU3BlZWNoUmVjb2duaXRpb27jga7oqIDoqp7jgpLov5TjgZfjgaboqK3lrprjgZfjgb7jgZnjgIJcclxuICAvLyDmjIflrprjgZXjgozjgabjgYTjgarjgYTloLTlkIjjgIHjgZPjgozjga/jg4fjg5Xjgqnjg6vjg4jjgadIVE1M44GubGFuZ+WxnuaAp+OBruWApOOAgVxyXG4gIC8vIOOBvuOBn+OBr+ODpuODvOOCtuOCqOODvOOCuOOCp+ODs+ODiOOBruiogOiqnuioreWumuOBjOioreWumuOBleOCjOOBpuOBhOOBquOBhOWgtOWQiOOBr1xyXG4gIC8vIOOBneOBruWApOOBq+OBquOCiuOBvuOBmeOAglxyXG4gIGdldCBsYW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGFuZztcclxuICB9XHJcblxyXG4gIHNldCBsYW5nKGxhbmc6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbGFuZyA9IGxhbmc7XHJcbiAgICBpZiAodGhpcy5fbGFuZyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2xhbmcgIT0gbnVsbCAmJiB0aGlzLmludGVybmFsKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWwubGFuZyA9IHRoaXMuX2xhbmc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgY29udGludW91cyBwcm9wZXJ0eSBvZiB0aGUgU3BlZWNoUmVjb2duaXRpb24gaW50ZXJmYWNlIGNvbnRyb2xzXHJcbiAgLy8gd2hldGhlciBjb250aW51b3VzIHJlc3VsdHMgYXJlIHJldHVybmVkIGZvciBlYWNoIHJlY29nbml0aW9uLCBvciBvbmx5IGEgc2luZ2xlIHJlc3VsdC5cclxuICAvL1xyXG4gIC8vIFNwZWVjaFJlY29nbml0aW9u44Kk44Oz44K/44O844OV44Kn44Kk44K544Gu6YCj57aa44OX44Ot44OR44OG44Kj44Gv44CBXHJcbiAgLy8g6KqN6K2Y57WQ5p6c44GU44Go44Gr6YCj57aa44GX44Gf57WQ5p6c44KS6L+U44GZ44GL44CB5Y2Y5LiA44Gu57WQ5p6c44Gu44G/44KS6L+U44GZ44GL44KS5Yi25b6h44GX44G+44GZ44CCXHJcbiAgZ2V0IGNvbnRpbnVvdXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGludW91cztcclxuICB9XHJcblxyXG4gIHNldCBjb250aW51b3VzKGNvbnRpbnVvdXM6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2NvbnRpbnVvdXMgPSBjb250aW51b3VzO1xyXG4gICAgaWYgKHRoaXMuX2NvbnRpbnVvdXMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9jb250aW51b3VzICE9IG51bGwgJiYgdGhpcy5pbnRlcm5hbCkge1xyXG4gICAgICB0aGlzLmludGVybmFsLmNvbnRpbnVvdXMgPSB0aGlzLl9jb250aW51b3VzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gVGhlIGludGVyaW1SZXN1bHRzIHByb3BlcnR5IG9mIHRoZSBTcGVlY2hSZWNvZ25pdGlvbiBpbnRlcmZhY2UgY29udHJvbHNcclxuICAvLyB3aGV0aGVyIGludGVyaW0gcmVzdWx0cyBzaG91bGQgYmUgcmV0dXJuZWQgKHRydWUpXHJcbiAgLy8gb3Igbm90IChmYWxzZS4pIEludGVyaW0gcmVzdWx0cyBhcmUgcmVzdWx0cyB0aGF0IGFyZSBub3QgeWV0IGZpbmFsXHJcbiAgLy8gKGUuZy4gdGhlIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmlzRmluYWwgcHJvcGVydHkgaXMgZmFsc2UuKVxyXG4gIC8vXHJcbiAgLy8gU3BlZWNoUmVjb2duaXRpb27jgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5pbnRlcmltUmVzdWx0c+ODl+ODreODkeODhuOCo+OBr+OAgVxyXG4gIC8vIOS4remWk+e1kOaenOOCkui/lOOBmeOBi+OBqeOBhuOBi++8iHRydWXvvInjgIHjgZ3jgYbjgafjgarjgYTjgYvvvIhmYWxzZe+8ieOCkuWItuW+oeOBl+OBvuOBmeOAglxyXG4gIC8vIOS4remWk+e1kOaenOOBr+OAgeacgOe1guautemajuOBp+OBr+OBquOBhOe1kOaenOOBp+OBme+8iFNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmlzRmluYWzjg5fjg63jg5Hjg4bjgqPjga9mYWxzZeOBp+OBme+8ieOAglxyXG4gIGdldCBpbnRlcmltUmVzdWx0cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnRlcmltUmVzdWx0cztcclxuICB9XHJcbiAgc2V0IGludGVyaW1SZXN1bHRzKGludGVyaW1SZXN1bHRzOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pbnRlcmltUmVzdWx0cyA9IGludGVyaW1SZXN1bHRzO1xyXG4gICAgaWYgKHRoaXMuX2ludGVyaW1SZXN1bHRzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5faW50ZXJpbVJlc3VsdHMgIT0gbnVsbCAmJiB0aGlzLmludGVybmFsKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWwuaW50ZXJpbVJlc3VsdHMgPSB0aGlzLl9pbnRlcmltUmVzdWx0cztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFRoZSBtYXhBbHRlcm5hdGl2ZXMgcHJvcGVydHkgb2YgdGhlIFNwZWVjaFJlY29nbml0aW9uIGludGVyZmFjZSBzZXRzXHJcbiAgLy8gdGhlIG1heGltdW0gbnVtYmVyIG9mIFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmVzXHJcbiAgLy8gcHJvdmlkZWQgcGVyIFNwZWVjaFJlY29nbml0aW9uUmVzdWx0LlxyXG4gIC8vXHJcbiAgLy8gU3BlZWNoUmVjb2duaXRpb27jgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5tYXhBbHRlcm5hdGl2ZXPjg5fjg63jg5Hjg4bjgqPjga/jgIFcclxuICAvLyBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdOOBlOOBqOOBq+aPkOS+m+OBleOCjOOCi1xyXG4gIC8vIFNwZWVjaFJlY29nbml0aW9uQWx0ZXJuYXRpdmVz44Gu5pyA5aSn5pWw44KS6Kit5a6a44GX44G+44GZ44CCXHJcbiAgZ2V0IG1heEFsdGVybmF0aXZlcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX21heEFsdGVybmF0aXZlcztcclxuICB9XHJcbiAgc2V0IG1heEFsdGVybmF0aXZlcyhtYXhBbHRlcm5hdGl2ZXM6IG51bWJlcikge1xyXG4gICAgdGhpcy5fbWF4QWx0ZXJuYXRpdmVzID0gbWF4QWx0ZXJuYXRpdmVzO1xyXG4gICAgaWYgKHRoaXMuX21heEFsdGVybmF0aXZlcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX21heEFsdGVybmF0aXZlcyAhPSBudWxsICYmIHRoaXMuaW50ZXJuYWwpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbC5tYXhBbHRlcm5hdGl2ZXMgPSB0aGlzLl9tYXhBbHRlcm5hdGl2ZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgc2VydmljZVVSSSBwcm9wZXJ0eSBvZiB0aGUgU3BlZWNoUmVjb2duaXRpb24gaW50ZXJmYWNlIHNwZWNpZmllc1xyXG4gIC8vIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3BlZWNoIHJlY29nbml0aW9uIHNlcnZpY2VcclxuICAvLyB1c2VkIGJ5IHRoZSBjdXJyZW50IFNwZWVjaFJlY29nbml0aW9uIHRvIGhhbmRsZVxyXG4gIC8vIHRoZSBhY3R1YWwgcmVjb2duaXRpb24uIFRoZSBkZWZhdWx0IGlzIHRoZSB1c2VyIGFnZW50J3NcclxuICAvLyBkZWZhdWx0IHNwZWVjaCBzZXJ2aWNlLlxyXG4gIC8vXHJcbiAgLy8gU3BlZWNoUmVjb2duaXRpb27jgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjga5zZXJ2aWNlVVJJ44OX44Ot44OR44OG44Kj44Gv44CBXHJcbiAgLy8g54++5Zyo44GuU3BlZWNoUmVjb2duaXRpb27jgYzlrp/pmpvjga7oqo3orZjjgpLlh6bnkIbjgZnjgovjgZ/jgoHjgavkvb/nlKjjgZnjgotcclxuICAvLyDpn7Plo7Doqo3orZjjgrXjg7zjg5Pjgrnjga7loLTmiYDjgpLmjIflrprjgZfjgb7jgZnjgIJcclxuICAvLyDjg4fjg5Xjgqnjg6vjg4jjga/jg6bjg7zjgrbjgqjjg7zjgrjjgqfjg7Pjg4jjga7jg4fjg5Xjgqnjg6vjg4jpn7Plo7DjgrXjg7zjg5PjgrnjgafjgZnjgIJcclxuICBnZXQgc2VydmljZVVSSSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VVUkk7XHJcbiAgfVxyXG4gIHNldCBzZXJ2aWNlVVJJKHNlcnZpY2VVUkk6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc2VydmljZVVSSSA9IHNlcnZpY2VVUkk7XHJcbiAgICBpZiAodGhpcy5fc2VydmljZVVSSSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3NlcnZpY2VVUkkgIT0gbnVsbCAmJiB0aGlzLmludGVybmFsKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWwuc2VydmljZVVSSSA9IHRoaXMuX3NlcnZpY2VVUkk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=