@elderbyte/ngx-starter 13.5.0 → 13.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/common/time/interval.mjs +10 -10
- package/esm2020/lib/common/time/time-util.mjs +9 -6
- package/fesm2015/elderbyte-ngx-starter.mjs +109 -105
- package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
- package/fesm2020/elderbyte-ngx-starter.mjs +109 -105
- package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/common/time/interval.d.ts +3 -3
- package/lib/common/time/time-util.d.ts +3 -2
- package/package.json +1 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Duration, Instant, LocalDate, Period } from '@js-joda/core';
|
|
1
|
+
import { Duration, Instant, LocalDate, nativeJs, Period, ZoneId } from '@js-joda/core';
|
|
3
2
|
import { TimeUtil } from './time-util';
|
|
4
3
|
import { PeriodDuration } from './period-duration';
|
|
5
4
|
export class Interval {
|
|
@@ -49,16 +48,17 @@ export class Interval {
|
|
|
49
48
|
}
|
|
50
49
|
/**
|
|
51
50
|
* Creates a Interval from a Date by spreading it to the begin and end of its day.
|
|
52
|
-
*
|
|
53
|
-
* @param localDate Date to spread
|
|
51
|
+
* @param date Date to spread
|
|
54
52
|
*/
|
|
55
|
-
static ofDayDate(
|
|
56
|
-
const
|
|
57
|
-
return Interval.
|
|
53
|
+
static ofDayDate(date) {
|
|
54
|
+
const localDate = LocalDate.from(nativeJs(date));
|
|
55
|
+
return Interval.ofDay(localDate, ZoneId.systemDefault());
|
|
58
56
|
}
|
|
59
57
|
static ofDay(day, zoneId) {
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
return Interval.betweenDays(day, day.plusDays(1), zoneId);
|
|
59
|
+
}
|
|
60
|
+
static betweenDays(startDayInclusive, endDayExclusive, zoneId) {
|
|
61
|
+
return Interval.of(startDayInclusive.atStartOfDay(zoneId).toInstant(), endDayExclusive.atStartOfDay(zoneId).toInstant());
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
64
|
* Creates a new interval with the given start time point
|
|
@@ -416,4 +416,4 @@ export class Interval {
|
|
|
416
416
|
return this.start.compareTo(other.start);
|
|
417
417
|
}
|
|
418
418
|
}
|
|
419
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vdGltZS9pbnRlcnZhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXlCLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBUWpELE1BQU0sT0FBTyxRQUFRO0lBR25COzs7O2dGQUk0RTtJQUU1RSxZQUNrQixLQUFjLEVBQ2QsR0FBWTtRQURaLFVBQUssR0FBTCxLQUFLLENBQVM7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFTO0lBQzFCLENBQUM7SUFFTDs7OztnRkFJNEU7SUFFNUU7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQ2pCLEdBQW1CO1FBRW5CLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEIsc0VBQXNFO1FBRXRFLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxD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QUssQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckU7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLFNBQVMsQ0FBQyxLQUFlO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0ZVV0aWx9IGZyb20gJy4vZGF0ZS11dGlsJztcbmltcG9ydCB7RHVyYXRpb24sIEluc3RhbnQsIExvY2FsRGF0ZSwgUGVyaW9kLCBUZW1wb3JhbEFtb3VudCwgWm9uZUlkfSBmcm9tICdAanMtam9kYS9jb3JlJztcbmltcG9ydCB7VGltZVV0aWx9IGZyb20gJy4vdGltZS11dGlsJztcbmltcG9ydCB7UGVyaW9kRHVyYXRpb259IGZyb20gJy4vcGVyaW9kLWR1cmF0aW9uJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIElTTy04NjAxIGludGVydmFsIHN0cmluZy5cbiAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gKi9cbmV4cG9ydCB0eXBlIElzb0ludGVydmFsU3RyID0gc3RyaW5nO1xuXG5leHBvcnQgY2xhc3MgSW50ZXJ2YWwge1xuXG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXJ0OiBJbnN0YW50LFxuICAgIHB1YmxpYyByZWFkb25seSBlbmQ6IEluc3RhbnRcbiAgKSB7IH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogU3RhdGljIEJ1aWxkZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogUGFyc2VzIGFuIElTTy04NjAxIGludGVydmFsIHN0cmluZy5cbiAgICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHBhcmFtIGlzb1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBwYXJzZShcbiAgICBpc286IElzb0ludGVydmFsU3RyXG4gICk6IEludGVydmFsIHtcbiAgICBjb25zdCBwYXJ0cyA9IGlzby5zcGxpdCgnLycpO1xuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZ2l2ZW4gc3RyaW5nIGlzIG5vdCBhIHZhbGlkIGlzbyBpbnRlcnZhbDogJyArIGlzbyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBJbnN0YW50LnBhcnNlKHBhcnRzWzBdKTtcblxuICAgIGNvbnN0IGVuZFN0ciA9IHBhcnRzWzFdO1xuXG4gICAgLy8gVGhlICdlbmQnIHBhcnQgY2FuIGVpdGhlciBiZSBhbiBpbnN0YW50IG9yIGEgZHVyYXRpb24gaW4gaXNvIGZvcm1hdFxuXG4gICAgaWYgKGVuZFN0ci5zdGFydHNXaXRoKCdQJykgfHwgZW5kU3RyLnN0YXJ0c1dpdGgoJy1QJykpIHtcblxuICAgICAgY29uc3QgZHVyYXRpb24gPSBEdXJhdGlvbi5wYXJzZShlbmRTdHIpO1xuXG4gICAgICByZXR1cm4gSW50ZXJ2YWwub2ZTdGFydEFuZE9mZnNldChcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGR1cmF0aW9uXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gSW50ZXJ2YWwub2YoXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBJbnN0YW50LnBhcnNlKGVuZFN0cilcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyB5ZXN0ZXJkYXkoem9uZUlkOiBab25lSWQpOiBJbnRlcnZhbCB7XG4gICAgcmV0dXJuIEludGVydmFsLm9mRGF5KFxuICAgICAgTG9jYWxEYXRlLm5vdygpLm1pbnVzRGF5cygxKSxcbiAgICAgIHpvbmVJZFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljICB0b21vcnJvdyh6b25lSWQ6IFpvbmVJZCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2ZEYXkoXG4gICAgICBMb2NhbERhdGUubm93KCkucGx1c0RheXMoMSksXG4gICAgICB6b25lSWRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB0b2RheSh6b25lSWQ6IFpvbmVJZCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2ZEYXkoXG4gICAgICBMb2NhbERhdGUubm93KCksXG4gICAgICB6b25lSWRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBJbnRlcnZhbCBmcm9tIGEgRGF0ZSBieSBzcHJlYWRpbmcgaXQgdG8gdGhlIGJlZ2luIGFuZCBlbmQgb2YgaXRzIGRheS5cbiAgICpcbiAgICogQHBhcmFtIGxvY2FsRGF0ZSBEYXRlIHRvIHNwcmVhZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZkRheURhdGUobG9jYWxEYXRlOiBEYXRlKTogSW50ZXJ2YWwge1xuICAgIGNvbnN0IHN0YXJ0ID0gVGltZVV0aWwuaW5zdGFudChEYXRlVXRpbC5zdGFydE9mRGF5KGxvY2FsRGF0ZSkpO1xuICAgIHJldHVybiBJbnRlcnZhbC5vZlN0YXJ0QW5kT2Zmc2V0KFxuICAgICAgc3RhcnQsXG4gICAgICBQZXJpb2Qub2ZEYXlzKDEpXG4gICAgKTtcbiAgfVxuXG5cbiAgcHVibGljIHN0YXRpYyBvZkRheShkYXk6IExvY2FsRGF0ZSwgem9uZUlkOiBab25lSWQpOiBJbnRlcnZhbCB7XG4gICAgY29uc3QgdG9kYXlTdGFydCA9IGRheS5hdFN0YXJ0T2ZEYXkoem9uZUlkKS50b0luc3RhbnQoKTtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2ZTdGFydEFuZE9mZnNldChcbiAgICAgIHRvZGF5U3RhcnQsXG4gICAgICBQZXJpb2Qub2ZEYXlzKDEpXG4gICAgKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW50ZXJ2YWwgd2l0aCB0aGUgZ2l2ZW4gc3RhcnQgdGltZSBwb2ludFxuICAgKiBhbmQgYSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIHVzZSBQZXJpb2QgZm9yIGRheXMgdG8gYWNjb3VudCBmb3Igem9uZSBzcGVjaWZpY1xuICAgKiB0aGluZ3MgbGlrZSBkYXlsaWdodCBzYXZpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBzdGFydEluY2x1c2l2ZVxuICAgKiBAcGFyYW0gb2Zmc2V0RXhjbHVzaXZlIEEgUGVyaW9kIG9yIER1cmF0aW9uIG9mZnNldC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2ZTdGFydEFuZE9mZnNldChzdGFydEluY2x1c2l2ZTogSW5zdGFudCwgb2Zmc2V0RXhjbHVzaXZlOiBUZW1wb3JhbEFtb3VudCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2YoXG4gICAgICBzdGFydEluY2x1c2l2ZSxcbiAgICAgIHN0YXJ0SW5jbHVzaXZlLnBsdXMob2Zmc2V0RXhjbHVzaXZlKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG9mKFxuICAgIHN0YXJ0SW5jbHVzaXZlOiBJbnN0YW50LFxuICAgIGVuZEV4Y2x1c2l2ZTogSW5zdGFudFxuICApOiBJbnRlcnZhbCB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcnZhbChcbiAgICAgIHN0YXJ0SW5jbHVzaXZlLFxuICAgICAgZW5kRXhjbHVzaXZlXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgb2ZEYXRlKFxuICAgIHN0YXJ0SW5jbHVzaXZlOiBEYXRlIHwgc3RyaW5nLFxuICAgIGVuZEV4Y2x1c2l2ZTogRGF0ZSB8IHN0cmluZ1xuICApOiBJbnRlcnZhbCB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcnZhbChcbiAgICAgIFRpbWVVdGlsLmluc3RhbnQoc3RhcnRJbmNsdXNpdmUpLFxuICAgICAgVGltZVV0aWwuaW5zdGFudChlbmRFeGNsdXNpdmUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHJhbmdlIGlzIGVtcHR5LlxuICAgKiA8cD5cbiAgICogQW4gZW1wdHkgcmFuZ2Ugb2NjdXJzIHdoZW4gdGhlIHN0YXJ0IGRhdGUgZXF1YWxzIHRoZSBpbmNsdXNpdmUgZW5kIGRhdGUuXG4gICAqXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcmFuZ2UgaXMgZW1wdHlcbiAgICovXG4gIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LmVxdWFscyh0aGlzLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBzdGFydCBvZiB0aGUgaW50ZXJ2YWwgaXMgdW5ib3VuZGVkLlxuICAgKlxuICAgKiBAcmV0dXJuIHRydWUgaWYgc3RhcnQgaXMgdW5ib3VuZGVkXG4gICAqL1xuICBwdWJsaWMgaXNVbmJvdW5kZWRTdGFydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC5lcXVhbHMoSW5zdGFudC5NSU4pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZW5kIG9mIHRoZSBpbnRlcnZhbCBpcyB1bmJvdW5kZWQuXG4gICAqXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiBlbmQgaXMgdW5ib3VuZGVkXG4gICAqL1xuICBwdWJsaWMgaXNVbmJvdW5kZWRFbmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5kLmVxdWFscyhJbnN0YW50Lk1BWCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgdG9EdXJhdGlvbigpOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIER1cmF0aW9uLmJldHdlZW4odGhpcy5zdGFydCwgdGhpcy5lbmQpO1xuICB9XG5cbiAgcHVibGljIHRvUGVyaW9kRHVyYXRpb24oem9uZTogWm9uZUlkKTogUGVyaW9kRHVyYXRpb24ge1xuICAgIHJldHVybiBQZXJpb2REdXJhdGlvbi5iZXR3ZWVuKFxuICAgICAgdGhpcy5zdGFydC5hdFpvbmUoem9uZSksXG4gICAgICB0aGlzLmVuZC5hdFpvbmUoem9uZSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCk6IElzb0ludGVydmFsU3RyIHtcbiAgICByZXR1cm4gdGhpcy50b0R1cmF0aW9uU3RyaW5nKCk7XG4gIH1cblxuICBwdWJsaWMgdG9JbnN0YW50U3RyaW5nKCk6IElzb0ludGVydmFsU3RyIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC50b1N0cmluZygpICsgJy8nICsgdGhpcy5lbmQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b0R1cmF0aW9uU3RyaW5nKCk6IElzb0ludGVydmFsU3RyIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC50b1N0cmluZygpICsgJy8nICsgdGhpcy50b0R1cmF0aW9uKCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgTW9kaWZpY2F0aW9uIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIHJhbmdlIHdpdGggdGhlIHNwZWNpZmllZCBzdGFydCBpbnN0YW50LlxuICAgKlxuICAgKiBAcGFyYW0gc3RhcnQgIHRoZSBzdGFydCBpbnN0YW50IGZvciB0aGUgbmV3IGludGVydmFsLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIGFuIGludGVydmFsIHdpdGggdGhlIGVuZCBmcm9tIHRoaXMgaW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgc3RhcnRcbiAgICogQHRocm93cyBEYXRlVGltZUV4Y2VwdGlvbiBpZiB0aGUgcmVzdWx0aW5nIGludGVydmFsIGhhcyBlbmQgYmVmb3JlIHN0YXJ0XG4gICAqL1xuICBwdWJsaWMgd2l0aFN0YXJ0KHN0YXJ0OiBJbnN0YW50KTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZihzdGFydCwgdGhpcy5lbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuZCBpbnN0YW50LlxuICAgKlxuICAgKiBAcGFyYW0gZW5kICB0aGUgZW5kIGluc3RhbnQgZm9yIHRoZSBuZXcgaW50ZXJ2YWwsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gYW4gaW50ZXJ2YWwgd2l0aCB0aGUgc3RhcnQgZnJvbSB0aGlzIGludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIGVuZFxuICAgKiBAdGhyb3dzIERhdGVUaW1lRXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmcgaW50ZXJ2YWwgaGFzIGVuZCBiZWZvcmUgc3RhcnRcbiAgICovXG4gIHB1YmxpYyB3aXRoRW5kKGVuZDogSW5zdGFudCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2YodGhpcy5zdGFydCwgZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBpbnRlcnZhbCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBpbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAgICogPHA+XG4gICAqIFRoaXMgZmluZHMgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gaW50ZXJ2YWxzLlxuICAgKiBUaGlzIHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHR3byBpbnRlcnZhbHMgYXJlIG5vdCB7QGxpbmtwbGFpbiAjaXNDb25uZWN0ZWQoSW50ZXJ2YWwpIGNvbm5lY3RlZH0uXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciAgdGhlIG90aGVyIGludGVydmFsIHRvIGNoZWNrIGZvciwgbm90IG51bGxcbiAgICogQHJldHVybiB0aGUgaW50ZXJ2YWwgdGhhdCBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gaW50ZXJ2YWxzXG4gICAqIEB0aHJvd3MgRGF0ZVRpbWVFeGNlcHRpb24gaWYgdGhlIGludGVydmFscyBkbyBub3QgY29ubmVjdFxuICAgKi9cbiAgcHVibGljIGludGVyc2VjdGlvbihvdGhlcjogSW50ZXJ2YWwpOiBJbnRlcnZhbCB7XG4gICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQob3RoZXIpID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcnZhbHMgZG8gbm90IGNvbm5lY3Q6ICcgKyB0aGlzICsgJyBhbmQgJyArIG90aGVyKTtcbiAgICB9XG4gICAgY29uc3QgY21wU3RhcnQgPSB0aGlzLnN0YXJ0LmNvbXBhcmVUbyhvdGhlci5zdGFydCk7XG4gICAgY29uc3QgY21wRW5kID0gdGhpcy5lbmQuY29tcGFyZVRvKG90aGVyLmVuZCk7XG4gICAgaWYgKGNtcFN0YXJ0ID49IDAgJiYgY21wRW5kIDw9IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSBpZiAoY21wU3RhcnQgPD0gMCAmJiBjbXBFbmQgPj0gMCkge1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdTdGFydCA9IChjbXBTdGFydCA+PSAwID8gdGhpcy5zdGFydCA6IG90aGVyLnN0YXJ0KTtcbiAgICAgIGNvbnN0IG5ld0VuZCA9IChjbXBFbmQgPD0gMCA/IHRoaXMuZW5kIDogb3RoZXIuZW5kKTtcbiAgICAgIHJldHVybiBJbnRlcnZhbC5vZihuZXdTdGFydCwgbmV3RW5kKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgaW50ZXJ2YWwgdGhhdCBpcyB0aGUgdW5pb24gb2YgdGhpcyBpbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAgICogPHA+XG4gICAqIFRoaXMgZmluZHMgdGhlIHVuaW9uIG9mIHR3byBpbnRlcnZhbHMuXG4gICAqIFRoaXMgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgdHdvIGludGVydmFscyBhcmUgbm90IHtAbGlua3BsYWluICNpc0Nvbm5lY3RlZChJbnRlcnZhbCkgY29ubmVjdGVkfS5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyICB0aGUgb3RoZXIgaW50ZXJ2YWwgdG8gY2hlY2sgZm9yLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRoZSBpbnRlcnZhbCB0aGF0IGlzIHRoZSB1bmlvbiBvZiB0aGUgdHdvIGludGVydmFsc1xuICAgKiBAdGhyb3dzIERhdGVUaW1lRXhjZXB0aW9uIGlmIHRoZSBpbnRlcnZhbHMgZG8gbm90IGNvbm5lY3RcbiAgICovXG4gIHB1YmxpYyB1bmlvbihvdGhlcjogSW50ZXJ2YWwpOiBJbnRlcnZhbCB7XG4gICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQob3RoZXIpID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcnZhbHMgZG8gbm90IGNvbm5lY3Q6ICcgKyB0aGlzICsgJyBhbmQgJyArIG90aGVyKTtcbiAgICB9XG4gICAgY29uc3QgY21wU3RhcnQgPSB0aGlzLnN0YXJ0LmNvbXBhcmVUbyhvdGhlci5zdGFydCk7XG4gICAgY29uc3QgY21wRW5kID0gdGhpcy5lbmQuY29tcGFyZVRvKG90aGVyLmVuZCk7XG4gICAgaWYgKGNtcFN0YXJ0ID49IDAgJiYgY21wRW5kIDw9IDApIHtcbiAgICAgIHJldHVybiBvdGhlcjtcbiAgICB9IGVsc2UgaWYgKGNtcFN0YXJ0IDw9IDAgJiYgY21wRW5kID49IDApIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdTdGFydCA9IChjbXBTdGFydCA+PSAwID8gb3RoZXIuc3RhcnQgOiB0aGlzLnN0YXJ0KTtcbiAgICAgIGNvbnN0IG5ld0VuZCA9IChjbXBFbmQgPD0gMCA/IG90aGVyLmVuZCA6IHRoaXMuZW5kKTtcbiAgICAgIHJldHVybiBJbnRlcnZhbC5vZihuZXdTdGFydCwgbmV3RW5kKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgc21hbGxlc3QgaW50ZXJ2YWwgdGhhdCBlbmNsb3NlcyB0aGlzIGludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZCB3aWxsIHtAbGlua3BsYWluICNlbmNsb3NlcyhJbnRlcnZhbCkgZW5jbG9zZX1cbiAgICogdGhpcyBpbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyICB0aGUgb3RoZXIgaW50ZXJ2YWwgdG8gY2hlY2sgZm9yLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRoZSBpbnRlcnZhbCB0aGF0IHNwYW5zIHRoZSB0d28gaW50ZXJ2YWxzXG4gICAqL1xuICBwdWJsaWMgc3BhbihvdGhlcjogSW50ZXJ2YWwpOiBJbnRlcnZhbCB7XG4gICAgY29uc3QgY21wU3RhcnQgPSB0aGlzLnN0YXJ0LmNvbXBhcmVUbyhvdGhlci5zdGFydCk7XG4gICAgY29uc3QgY21wRW5kID0gdGhpcy5lbmQuY29tcGFyZVRvKG90aGVyLmVuZCk7XG4gICAgY29uc3QgbmV3U3RhcnQgPSAoY21wU3RhcnQgPj0gMCA/IG90aGVyLnN0YXJ0IDogdGhpcy5zdGFydCk7XG4gICAgY29uc3QgbmV3RW5kID0gKGNtcEVuZCA8PSAwID8gb3RoZXIuZW5kIDogdGhpcy5lbmQpO1xuICAgIHJldHVybiBJbnRlcnZhbC5vZihuZXdTdGFydCwgbmV3RW5kKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFNoaWZ0IHRoZSB3aG9sZSBpbnRlcnZhbCBieSB0aGUgZ2l2ZW4gZGF5cyBwZXJpb2QuXG4gICAqIEBwYXJhbSBkYXlzXG4gICAqL1xuICBwdWJsaWMgc2hpZnREYXlzKGRheXM6IG51bWJlcik6IEludGVydmFsIHtcbiAgICByZXR1cm4gdGhpcy5zaGlmdChQZXJpb2Qub2ZEYXlzKGRheXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaGlmdCB0aGUgd2hvbGUgaW50ZXJ2YWwgYnkgdGhlIGdpdmVuIHRlbXBvcmFsIGFtb3VudC5cbiAgICogTm90ZSB0aGF0IG9ubHkgUGVyaW9kIHdpbGwgYWNjb3VudCBmb3Igem9uZSBzcGVjaWZpYyB0aGluZ3Mgc3VjaCBhcyBkYXlsaWdodCBzYXZpbmdzLlxuICAgKiBVc2UgRHVyYXRpb24gb25seSBpZiB5b3UgYXJlIGJlbG93IGRheXMuXG4gICAqIEBwYXJhbSBvZmZzZXRcbiAgICovXG4gIHB1YmxpYyBzaGlmdChvZmZzZXQ6IFRlbXBvcmFsQW1vdW50KTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZihcbiAgICAgIHRoaXMuc3RhcnQucGx1cyhvZmZzZXQpLFxuICAgICAgdGhpcy5lbmQucGx1cyhvZmZzZXQpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlU3RhcnQob2Zmc2V0OiBUZW1wb3JhbEFtb3VudCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2YoXG4gICAgICB0aGlzLnN0YXJ0LnBsdXMob2Zmc2V0KSxcbiAgICAgIHRoaXMuZW5kXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtb3ZlRW5kKG9mZnNldDogVGVtcG9yYWxBbW91bnQpOiBJbnRlcnZhbCB7XG4gICAgcmV0dXJuIEludGVydmFsLm9mKFxuICAgICAgdGhpcy5zdGFydCxcbiAgICAgIHRoaXMuZW5kLnBsdXMob2Zmc2V0KVxuICAgICk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogSW50ZXJ2YWwgUXVlcnkgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIFRpbWVGcmFtZSBvdmVybGFwcyB3aXRoIHRoaXMgb25lLlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgVGltZUZyYW1lIHRvIGNoZWNrIGFnYWluc3RcbiAgICogQHJldHVybiBSZXR1cm5zIHtAY29kZSB0cnVlfSBpZiB0aGUgdHdvIGNhbmRpZGF0ZXMgb3ZlcmxhcCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwdWJsaWMgb3ZlcmxhcHMob3RoZXI6IEludGVydmFsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyLmVxdWFscyh0aGlzKSB8fCAodGhpcy5zdGFydC5jb21wYXJlVG8ob3RoZXIuZW5kKSA8IDAgJiYgb3RoZXIuc3RhcnQuY29tcGFyZVRvKHRoaXMuZW5kKSA8IDApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpdCB0aGUgZ2l2ZW4gbG9jYWxEYXRlIG92ZXJsYXBzIHdpdGggdGhlIGdpdmVuIFRpbWVGcmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVGcmFtZSBUaW1lRnJhbWUgdG8gY2hlY2sgYWdhaW5zdFxuICAgKiBAcGFyYW0gbG9jYWxEYXRlIExvY2FsRGF0ZSB0byBjaGVja1xuICAgKi9cbiAgcHVibGljIG92ZXJsYXBzV2l0aExvY2FsRGF0ZShcbiAgICBsb2NhbERhdGU6IERhdGVcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxhcHMoSW50ZXJ2YWwub2ZEYXlEYXRlKGxvY2FsRGF0ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgaW5zdGFudC5cbiAgICogPHA+XG4gICAqIFRoaXMgY2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQgaW5zdGFudCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGlzIGludGVydmFsLlxuICAgKiBJZiB0aGlzIHJhbmdlIGhhcyBhbiB1bmJvdW5kZWQgc3RhcnQgdGhlbiB7QGNvZGUgY29udGFpbnMoSW5zdGFudCNNSU4pfSByZXR1cm5zIHRydWUuXG4gICAqIElmIHRoaXMgcmFuZ2UgaGFzIGFuIHVuYm91bmRlZCBlbmQgdGhlbiB7QGNvZGUgY29udGFpbnMoSW5zdGFudCNNQVgpfSByZXR1cm5zIHRydWUuXG4gICAqIElmIHRoaXMgcmFuZ2UgaXMgZW1wdHkgdGhlbiB0aGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyBmYWxzZS5cbiAgICpcbiAgICogQHBhcmFtIGluc3RhbnQgIHRoZSBpbnN0YW50LCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpbnRlcnZhbCBjb250YWlucyB0aGUgaW5zdGFudFxuICAgKi9cbiAgcHVibGljICBjb250YWlucyhpbnN0YW50OiBJbnN0YW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQuY29tcGFyZVRvKGluc3RhbnQpIDw9IDAgJiYgKGluc3RhbnQuY29tcGFyZVRvKHRoaXMuZW5kKSA8IDAgfHwgdGhpcy5pc1VuYm91bmRlZEVuZCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpbnRlcnZhbCBlbmNsb3NlcyB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhpcyBjaGVja3MgaWYgdGhlIGJvdW5kcyBvZiB0aGUgc3BlY2lmaWVkIGludGVydmFsIGFyZSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGlzIGludGVydmFsLlxuICAgKiBBbiBlbXB0eSBpbnRlcnZhbCBlbmNsb3NlcyBpdHNlbGYuXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciAgdGhlIG90aGVyIGludGVydmFsLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpbnRlcnZhbCBjb250YWlucyB0aGUgb3RoZXIgaW50ZXJ2YWxcbiAgICovXG4gIHB1YmxpYyBlbmNsb3NlcyhvdGhlcjogSW50ZXJ2YWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC5jb21wYXJlVG8ob3RoZXIuc3RhcnQpIDw9IDAgJiYgb3RoZXIuZW5kLmNvbXBhcmVUbyh0aGlzLmVuZCkgPD0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpbnRlcnZhbCBhYnV0cyAoaXMgbmV4dCB0byBvciBoYXMgYSBjb21tb24gYm91bmRhcnkgd2l0aCkgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAgICogPHA+XG4gICAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiB0aGUgZW5kIG9mIHRoaXMgaW50ZXJ2YWwgaXMgdGhlIHN0YXJ0IG9mIHRoZSBvdGhlciwgb3IgdmljZSB2ZXJzYS5cbiAgICogQW4gZW1wdHkgaW50ZXJ2YWwgZG9lcyBub3QgYWJ1dCBpdHNlbGYuXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciAgdGhlIG90aGVyIGludGVydmFsLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpbnRlcnZhbCBhYnV0cyB0aGUgb3RoZXIgaW50ZXJ2YWxcbiAgICovXG4gIHB1YmxpYyBhYnV0cyhvdGhlcjogSW50ZXJ2YWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmQuZXF1YWxzKG90aGVyLnN0YXJ0KSAhPT0gdGhpcy5zdGFydC5lcXVhbHMob3RoZXIuZW5kKTsgLy8gIT09IG1lYW5zIFhPUlxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGlzIGNvbm5lY3RlZCB0byB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIHRoZSB0d28gaW50ZXJ2YWxzIGhhdmUgYW4gZW5jbG9zZWQgaW50ZXJ2YWwgaW4gY29tbW9uLCBldmVuIGlmIHRoYXQgaW50ZXJ2YWwgaXMgZW1wdHkuXG4gICAqIEFuIGVtcHR5IGludGVydmFsIGlzIGNvbm5lY3RlZCB0byBpdHNlbGYuXG4gICAqIDxwPlxuICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8ge0Bjb2RlIChvdmVybGFwcyhvdGhlcikgfHwgYWJ1dHMob3RoZXIpKX0uXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciAgdGhlIG90aGVyIGludGVydmFsLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpbnRlcnZhbCBpcyBjb25uZWN0ZWQgdG8gdGhlIG90aGVyIGludGVydmFsXG4gICAqL1xuICBwdWJsaWMgaXNDb25uZWN0ZWQob3RoZXI6IEludGVydmFsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXF1YWxzKG90aGVyKSB8fCAodGhpcy5zdGFydC5jb21wYXJlVG8ob3RoZXIuZW5kKSA8PSAwICYmIG90aGVyLnN0YXJ0LmNvbXBhcmVUbyh0aGlzLmVuZCkgPD0gMCk7XG4gIH1cblxuICAvLyAtLS1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaW50ZXJ2YWwgaXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBpbnN0YW50LlxuICAgKiA8cD5cbiAgICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIHRoaXMgaW5zdGFudCBzdGFydHMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBpbnN0YW50LlxuICAgKiBBbiBlbXB0eSBpbnRlcnZhbCBiZWhhdmVzIGFzIHRob3VnaCBpdCBpcyBhbiBpbnN0YW50IGZvciBjb21wYXJpc29uIHB1cnBvc2VzLlxuICAgKlxuICAgKiBAcGFyYW0gaW5zdGFudCAgdGhlIG90aGVyIGluc3RhbnQgdG8gY29tcGFyZSB0bywgbm90IG51bGxcbiAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzdGFydCBvZiB0aGlzIGludGVydmFsIGlzIGFmdGVyIHRoZSBzcGVjaWZpZWQgaW5zdGFudFxuICAgKi9cbiAgcHVibGljIGlzQWZ0ZXJJbnN0YW50KGluc3RhbnQ6IEluc3RhbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC5jb21wYXJlVG8oaW5zdGFudCkgPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGlzIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGluc3RhbnQuXG4gICAqIDxwPlxuICAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgdGhpcyBpbnN0YW50IGVuZHMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgaW5zdGFudC5cbiAgICogU2luY2UgaW50ZXJ2YWxzIGRvIG5vdCBpbmNsdWRlIHRoZWlyIGVuZCBwb2ludHMsIHRoaXMgd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGVcbiAgICogaW5zdGFudCBlcXVhbHMgdGhlIGVuZCBvZiB0aGUgaW50ZXJ2YWwuXG4gICAqIEFuIGVtcHR5IGludGVydmFsIGJlaGF2ZXMgYXMgdGhvdWdoIGl0IGlzIGFuIGluc3RhbnQgZm9yIGNvbXBhcmlzb24gcHVycG9zZXMuXG4gICAqXG4gICAqIEBwYXJhbSBpbnN0YW50ICB0aGUgb3RoZXIgaW5zdGFudCB0byBjb21wYXJlIHRvLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHN0YXJ0IG9mIHRoaXMgaW50ZXJ2YWwgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgaW5zdGFudFxuICAgKi9cbiAgcHVibGljIGlzQmVmb3JlSW5zdGFudChpbnN0YW50OiBJbnN0YW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5kLmNvbXBhcmVUbyhpbnN0YW50KSA8PSAwICYmIHRoaXMuc3RhcnQuY29tcGFyZVRvKGluc3RhbnQpIDwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpbnRlcnZhbCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIHRoaXMgaW5zdGFudCBzdGFydHMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiBTaW5jZSBpbnRlcnZhbHMgZG8gbm90IGluY2x1ZGUgdGhlaXIgZW5kIHBvaW50cywgdGhpcyB3aWxsIHJldHVybiB0cnVlIGlmIHRoZVxuICAgKiBpbnN0YW50IGVxdWFscyB0aGUgZW5kIG9mIHRoZSBpbnRlcnZhbC5cbiAgICogQW4gZW1wdHkgaW50ZXJ2YWwgYmVoYXZlcyBhcyB0aG91Z2ggaXQgaXMgYW4gaW5zdGFudCBmb3IgY29tcGFyaXNvbiBwdXJwb3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIGludGVydmFsICB0aGUgb3RoZXIgaW50ZXJ2YWwgdG8gY29tcGFyZSB0bywgbm90IG51bGxcbiAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgaW5zdGFudCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIGluc3RhbnRcbiAgICovXG4gIHB1YmxpYyBpc0FmdGVyKGludGVydmFsOiBJbnRlcnZhbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LmNvbXBhcmVUbyhpbnRlcnZhbC5lbmQpID49IDAgJiYgIWludGVydmFsLmVxdWFscyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpbnRlcnZhbCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAgICogPHA+XG4gICAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiB0aGlzIGluc3RhbnQgZW5kcyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXG4gICAqIFNpbmNlIGludGVydmFscyBkbyBub3QgaW5jbHVkZSB0aGVpciBlbmQgcG9pbnRzLCB0aGlzIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlXG4gICAqIHR3byBpbnRlcnZhbHMgYWJ1dC5cbiAgICogQW4gZW1wdHkgaW50ZXJ2YWwgYmVoYXZlcyBhcyB0aG91Z2ggaXQgaXMgYW4gaW5zdGFudCBmb3IgY29tcGFyaXNvbiBwdXJwb3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIGludGVydmFsICB0aGUgb3RoZXIgaW50ZXJ2YWwgdG8gY29tcGFyZSB0bywgbm90IG51bGxcbiAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgaW5zdGFudCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCBpbnN0YW50XG4gICAqL1xuICBwdWJsaWMgaXNCZWZvcmUoaW50ZXJ2YWw6IEludGVydmFsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5kLmNvbXBhcmVUbyhpbnRlcnZhbC5zdGFydCkgPD0gMCAmJiAhaW50ZXJ2YWwuZXF1YWxzKHRoaXMpO1xuICB9XG5cblxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRXF1YWxpdHkgJiBIYXNoY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaW50ZXJ2YWwgaXMgZXF1YWwgdG8gYW5vdGhlciBpbnRlcnZhbC5cbiAgICogPHA+XG4gICAqIENvbXBhcmVzIHRoaXMge0Bjb2RlIEludGVydmFsfSB3aXRoIGFub3RoZXIgZW5zdXJpbmcgdGhhdCB0aGUgdHdvIGluc3RhbnRzIGFyZSB0aGUgc2FtZS5cbiAgICogT25seSBvYmplY3RzIG9mIHR5cGUge0Bjb2RlIEludGVydmFsfSBhcmUgY29tcGFyZWQsIG90aGVyIHR5cGVzIHJldHVybiBmYWxzZS5cbiAgICpcbiAgICogQHBhcmFtIG9iaiAgdGhlIG9iamVjdCB0byBjaGVjaywgbnVsbCByZXR1cm5zIGZhbHNlXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIGVxdWFsIHRvIHRoZSBvdGhlciBpbnRlcnZhbFxuICAgKi9cbiAgcHVibGljIGVxdWFscyhvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzID09PSBvYmopIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgSW50ZXJ2YWwpIHtcbiAgICAgIGNvbnN0IG90aGVyID0gPEludGVydmFsPiBvYmo7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydC5lcXVhbHMob3RoZXIuc3RhcnQpICYmIHRoaXMuZW5kLmVxdWFscyhvdGhlci5lbmQpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZXMgdGhpcyBJbnRlcnZhbCB0byB0aGUgZ2l2ZW4gSW50ZXJ2YWwuXG4gICAqIDxwPlxuICAgKiBUaGUgY29tcGFyaXNvbiBpcyBiYXNlZCBvbiB0aGUgdGltZS1saW5lIHBvc2l0aW9uIG9mIHRoZSBsb3dlciBib3VuZCBpbnN0YW50cyAoSW50ZXJ2YWwgc3RhcnQpLlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgdGhlIG90aGVyIEludGVydmFsIHRvIGNvbXBhcmUgdG8sIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdGhlIGNvbXBhcmF0b3IgdmFsdWUsIG5lZ2F0aXZlIGlmIGxlc3MsIHBvc2l0aXZlIGlmIGdyZWF0ZXJcbiAgICogQHRocm93cyBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpZiBvdGhlciBpcyBudWxsXG4gICAqL1xuICBwdWJsaWMgY29tcGFyZVRvKG90aGVyOiBJbnRlcnZhbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQuY29tcGFyZVRvKG90aGVyLnN0YXJ0KTtcbiAgfVxuXG5cbn1cbiJdfQ==
|
|
419
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vdGltZS9pbnRlcnZhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBa0IsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBUWpELE1BQU0sT0FBTyxRQUFRO0lBR25COzs7O2dGQUk0RTtJQUU1RSxZQUNrQixLQUFjLEVBQ2QsR0FBWTtRQURaLFVBQUssR0FBTCxLQUFLLENBQVM7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFTO0lBQzFCLENBQUM7SUFFTDs7OztnRkFJNEU7SUFFNUU7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQ2pCLEdBQW1CO1FBRW5CLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEIsc0VBQXNFO1FBRXRFLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO1lB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QUksR0FBRyxZQUFZLFFBQVEsRUFBRTtZQUMzQixNQUFNLEtBQUssR0FBYyxHQUFHLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxTQUFTLENBQUMsS0FBZTtRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGVVdGlsfSBmcm9tICcuL2RhdGUtdXRpbCc7XG5pbXBvcnQge0R1cmF0aW9uLCBJbnN0YW50LCBMb2NhbERhdGUsIG5hdGl2ZUpzLCBQZXJpb2QsIFRlbXBvcmFsQW1vdW50LCBab25lSWR9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnO1xuaW1wb3J0IHtUaW1lVXRpbH0gZnJvbSAnLi90aW1lLXV0aWwnO1xuaW1wb3J0IHtQZXJpb2REdXJhdGlvbn0gZnJvbSAnLi9wZXJpb2QtZHVyYXRpb24nO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gSVNPLTg2MDEgaW50ZXJ2YWwgc3RyaW5nLlxuICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAqL1xuZXhwb3J0IHR5cGUgSXNvSW50ZXJ2YWxTdHIgPSBzdHJpbmc7XG5cbmV4cG9ydCBjbGFzcyBJbnRlcnZhbCB7XG5cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhcnQ6IEluc3RhbnQsXG4gICAgcHVibGljIHJlYWRvbmx5IGVuZDogSW5zdGFudFxuICApIHsgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBTdGF0aWMgQnVpbGRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gSVNPLTg2MDEgaW50ZXJ2YWwgc3RyaW5nLlxuICAgKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lX2ludGVydmFsc1xuICAgKiBAcGFyYW0gaXNvXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHBhcnNlKFxuICAgIGlzbzogSXNvSW50ZXJ2YWxTdHJcbiAgKTogSW50ZXJ2YWwge1xuICAgIGNvbnN0IHBhcnRzID0gaXNvLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBnaXZlbiBzdHJpbmcgaXMgbm90IGEgdmFsaWQgaXNvIGludGVydmFsOiAnICsgaXNvKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IEluc3RhbnQucGFyc2UocGFydHNbMF0pO1xuXG4gICAgY29uc3QgZW5kU3RyID0gcGFydHNbMV07XG5cbiAgICAvLyBUaGUgJ2VuZCcgcGFydCBjYW4gZWl0aGVyIGJlIGFuIGluc3RhbnQgb3IgYSBkdXJhdGlvbiBpbiBpc28gZm9ybWF0XG5cbiAgICBpZiAoZW5kU3RyLnN0YXJ0c1dpdGgoJ1AnKSB8fCBlbmRTdHIuc3RhcnRzV2l0aCgnLVAnKSkge1xuXG4gICAgICBjb25zdCBkdXJhdGlvbiA9IER1cmF0aW9uLnBhcnNlKGVuZFN0cik7XG5cbiAgICAgIHJldHVybiBJbnRlcnZhbC5vZlN0YXJ0QW5kT2Zmc2V0KFxuICAgICAgICBzdGFydCxcbiAgICAgICAgZHVyYXRpb25cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBJbnRlcnZhbC5vZihcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIEluc3RhbnQucGFyc2UoZW5kU3RyKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHllc3RlcmRheSh6b25lSWQ6IFpvbmVJZCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2ZEYXkoXG4gICAgICBMb2NhbERhdGUubm93KCkubWludXNEYXlzKDEpLFxuICAgICAgem9uZUlkXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgIHRvbW9ycm93KHpvbmVJZDogWm9uZUlkKTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZkRheShcbiAgICAgIExvY2FsRGF0ZS5ub3coKS5wbHVzRGF5cygxKSxcbiAgICAgIHpvbmVJZFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvZGF5KHpvbmVJZDogWm9uZUlkKTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZkRheShMb2NhbERhdGUubm93KCksIHpvbmVJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEludGVydmFsIGZyb20gYSBEYXRlIGJ5IHNwcmVhZGluZyBpdCB0byB0aGUgYmVnaW4gYW5kIGVuZCBvZiBpdHMgZGF5LlxuICAgKiBAcGFyYW0gZGF0ZSBEYXRlIHRvIHNwcmVhZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZkRheURhdGUoZGF0ZTogRGF0ZSk6IEludGVydmFsIHtcbiAgICBjb25zdCBsb2NhbERhdGUgPSBMb2NhbERhdGUuZnJvbShuYXRpdmVKcyhkYXRlKSk7XG4gICAgcmV0dXJuIEludGVydmFsLm9mRGF5KGxvY2FsRGF0ZSwgWm9uZUlkLnN5c3RlbURlZmF1bHQoKSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG9mRGF5KGRheTogTG9jYWxEYXRlLCB6b25lSWQ6IFpvbmVJZCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuYmV0d2VlbkRheXMoXG4gICAgICBkYXksXG4gICAgICBkYXkucGx1c0RheXMoMSksXG4gICAgICB6b25lSWRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBiZXR3ZWVuRGF5cyhcbiAgICBzdGFydERheUluY2x1c2l2ZTogTG9jYWxEYXRlLFxuICAgIGVuZERheUV4Y2x1c2l2ZTogTG9jYWxEYXRlLFxuICAgIHpvbmVJZDogWm9uZUlkXG4gICkge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZihcbiAgICAgIHN0YXJ0RGF5SW5jbHVzaXZlLmF0U3RhcnRPZkRheSh6b25lSWQpLnRvSW5zdGFudCgpLFxuICAgICAgZW5kRGF5RXhjbHVzaXZlLmF0U3RhcnRPZkRheSh6b25lSWQpLnRvSW5zdGFudCgpXG4gICAgKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnRlcnZhbCB3aXRoIHRoZSBnaXZlbiBzdGFydCB0aW1lIHBvaW50XG4gICAqIGFuZCBhIG9mZnNldCBmcm9tIHRoZSBzdGFydC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHlvdSBzaG91bGQgdXNlIFBlcmlvZCBmb3IgZGF5cyB0byBhY2NvdW50IGZvciB6b25lIHNwZWNpZmljXG4gICAqIHRoaW5ncyBsaWtlIGRheWxpZ2h0IHNhdmluZy5cbiAgICpcbiAgICogQHBhcmFtIHN0YXJ0SW5jbHVzaXZlXG4gICAqIEBwYXJhbSBvZmZzZXRFeGNsdXNpdmUgQSBQZXJpb2Qgb3IgRHVyYXRpb24gb2Zmc2V0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZlN0YXJ0QW5kT2Zmc2V0KHN0YXJ0SW5jbHVzaXZlOiBJbnN0YW50LCBvZmZzZXRFeGNsdXNpdmU6IFRlbXBvcmFsQW1vdW50KTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZihcbiAgICAgIHN0YXJ0SW5jbHVzaXZlLFxuICAgICAgc3RhcnRJbmNsdXNpdmUucGx1cyhvZmZzZXRFeGNsdXNpdmUpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgb2YoXG4gICAgc3RhcnRJbmNsdXNpdmU6IEluc3RhbnQsXG4gICAgZW5kRXhjbHVzaXZlOiBJbnN0YW50XG4gICk6IEludGVydmFsIHtcbiAgICByZXR1cm4gbmV3IEludGVydmFsKFxuICAgICAgc3RhcnRJbmNsdXNpdmUsXG4gICAgICBlbmRFeGNsdXNpdmVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBvZkRhdGUoXG4gICAgc3RhcnRJbmNsdXNpdmU6IERhdGUgfCBzdHJpbmcsXG4gICAgZW5kRXhjbHVzaXZlOiBEYXRlIHwgc3RyaW5nXG4gICk6IEludGVydmFsIHtcbiAgICByZXR1cm4gbmV3IEludGVydmFsKFxuICAgICAgVGltZVV0aWwuaW5zdGFudChzdGFydEluY2x1c2l2ZSksXG4gICAgICBUaW1lVXRpbC5pbnN0YW50KGVuZEV4Y2x1c2l2ZSlcbiAgICApO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgcmFuZ2UgaXMgZW1wdHkuXG4gICAqIDxwPlxuICAgKiBBbiBlbXB0eSByYW5nZSBvY2N1cnMgd2hlbiB0aGUgc3RhcnQgZGF0ZSBlcXVhbHMgdGhlIGluY2x1c2l2ZSBlbmQgZGF0ZS5cbiAgICpcbiAgICogQHJldHVybiB0cnVlIGlmIHRoZSByYW5nZSBpcyBlbXB0eVxuICAgKi9cbiAgcHVibGljIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQuZXF1YWxzKHRoaXMuZW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHN0YXJ0IG9mIHRoZSBpbnRlcnZhbCBpcyB1bmJvdW5kZWQuXG4gICAqXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiBzdGFydCBpcyB1bmJvdW5kZWRcbiAgICovXG4gIHB1YmxpYyBpc1VuYm91bmRlZFN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LmVxdWFscyhJbnN0YW50Lk1JTik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBlbmQgb2YgdGhlIGludGVydmFsIGlzIHVuYm91bmRlZC5cbiAgICpcbiAgICogQHJldHVybiB0cnVlIGlmIGVuZCBpcyB1bmJvdW5kZWRcbiAgICovXG4gIHB1YmxpYyBpc1VuYm91bmRlZEVuZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmQuZXF1YWxzKEluc3RhbnQuTUFYKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyB0b0R1cmF0aW9uKCk6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gRHVyYXRpb24uYmV0d2Vlbih0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7XG4gIH1cblxuICBwdWJsaWMgdG9QZXJpb2REdXJhdGlvbih6b25lOiBab25lSWQpOiBQZXJpb2REdXJhdGlvbiB7XG4gICAgcmV0dXJuIFBlcmlvZER1cmF0aW9uLmJldHdlZW4oXG4gICAgICB0aGlzLnN0YXJ0LmF0Wm9uZSh6b25lKSxcbiAgICAgIHRoaXMuZW5kLmF0Wm9uZSh6b25lKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogSXNvSW50ZXJ2YWxTdHIge1xuICAgIHJldHVybiB0aGlzLnRvRHVyYXRpb25TdHJpbmcoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b0luc3RhbnRTdHJpbmcoKTogSXNvSW50ZXJ2YWxTdHIge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LnRvU3RyaW5nKCkgKyAnLycgKyB0aGlzLmVuZC50b1N0cmluZygpO1xuICB9XG5cbiAgcHVibGljIHRvRHVyYXRpb25TdHJpbmcoKTogSXNvSW50ZXJ2YWxTdHIge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LnRvU3RyaW5nKCkgKyAnLycgKyB0aGlzLnRvRHVyYXRpb24oKS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBNb2RpZmljYXRpb24gQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgcmFuZ2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHN0YXJ0IGluc3RhbnQuXG4gICAqXG4gICAqIEBwYXJhbSBzdGFydCAgdGhlIHN0YXJ0IGluc3RhbnQgZm9yIHRoZSBuZXcgaW50ZXJ2YWwsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gYW4gaW50ZXJ2YWwgd2l0aCB0aGUgZW5kIGZyb20gdGhpcyBpbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBzdGFydFxuICAgKiBAdGhyb3dzIERhdGVUaW1lRXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmcgaW50ZXJ2YWwgaGFzIGVuZCBiZWZvcmUgc3RhcnRcbiAgICovXG4gIHB1YmxpYyB3aXRoU3RhcnQoc3RhcnQ6IEluc3RhbnQpOiBJbnRlcnZhbCB7XG4gICAgcmV0dXJuIEludGVydmFsLm9mKHN0YXJ0LCB0aGlzLmVuZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyByYW5nZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5kIGluc3RhbnQuXG4gICAqXG4gICAqIEBwYXJhbSBlbmQgIHRoZSBlbmQgaW5zdGFudCBmb3IgdGhlIG5ldyBpbnRlcnZhbCwgbm90IG51bGxcbiAgICogQHJldHVybiBhbiBpbnRlcnZhbCB3aXRoIHRoZSBzdGFydCBmcm9tIHRoaXMgaW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgZW5kXG4gICAqIEB0aHJvd3MgRGF0ZVRpbWVFeGNlcHRpb24gaWYgdGhlIHJlc3VsdGluZyBpbnRlcnZhbCBoYXMgZW5kIGJlZm9yZSBzdGFydFxuICAgKi9cbiAgcHVibGljIHdpdGhFbmQoZW5kOiBJbnN0YW50KTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZih0aGlzLnN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGludGVydmFsIHRoYXQgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIGludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhpcyBmaW5kcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHR3byBpbnRlcnZhbHMuXG4gICAqIFRoaXMgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgdHdvIGludGVydmFscyBhcmUgbm90IHtAbGlua3BsYWluICNpc0Nvbm5lY3RlZChJbnRlcnZhbCkgY29ubmVjdGVkfS5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyICB0aGUgb3RoZXIgaW50ZXJ2YWwgdG8gY2hlY2sgZm9yLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRoZSBpbnRlcnZhbCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBpbnRlcnZhbHNcbiAgICogQHRocm93cyBEYXRlVGltZUV4Y2VwdGlvbiBpZiB0aGUgaW50ZXJ2YWxzIGRvIG5vdCBjb25uZWN0XG4gICAqL1xuICBwdWJsaWMgaW50ZXJzZWN0aW9uKG90aGVyOiBJbnRlcnZhbCk6IEludGVydmFsIHtcbiAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZChvdGhlcikgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVydmFscyBkbyBub3QgY29ubmVjdDogJyArIHRoaXMgKyAnIGFuZCAnICsgb3RoZXIpO1xuICAgIH1cbiAgICBjb25zdCBjbXBTdGFydCA9IHRoaXMuc3RhcnQuY29tcGFyZVRvKG90aGVyLnN0YXJ0KTtcbiAgICBjb25zdCBjbXBFbmQgPSB0aGlzLmVuZC5jb21wYXJlVG8ob3RoZXIuZW5kKTtcbiAgICBpZiAoY21wU3RhcnQgPj0gMCAmJiBjbXBFbmQgPD0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIGlmIChjbXBTdGFydCA8PSAwICYmIGNtcEVuZCA+PSAwKSB7XG4gICAgICByZXR1cm4gb3RoZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gKGNtcFN0YXJ0ID49IDAgPyB0aGlzLnN0YXJ0IDogb3RoZXIuc3RhcnQpO1xuICAgICAgY29uc3QgbmV3RW5kID0gKGNtcEVuZCA8PSAwID8gdGhpcy5lbmQgOiBvdGhlci5lbmQpO1xuICAgICAgcmV0dXJuIEludGVydmFsLm9mKG5ld1N0YXJ0LCBuZXdFbmQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBpbnRlcnZhbCB0aGF0IGlzIHRoZSB1bmlvbiBvZiB0aGlzIGludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhpcyBmaW5kcyB0aGUgdW5pb24gb2YgdHdvIGludGVydmFscy5cbiAgICogVGhpcyB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSB0d28gaW50ZXJ2YWxzIGFyZSBub3Qge0BsaW5rcGxhaW4gI2lzQ29ubmVjdGVkKEludGVydmFsKSBjb25uZWN0ZWR9LlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgIHRoZSBvdGhlciBpbnRlcnZhbCB0byBjaGVjayBmb3IsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdGhlIGludGVydmFsIHRoYXQgaXMgdGhlIHVuaW9uIG9mIHRoZSB0d28gaW50ZXJ2YWxzXG4gICAqIEB0aHJvd3MgRGF0ZVRpbWVFeGNlcHRpb24gaWYgdGhlIGludGVydmFscyBkbyBub3QgY29ubmVjdFxuICAgKi9cbiAgcHVibGljIHVuaW9uKG90aGVyOiBJbnRlcnZhbCk6IEludGVydmFsIHtcbiAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZChvdGhlcikgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVydmFscyBkbyBub3QgY29ubmVjdDogJyArIHRoaXMgKyAnIGFuZCAnICsgb3RoZXIpO1xuICAgIH1cbiAgICBjb25zdCBjbXBTdGFydCA9IHRoaXMuc3RhcnQuY29tcGFyZVRvKG90aGVyLnN0YXJ0KTtcbiAgICBjb25zdCBjbXBFbmQgPSB0aGlzLmVuZC5jb21wYXJlVG8ob3RoZXIuZW5kKTtcbiAgICBpZiAoY21wU3RhcnQgPj0gMCAmJiBjbXBFbmQgPD0gMCkge1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH0gZWxzZSBpZiAoY21wU3RhcnQgPD0gMCAmJiBjbXBFbmQgPj0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gKGNtcFN0YXJ0ID49IDAgPyBvdGhlci5zdGFydCA6IHRoaXMuc3RhcnQpO1xuICAgICAgY29uc3QgbmV3RW5kID0gKGNtcEVuZCA8PSAwID8gb3RoZXIuZW5kIDogdGhpcy5lbmQpO1xuICAgICAgcmV0dXJuIEludGVydmFsLm9mKG5ld1N0YXJ0LCBuZXdFbmQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBzbWFsbGVzdCBpbnRlcnZhbCB0aGF0IGVuY2xvc2VzIHRoaXMgaW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXG4gICAqIDxwPlxuICAgKiBUaGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIHdpbGwge0BsaW5rcGxhaW4gI2VuY2xvc2VzKEludGVydmFsKSBlbmNsb3NlfVxuICAgKiB0aGlzIGludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgIHRoZSBvdGhlciBpbnRlcnZhbCB0byBjaGVjayBmb3IsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdGhlIGludGVydmFsIHRoYXQgc3BhbnMgdGhlIHR3byBpbnRlcnZhbHNcbiAgICovXG4gIHB1YmxpYyBzcGFuKG90aGVyOiBJbnRlcnZhbCk6IEludGVydmFsIHtcbiAgICBjb25zdCBjbXBTdGFydCA9IHRoaXMuc3RhcnQuY29tcGFyZVRvKG90aGVyLnN0YXJ0KTtcbiAgICBjb25zdCBjbXBFbmQgPSB0aGlzLmVuZC5jb21wYXJlVG8ob3RoZXIuZW5kKTtcbiAgICBjb25zdCBuZXdTdGFydCA9IChjbXBTdGFydCA+PSAwID8gb3RoZXIuc3RhcnQgOiB0aGlzLnN0YXJ0KTtcbiAgICBjb25zdCBuZXdFbmQgPSAoY21wRW5kIDw9IDAgPyBvdGhlci5lbmQgOiB0aGlzLmVuZCk7XG4gICAgcmV0dXJuIEludGVydmFsLm9mKG5ld1N0YXJ0LCBuZXdFbmQpO1xuICB9XG5cblxuICAvKipcbiAgICogU2hpZnQgdGhlIHdob2xlIGludGVydmFsIGJ5IHRoZSBnaXZlbiBkYXlzIHBlcmlvZC5cbiAgICogQHBhcmFtIGRheXNcbiAgICovXG4gIHB1YmxpYyBzaGlmdERheXMoZGF5czogbnVtYmVyKTogSW50ZXJ2YWwge1xuICAgIHJldHVybiB0aGlzLnNoaWZ0KFBlcmlvZC5vZkRheXMoZGF5cykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNoaWZ0IHRoZSB3aG9sZSBpbnRlcnZhbCBieSB0aGUgZ2l2ZW4gdGVtcG9yYWwgYW1vdW50LlxuICAgKiBOb3RlIHRoYXQgb25seSBQZXJpb2Qgd2lsbCBhY2NvdW50IGZvciB6b25lIHNwZWNpZmljIHRoaW5ncyBzdWNoIGFzIGRheWxpZ2h0IHNhdmluZ3MuXG4gICAqIFVzZSBEdXJhdGlvbiBvbmx5IGlmIHlvdSBhcmUgYmVsb3cgZGF5cy5cbiAgICogQHBhcmFtIG9mZnNldFxuICAgKi9cbiAgcHVibGljIHNoaWZ0KG9mZnNldDogVGVtcG9yYWxBbW91bnQpOiBJbnRlcnZhbCB7XG4gICAgcmV0dXJuIEludGVydmFsLm9mKFxuICAgICAgdGhpcy5zdGFydC5wbHVzKG9mZnNldCksXG4gICAgICB0aGlzLmVuZC5wbHVzKG9mZnNldClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG1vdmVTdGFydChvZmZzZXQ6IFRlbXBvcmFsQW1vdW50KTogSW50ZXJ2YWwge1xuICAgIHJldHVybiBJbnRlcnZhbC5vZihcbiAgICAgIHRoaXMuc3RhcnQucGx1cyhvZmZzZXQpLFxuICAgICAgdGhpcy5lbmRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG1vdmVFbmQob2Zmc2V0OiBUZW1wb3JhbEFtb3VudCk6IEludGVydmFsIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwub2YoXG4gICAgICB0aGlzLnN0YXJ0LFxuICAgICAgdGhpcy5lbmQucGx1cyhvZmZzZXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBJbnRlcnZhbCBRdWVyeSBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gVGltZUZyYW1lIG92ZXJsYXBzIHdpdGggdGhpcyBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciBUaW1lRnJhbWUgdG8gY2hlY2sgYWdhaW5zdFxuICAgKiBAcmV0dXJuIFJldHVybnMge0Bjb2RlIHRydWV9IGlmIHRoZSB0d28gY2FuZGlkYXRlcyBvdmVybGFwLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyBvdmVybGFwcyhvdGhlcjogSW50ZXJ2YWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIuZXF1YWxzKHRoaXMpIHx8ICh0aGlzLnN0YXJ0LmNvbXBhcmVUbyhvdGhlci5lbmQpIDwgMCAmJiBvdGhlci5zdGFydC5jb21wYXJlVG8odGhpcy5lbmQpIDwgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGl0IHRoZSBnaXZlbiBsb2NhbERhdGUgb3ZlcmxhcHMgd2l0aCB0aGUgZ2l2ZW4gVGltZUZyYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gdGltZUZyYW1lIFRpbWVGcmFtZSB0byBjaGVjayBhZ2FpbnN0XG4gICAqIEBwYXJhbSBsb2NhbERhdGUgTG9jYWxEYXRlIHRvIGNoZWNrXG4gICAqL1xuICBwdWJsaWMgb3ZlcmxhcHNXaXRoTG9jYWxEYXRlKFxuICAgIGxvY2FsRGF0ZTogRGF0ZVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vdmVybGFwcyhJbnRlcnZhbC5vZkRheURhdGUobG9jYWxEYXRlKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaW50ZXJ2YWwgY29udGFpbnMgdGhlIHNwZWNpZmllZCBpbnN0YW50LlxuICAgKiA8cD5cbiAgICogVGhpcyBjaGVja3MgaWYgdGhlIHNwZWNpZmllZCBpbnN0YW50IGlzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoaXMgaW50ZXJ2YWwuXG4gICAqIElmIHRoaXMgcmFuZ2UgaGFzIGFuIHVuYm91bmRlZCBzdGFydCB0aGVuIHtAY29kZSBjb250YWlucyhJbnN0YW50I01JTil9IHJldHVybnMgdHJ1ZS5cbiAgICogSWYgdGhpcyByYW5nZSBoYXMgYW4gdW5ib3VuZGVkIGVuZCB0aGVuIHtAY29kZSBjb250YWlucyhJbnN0YW50I01BWCl9IHJldHVybnMgdHJ1ZS5cbiAgICogSWYgdGhpcyByYW5nZSBpcyBlbXB0eSB0aGVuIHRoaXMgbWV0aG9kIGFsd2F5cyByZXR1cm5zIGZhbHNlLlxuICAgKlxuICAgKiBAcGFyYW0gaW5zdGFudCAgdGhlIGluc3RhbnQsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGludGVydmFsIGNvbnRhaW5zIHRoZSBpbnN0YW50XG4gICAqL1xuICBwdWJsaWMgIGNvbnRhaW5zKGluc3RhbnQ6IEluc3RhbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC5jb21wYXJlVG8oaW5zdGFudCkgPD0gMCAmJiAoaW5zdGFudC5jb21wYXJlVG8odGhpcy5lbmQpIDwgMCB8fCB0aGlzLmlzVW5ib3VuZGVkRW5kKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGVuY2xvc2VzIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXG4gICAqIDxwPlxuICAgKiBUaGlzIGNoZWNrcyBpZiB0aGUgYm91bmRzIG9mIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwgYXJlIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoaXMgaW50ZXJ2YWwuXG4gICAqIEFuIGVtcHR5IGludGVydmFsIGVuY2xvc2VzIGl0c2VsZi5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyICB0aGUgb3RoZXIgaW50ZXJ2YWwsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGludGVydmFsIGNvbnRhaW5zIHRoZSBvdGhlciBpbnRlcnZhbFxuICAgKi9cbiAgcHVibGljIGVuY2xvc2VzKG90aGVyOiBJbnRlcnZhbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LmNvbXBhcmVUbyhvdGhlci5zdGFydCkgPD0gMCAmJiBvdGhlci5lbmQuY29tcGFyZVRvKHRoaXMuZW5kKSA8PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGFidXRzIChpcyBuZXh0IHRvIG9yIGhhcyBhIGNvbW1vbiBib3VuZGFyeSB3aXRoKSB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIHRoZSBlbmQgb2YgdGhpcyBpbnRlcnZhbCBpcyB0aGUgc3RhcnQgb2YgdGhlIG90aGVyLCBvciB2aWNlIHZlcnNhLlxuICAgKiBBbiBlbXB0eSBpbnRlcnZhbCBkb2VzIG5vdCBhYnV0IGl0c2VsZi5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyICB0aGUgb3RoZXIgaW50ZXJ2YWwsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGludGVydmFsIGFidXRzIHRoZSBvdGhlciBpbnRlcnZhbFxuICAgKi9cbiAgcHVibGljIGFidXRzKG90aGVyOiBJbnRlcnZhbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuZC5lcXVhbHMob3RoZXIuc3RhcnQpICE9PSB0aGlzLnN0YXJ0LmVxdWFscyhvdGhlci5lbmQpOyAvLyAhPT0gbWVhbnMgWE9SXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaW50ZXJ2YWwgaXMgY29ubmVjdGVkIHRvIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXG4gICAqIDxwPlxuICAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgdGhlIHR3byBpbnRlcnZhbHMgaGF2ZSBhbiBlbmNsb3NlZCBpbnRlcnZhbCBpbiBjb21tb24sIGV2ZW4gaWYgdGhhdCBpbnRlcnZhbCBpcyBlbXB0eS5cbiAgICogQW4gZW1wdHkgaW50ZXJ2YWwgaXMgY29ubmVjdGVkIHRvIGl0c2VsZi5cbiAgICogPHA+XG4gICAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byB7QGNvZGUgKG92ZXJsYXBzKG90aGVyKSB8fCBhYnV0cyhvdGhlcikpfS5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyICB0aGUgb3RoZXIgaW50ZXJ2YWwsIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGludGVydmFsIGlzIGNvbm5lY3RlZCB0byB0aGUgb3RoZXIgaW50ZXJ2YWxcbiAgICovXG4gIHB1YmxpYyBpc0Nvbm5lY3RlZChvdGhlcjogSW50ZXJ2YWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lcXVhbHMob3RoZXIpIHx8ICh0aGlzLnN0YXJ0LmNvbXBhcmVUbyhvdGhlci5lbmQpIDw9IDAgJiYgb3RoZXIuc3RhcnQuY29tcGFyZVRvKHRoaXMuZW5kKSA8PSAwKTtcbiAgfVxuXG4gIC8vIC0tLVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpbnRlcnZhbCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIGluc3RhbnQuXG4gICAqIDxwPlxuICAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgdGhpcyBpbnN0YW50IHN0YXJ0cyBhZnRlciB0aGUgc3BlY2lmaWVkIGluc3RhbnQuXG4gICAqIEFuIGVtcHR5IGludGVydmFsIGJlaGF2ZXMgYXMgdGhvdWdoIGl0IGlzIGFuIGluc3RhbnQgZm9yIGNvbXBhcmlzb24gcHVycG9zZXMuXG4gICAqXG4gICAqIEBwYXJhbSBpbnN0YW50ICB0aGUgb3RoZXIgaW5zdGFudCB0byBjb21wYXJlIHRvLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHN0YXJ0IG9mIHRoaXMgaW50ZXJ2YWwgaXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBpbnN0YW50XG4gICAqL1xuICBwdWJsaWMgaXNBZnRlckluc3RhbnQoaW5zdGFudDogSW5zdGFudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0LmNvbXBhcmVUbyhpbnN0YW50KSA+IDA7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaW50ZXJ2YWwgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgaW5zdGFudC5cbiAgICogPHA+XG4gICAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiB0aGlzIGluc3RhbnQgZW5kcyBiZWZvcmUgdGhlIHNwZWNpZmllZCBpbnN0YW50LlxuICAgKiBTaW5jZSBpbnRlcnZhbHMgZG8gbm90IGluY2x1ZGUgdGhlaXIgZW5kIHBvaW50cywgdGhpcyB3aWxsIHJldHVybiB0cnVlIGlmIHRoZVxuICAgKiBpbnN0YW50IGVxdWFscyB0aGUgZW5kIG9mIHRoZSBpbnRlcnZhbC5cbiAgICogQW4gZW1wdHkgaW50ZXJ2YWwgYmVoYXZlcyBhcyB0aG91Z2ggaXQgaXMgYW4gaW5zdGFudCBmb3IgY29tcGFyaXNvbiBwdXJwb3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIGluc3RhbnQgIHRoZSBvdGhlciBpbnN0YW50IHRvIGNvbXBhcmUgdG8sIG5vdCBudWxsXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3RhcnQgb2YgdGhpcyBpbnRlcnZhbCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCBpbnN0YW50XG4gICAqL1xuICBwdWJsaWMgaXNCZWZvcmVJbnN0YW50KGluc3RhbnQ6IEluc3RhbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmQuY29tcGFyZVRvKGluc3RhbnQpIDw9IDAgJiYgdGhpcy5zdGFydC5jb21wYXJlVG8oaW5zdGFudCkgPCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGlzIGFmdGVyIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXG4gICAqIDxwPlxuICAgKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgdGhpcyBpbnN0YW50IHN0YXJ0cyBhZnRlciB0aGUgZW5kIG9mIHRoZSBzcGVjaWZpZWQgaW50ZXJ2YWwuXG4gICAqIFNpbmNlIGludGVydmFscyBkbyBub3QgaW5jbHVkZSB0aGVpciBlbmQgcG9pbnRzLCB0aGlzIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlXG4gICAqIGluc3RhbnQgZXF1YWxzIHRoZSBlbmQgb2YgdGhlIGludGVydmFsLlxuICAgKiBBbiBlbXB0eSBpbnRlcnZhbCBiZWhhdmVzIGFzIHRob3VnaCBpdCBpcyBhbiBpbnN0YW50IGZvciBjb21wYXJpc29uIHB1cnBvc2VzLlxuICAgKlxuICAgKiBAcGFyYW0gaW50ZXJ2YWwgIHRoZSBvdGhlciBpbnRlcnZhbCB0byBjb21wYXJlIHRvLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpbnN0YW50IGlzIGFmdGVyIHRoZSBzcGVjaWZpZWQgaW5zdGFudFxuICAgKi9cbiAgcHVibGljIGlzQWZ0ZXIoaW50ZXJ2YWw6IEludGVydmFsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQuY29tcGFyZVRvKGludGVydmFsLmVuZCkgPj0gMCAmJiAhaW50ZXJ2YWwuZXF1YWxzKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGludGVydmFsIGlzIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIHRoaXMgaW5zdGFudCBlbmRzIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC5cbiAgICogU2luY2UgaW50ZXJ2YWxzIGRvIG5vdCBpbmNsdWRlIHRoZWlyIGVuZCBwb2ludHMsIHRoaXMgd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGVcbiAgICogdHdvIGludGVydmFscyBhYnV0LlxuICAgKiBBbiBlbXB0eSBpbnRlcnZhbCBiZWhhdmVzIGFzIHRob3VnaCBpdCBpcyBhbiBpbnN0YW50IGZvciBjb21wYXJpc29uIHB1cnBvc2VzLlxuICAgKlxuICAgKiBAcGFyYW0gaW50ZXJ2YWwgIHRoZSBvdGhlciBpbnRlcnZhbCB0byBjb21wYXJlIHRvLCBub3QgbnVsbFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBpbnN0YW50IGlzIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGluc3RhbnRcbiAgICovXG4gIHB1YmxpYyBpc0JlZm9yZShpbnRlcnZhbDogSW50ZXJ2YWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmQuY29tcGFyZVRvKGludGVydmFsLnN0YXJ0KSA8PSAwICYmICFpbnRlcnZhbC5lcXVhbHModGhpcyk7XG4gIH1cblxuXG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBFcXVhbGl0eSAmIEhhc2hjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpbnRlcnZhbCBpcyBlcXVhbCB0byBhbm90aGVyIGludGVydmFsLlxuICAgKiA8cD5cbiAgICogQ29tcGFyZXMgdGhpcyB7QGNvZGUgSW50ZXJ2YWx9IHdpdGggYW5vdGhlciBlbnN1cmluZyB0aGF0IHRoZSB0d28gaW5zdGFudHMgYXJlIHRoZSBzYW1lLlxuICAgKiBPbmx5IG9iamVjdHMgb2YgdHlwZSB7QGNvZGUgSW50ZXJ2YWx9IGFyZSBjb21wYXJlZCwgb3RoZXIgdHlwZXMgcmV0dXJuIGZhbHNlLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqICB0aGUgb2JqZWN0IHRvIGNoZWNrLCBudWxsIHJldHVybnMgZmFsc2VcbiAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgaXMgZXF1YWwgdG8gdGhlIG90aGVyIGludGVydmFsXG4gICAqL1xuICBwdWJsaWMgZXF1YWxzKG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMgPT09IG9iaikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBJbnRlcnZhbCkge1xuICAgICAgY29uc3Qgb3RoZXIgPSA8SW50ZXJ2YWw+IG9iajtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0LmVxdWFscyhvdGhlci5zdGFydCkgJiYgdGhpcy5lbmQuZXF1YWxzKG90aGVyLmVuZCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0aGlzIEludGVydmFsIHRvIHRoZSBnaXZlbiBJbnRlcnZhbC5cbiAgICogPHA+XG4gICAqIFRoZSBjb21wYXJpc29uIGlzIGJhc2VkIG9uIHRoZSB0aW1lLWxpbmUgcG9zaXRpb24gb2YgdGhlIGxvd2VyIGJvdW5kIGluc3RhbnRzIChJbnRlcnZhbCBzdGFydCkuXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciB0aGUgb3RoZXIgSW50ZXJ2YWwgdG8gY29tcGFyZSB0bywgbm90IG51bGxcbiAgICogQHJldHVybiB0aGUgY29tcGFyYXRvciB2YWx1ZSwgbmVnYXRpdmUgaWYgbGVzcywgcG9zaXRpdmUgaWYgZ3JlYXRlclxuICAgKiBAdGhyb3dzIE51bGxQb2ludGVyRXhjZXB0aW9uIGlmIG90aGVyIGlzIG51bGxcbiAgICovXG4gIHB1YmxpYyBjb21wYXJlVG8ob3RoZXI6IEludGVydmFsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydC5jb21wYXJlVG8ob3RoZXIuc3RhcnQpO1xuICB9XG5cblxufVxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Instant, LocalDate, ZoneId } from '@js-joda/core';
|
|
1
|
+
import { Instant, LocalDate, nativeJs, ZoneId } from '@js-joda/core';
|
|
2
2
|
export class TimeUtil {
|
|
3
3
|
/**
|
|
4
4
|
* Returns an instant for a javascript date / iso date string.
|
|
@@ -6,20 +6,23 @@ export class TimeUtil {
|
|
|
6
6
|
*/
|
|
7
7
|
static instant(date) {
|
|
8
8
|
if (date instanceof Date) {
|
|
9
|
-
return Instant.
|
|
9
|
+
return Instant.from(TimeUtil.temporalAccessor(date));
|
|
10
10
|
}
|
|
11
11
|
else {
|
|
12
12
|
return Instant.parse(date);
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
+
static dateToLocalDate(date) {
|
|
16
|
+
return LocalDate.from(TimeUtil.temporalAccessor(date));
|
|
17
|
+
}
|
|
18
|
+
static temporalAccessor(date) {
|
|
19
|
+
return nativeJs(date);
|
|
20
|
+
}
|
|
15
21
|
static date(instant) {
|
|
16
22
|
const d = new Date(0); // The 0 there is the key, which sets the date to the epoch
|
|
17
23
|
d.setUTCMilliseconds(instant.toEpochMilli());
|
|
18
24
|
return d;
|
|
19
25
|
}
|
|
20
|
-
static dateToLocalDate(date) {
|
|
21
|
-
return LocalDate.of(date.getFullYear(), date.getMonth() + 1, date.getDate());
|
|
22
|
-
}
|
|
23
26
|
static localDateToDate(localDate, zone = ZoneId.systemDefault()) {
|
|
24
27
|
return new Date(localDate.year(), localDate.monthValue() - 1, localDate.dayOfMonth(), 0, 0, 0, 0);
|
|
25
28
|
}
|
|
@@ -35,4 +38,4 @@ export class TimeUtil {
|
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
TimeUtil.SECONDS_PER_DAY = 86400;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tbW9uL3RpbWUvdGltZS11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBbUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTlHLE1BQU0sT0FBTyxRQUFRO0lBSW5COzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBbUI7UUFDdkMsSUFBSSxJQUFJLFlBQVksSUFBSSxFQUFFO1lBQ3hCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN0RDthQUFNO1lBQ0wsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVNLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBVTtRQUN0QyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ3ZDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQWdCO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMkRBQTJEO1FBQ2xGLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQW9CLEVBQUUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUU7UUFDL0UsT0FBTyxJQUFJLElBQUksQ0FDYixTQUFTLENBQUMsSUFBSSxFQUFFLEVBQ2hCLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQzFCLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFDdEIsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUNYLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFrQjtRQUN6QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUN4RCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBbUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztlQUNyQixJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztlQUNuQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztlQUNqQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUNuQjtJQUNMLENBQUM7O0FBaERzQix3QkFBZSxHQUFHLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RHVyYXRpb24sIEluc3RhbnQsIExvY2FsRGF0ZSwgbmF0aXZlSnMsIFRlbXBvcmFsQWNjZXNzb3IsIFpvbmVkRGF0ZVRpbWUsIFpvbmVJZH0gZnJvbSAnQGpzLWpvZGEvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBUaW1lVXRpbCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRUNPTkRTX1BFUl9EQVkgPSA4NjQwMDtcblxuICAvKipcbiAgICogUmV0dXJucyBhbiBpbnN0YW50IGZvciBhIGphdmFzY3JpcHQgZGF0ZSAvIGlzbyBkYXRlIHN0cmluZy5cbiAgICogQHBhcmFtIGRhdGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaW5zdGFudChkYXRlOiBEYXRlIHwgc3RyaW5nKTogSW5zdGFudCB7XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gSW5zdGFudC5mcm9tKFRpbWVVdGlsLnRlbXBvcmFsQWNjZXNzb3IoZGF0ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gSW5zdGFudC5wYXJzZShkYXRlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGRhdGVUb0xvY2FsRGF0ZShkYXRlOiBEYXRlKTogTG9jYWxEYXRlIHtcbiAgICByZXR1cm4gTG9jYWxEYXRlLmZyb20oVGltZVV0aWwudGVtcG9yYWxBY2Nlc3NvcihkYXRlKSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRlbXBvcmFsQWNjZXNzb3IoZGF0ZTogRGF0ZSk6IFRlbXBvcmFsQWNjZXNzb3Ige1xuICAgIHJldHVybiBuYXRpdmVKcyhkYXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGF0ZShpbnN0YW50OiBJbnN0YW50KTogRGF0ZSB7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKDApOyAvLyBUaGUgMCB0aGVyZSBpcyB0aGUga2V5LCB3aGljaCBzZXRzIHRoZSBkYXRlIHRvIHRoZSBlcG9jaFxuICAgIGQuc2V0VVRDTWlsbGlzZWNvbmRzKGluc3RhbnQudG9FcG9jaE1pbGxpKCkpO1xuICAgIHJldHVybiBkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBsb2NhbERhdGVUb0RhdGUobG9jYWxEYXRlOiBMb2NhbERhdGUsIHpvbmUgPSBab25lSWQuc3lzdGVtRGVmYXVsdCgpKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKFxuICAgICAgbG9jYWxEYXRlLnllYXIoKSxcbiAgICAgIGxvY2FsRGF0ZS5tb250aFZhbHVlKCkgLSAxLFxuICAgICAgbG9jYWxEYXRlLmRheU9mTW9udGgoKSxcbiAgICAgIDAsIDAsIDAsIDBcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0Z1bGxEYXlzKGR1cmF0aW9uOiBEdXJhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHIgPSBkdXJhdGlvbi5zZWNvbmRzKCkgJSBUaW1lVXRpbC5TRUNPTkRTX1BFUl9EQVk7XG4gICAgcmV0dXJuIHIgPT09IDA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzU3RhcnRPZkRheShkYXRlOiBab25lZERhdGVUaW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRhdGUuc2Vjb25kKCkgPT09IDBcbiAgICAgICYmIGRhdGUubWludXRlKCkgPT09IDBcbiAgICAgICYmIGRhdGUuaG91cigpID09PSAwXG4gICAgICAmJiBkYXRlLm5hbm8oKSA9PT0gMFxuICAgICAgO1xuICB9XG59XG4iXX0=
|
|
@@ -3,7 +3,7 @@ import { DatePipe, CommonModule, registerLocaleData, DecimalPipe } from '@angula
|
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { Pipe, Injectable, LOCALE_ID, Inject, NgModule, Optional, SkipSelf, Directive, Output, Input, forwardRef, ViewChild, ViewChildren, Component, ChangeDetectionStrategy, EventEmitter, HostListener, HostBinding, ViewEncapsulation, TemplateRef, ContentChild, InjectionToken, ContentChildren, Host, APP_INITIALIZER } from '@angular/core';
|
|
5
5
|
import * as i1 from '@angular/platform-browser';
|
|
6
|
-
import { Duration, Period, TemporalQueries, LocalTime, Instant, LocalDate, ZoneId } from '@js-joda/core';
|
|
6
|
+
import { Duration, Period, TemporalQueries, LocalTime, Instant, LocalDate, nativeJs, ZoneId } from '@js-joda/core';
|
|
7
7
|
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
8
8
|
import { BehaviorSubject, Subject, EMPTY, combineLatest, merge, of, forkJoin, throwError, Observable, ReplaySubject, fromEvent, NEVER } from 'rxjs';
|
|
9
9
|
import { distinctUntilChanged, map, filter, takeUntil, debounceTime, catchError, first, take, switchMap, mergeMap, takeWhile, tap, expand, reduce, skip, startWith, delay, share, throttleTime, flatMap, skipWhile, timeout } from 'rxjs/operators';
|
|
@@ -1325,99 +1325,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
1325
1325
|
}]
|
|
1326
1326
|
}], ctorParameters: function () { return []; } });
|
|
1327
1327
|
|
|
1328
|
-
class DateUtil {
|
|
1329
|
-
/***************************************************************************
|
|
1330
|
-
* *
|
|
1331
|
-
* Public API *
|
|
1332
|
-
* *
|
|
1333
|
-
**************************************************************************/
|
|
1334
|
-
static instantToDate(instant) {
|
|
1335
|
-
return new Date(instant.toEpochMilli());
|
|
1336
|
-
}
|
|
1337
|
-
/**
|
|
1338
|
-
* Returns the given Date as ISO formatted local date string.
|
|
1339
|
-
*
|
|
1340
|
-
* YYYY-MM-DD
|
|
1341
|
-
*
|
|
1342
|
-
* @param date
|
|
1343
|
-
*/
|
|
1344
|
-
static toLocalDateIso(date) {
|
|
1345
|
-
return DateUtil.dateString(date);
|
|
1346
|
-
}
|
|
1347
|
-
/**
|
|
1348
|
-
* Returns the given Date as ISO formatted local date-time string.
|
|
1349
|
-
*
|
|
1350
|
-
* YYYY-MM-DDTHH:mm:ss.sss
|
|
1351
|
-
*
|
|
1352
|
-
* @param date
|
|
1353
|
-
*/
|
|
1354
|
-
static toLocalDateTimeIso(date) {
|
|
1355
|
-
const dateString = DateUtil.toLocalDateIso(date);
|
|
1356
|
-
const timeString = DateUtil.timeString(date);
|
|
1357
|
-
return dateString + DateUtil.DateTimeSeparator + timeString;
|
|
1358
|
-
}
|
|
1359
|
-
/**
|
|
1360
|
-
* Checks if the given DateTime is represents the start of the day.
|
|
1361
|
-
*
|
|
1362
|
-
* @param dateTime DateTime to check
|
|
1363
|
-
*/
|
|
1364
|
-
static isStartOfDay(date) {
|
|
1365
|
-
date = new Date(date);
|
|
1366
|
-
return date.getMilliseconds() === 0
|
|
1367
|
-
&& date.getSeconds() === 0
|
|
1368
|
-
&& date.getMinutes() === 0
|
|
1369
|
-
&& date.getHours() === 0;
|
|
1370
|
-
}
|
|
1371
|
-
/**
|
|
1372
|
-
* Sets the given Date to the start of its day by setting its time to 0.
|
|
1373
|
-
*
|
|
1374
|
-
* @param localDate Date to set to start of day
|
|
1375
|
-
*/
|
|
1376
|
-
static startOfDay(localDate) {
|
|
1377
|
-
const startOfDay = new Date(localDate);
|
|
1378
|
-
startOfDay.setHours(0, 0, 0, 0);
|
|
1379
|
-
return startOfDay;
|
|
1380
|
-
}
|
|
1381
|
-
static plusDays(date, days) {
|
|
1382
|
-
const plus = new Date(date);
|
|
1383
|
-
plus.setDate(plus.getDate() + days);
|
|
1384
|
-
return plus;
|
|
1385
|
-
}
|
|
1386
|
-
/***************************************************************************
|
|
1387
|
-
* *
|
|
1388
|
-
* private Methods *
|
|
1389
|
-
* *
|
|
1390
|
-
**************************************************************************/
|
|
1391
|
-
static dateString(date) {
|
|
1392
|
-
const values = [
|
|
1393
|
-
String(date.getFullYear()),
|
|
1394
|
-
DateUtil.format(date.getMonth() + 1),
|
|
1395
|
-
DateUtil.format(date.getDate())
|
|
1396
|
-
];
|
|
1397
|
-
return values.join(DateUtil.IsoDateDelimiter);
|
|
1398
|
-
}
|
|
1399
|
-
static timeString(date) {
|
|
1400
|
-
const values = [
|
|
1401
|
-
DateUtil.format(date.getHours()),
|
|
1402
|
-
DateUtil.format(date.getMinutes()),
|
|
1403
|
-
DateUtil.format(date.getSeconds())
|
|
1404
|
-
];
|
|
1405
|
-
return values.join(DateUtil.IsoTimeDelimiter) +
|
|
1406
|
-
'.' +
|
|
1407
|
-
DateUtil.format(date.getMilliseconds(), 3);
|
|
1408
|
-
}
|
|
1409
|
-
static format(value, digitCount = 2) {
|
|
1410
|
-
let zeros = '';
|
|
1411
|
-
for (let i = 0; i < digitCount; i++) {
|
|
1412
|
-
zeros += '0';
|
|
1413
|
-
}
|
|
1414
|
-
return (zeros + value).slice(-digitCount);
|
|
1415
|
-
}
|
|
1416
|
-
}
|
|
1417
|
-
DateUtil.IsoDateDelimiter = '-';
|
|
1418
|
-
DateUtil.IsoTimeDelimiter = ':';
|
|
1419
|
-
DateUtil.DateTimeSeparator = 'T';
|
|
1420
|
-
|
|
1421
1328
|
class TimeUtil {
|
|
1422
1329
|
/**
|
|
1423
1330
|
* Returns an instant for a javascript date / iso date string.
|
|
@@ -1425,20 +1332,23 @@ class TimeUtil {
|
|
|
1425
1332
|
*/
|
|
1426
1333
|
static instant(date) {
|
|
1427
1334
|
if (date instanceof Date) {
|
|
1428
|
-
return Instant.
|
|
1335
|
+
return Instant.from(TimeUtil.temporalAccessor(date));
|
|
1429
1336
|
}
|
|
1430
1337
|
else {
|
|
1431
1338
|
return Instant.parse(date);
|
|
1432
1339
|
}
|
|
1433
1340
|
}
|
|
1341
|
+
static dateToLocalDate(date) {
|
|
1342
|
+
return LocalDate.from(TimeUtil.temporalAccessor(date));
|
|
1343
|
+
}
|
|
1344
|
+
static temporalAccessor(date) {
|
|
1345
|
+
return nativeJs(date);
|
|
1346
|
+
}
|
|
1434
1347
|
static date(instant) {
|
|
1435
1348
|
const d = new Date(0); // The 0 there is the key, which sets the date to the epoch
|
|
1436
1349
|
d.setUTCMilliseconds(instant.toEpochMilli());
|
|
1437
1350
|
return d;
|
|
1438
1351
|
}
|
|
1439
|
-
static dateToLocalDate(date) {
|
|
1440
|
-
return LocalDate.of(date.getFullYear(), date.getMonth() + 1, date.getDate());
|
|
1441
|
-
}
|
|
1442
1352
|
static localDateToDate(localDate, zone = ZoneId.systemDefault()) {
|
|
1443
1353
|
return new Date(localDate.year(), localDate.monthValue() - 1, localDate.dayOfMonth(), 0, 0, 0, 0);
|
|
1444
1354
|
}
|
|
@@ -1502,16 +1412,17 @@ class Interval {
|
|
|
1502
1412
|
}
|
|
1503
1413
|
/**
|
|
1504
1414
|
* Creates a Interval from a Date by spreading it to the begin and end of its day.
|
|
1505
|
-
*
|
|
1506
|
-
* @param localDate Date to spread
|
|
1415
|
+
* @param date Date to spread
|
|
1507
1416
|
*/
|
|
1508
|
-
static ofDayDate(
|
|
1509
|
-
const
|
|
1510
|
-
return Interval.
|
|
1417
|
+
static ofDayDate(date) {
|
|
1418
|
+
const localDate = LocalDate.from(nativeJs(date));
|
|
1419
|
+
return Interval.ofDay(localDate, ZoneId.systemDefault());
|
|
1511
1420
|
}
|
|
1512
1421
|
static ofDay(day, zoneId) {
|
|
1513
|
-
|
|
1514
|
-
|
|
1422
|
+
return Interval.betweenDays(day, day.plusDays(1), zoneId);
|
|
1423
|
+
}
|
|
1424
|
+
static betweenDays(startDayInclusive, endDayExclusive, zoneId) {
|
|
1425
|
+
return Interval.of(startDayInclusive.atStartOfDay(zoneId).toInstant(), endDayExclusive.atStartOfDay(zoneId).toInstant());
|
|
1515
1426
|
}
|
|
1516
1427
|
/**
|
|
1517
1428
|
* Creates a new interval with the given start time point
|
|
@@ -2091,6 +2002,99 @@ class BytesPerSecondFormat {
|
|
|
2091
2002
|
}
|
|
2092
2003
|
}
|
|
2093
2004
|
|
|
2005
|
+
class DateUtil {
|
|
2006
|
+
/***************************************************************************
|
|
2007
|
+
* *
|
|
2008
|
+
* Public API *
|
|
2009
|
+
* *
|
|
2010
|
+
**************************************************************************/
|
|
2011
|
+
static instantToDate(instant) {
|
|
2012
|
+
return new Date(instant.toEpochMilli());
|
|
2013
|
+
}
|
|
2014
|
+
/**
|
|
2015
|
+
* Returns the given Date as ISO formatted local date string.
|
|
2016
|
+
*
|
|
2017
|
+
* YYYY-MM-DD
|
|
2018
|
+
*
|
|
2019
|
+
* @param date
|
|
2020
|
+
*/
|
|
2021
|
+
static toLocalDateIso(date) {
|
|
2022
|
+
return DateUtil.dateString(date);
|
|
2023
|
+
}
|
|
2024
|
+
/**
|
|
2025
|
+
* Returns the given Date as ISO formatted local date-time string.
|
|
2026
|
+
*
|
|
2027
|
+
* YYYY-MM-DDTHH:mm:ss.sss
|
|
2028
|
+
*
|
|
2029
|
+
* @param date
|
|
2030
|
+
*/
|
|
2031
|
+
static toLocalDateTimeIso(date) {
|
|
2032
|
+
const dateString = DateUtil.toLocalDateIso(date);
|
|
2033
|
+
const timeString = DateUtil.timeString(date);
|
|
2034
|
+
return dateString + DateUtil.DateTimeSeparator + timeString;
|
|
2035
|
+
}
|
|
2036
|
+
/**
|
|
2037
|
+
* Checks if the given DateTime is represents the start of the day.
|
|
2038
|
+
*
|
|
2039
|
+
* @param dateTime DateTime to check
|
|
2040
|
+
*/
|
|
2041
|
+
static isStartOfDay(date) {
|
|
2042
|
+
date = new Date(date);
|
|
2043
|
+
return date.getMilliseconds() === 0
|
|
2044
|
+
&& date.getSeconds() === 0
|
|
2045
|
+
&& date.getMinutes() === 0
|
|
2046
|
+
&& date.getHours() === 0;
|
|
2047
|
+
}
|
|
2048
|
+
/**
|
|
2049
|
+
* Sets the given Date to the start of its day by setting its time to 0.
|
|
2050
|
+
*
|
|
2051
|
+
* @param localDate Date to set to start of day
|
|
2052
|
+
*/
|
|
2053
|
+
static startOfDay(localDate) {
|
|
2054
|
+
const startOfDay = new Date(localDate);
|
|
2055
|
+
startOfDay.setHours(0, 0, 0, 0);
|
|
2056
|
+
return startOfDay;
|
|
2057
|
+
}
|
|
2058
|
+
static plusDays(date, days) {
|
|
2059
|
+
const plus = new Date(date);
|
|
2060
|
+
plus.setDate(plus.getDate() + days);
|
|
2061
|
+
return plus;
|
|
2062
|
+
}
|
|
2063
|
+
/***************************************************************************
|
|
2064
|
+
* *
|
|
2065
|
+
* private Methods *
|
|
2066
|
+
* *
|
|
2067
|
+
**************************************************************************/
|
|
2068
|
+
static dateString(date) {
|
|
2069
|
+
const values = [
|
|
2070
|
+
String(date.getFullYear()),
|
|
2071
|
+
DateUtil.format(date.getMonth() + 1),
|
|
2072
|
+
DateUtil.format(date.getDate())
|
|
2073
|
+
];
|
|
2074
|
+
return values.join(DateUtil.IsoDateDelimiter);
|
|
2075
|
+
}
|
|
2076
|
+
static timeString(date) {
|
|
2077
|
+
const values = [
|
|
2078
|
+
DateUtil.format(date.getHours()),
|
|
2079
|
+
DateUtil.format(date.getMinutes()),
|
|
2080
|
+
DateUtil.format(date.getSeconds())
|
|
2081
|
+
];
|
|
2082
|
+
return values.join(DateUtil.IsoTimeDelimiter) +
|
|
2083
|
+
'.' +
|
|
2084
|
+
DateUtil.format(date.getMilliseconds(), 3);
|
|
2085
|
+
}
|
|
2086
|
+
static format(value, digitCount = 2) {
|
|
2087
|
+
let zeros = '';
|
|
2088
|
+
for (let i = 0; i < digitCount; i++) {
|
|
2089
|
+
zeros += '0';
|
|
2090
|
+
}
|
|
2091
|
+
return (zeros + value).slice(-digitCount);
|
|
2092
|
+
}
|
|
2093
|
+
}
|
|
2094
|
+
DateUtil.IsoDateDelimiter = '-';
|
|
2095
|
+
DateUtil.IsoTimeDelimiter = ':';
|
|
2096
|
+
DateUtil.DateTimeSeparator = 'T';
|
|
2097
|
+
|
|
2094
2098
|
/**
|
|
2095
2099
|
* Provides common used object utils
|
|
2096
2100
|
*/
|