UNPKG

ngx-audio-player

Version:

[![npm version](https://img.shields.io/npm/v/ngx-audio-player.svg?colorB=red)](https://www.npmjs.com/package/ngx-audio-player) [![Downloads](https://img.shields.io/npm/dm/ngx-audio-player.svg)](https://www.npmjs.com/package/ngx-audio-player) [![licence](h

211 lines 20.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, ViewChild } from '@angular/core'; import { AudioPlayerService } from '../../service/audio-player-service/audio-player.service'; import { MatPaginator, MatTableDataSource } from '@angular/material'; import { BaseAudioPlayerFunctions } from '../base/base-audio-player-components'; var MatAdvancedAudioPlayerComponent = /** @class */ (function (_super) { tslib_1.__extends(MatAdvancedAudioPlayerComponent, _super); function MatAdvancedAudioPlayerComponent(playlistService) { var _this = _super.call(this) || this; _this.playlistService = playlistService; _this.displayedColumns = ['title', 'status']; _this.dataSource = new MatTableDataSource(); return _this; } /** * @return {?} */ MatAdvancedAudioPlayerComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; this.setDataSourceAttributes(); this.bindPlayerEvent(); this.playlistService.setPlaylist(this.playlistData); this.playlistService.getSubjectCurrentTrack().subscribe(function (playlistTrack) { _this.playlistTrack = playlistTrack; }); this.player.nativeElement.currentTime = 0; this.playlistService.init(); }; Object.defineProperty(MatAdvancedAudioPlayerComponent.prototype, "matPaginator", { set: /** * @param {?} mp * @return {?} */ function (mp) { this.paginator = mp; this.setDataSourceAttributes(); }, enumerable: true, configurable: true }); /** * @return {?} */ MatAdvancedAudioPlayerComponent.prototype.setDataSourceAttributes = /** * @return {?} */ function () { /** @type {?} */ var index = 1; if (this.playlistData) { this.playlistData.forEach(function (data) { data.index = index++; }); this.dataSource = new MatTableDataSource(this.playlistData); this.dataSource.paginator = this.paginator; } }; /** * @return {?} */ MatAdvancedAudioPlayerComponent.prototype.nextSong = /** * @return {?} */ function () { if (((this.playlistService.indexSong + 1) % this.paginator.pageSize) === 0 || (this.playlistService.indexSong + 1) === this.paginator.length) { if (this.paginator.hasNextPage()) { this.paginator.nextPage(); } else if (!this.paginator.hasNextPage()) { this.paginator.firstPage(); } } this.currentTime = 0; this.duration = 0.01; this.playlistService.nextSong(); this.play(); }; ; /** * @return {?} */ MatAdvancedAudioPlayerComponent.prototype.previousSong = /** * @return {?} */ function () { this.currentTime = 0; this.duration = 0.01; if (!this.checkIfSongHasStartedSinceAtleastTwoSeconds()) { if (((this.playlistService.indexSong) % this.paginator.pageSize) === 0 || (this.playlistService.indexSong) === 0) { if (this.paginator.hasPreviousPage()) { this.paginator.previousPage(); } else if (!this.paginator.hasPreviousPage()) { this.paginator.lastPage(); } } this.playlistService.previousSong(); } else { this.resetSong(); } this.play(); }; ; /** * @return {?} */ MatAdvancedAudioPlayerComponent.prototype.resetSong = /** * @return {?} */ function () { this.player.nativeElement.src = this.playlistTrack[1].link; }; ; /** * @param {?} index * @return {?} */ MatAdvancedAudioPlayerComponent.prototype.selectTrack = /** * @param {?} index * @return {?} */ function (index) { var _this = this; console.log('selectTrack(index: number): void: ' + index); this.playlistService.selectATrack(index); setTimeout(function () { _this.player.nativeElement.play(); }, 0); }; ; /** * @return {?} */ MatAdvancedAudioPlayerComponent.prototype.checkIfSongHasStartedSinceAtleastTwoSeconds = /** * @return {?} */ function () { return this.player.nativeElement.currentTime > 2; }; ; Object.defineProperty(MatAdvancedAudioPlayerComponent.prototype, "playlist", { set: /** * @param {?} playlist * @return {?} */ function (playlist) { this.playlistData = playlist; this.ngOnInit(); }, enumerable: true, configurable: true }); MatAdvancedAudioPlayerComponent.decorators = [ { type: Component, args: [{ selector: 'mat-advanced-audio-player', template: "<mat-card class=\"row d-flex justify-content-center ngx-advanced-audio-player\" style=\"margin: 0px;\">\n <audio [src]=\"playlistTrack[1].link\" #audioPlayer></audio>\n \n <button mat-button class=\"p-1\" style=\"border-left: 1px solid #ddd;\" (click)='previousSong();' [disabled]=\"loaderDisplay\">\n <fa-icon class=\"fa fa-lg\" [icon]=\"['fas','step-backward']\" aria-hidden=\"true\"></fa-icon>\n </button>\n <button mat-button class=\"p-1\" (click)='playBtnHandler();' style=\"border-left: 2px solid #ccc; border-right: 2px solid #ccc;\"\n [disabled]=\"loaderDisplay\">\n <fa-icon *ngIf=\"loaderDisplay\" title=\"loading...\" class=\"fa fa-2x loading-track\" [pulse]=\"true\" [icon]=\"['fas','spinner']\"\n aria-hidden=\"true\"></fa-icon>\n <fa-icon *ngIf=\"!loaderDisplay && !isPlaying\" class=\"fa fa-2x play-track\" style=\"color:#444\" [icon]=\"['fas','play']\"\n aria-hidden=\"true\"></fa-icon>\n <fa-icon *ngIf=\"!loaderDisplay && isPlaying\" class=\"fa fa-2x pause-track\" style=\"color:#444\" [icon]=\"['fas','pause']\"\n aria-hidden=\"true\"></fa-icon>\n </button>\n <button mat-button class=\"p-1\" style=\"border-right: 1px solid #ddd;\" (click)='nextSong();' [disabled]=\"loaderDisplay\">\n <fa-icon class=\"fa fa-lg next-track\" [icon]=\"['fas','step-forward']\" aria-hidden=\"true\"></fa-icon>\n </button>\n\n <div class=\"col\">\n <div class=\"d-flex flex-fill\">\n <div class=\"py-3 px-1\" style=\"font-size: 12px\">\n <span *ngIf=\"duration !== 0.01\">\n {{currentTime | secondsToMinutes}}\n </span>\n </div>\n <mat-slider class=\"flex-fill p-1\" style=\"width: 100%\" min=\"0\" max=\"{{duration}}\" value=\"{{currentTime}}\" (change)=\"currTimePosChanged($event)\"></mat-slider>\n\n <div class=\"py-3 px-1\" style=\"font-size: 12px; text-align: right\">\n <span *ngIf=\"duration !== 0.01\">\n -{{duration-currentTime | secondsToMinutes }}\n </span>\n </div>\n </div>\n </div>\n\n</mat-card>\n\n<mat-card *ngIf=\"displayTitle\" style=\"border: 1px solid #ddd; box-shadow: none;\">\n <div class=\"p-1\" style=\"text-align: center;\">\n <div style=\"padding:1px 3px;\">\n <span *ngIf=\"!isPlaying\">{{ playlistTrack[1].title }}</span>\n <marquee *ngIf=\"isPlaying\" behavior=\"scroll\" direction=\"left\">{{ playlistTrack[1].title }}</marquee>\n </div>\n <div class=\"clear\"></div>\n </div>\n</mat-card>\n\n<mat-accordion *ngIf=\"displayPlaylist\">\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n Play List\n </mat-expansion-panel-header>\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z6\">\n <ng-container matColumnDef=\"title\">\n <th mat-header-cell *matHeaderCellDef> Title </th>\n <td mat-cell *matCellDef=\"let element\" (click)=\"selectTrack(element.index)\"> {{element.title}} </td>\n </ng-container>\n <ng-container matColumnDef=\"status\">\n <th mat-header-cell *matHeaderCellDef> </th>\n <td mat-cell *matCellDef=\"let element\">\n <div *ngIf=\"playlistTrack[1].title === element.title\">\n <fa-icon *ngIf=\"isPlaying\" class=\"fa\" [icon]=\"['fas','play']\" [spin]=\"true\" aria-hidden=\"true\"></fa-icon>\n <fa-icon *ngIf=\"!isPlaying\" class=\"fa\" [icon]=\"['fas','play']\" aria-hidden=\"true\"></fa-icon>\n </div>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr class=\"mat-select-content\" mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n <mat-paginator [pageSizeOptions]=\"[2, 5, 10]\" showFirstLastButtons></mat-paginator>\n </mat-expansion-panel>\n</mat-accordion>", styles: ["@import url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.2.1/css/bootstrap-grid.min.css);mat-card{padding:0!important}mat-slider{max-height:30px}table{width:100%}button:focus,button:hover{outline:0!important}.ngx-advanced-audio-player{min-width:275px}"] }] } ]; /** @nocollapse */ MatAdvancedAudioPlayerComponent.ctorParameters = function () { return [ { type: AudioPlayerService } ]; }; MatAdvancedAudioPlayerComponent.propDecorators = { displayTitle: [{ type: Input }], displayPlaylist: [{ type: Input }], matPaginator: [{ type: ViewChild, args: [MatPaginator,] }], playlist: [{ type: Input }] }; return MatAdvancedAudioPlayerComponent; }(BaseAudioPlayerFunctions)); export { MatAdvancedAudioPlayerComponent }; if (false) { /** @type {?} */ MatAdvancedAudioPlayerComponent.prototype.displayedColumns; /** @type {?} */ MatAdvancedAudioPlayerComponent.prototype.timeLineDuration; /** @type {?} */ MatAdvancedAudioPlayerComponent.prototype.dataSource; /** @type {?} */ MatAdvancedAudioPlayerComponent.prototype.paginator; /** @type {?} */ MatAdvancedAudioPlayerComponent.prototype.playlistData; /** @type {?} */ MatAdvancedAudioPlayerComponent.prototype.displayTitle; /** @type {?} */ MatAdvancedAudioPlayerComponent.prototype.displayPlaylist; /** @type {?} */ MatAdvancedAudioPlayerComponent.prototype.playlistTrack; /** * @type {?} * @private */ MatAdvancedAudioPlayerComponent.prototype.playlistService; /* Skipping unhandled member: ;*/ /* Skipping unhandled member: ;*/ /* Skipping unhandled member: ;*/ /* Skipping unhandled member: ;*/ /* Skipping unhandled member: ;*/ } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWFkdmFuY2VkLWF1ZGlvLXBsYXllci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYXVkaW8tcGxheWVyLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9tYXQtYWR2YW5jZWQtYXVkaW8tcGxheWVyL21hdC1hZHZhbmNlZC1hdWRpby1wbGF5ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQzdGLE9BQU8sRUFBYSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUVoRjtJQUtxRCwyREFBd0I7SUFtQnpFLHlDQUFvQixlQUFtQztRQUF2RCxZQUNJLGlCQUFPLFNBQ1Y7UUFGbUIscUJBQWUsR0FBZixlQUFlLENBQW9CO1FBakJ2RCxzQkFBZ0IsR0FBYSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUdqRCxnQkFBVSxHQUFHLElBQUksa0JBQWtCLEVBQVMsQ0FBQzs7SUFnQjdDLENBQUM7Ozs7SUFFRCxrREFBUTs7O0lBQVI7UUFBQSxpQkFTQztRQVJHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFDLGFBQWE7WUFDbEUsS0FBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJ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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXVkaW9QbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hdWRpby1wbGF5ZXItc2VydmljZS9hdWRpby1wbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNYXRTbGlkZXIsIE1hdFBhZ2luYXRvciwgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgVHJhY2sgfSBmcm9tICcuLi8uLi9tb2RlbC90cmFjay5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlQXVkaW9QbGF5ZXJGdW5jdGlvbnMgfSBmcm9tICcuLi9iYXNlL2Jhc2UtYXVkaW8tcGxheWVyLWNvbXBvbmVudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21hdC1hZHZhbmNlZC1hdWRpby1wbGF5ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tYXQtYWR2YW5jZWQtYXVkaW8tcGxheWVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9tYXQtYWR2YW5jZWQtYXVkaW8tcGxheWVyLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNYXRBZHZhbmNlZEF1ZGlvUGxheWVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUF1ZGlvUGxheWVyRnVuY3Rpb25zIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gWyd0aXRsZScsICdzdGF0dXMnXTtcbiAgICB0aW1lTGluZUR1cmF0aW9uOiBNYXRTbGlkZXI7XG5cbiAgICBkYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxUcmFjaz4oKTtcblxuICAgIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gICAgcGxheWxpc3REYXRhOiBUcmFja1tdO1xuXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5VGl0bGU6IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlQbGF5bGlzdDogdHJ1ZTtcblxuICAgIHBsYXlsaXN0VHJhY2s6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcGxheWxpc3RTZXJ2aWNlOiBBdWRpb1BsYXllclNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXREYXRhU291cmNlQXR0cmlidXRlcygpO1xuICAgICAgICB0aGlzLmJpbmRQbGF5ZXJFdmVudCgpO1xuICAgICAgICB0aGlzLnBsYXlsaXN0U2VydmljZS5zZXRQbGF5bGlzdCh0aGlzLnBsYXlsaXN0RGF0YSk7XG4gICAgICAgIHRoaXMucGxheWxpc3RTZXJ2aWNlLmdldFN1YmplY3RDdXJyZW50VHJhY2soKS5zdWJzY3JpYmUoKHBsYXlsaXN0VHJhY2spID0+IHtcbiAgICAgICAgICAgIHRoaXMucGxheWxpc3RUcmFjayA9IHBsYXlsaXN0VHJhY2s7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBsYXllci5uYXRpdmVFbGVtZW50LmN1cnJlbnRUaW1lID0gMDtcbiAgICAgICAgdGhpcy5wbGF5bGlzdFNlcnZpY2UuaW5pdCgpO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBzZXQgbWF0UGFnaW5hdG9yKG1wOiBNYXRQYWdpbmF0b3IpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0b3IgPSBtcDtcbiAgICAgICAgdGhpcy5zZXREYXRhU291cmNlQXR0cmlidXRlcygpO1xuICAgIH1cblxuICAgIHNldERhdGFTb3VyY2VBdHRyaWJ1dGVzKCkge1xuICAgICAgICBsZXQgaW5kZXggPSAxO1xuICAgICAgICBpZiAodGhpcy5wbGF5bGlzdERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucGxheWxpc3REYXRhLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YS5pbmRleCA9IGluZGV4Kys7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8VHJhY2s+KHRoaXMucGxheWxpc3REYXRhKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5leHRTb25nKCk6IHZvaWQge1xuICAgICAgICBpZiAoKCh0aGlzLnBsYXlsaXN0U2VydmljZS5pbmRleFNvbmcgKyAxKSAlIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKSA9PT0gMCB8fFxuICAgICAgICAgICAgKHRoaXMucGxheWxpc3RTZXJ2aWNlLmluZGV4U29uZyArIDEpID09PSB0aGlzLnBhZ2luYXRvci5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRvci5oYXNOZXh0UGFnZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3IubmV4dFBhZ2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMucGFnaW5hdG9yLmhhc05leHRQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRUaW1lID0gMDtcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IDAuMDE7XG4gICAgICAgIHRoaXMucGxheWxpc3RTZXJ2aWNlLm5leHRTb25nKCk7XG4gICAgICAgIHRoaXMucGxheSgpO1xuICAgIH07XG5cbiAgICBwcmV2aW91c1NvbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudFRpbWUgPSAwO1xuICAgICAgICB0aGlzLmR1cmF0aW9uID0gMC4wMTtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZTb25nSGFzU3RhcnRlZFNpbmNlQXRsZWFzdFR3b1NlY29uZHMoKSkge1xuICAgICAgICAgICAgaWYgKCgodGhpcy5wbGF5bGlzdFNlcnZpY2UuaW5kZXhTb25nKSAlIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKSA9PT0gMCB8fFxuICAgICAgICAgICAgICAgICh0aGlzLnBsYXlsaXN0U2VydmljZS5pbmRleFNvbmcpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yLmhhc1ByZXZpb3VzUGFnZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnByZXZpb3VzUGFnZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMucGFnaW5hdG9yLmhhc1ByZXZpb3VzUGFnZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yLmxhc3RQYWdlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wbGF5bGlzdFNlcnZpY2UucHJldmlvdXNTb25nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U29uZygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGxheSgpO1xuICAgIH07XG5cbiAgICByZXNldFNvbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGxheWVyLm5hdGl2ZUVsZW1lbnQuc3JjID0gdGhpcy5wbGF5bGlzdFRyYWNrWzFdLmxpbms7XG4gICAgfTtcblxuICAgIHNlbGVjdFRyYWNrKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3NlbGVjdFRyYWNrKGluZGV4OiBudW1iZXIpOiB2b2lkOiAnICsgaW5kZXgpO1xuICAgICAgICB0aGlzLnBsYXlsaXN0U2VydmljZS5zZWxlY3RBVHJhY2soaW5kZXgpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGxheWVyLm5hdGl2ZUVsZW1lbnQucGxheSgpO1xuICAgICAgICB9LCAwKTtcbiAgICB9O1xuXG4gICAgY2hlY2tJZlNvbmdIYXNTdGFydGVkU2luY2VBdGxlYXN0VHdvU2Vjb25kcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheWVyLm5hdGl2ZUVsZW1lbnQuY3VycmVudFRpbWUgPiAyO1xuICAgIH07XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBwbGF5bGlzdChwbGF5bGlzdDogVHJhY2tbXSkge1xuICAgICAgICB0aGlzLnBsYXlsaXN0RGF0YSA9IHBsYXlsaXN0O1xuICAgICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgfVxufSJdfQ==