UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

256 lines (255 loc) 20.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { AbstractPipeFormatter } from './AbstractPipeFormatter'; import { Option } from '../../decorator/Option.decorator'; import { DateTimeUtils } from '../utils/DateTimeUtils'; var /** @type {?} */ NAME = 'date'; var /** @type {?} */ DEFAULT_DATA_YEAR_OFFSET = 0; var /** @type {?} */ DEFAULT_PATTERN = 'dd/MM/yyyy HH:mm:ss'; var /** @type {?} */ DEFAULT_YEAR_OFFSET = 0; var DateFormatter = /** @class */ (function (_super) { tslib_1.__extends(DateFormatter, _super); function DateFormatter() { return _super.call(this, NAME) || this; } /** * @param {?} data * @return {?} */ DateFormatter.prototype.format = /** * @param {?} data * @return {?} */ function (data) { var /** @type {?} */ date = DateTimeUtils.getDateFromAny(data); if (date === null || typeof date === 'undefined') { return null; } var /** @type {?} */ dataYearOffset = 0; if (typeof data !== 'number' && !(data instanceof Date)) { if (this.dataYearOffset !== null && this.dataYearOffset !== undefined) { dataYearOffset = this.dataYearOffset; } else { dataYearOffset = DEFAULT_DATA_YEAR_OFFSET; } } var /** @type {?} */ yearOffset = this.yearOffset; if (yearOffset === null || yearOffset === undefined) { yearOffset = DEFAULT_YEAR_OFFSET; } // Browser's date api will only parse as gregorian calendar // So, we've to "-dateYearOffset then + yearOffset back". date.addYears(-dataYearOffset + yearOffset); if (this.timezone !== null) { // See: https://code.google.com/archive/p/datejs/wikis/APIDocumentation.wiki var /** @type {?} */ offsetHours = -Math.floor(date.getTimezoneOffset() / 60); var /** @type {?} */ offsetMins = -(date.getTimezoneOffset() % 60); var /** @type {?} */ curOffset = offsetHours * 100 + offsetMins; if (typeof this.timezone === 'string') { // Set by timezone name var /** @type {?} */ tz = DateTimeUtils.parseTimeZone(this.timezone); // date.setTimezone(this.timezone); date.setTimezoneOffset(2 * curOffset - tz); } else if (typeof this.timezone === 'number') { // Set by timezone offset // getTimezoneOffset() returns offset in minutes according to UTC // setTimezoneOffset() accept number in format 0700, -0800 date.setTimezoneOffset(2 * curOffset - this.timezone); } } if (this.pattern !== null && this.pattern !== undefined) { return date.toString(this.pattern); } else { return date.toString(DEFAULT_PATTERN); } }; /** * @param {?} data * @return {?} */ DateFormatter.prototype.parse = /** * @param {?} data * @return {?} */ function (data) { if (data === null || typeof data === 'undefined') { return null; } var /** @type {?} */ date = Date.parse(data); var /** @type {?} */ yearOffset = this.yearOffset; if (yearOffset === null || yearOffset === undefined) { yearOffset = DEFAULT_YEAR_OFFSET; } // Browser's date api will only parse as gregorian calendar // So, we've to "-yearOffset back". date.addYears(-yearOffset); return date; }; /** * @return {?} */ DateFormatter.prototype.getDataYearOffset = /** * @return {?} */ function () { return this.dataYearOffset; }; /** * @param {?} offset * @return {?} */ DateFormatter.prototype.setDataYearOffset = /** * @param {?} offset * @return {?} */ function (offset) { this.dataYearOffset = offset; }; /** * @return {?} */ DateFormatter.prototype.getPattern = /** * @return {?} */ function () { return this.pattern; }; /** * @param {?} pattern * @return {?} */ DateFormatter.prototype.setPattern = /** * @param {?} pattern * @return {?} */ function (pattern) { this.pattern = pattern; }; /** * @return {?} */ DateFormatter.prototype.getYearOffset = /** * @return {?} */ function () { return this.yearOffset; }; /** * @param {?} offset * @return {?} */ DateFormatter.prototype.setYearOffset = /** * @param {?} offset * @return {?} */ function (offset) { this.yearOffset = offset; }; /** * @return {?} */ DateFormatter.prototype.getTimeZone = /** * @return {?} */ function () { return this.timezone; }; /** * @param {?} timezone * @return {?} */ DateFormatter.prototype.setTimeZone = /** * @param {?} timezone * @return {?} */ function (timezone) { this.timezone = timezone; }; /** * @param {?} args * @return {?} */ DateFormatter.prototype.parseToOptions = /** * @param {?} args * @return {?} */ function (args) { var /** @type {?} */ pattern = undefined; var /** @type {?} */ timezone = undefined; var /** @type {?} */ yearOffset = undefined; var /** @type {?} */ dataYearOffset = undefined; if (args !== null && typeof args !== 'undefined') { if (args.length > 0) { pattern = args[0]; } if (args.length > 1) { timezone = args[1]; } if (args.length > 2) { yearOffset = args[2]; } if (args.length > 3) { dataYearOffset = args[3]; } else { dataYearOffset = yearOffset; } } return { pattern: pattern, timezone: timezone, yearOffset: yearOffset, dataYearOffset: dataYearOffset }; }; DateFormatter.NAME = NAME; DateFormatter.DEFAULT_DATA_YEAR_OFFSET = DEFAULT_DATA_YEAR_OFFSET; DateFormatter.DEFAULT_PATTERN = DEFAULT_PATTERN; DateFormatter.DEFAULT_YEAR_OFFSET = DEFAULT_YEAR_OFFSET; tslib_1.__decorate([ Option() // Offset to gregorian calendar year // Ex: Bhuddist calendar is offset = 543 , tslib_1.__metadata("design:type", Number) ], DateFormatter.prototype, "dataYearOffset", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], DateFormatter.prototype, "pattern", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Number) ], DateFormatter.prototype, "yearOffset", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], DateFormatter.prototype, "timezone", void 0); return DateFormatter; }(AbstractPipeFormatter)); export { DateFormatter }; function DateFormatter_tsickle_Closure_declarations() { /** @type {?} */ DateFormatter.NAME; /** @type {?} */ DateFormatter.DEFAULT_DATA_YEAR_OFFSET; /** @type {?} */ DateFormatter.DEFAULT_PATTERN; /** @type {?} */ DateFormatter.DEFAULT_YEAR_OFFSET; /** @type {?} */ DateFormatter.prototype.dataYearOffset; /** @type {?} */ DateFormatter.prototype.pattern; /** @type {?} */ DateFormatter.prototype.yearOffset; /** @type {?} */ DateFormatter.prototype.timezone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZUZvcm1hdHRlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL3NoYXJlL2Zvcm1hdHRlci9EYXRlRm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUl2RCxxQkFBTSxJQUFJLEdBQVcsTUFBTSxDQUFDO0FBRTVCLHFCQUFNLHdCQUF3QixHQUFXLENBQUMsQ0FBQztBQUMzQyxxQkFBTSxlQUFlLEdBQVcscUJBQXFCLENBQUM7QUFDdEQscUJBQU0sbUJBQW1CLEdBQVcsQ0FBQyxDQUFDOztJQUVILHlDQUFxQjtJQWtCdEQ7ZUFDRSxrQkFBTSxJQUFJLENBQUM7S0FDWjs7Ozs7SUFFTSw4QkFBTTs7OztjQUFDLElBQVM7UUFDckIscUJBQUksSUFBSSxHQUFTLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEQsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDYjtRQUVELHFCQUFJLGNBQWMsR0FBVyxDQUFDLENBQUM7UUFDL0IsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDdEUsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENB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LENBQUM7YUFDMUI7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixjQUFjLEdBQUcsVUFBVSxDQUFDO2FBQzdCO1NBQ0Y7UUFFRCxNQUFNLENBQUM7WUFDTCxPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsUUFBUTtZQUNsQixVQUFVLEVBQUUsVUFBVTtZQUN0QixjQUFjLEVBQUUsY0FBYztTQUMvQixDQUFDOzt5QkEzSmtDLElBQUk7NkNBQ2dCLHdCQUF3QjtvQ0FDakMsZUFBZTt3Q0FDWCxtQkFBbUI7O1FBRXZFLE1BQU0sRUFBRTtRQUNULG9DQUFvQztRQUNwQyx3Q0FBd0M7Ozs7O1FBRXZDLE1BQU0sRUFBRTs7OztRQUVSLE1BQU0sRUFBRTs7OztRQUVSLE1BQU0sRUFBRTs7O3dCQTNCWDtFQVltQyxxQkFBcUI7U0FBM0MsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0UGlwZUZvcm1hdHRlciB9IGZyb20gJy4vQWJzdHJhY3RQaXBlRm9ybWF0dGVyJztcclxuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBEYXRlVGltZVV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvRGF0ZVRpbWVVdGlscyc7XHJcbmltcG9ydCB7IFBobG94QXBwSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgUGhsb3hBcHBJbmZvIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L21vZGVsL1BobG94QXBwSW5mbyc7XHJcblxyXG5jb25zdCBOQU1FOiBzdHJpbmcgPSAnZGF0ZSc7XHJcblxyXG5jb25zdCBERUZBVUxUX0RBVEFfWUVBUl9PRkZTRVQ6IG51bWJlciA9IDA7XHJcbmNvbnN0IERFRkFVTFRfUEFUVEVSTjogc3RyaW5nID0gJ2RkL01NL3l5eXkgSEg6bW06c3MnO1xyXG5jb25zdCBERUZBVUxUX1lFQVJfT0ZGU0VUOiBudW1iZXIgPSAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIERhdGVGb3JtYXR0ZXIgZXh0ZW5kcyBBYnN0cmFjdFBpcGVGb3JtYXR0ZXIge1xyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5BTUU6IHN0cmluZyA9IE5BTUU7XHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0RBVEFfWUVBUl9PRkZTRVQ6IG51bWJlciA9IERFRkFVTFRfREFUQV9ZRUFSX09GRlNFVDtcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUEFUVEVSTjogc3RyaW5nID0gREVGQVVMVF9QQVRURVJOO1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9ZRUFSX09GRlNFVDogbnVtYmVyID0gREVGQVVMVF9ZRUFSX09GRlNFVDtcclxuXHJcbiAgQE9wdGlvbigpXHJcbiAgLy8gT2Zmc2V0IHRvIGdyZWdvcmlhbiBjYWxlbmRhciB5ZWFyXHJcbiAgLy8gRXg6IEJodWRkaXN0IGNhbGVuZGFyIGlzIG9mZnNldCA9IDU0M1xyXG4gIHByaXZhdGUgZGF0YVllYXJPZmZzZXQ6IG51bWJlcjtcclxuICBAT3B0aW9uKClcclxuICBwcml2YXRlIHBhdHRlcm46IHN0cmluZztcclxuICBAT3B0aW9uKClcclxuICBwcml2YXRlIHllYXJPZmZzZXQ6IG51bWJlcjtcclxuICBAT3B0aW9uKClcclxuICBwcml2YXRlIHRpbWV6b25lOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoTkFNRSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9ybWF0KGRhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICBsZXQgZGF0ZTogRGF0ZSA9IERhdGVUaW1lVXRpbHMuZ2V0RGF0ZUZyb21BbnkoZGF0YSk7XHJcblxyXG4gICAgaWYgKGRhdGUgPT09IG51bGwgfHwgdHlwZW9mIGRhdGUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXRhWWVhck9mZnNldDogbnVtYmVyID0gMDtcclxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ251bWJlcicgJiYgIShkYXRhIGluc3RhbmNlb2YgRGF0ZSkpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YVllYXJPZmZzZXQgIT09IG51bGwgJiYgdGhpcy5kYXRhWWVhck9mZnNldCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZGF0YVllYXJPZmZzZXQgPSB0aGlzLmRhdGFZZWFyT2Zmc2V0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRhdGFZZWFyT2Zmc2V0ID0gREVGQVVMVF9EQVRBX1lFQVJfT0ZGU0VUO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHllYXJPZmZzZXQ6IG51bWJlciA9IHRoaXMueWVhck9mZnNldDtcclxuICAgIGlmICh5ZWFyT2Zmc2V0ID09PSBudWxsIHx8IHllYXJPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB5ZWFyT2Zmc2V0ID0gREVGQVVMVF9ZRUFSX09GRlNFVDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBCcm93c2VyJ3MgZGF0ZSBhcGkgd2lsbCBvbmx5IHBhcnNlIGFzIGdyZWdvcmlhbiBjYWxlbmRhclxyXG4gICAgLy8gU28sIHdlJ3ZlIHRvIFwiLWRhdGVZZWFyT2Zmc2V0IHRoZW4gKyB5ZWFyT2Zmc2V0IGJhY2tcIi5cclxuICAgIGRhdGUuYWRkWWVhcnMoLWRhdGFZZWFyT2Zmc2V0ICsgeWVhck9mZnNldCk7XHJcblxyXG4gICAgaWYgKHRoaXMudGltZXpvbmUgIT09IG51bGwpIHtcclxuICAgICAgLy8gU2VlOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9hcmNoaXZlL3AvZGF0ZWpzL3dpa2lzL0FQSURvY3VtZW50YXRpb24ud2lraVxyXG5cclxuICAgICAgbGV0IG9mZnNldEhvdXJzOiBudW1iZXIgPSAtTWF0aC5mbG9vcihkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MCk7XHJcbiAgICAgIGxldCBvZmZzZXRNaW5zOiBudW1iZXIgPSAtKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAlIDYwKTtcclxuXHJcbiAgICAgIGxldCBjdXJPZmZzZXQ6IG51bWJlciA9IG9mZnNldEhvdXJzICogMTAwICsgb2Zmc2V0TWlucztcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy50aW1lem9uZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAvLyBTZXQgYnkgdGltZXpvbmUgbmFtZVxyXG5cclxuICAgICAgICBsZXQgdHo6IG51bWJlciA9IERhdGVUaW1lVXRpbHMucGFyc2VUaW1lWm9uZSh0aGlzLnRpbWV6b25lKTtcclxuICAgICAgICAvLyBkYXRlLnNldFRpbWV6b25lKHRoaXMudGltZXpvbmUpO1xyXG4gICAgICAgIGRhdGUuc2V0VGltZXpvbmVPZmZzZXQoMiAqIGN1ck9mZnNldCAtIHR6KTtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy50aW1lem9uZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAvLyBTZXQgYnkgdGltZXpvbmUgb2Zmc2V0XHJcblxyXG4gICAgICAgIC8vIGdldFRpbWV6b25lT2Zmc2V0KCkgcmV0dXJucyBvZmZzZXQgaW4gbWludXRlcyBhY2NvcmRpbmcgdG8gVVRDXHJcblxyXG4gICAgICAgIC8vIHNldFRpbWV6b25lT2Zmc2V0KCkgYWNjZXB0IG51bWJlciBpbiBmb3JtYXQgMDcwMCwgLTA4MDBcclxuICAgICAgICBkYXRlLnNldFRpbWV6b25lT2Zmc2V0KDIgKiBjdXJPZmZzZXQgLSB0aGlzLnRpbWV6b25lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhdHRlcm4gIT09IG51bGwgJiYgdGhpcy5wYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGRhdGUudG9TdHJpbmcodGhpcy5wYXR0ZXJuKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBkYXRlLnRvU3RyaW5nKERFRkFVTFRfUEFUVEVSTik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFyc2UoZGF0YTogc3RyaW5nKTogRGF0ZSB7XHJcbiAgICBpZiAoZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRhdGU6IERhdGUgPSBEYXRlLnBhcnNlKGRhdGEpO1xyXG5cclxuICAgIGxldCB5ZWFyT2Zmc2V0OiBudW1iZXIgPSB0aGlzLnllYXJPZmZzZXQ7XHJcbiAgICBpZiAoeWVhck9mZnNldCA9PT0gbnVsbCB8fCB5ZWFyT2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgeWVhck9mZnNldCA9IERFRkFVTFRfWUVBUl9PRkZTRVQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQnJvd3NlcidzIGRhdGUgYXBpIHdpbGwgb25seSBwYXJzZSBhcyBncmVnb3JpYW4gY2FsZW5kYXJcclxuICAgIC8vIFNvLCB3ZSd2ZSB0byBcIi15ZWFyT2Zmc2V0IGJhY2tcIi5cclxuICAgIGRhdGUuYWRkWWVhcnMoLXllYXJPZmZzZXQpO1xyXG5cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERhdGFZZWFyT2Zmc2V0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhWWVhck9mZnNldDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREYXRhWWVhck9mZnNldChvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhWWVhck9mZnNldCA9IG9mZnNldDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQYXR0ZXJuKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXR0ZXJuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFBhdHRlcm4ocGF0dGVybjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFllYXJPZmZzZXQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnllYXJPZmZzZXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0WWVhck9mZnNldChvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy55ZWFyT2Zmc2V0ID0gb2Zmc2V0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRpbWVab25lKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy50aW1lem9uZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRUaW1lWm9uZSh0aW1lem9uZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRpbWV6b25lID0gdGltZXpvbmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGFyc2VUb09wdGlvbnMoYXJnczogYW55W10pOiBhbnkge1xyXG4gICAgbGV0IHBhdHRlcm46IHN0cmluZyA9IHVuZGVmaW5lZDtcclxuICAgIGxldCB0aW1lem9uZTogYW55ID0gdW5kZWZpbmVkO1xyXG4gICAgbGV0IHllYXJPZmZzZXQ6IG51bWJlciA9IHVuZGVmaW5lZDtcclxuICAgIGxldCBkYXRhWWVhck9mZnNldDogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmIChhcmdzICE9PSBudWxsICYmIHR5cGVvZiBhcmdzICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcGF0dGVybiA9IGFyZ3NbMF07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHRpbWV6b25lID0gYXJnc1sxXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXJncy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgeWVhck9mZnNldCA9IGFyZ3NbMl07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMykge1xyXG4gICAgICAgIGRhdGFZZWFyT2Zmc2V0ID0gYXJnc1szXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkYXRhWWVhck9mZnNldCA9IHllYXJPZmZzZXQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwYXR0ZXJuOiBwYXR0ZXJuLFxyXG4gICAgICB0aW1lem9uZTogdGltZXpvbmUsXHJcbiAgICAgIHllYXJPZmZzZXQ6IHllYXJPZmZzZXQsXHJcbiAgICAgIGRhdGFZZWFyT2Zmc2V0OiBkYXRhWWVhck9mZnNldFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19