com.phloxui
Version:
PhloxUI Ng2+ Framework
262 lines (261 loc) • 25.5 kB
JavaScript
/**
* @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==