UNPKG

angular-material-datatransfer-lib

Version:

A HTML5 datatransfer UI for handling upload and download of multiple simultaneous files.

165 lines 15.4 kB
/** * @fileoverview added by tsickle * Generated from: lib/models/progress-container.model.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ReflectiveInjector } from '@angular/core'; import { DateUtil } from '../utils/date.util'; import { SizeContainer } from './size-container.model'; import { DecimalByteUnit } from '../enums/decimal-byte-unit.enum'; /** * @record */ export function IProgressContainer() { } if (false) { /** @type {?} */ IProgressContainer.prototype.total; /** @type {?} */ IProgressContainer.prototype.progressTimestamp; /** @type {?} */ IProgressContainer.prototype.bitrateTimestamp; /** @type {?} */ IProgressContainer.prototype.bitrate; /** @type {?} */ IProgressContainer.prototype.percent; /** @type {?} */ IProgressContainer.prototype.displayBitrate; /** @type {?} */ IProgressContainer.prototype.displayTimeLeft; /** @type {?} */ IProgressContainer.prototype.loadedSizeContainer; /** @type {?} */ IProgressContainer.prototype.totalSizeContainer; /** * @param {?} total * @return {?} */ IProgressContainer.prototype.reset = function (total) { }; /** * @param {?} now * @param {?} loaded * @param {?} interval * @return {?} */ IProgressContainer.prototype.updateProgress = function (now, loaded, interval) { }; /** * @param {?} now * @param {?} loaded * @param {?} interval * @return {?} */ IProgressContainer.prototype.updateBitrate = function (now, loaded, interval) { }; } export class ProgressContainer { /** * @param {?} total */ constructor(total) { /** @type {?} */ const injector = ReflectiveInjector.resolveAndCreate([DateUtil]); this.dateUtil = injector.get(DateUtil); this.bitrateSizeContainer = new SizeContainer(); this.loadedSizeContainer = new SizeContainer(); this.totalSizeContainer = new SizeContainer(); this.reset(total); } /** * @param {?} total * @return {?} */ reset(total) { this.progressTimestamp = this.dateUtil.now(); this.bitrateTimestamp = this.dateUtil.now(); this.loaded = 0; this.bitrate = 0; this.percent = 0; this.total = total; this.displayBitrate = undefined; this.displayTimeLeft = undefined; this.bitrateSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.bitrate); this.loadedSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.loaded); this.totalSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.total); } /** * @param {?} now * @param {?} loaded * @param {?} interval * @return {?} */ updateProgress(now, loaded, interval) { /** @type {?} */ const timeDiff = now - this.progressTimestamp; // console.log('loaded: ' + loaded + ' total: ' + this.total); if (!this.percent || timeDiff > interval) { this.percent = Number((loaded / this.total * 100).toFixed(2)); this.loaded = loaded; this.loadedSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.loaded); this.progressTimestamp = now; if (this.bitrate > 0) { this.displayTimeLeft = this.dateUtil.format((this.total - this.loaded) * 8 / this.bitrate); } else { this.displayTimeLeft = this.dateUtil.format(0); } } else if (loaded >= this.total) { this.percent = 100; this.loaded = this.total; } } /** * @param {?} now * @param {?} loaded * @param {?} interval * @return {?} */ updateBitrate(now, loaded, interval) { /** @type {?} */ const timeDiff = now - this.bitrateTimestamp; if (!this.bitrate || timeDiff > interval) { this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8; if (this.bitrate === Number.POSITIVE_INFINITY || this.bitrate === Number.NEGATIVE_INFINITY) { this.bitrate = 0; } this.bitrateSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.bitrate / 8); this.displayBitrate = this.bitrateSizeContainer.displaySize + ' ' + this.bitrateSizeContainer.displayUnit + '/s'; this.bitrateTimestamp = now; } } } if (false) { /** * @type {?} * @private */ ProgressContainer.prototype.dateUtil; /** * @type {?} * @private */ ProgressContainer.prototype.loaded; /** * @type {?} * @private */ ProgressContainer.prototype.bitrateSizeContainer; /** @type {?} */ ProgressContainer.prototype.total; /** @type {?} */ ProgressContainer.prototype.progressTimestamp; /** @type {?} */ ProgressContainer.prototype.bitrateTimestamp; /** @type {?} */ ProgressContainer.prototype.bitrate; /** @type {?} */ ProgressContainer.prototype.percent; /** @type {?} */ ProgressContainer.prototype.displayBitrate; /** @type {?} */ ProgressContainer.prototype.displayTimeLeft; /** @type {?} */ ProgressContainer.prototype.loadedSizeContainer; /** @type {?} */ ProgressContainer.prototype.totalSizeContainer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtY29udGFpbmVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1tYXRlcmlhbC1kYXRhdHJhbnNmZXItbGliLyIsInNvdXJjZXMiOlsibGliL21vZGVscy9wcm9ncmVzcy1jb250YWluZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBa0IsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBRWxFLHdDQWFDOzs7SUFaRyxtQ0FBYzs7SUFDZCwrQ0FBMEI7O0lBQzFCLDhDQUF5Qjs7SUFDekIscUNBQWdCOztJQUNoQixxQ0FBZ0I7O0lBQ2hCLDRDQUF1Qjs7SUFDdkIsNkNBQXdCOztJQUN4QixpREFBb0M7O0lBQ3BDLGdEQUFtQzs7Ozs7SUFDbkMsMERBQTJCOzs7Ozs7O0lBQzNCLG1GQUFvRTs7Ozs7OztJQUNwRSxrRkFBbUU7O0FBR3ZFLE1BQU0sT0FBTyxpQkFBaUI7Ozs7SUFlMUIsWUFBbUIsS0FBYTs7Y0FDdEIsUUFBUSxHQUFHLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQzs7Ozs7SUFFTSxLQUFLLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RSxDQUFDOzs7Ozs7O0lBRU0sY0FBYyxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsUUFBZ0I7O2NBQ3pELFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQjtRQUM3Qyw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksUUFBUSxHQUFHLFFBQVEsRUFBRTtZQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM5RjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1NBQ0o7YUFBTSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUM1QjtJQUNMLENBQUM7Ozs7Ozs7SUFFTSxhQUFhLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBRSxRQUFnQjs7Y0FDeEQsUUFBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLFFBQVEsR0FBRyxRQUFRLEVBQUU7WUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3hGLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2FBQ3BCO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUNqSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztDQUNKOzs7Ozs7SUFyRUcscUNBQTJCOzs7OztJQUMzQixtQ0FBdUI7Ozs7O0lBQ3ZCLGlEQUE2Qzs7SUFFN0Msa0NBQXFCOztJQUNyQiw4Q0FBaUM7O0lBQ2pDLDZDQUFnQzs7SUFDaEMsb0NBQXVCOztJQUN2QixvQ0FBdUI7O0lBQ3ZCLDJDQUE4Qjs7SUFDOUIsNENBQStCOztJQUMvQixnREFBMkM7O0lBQzNDLCtDQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlZmxlY3RpdmVJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRlVXRpbCB9IGZyb20gJy4uL3V0aWxzL2RhdGUudXRpbCc7XHJcbmltcG9ydCB7IElTaXplQ29udGFpbmVyLCBTaXplQ29udGFpbmVyIH0gZnJvbSAnLi9zaXplLWNvbnRhaW5lci5tb2RlbCc7XHJcbmltcG9ydCB7IERlY2ltYWxCeXRlVW5pdCB9IGZyb20gJy4uL2VudW1zL2RlY2ltYWwtYnl0ZS11bml0LmVudW0nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUHJvZ3Jlc3NDb250YWluZXIge1xyXG4gICAgdG90YWw6IG51bWJlcjsgLy8gYnl0ZXNcclxuICAgIHByb2dyZXNzVGltZXN0YW1wOiBudW1iZXI7IC8vIG1pbGxpc2Vjb25kc1xyXG4gICAgYml0cmF0ZVRpbWVzdGFtcDogbnVtYmVyOyAvLyBtaWxsaXNlY29uZHNcclxuICAgIGJpdHJhdGU6IG51bWJlcjsgLy8gYml0L3NcclxuICAgIHBlcmNlbnQ6IG51bWJlcjsgLy8gMC0xMDBcclxuICAgIGRpc3BsYXlCaXRyYXRlOiBzdHJpbmc7XHJcbiAgICBkaXNwbGF5VGltZUxlZnQ6IHN0cmluZztcclxuICAgIGxvYWRlZFNpemVDb250YWluZXI6IElTaXplQ29udGFpbmVyO1xyXG4gICAgdG90YWxTaXplQ29udGFpbmVyOiBJU2l6ZUNvbnRhaW5lcjtcclxuICAgIHJlc2V0KHRvdGFsOiBudW1iZXIpOiB2b2lkO1xyXG4gICAgdXBkYXRlUHJvZ3Jlc3Mobm93OiBudW1iZXIsIGxvYWRlZDogbnVtYmVyLCBpbnRlcnZhbDogbnVtYmVyKTogdm9pZDtcclxuICAgIHVwZGF0ZUJpdHJhdGUobm93OiBudW1iZXIsIGxvYWRlZDogbnVtYmVyLCBpbnRlcnZhbDogbnVtYmVyKTogdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFByb2dyZXNzQ29udGFpbmVyIGltcGxlbWVudHMgSVByb2dyZXNzQ29udGFpbmVyIHtcclxuICAgIHByaXZhdGUgZGF0ZVV0aWw6IERhdGVVdGlsO1xyXG4gICAgcHJpdmF0ZSBsb2FkZWQ6IG51bWJlcjsgLy8gYnl0ZXNcclxuICAgIHByaXZhdGUgYml0cmF0ZVNpemVDb250YWluZXI6IElTaXplQ29udGFpbmVyO1xyXG5cclxuICAgIHB1YmxpYyB0b3RhbDogbnVtYmVyO1xyXG4gICAgcHVibGljIHByb2dyZXNzVGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgYml0cmF0ZVRpbWVzdGFtcDogbnVtYmVyO1xyXG4gICAgcHVibGljIGJpdHJhdGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwZXJjZW50OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZGlzcGxheUJpdHJhdGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBkaXNwbGF5VGltZUxlZnQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBsb2FkZWRTaXplQ29udGFpbmVyOiBJU2l6ZUNvbnRhaW5lcjtcclxuICAgIHB1YmxpYyB0b3RhbFNpemVDb250YWluZXI6IElTaXplQ29udGFpbmVyO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih0b3RhbDogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBSZWZsZWN0aXZlSW5qZWN0b3IucmVzb2x2ZUFuZENyZWF0ZShbRGF0ZVV0aWxdKTtcclxuICAgICAgICB0aGlzLmRhdGVVdGlsID0gaW5qZWN0b3IuZ2V0KERhdGVVdGlsKTtcclxuXHJcbiAgICAgICAgdGhpcy5iaXRyYXRlU2l6ZUNvbnRhaW5lciA9IG5ldyBTaXplQ29udGFpbmVyKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkZWRTaXplQ29udGFpbmVyID0gbmV3IFNpemVDb250YWluZXIoKTtcclxuICAgICAgICB0aGlzLnRvdGFsU2l6ZUNvbnRhaW5lciA9IG5ldyBTaXplQ29udGFpbmVyKCk7XHJcbiAgICAgICAgdGhpcy5yZXNldCh0b3RhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0KHRvdGFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzVGltZXN0YW1wID0gdGhpcy5kYXRlVXRpbC5ub3coKTtcclxuICAgICAgICB0aGlzLmJpdHJhdGVUaW1lc3RhbXAgPSB0aGlzLmRhdGVVdGlsLm5vdygpO1xyXG4gICAgICAgIHRoaXMubG9hZGVkID0gMDtcclxuICAgICAgICB0aGlzLmJpdHJhdGUgPSAwO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUJpdHJhdGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5VGltZUxlZnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5iaXRyYXRlU2l6ZUNvbnRhaW5lci51cGRhdGVEZWNpbWFsKERlY2ltYWxCeXRlVW5pdC5CeXRlLCB0aGlzLmJpdHJhdGUpO1xyXG4gICAgICAgIHRoaXMubG9hZGVkU2l6ZUNvbnRhaW5lci51cGRhdGVEZWNpbWFsKERlY2ltYWxCeXRlVW5pdC5CeXRlLCB0aGlzLmxvYWRlZCk7XHJcbiAgICAgICAgdGhpcy50b3RhbFNpemVDb250YWluZXIudXBkYXRlRGVjaW1hbChEZWNpbWFsQnl0ZVVuaXQuQnl0ZSwgdGhpcy50b3RhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVByb2dyZXNzKG5vdzogbnVtYmVyLCBsb2FkZWQ6IG51bWJlciwgaW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRpbWVEaWZmID0gbm93IC0gdGhpcy5wcm9ncmVzc1RpbWVzdGFtcDtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnbG9hZGVkOiAnICsgbG9hZGVkICsgJyB0b3RhbDogJyArIHRoaXMudG90YWwpO1xyXG4gICAgICAgIGlmICghdGhpcy5wZXJjZW50IHx8IHRpbWVEaWZmID4gaW50ZXJ2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJjZW50ID0gTnVtYmVyKChsb2FkZWQgLyB0aGlzLnRvdGFsICogMTAwKS50b0ZpeGVkKDIpKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVkU2l6ZUNvbnRhaW5lci51cGRhdGVEZWNpbWFsKERlY2ltYWxCeXRlVW5pdC5CeXRlLCB0aGlzLmxvYWRlZCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NUaW1lc3RhbXAgPSBub3c7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJpdHJhdGUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlUaW1lTGVmdCA9IHRoaXMuZGF0ZVV0aWwuZm9ybWF0KCh0aGlzLnRvdGFsIC0gdGhpcy5sb2FkZWQpICogOCAvIHRoaXMuYml0cmF0ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlUaW1lTGVmdCA9IHRoaXMuZGF0ZVV0aWwuZm9ybWF0KDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChsb2FkZWQgPj0gdGhpcy50b3RhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcmNlbnQgPSAxMDA7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVkID0gdGhpcy50b3RhbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUJpdHJhdGUobm93OiBudW1iZXIsIGxvYWRlZDogbnVtYmVyLCBpbnRlcnZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGltZURpZmYgPSBub3cgLSB0aGlzLmJpdHJhdGVUaW1lc3RhbXA7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJpdHJhdGUgfHwgdGltZURpZmYgPiBpbnRlcnZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmJpdHJhdGUgPSAobG9hZGVkIC0gdGhpcy5sb2FkZWQpICogKDEwMDAgLyB0aW1lRGlmZikgKiA4O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5iaXRyYXRlID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHwgdGhpcy5iaXRyYXRlID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5iaXRyYXRlU2l6ZUNvbnRhaW5lci51cGRhdGVEZWNpbWFsKERlY2ltYWxCeXRlVW5pdC5CeXRlLCB0aGlzLmJpdHJhdGUgLyA4KTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5Qml0cmF0ZSA9IHRoaXMuYml0cmF0ZVNpemVDb250YWluZXIuZGlzcGxheVNpemUgKyAnICcgKyB0aGlzLmJpdHJhdGVTaXplQ29udGFpbmVyLmRpc3BsYXlVbml0ICsgJy9zJztcclxuICAgICAgICAgICAgdGhpcy5iaXRyYXRlVGltZXN0YW1wID0gbm93O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=