ngx-mat-calendar
Version:
A datepicker with nepali and english calendar support
123 lines • 19.6 kB
JavaScript
import * as moment_ from 'moment';
const moment = moment_;
// @dynamic
export class DateValidators {
static dateMinimum(date) {
return (control) => {
control["minDate"] = date;
if (control.value == null) {
return null;
}
const FORMAT_DATE = 'YYYY-MM-DD';
const controlDate = moment(control.value, FORMAT_DATE);
if (!controlDate.isValid()) {
return null;
}
const validationDate = moment(date, FORMAT_DATE);
return controlDate.isSameOrAfter(validationDate, 'day') ? null : {
'date-minimum': {
'date-minimum': validationDate.format(FORMAT_DATE),
'actual': controlDate.format(FORMAT_DATE)
}
};
};
}
static dateMaximum(date) {
return (control) => {
control["maxDate"] = date;
if (control.value == null) {
return null;
}
const FORMAT_DATE = 'YYYY-MM-DD';
const controlDate = moment(control.value, FORMAT_DATE);
if (!controlDate.isValid()) {
return null;
}
const validationDate = moment(date, FORMAT_DATE);
return controlDate.isSameOrBefore(validationDate, "day") ? null : {
'date-maximum': {
'date-maximum': validationDate.format(FORMAT_DATE),
'actual': controlDate.format(FORMAT_DATE)
}
};
};
}
static dateBetween(startDate, endDate) {
return (control) => {
control["maxDate"] = endDate;
control["minDate"] = startDate;
const FORMAT_DATE = 'YYYY-MM-DD';
if (control.value == null) {
return null;
}
const validationStartDate = moment(startDate, FORMAT_DATE);
const validationEndDate = moment(endDate, FORMAT_DATE);
if (control.value.start) {
const controlStartDate = moment(control.value.start, FORMAT_DATE);
const controlEndDate = moment(control.value.end, FORMAT_DATE);
if (!controlStartDate.isValid()) {
return null;
}
if (!controlEndDate.isValid()) {
return null;
}
if (controlStartDate.isSame(controlEndDate, 'day')) {
const isSameOrAfter = controlStartDate.isSameOrAfter(validationStartDate, 'day');
const isSameOrBefore = controlStartDate.isSameOrBefore(validationEndDate, 'day');
if (!(isSameOrAfter && isSameOrBefore)) {
return {
'date-between': {
'date-minimum': validationStartDate.format(FORMAT_DATE),
'date-maximum': validationEndDate.format(FORMAT_DATE),
'actual ': `Start: ${controlStartDate.format(FORMAT_DATE)} End: ${controlEndDate.format(FORMAT_DATE)}`
}
};
}
}
else {
const sameMin = controlStartDate.isSameOrAfter(validationStartDate, 'day') && controlStartDate.isSameOrBefore(validationEndDate, 'day');
const sameMax = controlEndDate.isSameOrAfter(validationStartDate, 'day') && controlEndDate.isSameOrBefore(validationEndDate, 'day');
if (sameMax && sameMin) {
return null;
}
const isStartDateInRange = controlStartDate.isBetween(validationStartDate, validationEndDate);
const isEndDateInRange = controlEndDate.isBetween(validationStartDate, validationEndDate);
if (isStartDateInRange && isEndDateInRange) {
return null;
}
else {
return {
'date-between': {
'date-minimum': validationStartDate.format(FORMAT_DATE),
'date-maximum': validationEndDate.format(FORMAT_DATE),
'actual ': `Start: ${controlStartDate.format(FORMAT_DATE)} End: ${controlEndDate.format(FORMAT_DATE)}`
}
};
}
}
}
else {
const controlDate = moment(control.value, FORMAT_DATE);
if (!controlDate.isValid()) {
return null;
}
const sameMin = controlDate.isSame(validationStartDate, 'day');
if (sameMin) {
return null;
}
const sameMax = controlDate.isSame(validationEndDate, 'day');
if (sameMax) {
return null;
}
return controlDate.isBetween(validationStartDate, validationEndDate) ? null : {
'date-between': {
'date-minimum': validationStartDate.format(FORMAT_DATE),
'date-maximum': validationEndDate.format(FORMAT_DATE),
'actual': controlDate.format(FORMAT_DATE)
}
};
}
};
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiQzovbGlicmFyeS9NYXRDYWxlbmRhci9wcm9qZWN0cy9uZ3gtbWF0LWNhbGVuZGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi92YWxpZGF0b3JzL2RhdGUudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUN2QixXQUFXO0FBQ1gsTUFBTSxPQUFPLGNBQWM7SUFDdkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFVO1FBQ3pCLE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFO1lBRXpELE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7WUFFMUIsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtnQkFDdkIsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQztZQUNqQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztZQUV2RCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN4QixPQUFPLElBQUksQ0FBQzthQUNmO1lBRUQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztZQUVqRCxPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxjQUFjLEVBQUU7b0JBQ1osY0FBYyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO29CQUNsRCxRQUFRLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7aUJBQzVDO2FBQ0osQ0FBQztRQUNOLENBQUMsQ0FBQztJQUNO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QVcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDeEIsT0FBTyxJQUFJLENBQUM7aUJBQ2Y7Z0JBRUQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxPQUFPLEVBQUU7b0JBQ1QsT0FBTyxJQUFJLENBQUM7aUJBQ2Y7Z0JBQ0QsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxPQUFPLEVBQUU7b0JBQ1QsT0FBTyxJQUFJLENBQUM7aUJBQ2Y7Z0JBR0QsT0FBTyxXQUFXLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQzFFLGNBQWMsRUFBRTt3QkFDWixjQUFjLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQzt3QkFDdkQsY0FBYyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7d0JBQ3JELFFBQVEsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztxQkFDNUM7aUJBQ0osQ0FBQTthQUNKO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xyXG5jb25zdCBtb21lbnQgPSBtb21lbnRfO1xyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgRGF0ZVZhbGlkYXRvcnMge1xyXG4gICAgc3RhdGljIGRhdGVNaW5pbXVtKGRhdGU6IERhdGUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcblxyXG4gICAgICAgICAgICBjb250cm9sW1wibWluRGF0ZVwiXSA9IGRhdGU7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBGT1JNQVRfREFURSA9ICdZWVlZLU1NLUREJztcclxuICAgICAgICAgICAgY29uc3QgY29udHJvbERhdGUgPSBtb21lbnQoY29udHJvbC52YWx1ZSwgRk9STUFUX0RBVEUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjb250cm9sRGF0ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uRGF0ZSA9IG1vbWVudChkYXRlLCBGT1JNQVRfREFURSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gY29udHJvbERhdGUuaXNTYW1lT3JBZnRlcih2YWxpZGF0aW9uRGF0ZSwgJ2RheScpID8gbnVsbCA6IHtcclxuICAgICAgICAgICAgICAgICdkYXRlLW1pbmltdW0nOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGUtbWluaW11bSc6IHZhbGlkYXRpb25EYXRlLmZvcm1hdChGT1JNQVRfREFURSksXHJcbiAgICAgICAgICAgICAgICAgICAgJ2FjdHVhbCc6IGNvbnRyb2xEYXRlLmZvcm1hdChGT1JNQVRfREFURSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBkYXRlTWF4aW11bShkYXRlOiBEYXRlKTogVmFsaWRhdG9yRm4ge1xyXG5cclxuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnRyb2xbXCJtYXhEYXRlXCJdID0gZGF0ZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IEZPUk1BVF9EQVRFID0gJ1lZWVktTU0tREQnO1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sRGF0ZSA9IG1vbWVudChjb250cm9sLnZhbHVlLCBGT1JNQVRfREFURSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbnRyb2xEYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25EYXRlID0gbW9tZW50KGRhdGUsIEZPUk1BVF9EQVRFKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sRGF0ZS5pc1NhbWVPckJlZm9yZSh2YWxpZGF0aW9uRGF0ZSwgXCJkYXlcIikgPyBudWxsIDoge1xyXG4gICAgICAgICAgICAgICAgJ2RhdGUtbWF4aW11bSc6IHtcclxuICAgICAgICAgICAgICAgICAgICAnZGF0ZS1tYXhpbXVtJzogdmFsaWRhdGlvbkRhdGUuZm9ybWF0KEZPUk1BVF9EQVRFKSxcclxuICAgICAgICAgICAgICAgICAgICAnYWN0dWFsJzogY29udHJvbERhdGUuZm9ybWF0KEZPUk1BVF9EQVRFKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRhdGVCZXR3ZWVuKHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnRyb2xbXCJtYXhEYXRlXCJdID0gZW5kRGF0ZTtcclxuICAgICAgICAgICAgY29udHJvbFtcIm1pbkRhdGVcIl0gPSBzdGFydERhdGU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBGT1JNQVRfREFURSA9ICdZWVlZLU1NLUREJztcclxuXHJcblxyXG4gICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvblN0YXJ0RGF0ZSA9IG1vbWVudChzdGFydERhdGUsIEZPUk1BVF9EQVRFKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbkVuZERhdGUgPSBtb21lbnQoZW5kRGF0ZSwgRk9STUFUX0RBVEUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUuc3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xTdGFydERhdGUgPSBtb21lbnQoY29udHJvbC52YWx1ZS5zdGFydCwgRk9STUFUX0RBVEUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJvbEVuZERhdGUgPSBtb21lbnQoY29udHJvbC52YWx1ZS5lbmQsIEZPUk1BVF9EQVRFKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2xTdGFydERhdGUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sRW5kRGF0ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbFN0YXJ0RGF0ZS5pc1NhbWUoY29udHJvbEVuZERhdGUsICdkYXknKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2FtZU9yQWZ0ZXIgPSBjb250cm9sU3RhcnREYXRlLmlzU2FtZU9yQWZ0ZXIodmFsaWRhdGlvblN0YXJ0RGF0ZSwgJ2RheScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2FtZU9yQmVmb3JlID0gY29udHJvbFN0YXJ0RGF0ZS5pc1NhbWVPckJlZm9yZSh2YWxpZGF0aW9uRW5kRGF0ZSwgJ2RheScpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShpc1NhbWVPckFmdGVyICYmIGlzU2FtZU9yQmVmb3JlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGUtYmV0d2Vlbic6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0ZS1taW5pbXVtJzogdmFsaWRhdGlvblN0YXJ0RGF0ZS5mb3JtYXQoRk9STUFUX0RBVEUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRlLW1heGltdW0nOiB2YWxpZGF0aW9uRW5kRGF0ZS5mb3JtYXQoRk9STUFUX0RBVEUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3R1YWwgJzogYFN0YXJ0OiAke2NvbnRyb2xTdGFydERhdGUuZm9ybWF0KEZPUk1BVF9EQVRFKX0gRW5kOiAke2NvbnRyb2xFbmREYXRlLmZvcm1hdChGT1JNQVRfREFURSl9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzYW1lTWluID0gY29udHJvbFN0YXJ0RGF0ZS5pc1NhbWVPckFmdGVyKHZhbGlkYXRpb25TdGFydERhdGUsICdkYXknKSAmJiBjb250cm9sU3RhcnREYXRlLmlzU2FtZU9yQmVmb3JlKHZhbGlkYXRpb25FbmREYXRlLCAnZGF5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2FtZU1heCA9IGNvbnRyb2xFbmREYXRlLmlzU2FtZU9yQWZ0ZXIodmFsaWRhdGlvblN0YXJ0RGF0ZSwgJ2RheScpICYmIGNvbnRyb2xFbmREYXRlLmlzU2FtZU9yQmVmb3JlKHZhbGlkYXRpb25FbmREYXRlLCAnZGF5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNhbWVNYXggJiYgc2FtZU1pbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTdGFydERhdGVJblJhbmdlID0gY29udHJvbFN0YXJ0RGF0ZS5pc0JldHdlZW4odmFsaWRhdGlvblN0YXJ0RGF0ZSwgdmFsaWRhdGlvbkVuZERhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRW5kRGF0ZUluUmFuZ2UgPSBjb250cm9sRW5kRGF0ZS5pc0JldHdlZW4odmFsaWRhdGlvblN0YXJ0RGF0ZSwgdmFsaWRhdGlvbkVuZERhdGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdGFydERhdGVJblJhbmdlICYmIGlzRW5kRGF0ZUluUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRlLWJldHdlZW4nOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGUtbWluaW11bSc6IHZhbGlkYXRpb25TdGFydERhdGUuZm9ybWF0KEZPUk1BVF9EQVRFKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0ZS1tYXhpbXVtJzogdmFsaWRhdGlvbkVuZERhdGUuZm9ybWF0KEZPUk1BVF9EQVRFKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0dWFsICc6IGBTdGFydDogJHtjb250cm9sU3RhcnREYXRlLmZvcm1hdChGT1JNQVRfREFURSl9IEVuZDogJHtjb250cm9sRW5kRGF0ZS5mb3JtYXQoRk9STUFUX0RBVEUpfWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xEYXRlID0gbW9tZW50KGNvbnRyb2wudmFsdWUsIEZPUk1BVF9EQVRFKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2xEYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNhbWVNaW4gPSBjb250cm9sRGF0ZS5pc1NhbWUodmFsaWRhdGlvblN0YXJ0RGF0ZSwgJ2RheScpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNhbWVNaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNhbWVNYXggPSBjb250cm9sRGF0ZS5pc1NhbWUodmFsaWRhdGlvbkVuZERhdGUsICdkYXknKTtcclxuICAgICAgICAgICAgICAgIGlmIChzYW1lTWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sRGF0ZS5pc0JldHdlZW4odmFsaWRhdGlvblN0YXJ0RGF0ZSwgdmFsaWRhdGlvbkVuZERhdGUpID8gbnVsbCA6IHtcclxuICAgICAgICAgICAgICAgICAgICAnZGF0ZS1iZXR3ZWVuJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGF0ZS1taW5pbXVtJzogdmFsaWRhdGlvblN0YXJ0RGF0ZS5mb3JtYXQoRk9STUFUX0RBVEUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGF0ZS1tYXhpbXVtJzogdmFsaWRhdGlvbkVuZERhdGUuZm9ybWF0KEZPUk1BVF9EQVRFKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdHVhbCc6IGNvbnRyb2xEYXRlLmZvcm1hdChGT1JNQVRfREFURSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59Il19