UNPKG

@kre-form/ant

Version:

317 lines 31 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, forwardRef, Input } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import * as differenceInCalendarDays_ from "date-fns/difference_in_calendar_days"; import * as moment_ from "moment"; /** @type {?} */ var moment = moment_; /** @type {?} */ var differenceInCalendarDays = differenceInCalendarDays_; /** @type {?} */ var FORM_POSITION_PICKER_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return DatetimeComponent; })), multi: true, }; var DatetimeComponent = /** @class */ (function () { function DatetimeComponent() { var _this = this; this._value = ""; this._index = 0; this.disabled = false; this.type = "datetime"; this.maxDate = ""; this.minDate = ""; this._onTouched = (/** * @return {?} */ function () { }); this._valueChange = (/** * @return {?} */ function () { }); this.disabledDate = (/** * @param {?} current * @return {?} */ function (current) { if (!!_this.maxDate && !!_this.minDate) { return (differenceInCalendarDays(current, new Date(_this.maxDate)) > 0 || differenceInCalendarDays(current, new Date((/** @type {?} */ (_this.minDate)))) < 0); } else if (!!_this.maxDate && !_this.minDate) { return differenceInCalendarDays(current, new Date(_this.maxDate)) > 0; } else if (!_this.maxDate && !!_this.minDate) { return differenceInCalendarDays(current, new Date(_this.minDate)) < 0; } else { return false; } }); this.disabledDateTime = (/** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var nzDisabledHours = []; /** @type {?} */ var nzDisabledMinutes = []; if (!!_this.maxDate && !!_this.minDate) { if (differenceInCalendarDays(e, new Date(_this.minDate)) === 0) { nzDisabledHours = _this.range(-1, new Date(_this.minDate).getHours()); if (!!e && new Date(_this.minDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(-1, new Date(_this.minDate).getMinutes()); } } if (differenceInCalendarDays(e, new Date(_this.maxDate)) === 0) { nzDisabledHours = tslib_1.__spread(nzDisabledHours, _this.range(new Date(_this.maxDate).getHours() + 1, 24)); if (!!e && new Date(_this.maxDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = tslib_1.__spread(nzDisabledMinutes, _this.range(new Date(_this.maxDate).getMinutes(), 60)); } } } else if (!!_this.maxDate && !_this.minDate) { if (!!e && differenceInCalendarDays(e, new Date(_this.maxDate)) === 0) { nzDisabledHours = _this.range(new Date(_this.maxDate).getHours() + 1, 24); if (!!e && new Date(_this.maxDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(new Date(_this.maxDate).getMinutes(), 60); } } } else if (!_this.maxDate && !!_this.minDate) { if (!!e && differenceInCalendarDays(e, new Date(_this.minDate)) === 0) { nzDisabledHours = _this.range(0, new Date(_this.minDate).getHours()); if (!!e && new Date(_this.minDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(-1, new Date(_this.minDate).getMinutes()); } } } return { nzDisabledHours: (/** * @return {?} */ function () { return nzDisabledHours; }), nzDisabledMinutes: (/** * @return {?} */ function () { return nzDisabledMinutes; }), nzDisabledSeconds: (/** * @return {?} */ function () { return []; }), }; }); this.disabledHours = (/** * @return {?} */ function () { /** @type {?} */ var nzDisabledHours = []; if (!!_this.maxDate && !!_this.minDate) { nzDisabledHours = _this.range(-1, new Date(_this.minDate).getHours()); nzDisabledHours = nzDisabledHours.concat(_this.range(new Date(_this.maxDate).getHours() + 1, 24)); } else if (!!_this.maxDate && !_this.minDate) { nzDisabledHours = _this.range(new Date(_this.maxDate).getHours() + 1, 24); } else if (!_this.maxDate && !!_this.minDate) { nzDisabledHours = _this.range(0, new Date(_this.minDate).getHours()); } return nzDisabledHours; }); this.disabledMinutes = (/** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var nzDisabledMinutes = []; if (!!_this.maxDate && !!_this.minDate) { if (differenceInCalendarDays(e, new Date(_this.minDate)) === 0) { if (!!e && new Date(_this.minDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(-1, new Date(_this.minDate).getMinutes()); } } if (differenceInCalendarDays(e, new Date(_this.maxDate)) === 0) { if (!!e && new Date(_this.maxDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(new Date(_this.maxDate).getMinutes(), 60); } } } else if (!!_this.maxDate && !_this.minDate) { if (!!e && differenceInCalendarDays(e, new Date(_this.maxDate)) === 0) { if (!!e && new Date(_this.maxDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(new Date(_this.maxDate).getMinutes(), 60); } } } else if (!_this.maxDate && !!_this.minDate) { if (!!e && differenceInCalendarDays(e, new Date(_this.minDate)) === 0) { if (!!e && new Date(_this.minDate).getHours() - e.getHours() === 0) { nzDisabledMinutes = _this.range(-1, new Date(_this.minDate).getMinutes()); } } } return nzDisabledMinutes; }); } /** * @param {?} value * @return {?} */ DatetimeComponent.prototype.writeValue = /** * @param {?} value * @return {?} */ function (value) { this._value = value; }; /** * @param {?} fn * @return {?} */ DatetimeComponent.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this._valueChange = fn; }; /** * @param {?} fn * @return {?} */ DatetimeComponent.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { this._onTouched = fn; }; /** * @param {?} isDisabled * @return {?} */ DatetimeComponent.prototype.setDisabledState = /** * @param {?} isDisabled * @return {?} */ function (isDisabled) { this.disabled = isDisabled; }; /** * @param {?} color * @return {?} */ DatetimeComponent.prototype.select = /** * @param {?} color * @return {?} */ function (color) { if (this.disabled) { return; } this._value = color; this._valueChange(color); }; /** * @return {?} */ DatetimeComponent.prototype.ngOnInit = /** * @return {?} */ function () { }; // differenceInCalendarDays(e: Date | null, date: Date): number { // if (!!e) { // return e.getDate() - date.getDate(); // } else { // return 0; // } // } // differenceInCalendarDays(e: Date | null, date: Date): number { // if (!!e) { // return e.getDate() - date.getDate(); // } else { // return 0; // } // } /** * @param {?} start * @param {?} end * @return {?} */ DatetimeComponent.prototype.range = // differenceInCalendarDays(e: Date | null, date: Date): number { // if (!!e) { // return e.getDate() - date.getDate(); // } else { // return 0; // } // } /** * @param {?} start * @param {?} end * @return {?} */ function (start, end) { /** @type {?} */ var result = []; for (var i = start; i < end; i++) { result.push(i); } return result; }; DatetimeComponent.decorators = [ { type: Component, args: [{ selector: "demo-datetime", template: "<ng-container [ngSwitch]=\"type\">\n <ng-container *ngSwitchCase=\"'date'\">\n <nz-date-picker\n nzFormat=\"yyyy/MM/dd\"\n [(ngModel)]=\"_value\"\n [nzDisabledDate]=\"disabledDate\"\n ></nz-date-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'year'\">\n <nz-year-picker\n nzFormat=\"yyyy\"\n [(ngModel)]=\"_value\"\n [nzDisabledDate]=\"disabledDate\"\n ></nz-year-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'month'\">\n <nz-month-picker\n nzFormat=\"yyyy/MM\"\n [(ngModel)]=\"_value\"\n [nzDisabledDate]=\"disabledDate\"\n ></nz-month-picker>\n </ng-container>\n <ng-container *ngSwitchCase=\"'time'\">\n <nz-time-picker\n nzFormat=\"HH:mm\"\n [(ngModel)]=\"_value\"\n nzClearText=\"\"\n [nzDisabledHours]=\"disabledHours\"\n [nzDisabledMinutes]=\"disabledMinutes\"\n ></nz-time-picker>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <nz-date-picker\n nzShowTime\n [nzShowTime]=\"{ nzFormat: 'HH:mm' }\"\n nzFormat=\"yyyy/MM/dd HH:mm\"\n [(ngModel)]=\"_value\"\n [nzDisabledDate]=\"disabledDate\"\n [nzDisabledTime]=\"disabledDateTime\"\n ></nz-date-picker>\n </ng-container>\n</ng-container>\n", providers: [FORM_POSITION_PICKER_VALUE_ACCESSOR], styles: [""] }] } ]; /** @nocollapse */ DatetimeComponent.ctorParameters = function () { return []; }; DatetimeComponent.propDecorators = { type: [{ type: Input }], maxDate: [{ type: Input }], minDate: [{ type: Input }] }; return DatetimeComponent; }()); export { DatetimeComponent }; if (false) { /** @type {?} */ DatetimeComponent.prototype._value; /** @type {?} */ DatetimeComponent.prototype._index; /** @type {?} */ DatetimeComponent.prototype.disabled; /** @type {?} */ DatetimeComponent.prototype.type; /** @type {?} */ DatetimeComponent.prototype.maxDate; /** @type {?} */ DatetimeComponent.prototype.minDate; /** @type {?} */ DatetimeComponent.prototype._onTouched; /** @type {?} */ DatetimeComponent.prototype._valueChange; /** @type {?} */ DatetimeComponent.prototype.disabledDate; /** @type {?} */ DatetimeComponent.prototype.disabledDateTime; /** @type {?} */ DatetimeComponent.prototype.disabledHours; /** @type {?} */ DatetimeComponent.prototype.disabledMinutes; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGtyZS1mb3JtL2FudC8iLCJzb3VyY2VzIjpbImxpYi9kZXNpZ24vZXZlbnQvZGF0ZXRpbWUvZGF0ZXRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEtBQUsseUJBQXlCLE1BQU0sc0NBQXNDLENBQUM7QUFFbEYsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7O0lBQzVCLE1BQU0sR0FBRyxPQUFPOztJQUNoQix3QkFBd0IsR0FBRyx5QkFBeUI7O0lBRXBELG1DQUFtQyxHQUFRO0lBQy9DLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLGNBQU0sT0FBQSxpQkFBaUIsRUFBakIsQ0FBaUIsRUFBQztJQUNoRCxLQUFLLEVBQUUsSUFBSTtDQUNaO0FBQ0Q7SUFlRTtRQUFBLGlCQUFnQjtRQVJoQixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFFbkIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUNqQixTQUFJLEdBQVcsVUFBVSxDQUFDO1FBQzFCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQU85QixlQUFVOzs7UUFBUSxjQUFPLENBQUMsRUFBQztRQUMzQixpQkFBWTs7O1FBQVEsY0FBTyxDQUFDLEVBQUM7UUFtQjdCLGlCQUFZOzs7O1FBQUcsVUFBQyxPQUFhO1lBQzNCLElBQUksQ0FBQyxDQUFDLEtBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3BDLE9BQU8sQ0FDTCx3QkFBd0Is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Q0FBbUMsQ0FBQzs7aUJBQ2pEOzs7Ozt1QkFNRSxLQUFLOzBCQUNMLEtBQUs7MEJBQ0wsS0FBSzs7SUEwS1Isd0JBQUM7Q0FBQSxBQXZMRCxJQXVMQztTQWpMWSxpQkFBaUI7OztJQUM1QixtQ0FBb0I7O0lBQ3BCLG1DQUFtQjs7SUFFbkIscUNBQTBCOztJQUMxQixpQ0FBbUM7O0lBQ25DLG9DQUE4Qjs7SUFDOUIsb0NBQThCOztJQU85Qix1Q0FBMkI7O0lBQzNCLHlDQUE2Qjs7SUFtQjdCLHlDQWFFOztJQUVGLDZDQXNERTs7SUFFRiwwQ0FjRTs7SUFFRiw0Q0F3Q0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgKiBhcyBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXNfIGZyb20gXCJkYXRlLWZucy9kaWZmZXJlbmNlX2luX2NhbGVuZGFyX2RheXNcIjtcbmltcG9ydCB7IEZpZWxkVHlwZSwgS3JlRm9ybUNvbW1vblNlcnZpY2UgfSBmcm9tIFwiQGtyZS1mb3JtL2NvcmVcIjtcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSBcIm1vbWVudFwiO1xuY29uc3QgbW9tZW50ID0gbW9tZW50XztcbmNvbnN0IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5c187XG5cbmNvbnN0IEZPUk1fUE9TSVRJT05fUElDS0VSX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRldGltZUNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlLFxufTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJkZW1vLWRhdGV0aW1lXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZGF0ZXRpbWUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2RhdGV0aW1lLmNvbXBvbmVudC5zY3NzXCJdLFxuICBwcm92aWRlcnM6IFtGT1JNX1BPU0lUSU9OX1BJQ0tFUl9WQUxVRV9BQ0NFU1NPUl0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGV0aW1lQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gIF92YWx1ZTogc3RyaW5nID0gXCJcIjtcbiAgX2luZGV4OiBudW1iZXIgPSAwO1xuXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZyA9IFwiZGF0ZXRpbWVcIjtcbiAgQElucHV0KCkgbWF4RGF0ZTogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgbWluRGF0ZTogc3RyaW5nID0gXCJcIjtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBfb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcbiAgX3ZhbHVlQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5fdmFsdWVDaGFuZ2UgPSBmbjtcbiAgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cbiAgc2VsZWN0KGNvbG9yOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl92YWx1ZSA9IGNvbG9yO1xuICAgIHRoaXMuX3ZhbHVlQ2hhbmdlKGNvbG9yKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge31cbiAgZGlzYWJsZWREYXRlID0gKGN1cnJlbnQ6IERhdGUpOiBib29sZWFuID0+IHtcbiAgICBpZiAoISF0aGlzLm1heERhdGUgJiYgISF0aGlzLm1pbkRhdGUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhjdXJyZW50LCBuZXcgRGF0ZSh0aGlzLm1heERhdGUpKSA+IDAgfHxcbiAgICAgICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGN1cnJlbnQsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSEpKSA8IDBcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghIXRoaXMubWF4RGF0ZSAmJiAhdGhpcy5taW5EYXRlKSB7XG4gICAgICByZXR1cm4gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGN1cnJlbnQsIG5ldyBEYXRlKHRoaXMubWF4RGF0ZSkpID4gMDtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLm1heERhdGUgJiYgISF0aGlzLm1pbkRhdGUpIHtcbiAgICAgIHJldHVybiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoY3VycmVudCwgbmV3IERhdGUodGhpcy5taW5EYXRlKSkgPCAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIGRpc2FibGVkRGF0ZVRpbWUgPSAoZTogRGF0ZSkgPT4ge1xuICAgIGxldCBuekRpc2FibGVkSG91cnM6IG51bWJlcltdID0gW107XG4gICAgbGV0IG56RGlzYWJsZWRNaW51dGVzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaWYgKCEhdGhpcy5tYXhEYXRlICYmICEhdGhpcy5taW5EYXRlKSB7XG4gICAgICBpZiAoZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGUsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkpID09PSAwKSB7XG4gICAgICAgIG56RGlzYWJsZWRIb3VycyA9IHRoaXMucmFuZ2UoLTEsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0SG91cnMoKSk7XG5cbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICAtMSxcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0TWludXRlcygpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhlLCBuZXcgRGF0ZSh0aGlzLm1heERhdGUpKSA9PT0gMCkge1xuICAgICAgICBuekRpc2FibGVkSG91cnMgPSBbXG4gICAgICAgICAgLi4ubnpEaXNhYmxlZEhvdXJzLFxuICAgICAgICAgIC4uLnRoaXMucmFuZ2UobmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRIb3VycygpICsgMSwgMjQpLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICghIWUgJiYgbmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRIb3VycygpIC0gZS5nZXRIb3VycygpID09PSAwKSB7XG4gICAgICAgICAgbnpEaXNhYmxlZE1pbnV0ZXMgPSBbXG4gICAgICAgICAgICAuLi5uekRpc2FibGVkTWludXRlcyxcbiAgICAgICAgICAgIC4uLnRoaXMucmFuZ2UobmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRNaW51dGVzKCksIDYwKSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghIXRoaXMubWF4RGF0ZSAmJiAhdGhpcy5taW5EYXRlKSB7XG4gICAgICBpZiAoISFlICYmIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhlLCBuZXcgRGF0ZSh0aGlzLm1heERhdGUpKSA9PT0gMCkge1xuICAgICAgICBuekRpc2FibGVkSG91cnMgPSB0aGlzLnJhbmdlKG5ldyBEYXRlKHRoaXMubWF4RGF0ZSkuZ2V0SG91cnMoKSArIDEsIDI0KTtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgIDYwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMubWF4RGF0ZSAmJiAhIXRoaXMubWluRGF0ZSkge1xuICAgICAgaWYgKCEhZSAmJiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy5taW5EYXRlKSkgPT09IDApIHtcbiAgICAgICAgbnpEaXNhYmxlZEhvdXJzID0gdGhpcy5yYW5nZSgwLCBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldEhvdXJzKCkpO1xuICAgICAgICBpZiAoISFlICYmIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0SG91cnMoKSAtIGUuZ2V0SG91cnMoKSA9PT0gMCkge1xuICAgICAgICAgIG56RGlzYWJsZWRNaW51dGVzID0gdGhpcy5yYW5nZShcbiAgICAgICAgICAgIC0xLFxuICAgICAgICAgICAgbmV3IERhdGUodGhpcy5taW5EYXRlKS5nZXRNaW51dGVzKClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuekRpc2FibGVkSG91cnM6ICgpID0+IG56RGlzYWJsZWRIb3VycyxcbiAgICAgIG56RGlzYWJsZWRNaW51dGVzOiAoKSA9PiBuekRpc2FibGVkTWludXRlcyxcbiAgICAgIG56RGlzYWJsZWRTZWNvbmRzOiAoKSA9PiBbXSxcbiAgICB9O1xuICB9O1xuXG4gIGRpc2FibGVkSG91cnMgPSAoKSA9PiB7XG4gICAgbGV0IG56RGlzYWJsZWRIb3VyczogbnVtYmVyW10gPSBbXTtcblxuICAgIGlmICghIXRoaXMubWF4RGF0ZSAmJiAhIXRoaXMubWluRGF0ZSkge1xuICAgICAgbnpEaXNhYmxlZEhvdXJzID0gdGhpcy5yYW5nZSgtMSwgbmV3IERhdGUodGhpcy5taW5EYXRlKS5nZXRIb3VycygpKTtcbiAgICAgIG56RGlzYWJsZWRIb3VycyA9IG56RGlzYWJsZWRIb3Vycy5jb25jYXQoXG4gICAgICAgIHRoaXMucmFuZ2UobmV3IERhdGUodGhpcy5tYXhEYXRlKS5nZXRIb3VycygpICsgMSwgMjQpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoISF0aGlzLm1heERhdGUgJiYgIXRoaXMubWluRGF0ZSkge1xuICAgICAgbnpEaXNhYmxlZEhvdXJzID0gdGhpcy5yYW5nZShuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldEhvdXJzKCkgKyAxLCAyNCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5tYXhEYXRlICYmICEhdGhpcy5taW5EYXRlKSB7XG4gICAgICBuekRpc2FibGVkSG91cnMgPSB0aGlzLnJhbmdlKDAsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0SG91cnMoKSk7XG4gICAgfVxuICAgIHJldHVybiBuekRpc2FibGVkSG91cnM7XG4gIH07XG5cbiAgZGlzYWJsZWRNaW51dGVzID0gKGU6IERhdGUpID0+IHtcbiAgICBsZXQgbnpEaXNhYmxlZE1pbnV0ZXM6IG51bWJlcltdID0gW107XG4gICAgaWYgKCEhdGhpcy5tYXhEYXRlICYmICEhdGhpcy5taW5EYXRlKSB7XG4gICAgICBpZiAoZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGUsIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkpID09PSAwKSB7XG4gICAgICAgIGlmICghIWUgJiYgbmV3IERhdGUodGhpcy5taW5EYXRlKS5nZXRIb3VycygpIC0gZS5nZXRIb3VycygpID09PSAwKSB7XG4gICAgICAgICAgbnpEaXNhYmxlZE1pbnV0ZXMgPSB0aGlzLnJhbmdlKFxuICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldE1pbnV0ZXMoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy5tYXhEYXRlKSkgPT09IDApIHtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgIDYwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoISF0aGlzLm1heERhdGUgJiYgIXRoaXMubWluRGF0ZSkge1xuICAgICAgaWYgKCEhZSAmJiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy5tYXhEYXRlKSkgPT09IDApIHtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICBuZXcgRGF0ZSh0aGlzLm1heERhdGUpLmdldE1pbnV0ZXMoKSxcbiAgICAgICAgICAgIDYwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMubWF4RGF0ZSAmJiAhIXRoaXMubWluRGF0ZSkge1xuICAgICAgaWYgKCEhZSAmJiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZSwgbmV3IERhdGUodGhpcy5taW5EYXRlKSkgPT09IDApIHtcbiAgICAgICAgaWYgKCEhZSAmJiBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpLmdldEhvdXJzKCkgLSBlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICBuekRpc2FibGVkTWludXRlcyA9IHRoaXMucmFuZ2UoXG4gICAgICAgICAgICAtMSxcbiAgICAgICAgICAgIG5ldyBEYXRlKHRoaXMubWluRGF0ZSkuZ2V0TWludXRlcygpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuekRpc2FibGVkTWludXRlcztcbiAgfTtcbiAgLy8gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGU6IERhdGUgfCBudWxsLCBkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgLy8gICBpZiAoISFlKSB7XG4gIC8vICAgICByZXR1cm4gZS5nZXREYXRlKCkgLSBkYXRlLmdldERhdGUoKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgcmV0dXJuIDA7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcmFuZ2Uoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19