@helgoland/core
Version:
301 lines (300 loc) • 22.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { plainToClass } from 'class-transformer';
import moment, { duration } from 'moment';
import { LocalStorage } from '../local-storage/local-storage.service';
import { BufferedTime, Timespan } from '../model/internal/timeInterval';
var Time = /** @class */ (function () {
function Time(localStorage) {
this.localStorage = localStorage;
}
/**
* @param {?} timespan
* @param {?} date
* @return {?}
*/
Time.prototype.centerTimespan = /**
* @param {?} timespan
* @param {?} date
* @return {?}
*/
function (timespan, date) {
/** @type {?} */
var halfduration = this.getDuration(timespan).asMilliseconds() / 2;
/** @type {?} */
var from = moment(date).subtract(halfduration).unix() * 1000;
/** @type {?} */
var to = moment(date).add(halfduration).unix() * 1000;
return new Timespan(from, to);
};
/**
* @param {?} timespan
* @param {?} d
* @return {?}
*/
Time.prototype.centerTimespanWithDuration = /**
* @param {?} timespan
* @param {?} d
* @return {?}
*/
function (timespan, d) {
/** @type {?} */
var half = d.asMilliseconds() / 2;
/** @type {?} */
var center = this.getCenterOfTimespan(timespan);
return new Timespan(center - half, center + half);
};
/**
* @param {?} timespan
* @return {?}
*/
Time.prototype.getCenterOfTimespan = /**
* @param {?} timespan
* @return {?}
*/
function (timespan) {
return timespan.from + (timespan.to - timespan.from) / 2;
};
/**
* @param {?} timespan
* @return {?}
*/
Time.prototype.stepBack = /**
* @param {?} timespan
* @return {?}
*/
function (timespan) {
/** @type {?} */
var d = this.getDuration(timespan);
/** @type {?} */
var from = moment(timespan.from).subtract(d).unix() * 1000;
/** @type {?} */
var to = moment(timespan.to).subtract(d).unix() * 1000;
return new Timespan(from, to);
};
/**
* @param {?} timespan
* @return {?}
*/
Time.prototype.stepForward = /**
* @param {?} timespan
* @return {?}
*/
function (timespan) {
/** @type {?} */
var d = this.getDuration(timespan);
/** @type {?} */
var from = moment(timespan.from).add(d).unix() * 1000;
/** @type {?} */
var to = moment(timespan.to).add(d).unix() * 1000;
return new Timespan(from, to);
};
/**
* Increase timespan by custom interval
* @param {?} timespan
* @param {?} interval
* @return {?}
*/
Time.prototype.stepForwardCustom = /**
* Increase timespan by custom interval
* @param {?} timespan
* @param {?} interval
* @return {?}
*/
function (timespan, interval) {
/** @type {?} */
var from = moment(timespan.from).add(interval).unix() * 1000;
/** @type {?} */
var to = moment(timespan.to).add(interval).unix() * 1000;
return new Timespan(from, to);
};
/**
* @param {?} timeInterval
* @param {?} from
* @param {?} to
* @return {?}
*/
Time.prototype.overlaps = /**
* @param {?} timeInterval
* @param {?} from
* @param {?} to
* @return {?}
*/
function (timeInterval, from, to) {
/** @type {?} */
var timespan = this.createTimespanOfInterval(timeInterval);
if (timespan.from <= to && timespan.to >= from) {
return true;
}
return false;
};
/**
* @param {?} timeInterval
* @param {?} timestamp
* @return {?}
*/
Time.prototype.containsIn = /**
* @param {?} timeInterval
* @param {?} timestamp
* @return {?}
*/
function (timeInterval, timestamp) {
/** @type {?} */
var timespan = this.createTimespanOfInterval(timeInterval);
return timespan.from <= timestamp && timestamp <= timespan.to;
};
/**
* @param {?} timeInterval
* @return {?}
*/
Time.prototype.createTimespanOfInterval = /**
* @param {?} timeInterval
* @return {?}
*/
function (timeInterval) {
if (timeInterval instanceof Timespan) {
return timeInterval;
}
else if (timeInterval instanceof BufferedTime) {
/** @type {?} */
var d = moment.duration(timeInterval.bufferInterval / 2);
/** @type {?} */
var from = moment(timeInterval.timestamp).subtract(d).unix() * 1000;
/** @type {?} */
var to = moment(timeInterval.timestamp).add(d).unix() * 1000;
return new Timespan(from, to);
}
else {
console.error('Wrong time interval!');
}
};
/**
* @param {?} timespan
* @param {?} factor
* @param {?=} maxBufferInMs
* @return {?}
*/
Time.prototype.getBufferedTimespan = /**
* @param {?} timespan
* @param {?} factor
* @param {?=} maxBufferInMs
* @return {?}
*/
function (timespan, factor, maxBufferInMs) {
/** @type {?} */
var durationMillis = this.getDuration(timespan).asMilliseconds();
/** @type {?} */
var buffer = durationMillis * factor;
if (maxBufferInMs && buffer > maxBufferInMs) {
buffer = maxBufferInMs;
}
/** @type {?} */
var from = timespan.from - buffer;
/** @type {?} */
var to = timespan.to + buffer;
return new Timespan(from, to);
};
/**
* @param {?} param
* @param {?} timespan
* @return {?}
*/
Time.prototype.saveTimespan = /**
* @param {?} param
* @param {?} timespan
* @return {?}
*/
function (param, timespan) {
this.localStorage.save(param, timespan);
};
/**
* @param {?} param
* @return {?}
*/
Time.prototype.loadTimespan = /**
* @param {?} param
* @return {?}
*/
function (param) {
/** @type {?} */
var json = this.localStorage.load(param);
if (json) {
return plainToClass(Timespan, json);
}
return null;
};
/**
* @return {?}
*/
Time.prototype.initTimespan = /**
* @return {?}
*/
function () {
/** @type {?} */
var now = new Date();
/** @type {?} */
var start = moment(now).startOf('day').unix() * 1000;
/** @type {?} */
var end = moment(now).endOf('day').unix() * 1000;
return new Timespan(start, end);
};
/**
* @param {?} defaultTimeseriesTimeduration
* @param {?} align
* @return {?}
*/
Time.prototype.generateTimespan = /**
* @param {?} defaultTimeseriesTimeduration
* @param {?} align
* @return {?}
*/
function (defaultTimeseriesTimeduration, align) {
/** @type {?} */
var now = new Date();
/** @type {?} */
var d = duration(defaultTimeseriesTimeduration);
switch (align) {
case 'start':
return new Timespan(now.getTime(), now.getTime() + d.asMilliseconds());
case 'end':
return new Timespan(now.getTime() - d.asMilliseconds(), now.getTime());
case 'center':
default:
/** @type {?} */
var half = d.asMilliseconds() / 2;
return new Timespan(now.getTime() - half, now.getTime() + half);
}
};
/**
* @param {?} timespan
* @return {?}
*/
Time.prototype.getDuration = /**
* @param {?} timespan
* @return {?}
*/
function (timespan) {
/** @type {?} */
var from = moment(timespan.from);
/** @type {?} */
var to = moment(timespan.to);
return moment.duration(to.diff(from));
};
Time.decorators = [
{ type: Injectable },
];
/** @nocollapse */
Time.ctorParameters = function () { return [
{ type: LocalStorage }
]; };
return Time;
}());
export { Time };
if (false) {
/** @type {?} */
Time.prototype.localStorage;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhlbGdvbGFuZC9jb3JlLyIsInNvdXJjZXMiOlsibGliL3RpbWUvdGltZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBcUIsTUFBTSxRQUFRLENBQUM7QUFFN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQWdCLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztJQUtsRixjQUNjLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO0tBQ25DOzs7Ozs7SUFFRSw2QkFBYzs7Ozs7Y0FBQyxRQUFrQixFQUFFLElBQVU7O1FBQ2hELElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDOztRQUNyRSxJQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQzs7UUFDL0QsSUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDeEQsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQzs7Ozs7OztJQUczQix5Q0FBMEI7Ozs7O2NBQUMsUUFBa0IsRUFBRSxDQUFrQjs7UUFDcEUsSUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQzs7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QUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUMzRSxLQUFLLEtBQUs7Z0JBQ04sTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDM0UsS0FBSyxRQUFRLENBQUM7WUFDZDs7Z0JBQ0ksSUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDcEMsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ3ZFOzs7Ozs7SUFHRywwQkFBVzs7OztjQUFDLFFBQWtCOztRQUNsQyxJQUFNLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDOztRQUNuQyxJQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzs7O2dCQTNIN0MsVUFBVTs7OztnQkFIRixZQUFZOztlQUpyQjs7U0FRYSxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IG1vbWVudCwgeyBkdXJhdGlvbiwgTW9tZW50SW5wdXRPYmplY3QgfSBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tICcuLi9sb2NhbC1zdG9yYWdlL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCdWZmZXJlZFRpbWUsIFRpbWVJbnRlcnZhbCwgVGltZXNwYW4gfSBmcm9tICcuLi9tb2RlbC9pbnRlcm5hbC90aW1lSW50ZXJ2YWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGltZSB7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGxvY2FsU3RvcmFnZTogTG9jYWxTdG9yYWdlXG4gICAgKSB7IH1cblxuICAgIHB1YmxpYyBjZW50ZXJUaW1lc3Bhbih0aW1lc3BhbjogVGltZXNwYW4sIGRhdGU6IERhdGUpOiBUaW1lc3BhbiB7XG4gICAgICAgIGNvbnN0IGhhbGZkdXJhdGlvbiA9IHRoaXMuZ2V0RHVyYXRpb24odGltZXNwYW4pLmFzTWlsbGlzZWNvbmRzKCkgLyAyO1xuICAgICAgICBjb25zdCBmcm9tID0gbW9tZW50KGRhdGUpLnN1YnRyYWN0KGhhbGZkdXJhdGlvbikudW5peCgpICogMTAwMDtcbiAgICAgICAgY29uc3QgdG8gPSBtb21lbnQoZGF0ZSkuYWRkKGhhbGZkdXJhdGlvbikudW5peCgpICogMTAwMDtcbiAgICAgICAgcmV0dXJuIG5ldyBUaW1lc3Bhbihmcm9tLCB0byk7XG4gICAgfVxuXG4gICAgcHVibGljIGNlbnRlclRpbWVzcGFuV2l0aER1cmF0aW9uKHRpbWVzcGFuOiBUaW1lc3BhbiwgZDogbW9tZW50LkR1cmF0aW9uKTogVGltZXNwYW4ge1xuICAgICAgICBjb25zdCBoYWxmID0gZC5hc01pbGxpc2Vjb25kcygpIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gdGhpcy5nZXRDZW50ZXJPZlRpbWVzcGFuKHRpbWVzcGFuKTtcbiAgICAgICAgcmV0dXJuIG5ldyBUaW1lc3BhbihjZW50ZXIgLSBoYWxmLCBjZW50ZXIgKyBoYWxmKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2VudGVyT2ZUaW1lc3Bhbih0aW1lc3BhbjogVGltZXNwYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGltZXNwYW4uZnJvbSArICh0aW1lc3Bhbi50byAtIHRpbWVzcGFuLmZyb20pIC8gMjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RlcEJhY2sodGltZXNwYW46IFRpbWVzcGFuKTogVGltZXNwYW4ge1xuICAgICAgICBjb25zdCBkID0gdGhpcy5nZXREdXJhdGlvbih0aW1lc3Bhbik7XG4gICAgICAgIGNvbnN0IGZyb20gPSBtb21lbnQodGltZXNwYW4uZnJvbSkuc3VidHJhY3QoZCkudW5peCgpICogMTAwMDtcbiAgICAgICAgY29uc3QgdG8gPSBtb21lbnQodGltZXNwYW4udG8pLnN1YnRyYWN0KGQpLnVuaXgoKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiBuZXcgVGltZXNwYW4oZnJvbSwgdG8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGVwRm9yd2FyZCh0aW1lc3BhbjogVGltZXNwYW4pOiBUaW1lc3BhbiB7XG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmdldER1cmF0aW9uKHRpbWVzcGFuKTtcbiAgICAgICAgY29uc3QgZnJvbSA9IG1vbWVudCh0aW1lc3Bhbi5mcm9tKS5hZGQoZCkudW5peCgpICogMTAwMDtcbiAgICAgICAgY29uc3QgdG8gPSBtb21lbnQodGltZXNwYW4udG8pLmFkZChkKS51bml4KCkgKiAxMDAwO1xuICAgICAgICByZXR1cm4gbmV3IFRpbWVzcGFuKGZyb20sIHRvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmNyZWFzZSB0aW1lc3BhbiBieSBjdXN0b20gaW50ZXJ2YWxcbiAgICAgKiBAcGFyYW0gdGltZXNwYW5cbiAgICAgKiBAcGFyYW0gaW50ZXJ2YWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RlcEZvcndhcmRDdXN0b20odGltZXNwYW46IFRpbWVzcGFuLCBpbnRlcnZhbDogbnVtYmVyKTogVGltZXNwYW4ge1xuICAgICAgICBjb25zdCBmcm9tID0gbW9tZW50KHRpbWVzcGFuLmZyb20pLmFkZChpbnRlcnZhbCkudW5peCgpICogMTAwMDtcbiAgICAgICAgY29uc3QgdG8gPSBtb21lbnQodGltZXNwYW4udG8pLmFkZChpbnRlcnZhbCkudW5peCgpICogMTAwMDtcbiAgICAgICAgcmV0dXJuIG5ldyBUaW1lc3Bhbihmcm9tLCB0byk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJsYXBzKHRpbWVJbnRlcnZhbDogVGltZUludGVydmFsLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdGltZXNwYW4gPSB0aGlzLmNyZWF0ZVRpbWVzcGFuT2ZJbnRlcnZhbCh0aW1lSW50ZXJ2YWwpO1xuICAgICAgICBpZiAodGltZXNwYW4uZnJvbSA8PSB0byAmJiB0aW1lc3Bhbi50byA+PSBmcm9tKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnRhaW5zSW4odGltZUludGVydmFsOiBUaW1lSW50ZXJ2YWwsIHRpbWVzdGFtcDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHRpbWVzcGFuID0gdGhpcy5jcmVhdGVUaW1lc3Bhbk9mSW50ZXJ2YWwodGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIHRpbWVzcGFuLmZyb20gPD0gdGltZXN0YW1wICYmIHRpbWVzdGFtcCA8PSB0aW1lc3Bhbi50bztcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlVGltZXNwYW5PZkludGVydmFsKHRpbWVJbnRlcnZhbDogVGltZUludGVydmFsKTogVGltZXNwYW4ge1xuICAgICAgICBpZiAodGltZUludGVydmFsIGluc3RhbmNlb2YgVGltZXNwYW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aW1lSW50ZXJ2YWw7XG4gICAgICAgIH0gZWxzZSBpZiAodGltZUludGVydmFsIGluc3RhbmNlb2YgQnVmZmVyZWRUaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gbW9tZW50LmR1cmF0aW9uKHRpbWVJbnRlcnZhbC5idWZmZXJJbnRlcnZhbCAvIDIpO1xuICAgICAgICAgICAgY29uc3QgZnJvbSA9IG1vbWVudCh0aW1lSW50ZXJ2YWwudGltZXN0YW1wKS5zdWJ0cmFjdChkKS51bml4KCkgKiAxMDAwO1xuICAgICAgICAgICAgY29uc3QgdG8gPSBtb21lbnQodGltZUludGVydmFsLnRpbWVzdGFtcCkuYWRkKGQpLnVuaXgoKSAqIDEwMDA7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRpbWVzcGFuKGZyb20sIHRvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dyb25nIHRpbWUgaW50ZXJ2YWwhJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnVmZmVyZWRUaW1lc3Bhbih0aW1lc3BhbjogVGltZXNwYW4sIGZhY3RvcjogbnVtYmVyLCBtYXhCdWZmZXJJbk1zPzogbnVtYmVyKTogVGltZXNwYW4ge1xuICAgICAgICBjb25zdCBkdXJhdGlvbk1pbGxpcyA9IHRoaXMuZ2V0RHVyYXRpb24odGltZXNwYW4pLmFzTWlsbGlzZWNvbmRzKCk7XG4gICAgICAgIGxldCBidWZmZXIgPSBkdXJhdGlvbk1pbGxpcyAqIGZhY3RvcjtcbiAgICAgICAgaWYgKG1heEJ1ZmZlckluTXMgJiYgYnVmZmVyID4gbWF4QnVmZmVySW5Ncykge1xuICAgICAgICAgICAgYnVmZmVyID0gbWF4QnVmZmVySW5NcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcm9tID0gdGltZXNwYW4uZnJvbSAtIGJ1ZmZlcjtcbiAgICAgICAgY29uc3QgdG8gPSB0aW1lc3Bhbi50byArIGJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIG5ldyBUaW1lc3Bhbihmcm9tLCB0byk7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmVUaW1lc3BhbihwYXJhbTogc3RyaW5nLCB0aW1lc3BhbjogVGltZXNwYW4pIHtcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2F2ZShwYXJhbSwgdGltZXNwYW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkVGltZXNwYW4ocGFyYW06IHN0cmluZyk6IFRpbWVzcGFuIHtcbiAgICAgICAgY29uc3QganNvbiA9IHRoaXMubG9jYWxTdG9yYWdlLmxvYWQocGFyYW0pO1xuICAgICAgICBpZiAoanNvbikge1xuICAgICAgICAgICAgcmV0dXJuIHBsYWluVG9DbGFzczxUaW1lc3Bhbiwgb2JqZWN0PihUaW1lc3BhbiwganNvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRUaW1lc3BhbigpOiBUaW1lc3BhbiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbW9tZW50KG5vdykuc3RhcnRPZignZGF5JykudW5peCgpICogMTAwMDtcbiAgICAgICAgY29uc3QgZW5kID0gbW9tZW50KG5vdykuZW5kT2YoJ2RheScpLnVuaXgoKSAqIDEwMDA7XG4gICAgICAgIHJldHVybiBuZXcgVGltZXNwYW4oc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdlbmVyYXRlVGltZXNwYW4oZGVmYXVsdFRpbWVzZXJpZXNUaW1lZHVyYXRpb246IE1vbWVudElucHV0T2JqZWN0LCBhbGlnbjogJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCcpOiBUaW1lc3BhbiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IGQgPSBkdXJhdGlvbihkZWZhdWx0VGltZXNlcmllc1RpbWVkdXJhdGlvbik7XG4gICAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRpbWVzcGFuKG5vdy5nZXRUaW1lKCksIG5vdy5nZXRUaW1lKCkgKyBkLmFzTWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRpbWVzcGFuKG5vdy5nZXRUaW1lKCkgLSBkLmFzTWlsbGlzZWNvbmRzKCksIG5vdy5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29uc3QgaGFsZiA9IGQuYXNNaWxsaXNlY29uZHMoKSAvIDI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUaW1lc3Bhbihub3cuZ2V0VGltZSgpIC0gaGFsZiwgbm93LmdldFRpbWUoKSArIGhhbGYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREdXJhdGlvbih0aW1lc3BhbjogVGltZXNwYW4pOiBtb21lbnQuRHVyYXRpb24ge1xuICAgICAgICBjb25zdCBmcm9tID0gbW9tZW50KHRpbWVzcGFuLmZyb20pO1xuICAgICAgICBjb25zdCB0byA9IG1vbWVudCh0aW1lc3Bhbi50byk7XG4gICAgICAgIHJldHVybiBtb21lbnQuZHVyYXRpb24odG8uZGlmZihmcm9tKSk7XG4gICAgfVxuXG59XG4iXX0=