UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

262 lines (261 loc) 25.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ var DateTimeUtils = /** @class */ (function () { function DateTimeUtils() { } /** * @param {?} date1 * @param {?} date2 * @return {?} */ DateTimeUtils.diffDate = /** * @param {?} date1 * @param {?} date2 * @return {?} */ function (date1, date2) { var /** @type {?} */ result = []; if (date1 === null || typeof date1 === 'undefined') { return result; } if (date2 === null || typeof date2 === 'undefined') { return result; } var /** @type {?} */ diff = (date2.getTime() - date1.getTime()) / 1000; diff = Math.abs(Math.floor(diff)); var /** @type {?} */ days = Math.floor(diff / (24 * 60 * 60)); var /** @type {?} */ leftSec = diff - days * 24 * 60 * 60; var /** @type {?} */ hrs = Math.floor(leftSec / (60 * 60)); leftSec = leftSec - hrs * 60 * 60; var /** @type {?} */ min = Math.floor(leftSec / (60)); leftSec = leftSec - min * 60; result.push(days); // days result.push(hrs); // hrs result.push(min); // min result.push(leftSec); // leftSec return result; }; /** * @param {?} date1 * @param {?} date2 * @return {?} */ DateTimeUtils.diffDateInHour = /** * @param {?} date1 * @param {?} date2 * @return {?} */ function (date1, date2) { if (date1 === null || typeof date1 === 'undefined') { return 0; } if (date2 === null || typeof date2 === 'undefined') { return 0; } var /** @type {?} */ hours = Math.abs(date1.getTime() - date2.getTime()) / (60 * 60 * 1000); return hours; }; /** * @param {?} data * @return {?} */ DateTimeUtils.getDateFromAny = /** * @param {?} data * @return {?} */ function (data) { var /** @type {?} */ resolveDate = null; if (data !== null && typeof data !== 'undefined') { if (typeof data === 'string') { // If arg "pattern" is provided, put it at the first of the list to // try to resolve with the given "pattern" first. try { resolveDate = Date.parseExact(data, DateTimeUtils.PATTERNS); } catch (/** @type {?} */ err) { } if (resolveDate === null || typeof resolveDate === 'undefined') { try { resolveDate = Date.parse(data); } catch (/** @type {?} */ err) { } } } else if (typeof data === 'number') { try { resolveDate = new Date(data); } catch (/** @type {?} */ err) { } } else if (typeof data === 'object') { if (data instanceof Date) { resolveDate = new Date(data.getTime()); } } } return resolveDate; }; /** * @param {?} date * @return {?} */ DateTimeUtils.getTimeMessage = /** * @param {?} date * @return {?} */ function (date) { if (date === null || typeof date === 'undefined') { return ""; } var /** @type {?} */ now = new Date(); return this.getCompareTimeMessage(date, now); }; /** * @param {?} compareTo * @param {?} date * @return {?} */ DateTimeUtils.getCompareTimeMessage = /** * @param {?} compareTo * @param {?} date * @return {?} */ function (compareTo, date) { if (compareTo === null || typeof compareTo === 'undefined') { return ""; } if (date === null || typeof date === 'undefined') { return ""; } var /** @type {?} */ result = ""; // time since message was sent in seconds var /** @type {?} */ seconds = (date.getTime() - compareTo.getTime()) / 1000; var /** @type {?} */ min = seconds / 60; var /** @type {?} */ hour = min / 60; var /** @type {?} */ days = hour / 24; var /** @type {?} */ weeks = days / 7; var /** @type {?} */ months = weeks / 4; var /** @type {?} */ years = months / 12; // format string if (seconds < 15) { // < 15 secs result = 'Just now'; } else if (seconds < 60) { // < 1 min result = 'Within a minute ago'; } else if (seconds < 300) { // < 5 mins result = 'A few minutes ago'; } else if (seconds < 3600) { // < 1 hour result = Math.floor(min) + ' minutes ago'; } else if (seconds < 86400) { // < 1 day result = 'About ' + Math.floor(hour) + ' hours ago'; } else if (seconds < 172800) { // < 2 days result = 'Yesterday'; } else if (seconds < 604800) { // < 7 days result = Math.floor(days) + ' days ago'; } else if (seconds < 691200) { // < 8 days result = 'A week ago'; } else if (seconds < 2628000) { // < 1 month result = Math.floor(weeks) + ' weeks ago'; } else if (seconds < 5256000) { // < 2 months result = 'A month ago'; } else if (seconds < 31536000) { // < 12 months result = Math.floor(months) + ' months ago'; } else if (seconds < 63072000) { // < 2 years result = 'A year ago'; } else if (seconds >= 63072000) { // >= 2 years result = Math.floor(years) + ' years ago'; } return result; }; /** * @param {?} timeZone * @return {?} */ DateTimeUtils.parseTimeZone = /** * @param {?} timeZone * @return {?} */ function (timeZone) { var /** @type {?} */ isHasAddOrSub; var /** @type {?} */ isHasColon; var /** @type {?} */ tzDiff = 0; timeZone = timeZone.replace(/\./g, ":"); isHasAddOrSub = /^(\+|\-)/i.test(timeZone); // + or - isHasColon = /(\:)/i.test(timeZone); // : var /** @type {?} */ addOrSubIndex = -1; var /** @type {?} */ operationStr = ""; if (isHasAddOrSub) { var /** @type {?} */ addIndex = timeZone.indexOf("+"); var /** @type {?} */ subIndex = timeZone.indexOf("-"); if (addIndex !== -1) { addOrSubIndex = addIndex; } else { addOrSubIndex = subIndex; } if (addOrSubIndex !== -1) { operationStr = timeZone.substring(0, addOrSubIndex + 1); } } try { var /** @type {?} */ tz = void 0; var /** @type {?} */ colon = ":"; if (isHasColon) { var /** @type {?} */ stHour = addOrSubIndex + 1; var /** @type {?} */ edHour = timeZone.indexOf(colon); var /** @type {?} */ stMin = edHour + 1; var /** @type {?} */ edMin = timeZone.length; var /** @type {?} */ hour = Number(timeZone.substring(stHour, edHour)); var /** @type {?} */ min = Number(timeZone.substring(stMin, edMin)); tz = Number(operationStr + (hour * 100 + min)); } else { tz = Number(timeZone); } tzDiff = isNaN(tz) ? 0 : tz; } catch (/** @type {?} */ e) { } return tzDiff; }; DateTimeUtils.PATTERNS = [ "yyyy-MM-dd'T'HH:mm:ssZ", "dd/MM/yyyy", "yyyy-MM-dd" ]; return DateTimeUtils; }()); export { DateTimeUtils }; function DateTimeUtils_tsickle_Closure_declarations() { /** @type {?} */ DateTimeUtils.PATTERNS; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZVRpbWVVdGlscy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL3NoYXJlL3V0aWxzL0RhdGVUaW1lVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBaUJnQixzQkFBUTs7Ozs7Y0FBQyxLQUFXLEVBQUUsS0FBVztRQUU3QyxxQkFBSSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBQzFCLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNuRCxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ2Y7UUFDRCxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDbkQsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUNmO1FBRUQscUJBQUksSUFBSSxHQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM5RCxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFbEMscUJBQUksSUFBSSxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JELHFCQUFJLE9BQU8sR0FBVyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBRWpELHFCQUFJLEdBQUcsR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxPQUFPLEdBQUcsR0FBRyxHQUFHLEVBQUUs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LENBQUMsQ0FBQzthQUN2QjtZQUVELE1BQU0sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzdCO1FBQUMsS0FBSyxDQUFBLENBQUMsaUJBQUEsQ0FBQyxFQUFDLENBQUM7U0FDVjtRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUE7OzZCQTNNb0I7UUFFakMsd0JBQXdCO1FBU3hCLFlBQVk7UUFDWixZQUFZO0tBQUM7d0JBZGpCOztTQUFhLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgRGF0ZVRpbWVVdGlscyB7XG5cbiAgcHVibGljIHN0YXRpYyBQQVRURVJOUzogc3RyaW5nW10gPSBbXG4gICAgLy8gXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnWidcIiwgXG4gICAgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3NaXCIsXG4gICAgLy8gXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3NcIiwgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MuU1NTJ1onXCIsXG4gICAgLy8gXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MuU1NTWlwiLCBcInl5eXktTU0tZGQgSEg6bW06c3NcIixcbiAgICAvLyBcIk1NL2RkL3l5eXkgSEg6bW06c3NcIiwgXCJNTS9kZC95eXl5J1QnSEg6bW06c3MuU1NTJ1onXCIsXG4gICAgLy8gXCJNTS9kZC95eXl5J1QnSEg6bW06c3MuU1NTWlwiLCBcIk1NL2RkL3l5eXknVCdISDptbTpzcy5TU1NcIixcbiAgICAvLyBcIk1NL2RkL3l5eXknVCdISDptbTpzc1pcIiwgXCJNTS9kZC95eXl5J1QnSEg6bW06c3NcIixcbiAgICAvLyBcInl5eXk6TU06ZGQgSEg6bW06c3NcIiwgXCJ5eXl5TU1kZFwiLFxuICAgIC8vIFwieXl5eS1NTS1kZFRISDptbTpzcy5zc3NaXCIsIFwieXl5eS1NTS1kZCdUJ0hIOm1tOnNzLnNzc1pcIiwgXCJkZC9NTS95eXl5IEhIOm1tOnNzXCIsXG4gICAgLy8gXCJ5eXl5LU1NLWRkVEhIOm1tOnNzLlNTU1pcIiwgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MuU1NTWlwiLCBcInl5eXktTU0tZGQgSEg6bW06c3NcIixcbiAgICBcImRkL01NL3l5eXlcIixcbiAgICBcInl5eXktTU0tZGRcIl07XG5cblxuICBwdWJsaWMgc3RhdGljIGRpZmZEYXRlKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IG51bWJlcltdIHtcblxuICAgIGxldCByZXN1bHQ6IG51bWJlcltdID0gW107XG4gICAgaWYgKGRhdGUxID09PSBudWxsIHx8IHR5cGVvZiBkYXRlMSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmIChkYXRlMiA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0ZTIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGxldCBkaWZmOiBudW1iZXIgPSAoZGF0ZTIuZ2V0VGltZSgpIC0gZGF0ZTEuZ2V0VGltZSgpKSAvIDEwMDA7XG4gICAgZGlmZiA9IE1hdGguYWJzKE1hdGguZmxvb3IoZGlmZikpO1xuXG4gICAgbGV0IGRheXM6IG51bWJlciA9IE1hdGguZmxvb3IoZGlmZiAvICgyNCAqIDYwICogNjApKTtcbiAgICBsZXQgbGVmdFNlYzogbnVtYmVyID0gZGlmZiAtIGRheXMgKiAyNCAqIDYwICogNjA7XG5cbiAgICBsZXQgaHJzOiBudW1iZXIgPSBNYXRoLmZsb29yKGxlZnRTZWMgLyAoNjAgKiA2MCkpO1xuICAgIGxlZnRTZWMgPSBsZWZ0U2VjIC0gaHJzICogNjAgKiA2MDtcblxuICAgIGxldCBtaW46IG51bWJlciA9IE1hdGguZmxvb3IobGVmdFNlYyAvICg2MCkpO1xuICAgIGxlZnRTZWMgPSBsZWZ0U2VjIC0gbWluICogNjA7XG5cblxuICAgIHJlc3VsdC5wdXNoKGRheXMpOy8vIGRheXNcbiAgICByZXN1bHQucHVzaChocnMpOy8vIGhyc1xuICAgIHJlc3VsdC5wdXNoKG1pbik7Ly8gbWluXG4gICAgcmVzdWx0LnB1c2gobGVmdFNlYyk7Ly8gbGVmdFNlY1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGlmZkRhdGVJbkhvdXIoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKTogbnVtYmVyIHtcbiAgICBpZiAoZGF0ZTEgPT09IG51bGwgfHwgdHlwZW9mIGRhdGUxID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGlmIChkYXRlMiA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0ZTIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBsZXQgaG91cnMgPSBNYXRoLmFicyhkYXRlMS5nZXRUaW1lKCkgLSBkYXRlMi5nZXRUaW1lKCkpIC8gKDYwICogNjAgKiAxMDAwKTtcblxuICAgIHJldHVybiBob3VycztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RGF0ZUZyb21BbnkoZGF0YTogYW55KTogRGF0ZSB7XG4gICAgbGV0IHJlc29sdmVEYXRlOiBEYXRlID0gbnVsbDtcblxuICAgIGlmIChkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBJZiBhcmcgXCJwYXR0ZXJuXCIgaXMgcHJvdmlkZWQsIHB1dCBpdCBhdCB0aGUgZmlyc3Qgb2YgdGhlIGxpc3QgdG9cbiAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgd2l0aCB0aGUgZ2l2ZW4gXCJwYXR0ZXJuXCIgZmlyc3QuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzb2x2ZURhdGUgPSBEYXRlLnBhcnNlRXhhY3QoZGF0YSwgRGF0ZVRpbWVVdGlscy5QQVRURVJOUyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc29sdmVEYXRlID09PSBudWxsIHx8IHR5cGVvZiByZXNvbHZlRGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzb2x2ZURhdGUgPSBEYXRlLnBhcnNlKGRhdGEpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXNvbHZlRGF0ZSA9IG5ldyBEYXRlKGRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgcmVzb2x2ZURhdGUgPSBuZXcgRGF0ZShkYXRhLmdldFRpbWUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb2x2ZURhdGU7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFRpbWVNZXNzYWdlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGlmIChkYXRlID09PSBudWxsIHx8IHR5cGVvZiBkYXRlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgbGV0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDb21wYXJlVGltZU1lc3NhZ2UoZGF0ZSwgbm93KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Q29tcGFyZVRpbWVNZXNzYWdlKGNvbXBhcmVUbzogRGF0ZSwgZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbXBhcmVUbyA9PT0gbnVsbCB8fCB0eXBlb2YgY29tcGFyZVRvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgaWYgKGRhdGUgPT09IG51bGwgfHwgdHlwZW9mIGRhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICAvLyB0aW1lIHNpbmNlIG1lc3NhZ2Ugd2FzIHNlbnQgaW4gc2Vjb25kc1xuICAgIGxldCBzZWNvbmRzID0gKGRhdGUuZ2V0VGltZSgpIC0gY29tcGFyZVRvLmdldFRpbWUoKSkgLyAxMDAwO1xuICAgIGxldCBtaW4gPSBzZWNvbmRzIC8gNjA7XG4gICAgbGV0IGhvdXIgPSBtaW4gLyA2MDtcbiAgICBsZXQgZGF5cyA9IGhvdXIgLyAyNDtcbiAgICBsZXQgd2Vla3MgPSBkYXlzIC8gNztcbiAgICBsZXQgbW9udGhzID0gd2Vla3MgLyA0O1xuICAgIGxldCB5ZWFycyA9IG1vbnRocyAvIDEyO1xuXG4gICAgLy8gZm9ybWF0IHN0cmluZ1xuICAgIGlmIChzZWNvbmRzIDwgMTUpIHsgLy8gPCAxNSBzZWNzXG4gICAgICByZXN1bHQgPSAnSnVzdCBub3cnO1xuICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDYwKSB7IC8vIDwgMSBtaW5cbiAgICAgIHJlc3VsdCA9ICdXaXRoaW4gYSBtaW51dGUgYWdvJztcbiAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCAzMDApIHsgLy8gPCA1IG1pbnNcbiAgICAgIHJlc3VsdCA9ICdBIGZldyBtaW51dGVzIGFnbyc7XG4gICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgMzYwMCkgeyAvLyA8IDEgaG91clxuICAgICAgcmVzdWx0ID0gTWF0aC5mbG9vcihtaW4pICsgJyBtaW51dGVzIGFnbyc7XG4gICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgODY0MDApIHsgLy8gPCAxIGRheVxuICAgICAgcmVzdWx0ID0gJ0Fib3V0ICcgKyBNYXRoLmZsb29yKGhvdXIpICsgJyBob3VycyBhZ28nO1xuICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDE3MjgwMCkgeyAvLyA8IDIgZGF5c1xuICAgICAgcmVzdWx0ID0gJ1llc3RlcmRheSc7XG4gICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgNjA0ODAwKSB7IC8vIDwgNyBkYXlzXG4gICAgICByZXN1bHQgPSBNYXRoLmZsb29yKGRheXMpICsgJyBkYXlzIGFnbyc7XG4gICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgNjkxMjAwKSB7IC8vIDwgOCBkYXlzXG4gICAgICByZXN1bHQgPSAnQSB3ZWVrIGFnbyc7XG4gICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgMjYyODAwMCkgeyAvLyA8IDEgbW9udGhcbiAgICAgIHJlc3VsdCA9IE1hdGguZmxvb3Iod2Vla3MpICsgJyB3ZWVrcyBhZ28nO1xuICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDUyNTYwMDApIHsgLy8gPCAyIG1vbnRoc1xuICAgICAgcmVzdWx0ID0gJ0EgbW9udGggYWdvJztcbiAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCAzMTUzNjAwMCkgeyAvLyA8IDEyIG1vbnRoc1xuICAgICAgcmVzdWx0ID0gTWF0aC5mbG9vcihtb250aHMpICsgJyBtb250aHMgYWdvJztcbiAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCA2MzA3MjAwMCkgeyAvLyA8IDIgeWVhcnNcbiAgICAgIHJlc3VsdCA9ICdBIHllYXIgYWdvJztcbiAgICB9IGVsc2UgaWYgKHNlY29uZHMgPj0gNjMwNzIwMDApIHsgLy8gPj0gMiB5ZWFyc1xuICAgICAgcmVzdWx0ID0gTWF0aC5mbG9vcih5ZWFycykgKyAnIHllYXJzIGFnbyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcGFyc2VUaW1lWm9uZSh0aW1lWm9uZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgaXNIYXNBZGRPclN1YjogYm9vbGVhbjtcbiAgICBsZXQgaXNIYXNDb2xvbjogYm9vbGVhbjtcbiAgICBsZXQgdHpEaWZmOiBudW1iZXIgPSAwO1xuXG4gICAgdGltZVpvbmUgPSB0aW1lWm9uZS5yZXBsYWNlKC9cXC4vZywgXCI6XCIpO1xuXG4gICAgaXNIYXNBZGRPclN1YiA9IC9eKFxcK3xcXC0pL2kudGVzdCh0aW1lWm9uZSk7IC8vICsgb3IgLVxuICAgIGlzSGFzQ29sb24gPSAvKFxcOikvaS50ZXN0KHRpbWVab25lKTsgLy8gOlxuXG4gICAgbGV0IGFkZE9yU3ViSW5kZXggPSAtMTtcbiAgICBsZXQgb3BlcmF0aW9uU3RyOiBzdHJpbmcgPSBcIlwiO1xuXG4gICAgaWYoaXNIYXNBZGRPclN1Yikge1xuICAgICAgbGV0IGFkZEluZGV4OiBudW1iZXIgPSB0aW1lWm9uZS5pbmRleE9mKFwiK1wiKTtcbiAgICAgIGxldCBzdWJJbmRleDogbnVtYmVyID0gdGltZVpvbmUuaW5kZXhPZihcIi1cIik7XG5cbiAgICAgIGlmKGFkZEluZGV4ICE9PSAtMSkge1xuICAgICAgICBhZGRPclN1YkluZGV4ID0gYWRkSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRPclN1YkluZGV4ID0gc3ViSW5kZXg7XG4gICAgICB9XG5cbiAgICAgIGlmKGFkZE9yU3ViSW5kZXggIT09IC0xKXtcbiAgICAgICAgb3BlcmF0aW9uU3RyID0gdGltZVpvbmUuc3Vic3RyaW5nKDAsIGFkZE9yU3ViSW5kZXgrMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ejogbnVtYmVyO1xuICAgICAgbGV0IGNvbG9uID0gXCI6XCI7XG5cbiAgICAgIGlmKGlzSGFzQ29sb24pIHtcbiAgICAgICAgbGV0IHN0SG91cjogbnVtYmVyID0gYWRkT3JTdWJJbmRleCArIDE7XG4gICAgICAgIGxldCBlZEhvdXI6IG51bWJlciA9IHRpbWVab25lLmluZGV4T2YoY29sb24pO1xuXG4gICAgICAgIGxldCBzdE1pbjogbnVtYmVyID0gZWRIb3VyICsxO1xuICAgICAgICBsZXQgZWRNaW46IG51bWJlciA9IHRpbWVab25lLmxlbmd0aDtcblxuICAgICAgICBsZXQgaG91cjogbnVtYmVyID0gTnVtYmVyKHRpbWVab25lLnN1YnN0cmluZyhzdEhvdXIsIGVkSG91cikpO1xuICAgICAgICBsZXQgbWluOiBudW1iZXIgPSBOdW1iZXIodGltZVpvbmUuc3Vic3RyaW5nKHN0TWluLCBlZE1pbikpO1xuICAgICAgICB0eiA9IE51bWJlcihvcGVyYXRpb25TdHIgKyAoaG91ciAqIDEwMCArIG1pbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHogPSBOdW1iZXIodGltZVpvbmUpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0ekRpZmYgPSBpc05hTih0eikgPyAwIDogdHo7XG4gICAgfSBjYXRjaChlKXtcbiAgICB9XG5cbiAgICByZXR1cm4gdHpEaWZmXG4gIH1cbn1cbiJdfQ==