@arsedizioni/ars-utils 18.3.15 → 18.3.16

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.
@@ -1,7 +1,7 @@
1
1
  import { Inject, Injectable, Optional } from '@angular/core';
2
2
  import { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';
3
3
  import { getMonth, getYear, getDate, getDay, getDaysInMonth, formatISO, addYears, addMonths, addDays, isValid, isDate, format, parseISO, parse, } from 'date-fns';
4
- import { TZDate } from "@date-fns/tz";
4
+ import { fromZonedTime } from 'date-fns-tz';
5
5
  import * as i0 from "@angular/core";
6
6
  /** Creates an array and fills it with values. */
7
7
  function range(length, valueFunction) {
@@ -107,7 +107,7 @@ export class DateFnsAdapter extends DateAdapter {
107
107
  let result = new Date();
108
108
  result.setFullYear(year, month, date);
109
109
  result.setHours(0, 0, 0, 0);
110
- result = new TZDate(result, "UTC");
110
+ result = fromZonedTime(result, "UTC");
111
111
  // Check that the date wasn't above the upper bound for the month, causing the month to overflow
112
112
  if (result.getMonth() != month) {
113
113
  throw Error(`Invalid date "${date}" for month with index "${month}".`);
@@ -121,7 +121,7 @@ export class DateFnsAdapter extends DateAdapter {
121
121
  if (typeof value == 'string' && value.length > 0) {
122
122
  let iso8601Date = parseISO(value);
123
123
  if (this.isValid(iso8601Date)) {
124
- iso8601Date = new TZDate(iso8601Date, "UTC");
124
+ iso8601Date = fromZonedTime(iso8601Date, "UTC");
125
125
  return iso8601Date;
126
126
  }
127
127
  const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];
@@ -131,7 +131,7 @@ export class DateFnsAdapter extends DateAdapter {
131
131
  for (const currentFormat of formats) {
132
132
  let fromFormat = parse(value, currentFormat, new Date(), { locale: this.locale });
133
133
  if (this.isValid(fromFormat)) {
134
- fromFormat = new TZDate(fromFormat, "UTC");
134
+ fromFormat = fromZonedTime(fromFormat, "UTC");
135
135
  return fromFormat;
136
136
  }
137
137
  }
@@ -200,4 +200,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
200
200
  type: Inject,
201
201
  args: [MAT_DATE_LOCALE]
202
202
  }] }] });
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZUZuc0FkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY29yZS9kYXRlRm5zQWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBa0IsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUVMLFFBQVEsRUFDUixPQUFPLEVBQ1AsT0FBTyxFQUNQLE1BQU0sRUFDTixjQUFjLEVBQ2QsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsT0FBTyxFQUNQLE9BQU8sRUFDUCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEdBQ04sTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFdEMsaURBQWlEO0FBQ2pELFNBQVMsS0FBSyxDQUFJLE1BQWMsRUFBRSxhQUFtQztJQUNuRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxzRkFBc0Y7QUFDdEYseUZBQXlGO0FBQ3pGLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLEtBQUs7SUFDWixNQUFNLEVBQUUsT0FBTztDQUNoQixDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixJQUFJLEVBQUUs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RUQ7Ozs7T0FJRztJQUNNLFdBQVcsQ0FBQyxLQUFVO1FBQzdCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQVE7UUFDckIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFVO1FBQ2hCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDOzhHQTdMVSxjQUFjLGtCQUNPLGVBQWU7a0hBRHBDLGNBQWM7OzJGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQUVJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIE1hdERhdGVGb3JtYXRzLCBNQVRfREFURV9MT0NBTEUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHtcclxuICBMb2NhbGUsXHJcbiAgZ2V0TW9udGgsXHJcbiAgZ2V0WWVhcixcclxuICBnZXREYXRlLFxyXG4gIGdldERheSxcclxuICBnZXREYXlzSW5Nb250aCxcclxuICBmb3JtYXRJU08sXHJcbiAgYWRkWWVhcnMsXHJcbiAgYWRkTW9udGhzLFxyXG4gIGFkZERheXMsXHJcbiAgaXNWYWxpZCxcclxuICBpc0RhdGUsXHJcbiAgZm9ybWF0LFxyXG4gIHBhcnNlSVNPLFxyXG4gIHBhcnNlLFxyXG59IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHsgVFpEYXRlIH0gZnJvbSBcIkBkYXRlLWZucy90elwiO1xyXG5cclxuLyoqIENyZWF0ZXMgYW4gYXJyYXkgYW5kIGZpbGxzIGl0IHdpdGggdmFsdWVzLiAqL1xyXG5mdW5jdGlvbiByYW5nZTxUPihsZW5ndGg6IG51bWJlciwgdmFsdWVGdW5jdGlvbjogKGluZGV4OiBudW1iZXIpID0+IFQpOiBUW10ge1xyXG4gIGNvbnN0IHZhbHVlc0FycmF5ID0gQXJyYXkobGVuZ3RoKTtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICB2YWx1ZXNBcnJheVtpXSA9IHZhbHVlRnVuY3Rpb24oaSk7XHJcbiAgfVxyXG4gIHJldHVybiB2YWx1ZXNBcnJheTtcclxufVxyXG5cclxuLy8gZGF0ZS1mbnMgZG9lc24ndCBoYXZlIGEgd2F5IHRvIHJlYWQvcHJpbnQgbW9udGggbmFtZXMgb3IgZGF5cyBvZiB0aGUgd2VlayBkaXJlY3RseSxcclxuLy8gc28gd2UgZ2V0IHRoZW0gYnkgZm9ybWF0dGluZyBhIGRhdGUgd2l0aCBhIGZvcm1hdCB0aGF0IHByb2R1Y2VzIHRoZSBkZXNpcmVkIG1vbnRoL2RheS5cclxuY29uc3QgTU9OVEhfRk9STUFUUyA9IHtcclxuICBsb25nOiAnTExMTCcsXHJcbiAgc2hvcnQ6ICdMTEwnLFxyXG4gIG5hcnJvdzogJ0xMTExMJyxcclxufTtcclxuXHJcbmNvbnN0IERBWV9PRl9XRUVLX0ZPUk1BVFMgPSB7XHJcbiAgbG9uZzogJ0VFRUUnLFxyXG4gIHNob3J0OiAnRUVFJyxcclxuICBuYXJyb3c6ICdFRUVFRScsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgTUFUX0RBVEVfRk5TX0ZPUk1BVFM6IE1hdERhdGVGb3JtYXRzID0ge1xyXG4gIHBhcnNlOiB7XHJcbiAgICBkYXRlSW5wdXQ6ICdQJyxcclxuICB9LFxyXG4gIGRpc3BsYXk6IHtcclxuICAgIGRhdGVJbnB1dDogJ1AnLFxyXG4gICAgbW9udGhZZWFyTGFiZWw6ICdMTEwgdXV1dScsXHJcbiAgICBkYXRlQTExeUxhYmVsOiAnUFAnLFxyXG4gICAgbW9udGhZZWFyQTExeUxhYmVsOiAnTExMTCB1dXV1JyxcclxuICB9LFxyXG59O1xyXG5cclxuLyoqIEFkZHMgZGF0ZS1mbnMgc3VwcG9ydCB0byBBbmd1bGFyIE1hdGVyaWFsLiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEYXRlRm5zQWRhcHRlciBleHRlbmRzIERhdGVBZGFwdGVyPERhdGUsIExvY2FsZT4ge1xyXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RBVEVfTE9DQUxFKSBtYXREYXRlTG9jYWxlOiBudWxsKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgaWYgKG1hdERhdGVMb2NhbGUpe1xyXG4gICAgICB0aGlzLnNldExvY2FsZSggbWF0RGF0ZUxvY2FsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGdldFllYXIoZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRNb250aChkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBnZXRNb250aChkYXRlKTtcclxuICB9XHJcblxyXG4gIGdldERhdGUoZGF0ZTogRGF0ZSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZ2V0RGF0ZShkYXRlKTtcclxuICB9XHJcblxyXG4gIGdldERheU9mV2VlayhkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBnZXREYXkoZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBnZXRNb250aE5hbWVzKHN0eWxlOiAnbG9uZycgfCAnc2hvcnQnIHwgJ25hcnJvdycpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBwYXR0ZXJuID0gTU9OVEhfRk9STUFUU1tzdHlsZV07XHJcbiAgICByZXR1cm4gcmFuZ2UoMTIsIGkgPT4gdGhpcy5mb3JtYXQobmV3IERhdGUoMjAxNywgaSwgMSksIHBhdHRlcm4pKTtcclxuICB9XHJcblxyXG4gIGdldERhdGVOYW1lcygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBkdGYgPVxyXG4gICAgICB0eXBlb2YgSW50bCAhPT0gJ3VuZGVmaW5lZCdcclxuICAgICAgICA/IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLmNvZGUsIHtcclxuICAgICAgICAgIGRheTogJ251bWVyaWMnLFxyXG4gICAgICAgICAgdGltZVpvbmU6ICd1dGMnLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgOiBudWxsO1xyXG5cclxuICAgIHJldHVybiByYW5nZSgzMSwgaSA9PiB7XHJcbiAgICAgIGlmIChkdGYpIHtcclxuICAgICAgICAvLyBkYXRlLWZucyBkb2Vzbid0IGFwcGVhciB0byBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eS5cclxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gYEludGxgIG9uIHN1cHBvcnRlZCBicm93c2Vycy5cclxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKDIwMTcsIDAsIGkgKyAxKTtcclxuICAgICAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgICAgIHJldHVybiBkdGYuZm9ybWF0KGRhdGUpLnJlcGxhY2UoL1tcXHUyMDBlXFx1MjAwZl0vZywgJycpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gaSArICcnO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXREYXlPZldlZWtOYW1lcyhzdHlsZTogJ2xvbmcnIHwgJ3Nob3J0JyB8ICduYXJyb3cnKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgcGF0dGVybiA9IERBWV9PRl9XRUVLX0ZPUk1BVFNbc3R5bGVdO1xyXG4gICAgcmV0dXJuIHJhbmdlKDcsIGkgPT4gdGhpcy5mb3JtYXQobmV3IERhdGUoMjAxNywgMCwgaSArIDEpLCBwYXR0ZXJuKSk7XHJcbiAgfVxyXG5cclxuICBnZXRZZWFyTmFtZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1hdChkYXRlLCAneScpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rmlyc3REYXlPZldlZWsoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmxvY2FsZS5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gMDtcclxuICB9XHJcblxyXG4gIGdldE51bURheXNJbk1vbnRoKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGdldERheXNJbk1vbnRoKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgY2xvbmUoZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZURhdGUoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXRlOiBudW1iZXIpOiBEYXRlIHtcclxuXHJcbiAgICAvLyBDaGVjayBmb3IgaW52YWxpZCBtb250aCBhbmQgZGF0ZSAoZXhjZXB0IHVwcGVyIGJvdW5kIG9uIGRhdGUgd2hpY2ggd2UgaGF2ZSB0byBjaGVjayBhZnRlclxyXG4gICAgLy8gY3JlYXRpbmcgdGhlIERhdGUpLlxyXG4gICAgaWYgKG1vbnRoIDwgMCB8fCBtb250aCA+IDExKSB7XHJcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIG1vbnRoIGluZGV4IFwiJHttb250aH1cIi4gTW9udGggaW5kZXggaGFzIHRvIGJlIGJldHdlZW4gMCBhbmQgMTEuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGUgPCAxKSB7XHJcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIGRhdGUgXCIke2RhdGV9XCIuIERhdGUgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLmApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBhc3NpbmcgdGhlIHllYXIgdG8gdGhlIGNvbnN0cnVjdG9yIGNhdXNlcyB5ZWFyIG51bWJlcnMgPDEwMCB0byBiZSBjb252ZXJ0ZWQgdG8gMTl4eC5cclxuICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMgd2UgdXNlIGBzZXRGdWxsWWVhcmAgYW5kIGBzZXRIb3Vyc2AgaW5zdGVhZC5cclxuICAgIGxldCByZXN1bHQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgcmVzdWx0LnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKTtcclxuICAgIHJlc3VsdC5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgIHJlc3VsdCA9IG5ldyBUWkRhdGUocmVzdWx0LCBcIlVUQ1wiKTtcclxuXHJcbiAgICAvLyBDaGVjayB0aGF0IHRoZSBkYXRlIHdhc24ndCBhYm92ZSB0aGUgdXBwZXIgYm91bmQgZm9yIHRoZSBtb250aCwgY2F1c2luZyB0aGUgbW9udGggdG8gb3ZlcmZsb3dcclxuICAgIGlmIChyZXN1bHQuZ2V0TW9udGgoKSAhPSBtb250aCkge1xyXG4gICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBkYXRlIFwiJHtkYXRlfVwiIGZvciBtb250aCB3aXRoIGluZGV4IFwiJHttb250aH1cIi5gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgdG9kYXkoKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoKTtcclxuICB9XHJcblxyXG4gIHBhcnNlKHZhbHVlOiBhbnksIHBhcnNlRm9ybWF0OiBzdHJpbmcgfCBzdHJpbmdbXSk6IERhdGUgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgaXNvODYwMURhdGUgPSBwYXJzZUlTTyh2YWx1ZSk7XHJcbiAgICAgIGlmICh0aGlzLmlzVmFsaWQoaXNvODYwMURhdGUpKSB7XHJcbiAgICAgICAgaXNvODYwMURhdGUgPSBuZXcgVFpEYXRlIChpc284NjAxRGF0ZSwgXCJVVENcIik7XHJcbiAgICAgICAgcmV0dXJuIGlzbzg2MDFEYXRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBmb3JtYXRzID0gQXJyYXkuaXNBcnJheShwYXJzZUZvcm1hdCkgPyBwYXJzZUZvcm1hdCA6IFtwYXJzZUZvcm1hdF07XHJcblxyXG4gICAgICBpZiAoIXBhcnNlRm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdGb3JtYXRzIGFycmF5IG11c3Qgbm90IGJlIGVtcHR5LicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGN1cnJlbnRGb3JtYXQgb2YgZm9ybWF0cykge1xyXG4gICAgICAgIGxldCBmcm9tRm9ybWF0ID0gcGFyc2UodmFsdWUsIGN1cnJlbnRGb3JtYXQsIG5ldyBEYXRlKCksIHsgbG9jYWxlOiB0aGlzLmxvY2FsZSB9KTtcclxuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKGZyb21Gb3JtYXQpKSB7XHJcbiAgICAgICAgICBmcm9tRm9ybWF0ID0gbmV3IFRaRGF0ZSAoZnJvbUZvcm1hdCwgXCJVVENcIik7XHJcbiAgICAgICAgICByZXR1cm4gZnJvbUZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmludmFsaWQoKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmUodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvcm1hdChkYXRlOiBEYXRlLCBkaXNwbGF5Rm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoZGF0ZSkpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ0RhdGVGbnNBZGFwdGVyOiBDYW5ub3QgZm9ybWF0IGludmFsaWQgZGF0ZS4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ybWF0KGRhdGUsIGRpc3BsYXlGb3JtYXQsIHsgbG9jYWxlOiB0aGlzLmxvY2FsZSB9KTtcclxuICB9XHJcblxyXG4gIGFkZENhbGVuZGFyWWVhcnMoZGF0ZTogRGF0ZSwgeWVhcnM6IG51bWJlcik6IERhdGUge1xyXG4gICAgcmV0dXJuIGFkZFllYXJzKGRhdGUsIHllYXJzKTtcclxuICB9XHJcblxyXG4gIGFkZENhbGVuZGFyTW9udGhzKGRhdGU6IERhdGUsIG1vbnRoczogbnVtYmVyKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIG1vbnRocyk7XHJcbiAgfVxyXG5cclxuICBhZGRDYWxlbmRhckRheXMoZGF0ZTogRGF0ZSwgZGF5czogbnVtYmVyKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gYWRkRGF5cyhkYXRlLCBkYXlzKTtcclxuICB9XHJcblxyXG4gIHRvSXNvODYwMShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBmb3JtYXRJU08oZGF0ZSwgeyByZXByZXNlbnRhdGlvbjogJ2RhdGUnIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZ2l2ZW4gdmFsdWUgaWYgZ2l2ZW4gYSB2YWxpZCBEYXRlIG9yIG51bGwuIERlc2VyaWFsaXplcyB2YWxpZCBJU08gODYwMSBzdHJpbmdzXHJcbiAgICogKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzMzM5LnR4dCkgaW50byB2YWxpZCBEYXRlcyBhbmQgZW1wdHkgc3RyaW5nIGludG8gbnVsbC4gUmV0dXJucyBhblxyXG4gICAqIGludmFsaWQgZGF0ZSBmb3IgYWxsIG90aGVyIHZhbHVlcy5cclxuICAgKi9cclxuICBvdmVycmlkZSBkZXNlcmlhbGl6ZSh2YWx1ZTogYW55KTogRGF0ZSB8IG51bGwge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZUlTTyh2YWx1ZSk7XHJcbiAgICAgIGlmICh0aGlzLmlzVmFsaWQoZGF0ZSkpIHtcclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGlzRGF0ZUluc3RhbmNlKG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gaXNEYXRlKG9iaik7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkKGRhdGU6IERhdGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpc1ZhbGlkKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgaW52YWxpZCgpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xyXG4gIH1cclxufSJdfQ==
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZUZuc0FkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY29yZS9kYXRlRm5zQWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBa0IsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEYsT0FBTyxFQUVMLFFBQVEsRUFDUixPQUFPLEVBQ1AsT0FBTyxFQUNQLE1BQU0sRUFDTixjQUFjLEVBQ2QsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsT0FBTyxFQUNQLE9BQU8sRUFDUCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEdBQ04sTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGFBQWEsRUFBRyxNQUFNLGFBQWEsQ0FBQzs7QUFFN0MsaURBQWlEO0FBQ2pELFNBQVMsS0FBSyxDQUFJLE1BQWMsRUFBRSxhQUFtQztJQUNuRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxzRkFBc0Y7QUFDdEYseUZBQXlGO0FBQ3pGLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLEtBQUs7SUFDWixNQUFNLEVBQUUsT0FBTztDQUNoQixDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixJQUFJLEVBQUUsTUFBTTtJQUNaLEtBQUssRUFBRSxLQUFLO0lBQ1osTUFBTSxFQUFFLE9BQU87Q0FDaEIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFtQjtJQUNsRCxLQUFLLEVBQUU7UUFDTCxTQUFTLEVBQUUsR0FBRztLQUNmO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsU0FBUyxFQUFFLEdBQUc7UUFDZCxjQUFjLEVBQUUsVUFBVTtRQUMxQixhQUFhLEVBQUUsSUFBSTtRQUNuQixrQkFBa0IsRUFBRSxXQUFXO0tBQ2hDO0NBQ0YsQ0FBQztBQUVGLGlEQUFpRDtBQUVqRCxNQUFNLE9BQU8sY0FBZSxTQUFRLFdBQXlCO0lBQzNELFlBQWlELGFBQW1CO1FBQ2xFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxhQUFhLEVBQUMsQ0FBQztZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVU7UUFDaEIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFVO1FBQ2pCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBVTtRQUNoQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVU7UUFDckIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFrQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsT0FBTyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLEdBQUcsR0FDUCxPQUFPLElBQUksS0FBSyxXQUFXO1lBQ3pCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQzFDLEdBQUcsRUFBRSxTQUFTO2dCQUNkLFFBQVEsRUFBRSxLQUFLO2FBQ2hCLENBQUM7WUFDRixDQUFDLENBQUMsSUFBSSxDQUFDO1FBRVgsT0FBTyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ25CLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IseURBQXlEO2dCQUN6RCw2Q0FBNkM7Z0JBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekQsQ0FBQztZQUVELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFrQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsWUFBWSxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBVTtRQUMxQixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVU7UUFDZCxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxJQUFZO1FBRWxELDRGQUE0RjtRQUM1RixzQkFBc0I7UUFDdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUM1QixNQUFNLEtBQUssQ0FBQyx3QkFBd0IsS0FBSyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFFRCxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNiLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixJQUFJLG1DQUFtQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELHdGQUF3RjtRQUN4RixtRUFBbUU7UUFDbkUsSUFBSSxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsYUFBYSxDQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV2QyxnR0FBZ0c7UUFDaEcsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7WUFDL0IsTUFBTSxLQUFLLENBQUMsaUJBQWlCLElBQUksMkJBQTJCLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBVSxFQUFFLFdBQThCO1FBQzlDLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakQsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUM5QixXQUFXLEdBQUcsYUFBYSxDQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDakQsT0FBTyxXQUFXLENBQUM7WUFDckIsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUV6RSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN4QixNQUFNLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFFRCxLQUFLLE1BQU0sYUFBYSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNwQyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsVUFBVSxHQUFHLGFBQWEsQ0FBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQy9DLE9BQU8sVUFBVSxDQUFDO2dCQUNwQixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLENBQUM7YUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQzthQUFNLElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBR0QsTUFBTSxDQUFDLElBQVUsRUFBRSxhQUFxQjtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVUsRUFBRSxLQUFhO1FBQ3hDLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBVSxFQUFFLE1BQWM7UUFDMUMsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBVSxFQUFFLElBQVk7UUFDdEMsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBVTtRQUNsQixPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNNLFdBQVcsQ0FBQyxLQUFVO1FBQzdCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQVE7UUFDckIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFVO1FBQ2hCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDOzhHQTdMVSxjQUFjLGtCQUNPLGVBQWU7a0hBRHBDLGNBQWM7OzJGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQUVJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIE1hdERhdGVGb3JtYXRzLCBNQVRfREFURV9MT0NBTEUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHtcclxuICBMb2NhbGUsXHJcbiAgZ2V0TW9udGgsXHJcbiAgZ2V0WWVhcixcclxuICBnZXREYXRlLFxyXG4gIGdldERheSxcclxuICBnZXREYXlzSW5Nb250aCxcclxuICBmb3JtYXRJU08sXHJcbiAgYWRkWWVhcnMsXHJcbiAgYWRkTW9udGhzLFxyXG4gIGFkZERheXMsXHJcbiAgaXNWYWxpZCxcclxuICBpc0RhdGUsXHJcbiAgZm9ybWF0LFxyXG4gIHBhcnNlSVNPLFxyXG4gIHBhcnNlLFxyXG59IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHsgZnJvbVpvbmVkVGltZSAgfSBmcm9tICdkYXRlLWZucy10eic7XHJcblxyXG4vKiogQ3JlYXRlcyBhbiBhcnJheSBhbmQgZmlsbHMgaXQgd2l0aCB2YWx1ZXMuICovXHJcbmZ1bmN0aW9uIHJhbmdlPFQ+KGxlbmd0aDogbnVtYmVyLCB2YWx1ZUZ1bmN0aW9uOiAoaW5kZXg6IG51bWJlcikgPT4gVCk6IFRbXSB7XHJcbiAgY29uc3QgdmFsdWVzQXJyYXkgPSBBcnJheShsZW5ndGgpO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgIHZhbHVlc0FycmF5W2ldID0gdmFsdWVGdW5jdGlvbihpKTtcclxuICB9XHJcbiAgcmV0dXJuIHZhbHVlc0FycmF5O1xyXG59XHJcblxyXG4vLyBkYXRlLWZucyBkb2Vzbid0IGhhdmUgYSB3YXkgdG8gcmVhZC9wcmludCBtb250aCBuYW1lcyBvciBkYXlzIG9mIHRoZSB3ZWVrIGRpcmVjdGx5LFxyXG4vLyBzbyB3ZSBnZXQgdGhlbSBieSBmb3JtYXR0aW5nIGEgZGF0ZSB3aXRoIGEgZm9ybWF0IHRoYXQgcHJvZHVjZXMgdGhlIGRlc2lyZWQgbW9udGgvZGF5LlxyXG5jb25zdCBNT05USF9GT1JNQVRTID0ge1xyXG4gIGxvbmc6ICdMTExMJyxcclxuICBzaG9ydDogJ0xMTCcsXHJcbiAgbmFycm93OiAnTExMTEwnLFxyXG59O1xyXG5cclxuY29uc3QgREFZX09GX1dFRUtfRk9STUFUUyA9IHtcclxuICBsb25nOiAnRUVFRScsXHJcbiAgc2hvcnQ6ICdFRUUnLFxyXG4gIG5hcnJvdzogJ0VFRUVFJyxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBNQVRfREFURV9GTlNfRk9STUFUUzogTWF0RGF0ZUZvcm1hdHMgPSB7XHJcbiAgcGFyc2U6IHtcclxuICAgIGRhdGVJbnB1dDogJ1AnLFxyXG4gIH0sXHJcbiAgZGlzcGxheToge1xyXG4gICAgZGF0ZUlucHV0OiAnUCcsXHJcbiAgICBtb250aFllYXJMYWJlbDogJ0xMTCB1dXV1JyxcclxuICAgIGRhdGVBMTF5TGFiZWw6ICdQUCcsXHJcbiAgICBtb250aFllYXJBMTF5TGFiZWw6ICdMTExMIHV1dXUnLFxyXG4gIH0sXHJcbn07XHJcblxyXG4vKiogQWRkcyBkYXRlLWZucyBzdXBwb3J0IHRvIEFuZ3VsYXIgTWF0ZXJpYWwuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERhdGVGbnNBZGFwdGVyIGV4dGVuZHMgRGF0ZUFkYXB0ZXI8RGF0ZSwgTG9jYWxlPiB7XHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChNQVRfREFURV9MT0NBTEUpIG1hdERhdGVMb2NhbGU6IG51bGwpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBpZiAobWF0RGF0ZUxvY2FsZSl7XHJcbiAgICAgIHRoaXMuc2V0TG9jYWxlKCBtYXREYXRlTG9jYWxlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFllYXIoZGF0ZTogRGF0ZSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZ2V0WWVhcihkYXRlKTtcclxuICB9XHJcblxyXG4gIGdldE1vbnRoKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGdldE1vbnRoKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZShkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBnZXREYXRlKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF5T2ZXZWVrKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGdldERheShkYXRlKTtcclxuICB9XHJcblxyXG4gIGdldE1vbnRoTmFtZXMoc3R5bGU6ICdsb25nJyB8ICdzaG9ydCcgfCAnbmFycm93Jyk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IHBhdHRlcm4gPSBNT05USF9GT1JNQVRTW3N0eWxlXTtcclxuICAgIHJldHVybiByYW5nZSgxMiwgaSA9PiB0aGlzLmZvcm1hdChuZXcgRGF0ZSgyMDE3LCBpLCAxKSwgcGF0dGVybikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZU5hbWVzKCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGR0ZiA9XHJcbiAgICAgIHR5cGVvZiBJbnRsICE9PSAndW5kZWZpbmVkJ1xyXG4gICAgICAgID8gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUuY29kZSwge1xyXG4gICAgICAgICAgZGF5OiAnbnVtZXJpYycsXHJcbiAgICAgICAgICB0aW1lWm9uZTogJ3V0YycsXHJcbiAgICAgICAgfSlcclxuICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgcmV0dXJuIHJhbmdlKDMxLCBpID0+IHtcclxuICAgICAgaWYgKGR0Zikge1xyXG4gICAgICAgIC8vIGRhdGUtZm5zIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5LlxyXG4gICAgICAgIC8vIEZhbGwgYmFjayB0byBgSW50bGAgb24gc3VwcG9ydGVkIGJyb3dzZXJzLlxyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoMjAxNywgMCwgaSArIDEpO1xyXG4gICAgICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgcmV0dXJuIGR0Zi5mb3JtYXQoZGF0ZSkucmVwbGFjZSgvW1xcdTIwMGVcXHUyMDBmXS9nLCAnJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBpICsgJyc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldERheU9mV2Vla05hbWVzKHN0eWxlOiAnbG9uZycgfCAnc2hvcnQnIHwgJ25hcnJvdycpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBwYXR0ZXJuID0gREFZX09GX1dFRUtfRk9STUFUU1tzdHlsZV07XHJcbiAgICByZXR1cm4gcmFuZ2UoNywgaSA9PiB0aGlzLmZvcm1hdChuZXcgRGF0ZSgyMDE3LCAwLCBpICsgMSksIHBhdHRlcm4pKTtcclxuICB9XHJcblxyXG4gIGdldFllYXJOYW1lKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0KGRhdGUsICd5Jyk7XHJcbiAgfVxyXG5cclxuICBnZXRGaXJzdERheU9mV2VlaygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxlLm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0TnVtRGF5c0luTW9udGgoZGF0ZTogRGF0ZSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZ2V0RGF5c0luTW9udGgoZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBjbG9uZShkYXRlOiBEYXRlKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRGF0ZSh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRhdGU6IG51bWJlcik6IERhdGUge1xyXG5cclxuICAgIC8vIENoZWNrIGZvciBpbnZhbGlkIG1vbnRoIGFuZCBkYXRlIChleGNlcHQgdXBwZXIgYm91bmQgb24gZGF0ZSB3aGljaCB3ZSBoYXZlIHRvIGNoZWNrIGFmdGVyXHJcbiAgICAvLyBjcmVhdGluZyB0aGUgRGF0ZSkuXHJcbiAgICBpZiAobW9udGggPCAwIHx8IG1vbnRoID4gMTEpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgbW9udGggaW5kZXggXCIke21vbnRofVwiLiBNb250aCBpbmRleCBoYXMgdG8gYmUgYmV0d2VlbiAwIGFuZCAxMS5gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0ZSA8IDEpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgZGF0ZSBcIiR7ZGF0ZX1cIi4gRGF0ZSBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGFzc2luZyB0aGUgeWVhciB0byB0aGUgY29uc3RydWN0b3IgY2F1c2VzIHllYXIgbnVtYmVycyA8MTAwIHRvIGJlIGNvbnZlcnRlZCB0byAxOXh4LlxyXG4gICAgLy8gVG8gd29yayBhcm91bmQgdGhpcyB3ZSB1c2UgYHNldEZ1bGxZZWFyYCBhbmQgYHNldEhvdXJzYCBpbnN0ZWFkLlxyXG4gICAgbGV0IHJlc3VsdCA9IG5ldyBEYXRlKCk7XHJcbiAgICByZXN1bHQuc2V0RnVsbFllYXIoeWVhciwgbW9udGgsIGRhdGUpO1xyXG4gICAgcmVzdWx0LnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgcmVzdWx0ID0gZnJvbVpvbmVkVGltZSAocmVzdWx0LCBcIlVUQ1wiKTtcclxuXHJcbiAgICAvLyBDaGVjayB0aGF0IHRoZSBkYXRlIHdhc24ndCBhYm92ZSB0aGUgdXBwZXIgYm91bmQgZm9yIHRoZSBtb250aCwgY2F1c2luZyB0aGUgbW9udGggdG8gb3ZlcmZsb3dcclxuICAgIGlmIChyZXN1bHQuZ2V0TW9udGgoKSAhPSBtb250aCkge1xyXG4gICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBkYXRlIFwiJHtkYXRlfVwiIGZvciBtb250aCB3aXRoIGluZGV4IFwiJHttb250aH1cIi5gKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgdG9kYXkoKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoKTtcclxuICB9XHJcblxyXG4gIHBhcnNlKHZhbHVlOiBhbnksIHBhcnNlRm9ybWF0OiBzdHJpbmcgfCBzdHJpbmdbXSk6IERhdGUgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgaXNvODYwMURhdGUgPSBwYXJzZUlTTyh2YWx1ZSk7XHJcbiAgICAgIGlmICh0aGlzLmlzVmFsaWQoaXNvODYwMURhdGUpKSB7XHJcbiAgICAgICAgaXNvODYwMURhdGUgPSBmcm9tWm9uZWRUaW1lIChpc284NjAxRGF0ZSwgXCJVVENcIik7XHJcbiAgICAgICAgcmV0dXJuIGlzbzg2MDFEYXRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBmb3JtYXRzID0gQXJyYXkuaXNBcnJheShwYXJzZUZvcm1hdCkgPyBwYXJzZUZvcm1hdCA6IFtwYXJzZUZvcm1hdF07XHJcblxyXG4gICAgICBpZiAoIXBhcnNlRm9ybWF0Lmxlbmd0aCkge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdGb3JtYXRzIGFycmF5IG11c3Qgbm90IGJlIGVtcHR5LicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGN1cnJlbnRGb3JtYXQgb2YgZm9ybWF0cykge1xyXG4gICAgICAgIGxldCBmcm9tRm9ybWF0ID0gcGFyc2UodmFsdWUsIGN1cnJlbnRGb3JtYXQsIG5ldyBEYXRlKCksIHsgbG9jYWxlOiB0aGlzLmxvY2FsZSB9KTtcclxuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKGZyb21Gb3JtYXQpKSB7XHJcbiAgICAgICAgICBmcm9tRm9ybWF0ID0gZnJvbVpvbmVkVGltZSAoZnJvbUZvcm1hdCwgXCJVVENcIik7XHJcbiAgICAgICAgICByZXR1cm4gZnJvbUZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmludmFsaWQoKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmUodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvcm1hdChkYXRlOiBEYXRlLCBkaXNwbGF5Rm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoZGF0ZSkpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ0RhdGVGbnNBZGFwdGVyOiBDYW5ub3QgZm9ybWF0IGludmFsaWQgZGF0ZS4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ybWF0KGRhdGUsIGRpc3BsYXlGb3JtYXQsIHsgbG9jYWxlOiB0aGlzLmxvY2FsZSB9KTtcclxuICB9XHJcblxyXG4gIGFkZENhbGVuZGFyWWVhcnMoZGF0ZTogRGF0ZSwgeWVhcnM6IG51bWJlcik6IERhdGUge1xyXG4gICAgcmV0dXJuIGFkZFllYXJzKGRhdGUsIHllYXJzKTtcclxuICB9XHJcblxyXG4gIGFkZENhbGVuZGFyTW9udGhzKGRhdGU6IERhdGUsIG1vbnRoczogbnVtYmVyKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIG1vbnRocyk7XHJcbiAgfVxyXG5cclxuICBhZGRDYWxlbmRhckRheXMoZGF0ZTogRGF0ZSwgZGF5czogbnVtYmVyKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gYWRkRGF5cyhkYXRlLCBkYXlzKTtcclxuICB9XHJcblxyXG4gIHRvSXNvODYwMShkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBmb3JtYXRJU08oZGF0ZSwgeyByZXByZXNlbnRhdGlvbjogJ2RhdGUnIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZ2l2ZW4gdmFsdWUgaWYgZ2l2ZW4gYSB2YWxpZCBEYXRlIG9yIG51bGwuIERlc2VyaWFsaXplcyB2YWxpZCBJU08gODYwMSBzdHJpbmdzXHJcbiAgICogKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzMzM5LnR4dCkgaW50byB2YWxpZCBEYXRlcyBhbmQgZW1wdHkgc3RyaW5nIGludG8gbnVsbC4gUmV0dXJucyBhblxyXG4gICAqIGludmFsaWQgZGF0ZSBmb3IgYWxsIG90aGVyIHZhbHVlcy5cclxuICAgKi9cclxuICBvdmVycmlkZSBkZXNlcmlhbGl6ZSh2YWx1ZTogYW55KTogRGF0ZSB8IG51bGwge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZUlTTyh2YWx1ZSk7XHJcbiAgICAgIGlmICh0aGlzLmlzVmFsaWQoZGF0ZSkpIHtcclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGlzRGF0ZUluc3RhbmNlKG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gaXNEYXRlKG9iaik7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkKGRhdGU6IERhdGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpc1ZhbGlkKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgaW52YWxpZCgpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xyXG4gIH1cclxufSJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { HttpParams } from "@angular/common/http";
2
2
  import { format, parse, parseISO, setHours } from 'date-fns';
3
3
  import { it } from 'date-fns/locale';
4
- import { TZDate } from '@date-fns/tz';
4
+ import { fromZonedTime } from 'date-fns-tz';
5
5
  export var DateFormat;
6
6
  (function (DateFormat) {
7
7
  DateFormat[DateFormat["Short"] = 1] = "Short";
@@ -512,8 +512,8 @@ export class SystemUtils {
512
512
  let year = -1;
513
513
  if (value.length === 4 && (year = parseInt(value)) > 1750) {
514
514
  if (!end) {
515
- interval.from = new TZDate(new Date(year, 0, 1), 'UTC');
516
- interval.to = new TZDate(new Date(year, 11, 31), 'UTC');
515
+ interval.from = fromZonedTime(new Date(year, 0, 1), 'UTC');
516
+ interval.to = fromZonedTime(new Date(year, 11, 31), 'UTC');
517
517
  }
518
518
  else
519
519
  interval.to = new Date(year, 11, 31);
@@ -522,15 +522,15 @@ export class SystemUtils {
522
522
  let parts = this.getDateParts(value);
523
523
  if (!parts || isNaN(parts[0]) || parts[0] < 0 || parts[0] < 1750)
524
524
  return;
525
- const tzDate = new TZDate(new Date(parts[0], parts[1], parts[2]), 'UTC');
525
+ const d = fromZonedTime(new Date(parts[0], parts[1], parts[2]), 'UTC');
526
526
  if (end)
527
- interval.to = tzDate;
527
+ interval.to = d;
528
528
  else if (copy) {
529
- interval.from = tzDate;
530
- interval.to = tzDate;
529
+ interval.from = d;
530
+ interval.to = d;
531
531
  }
532
532
  else
533
- interval.from = tzDate;
533
+ interval.from = d;
534
534
  }
535
535
  }
536
536
  }
@@ -641,4 +641,4 @@ export class SystemUtils {
641
641
  return nodes;
642
642
  }
643
643
  }
644
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NvcmUvc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBWXRDLE1BQU0sQ0FBTixJQUFZLFVBYVg7QUFiRCxXQUFZLFVBQVU7SUFDcEIsNkNBQVMsQ0FBQTtJQUNULDJDQUFRLENBQUE7SUFDUix1RUFBc0IsQ0FBQTtJQUN0QixpRUFBbUIsQ0FBQTtJQUNuQiwyRUFBd0IsQ0FBQTtJQUN4QiwyREFBZ0IsQ0FBQTtJQUNoQixtRUFBb0IsQ0FBQTtJQUNwQixpREFBVyxDQUFBO0lBQ1gseURBQWUsQ0FBQTtJQUNmLDBEQUFnQixDQUFBO0lBQ2hCLGtEQUFZLENBQUE7SUFDWiw0REFBaUIsQ0FBQSxDQUFTLGFBQWE7QUFDekMsQ0FBQyxFQWJXLFVBQVUsS0FBVixVQUFVLFFBYXJCO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFDdEI7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBSSxLQUE2QixFQUFFLEdBQVcsRUFBRSxLQUFVO1FBQzdFLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFLLElBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxD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QUM7YUFDUCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVE7Z0JBQ1gsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztvQkFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNULEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgRGF0ZUludGVydmFsIH0gZnJvbSAnLi9kZWZpbml0aW9ucyc7XHJcbmltcG9ydCB7IGZvcm1hdCwgcGFyc2UsIHBhcnNlSVNPLCBzZXRIb3VycyB9IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHsgaXQgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUnO1xyXG5pbXBvcnQgeyBUWkRhdGUgfSBmcm9tICdAZGF0ZS1mbnMvdHonO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTm9kZSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICBjb3VudD86IG51bWJlciB8IG51bGw7XHJcbiAgY2hpbGRyZW4/OiBJTm9kZVtdIHwgbnVsbDtcclxuICBwYXJlbnQ/OiBJTm9kZSB8IG51bGw7XHJcbiAgYmFnPzogYW55IHwgbnVsbFxyXG59XHJcblxyXG5cclxuZXhwb3J0IGVudW0gRGF0ZUZvcm1hdCB7XHJcbiAgU2hvcnQgPSAxLCAgICAgICAgICAgICAgICAvLyBkZC9tbS95eXl5XHJcbiAgTG9uZyA9IDIsICAgICAgICAgICAgICAgICAvLyBkIG1tbW0geXl5eVxyXG4gIExvbmdXaXRoU2hvcnRNb250aCA9IDMsICAgLy8gZCBtbW0geXl5eVxyXG4gIExvbmdXaXRoV2Vla0RheSA9IDQsICAgICAgLy8gd3d3dywgZCBtbW1tIHl5eXlcclxuICBMb25nV2l0aFNob3J0V2Vla0RheSA9IDUsIC8vIHd3dywgZCBtbW1tIHl5eXlcclxuICBNb250aEFuZFllYXIgPSA2LCAgICAgICAgIC8vIG1tbSB5eXl5XHJcbiAgTG9uZ01vbnRoQW5kWWVhciA9IDcsICAgICAvLyBtbW1tIHl5eXlcclxuICBXZWVrRGF5ID0gOCwgICAgICAgICAgICAgIC8vIHd3dyBkXHJcbiAgTG9uZ1dlZWtEYXkgPSA5LCAgICAgICAgICAvLyB3d3d3IGRcclxuICBEYXlBbmRNb250aCA9IDEwLCAgICAgICAgIC8vIGQgbW1tbVxyXG4gIFNob3J0VVMgPSAxMSwgICAgICAgICAgICAgLy8gbW0vZGQveXl5eVxyXG4gIFNob3J0SVNPODYwMSA9IDEyICAgICAgICAgLy8geXl5eS1tbS1kZFxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3lzdGVtVXRpbHMge1xyXG4gIC8qKlxyXG4gICAqIEFycmF5IGZpbmQgYnkga2V5XHJcbiAgICogQHBhcmFtIGFycmF5ICAgICA6IHRoZSBhcnJheSB0byBzY2FuXHJcbiAgICogQHBhcmFtIGtleSAgICAgICA6IGtleSBuYW1lXHJcbiAgICogQHBhcmFtIHZhbHVlICAgICA6IHRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yXHJcbiAgICogQHJldHVybnMgICAgICAgICA6IHRoZSBwcm9wZXJ0eSB2YWx1ZSBvciBudWxsXHJcbiAgICovXHJcbiAgc3RhdGljIGFycmF5RmluZEJ5S2V5PFQ+KGFycmF5OiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IFQgfCBudWxsIHtcclxuICAgIGlmICghYXJyYXkpIHJldHVybiBudWxsO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGFycmF5KSB7XHJcbiAgICAgIGlmICgoaXRlbSBhcyBhbnkpW2tleV0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXJyYXkgZmluZCBpbmRleCBieSBrZXlcclxuICAgKiBAcGFyYW0gYXJyYXkgICA6IHRoZSBhcnJheSB0byBzY2FuXHJcbiAgICogQHBhcmFtIGtleSAgICAgOiB0aGUga2V5IG5hbWVcclxuICAgKiBAcGFyYW0gdmFsdWUgICA6IHRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yXHJcbiAgICogQHJldHVybnMgICAgICAgOiB0aGUgYXJyYXkgaW5kZXggb3IgLTEgaWYgbm90IGZvdW5kXHJcbiAgICovXHJcbiAgc3RhdGljIGFycmF5RmluZEluZGV4QnlLZXk8VD4oYXJyYXk6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogbnVtYmVyIHtcclxuICAgIGlmICghYXJyYXkpIHJldHVybiAtMTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKChhcnJheVtpXSBhcyBhbnkpW2tleV0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhIHZhbHVlIGZyb20gYW5kIGFycmF5IG1hZGUgb2YgbmFtZXx2YWx1ZSBpdGVtc1xyXG4gICAqIEBwYXJhbSBhcnJheSAgIDogdGhlIGFycmF5IHRvIHNjYW5cclxuICAgKiBAcGFyYW0gdmFsdWUgICA6IHRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yXHJcbiAgICogQHJldHVybnMgICAgICAgOiB0aGUgcHJvcGVydHkgdmFsdWUgb3IgbnVsbCBpZiBub3QgZm91bmRcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlHZXRWYWx1ZTxUPihhcnJheTogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoIWFycmF5KSByZXR1cm4gbnVsbDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IChhcnJheVtpXSBhcyBhbnkpO1xyXG4gICAgICBpZiAoaXRlbS52YWx1ZSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5uYW1lIHx8IGl0ZW0uaWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udmVydCBpdGVtcyB0byBub2RlcyBpbnRvIGEgdHJlZSBzdHJ1Y3R1cmVcclxuICAgKiBAcGFyYW0gaXRlbXMgICA6IGxpc3Qgb2Ygbm9kZXNcclxuICAgKiBAcGFyYW0gcGFyZW50ICA6IHBhcmVudCBub2RlXHJcbiAgICogQHJldHVybnMgICAgICAgOiBhbiBhcnJheSBvZiBJTm9kZSBvYmplY3RzXHJcbiAgICovXHJcbiAgc3RhdGljIGFycmF5VG9Ob2RlcyhpdGVtczogSU5vZGVbXSwgcGFyZW50OiBJTm9kZSA9IG51bGwpOiBJTm9kZVtdIHtcclxuICAgIGNvbnN0IG5vZGVzOiBJTm9kZVtdID0gW107XHJcbiAgICBpdGVtcy5mb3JFYWNoKChuKSA9PiB7XHJcbiAgICAgIGNvbnN0IG5vZGU6IElOb2RlID0ge1xyXG4gICAgICAgIGlkOiBuLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgbmFtZTogbi5uYW1lLFxyXG4gICAgICAgIGNvdW50OiBuLmNvdW50ID8gbi5jb3VudCA6IDAsXHJcbiAgICAgICAgY2hpbGRyZW46IG51bGwsXHJcbiAgICAgICAgcGFyZW50LFxyXG4gICAgICAgIGJhZzogbixcclxuICAgICAgfTtcclxuICAgICAgbm9kZXMucHVzaChub2RlKTtcclxuICAgICAgbm9kZS5jaGlsZHJlbiA9XHJcbiAgICAgICAgbi5jaGlsZHJlbiAmJiBuLmNoaWxkcmVuLmxlbmd0aCA+IDBcclxuICAgICAgICAgID8gdGhpcy5hcnJheVRvTm9kZXMobi5jaGlsZHJlbiwgbm9kZSlcclxuICAgICAgICAgIDogW107XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBub2RlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZWQgdG8gY29wYXJlIGl0ZW1zIGR1cmluZyBhbiBhcnJheSBvZiBvYmplY3RzIHNvcnRpbmdcclxuICAgKiBAcGFyYW0ga2V5ICAgICA6IHRoZSBwcm9wZXJ0eSBuYW1lIHRvIHNvcnQgZm9yXHJcbiAgICogQHBhcmFtIG9yZGVyICAgOiB0aGUgb3JkZXIgJ2FzYycgb3IgJ2Rlc2MnXHJcbiAgICogQHJldHVybnMgICAgICAgOiAwIGlmIGVxdWFscywgMSBpZiBiaWdnZXIsIC0xIGlmIGxvd2VyXHJcbiAgICovXHJcbiAgc3RhdGljIGFycmF5U29ydENvbXBhcmUoa2V5OiBzdHJpbmcsIG9yZGVyOiBzdHJpbmcgPSBcImFzY1wiKSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBmdW5jdGlvbiBpbm5lclNvcnQoYTogYW55LCBiOiBhbnkpIHtcclxuICAgICAgaWYgKCFhLmhhc093blByb3BlcnR5KGtleSkgfHwgIWIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIC8vIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3Qgb24gZWl0aGVyIG9iamVjdFxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHZhckEgPSB0eXBlb2YgYVtrZXldID09PSBcInN0cmluZ1wiID8gYVtrZXldLnRvVXBwZXJDYXNlKCkgOiBhW2tleV07XHJcbiAgICAgIGNvbnN0IHZhckIgPSB0eXBlb2YgYltrZXldID09PSBcInN0cmluZ1wiID8gYltrZXldLnRvVXBwZXJDYXNlKCkgOiBiW2tleV07XHJcbiAgICAgIGxldCBjb21wYXJpc29uID0gMDtcclxuICAgICAgaWYgKHZhckEgPiB2YXJCKSBjb21wYXJpc29uID0gMTtcclxuICAgICAgZWxzZSBpZiAodmFyQSA8IHZhckIpIGNvbXBhcmlzb24gPSAtMTtcclxuICAgICAgcmV0dXJuIG9yZGVyID09PSBcImRlc2NcIiA/IGNvbXBhcmlzb24gKiAtMSA6IGNvbXBhcmlzb247XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm1hdCB3ZWlnaHRcclxuICAgKiBAcGFyYW0gZ3IgICAgOiBncmFtc1xyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSBmb3JtYXR0ZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGZvcm1hdFdlaWdodChncjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChnciA+IDEwMDAwMDApIHJldHVybiAoZ3IgLyAxMDAwMDAwKS50b0ZpeGVkKDIpICsgXCIgdFwiO1xyXG4gICAgZWxzZSBpZiAoZ3IgPiAxMDAwMDApIHJldHVybiAoZ3IgLyAxMDAwMDApLnRvRml4ZWQoMikgKyBcIiBxXCI7XHJcbiAgICBlbHNlIGlmIChnciA+IDEwMDApIHJldHVybiAoZ3IgLyAxMDAwKS50b0ZpeGVkKDIpICsgXCIga2dcIjtcclxuICAgIGVsc2UgcmV0dXJuIGdyICsgXCIgZ3JcIjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm1hdCBmaWxlIHNpemVcclxuICAgKiBAcGFyYW0gYnl0ZXMgOiBudW1iZXIgb2YgYnl0ZXNcclxuICAgKiBAcmV0dXJucyAgICAgOiB0aGUgZm9ybWF0dGVkIHN0cmluZ1xyXG4gICAqL1xyXG4gIHN0YXRpYyBmb3JtYXRGaWxlU2l6ZShieXRlczogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChieXRlcyA+IDEwMjQwMDApIHJldHVybiAoYnl0ZXMgLyAxMDI0MDAwKS50b0ZpeGVkKDEpICsgXCIgTUJcIjtcclxuICAgIGlmIChieXRlcyA+IDEwMjQpIHJldHVybiAoYnl0ZXMgLyAxMDI0KS50b0ZpeGVkKDEpICsgXCIgS2JcIjtcclxuICAgIHJldHVybiBieXRlcyArIFwiIGJ5dGVcIjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXBhcmUgdHdvIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBhICAgOiBzdHJpbmcgYVxyXG4gICAqIEBwYXJhbSBiICAgOiBzdHJpbmcgYlxyXG4gICAqIEByZXR1cm5zICAgOiAwIGlmIGVxdWFscywgMSBpZiBiaWdnZXIsIC0xIGlmIGxvd2VyXHJcbiAgICovXHJcbiAgc3RhdGljIGNvbXBhcmVTdHJpbmcoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgaWYgKChhID8/IFwiXCIpLnRvTG93ZXJDYXNlKCkgPiAoYiA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpKSByZXR1cm4gMTtcclxuICAgIGlmICgoYSA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpIDwgKGIgPz8gXCJcIikudG9Mb3dlckNhc2UoKSkgcmV0dXJuIC0xO1xyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYXBpdGFsaXplIGEgc3RyaW5nXHJcbiAgICogQHBhcmFtIHMgICA6IHRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZVxyXG4gICAqIEByZXR1cm5zICAgOiB0aGUgY2FwaXRhbGl6ZWQgc3RyaW5nICBcclxuICAgKi9cclxuICBzdGF0aWMgY2FwaXRhbGl6ZShzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFzKSByZXR1cm4gbnVsbDtcclxuICAgIGxldCBiID0gXCJcIjtcclxuICAgIGxldCBjYXAgPSB0cnVlO1xyXG4gICAgZm9yIChjb25zdCBjaGFyIG9mIHMpIHtcclxuICAgICAgaWYgKGNoYXIgPT09IFwiIFwiKSB7XHJcbiAgICAgICAgYiArPSBjaGFyO1xyXG4gICAgICAgIGNhcCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2FwKSB7XHJcbiAgICAgICAgYiArPSBjaGFyLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY2FwID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYiArPSBjaGFyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1bmNhdGUgYSBzdHJpbmdcclxuICAgKiBAcGFyYW0gcyAgICAgOiB0aGUgc3RyaW5nIHRvIHRydW5jYXRlXHJcbiAgICogQHBhcmFtIG1heCAgIDogdGhlIG1heCBudW1iZXIgb2YgY2hhcnNcclxuICAgKiBAcmV0dXJucyAgICAgOiB0aGUgdHJ1bmNhdGVkIHN0cmluZ1xyXG4gICAqL1xyXG4gIHN0YXRpYyB0cnVuY2F0ZShzOiBzdHJpbmcsIG1heDogbnVtYmVyID0gNTAwKTogc3RyaW5nIHtcclxuICAgIGlmICghcykgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAocy5sZW5ndGggPCBtYXgpIHJldHVybiBzO1xyXG4gICAgbGV0IGkgPSBtYXggLSAxO1xyXG4gICAgd2hpbGUgKGkgPiAwKSB7XHJcbiAgICAgIGlmIChzW2ldID09PSAnICcpIHJldHVybiBzLnNsaWNlKDAsIGkpO1xyXG4gICAgICBpLS07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEpvaW4gYSBsaXN0IG9mIHN0cmluZ3NcclxuICAgKiBAcGFyYW0gaXRlbXMgICAgIDogdGhlIGxpc3Qgb2Ygc3RyaW5nc1xyXG4gICAqIEBwYXJhbSBzZXAgICAgICAgOiB0aGUgc2VwYXJhdG9yIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBtYXggICAgICAgOiB0aGUgbWF4aW11bSByZXN1bHRpbmcgc3RyaW5nXHJcbiAgICogQHJldHVybnMgICAgICAgICA6IHRoZSBqb2luZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGpvaW4oaXRlbXM6IHN0cmluZ1tdLCBzZXA6IHN0cmluZyA9IFwiIFwiLCBtYXg6IG51bWJlciA9IDM1MCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAoaXRlbXMubGVuZ3RoID4gMSkge1xyXG4gICAgICBsZXQgbCA9IDA7XHJcbiAgICAgIGxldCBzID0gXCJcIlxyXG4gICAgICB3aGlsZSAocy5sZW5ndGggPCBtYXggJiYgaXRlbXMubGVuZ3RoID4gbCkge1xyXG4gICAgICAgIGlmIChsID4gMCkge1xyXG4gICAgICAgICAgcyArPSBzZXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHMgKz0gaXRlbXNbbCsrXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID4gbCkge1xyXG4gICAgICAgIHMgKz0gXCIuLi5cIjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcztcclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtc1swXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlcGxhY2Ugc3R1ZmYgaW4gdGV4dCBodG1sXHJcbiAgICogQHBhcmFtIHMgICA6IHRoZSBzdHJpbmcgdG8gcHJvY2Vzc1xyXG4gICAqIEByZXR1cm5zICAgOiB0aGUgcmVwbGFjZWQgc3RyaW5nICBcclxuICAgKi9cclxuICBzdGF0aWMgcmVwbGFjZUFzSHRtbChzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmVnZXggPSAvaHR0cHM/OlxcL1xcLy4qW15cXHNdL2lnXHJcbiAgICBjb25zdCBtID0gcmVnZXguZXhlYyhzKTtcclxuICAgIGlmIChtICYmIG0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgdiA9IG51bGw7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHYgPSBtW2ldO1xyXG4gICAgICAgIHMgPSBzLnJlcGxhY2UodiwgJzxhIGhyZWY9XCInICsgdiArICdcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nICsgdiArICc8L2E+Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcGFyZSB0d28gbmFtZXNcclxuICAgKiBAcGFyYW0gYSAgIDogbmFtZSBhXHJcbiAgICogQHBhcmFtIGIgICA6IG5hbWUgYlxyXG4gICAqIEByZXR1cm5zICAgOiB0cnVlIGlmIGEgZXF1YWxzIGJcclxuICAgKi9cclxuICBzdGF0aWMgY29tcGFyZU5hbWVzKGE6IHN0cmluZywgYjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoYSkgYSA9IGEudHJpbSgpO1xyXG4gICAgaWYgKGIpIGIgPSBiLnRyaW0oKTtcclxuICAgIGlmIChhICYmIGIgJiYgYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5jb21wYXJlU3RyaW5nKGEsIGIpID09PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgIGNvbnN0IHAxID0gYS5zcGxpdChcIiBcIik7XHJcbiAgICBjb25zdCBwMiA9IGIuc3BsaXQoXCIgXCIpO1xyXG4gICAgaWYgKHAxLmxlbmd0aCAhPT0gcDIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICBsZXQgbWF0Y2hlcyA9IHAxLmxlbmd0aDtcclxuICAgIGZvciAoY29uc3QgczEgb2YgcDEpIHtcclxuICAgICAgZm9yIChjb25zdCBzMiBvZiBwMikge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbXBhcmVTdHJpbmcoczEsIHMyKSA9PT0gMCkge1xyXG4gICAgICAgICAgbWF0Y2hlcy0tO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1hdGNoZXMgPT09IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaXBoZXIgYSB0ZXh0XHJcbiAgICogQHBhcmFtIHRleHQgICAgOiB0aGUgdGV4dFxyXG4gICAqIEBwYXJhbSBrZXkgICAgIDogdGhlIGtleVxyXG4gICAqIEBwYXJhbSByZXZlcnNlIDogdHJ1ZSB0byBkZWNvZGUsIGZhbHNlIHRvIGVuY29kZVxyXG4gICAqIEByZXR1cm5zICAgICAgIDp0aGUgY2lwaGVyZWQgdGV4dFxyXG4gICAqL1xyXG4gIHN0YXRpYyBjaXBoZXIodGV4dDogc3RyaW5nLCBrZXk6IHN0cmluZywgcmV2ZXJzZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgIC8vIFN1cnJvZ2F0ZSBwYWlyIGxpbWl0XHJcbiAgICB2YXIgYm91bmQgPSAweDEwMDAwO1xyXG5cclxuICAgIC8vIENyZWF0ZSBzdHJpbmcgZnJvbSBjaGFyYWN0ZXIgY29kZXNcclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxyXG4gICAgICBudWxsLFxyXG4gICAgICAvLyBUdXJuIHN0cmluZyB0byBjaGFyYWN0ZXIgY29kZXNcclxuICAgICAgdGV4dC5zcGxpdChcIlwiKS5tYXAoZnVuY3Rpb24gKHY6IGFueSwgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgLy8gR2V0IHJvdGF0aW9uIGZyb20ga2V5XHJcbiAgICAgICAgdmFyIHJvdGF0aW9uID0ga2V5LmNoYXJDb2RlQXQoaSAlIGtleS5sZW5ndGgpO1xyXG5cclxuICAgICAgICAvLyBBcmUgd2UgZGVjcnlwdGluZz9cclxuICAgICAgICBpZiAocmV2ZXJzZSkgcm90YXRpb24gPSAtcm90YXRpb247XHJcblxyXG4gICAgICAgIC8vIFJldHVybiBjdXJyZW50IGNoYXJhY3RlciBjb2RlICsgcm90YXRpb25cclxuICAgICAgICByZXR1cm4gKHYuY2hhckNvZGVBdCgpICsgcm90YXRpb24gKyBib3VuZCkgJSBib3VuZDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9uZSBhbiBvYmplY3QgdXNpbmcgSlNPTlxyXG4gICAqIEBwYXJhbSBvYmogOiB0aGUgb2JsZWN0IHRvIGNsb25lXHJcbiAgICogQHJldHVybnMgICA6IGEgbmV3IG9iamVjdFxyXG4gICAqL1xyXG4gIHN0YXRpYyBjbG9uZShvYmo6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoIW9iaikgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb25lIGFuIG9iamVjdCB1c2luZyBkZWVwIGNsb25pbmdcclxuICAgKiBAcGFyYW0gb2JqICAgOiB0aGUgb2JsZWN0IHRvIGNsb25lXHJcbiAgICogQHJldHVybnMgICAgIDogYSBuZXcgb2JqZWN0XHJcbiAgICovXHJcbiAgc3RhdGljIGRlZXBDbG9uZTxUPihvYmo6IGFueSwgZGVzdDogVCA9IG51bGwpOiBUIHtcclxuICAgIGNvbnN0IGNsb25lT2JqID0gZGVzdCA/IGRlc3QgOiAob2JqLmNvbnN0cnVjdG9yKCkgYXMgYW55KTtcclxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xyXG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IG9ialthdHRyaWJ1dGVdO1xyXG4gICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSBcIm9iamVjdFwiICYmIHByb3BlcnR5ICE9IG51bGwpIHtcclxuICAgICAgICBjbG9uZU9ialthdHRyaWJ1dGVdID0gdGhpcy5kZWVwQ2xvbmUocHJvcGVydHkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNsb25lT2JqW2F0dHJpYnV0ZV0gPSBwcm9wZXJ0eTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNsb25lT2JqO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgVVVJRFxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHZhbHVlIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgICAgOiB0cnVlIGlmIGlzIGEgdmFsaWQgVVVJRFxyXG4gICAqL1xyXG4gIHN0YXRpYyBwYXJzZVVVSUQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcmVnZXggPSAvXih7fCgpP1swLTlhLWZBLUZdezh9LShbMC05YS1mQS1GXXs0fS0pezN9WzAtOWEtZkEtRl17MTJ9KH18KSk/JC87XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBhbmQgZW5zdXJlIHRoYXQgVVVJRCBpcyBub3QgZW1wdHlcclxuICAgKiBAcGFyYW0gdmFsdWUgICA6IHRoZSB2YWx1ZSB0byBwYXJzZVxyXG4gICAqIEByZXR1cm5zICAgICAgIDogdHJ1ZSBpZiB2YWxpZCBhbmQgbm90IGVtcHR5XHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlVVVJRE5vdEVtcHR5KHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL14oe3woKT8wezh9LSgwezR9LSl7M30wezEyfSh9fCkpPyQvO1xyXG4gICAgcmV0dXJuIHRoaXMucGFyc2VVVUlEKHZhbHVlKSAmJiAhcmVnZXgudGVzdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gZW1wdHkgVVVJRFxyXG4gICAqIEByZXR1cm5zIDogdGhlIGVtcHR5IFVVSURcclxuICAgKi9cclxuICBzdGF0aWMgZW1wdHlVVUlEKCk6IHN0cmluZyB7IHJldHVybiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBVVUlEXHJcbiAgICogQHJldHVybnMgOiB0aGUgc3RyaW5nIFVVSURcclxuICAgKi9cclxuICBzdGF0aWMgZ2VuZXJhdGVVVUlEKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWdleCA9IC9beHldL2c7XHJcbiAgICByZXR1cm4gXCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcIi5yZXBsYWNlKHJlZ2V4LCBmdW5jdGlvbiAoYykge1xyXG4gICAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMCxcclxuICAgICAgICB2ID0gYyA9PT0gXCJ4XCIgPyByIDogKHIgJiAweDMpIHwgMHg4O1xyXG4gICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlIGEgdGV4dCBhbmQgcmV0dXJuIHRydWUgaWYgaXMgYSB2YWxpZCBlbWFpbCBvciBudWxsXHJcbiAgICogQHBhcmFtIHZhbHVlIDogZW1haWxcclxuICAgKiBAcmV0dXJucyAgICAgOiB0cnVlIGlmIHRoZSBlbWFpbCBpcyB2YWxpZCBvciBlbXB0eVxyXG4gICAqL1xyXG4gIHN0YXRpYyBwYXJzZUVtYWlsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgcmVnZXggPSAvKD86W2EtejAtOSshIyQlJicqK1xcLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqK1xcLz0/Xl9ge3x9fi1dKykqfFwiKD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjFcXHgyMy1cXHg1YlxceDVkLVxceDdmXXxcXFxcW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBlLVxceDdmXSkqXCIpQCg/Oig/OlthLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT9cXC4pK1thLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT98XFxbKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT98W2EtejAtOS1dKlthLXowLTldOig/OltcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDIxLVxceDVhXFx4NTMtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSspXFxdKS9naVxyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgYSB0ZXh0IGFuZCByZXR1cm4gdHJ1ZSBpZiBpcyBhIHZhbGlkIHVybCBvciBudWxsXHJcbiAgICogQHBhcmFtIHZhbHVlIDogdGhlIHVybCB0byBwYXJzZVxyXG4gICAqIEByZXR1cm5zICAgICA6IHRydWUgaWYgdGhlIHVybCBpcyB2YWxpZCBvciBlbXB0eVxyXG4gICAqL1xyXG4gIHN0YXRpYyBwYXJzZVVybCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdHJ1ZTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcclxuICAgICAgXCIoaHR0cHM/Oi8vKT8oW1xcXFxkYS16Li1dKylcXFxcLihbYS16Ll17Miw2fSlbL1xcXFx3IC4tXSovP1wiXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRhdGUgcGFydHMgZnJvbSBhIHN0cmluZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHN0cmluZyB0byBwYXJzZVxyXG4gICAqIEByZXR1cm5zICAgICAgIDogYW4gYXJyYXkgb2YgbnVtYmVycyB3aXRoIHllYXIsIG1vbnRoLCBkYXlcclxuICAgKi9cclxuICBzdGF0aWMgZ2V0RGF0ZVBhcnRzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXJbXSB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgIGxldCBwYXJ0czogbnVtYmVyW10gPSBbXTtcclxuICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiLVwiKSAhPT0gLTEpIHtcclxuICAgICAgY29uc3QgcCA9IHZhbHVlLnNwbGl0KFwiLVwiKTtcclxuICAgICAgaWYgKHAubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcclxuICAgICAgcGFydHMgPSBbcGFyc2VJbnQocFswXSksIHBhcnNlSW50KHBbMV0pIC0gMSwgcGFyc2VJbnQocFsyXSldO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pbmRleE9mKFwiL1wiKSAhPT0gLTEpIHtcclxuICAgICAgY29uc3QgcCA9IHZhbHVlLnNwbGl0KFwiL1wiKTtcclxuICAgICAgaWYgKHAubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcclxuICAgICAgcGFydHMgPSBbcGFyc2VJbnQocFsyXSksIHBhcnNlSW50KHBbMV0pIC0gMSwgcGFyc2VJbnQocFswXSldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhcnRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgYSBkYXRlXHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgdmFsdWUgdG8gY2hlY2tcclxuICAgKiBAcGFyYW0gbG9jYWxlICA6IHRoZSBsb2NhbGUgdG8gdXNlXHJcbiAgICogQHJldHVybnMgICAgICAgOiBhIHZhbGlkIERhdGUgb2JqZWN0IG9yIG51bGxcclxuICAgKi9cclxuICBzdGF0aWMgcGFyc2VEYXRlKHZhbHVlOiBzdHJpbmcgfCBEYXRlLCBsb2NhbGU6IGFueSA9IGl0KTogRGF0ZSB7XHJcbiAgICAvLyBObyB2YWx1ZSBhdCBhbGxcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgLy8gQSBEYXRlIHZhbHVlXHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIHZhbHVlLmdldFRpbWUoKSkgcmV0dXJuIHZhbHVlO1xyXG4gICAgLy8gUGFyc2Uga25vd24gZm9ybWF0cyB1c2luZyBkYXRlLWZuc1xyXG4gICAgbGV0IGQgPSBwYXJzZUlTTyh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgaWYgKGQgJiYgZC5nZXRUaW1lKCkgJiYgZC5nZXRGdWxsWWVhcigpID4gMTc1MCkgcmV0dXJuIGQ7XHJcbiAgICBkID0gcGFyc2UodmFsdWUgYXMgc3RyaW5nLCAnZGQvTU0veXl5eScsIG5ldyBEYXRlKCksIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICBpZiAoZCAmJiBkLmdldFRpbWUoKSAmJiBkLmdldEZ1bGxZZWFyKCkgPiAxNzUwKSByZXR1cm4gZDtcclxuICAgIGQgPSBwYXJzZSh2YWx1ZSBhcyBzdHJpbmcsICd5eXl5LU1NLWRkJywgbmV3IERhdGUoKSwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgIGlmIChkICYmIGQuZ2V0VGltZSgpICYmIGQuZ2V0RnVsbFllYXIoKSA+IDE3NTApIHJldHVybiBkO1xyXG4gICAgLy8gUGFyc2UgdmFsdWVzIG1hbnVhbGx5XHJcbiAgICBsZXQgcGFydHMgPSB0aGlzLmdldERhdGVQYXJ0cyh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgaWYgKHBhcnRzWzBdIDwgMTAwKSBwYXJ0c1swXSArPSAyMDAwO1xyXG4gICAgaWYgKGlzTmFOKHBhcnRzWzBdKSB8fCBwYXJ0c1swXSA8IDAgfHwgcGFydHNbMF0gPCAxNzUwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChpc05hTihwYXJ0c1sxXSkgfHwgcGFydHNbMV0gPCAwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChpc05hTihwYXJ0c1syXSkgfHwgcGFydHNbMl0gPCAwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChwYXJ0c1sxXSA+IDExKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChwYXJ0c1sxXSA9PT0gMSAmJiBwYXJ0c1syXSA+IDI5KSByZXR1cm4gbnVsbDtcclxuICAgIGVsc2UgaWYgKHBhcnRzWzFdICE9PSAxICYmIHBhcnRzWzJdID4gMzEpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHBhcnRzWzBdLCBwYXJ0c1sxXSwgcGFydHNbMl0sIDIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0IGEgZGF0ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgICAgOiB0aGUgZGF0ZSBvciBzdHJpbmcgdG8gZm9ybWF0XHJcbiAgICogQHBhcmFtIGZtdCAgICAgICA6IHRoZSBEYXRlRm9ybWF0IHRvIHVzZSBvciB0aGUgc3RyaW5nIHBhdHRlcm5cclxuICAgKiBAcGFyYW0gbG9jYWxlICAgIDogdGhlIGxvY2FsZSB0byB1c2UgKGRlZmF1bHQgaXMgSVQpXHJcbiAgICogQHJldHVybnMgICAgICAgICA6IHRoZSBmb3JtYXR0ZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGZvcm1hdERhdGUoXHJcbiAgICB2YWx1ZTogRGF0ZSB8IHN0cmluZyxcclxuICAgIGZtdDogRGF0ZUZvcm1hdCB8IHN0cmluZyA9IERhdGVGb3JtYXQuU2hvcnQsXHJcbiAgICBsb2NhbGU6IGFueSA9IGl0KTogc3RyaW5nIHtcclxuICAgIC8vIE5vIHZhbHVlIGF0IGFsbFxyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBBIHN0cmluZ1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpXHJcbiAgICAgIHZhbHVlID0gdGhpcy5wYXJzZURhdGUodmFsdWUgYXMgc3RyaW5nKTtcclxuICAgIC8vIE5vdCBhIGRhdGUgXHJcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdmFsdWUuZ2V0VGltZSgpKSlcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBGb3JtYXRcclxuICAgIHN3aXRjaCAoZm10KSB7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5TaG9ydDogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJkZC9NTS95eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nOiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcImQgTU1NTSB5eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nV2l0aFNob3J0TW9udGg6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiZCBNTU0geXl5eVwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuTG9uZ1dpdGhXZWVrRGF5OiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcIkVFRUUsIGQgTU1NTSB5eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nV2l0aFNob3J0V2Vla0RheTogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJFRUUsIGQgTU1NTSB5eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Nb250aEFuZFllYXI6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LkxvbmdNb250aEFuZFllYXI6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiTU1NTSB5eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5XZWVrRGF5OiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcIkVFRSwgZFwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuTG9uZ1dlZWtEYXk6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiRUVFRSwgZFwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuRGF5QW5kTW9udGg6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiZCBNTU1NXCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5TaG9ydFVTOiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcIk1NL2RkL3l5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LlNob3J0SVNPODYwMTogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJ5eXl5LU1NLWRkXCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwgZm10LCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGFuIGl0YWxpYW4gbG9jYWwgZGF0ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgOiB0aGUgZGF0ZVxyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSBuZXcgZGF0ZVxyXG4gICAqL1xyXG4gIHN0YXRpYyB0b0xvY2FsRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyk6IERhdGUge1xyXG4gICAgLy8gTm8gdmFsdWUgYXQgYWxsXHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgIC8vIEEgc3RyaW5nXHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZylcclxuICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgLy8gTm90IGEgZGF0ZVxyXG4gICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIHZhbHVlLmdldFRpbWUoKSkpIHJldHVybiBudWxsO1xyXG4gICAgLy8gVXBkYXRlIGRhdGVcclxuICAgIHJldHVybiBzZXRIb3Vycyh2YWx1ZSwgMik7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGEgRGF0ZUludGVydmFsIG9iamVjdCBhY2NvcmRpbmcgdG8gYSBzdHJpbmdcclxuICAgKiBAcGFyYW0gdmFsdWUgICAgICAgOiBzdHJpbmcgdmFsdWVcclxuICAgKiBAcGFyYW0gaW50ZXJ2YWwgICAgOiBEYXRlSW50ZXJ2YWwgdmFsdWUgdG8gdXBkYXRlXHJcbiAgICogQHBhcmFtIGVuZCAgICAgICAgIDogdHJ1ZSBpZiBtdXN0IGJlIHVwZGF0ZWQgdGhlIGZpcnN0IG9yIHRoZSBlbmQgdmFsdWUgXHJcbiAgICogQHBhcmFtIGNvcHkgICAgICAgIDogY29weSB0aGUgc2FtZSB2YWx1ZSAod29ya3Mgb25seSBpZiBub3QgZW5kIGVsZW1lbnQpXHJcbiAgICovXHJcbiAgc3RhdGljIGNoYW5nZURhdGVJbnRlcnZhbCh2YWx1ZTogc3RyaW5nLCBpbnRlcnZhbDogRGF0ZUludGVydmFsLCBlbmQ6IGJvb2xlYW4gPSBmYWxzZSwgY29weTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgbGV0IHllYXIgPSAtMTtcclxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gNCAmJiAoeWVhciA9IHBhcnNlSW50KHZhbHVlKSkgPiAxNzUwKSB7XHJcbiAgICAgICAgaWYgKCFlbmQpIHtcclxuICAgICAgICAgIGludGVydmFsLmZyb20gPSBuZXcgVFpEYXRlKG5ldyBEYXRlKHllYXIsIDAsIDEpLCAnVVRDJyk7XHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IG5ldyBUWkRhdGUobmV3IERhdGUoeWVhciwgMTEsIDMxKSwgJ1VUQycpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgaW50ZXJ2YWwudG8gPSBuZXcgRGF0ZSh5ZWFyLCAxMSwgMzEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBwYXJ0cyA9IHRoaXMuZ2V0RGF0ZVBhcnRzKHZhbHVlKTtcclxuICAgICAgICBpZiAoIXBhcnRzIHx8IGlzTmFOKHBhcnRzWzBdKSB8fCBwYXJ0c1swXSA8IDAgfHwgcGFydHNbMF0gPCAxNzUwKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgdHpEYXRlID0gbmV3IFRaRGF0ZShuZXcgRGF0ZShwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKSwgJ1VUQycpO1xyXG4gICAgICAgIGlmIChlbmQpXHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IHR6RGF0ZTtcclxuICAgICAgICBlbHNlIGlmIChjb3B5KSB7XHJcbiAgICAgICAgICBpbnRlcnZhbC5mcm9tID0gdHpEYXRlO1xyXG4gICAgICAgICAgaW50ZXJ2YWwudG8gPSB0ekRhdGU7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpbnRlcnZhbC5mcm9tID0gdHpEYXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmNvZGUgdXJsXHJcbiAgICogQHBhcmFtIHZhbHVlIDogdGhlIHZhbHVlIHRvIGVuY29kZVxyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSB1cmwgZW5jb2RlZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgdXJsRW5jb2RlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWNvZGUgdXJsXHJcbiAgICogQHBhcmFtIHZhbHVlIDogdGhlIHVybCB0byBkZWNvZGVcclxuICAgKiBAcmV0dXJucyAgICAgOiB0aGUgZGVjb2RlIHVybCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgdXJsRGVjb2RlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmVnZXggPSAvXFwrL2c7XHJcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KCh2YWx1ZSArIFwiXCIpLnJlcGxhY2UocmVnZXgsIFwiJTIwXCIpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhIHF1ZXJ5c3RyaW5nIHBhcmFtZXRlciB2YWx1ZVxyXG4gICAqIEBwYXJhbSBuYW1lICA6IHRoZSBwYXJhbWV0ZXIgbmFtZVxyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSBzdHJpbmcgdmFsdWVcclxuICAgKi9cclxuICBzdGF0aWMgZ2V0UXVlcnlTdHJpbmdWYWx1ZUJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmlzQnJvd3NlcigpKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgaWYgKHVybC5pbmNsdWRlcyhcIj9cIikpIHtcclxuICAgICAgY29uc3QgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKHsgZnJvbVN0cmluZzogdXJsLnNwbGl0KFwiP1wiKVsxXSB9KTtcclxuICAgICAgY29uc3QgdiA9IGRlY29kZVVSSUNvbXBvbmVudChodHRwUGFyYW1zLmdldChuYW1lKSk7XHJcbiAgICAgIGlmICh2ICE9PSBcIm51bGxcIikgcmV0dXJuIHY7XHJcbiAgICAgIGVsc2UgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGEgcGFzc3dvcmRcclxuICAgKiBAcmV0dXJucyA6IHRoZSBwYXNzd29yZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgZ2VuZXJhdGVQYXNzd29yZCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmFuZG9tID0gXCIkXCIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgtNyk7XHJcbiAgICBsZXQgcGFzc3dvcmQgPSBcIlwiO1xyXG4gICAgbGV0IGhhc1VwcGVyQ2FzZSA9IGZhbHNlO1xyXG4gICAgZm9yIChjb25zdCBybmQgb2YgcmFuZG9tKSB7XHJcbiAgICAgIGlmICghaGFzVXBwZXJDYXNlICYmIFwiYWJjZGVmZ2hqaWxtbm9wcXJzdHV2eXd4elwiLmluY2x1ZGVzKHJuZCkpIHtcclxuICAgICAgICBwYXNzd29yZCArPSBybmQudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBoYXNVcHBlckNhc2UgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhc3N3b3JkICs9IHJuZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFoYXNVcHBlckNhc2UpXHJcbiAgICAgIHBhc3N3b3JkID0gcGFzc3dvcmQuc3Vic3RyaW5nKDAsIDcpICsgXCJNXCI7XHJcbiAgICByZXR1cm4gcGFzc3dvcmQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBjdXJyZW50IGJyb3dzZXIgc3VwcG9ydHMgdG91Y2hcclxuICAgKiBAcmV0dXJucyA6IHRydWUgaWYgdGhlIGRpc3BsYXkgaXMgdG91Y2hhYmxlXHJcbiAgICovXHJcbiAgc3RhdGljIGlzVG91Y2hhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5pc0Jyb3dzZXIoKSAmJiAoXHJcbiAgICAgICAgXCJvbnRvdWNoc3RhcnRcIiBpbiB3aW5kb3cgfHxcclxuICAgICAgICBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgY2hlY2sgd2lsbCBwcmV2ZW50ICd3aW5kb3cnIGxvZ2ljIHRvIGJlIGV4ZWN1dGVkXHJcbiAgICogd2hpbGUgZXhlY3V0aW5nIHRoZSBzZXJ2ZXIgcmVuZGVyaW5nXHJcbiAgICogQHJldHVybnMgOiB0cnVlIGlmIHVzaW5nIHRoZSBicm93c2VyXHJcbiAgICovXHJcbiAgc3RhdGljIGlzQnJvd3NlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2YgKHdpbmRvdykgIT09ICd1bmRlZmluZWQnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIENvbnZlcnQgZm9sZGVycyBpbiBhIHRyZWUgb2YgTm9kZSBvYmplY3QuXHJcbiAqIEBwYXJhbSBmb2xkZXJzIDogdGhlIHN1YmZvbGRlcnMgZ3JvdXAgb3IgbnVsbCB0byByb290XHJcbiAqIEByZXR1cm5zICAgICAgIDogYSBub2RlIGxpc3RcclxuICovXHJcbiAgc3RhdGljIHRvTm9kZXMoZm9sZGVyczogSU5vZGVbXSk6IElOb2RlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RvTm9kZXMoZm9sZGVycywgdW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnQgZm9sZGVycyBpbiBhIHRyZWUgb2YgTm9kZSBvYmplY3QuXHJcbiAgICogQHBhcmFtIGZvbGRlcnMgOiB0aGUgY2hpbGRyZW4gZ3JvdXAgb3IgbnVsbCB0byByb290XHJcbiAgICogQHBhcmFtIHBhcmVudCAgOiB0aGUgcGFyZW50IG5vZGVcclxuICAgKiBAcmV0dXJucyAgICAgICA6IGEgbm9kZSBsaXN0IFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc3RhdGljIF90b05vZGVzKGZvbGRlcnM6IElOb2RlW10sIHBhcmVudDogSU5vZGUgfCB1bmRlZmluZWQpOiBJTm9kZVtdIHtcclxuICAgIGNvbnN0IG5vZGVzOiBJTm9kZVtdID0gW107XHJcbiAgICBmb2xkZXJzLmZvckVhY2goKG46IElOb2RlKSA9PiB7XHJcbiAgICAgIGNvbnN0IG5vZGU6IElOb2RlID0ge1xyXG4gICAgICAgIGlkOiBuLmlkLFxyXG4gICAgICAgIG5hbWU6IG4ubmFtZSxcclxuICAgICAgICBjb3VudDogbi5jb3VudCxcclxuICAgICAgICBwYXJlbnQ6IHBhcmVudCxcclxuICAgICAgICBjaGlsZHJlbjogdW5kZWZpbmVkLFxyXG4gICAgICAgIGJhZzogbixcclxuICAgICAgfTtcclxuICAgICAgbm9kZS5jaGlsZHJlbiA9XHJcbiAgICAgICAgbi5jaGlsZHJlbiAmJiBuLmNoaWxkcmVuLmxlbmd0aCA+IDBcclxuICAgICAgICAgID8gdGhpcy5fdG9Ob2RlcyhuLmNoaWxkcmVuLCBub2RlKVxyXG4gICAgICAgICAgOiBbXTtcclxuICAgICAgbm9kZXMucHVzaChub2RlKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5vZGVzO1xyXG4gIH1cclxufVxyXG4iXX0=
644
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NvcmUvc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBWTVDLE1BQU0sQ0FBTixJQUFZLFVBYVg7QUFiRCxXQUFZLFVBQVU7SUFDcEIsNkNBQVMsQ0FBQTtJQUNULDJDQUFRLENBQUE7SUFDUix1RUFBc0IsQ0FBQTtJQUN0QixpRUFBbUIsQ0FBQTtJQUNuQiwyRUFBd0IsQ0FBQTtJQUN4QiwyREFBZ0IsQ0FBQTtJQUNoQixtRUFBb0IsQ0FBQTtJQUNwQixpREFBVyxDQUFBO0lBQ1gseURBQWUsQ0FBQTtJQUNmLDBEQUFnQixDQUFBO0lBQ2hCLGtEQUFZLENBQUE7SUFDWiw0REFBaUIsQ0FBQSxDQUFTLGFBQWE7QUFDekMsQ0FBQyxFQWJXLFVBQVUsS0FBVixVQUFVLFFBYXJCO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFDdEI7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBSSxLQUE2QixFQUFFLEdBQVcsRUFBRSxLQUFVO1FBQzdFLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFLLElBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxD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RixJQUFJLENBQUMsUUFBUTtnQkFDWCxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO29CQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBEYXRlSW50ZXJ2YWwgfSBmcm9tICcuL2RlZmluaXRpb25zJztcclxuaW1wb3J0IHsgZm9ybWF0LCBwYXJzZSwgcGFyc2VJU08sIHNldEhvdXJzIH0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgeyBpdCB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZSc7XHJcbmltcG9ydCB7IGZyb21ab25lZFRpbWUgfSBmcm9tICdkYXRlLWZucy10eic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGNvdW50PzogbnVtYmVyIHwgbnVsbDtcclxuICBjaGlsZHJlbj86IElOb2RlW10gfCBudWxsO1xyXG4gIHBhcmVudD86IElOb2RlIHwgbnVsbDtcclxuICBiYWc/OiBhbnkgfCBudWxsXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZW51bSBEYXRlRm9ybWF0IHtcclxuICBTaG9ydCA9IDEsICAgICAgICAgICAgICAgIC8vIGRkL21tL3l5eXlcclxuICBMb25nID0gMiwgICAgICAgICAgICAgICAgIC8vIGQgbW1tbSB5eXl5XHJcbiAgTG9uZ1dpdGhTaG9ydE1vbnRoID0gMywgICAvLyBkIG1tbSB5eXl5XHJcbiAgTG9uZ1dpdGhXZWVrRGF5ID0gNCwgICAgICAvLyB3d3d3LCBkIG1tbW0geXl5eVxyXG4gIExvbmdXaXRoU2hvcnRXZWVrRGF5ID0gNSwgLy8gd3d3LCBkIG1tbW0geXl5eVxyXG4gIE1vbnRoQW5kWWVhciA9IDYsICAgICAgICAgLy8gbW1tIHl5eXlcclxuICBMb25nTW9udGhBbmRZZWFyID0gNywgICAgIC8vIG1tbW0geXl5eVxyXG4gIFdlZWtEYXkgPSA4LCAgICAgICAgICAgICAgLy8gd3d3IGRcclxuICBMb25nV2Vla0RheSA9IDksICAgICAgICAgIC8vIHd3d3cgZFxyXG4gIERheUFuZE1vbnRoID0gMTAsICAgICAgICAgLy8gZCBtbW1tXHJcbiAgU2hvcnRVUyA9IDExLCAgICAgICAgICAgICAvLyBtbS9kZC95eXl5XHJcbiAgU2hvcnRJU084NjAxID0gMTIgICAgICAgICAvLyB5eXl5LW1tLWRkXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTeXN0ZW1VdGlscyB7XHJcbiAgLyoqXHJcbiAgICogQXJyYXkgZmluZCBieSBrZXlcclxuICAgKiBAcGFyYW0gYXJyYXkgICAgIDogdGhlIGFycmF5IHRvIHNjYW5cclxuICAgKiBAcGFyYW0ga2V5ICAgICAgIDoga2V5IG5hbWVcclxuICAgKiBAcGFyYW0gdmFsdWUgICAgIDogdGhlIHZhbHVlIHRvIHNlYXJjaCBmb3JcclxuICAgKiBAcmV0dXJucyAgICAgICAgIDogdGhlIHByb3BlcnR5IHZhbHVlIG9yIG51bGxcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlGaW5kQnlLZXk8VD4oYXJyYXk6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogVCB8IG51bGwge1xyXG4gICAgaWYgKCFhcnJheSkgcmV0dXJuIG51bGw7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyYXkpIHtcclxuICAgICAgaWYgKChpdGVtIGFzIGFueSlba2V5XSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcnJheSBmaW5kIGluZGV4IGJ5IGtleVxyXG4gICAqIEBwYXJhbSBhcnJheSAgIDogdGhlIGFycmF5IHRvIHNjYW5cclxuICAgKiBAcGFyYW0ga2V5ICAgICA6IHRoZSBrZXkgbmFtZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHZhbHVlIHRvIHNlYXJjaCBmb3JcclxuICAgKiBAcmV0dXJucyAgICAgICA6IHRoZSBhcnJheSBpbmRleCBvciAtMSBpZiBub3QgZm91bmRcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlGaW5kSW5kZXhCeUtleTxUPihhcnJheTogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBudW1iZXIge1xyXG4gICAgaWYgKCFhcnJheSkgcmV0dXJuIC0xO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoKGFycmF5W2ldIGFzIGFueSlba2V5XSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgdmFsdWUgZnJvbSBhbmQgYXJyYXkgbWFkZSBvZiBuYW1lfHZhbHVlIGl0ZW1zXHJcbiAgICogQHBhcmFtIGFycmF5ICAgOiB0aGUgYXJyYXkgdG8gc2NhblxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHZhbHVlIHRvIHNlYXJjaCBmb3JcclxuICAgKiBAcmV0dXJucyAgICAgICA6IHRoZSBwcm9wZXJ0eSB2YWx1ZSBvciBudWxsIGlmIG5vdCBmb3VuZFxyXG4gICAqL1xyXG4gIHN0YXRpYyBhcnJheUdldFZhbHVlPFQ+KGFycmF5OiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLCB2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmICghYXJyYXkpIHJldHVybiBudWxsO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gKGFycmF5W2ldIGFzIGFueSk7XHJcbiAgICAgIGlmIChpdGVtLnZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLm5hbWUgfHwgaXRlbS5pZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IGl0ZW1zIHRvIG5vZGVzIGludG8gYSB0cmVlIHN0cnVjdHVyZVxyXG4gICAqIEBwYXJhbSBpdGVtcyAgIDogbGlzdCBvZiBub2Rlc1xyXG4gICAqIEBwYXJhbSBwYXJlbnQgIDogcGFyZW50IG5vZGVcclxuICAgKiBAcmV0dXJucyAgICAgICA6IGFuIGFycmF5IG9mIElOb2RlIG9iamVjdHNcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlUb05vZGVzKGl0ZW1zOiBJTm9kZVtdLCBwYXJlbnQ6IElOb2RlID0gbnVsbCk6IElOb2RlW10ge1xyXG4gICAgY29uc3Qgbm9kZXM6IElOb2RlW10gPSBbXTtcclxuICAgIGl0ZW1zLmZvckVhY2goKG4pID0+IHtcclxuICAgICAgY29uc3Qgbm9kZTogSU5vZGUgPSB7XHJcbiAgICAgICAgaWQ6IG4uaWQudG9TdHJpbmcoKSxcclxuICAgICAgICBuYW1lOiBuLm5hbWUsXHJcbiAgICAgICAgY291bnQ6IG4uY291bnQgPyBuLmNvdW50IDogMCxcclxuICAgICAgICBjaGlsZHJlbjogbnVsbCxcclxuICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgYmFnOiBuLFxyXG4gICAgICB9O1xyXG4gICAgICBub2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICBub2RlLmNoaWxkcmVuID1cclxuICAgICAgICBuLmNoaWxkcmVuICYmIG4uY2hpbGRyZW4ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgPyB0aGlzLmFycmF5VG9Ob2RlcyhuLmNoaWxkcmVuLCBub2RlKVxyXG4gICAgICAgICAgOiBbXTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5vZGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCB0byBjb3BhcmUgaXRlbXMgZHVyaW5nIGFuIGFycmF5IG9mIG9iamVjdHMgc29ydGluZ1xyXG4gICAqIEBwYXJhbSBrZXkgICAgIDogdGhlIHByb3BlcnR5IG5hbWUgdG8gc29ydCBmb3JcclxuICAgKiBAcGFyYW0gb3JkZXIgICA6IHRoZSBvcmRlciAnYXNjJyBvciAnZGVzYydcclxuICAgKiBAcmV0dXJucyAgICAgICA6IDAgaWYgZXF1YWxzLCAxIGlmIGJpZ2dlciwgLTEgaWYgbG93ZXJcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlTb3J0Q29tcGFyZShrZXk6IHN0cmluZywgb3JkZXI6IHN0cmluZyA9IFwiYXNjXCIpIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGZ1bmN0aW9uIGlubmVyU29ydChhOiBhbnksIGI6IGFueSkge1xyXG4gICAgICBpZiAoIWEuaGFzT3duUHJvcGVydHkoa2V5KSB8fCAhYi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgLy8gcHJvcGVydHkgZG9lc24ndCBleGlzdCBvbiBlaXRoZXIgb2JqZWN0XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdmFyQSA9IHR5cGVvZiBhW2tleV0gPT09IFwic3RyaW5nXCIgPyBhW2tleV0udG9VcHBlckNhc2UoKSA6IGFba2V5XTtcclxuICAgICAgY29uc3QgdmFyQiA9IHR5cGVvZiBiW2tleV0gPT09IFwic3RyaW5nXCIgPyBiW2tleV0udG9VcHBlckNhc2UoKSA6IGJba2V5XTtcclxuICAgICAgbGV0IGNvbXBhcmlzb24gPSAwO1xyXG4gICAgICBpZiAodmFyQSA+IHZhckIpIGNvbXBhcmlzb24gPSAxO1xyXG4gICAgICBlbHNlIGlmICh2YXJBIDwgdmFyQikgY29tcGFyaXNvbiA9IC0xO1xyXG4gICAgICByZXR1cm4gb3JkZXIgPT09IFwiZGVzY1wiID8gY29tcGFyaXNvbiAqIC0xIDogY29tcGFyaXNvbjtcclxuICAgIH07XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0IHdlaWdodFxyXG4gICAqIEBwYXJhbSBnciAgICA6IGdyYW1zXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIGZvcm1hdHRlZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgZm9ybWF0V2VpZ2h0KGdyOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGdyID4gMTAwMDAwMCkgcmV0dXJuIChnciAvIDEwMDAwMDApLnRvRml4ZWQoMikgKyBcIiB0XCI7XHJcbiAgICBlbHNlIGlmIChnciA+IDEwMDAwMCkgcmV0dXJuIChnciAvIDEwMDAwMCkudG9GaXhlZCgyKSArIFwiIHFcIjtcclxuICAgIGVsc2UgaWYgKGdyID4gMTAwMCkgcmV0dXJuIChnciAvIDEwMDApLnRvRml4ZWQoMikgKyBcIiBrZ1wiO1xyXG4gICAgZWxzZSByZXR1cm4gZ3IgKyBcIiBnclwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0IGZpbGUgc2l6ZVxyXG4gICAqIEBwYXJhbSBieXRlcyA6IG51bWJlciBvZiBieXRlc1xyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSBmb3JtYXR0ZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGJ5dGVzID4gMTAyNDAwMCkgcmV0dXJuIChieXRlcyAvIDEwMjQwMDApLnRvRml4ZWQoMSkgKyBcIiBNQlwiO1xyXG4gICAgaWYgKGJ5dGVzID4gMTAyNCkgcmV0dXJuIChieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIiBLYlwiO1xyXG4gICAgcmV0dXJuIGJ5dGVzICsgXCIgYnl0ZVwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcGFyZSB0d28gc3RyaW5nXHJcbiAgICogQHBhcmFtIGEgICA6IHN0cmluZyBhXHJcbiAgICogQHBhcmFtIGIgICA6IHN0cmluZyBiXHJcbiAgICogQHJldHVybnMgICA6IDAgaWYgZXF1YWxzLCAxIGlmIGJpZ2dlciwgLTEgaWYgbG93ZXJcclxuICAgKi9cclxuICBzdGF0aWMgY29tcGFyZVN0cmluZyhhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBpZiAoKGEgPz8gXCJcIikudG9Mb3dlckNhc2UoKSA+IChiID8/IFwiXCIpLnRvTG93ZXJDYXNlKCkpIHJldHVybiAxO1xyXG4gICAgaWYgKChhID8/IFwiXCIpLnRvTG93ZXJDYXNlKCkgPCAoYiA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpKSByZXR1cm4gLTE7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhcGl0YWxpemUgYSBzdHJpbmdcclxuICAgKiBAcGFyYW0gcyAgIDogdGhlIHN0cmluZyB0byBjYXBpdGFsaXplXHJcbiAgICogQHJldHVybnMgICA6IHRoZSBjYXBpdGFsaXplZCBzdHJpbmcgIFxyXG4gICAqL1xyXG4gIHN0YXRpYyBjYXBpdGFsaXplKHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXMpIHJldHVybiBudWxsO1xyXG4gICAgbGV0IGIgPSBcIlwiO1xyXG4gICAgbGV0IGNhcCA9IHRydWU7XHJcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2Ygcykge1xyXG4gICAgICBpZiAoY2hhciA9PT0gXCIgXCIpIHtcclxuICAgICAgICBiICs9IGNoYXI7XHJcbiAgICAgICAgY2FwID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChjYXApIHtcclxuICAgICAgICBiICs9IGNoYXIudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBjYXAgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBiICs9IGNoYXIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcnVuY2F0ZSBhIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBzICAgICA6IHRoZSBzdHJpbmcgdG8gdHJ1bmNhdGVcclxuICAgKiBAcGFyYW0gbWF4ICAgOiB0aGUgbWF4IG51bWJlciBvZiBjaGFyc1xyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSB0cnVuY2F0ZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHRydW5jYXRlKHM6IHN0cmluZywgbWF4OiBudW1iZXIgPSA1MDApOiBzdHJpbmcge1xyXG4gICAgaWYgKCFzKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChzLmxlbmd0aCA8IG1heCkgcmV0dXJuIHM7XHJcbiAgICBsZXQgaSA9IG1heCAtIDE7XHJcbiAgICB3aGlsZSAoaSA+IDApIHtcclxuICAgICAgaWYgKHNbaV0gPT09ICcgJykgcmV0dXJuIHMuc2xpY2UoMCwgaSk7XHJcbiAgICAgIGktLTtcclxuICAgIH1cclxuICAgIHJldHVybiBzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSm9pbiBhIGxpc3Qgb2Ygc3RyaW5nc1xyXG4gICAqIEBwYXJhbSBpdGVtcyAgICAgOiB0aGUgbGlzdCBvZiBzdHJpbmdzXHJcbiAgICogQHBhcmFtIHNlcCAgICAgICA6IHRoZSBzZXBhcmF0b3Igc3RyaW5nXHJcbiAgICogQHBhcmFtIG1heCAgICAgICA6IHRoZSBtYXhpbXVtIHJlc3VsdGluZyBzdHJpbmdcclxuICAgKiBAcmV0dXJucyAgICAgICAgIDogdGhlIGpvaW5lZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgam9pbihpdGVtczogc3RyaW5nW10sIHNlcDogc3RyaW5nID0gXCIgXCIsIG1heDogbnVtYmVyID0gMzUwKTogc3RyaW5nIHtcclxuICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChpdGVtcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGxldCBsID0gMDtcclxuICAgICAgbGV0IHMgPSBcIlwiXHJcbiAgICAgIHdoaWxlIChzLmxlbmd0aCA8IG1heCAmJiBpdGVtcy5sZW5ndGggPiBsKSB7XHJcbiAgICAgICAgaWYgKGwgPiAwKSB7XHJcbiAgICAgICAgICBzICs9IHNlcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcyArPSBpdGVtc1tsKytdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPiBsKSB7XHJcbiAgICAgICAgcyArPSBcIi4uLlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zWzBdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVwbGFjZSBzdHVmZiBpbiB0ZXh0IGh0bWxcclxuICAgKiBAcGFyYW0gcyAgIDogdGhlIHN0cmluZyB0byBwcm9jZXNzXHJcbiAgICogQHJldHVybnMgICA6IHRoZSByZXBsYWNlZCBzdHJpbmcgIFxyXG4gICAqL1xyXG4gIHN0YXRpYyByZXBsYWNlQXNIdG1sKHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWdleCA9IC9odHRwcz86XFwvXFwvLipbXlxcc10vaWdcclxuICAgIGNvbnN0IG0gPSByZWdleC5leGVjKHMpO1xyXG4gICAgaWYgKG0gJiYgbS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCB2ID0gbnVsbDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdiA9IG1baV07XHJcbiAgICAgICAgcyA9IHMucmVwbGFjZSh2LCAnPGEgaHJlZj1cIicgKyB2ICsgJ1wiIHRhcmdldD1cIl9ibGFua1wiPicgKyB2ICsgJzwvYT4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wYXJlIHR3byBuYW1lc1xyXG4gICAqIEBwYXJhbSBhICAgOiBuYW1lIGFcclxuICAgKiBAcGFyYW0gYiAgIDogbmFtZSBiXHJcbiAgICogQHJldHVybnMgICA6IHRydWUgaWYgYSBlcXVhbHMgYlxyXG4gICAqL1xyXG4gIHN0YXRpYyBjb21wYXJlTmFtZXMoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChhKSBhID0gYS50cmltKCk7XHJcbiAgICBpZiAoYikgYiA9IGIudHJpbSgpO1xyXG4gICAgaWYgKGEgJiYgYiAmJiBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLmNvbXBhcmVTdHJpbmcoYSwgYikgPT09IDApIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgcDEgPSBhLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IHAyID0gYi5zcGxpdChcIiBcIik7XHJcbiAgICBpZiAocDEubGVuZ3RoICE9PSBwMi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCBtYXRjaGVzID0gcDEubGVuZ3RoO1xyXG4gICAgZm9yIChjb25zdCBzMSBvZiBwMSkge1xyXG4gICAgICBmb3IgKGNvbnN0IHMyIG9mIHAyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZVN0cmluZyhzMSwgczIpID09PSAwKSB7XHJcbiAgICAgICAgICBtYXRjaGVzLS07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWF0Y2hlcyA9PT0gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENpcGhlciBhIHRleHRcclxuICAgKiBAcGFyYW0gdGV4dCAgICA6IHRoZSB0ZXh0XHJcbiAgICogQHBhcmFtIGtleSAgICAgOiB0aGUga2V5XHJcbiAgICogQHBhcmFtIHJldmVyc2UgOiB0cnVlIHRvIGRlY29kZSwgZmFsc2UgdG8gZW5jb2RlXHJcbiAgICogQHJldHVybnMgICAgICAgOnRoZSBjaXBoZXJlZCB0ZXh0XHJcbiAgICovXHJcbiAgc3RhdGljIGNpcGhlcih0ZXh0OiBzdHJpbmcsIGtleTogc3RyaW5nLCByZXZlcnNlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgLy8gU3Vycm9nYXRlIHBhaXIgbGltaXRcclxuICAgIHZhciBib3VuZCA9IDB4MTAwMDA7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHN0cmluZyBmcm9tIGNoYXJhY3RlciBjb2Rlc1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIC8vIFR1cm4gc3RyaW5nIHRvIGNoYXJhY3RlciBjb2Rlc1xyXG4gICAgICB0ZXh0LnNwbGl0KFwiXCIpLm1hcChmdW5jdGlvbiAodjogYW55LCBpOiBudW1iZXIpIHtcclxuICAgICAgICAvLyBHZXQgcm90YXRpb24gZnJvbSBrZXlcclxuICAgICAgICB2YXIgcm90YXRpb24gPSBrZXkuY2hhckNvZGVBdChpICUga2V5Lmxlbmd0aCk7XHJcblxyXG4gICAgICAgIC8vIEFyZSB3ZSBkZWNyeXB0aW5nP1xyXG4gICAgICAgIGlmIChyZXZlcnNlKSByb3RhdGlvbiA9IC1yb3RhdGlvbjtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIGN1cnJlbnQgY2hhcmFjdGVyIGNvZGUgKyByb3RhdGlvblxyXG4gICAgICAgIHJldHVybiAodi5jaGFyQ29kZUF0KCkgKyByb3RhdGlvbiArIGJvdW5kKSAlIGJvdW5kO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb25lIGFuIG9iamVjdCB1c2luZyBKU09OXHJcbiAgICogQHBhcmFtIG9iaiA6IHRoZSBvYmxlY3QgdG8gY2xvbmVcclxuICAgKiBAcmV0dXJucyAgIDogYSBuZXcgb2JqZWN0XHJcbiAgICovXHJcbiAgc3RhdGljIGNsb25lKG9iajogYW55KTogYW55IHtcclxuICAgIGlmICghb2JqKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvbmUgYW4gb2JqZWN0IHVzaW5nIGRlZXAgY2xvbmluZ1xyXG4gICAqIEBwYXJhbSBvYmogICA6IHRoZSBvYmxlY3QgdG8gY2xvbmVcclxuICAgKiBAcmV0dXJucyAgICAgOiBhIG5ldyBvYmplY3RcclxuICAgKi9cclxuICBzdGF0aWMgZGVlcENsb25lPFQ+KG9iajogYW55LCBkZXN0OiBUID0gbnVsbCk6IFQge1xyXG4gICAgY29uc3QgY2xvbmVPYmogPSBkZXN0ID8gZGVzdCA6IChvYmouY29uc3RydWN0b3IoKSBhcyBhbnkpO1xyXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKG9iaik7XHJcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XHJcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gb2JqW2F0dHJpYnV0ZV07XHJcbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09IFwib2JqZWN0XCIgJiYgcHJvcGVydHkgIT0gbnVsbCkge1xyXG4gICAgICAgIGNsb25lT2JqW2F0dHJpYnV0ZV0gPSB0aGlzLmRlZXBDbG9uZShwcm9wZXJ0eSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2xvbmVPYmpbYXR0cmlidXRlXSA9IHByb3BlcnR5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xvbmVPYmo7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgYSBzdHJpbmcgaXMgYSB2YWxpZCBVVUlEXHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgdmFsdWUgdG8gcGFyc2VcclxuICAgKiBAcmV0dXJucyAgICAgICA6IHRydWUgaWYgaXMgYSB2YWxpZCBVVUlEXHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlVVVJRCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCByZWdleCA9IC9eKHt8KCk/WzAtOWEtZkEtRl17OH0tKFswLTlhLWZBLUZdezR9LSl7M31bMC05YS1mQS1GXXsxMn0ofXwpKT8kLztcclxuICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlIGFuZCBlbnN1cmUgdGhhdCBVVUlEIGlzIG5vdCBlbXB0eVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHZhbHVlIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgICAgOiB0cnVlIGlmIHZhbGlkIGFuZCBub3QgZW1wdHlcclxuICAgKi9cclxuICBzdGF0aWMgcGFyc2VVVUlETm90RW1wdHkodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcmVnZXggPSAvXih7fCgpPzB7OH0tKDB7NH0tKXszfTB7MTJ9KH18KSk/JC87XHJcbiAgICByZXR1cm4gdGhpcy5wYXJzZVVVSUQodmFsdWUpICYmICFyZWdleC50ZXN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhbiBlbXB0eSBVVUlEXHJcbiAgICogQHJldHVybnMgOiB0aGUgZW1wdHkgVVVJRFxyXG4gICAqL1xyXG4gIHN0YXRpYyBlbXB0eVVVSUQoKTogc3RyaW5nIHsgcmV0dXJuIFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IFVVSURcclxuICAgKiBAcmV0dXJucyA6IHRoZSBzdHJpbmcgVVVJRFxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZW5lcmF0ZVVVSUQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL1t4eV0vZztcclxuICAgIHJldHVybiBcInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UocmVnZXgsIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgIHZhciByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwLFxyXG4gICAgICAgIHYgPSBjID09PSBcInhcIiA/IHIgOiAociAmIDB4MykgfCAweDg7XHJcbiAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgYSB0ZXh0IGFuZCByZXR1cm4gdHJ1ZSBpZiBpcyBhIHZhbGlkIGVtYWlsIG9yIG51bGxcclxuICAgKiBAcGFyYW0gdmFsdWUgOiBlbWFpbFxyXG4gICAqIEByZXR1cm5zICAgICA6IHRydWUgaWYgdGhlIGVtYWlsIGlzIHZhbGlkIG9yIGVtcHR5XHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlRW1haWwodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHRydWU7XHJcbiAgICBjb25zdCByZWdleCA9IC8oPzpbYS16MC05KyEjJCUmJyorXFwvPT9eX2B7fH1+LV0rKD86XFwuW2EtejAtOSEjJCUmJyorXFwvPT9eX2B7fH1+LV0rKSp8XCIoPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMVxceDIzLVxceDViXFx4NWQtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSpcIilAKD86KD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP3xcXFsoPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldP3xbYS16MC05LV0qW2EtejAtOV06KD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjEtXFx4NWFcXHg1My1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKylcXF0pL2dpXHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBhIHRleHQgYW5kIHJldHVybiB0cnVlIGlmIGlzIGEgdmFsaWQgdXJsIG9yIG51bGxcclxuICAgKiBAcGFyYW0gdmFsdWUgOiB0aGUgdXJsIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgIDogdHJ1ZSBpZiB0aGUgdXJsIGlzIHZhbGlkIG9yIGVtcHR5XHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlVXJsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFxyXG4gICAgICBcIihodHRwcz86Ly8pPyhbXFxcXGRhLXouLV0rKVxcXFwuKFthLXouXXsyLDZ9KVsvXFxcXHcgLi1dKi8/XCJcclxuICAgICk7XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZGF0ZSBwYXJ0cyBmcm9tIGEgc3RyaW5nIHZhbHVlXHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgc3RyaW5nIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgICAgOiBhbiBhcnJheSBvZiBudW1iZXJzIHdpdGggeWVhciwgbW9udGgsIGRheVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXREYXRlUGFydHModmFsdWU6IHN0cmluZyk6IG51bWJlcltdIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHBhcnRzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgaWYgKHZhbHVlLmluZGV4T2YoXCItXCIpICE9PSAtMSkge1xyXG4gICAgICBjb25zdCBwID0gdmFsdWUuc3BsaXQoXCItXCIpO1xyXG4gICAgICBpZiAocC5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xyXG4gICAgICBwYXJ0cyA9IFtwYXJzZUludChwWzBdKSwgcGFyc2VJbnQocFsxXSkgLSAxLCBwYXJzZUludChwWzJdKV07XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoXCIvXCIpICE9PSAtMSkge1xyXG4gICAgICBjb25zdCBwID0gdmFsdWUuc3BsaXQoXCIvXCIpO1xyXG4gICAgICBpZiAocC5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xyXG4gICAgICBwYXJ0cyA9IFtwYXJzZUludChwWzJdKSwgcGFyc2VJbnQocFsxXSkgLSAxLCBwYXJzZUludChwWzBdKV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFydHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBhIGRhdGVcclxuICAgKiBAcGFyYW0gdmFsdWUgICA6IHRoZSB2YWx1ZSB0byBjaGVja1xyXG4gICAqIEBwYXJhbSBsb2NhbGUgIDogdGhlIGxvY2FsZSB0byB1c2VcclxuICAgKiBAcmV0dXJucyAgICAgICA6IGEgdmFsaWQgRGF0ZSBvYmplY3Qgb3IgbnVsbFxyXG4gICAqL1xyXG4gIHN0YXRpYyBwYXJzZURhdGUodmFsdWU6IHN0cmluZyB8IERhdGUsIGxvY2FsZTogYW55ID0gaXQpOiBEYXRlIHtcclxuICAgIC8vIE5vIHZhbHVlIGF0IGFsbFxyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBBIERhdGUgdmFsdWVcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdmFsdWUuZ2V0VGltZSgpKSByZXR1cm4gdmFsdWU7XHJcbiAgICAvLyBQYXJzZSBrbm93biBmb3JtYXRzIHVzaW5nIGRhdGUtZm5zXHJcbiAgICBsZXQgZCA9IHBhcnNlSVNPKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICBpZiAoZCAmJiBkLmdldFRpbWUoKSAmJiBkLmdldEZ1bGxZZWFyKCkgPiAxNzUwKSByZXR1cm4gZDtcclxuICAgIGQgPSBwYXJzZSh2YWx1ZSBhcyBzdHJpbmcsICdkZC9NTS95eXl5JywgbmV3IERhdGUoKSwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgIGlmIChkICYmIGQuZ2V0VGltZSgpICYmIGQuZ2V0RnVsbFllYXIoKSA+IDE3NTApIHJldHVybiBkO1xyXG4gICAgZCA9IHBhcnNlKHZhbHVlIGFzIHN0cmluZywgJ3l5eXktTU0tZGQnLCBuZXcgRGF0ZSgpLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgaWYgKGQgJiYgZC5nZXRUaW1lKCkgJiYgZC5nZXRGdWxsWWVhcigpID4gMTc1MCkgcmV0dXJuIGQ7XHJcbiAgICAvLyBQYXJzZSB2YWx1ZXMgbWFudWFsbHlcclxuICAgIGxldCBwYXJ0cyA9IHRoaXMuZ2V0RGF0ZVBhcnRzKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICBpZiAocGFydHNbMF0gPCAxMDApIHBhcnRzWzBdICs9IDIwMDA7XHJcbiAgICBpZiAoaXNOYU4ocGFydHNbMF0pIHx8IHBhcnRzWzBdIDwgMCB8fCBwYXJ0c1swXSA8IDE3NTApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGlzTmFOKHBhcnRzWzFdKSB8fCBwYXJ0c1sxXSA8IDApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGlzTmFOKHBhcnRzWzJdKSB8fCBwYXJ0c1syXSA8IDApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHBhcnRzWzFdID4gMTEpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHBhcnRzWzFdID09PSAxICYmIHBhcnRzWzJdID4gMjkpIHJldHVybiBudWxsO1xyXG4gICAgZWxzZSBpZiAocGFydHNbMV0gIT09IDEgJiYgcGFydHNbMl0gPiAzMSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gbmV3IERhdGUocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSwgMik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXQgYSBkYXRlXHJcbiAgICogQHBhcmFtIHZhbHVlICAgICA6IHRoZSBkYXRlIG9yIHN0cmluZyB0byBmb3JtYXRcclxuICAgKiBAcGFyYW0gZm10ICAgICAgIDogdGhlIERhdGVGb3JtYXQgdG8gdXNlIG9yIHRoZSBzdHJpbmcgcGF0dGVyblxyXG4gICAqIEBwYXJhbSBsb2NhbGUgICAgOiB0aGUgbG9jYWxlIHRvIHVzZSAoZGVmYXVsdCBpcyBJVClcclxuICAgKiBAcmV0dXJucyAgICAgICAgIDogdGhlIGZvcm1hdHRlZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgZm9ybWF0RGF0ZShcclxuICAgIHZhbHVlOiBEYXRlIHwgc3RyaW5nLFxyXG4gICAgZm10OiBEYXRlRm9ybWF0IHwgc3RyaW5nID0gRGF0ZUZvcm1hdC5TaG9ydCxcclxuICAgIGxvY2FsZTogYW55ID0gaXQpOiBzdHJpbmcge1xyXG4gICAgLy8gTm8gdmFsdWUgYXQgYWxsXHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgIC8vIEEgc3RyaW5nXHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZylcclxuICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgLy8gTm90IGEgZGF0ZSBcclxuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkpKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIC8vIEZvcm1hdFxyXG4gICAgc3dpdGNoIChmbXQpIHtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LlNob3J0OiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcImRkL01NL3l5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0Lkxvbmc6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiZCBNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LkxvbmdXaXRoU2hvcnRNb250aDogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJkIE1NTSB5eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nV2l0aFdlZWtEYXk6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiRUVFRSwgZCBNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LkxvbmdXaXRoU2hvcnRXZWVrRGF5OiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcIkVFRSwgZCBNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0Lk1vbnRoQW5kWWVhcjogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJNTU0geXl5eVwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuTG9uZ01vbnRoQW5kWWVhcjogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LldlZWtEYXk6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiRUVFLCBkXCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nV2Vla0RheTogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJFRUVFLCBkXCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5EYXlBbmRNb250aDogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJkIE1NTU1cIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LlNob3J0VVM6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiTU0vZGQveXl5eVwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuU2hvcnRJU084NjAxOiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcInl5eXktTU0tZGRcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCBmbXQsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gaXRhbGlhbiBsb2NhbCBkYXRlXHJcbiAgICogQHBhcmFtIHZhbHVlICA6IHRoZSBkYXRlXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIG5ldyBkYXRlXHJcbiAgICovXHJcbiAgc3RhdGljIHRvTG9jYWxEYXRlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKTogRGF0ZSB7XHJcbiAgICAvLyBObyB2YWx1ZSBhdCBhbGxcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgLy8gQSBzdHJpbmdcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKVxyXG4gICAgICB2YWx1ZSA9IHRoaXMucGFyc2VEYXRlKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICAvLyBOb3QgYSBkYXRlXHJcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdmFsdWUuZ2V0VGltZSgpKSkgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBVcGRhdGUgZGF0ZVxyXG4gICAgcmV0dXJuIHNldEhvdXJzKHZhbHVlLCAyKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgYSBEYXRlSW50ZXJ2YWwgb2JqZWN0IGFjY29yZGluZyB0byBhIHN0cmluZ1xyXG4gICAqIEBwYXJhbSB2YWx1ZSAgICAgICA6IHN0cmluZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSBpbnRlcnZhbCAgICA6IERhdGVJbnRlcnZhbCB2YWx1ZSB0byB1cGRhdGVcclxuICAgKiBAcGFyYW0gZW5kICAgICAgICAgOiB0cnVlIGlmIG11c3QgYmUgdXBkYXRlZCB0aGUgZmlyc3Qgb3IgdGhlIGVuZCB2YWx1ZSBcclxuICAgKiBAcGFyYW0gY29weSAgICAgICAgOiBjb3B5IHRoZSBzYW1lIHZhbHVlICh3b3JrcyBvbmx5IGlmIG5vdCBlbmQgZWxlbWVudClcclxuICAgKi9cclxuICBzdGF0aWMgY2hhbmdlRGF0ZUludGVydmFsKHZhbHVlOiBzdHJpbmcsIGludGVydmFsOiBEYXRlSW50ZXJ2YWwsIGVuZDogYm9vbGVhbiA9IGZhbHNlLCBjb3B5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBsZXQgeWVhciA9IC0xO1xyXG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSA0ICYmICh5ZWFyID0gcGFyc2VJbnQodmFsdWUpKSA+IDE3NTApIHtcclxuICAgICAgICBpZiAoIWVuZCkge1xyXG4gICAgICAgICAgaW50ZXJ2YWwuZnJvbSA9IGZyb21ab25lZFRpbWUobmV3IERhdGUoeWVhciwgMCwgMSksICdVVEMnKTtcclxuICAgICAgICAgIGludGVydmFsLnRvID0gZnJvbVpvbmVkVGltZShuZXcgRGF0ZSh5ZWFyLCAxMSwgMzEpLCAnVVRDJyk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IG5ldyBEYXRlKHllYXIsIDExLCAzMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHBhcnRzID0gdGhpcy5nZXREYXRlUGFydHModmFsdWUpO1xyXG4gICAgICAgIGlmICghcGFydHMgfHwgaXNOYU4ocGFydHNbMF0pIHx8IHBhcnRzWzBdIDwgMCB8fCBwYXJ0c1swXSA8IDE3NTApIHJldHVybjtcclxuICAgICAgICBjb25zdCBkID0gZnJvbVpvbmVkVGltZShuZXcgRGF0ZShwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKSwgJ1VUQycpO1xyXG4gICAgICAgIGlmIChlbmQpXHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IGQ7XHJcbiAgICAgICAgZWxzZSBpZiAoY29weSkge1xyXG4gICAgICAgICAgaW50ZXJ2YWwuZnJvbSA9IGQ7XHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IGQ7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpbnRlcnZhbC5mcm9tID0gZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5jb2RlIHVybFxyXG4gICAqIEBwYXJhbSB2YWx1ZSA6IHRoZSB2YWx1ZSB0byBlbmNvZGVcclxuICAgKiBAcmV0dXJucyAgICAgOiB0aGUgdXJsIGVuY29kZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHVybEVuY29kZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVjb2RlIHVybFxyXG4gICAqIEBwYXJhbSB2YWx1ZSA6IHRoZSB1cmwgdG8gZGVjb2RlXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIGRlY29kZSB1cmwgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHVybERlY29kZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL1xcKy9nO1xyXG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCgodmFsdWUgKyBcIlwiKS5yZXBsYWNlKHJlZ2V4LCBcIiUyMFwiKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYSBxdWVyeXN0cmluZyBwYXJhbWV0ZXIgdmFsdWVcclxuICAgKiBAcGFyYW0gbmFtZSAgOiB0aGUgcGFyYW1ldGVyIG5hbWVcclxuICAgKiBAcmV0dXJucyAgICAgOiB0aGUgc3RyaW5nIHZhbHVlXHJcbiAgICovXHJcbiAgc3RhdGljIGdldFF1ZXJ5U3RyaW5nVmFsdWVCeU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIoKSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIGlmICh1cmwuaW5jbHVkZXMoXCI/XCIpKSB7XHJcbiAgICAgIGNvbnN0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7IGZyb21TdHJpbmc6IHVybC5zcGxpdChcIj9cIilbMV0gfSk7XHJcbiAgICAgIGNvbnN0IHYgPSBkZWNvZGVVUklDb21wb25lbnQoaHR0cFBhcmFtcy5nZXQobmFtZSkpO1xyXG4gICAgICBpZiAodiAhPT0gXCJudWxsXCIpIHJldHVybiB2O1xyXG4gICAgICBlbHNlIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBhIHBhc3N3b3JkXHJcbiAgICogQHJldHVybnMgOiB0aGUgcGFzc3dvcmQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGdlbmVyYXRlUGFzc3dvcmQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJhbmRvbSA9IFwiJFwiICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoLTcpO1xyXG4gICAgbGV0IHBhc3N3b3JkID0gXCJcIjtcclxuICAgIGxldCBoYXNVcHBlckNhc2UgPSBmYWxzZTtcclxuICAgIGZvciAoY29uc3Qgcm5kIG9mIHJhbmRvbSkge1xyXG4gICAgICBpZiAoIWhhc1VwcGVyQ2FzZSAmJiBcImFiY2RlZmdoamlsbW5vcHFyc3R1dnl3eHpcIi5pbmNsdWRlcyhybmQpKSB7XHJcbiAgICAgICAgcGFzc3dvcmQgKz0gcm5kLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgaGFzVXBwZXJDYXNlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwYXNzd29yZCArPSBybmQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaGFzVXBwZXJDYXNlKVxyXG4gICAgICBwYXNzd29yZCA9IHBhc3N3b3JkLnN1YnN0cmluZygwLCA3KSArIFwiTVwiO1xyXG4gICAgcmV0dXJuIHBhc3N3b3JkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIHRvdWNoXHJcbiAgICogQHJldHVybnMgOiB0cnVlIGlmIHRoZSBkaXNwbGF5IGlzIHRvdWNoYWJsZVxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc1RvdWNoYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuaXNCcm93c2VyKCkgJiYgKFxyXG4gICAgICAgIFwib250b3VjaHN0YXJ0XCIgaW4gd2luZG93IHx8XHJcbiAgICAgICAgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGNoZWNrIHdpbGwgcHJldmVudCAnd2luZG93JyBsb2dpYyB0byBiZSBleGVjdXRlZFxyXG4gICAqIHdoaWxlIGV4ZWN1dGluZyB0aGUgc2VydmVyIHJlbmRlcmluZ1xyXG4gICAqIEByZXR1cm5zIDogdHJ1ZSBpZiB1c2luZyB0aGUgYnJvd3NlclxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc0Jyb3dzZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mICh3aW5kb3cpICE9PSAndW5kZWZpbmVkJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBDb252ZXJ0IGZvbGRlcnMgaW4gYSB0cmVlIG9mIE5vZGUgb2JqZWN0LlxyXG4gKiBAcGFyYW0gZm9sZGVycyA6IHRoZSBzdWJmb2xkZXJzIGdyb3VwIG9yIG51bGwgdG8gcm9vdFxyXG4gKiBAcmV0dXJucyAgICAgICA6IGEgbm9kZSBsaXN0XHJcbiAqL1xyXG4gIHN0YXRpYyB0b05vZGVzKGZvbGRlcnM6IElOb2RlW10pOiBJTm9kZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl90b05vZGVzKGZvbGRlcnMsIHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IGZvbGRlcnMgaW4gYSB0cmVlIG9mIE5vZGUgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSBmb2xkZXJzIDogdGhlIGNoaWxkcmVuIGdyb3VwIG9yIG51bGwgdG8gcm9vdFxyXG4gICAqIEBwYXJhbSBwYXJlbnQgIDogdGhlIHBhcmVudCBub2RlXHJcbiAgICogQHJldHVybnMgICAgICAgOiBhIG5vZGUgbGlzdCBcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfdG9Ob2Rlcyhmb2xkZXJzOiBJTm9kZVtdLCBwYXJlbnQ6IElOb2RlIHwgdW5kZWZpbmVkKTogSU5vZGVbXSB7XHJcbiAgICBjb25zdCBub2RlczogSU5vZGVbXSA9IFtdO1xyXG4gICAgZm9sZGVycy5mb3JFYWNoKChuOiBJTm9kZSkgPT4ge1xyXG4gICAgICBjb25zdCBub2RlOiBJTm9kZSA9IHtcclxuICAgICAgICBpZDogbi5pZCxcclxuICAgICAgICBuYW1lOiBuLm5hbWUsXHJcbiAgICAgICAgY291bnQ6IG4uY291bnQsXHJcbiAgICAgICAgcGFyZW50OiBwYXJlbnQsXHJcbiAgICAgICAgY2hpbGRyZW46IHVuZGVmaW5lZCxcclxuICAgICAgICBiYWc6IG4sXHJcbiAgICAgIH07XHJcbiAgICAgIG5vZGUuY2hpbGRyZW4gPVxyXG4gICAgICAgIG4uY2hpbGRyZW4gJiYgbi5jaGlsZHJlbi5sZW5ndGggPiAwXHJcbiAgICAgICAgICA/IHRoaXMuX3RvTm9kZXMobi5jaGlsZHJlbiwgbm9kZSlcclxuICAgICAgICAgIDogW107XHJcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBub2RlcztcclxuICB9XHJcbn1cclxuIl19
@@ -4,7 +4,7 @@ import { DomSanitizer } from '@angular/platform-browser';
4
4
  import { parseISO, parse, format, setHours, endOfDay, getYear, getMonth, getDate, getDay, getDaysInMonth, addYears, addMonths, addDays, formatISO, isDate, isValid } from 'date-fns';
5
5
  import { it } from 'date-fns/locale';
6
6
  import { HttpParams } from '@angular/common/http';
7
- import { TZDate } from '@date-fns/tz';
7
+ import { fromZonedTime } from 'date-fns-tz';
8
8
  import { NG_VALIDATORS } from '@angular/forms';
9
9
  import { debounceTime } from 'rxjs/operators';
10
10
  import { Subject, BehaviorSubject } from 'rxjs';
@@ -656,8 +656,8 @@ class SystemUtils {
656
656
  let year = -1;
657
657
  if (value.length === 4 && (year = parseInt(value)) > 1750) {
658
658
  if (!end) {
659
- interval.from = new TZDate(new Date(year, 0, 1), 'UTC');
660
- interval.to = new TZDate(new Date(year, 11, 31), 'UTC');
659
+ interval.from = fromZonedTime(new Date(year, 0, 1), 'UTC');
660
+ interval.to = fromZonedTime(new Date(year, 11, 31), 'UTC');
661
661
  }
662
662
  else
663
663
  interval.to = new Date(year, 11, 31);
@@ -666,15 +666,15 @@ class SystemUtils {
666
666
  let parts = this.getDateParts(value);
667
667
  if (!parts || isNaN(parts[0]) || parts[0] < 0 || parts[0] < 1750)
668
668
  return;
669
- const tzDate = new TZDate(new Date(parts[0], parts[1], parts[2]), 'UTC');
669
+ const d = fromZonedTime(new Date(parts[0], parts[1], parts[2]), 'UTC');
670
670
  if (end)
671
- interval.to = tzDate;
671
+ interval.to = d;
672
672
  else if (copy) {
673
- interval.from = tzDate;
674
- interval.to = tzDate;
673
+ interval.from = d;
674
+ interval.to = d;
675
675
  }
676
676
  else
677
- interval.from = tzDate;
677
+ interval.from = d;
678
678
  }
679
679
  }
680
680
  }
@@ -1526,7 +1526,7 @@ class DateFnsAdapter extends DateAdapter {
1526
1526
  let result = new Date();
1527
1527
  result.setFullYear(year, month, date);
1528
1528
  result.setHours(0, 0, 0, 0);
1529
- result = new TZDate(result, "UTC");
1529
+ result = fromZonedTime(result, "UTC");
1530
1530
  // Check that the date wasn't above the upper bound for the month, causing the month to overflow
1531
1531
  if (result.getMonth() != month) {
1532
1532
  throw Error(`Invalid date "${date}" for month with index "${month}".`);
@@ -1540,7 +1540,7 @@ class DateFnsAdapter extends DateAdapter {
1540
1540
  if (typeof value == 'string' && value.length > 0) {
1541
1541
  let iso8601Date = parseISO(value);
1542
1542
  if (this.isValid(iso8601Date)) {
1543
- iso8601Date = new TZDate(iso8601Date, "UTC");
1543
+ iso8601Date = fromZonedTime(iso8601Date, "UTC");
1544
1544
  return iso8601Date;
1545
1545
  }
1546
1546
  const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];
@@ -1550,7 +1550,7 @@ class DateFnsAdapter extends DateAdapter {
1550
1550
  for (const currentFormat of formats) {
1551
1551
  let fromFormat = parse(value, currentFormat, new Date(), { locale: this.locale });
1552
1552
  if (this.isValid(fromFormat)) {
1553
- fromFormat = new TZDate(fromFormat, "UTC");
1553
+ fromFormat = fromZonedTime(fromFormat, "UTC");
1554
1554
  return fromFormat;
1555
1555
  }
1556
1556
  }
@@ -1 +1 @@
1
- {"version":3,"file":"arsedizioni-ars-utils-core.mjs","sources":["../../../projects/ars-utils/core/pipes/replace.pipe.ts","../../../projects/ars-utils/core/pipes/safe-html.pipe.ts","../../../projects/ars-utils/core/pipes/safe-url.pipe.ts","../../../projects/ars-utils/core/pipes/search-callback.pipe.ts","../../../projects/ars-utils/core/pipes/search-filter.pipe.ts","../../../projects/ars-utils/core/system.ts","../../../projects/ars-utils/core/pipes/format.pipe.ts","../../../projects/ars-utils/core/directives/copyClipboardDirective.ts","../../../projects/ars-utils/core/directives/validators.ts","../../../projects/ars-utils/core/definitions.ts","../../../projects/ars-utils/core/directives/changeDateIntervalDirective.ts","../../../projects/ars-utils/core/dateFnsAdapter.ts","../../../projects/ars-utils/core/directives/autoFocusDirective.ts","../../../projects/ars-utils/core/selectable.ts","../../../projects/ars-utils/core/services/broadcast.service.ts","../../../projects/ars-utils/core/services/environment.service.ts","../../../projects/ars-utils/core/services/screen.service.ts","../../../projects/ars-utils/core/services/broadcastChannelManager.ts","../../../projects/ars-utils/core/services/theme.service.ts","../../../projects/ars-utils/core/core.module.ts","../../../projects/ars-utils/core/public_api.ts","../../../projects/ars-utils/core/arsedizioni-ars-utils-core.ts"],"sourcesContent":["import { Injectable, Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'replace',\r\n standalone: true\r\n})\r\nexport class ReplacePipe implements PipeTransform {\r\n\r\n private sanitizer = inject(DomSanitizer);\r\n \r\n transform(value: string | null | undefined, regexValue: string, replaceValue: string): SafeHtml {\r\n if (!value) return null;\r\n if (regexValue === '\\n' && !replaceValue) {\r\n replaceValue = '<br>';\r\n }\r\n return this.sanitizer.bypassSecurityTrustHtml(value.replace(new RegExp(regexValue, 'g'), replaceValue));\r\n }\r\n}\r\n","import { Pipe, Injectable, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'safeHtml',\r\n standalone: true\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n transform(value: string | null | undefined): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustHtml(value ?? '');\r\n }\r\n}\r\n","import { Pipe, Injectable, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'safeUrl',\r\n standalone: true\r\n})\r\nexport class SafeUrlPipe implements PipeTransform {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n transform(value: string | null | undefined): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(value ?? '');\r\n }\r\n}\r\n","import { PipeTransform, Pipe } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'callback',\r\n pure: false,\r\n standalone: true\r\n})\r\nexport class SearchCallbackPipe implements PipeTransform {\r\n transform(items: any[] | null | undefined, callback: (item: any) => boolean): any {\r\n if (!items || !callback) {\r\n return items;\r\n }\r\n return items.filter(item => callback(item));\r\n }\r\n}\r\n","import { Pipe, PipeTransform, Injectable } from '@angular/core';\r\nimport { SearchFilterMetadata } from '../definitions';\r\n\r\n// ---------------------------------------------------------------------------------\r\n// 2023.0921 aggiunto un campo opzionale di tipo SearchFilterMetadata per i conteggi\r\n//\r\n// - nel chiamante:\r\n// let items: Searchable[] = [...];\r\n// let myFilterText: string = 'testo del filtro';\r\n// const myFilterMetadata: SearchFilterMetadata = { total: 0, count: 0 };\r\n// \r\n// <div *ngFor=\"let item of items | search:myFilterText:myFilterMetadata\">\r\n// <div>Totale: {{ myFilterMetadata.total }}, Filtrati: {{ myFilterMetadata.count }}</div>\r\n// ---------------------------------------------------------------------------------\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'search',\r\n standalone: true\r\n})\r\nexport class SearchFilterPipe implements PipeTransform {\r\n transform(items: any[] | null | undefined, value: string | null | undefined, metadata?: SearchFilterMetadata): any {\r\n\r\n // se non vengono passati i metadati ne crea una copia locale per evitare gli if\r\n metadata = metadata || { total: 0, count: 0 };\r\n\r\n if (!items || !value) {\r\n return items;\r\n }\r\n let result = items.filter(item => {\r\n if (item) {\r\n if (item.searchBag)\r\n return item.searchBag.name\r\n .toLowerCase()\r\n .indexOf(value.toLowerCase()) !== -1;\r\n else return item.toLowerCase().indexOf(value.toLowerCase()) !== -1;\r\n }\r\n return null;\r\n });\r\n\r\n // aggiorna i conteggi\r\n metadata.total = items.length;\r\n metadata.count = result.length;\r\n\r\n return result;\r\n }\r\n}\r\n","import { HttpParams } from \"@angular/common/http\";\r\nimport { DateInterval } from './definitions';\r\nimport { format, parse, parseISO, setHours } from 'date-fns';\r\nimport { it } from 'date-fns/locale';\r\nimport { TZDate } from '@date-fns/tz';\r\n\r\nexport interface INode {\r\n id: string;\r\n name?: string | null;\r\n count?: number | null;\r\n children?: INode[] | null;\r\n parent?: INode | null;\r\n bag?: any | null\r\n}\r\n\r\n\r\nexport enum DateFormat {\r\n Short = 1, // dd/mm/yyyy\r\n Long = 2, // d mmmm yyyy\r\n LongWithShortMonth = 3, // d mmm yyyy\r\n LongWithWeekDay = 4, // wwww, d mmmm yyyy\r\n LongWithShortWeekDay = 5, // www, d mmmm yyyy\r\n MonthAndYear = 6, // mmm yyyy\r\n LongMonthAndYear = 7, // mmmm yyyy\r\n WeekDay = 8, // www d\r\n LongWeekDay = 9, // wwww d\r\n DayAndMonth = 10, // d mmmm\r\n ShortUS = 11, // mm/dd/yyyy\r\n ShortISO8601 = 12 // yyyy-mm-dd\r\n}\r\n\r\nexport class SystemUtils {\r\n /**\r\n * Array find by key\r\n * @param array : the array to scan\r\n * @param key : key name\r\n * @param value : the value to search for\r\n * @returns : the property value or null\r\n */\r\n static arrayFindByKey<T>(array: T[] | null | undefined, key: string, value: any): T | null {\r\n if (!array) return null;\r\n for (const item of array) {\r\n if ((item as any)[key] === value) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Array find index by key\r\n * @param array : the array to scan\r\n * @param key : the key name\r\n * @param value : the value to search for\r\n * @returns : the array index or -1 if not found\r\n */\r\n static arrayFindIndexByKey<T>(array: T[] | null | undefined, key: string, value: any): number {\r\n if (!array) return -1;\r\n for (let i = 0; i < array.length; i++) {\r\n if ((array[i] as any)[key] === value) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * Get a value from and array made of name|value items\r\n * @param array : the array to scan\r\n * @param value : the value to search for\r\n * @returns : the property value or null if not found\r\n */\r\n static arrayGetValue<T>(array: T[] | null | undefined, value: any): any {\r\n if (!array) return null;\r\n for (var i = 0; i < array.length; i++) {\r\n const item = (array[i] as any);\r\n if (item.value === value) {\r\n return item.name || item.id;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Convert items to nodes into a tree structure\r\n * @param items : list of nodes\r\n * @param parent : parent node\r\n * @returns : an array of INode objects\r\n */\r\n static arrayToNodes(items: INode[], parent: INode = null): INode[] {\r\n const nodes: INode[] = [];\r\n items.forEach((n) => {\r\n const node: INode = {\r\n id: n.id.toString(),\r\n name: n.name,\r\n count: n.count ? n.count : 0,\r\n children: null,\r\n parent,\r\n bag: n,\r\n };\r\n nodes.push(node);\r\n node.children =\r\n n.children && n.children.length > 0\r\n ? this.arrayToNodes(n.children, node)\r\n : [];\r\n });\r\n return nodes;\r\n }\r\n\r\n /**\r\n * Used to copare items during an array of objects sorting\r\n * @param key : the property name to sort for\r\n * @param order : the order 'asc' or 'desc'\r\n * @returns : 0 if equals, 1 if bigger, -1 if lower\r\n */\r\n static arraySortCompare(key: string, order: string = \"asc\") {\r\n const result = function innerSort(a: any, b: any) {\r\n if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {\r\n // property doesn't exist on either object\r\n return 0;\r\n }\r\n const varA = typeof a[key] === \"string\" ? a[key].toUpperCase() : a[key];\r\n const varB = typeof b[key] === \"string\" ? b[key].toUpperCase() : b[key];\r\n let comparison = 0;\r\n if (varA > varB) comparison = 1;\r\n else if (varA < varB) comparison = -1;\r\n return order === \"desc\" ? comparison * -1 : comparison;\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * Format weight\r\n * @param gr : grams\r\n * @returns : the formatted string\r\n */\r\n static formatWeight(gr: number): string {\r\n if (gr > 1000000) return (gr / 1000000).toFixed(2) + \" t\";\r\n else if (gr > 100000) return (gr / 100000).toFixed(2) + \" q\";\r\n else if (gr > 1000) return (gr / 1000).toFixed(2) + \" kg\";\r\n else return gr + \" gr\";\r\n }\r\n\r\n /**\r\n * Format file size\r\n * @param bytes : number of bytes\r\n * @returns : the formatted string\r\n */\r\n static formatFileSize(bytes: number): string {\r\n if (bytes > 1024000) return (bytes / 1024000).toFixed(1) + \" MB\";\r\n if (bytes > 1024) return (bytes / 1024).toFixed(1) + \" Kb\";\r\n return bytes + \" byte\";\r\n }\r\n\r\n /**\r\n * Compare two string\r\n * @param a : string a\r\n * @param b : string b\r\n * @returns : 0 if equals, 1 if bigger, -1 if lower\r\n */\r\n static compareString(a: string, b: string): number {\r\n if ((a ?? \"\").toLowerCase() > (b ?? \"\").toLowerCase()) return 1;\r\n if ((a ?? \"\").toLowerCase() < (b ?? \"\").toLowerCase()) return -1;\r\n return 0;\r\n }\r\n\r\n /**\r\n * Capitalize a string\r\n * @param s : the string to capitalize\r\n * @returns : the capitalized string \r\n */\r\n static capitalize(s: string): string {\r\n if (!s) return null;\r\n let b = \"\";\r\n let cap = true;\r\n for (const char of s) {\r\n if (char === \" \") {\r\n b += char;\r\n cap = true;\r\n } else if (cap) {\r\n b += char.toUpperCase();\r\n cap = false;\r\n } else {\r\n b += char.toLowerCase();\r\n }\r\n }\r\n return b;\r\n }\r\n\r\n /**\r\n * Truncate a string\r\n * @param s : the string to truncate\r\n * @param max : the max number of chars\r\n * @returns : the truncated string\r\n */\r\n static truncate(s: string, max: number = 500): string {\r\n if (!s) return null;\r\n if (s.length < max) return s;\r\n let i = max - 1;\r\n while (i > 0) {\r\n if (s[i] === ' ') return s.slice(0, i);\r\n i--;\r\n }\r\n return s;\r\n }\r\n\r\n /**\r\n * Join a list of strings\r\n * @param items : the list of strings\r\n * @param sep : the separator string\r\n * @param max : the maximum resulting string\r\n * @returns : the joined string\r\n */\r\n static join(items: string[], sep: string = \" \", max: number = 350): string {\r\n if (!items || items.length === 0) return null;\r\n if (items.length > 1) {\r\n let l = 0;\r\n let s = \"\"\r\n while (s.length < max && items.length > l) {\r\n if (l > 0) {\r\n s += sep;\r\n }\r\n s += items[l++];\r\n }\r\n if (items.length > l) {\r\n s += \"...\";\r\n }\r\n return s;\r\n }\r\n return items[0];\r\n }\r\n\r\n /**\r\n * Replace stuff in text html\r\n * @param s : the string to process\r\n * @returns : the replaced string \r\n */\r\n static replaceAsHtml(s: string): string {\r\n const regex = /https?:\\/\\/.*[^\\s]/ig\r\n const m = regex.exec(s);\r\n if (m && m.length > 0) {\r\n let v = null;\r\n for (let i = 0; i < m.length; i++) {\r\n v = m[i];\r\n s = s.replace(v, '<a href=\"' + v + '\" target=\"_blank\">' + v + '</a>');\r\n }\r\n }\r\n return s;\r\n }\r\n\r\n /**\r\n * Compare two names\r\n * @param a : name a\r\n * @param b : name b\r\n * @returns : true if a equals b\r\n */\r\n static compareNames(a: string, b: string): boolean {\r\n if (a) a = a.trim();\r\n if (b) b = b.trim();\r\n if (a && b && a.length !== b.length) return false;\r\n if (this.compareString(a, b) === 0) return true;\r\n const p1 = a.split(\" \");\r\n const p2 = b.split(\" \");\r\n if (p1.length !== p2.length) return false;\r\n let matches = p1.length;\r\n for (const s1 of p1) {\r\n for (const s2 of p2) {\r\n if (this.compareString(s1, s2) === 0) {\r\n matches--;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return matches === 0;\r\n }\r\n\r\n /**\r\n * Cipher a text\r\n * @param text : the text\r\n * @param key : the key\r\n * @param reverse : true to decode, false to encode\r\n * @returns :the ciphered text\r\n */\r\n static cipher(text: string, key: string, reverse: boolean = false): string {\r\n // Surrogate pair limit\r\n var bound = 0x10000;\r\n\r\n // Create string from character codes\r\n return String.fromCharCode.apply(\r\n null,\r\n // Turn string to character codes\r\n text.split(\"\").map(function (v: any, i: number) {\r\n // Get rotation from key\r\n var rotation = key.charCodeAt(i % key.length);\r\n\r\n // Are we decrypting?\r\n if (reverse) rotation = -rotation;\r\n\r\n // Return current character code + rotation\r\n return (v.charCodeAt() + rotation + bound) % bound;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Clone an object using JSON\r\n * @param obj : the oblect to clone\r\n * @returns : a new object\r\n */\r\n static clone(obj: any): any {\r\n if (!obj) return null;\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n\r\n /**\r\n * Clone an object using deep cloning\r\n * @param obj : the oblect to clone\r\n * @returns : a new object\r\n */\r\n static deepClone<T>(obj: any, dest: T = null): T {\r\n const cloneObj = dest ? dest : (obj.constructor() as any);\r\n const attributes = Object.keys(obj);\r\n for (const attribute of attributes) {\r\n const property = obj[attribute];\r\n if (typeof property === \"object\" && property != null) {\r\n cloneObj[attribute] = this.deepClone(property);\r\n } else {\r\n cloneObj[attribute] = property;\r\n }\r\n }\r\n return cloneObj;\r\n }\r\n\r\n\r\n /**\r\n * Check if a string is a valid UUID\r\n * @param value : the value to parse\r\n * @returns : true if is a valid UUID\r\n */\r\n static parseUUID(value: string): boolean {\r\n const regex = /^({|()?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}(}|))?$/;\r\n return regex.test(value);\r\n }\r\n\r\n /**\r\n * Parse and ensure that UUID is not empty\r\n * @param value : the value to parse\r\n * @returns : true if valid and not empty\r\n */\r\n static parseUUIDNotEmpty(value: string): boolean {\r\n const regex = /^({|()?0{8}-(0{4}-){3}0{12}(}|))?$/;\r\n return this.parseUUID(value) && !regex.test(value);\r\n }\r\n\r\n /**\r\n * Return an empty UUID\r\n * @returns : the empty UUID\r\n */\r\n static emptyUUID(): string { return \"00000000-0000-0000-0000-000000000000\" };\r\n\r\n /**\r\n * Create a new UUID\r\n * @returns : the string UUID\r\n */\r\n static generateUUID(): string {\r\n const regex = /[xy]/g;\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(regex, function (c) {\r\n var r = (Math.random() * 16) | 0,\r\n v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n /**\r\n * Parse a text and return true if is a valid email or null\r\n * @param value : email\r\n * @returns : true if the email is valid or empty\r\n */\r\n static parseEmail(value: string): boolean {\r\n if (!value) return true;\r\n const regex = /(?:[a-z0-9+!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/gi\r\n return regex.test(value.trim().toLowerCase());\r\n }\r\n\r\n /**\r\n * Parse a text and return true if is a valid url or null\r\n * @param value : the url to parse\r\n * @returns : true if the url is valid or empty\r\n */\r\n static parseUrl(value: string): boolean {\r\n if (!value) return true;\r\n const regex = new RegExp(\r\n \"(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?\"\r\n );\r\n return regex.test(value.trim().toLowerCase());\r\n }\r\n\r\n /**\r\n * Get date parts from a string value\r\n * @param value : the string to parse\r\n * @returns : an array of numbers with year, month, day\r\n */\r\n static getDateParts(value: string): number[] {\r\n if (!value) return null;\r\n let parts: number[] = [];\r\n if (value.indexOf(\"-\") !== -1) {\r\n const p = value.split(\"-\");\r\n if (p.length !== 3) return null;\r\n parts = [parseInt(p[0]), parseInt(p[1]) - 1, parseInt(p[2])];\r\n } else if (value.indexOf(\"/\") !== -1) {\r\n const p = value.split(\"/\");\r\n if (p.length !== 3) return null;\r\n parts = [parseInt(p[2]), parseInt(p[1]) - 1, parseInt(p[0])];\r\n }\r\n return parts;\r\n }\r\n\r\n /**\r\n * Parse a date\r\n * @param value : the value to check\r\n * @param locale : the locale to use\r\n * @returns : a valid Date object or null\r\n */\r\n static parseDate(value: string | Date, locale: any = it): Date {\r\n // No value at all\r\n if (!value) return null;\r\n // A Date value\r\n if (value instanceof Date && value.getTime()) return value;\r\n // Parse known formats using date-fns\r\n let d = parseISO(value as string);\r\n if (d && d.getTime() && d.getFullYear() > 1750) return d;\r\n d = parse(value as string, 'dd/MM/yyyy', new Date(), { locale: locale });\r\n if (d && d.getTime() && d.getFullYear() > 1750) return d;\r\n d = parse(value as string, 'yyyy-MM-dd', new Date(), { locale: locale });\r\n if (d && d.getTime() && d.getFullYear() > 1750) return d;\r\n // Parse values manually\r\n let parts = this.getDateParts(value as string);\r\n if (parts[0] < 100) parts[0] += 2000;\r\n if (isNaN(parts[0]) || parts[0] < 0 || parts[0] < 1750) return null;\r\n if (isNaN(parts[1]) || parts[1] < 0) return null;\r\n if (isNaN(parts[2]) || parts[2] < 0) return null;\r\n if (parts[1] > 11) return null;\r\n if (parts[1] === 1 && parts[2] > 29) return null;\r\n else if (parts[1] !== 1 && parts[2] > 31) return null;\r\n return new Date(parts[0], parts[1], parts[2], 2);\r\n }\r\n\r\n /**\r\n * Format a date\r\n * @param value : the date or string to format\r\n * @param fmt : the DateFormat to use or the string pattern\r\n * @param locale : the locale to use (default is IT)\r\n * @returns : the formatted string\r\n */\r\n static formatDate(\r\n value: Date | string,\r\n fmt: DateFormat | string = DateFormat.Short,\r\n locale: any = it): string {\r\n // No value at all\r\n if (!value) return null;\r\n // A string\r\n if (typeof value === 'string' || value instanceof String)\r\n value = this.parseDate(value as string);\r\n // Not a date \r\n if (!(value instanceof Date && value.getTime()))\r\n return null;\r\n // Format\r\n switch (fmt) {\r\n case DateFormat.Short: return format(value, \"dd/MM/yyyy\", { locale: locale });\r\n case DateFormat.Long: return format(value, \"d MMMM yyyy\", { locale: locale });\r\n case DateFormat.LongWithShortMonth: return format(value, \"d MMM yyyy\", { locale: locale });\r\n case DateFormat.LongWithWeekDay: return format(value, \"EEEE, d MMMM yyyy\", { locale: locale });\r\n case DateFormat.LongWithShortWeekDay: return format(value, \"EEE, d MMMM yyyy\", { locale: locale });\r\n case DateFormat.MonthAndYear: return format(value, \"MMM yyyy\", { locale: locale });\r\n case DateFormat.LongMonthAndYear: return format(value, \"MMMM yyyy\", { locale: locale });\r\n case DateFormat.WeekDay: return format(value, \"EEE, d\", { locale: locale });\r\n case DateFormat.LongWeekDay: return format(value, \"EEEE, d\", { locale: locale });\r\n case DateFormat.DayAndMonth: return format(value, \"d MMMM\", { locale: locale });\r\n case DateFormat.ShortUS: return format(value, \"MM/dd/yyyy\", { locale: locale });\r\n case DateFormat.ShortISO8601: return format(value, \"yyyy-MM-dd\", { locale: locale });\r\n default:\r\n return format(value, fmt, { locale: locale });\r\n }\r\n }\r\n\r\n /**\r\n * Return an italian local date\r\n * @param value : the date\r\n * @returns : the new date\r\n */\r\n static toLocalDate(value: Date | string): Date {\r\n // No value at all\r\n if (!value) return null;\r\n // A string\r\n if (typeof value === 'string' || value instanceof String)\r\n value = this.parseDate(value as string);\r\n // Not a date\r\n if (!(value instanceof Date && value.getTime())) return null;\r\n // Update date\r\n return setHours(value, 2);\r\n\r\n }\r\n\r\n /**\r\n * Update a DateInterval object according to a string\r\n * @param value : string value\r\n * @param interval : DateInterval value to update\r\n * @param end : true if must be updated the first or the end value \r\n * @param copy : copy the same value (works only if not end element)\r\n */\r\n static changeDateInterval(value: string, interval: DateInterval, end: boolean = false, copy: boolean = false) {\r\n if (value) {\r\n let year = -1;\r\n if (value.length === 4 && (year = parseInt(value)) > 1750) {\r\n if (!end) {\r\n interval.from = new TZDate(new Date(year, 0, 1), 'UTC');\r\n interval.to = new TZDate(new Date(year, 11, 31), 'UTC');\r\n } else\r\n interval.to = new Date(year, 11, 31);\r\n } else {\r\n let parts = this.getDateParts(value);\r\n if (!parts || isNaN(parts[0]) || parts[0] < 0 || parts[0] < 1750) return;\r\n const tzDate = new TZDate(new Date(parts[0], parts[1], parts[2]), 'UTC');\r\n if (end)\r\n interval.to = tzDate;\r\n else if (copy) {\r\n interval.from = tzDate;\r\n interval.to = tzDate;\r\n } else\r\n interval.from = tzDate;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Encode url\r\n * @param value : the value to encode\r\n * @returns : the url encoded string\r\n */\r\n static urlEncode(value: string): string {\r\n return encodeURIComponent(value);\r\n }\r\n\r\n /**\r\n * Decode url\r\n * @param value : the url to decode\r\n * @returns : the decode url string\r\n */\r\n static urlDecode(value: string): string {\r\n const regex = /\\+/g;\r\n return decodeURIComponent((value + \"\").replace(regex, \"%20\"));\r\n }\r\n\r\n /**\r\n * Get a querystring parameter value\r\n * @param name : the parameter name\r\n * @returns : the string value\r\n */\r\n static getQueryStringValueByName(name: string): string {\r\n if (!this.isBrowser()) return null;\r\n const url = window.location.href;\r\n if (url.includes(\"?\")) {\r\n const httpParams = new HttpParams({ fromString: url.split(\"?\")[1] });\r\n const v = decodeURIComponent(httpParams.get(name));\r\n if (v !== \"null\") return v;\r\n else return null;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Generate a password\r\n * @returns : the password string\r\n */\r\n static generatePassword(): string {\r\n const random = \"$\" + Math.random().toString(36).slice(-7);\r\n let password = \"\";\r\n let hasUpperCase = false;\r\n for (const rnd of random) {\r\n if (!hasUpperCase && \"abcdefghjilmnopqrstuvywxz\".includes(rnd)) {\r\n password += rnd.toUpperCase();\r\n hasUpperCase = true;\r\n } else {\r\n password += rnd;\r\n }\r\n }\r\n if (!hasUpperCase)\r\n password = password.substring(0, 7) + \"M\";\r\n return password;\r\n }\r\n\r\n /**\r\n * Check if current browser supports touch\r\n * @returns : true if the display is touchable\r\n */\r\n static isTouchable(): boolean {\r\n return (\r\n this.isBrowser() && (\r\n \"ontouchstart\" in window ||\r\n navigator.maxTouchPoints > 0)\r\n );\r\n }\r\n\r\n /**\r\n * This check will prevent 'window' logic to be executed\r\n * while executing the server rendering\r\n * @returns : true if using the browser\r\n */\r\n static isBrowser(): boolean {\r\n return typeof (window) !== 'undefined';\r\n }\r\n\r\n /**\r\n * Convert folders in a tree of Node object.\r\n * @param folders : the subfolders group or null to root\r\n * @returns : a node list\r\n */\r\n static toNodes(folders: INode[]): INode[] {\r\n return this._toNodes(folders, undefined);\r\n }\r\n\r\n /**\r\n * Convert folders in a tree of Node object.\r\n * @param folders : the children group or null to root\r\n * @param parent : the parent node\r\n * @returns : a node list \r\n */\r\n private static _toNodes(folders: INode[], parent: INode | undefined): INode[] {\r\n const nodes: INode[] = [];\r\n folders.forEach((n: INode) => {\r\n const node: INode = {\r\n id: n.id,\r\n name: n.name,\r\n count: n.count,\r\n parent: parent,\r\n children: undefined,\r\n bag: n,\r\n };\r\n node.children =\r\n n.children && n.children.length > 0\r\n ? this._toNodes(n.children, node)\r\n : [];\r\n nodes.push(node);\r\n });\r\n return nodes;\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { format } from 'date-fns';\r\nimport { it } from 'date-fns/locale';\r\nimport { SystemUtils } from '../system';\r\n\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'format',\r\n standalone: true\r\n})\r\nexport class FormatPipe implements PipeTransform {\r\n\r\n\r\n transform(\r\n value: any | null | undefined,\r\n type: string = 'date',\r\n pattern: string = \"dd/MM/yyyy\"): string | null {\r\n if (!value) return null;\r\n switch (type) {\r\n case 'D':\r\n case 'date':\r\n const d = SystemUtils.parseDate(value, it);\r\n if (d) return format(d, pattern, { locale: it });\r\n break;\r\n case 'C':\r\n case 'currency':\r\n if (value > 0) return new Intl.NumberFormat('it-IT', { style: 'currency', currency: 'EUR' }).format(value);\r\n break;\r\n case 'N':\r\n case 'number':\r\n if (value > 0) return new Intl.NumberFormat('it-IT', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 2 }).format(value);\r\n break;\r\n case 'N0':\r\n case 'number0':\r\n if (value > 0) return new Intl.NumberFormat('it-IT', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(value);\r\n break;\r\n case 'P':\r\n case 'percentage':\r\n if (value> 0) return new Intl.NumberFormat('it-IT', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(value);\r\n break;\r\n }\r\n return null;\r\n }\r\n}\r\n","import {\r\n Directive,\r\n EventEmitter,\r\n HostListener,\r\n Injectable,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { SystemUtils } from '../system';\r\n\r\n\r\n@Injectable()\r\n@Directive({\r\n selector: '[copyClipboard]',\r\n standalone: true\r\n})\r\nexport class CopyClipboardDirective {\r\n @Input('copyClipboard')\r\n public payload: string;\r\n\r\n @Output('copied')\r\n public copied: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n @HostListener('click', ['$event'])\r\n public onClick(event: MouseEvent): void {\r\n event.preventDefault();\r\n if (!this.payload) return;\r\n\r\n if (SystemUtils.isBrowser()) {\r\n let listener = (e: ClipboardEvent) => {\r\n let clipboard = e.clipboardData;\r\n clipboard.setData('text/html', this.payload.toString());\r\n e.preventDefault();\r\n\r\n this.copied.emit(this.payload);\r\n };\r\n\r\n document.addEventListener('copy', listener, false);\r\n document.execCommand('copy');\r\n document.removeEventListener('copy', listener, false);\r\n }\r\n }\r\n}\r\n","import { Directive, forwardRef, Input } from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n} from \"@angular/forms\";\r\nimport { endOfDay } from 'date-fns';\r\nimport { Validated } from '../definitions';\r\nimport { SystemUtils } from \"../system\";\r\n\r\n\r\n@Directive({\r\n selector: '[validator]',\r\n providers: [{ provide: NG_VALIDATORS, useExisting: ValidatorDirective, multi: true }],\r\n standalone: true, \r\n})\r\nexport class ValidatorDirective implements Validator {\r\n @Input() validator: (control: AbstractControl) => ValidationErrors | null;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.validator(control);\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[validIf]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => ValidIfDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class ValidIfDirective implements Validator {\r\n @Input() validIf: boolean = false;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n let isValid = false;\r\n let c = control.value ? (control.value as Validated) : null;\r\n if (!c) isValid = this.validIf === true;\r\n else {\r\n try {\r\n isValid = c.isValid();\r\n } catch { }\r\n }\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { validIf: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n\r\n@Directive({\r\n selector: \"[equals]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => EqualsValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class EqualsValidatorDirective implements Validator {\r\n @Input() equals: AbstractControl = null;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const isValid = this.equals.value === control.value;\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { equals: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[emails]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => EmailsValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class EmailsValidatorDirective implements Validator {\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n let isValid = true;\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n var parts = input.replaceAll(/\\r\\n/g, \"\").split(\";\");\r\n for (var i = 0; i < parts.length; i++) {\r\n if (parts[i].length > 0) {\r\n if (!SystemUtils.parseEmail(parts[i])) {\r\n isValid = false;\r\n break;\r\n }\r\n }\r\n }\r\n if (!isValid) {\r\n return { emails: \"Elenco non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[guid]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => GuidValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class GuidValidatorDirective implements Validator {\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n const isValid = SystemUtils.parseUUID(input);\r\n if (!isValid) {\r\n return { guid: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[sqlDate]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => SqlDateValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class SqlDateValidatorDirective implements Validator {\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n const d = endOfDay(SystemUtils.parseDate(input));\r\n const isValid = d.getFullYear() > 1750;\r\n if (!isValid) {\r\n return { notFuture: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[notFuture]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NotFutureValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class NotFutureValidatorDirective implements Validator {\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n const today = endOfDay(new Date());\r\n const d = endOfDay(SystemUtils.parseDate(input));\r\n const isValid = d <= today;\r\n if (!isValid) {\r\n return { notFuture: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[url]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => UrlValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class UrlValidatorDirective implements Validator {\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n const isValid = SystemUtils.parseUrl(input);\r\n if (!isValid) {\r\n return { url: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n\r\n@Directive({\r\n selector: \"[fileSize]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => FileSizeValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class FileSizeValidatorDirective implements Validator {\r\n @Input() maxSizeMb: number = 5;\r\n @Input() minSizeMb: number = 0;\r\n @Input() size: number;\r\n\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n let f = control.value;\r\n let s = this.size ? this.size : 0;\r\n if (!f) return null;\r\n let isValid = s <= this.maxSizeMb && s >= this.minSizeMb;\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { fileSize: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[password]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => PasswordValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class PasswordValidatorDirective implements Validator {\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n let isValid = input && input.length >= 8;\r\n let hasUpperCase = false;\r\n let hasSymbol = false;\r\n if (isValid) {\r\n for (let i = 0; i < input.length; i++) {\r\n let ch = input[i];\r\n if (ch == ch.toUpperCase()) hasUpperCase = true;\r\n if (\"$£$%&/()=?!*+-°^#@§[]{}<>_-:;.,\".indexOf(ch) != -1) hasSymbol = true;\r\n }\r\n isValid = hasSymbol && hasUpperCase;\r\n }\r\n if (!isValid) {\r\n return { password: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n@Directive({\r\n selector: \"[time]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => TimeValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\n\r\nexport class TimeValidatorDirective implements Validator {\r\n @Input() slots: string;\r\n \r\n\r\n /**\r\n * Retrieve hours as a number from a time string (e: 12:00)\r\n * @param value : the time string\r\n * @returns the hours as a number or -1\r\n */\r\n private getTime(value: string): number | null {\r\n const p = value.split(':');\r\n if (p.length !== 2) return -1;\r\n const hh = parseInt(p[0]);\r\n if (hh < 0 || hh > 23) return -1;\r\n const mm = parseInt(p[1]);\r\n if (mm < 0 || hh > 59) return -1;\r\n return parseInt(p[0] + p[1]);\r\n }\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n let isValid: boolean = false;\r\n const t = this.getTime(input);\r\n if (t !== -1) {\r\n if (this.slots) {\r\n const slots = this.slots.split('|');\r\n slots.forEach(s => {\r\n const t1 = this.getTime(s.substring(0, 5));\r\n const t2 = this.getTime(s.substring(6));\r\n if (t1 !== -1 && t2 !== -1 && t1 <= t && t2 >= t) {\r\n // Good\r\n isValid = true;\r\n return;\r\n }\r\n });\r\n }\r\n }\r\n if (!isValid) {\r\n return { time: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n","import { INode } from './system';\r\n\r\nexport interface DoneResult<T> {\r\n isNew?: boolean | null;\r\n data?: T;\r\n}\r\n\r\nexport interface ApiResponse {\r\n success: boolean;\r\n message: string;\r\n}\r\n\r\nexport interface ApiResult<T> extends ApiResponse {\r\n value: T;\r\n}\r\n\r\nexport interface Folder extends INode {\r\n teamId?: string | null;\r\n parentId?: string | null;\r\n position?: number | null;\r\n isPrivate?: boolean | null;\r\n itemsCount?: number | null;\r\n subItemsCount?: number | null;\r\n \r\n}\r\n\r\nexport interface FolderTree extends Folder {\r\n children?: Folder[] | null;\r\n path: string;\r\n}\r\n\r\nexport interface File<T> {\r\n ownerId?: T | null;\r\n id?: number | null;\r\n fileName: string;\r\n fileData: any;\r\n}\r\n\r\nexport interface Validated {\r\n isValid(): boolean;\r\n}\r\n\r\nexport class FileInfo implements Validated {\r\n file: any;\r\n valid: boolean;\r\n\r\n isValid(): boolean {\r\n return this.valid;\r\n }\r\n}\r\n\r\n\r\nexport interface NameValueItem<T> {\r\n name: string;\r\n value: T;\r\n shortName?: string | null;\r\n parentName?: string | null;\r\n parentValue?: T | null;\r\n header?: string | null;\r\n bag?: any | null;\r\n bagInfo?: string | null;\r\n disabled?: boolean | null;\r\n selected?: boolean | null;\r\n}\r\n\r\nexport interface Checkable {\r\n checked?: boolean | null;\r\n bag: any;\r\n getId(): any;\r\n}\r\n\r\n\r\nexport class ValueModel<T> {\r\n value: T;\r\n}\r\nexport class IDModel<T> {\r\n id: T;\r\n}\r\nexport class GroupModel<T> {\r\n ids: T[];\r\n}\r\n\r\nexport class DeleteModel<T> extends GroupModel<T> {\r\n mode: number;\r\n}\r\nexport interface DeleteResultModel<T> {\r\n items?: T[] | null,\r\n deleted?: number | null;\r\n total?: number | null;\r\n log?: string | null;\r\n}\r\n\r\nexport class RelationModel<T> {\r\n id: T;\r\n parentId: T;\r\n}\r\n\r\nexport class UpdateRelationsModel<T> {\r\n id: T;\r\n relatedIds: T[];\r\n}\r\n\r\nexport class QueryModel {\r\n any?: string | null;\r\n sortBy?: string | null;\r\n sortDescending?: boolean | null;\r\n first: number;\r\n count: number;\r\n}\r\n\r\nexport interface QueryResultModel<T> {\r\n interval?: string | null;\r\n items: T[];\r\n total?: number | null;\r\n}\r\n\r\nexport interface UpdateModel<T> {\r\n parentId?: T | null,\r\n ids: T[]\r\n}\r\n\r\nexport interface UpdateResultModel<T> {\r\nitems?: T[] | null;\r\nupdated?: number | null;\r\ntotal?: number | null;\r\nlog?: string | null;\r\n}\r\n\r\nexport interface AddModel<T> extends UpdateModel<T> {\r\n\r\n}\r\n\r\nexport interface AddResultModel<T> {\r\n items?: T[] | null;\r\n added?: number | null;\r\n total?: number | null;\r\n log?: string | null;\r\n}\r\n\r\nexport class ImportModel {\r\n origin: string;\r\n dataFile: any;\r\n jumpFirstLine?: boolean | null;\r\n map?: any | null;\r\n}\r\n\r\nexport interface EnableDisableModel {\r\n value: boolean;\r\n}\r\n\r\nexport interface SendToModel {\r\n sendToRecipients: string;\r\n sendToSubject: string;\r\n sendToText: string;\r\n}\r\n\r\nexport interface SearchBag {\r\n name: string;\r\n}\r\n\r\nexport interface Searchable {\r\n searchBag: SearchBag;\r\n}\r\n\r\nexport interface SearchFilterMetadata {\r\n total: number; // totale elementi\r\n count: number; // conteggio filtrati\r\n}\r\n\r\nexport class DateInterval {\r\n from: Date = null;\r\n to: Date = null;\r\n get fromAsDate() {\r\n return this.from\r\n ? new Date(\r\n this.from.getFullYear(),\r\n this.from.getMonth(),\r\n this.from.getDate(),\r\n 2,\r\n 0,\r\n 0\r\n )\r\n : null;\r\n }\r\n get toAsDate() {\r\n return this.to\r\n ? new Date(this.to.getFullYear(), this.to.getMonth(), this.to.getDate(), 2, 0, 0)\r\n : null;\r\n }\r\n\r\n constructor(from: Date = null, to: Date = null) {\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n /**\r\n * Clear interval\r\n */\r\n clear() {\r\n this.from = null,\r\n this.to = null\r\n }\r\n}\r\n\r\nexport interface LoginResult<T> extends ApiResult<boolean> {\r\n context: T;\r\n token: string;\r\n refreshToken?: string;\r\n}\r\n","import { Directive, HostListener, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { DateInterval } from '../definitions';\r\nimport { SystemUtils } from '../system';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { Subject, Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[dateIntervalChange]',\r\n standalone: true,\r\n})\r\nexport class DateIntervalChangeDirective implements OnInit, OnDestroy {\r\n @Input() dateIntervalChange: DateInterval = new DateInterval(null, null);\r\n @Input() end: boolean = false;\r\n private subject = new Subject();\r\n private subscription: Subscription;\r\n\r\n ngOnInit() {\r\n this.subscription = this.subject\r\n .pipe(debounceTime(100))\r\n .subscribe((e: KeyboardEvent) => { \r\n const value = (e.target as HTMLInputElement).value;\r\n SystemUtils.changeDateInterval(value, this.dateIntervalChange, this.end, e.key === ' ');\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n @HostListener('keyup', ['$event']) public onKeyup(event: KeyboardEvent): void {\r\n if (event.key === ' ') {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n this.subject.next(event);\r\n\r\n }\r\n}","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport { DateAdapter, MatDateFormats, MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport {\r\n Locale,\r\n getMonth,\r\n getYear,\r\n getDate,\r\n getDay,\r\n getDaysInMonth,\r\n formatISO,\r\n addYears,\r\n addMonths,\r\n addDays,\r\n isValid,\r\n isDate,\r\n format,\r\n parseISO,\r\n parse,\r\n} from 'date-fns';\r\nimport { TZDate } from \"@date-fns/tz\";\r\n\r\n/** Creates an array and fills it with values. */\r\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n const valuesArray = Array(length);\r\n for (let i = 0; i < length; i++) {\r\n valuesArray[i] = valueFunction(i);\r\n }\r\n return valuesArray;\r\n}\r\n\r\n// date-fns doesn't have a way to read/print month names or days of the week directly,\r\n// so we get them by formatting a date with a format that produces the desired month/day.\r\nconst MONTH_FORMATS = {\r\n long: 'LLLL',\r\n short: 'LLL',\r\n narrow: 'LLLLL',\r\n};\r\n\r\nconst DAY_OF_WEEK_FORMATS = {\r\n long: 'EEEE',\r\n short: 'EEE',\r\n narrow: 'EEEEE',\r\n};\r\n\r\nexport const MAT_DATE_FNS_FORMATS: MatDateFormats = {\r\n parse: {\r\n dateInput: 'P',\r\n },\r\n display: {\r\n dateInput: 'P',\r\n monthYearLabel: 'LLL uuuu',\r\n dateA11yLabel: 'PP',\r\n monthYearA11yLabel: 'LLLL uuuu',\r\n },\r\n};\r\n\r\n/** Adds date-fns support to Angular Material. */\r\n@Injectable()\r\nexport class DateFnsAdapter extends DateAdapter<Date, Locale> {\r\n constructor(@Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: null) {\r\n super();\r\n if (matDateLocale){\r\n this.setLocale( matDateLocale);\r\n }\r\n }\r\n\r\n getYear(date: Date): number {\r\n return getYear(date);\r\n }\r\n\r\n getMonth(date: Date): number {\r\n return getMonth(date);\r\n }\r\n\r\n getDate(date: Date): number {\r\n return getDate(date);\r\n }\r\n\r\n getDayOfWeek(date: Date): number {\r\n return getDay(date);\r\n }\r\n\r\n getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const pattern = MONTH_FORMATS[style];\r\n return range(12, i => this.format(new Date(2017, i, 1), pattern));\r\n }\r\n\r\n getDateNames(): string[] {\r\n const dtf =\r\n typeof Intl !== 'undefined'\r\n ? new Intl.DateTimeFormat(this.locale.code, {\r\n day: 'numeric',\r\n timeZone: 'utc',\r\n })\r\n : null;\r\n\r\n return range(31, i => {\r\n if (dtf) {\r\n // date-fns doesn't appear to support this functionality.\r\n // Fall back to `Intl` on supported browsers.\r\n const date = new Date();\r\n date.setUTCFullYear(2017, 0, i + 1);\r\n date.setUTCHours(0, 0, 0, 0);\r\n return dtf.format(date).replace(/[\\u200e\\u200f]/g, '');\r\n }\r\n\r\n return i + '';\r\n });\r\n }\r\n\r\n getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const pattern = DAY_OF_WEEK_FORMATS[style];\r\n return range(7, i => this.format(new Date(2017, 0, i + 1), pattern));\r\n }\r\n\r\n getYearName(date: Date): string {\r\n return this.format(date, 'y');\r\n }\r\n\r\n getFirstDayOfWeek(): number {\r\n return this.locale.options?.weekStartsOn ?? 0;\r\n }\r\n\r\n getNumDaysInMonth(date: Date): number {\r\n return getDaysInMonth(date);\r\n }\r\n\r\n clone(date: Date): Date {\r\n return new Date(date.getTime());\r\n }\r\n\r\n createDate(year: number, month: number, date: number): Date {\r\n\r\n // Check for invalid month and date (except upper bound on date which we have to check after\r\n // creating the Date).\r\n if (month < 0 || month > 11) {\r\n throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\r\n }\r\n\r\n if (date < 1) {\r\n throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\r\n }\r\n\r\n // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\r\n // To work around this we use `setFullYear` and `setHours` instead.\r\n let result = new Date();\r\n result.setFullYear(year, month, date);\r\n result.setHours(0, 0, 0, 0);\r\n result = new TZDate(result, \"UTC\");\r\n\r\n // Check that the date wasn't above the upper bound for the month, causing the month to overflow\r\n if (result.getMonth() != month) {\r\n throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n today(): Date {\r\n return new Date();\r\n }\r\n\r\n parse(value: any, parseFormat: string | string[]): Date | null {\r\n if (typeof value == 'string' && value.length > 0) {\r\n let iso8601Date = parseISO(value);\r\n if (this.isValid(iso8601Date)) {\r\n iso8601Date = new TZDate (iso8601Date, \"UTC\");\r\n return iso8601Date;\r\n }\r\n\r\n const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];\r\n\r\n if (!parseFormat.length) {\r\n throw Error('Formats array must not be empty.');\r\n }\r\n\r\n for (const currentFormat of formats) {\r\n let fromFormat = parse(value, currentFormat, new Date(), { locale: this.locale });\r\n if (this.isValid(fromFormat)) {\r\n fromFormat = new TZDate (fromFormat, \"UTC\");\r\n return fromFormat;\r\n }\r\n }\r\n\r\n return this.invalid();\r\n } else if (typeof value === 'number') {\r\n return new Date(value);\r\n } else if (value instanceof Date) {\r\n return this.clone(value);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n\r\n format(date: Date, displayFormat: string): string {\r\n if (!this.isValid(date)) {\r\n throw Error('DateFnsAdapter: Cannot format invalid date.');\r\n }\r\n\r\n return format(date, displayFormat, { locale: this.locale });\r\n }\r\n\r\n addCalendarYears(date: Date, years: number): Date {\r\n return addYears(date, years);\r\n }\r\n\r\n addCalendarMonths(date: Date, months: number): Date {\r\n return addMonths(date, months);\r\n }\r\n\r\n addCalendarDays(date: Date, days: number): Date {\r\n return addDays(date, days);\r\n }\r\n\r\n toIso8601(date: Date): string {\r\n return formatISO(date, { representation: 'date' });\r\n }\r\n\r\n /**\r\n * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\r\n * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\r\n * invalid date for all other values.\r\n */\r\n override deserialize(value: any): Date | null {\r\n if (typeof value === 'string') {\r\n if (!value) {\r\n return null;\r\n }\r\n const date = parseISO(value);\r\n if (this.isValid(date)) {\r\n return date;\r\n }\r\n }\r\n return super.deserialize(value);\r\n }\r\n\r\n isDateInstance(obj: any): boolean {\r\n return isDate(obj);\r\n }\r\n\r\n isValid(date: Date): boolean {\r\n return isValid(date);\r\n }\r\n\r\n invalid(): Date {\r\n return new Date(NaN);\r\n }\r\n}","import { AfterContentInit, Directive, ElementRef, inject } from '@angular/core';\r\n\r\n@Directive({\r\n selector: \"[autoFocus]\",\r\n standalone: true\r\n })\r\nexport class AutoFocusDirective implements AfterContentInit {\r\n\r\n private elementRef = inject(ElementRef);\r\n\r\n public ngAfterContentInit() {\r\n setTimeout(() => {\r\n this.elementRef.nativeElement.focus();\r\n }, 500);\r\n }\r\n }","import { SelectionModel } from \"@angular/cdk/collections\";\r\nimport { SystemUtils } from \"./system\";\r\nimport { EventEmitter } from '@angular/core';\r\n\r\nexport class SelectableModel<T, V> {\r\n\r\n changed: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n private _all: T[] = [];\r\n get all(): T[] {\r\n return this._all;\r\n }\r\n private _current: SelectionModel<T>;\r\n get current(): SelectionModel<T> {\r\n return this._current;\r\n }\r\n private _lookupFieldName: string;\r\n\r\n constructor(\r\n allowMultiSelect: boolean = true,\r\n lookupFieldName: string = \"id\"\r\n ) {\r\n this._current = new SelectionModel<T>(allowMultiSelect, []);\r\n this._all = [];\r\n this._lookupFieldName = lookupFieldName;\r\n }\r\n\r\n /**\r\n * Update the view of an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n updateCurrent(item: T, lookupValue: V) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p != -1) {\r\n this._current.toggle(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Select an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n toggle(item: T, lookupValue: V | null | undefined) {\r\n if (lookupValue) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p == -1) {\r\n this._all.push(item);\r\n } else {\r\n this._all.splice(p, 1);\r\n }\r\n this._current.toggle(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Select an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n select(item: T, lookupValue: V | null | undefined) {\r\n if (lookupValue) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p == -1) {\r\n this._all.push(item);\r\n } \r\n this._current.select(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Deselect an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n deselect(item: T, lookupValue: V | null | undefined) {\r\n if (lookupValue) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p != -1) {\r\n this._all.splice(p, 1);\r\n this._current.deselect(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Deselect all specified item lookup values\r\n * @param lookupValues : the values\r\n */\r\n deselectByValues(lookupValues: V[]) {\r\n if (!lookupValues || lookupValues.length === 0) return;\r\n lookupValues.forEach(n => {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n n\r\n );\r\n if (p != -1) {\r\n let item = this._all[p];\r\n this._all.splice(p, 1);\r\n this._current.deselect(item);\r\n this.changed.emit(item);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Clear current view\r\n * @param clearFunc : the function used to clear\r\n */\r\n clearCurrent(clearFunc: any) {\r\n this._current.selected.forEach(n => {\r\n clearFunc(n);\r\n });\r\n this._current.clear();\r\n this.changed.emit();\r\n }\r\n\r\n /**\r\n * Deselect all items\r\n */\r\n clear() {\r\n this._all = [];\r\n this._current.clear();\r\n this.changed.emit();\r\n }\r\n\r\n /**\r\n * Checks if an item is selected using its lookup value\r\n * @param lookupValue : the value\r\n * @returns : true if the value is selected\r\n */\r\n isSelected(lookupValue: V | null | undefined): boolean {\r\n return (lookupValue &&\r\n SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n ) != -1\r\n );\r\n }\r\n\r\n /**\r\n * Checks if a selection exists\r\n * @returns : true if at least one selection exists\r\n */\r\n hasValue(): boolean {\r\n return this._all.length > 0;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\nexport interface BroadcastMessageInfo {\r\n id: string;\r\n data?: any | null;\r\n}\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BroadcastService {\r\n private subject = new Subject<BroadcastMessageInfo>();\r\n\r\n /**\r\n * Send a message\r\n * @param id : the message id\r\n * @param data : the data to send\r\n * @param delay : the number of milliseconds to wait before sending the message\r\n */\r\n sendMessage(id: string, data: any = null, delay: number = 0) {\r\n setTimeout(() => {\r\n this.subject.next({ id: id, data: data } as BroadcastMessageInfo);\r\n }, delay);\r\n }\r\n\r\n /**\r\n * Get the next message as observable\r\n * @returns : the observable object\r\n */\r\n getMessage(): Observable<BroadcastMessageInfo> {\r\n return this.subject.asObservable();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EnvironmentService {\r\n \r\n private _appUri: string = '';\r\n get appUri() {\r\n return this._appUri;\r\n }\r\n set appUri(value: string) {\r\n this._appUri = value;\r\n }\r\n\r\n private _appServiceUri: string = '';\r\n get appServiceUri() {\r\n return this._appServiceUri;\r\n }\r\n set appServiceUri(value: string) {\r\n this._appServiceUri = value;\r\n }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\nimport { SystemUtils } from '../system';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ScreenService {\r\n public mq = signal<string>(\"\");\r\n \r\n get isTouchable(): boolean {\r\n return SystemUtils.isTouchable();\r\n }\r\n get isIEOrEdge(): boolean {\r\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\r\n }\r\n\r\n}\r\n","/**\r\n * Standard Broadcast Messages Manager\r\n * https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\r\n */\r\n\r\n\r\n/**\r\n * The message bag sent as a message\r\n */\r\nexport interface BroadcastChannelMessageBag<T> {\r\n messageId: string;\r\n sender: string,\r\n data?: T;\r\n}\r\n\r\n/**\r\n * Message subscription params\r\n */\r\nexport interface BroadcastChannelSubscriberInfo<T> {\r\n messageId: string,\r\n action: (bag: BroadcastChannelMessageBag<T>) => void;\r\n}\r\n\r\n\r\n/**\r\n * Web Standard Broadcast Messages Manager\r\n * https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\r\n */\r\nexport class BroadcastChannelManager {\r\n private channel?: BroadcastChannel | null = undefined;\r\n private subscriptions: BroadcastChannelSubscriberInfo<any>[] = [];\r\n\r\n /**\r\n * Get the current channel registration\r\n */\r\n public get currentBus(): string | null | undefined {\r\n return this.channel?.name;\r\n }\r\n\r\n constructor(bus: string) {\r\n this.channel = new BroadcastChannel(bus);\r\n\r\n this.channel.onmessageerror = (e: any) => {\r\n console.error('[BroadcastChannelManager] Errore di ricezione del messaggio', e);\r\n };\r\n\r\n this.channel.onmessage = (e: MessageEvent) => {\r\n const bag: BroadcastChannelMessageBag<any> | null | undefined = e.data as BroadcastChannelMessageBag<any>;\r\n if (bag) {\r\n const bagInfo: BroadcastChannelSubscriberInfo<any> | undefined = this.subscriptions.find(m => m.messageId === bag.messageId);\r\n bagInfo?.action(bag);\r\n }\r\n }\r\n }\r\n\r\n dispose(): void {\r\n this.subscriptions = [];\r\n this.channel?.close();\r\n this.channel = null;\r\n }\r\n\r\n /**\r\n * Send a message\r\n * @param bag The message, see also {@link BroadcastChannelMessageBag}\r\n * \r\n * @example \r\n * channel.sendMessage({ messageId: 'my-broadcast-message', sender: 'the-sender', data: value });\r\n */\r\n sendMessage<T>(bag: BroadcastChannelMessageBag<T>): void;\r\n /**\r\n * Send a message\r\n * @param bag The message, see also {@link BroadcastChannelMessageBag}\r\n * @param delay The number of milliseconds to wait before sending the message, see also {@link setTimeout}\r\n * \r\n * @example \r\n * channel.sendMessage({ messageId: 'my-broadcast-message', sender: 'the-sender', data: value }, 250);\r\n */\r\n sendMessage<T>(bag: BroadcastChannelMessageBag<T>, delay: number | null): void;\r\n /**\r\n * Send a message\r\n * @param messageId The message id\r\n * @param data The data to send\r\n * \r\n * @example \r\n * channel.sendMessage('my-broadcast-message', value);\r\n */\r\n sendMessage<T>(messageId: string, data: T | null): void;\r\n /**\r\n * Send a message\r\n * @param messageId The message id\r\n * @param data The data to send\r\n * @param delay The number of milliseconds to wait before sending the message\r\n * \r\n * @example \r\n * channel.sendMessage('my-broadcast-message', value, 250);\r\n */\r\n sendMessage<T>(messageId: string, data: T | null, delay: number | null): void;\r\n\r\n /**\r\n * overloads\r\n */\r\n sendMessage<T>(messageIdorBag: string | BroadcastChannelMessageBag<T>, dataOrDelay: T | number = null, delay: number | null = 0) {\r\n // console.warn({ messageIdorBag, dataOrDelay, delay });\r\n setTimeout(() => {\r\n if (typeof messageIdorBag === 'string') {\r\n this.channel?.postMessage({ messageId: messageIdorBag, data: dataOrDelay } as BroadcastChannelMessageBag<T>);\r\n } else {\r\n this.channel?.postMessage(messageIdorBag as BroadcastChannelMessageBag<T>);\r\n }\r\n }, (typeof dataOrDelay === 'number' ? dataOrDelay : delay) ?? 0);\r\n }\r\n\r\n\r\n /**\r\n * Subscribe to a message\r\n * @param args The subscription info, see also {@link BroadcastChannelSubscriberInfo}\r\n */\r\n subscribe<T>(args: BroadcastChannelSubscriberInfo<T>) {\r\n const i: number = this.subscriptions.findIndex(m => m.messageId === args.messageId);\r\n if (i === -1) {\r\n this.subscriptions.push(args)\r\n } else {\r\n this.subscriptions[i].action = args.action;\r\n }\r\n }\r\n\r\n /**\r\n * Remove a message subscription\r\n * @param messageId The message id\r\n */\r\n unsubscribe(messageId: string) {\r\n const i: number = this.subscriptions.findIndex(m => m.messageId === messageId);\r\n if (i !== -1) {\r\n this.subscriptions.splice(i, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Remove all the current subscriptions\r\n */\r\n unsubscribeAll() {\r\n this.subscriptions = [];\r\n }\r\n}\r\n","import { computed, inject, Injectable, OnDestroy, RendererFactory2, Signal, signal } from \"@angular/core\";\r\nimport { BroadcastChannelManager, BroadcastChannelMessageBag } from './broadcastChannelManager';\r\nimport { BehaviorSubject, Observable } from \"rxjs\";\r\n\r\n\r\n/**\r\n * Kind of themes: system default, light or dark\r\n */\r\nexport type ThemeType = 'auto' | 'light' | 'dark';\r\n\r\n/**\r\n * Available themes' schema\r\n */\r\ninterface ThemeInfoRecord {\r\n icon: string;\r\n name: string;\r\n next: ThemeType;\r\n tooltip: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ThemeService implements OnDestroy {\r\n\r\n // messaggi broadcast\r\n private readonly broadcastChannel = new BroadcastChannelManager('THEME-SERVICE');\r\n private readonly broadcastMessage: string = '$theme-changed';\r\n\r\n // per intercettare il cambio di tema a livello di sistema\r\n private readonly prefersColorSchemeMediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');\r\n\r\n /**\r\n * Theme changed event.\r\n * Notify the consuming component about the incoming theme change.\r\n * @example \r\n * // React to theme changes\r\n * this.themeService.themeChanged\r\n * .pipe(takeUntil(this.unsubscribe))\r\n * .subscribe((value: ThemeType) => {\r\n * // do the job done....\r\n * });\r\n */\r\n private themeChanged = new BehaviorSubject<ThemeType>('auto');\r\n // espone al consumatore un'observable\r\n public changed: Observable<ThemeType> = this.themeChanged.asObservable();\r\n\r\n private renderFactory2 = inject(RendererFactory2);\r\n private renderer = this.renderFactory2.createRenderer(null, null);\r\n\r\n /**\r\n * Current theme\r\n */\r\n private readonly theme = signal<ThemeType>(\"light\");\r\n /**\r\n * The current theme is \"System default\"\r\n */\r\n private readonly auto: Signal<boolean> = computed(() => this.theme() === 'auto');\r\n\r\n /**\r\n * Configuration schema about the icon, the text and the toggle() sequence\r\n */\r\n private readonly themeInfo: Record<ThemeType, ThemeInfoRecord> = {\r\n ['auto']: { icon: 'contrast', name: 'Impostazione predefinita di sistema', next: 'light', tooltip: 'Passa a tema chiaro', },\r\n ['light']: { icon: 'light_mode', name: 'Tema chiaro', next: 'dark', tooltip: 'Passa a tema scuro', },\r\n ['dark']: { icon: 'dark_mode', name: 'Tema scuro', next: 'auto', tooltip: 'Passa a tema predefinito di sistema', },\r\n };\r\n\r\n /**\r\n * Icon of the current theme (mat-icon code)\r\n */\r\n public readonly themeIcon: Signal<string> = computed(() => this.themeInfo[this.theme()].icon);\r\n /**\r\n * Current theme name\r\n */\r\n public readonly themeName: Signal<string> = computed(() => this.themeInfo[this.theme()].name);\r\n /**\r\n * Tooltip text on toggle \r\n */\r\n public readonly toggleTooltip: Signal<string> = computed(() => this.themeInfo[this.theme()].tooltip);\r\n\r\n constructor() {\r\n this.initialize();\r\n }\r\n\r\n /**\r\n * Initialize\r\n */\r\n initialize() {\r\n // React to current theme\r\n this.prefersColorSchemeMediaQueryList.onchange = (_: MediaQueryListEvent) => this.auto() ? this.setTheme() : null;\r\n\r\n // Support boradcast channel messaging\r\n this.broadcastChannel.subscribe<ThemeType>({\r\n messageId: this.broadcastMessage,\r\n action: (bag: BroadcastChannelMessageBag<ThemeType>) => {\r\n if (this.theme() !== bag.data) {\r\n this.setTheme(bag.data);\r\n }\r\n }\r\n });\r\n\r\n // Load current theme\r\n this.loadTheme();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.broadcastChannel.dispose();\r\n }\r\n\r\n /**\r\n * Get the current preferred theme\r\n */\r\n private getPreferredTheme(): ThemeType {\r\n let theme: ThemeType = localStorage.getItem(\"preferred-theme\") as ThemeType;\r\n if (!this.isTheme(theme)) {\r\n theme = 'auto';\r\n }\r\n return theme;\r\n }\r\n\r\n /**\r\n * Load theme\r\n */\r\n private loadTheme() {\r\n this.setTheme(this.getPreferredTheme());\r\n }\r\n\r\n\r\n /**\r\n * Check if a value string is a theme type\r\n * @param value : th string value\r\n * @returns true if the the value is a valid theme type\r\n */\r\n private isTheme(value: string): value is ThemeType {\r\n return ['auto', 'light', 'dark'].includes(value);\r\n }\r\n\r\n\r\n /**\r\n * Set the new theme\r\n * @param theme the new theme\r\n */\r\n private setTheme(theme: ThemeType = 'auto') {\r\n this.renderer.removeClass(document.body, 'light');\r\n this.renderer.removeClass(document.body, 'dark');\r\n this.theme.set(theme);\r\n localStorage.setItem(\"preferred-theme\", this.theme());\r\n this.renderer.addClass(document.body, this.auto() ? (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\") : theme);\r\n // Notify that current theme has changed\r\n this.themeChanged.next(this.getTheme());\r\n this.broadcastChannel.sendMessage(this.broadcastMessage, this.theme());\r\n }\r\n\r\n /**\r\n * Toggle theme\r\n */\r\n public toggleTheme(): void {\r\n this.setTheme(this.themeInfo[this.theme()].next);\r\n }\r\n\r\n /**\r\n * Get current real theme: light or dark\r\n */\r\n public getTheme(): ThemeType {\r\n return (\r\n this.auto()\r\n ? (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\")\r\n : this.getPreferredTheme());\r\n }\r\n}","import { NgModule } from '@angular/core';\r\nimport { ReplacePipe } from './pipes/replace.pipe';\r\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\r\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\r\nimport { SearchCallbackPipe } from './pipes/search-callback.pipe';\r\nimport { SearchFilterPipe } from './pipes/search-filter.pipe';\r\nimport { FormatPipe } from './pipes/format.pipe';\r\nimport { CopyClipboardDirective } from './directives/copyClipboardDirective';\r\nimport { EmailsValidatorDirective, EqualsValidatorDirective, FileSizeValidatorDirective, GuidValidatorDirective, NotFutureValidatorDirective, PasswordValidatorDirective, SqlDateValidatorDirective, UrlValidatorDirective, ValidIfDirective, ValidatorDirective } from './directives/validators';\r\nimport { DateIntervalChangeDirective } from './directives/changeDateIntervalDirective';\r\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport { DateFnsAdapter, MAT_DATE_FNS_FORMATS } from './dateFnsAdapter';\r\nimport { AutoFocusDirective } from './directives/autoFocusDirective';\r\n\r\n@NgModule({\r\n providers: [\r\n {\r\n provide: DateAdapter,\r\n useClass: DateFnsAdapter,\r\n deps: [MAT_DATE_LOCALE],\r\n },\r\n { provide: MAT_DATE_FORMATS, useValue: MAT_DATE_FNS_FORMATS }\r\n ],\r\n})\r\nexport class ArsDateFnsModule { }\r\n\r\n@NgModule({\r\n imports: [\r\n FileSizeValidatorDirective,\r\n ValidIfDirective,\r\n ValidatorDirective,\r\n EqualsValidatorDirective,\r\n GuidValidatorDirective,\r\n EmailsValidatorDirective,\r\n UrlValidatorDirective,\r\n NotFutureValidatorDirective,\r\n PasswordValidatorDirective,\r\n DateIntervalChangeDirective,\r\n SqlDateValidatorDirective,\r\n SearchFilterPipe,\r\n SearchCallbackPipe,\r\n SafeHtmlPipe,\r\n SafeUrlPipe,\r\n ReplacePipe,\r\n FormatPipe,\r\n CopyClipboardDirective,\r\n AutoFocusDirective\r\n ],\r\n exports: [\r\n FileSizeValidatorDirective,\r\n ValidIfDirective,\r\n ValidatorDirective,\r\n EqualsValidatorDirective,\r\n GuidValidatorDirective,\r\n EmailsValidatorDirective,\r\n UrlValidatorDirective,\r\n NotFutureValidatorDirective,\r\n PasswordValidatorDirective,\r\n DateIntervalChangeDirective,\r\n SqlDateValidatorDirective,\r\n SearchFilterPipe,\r\n SearchCallbackPipe,\r\n SafeHtmlPipe,\r\n SafeUrlPipe,\r\n ReplacePipe,\r\n FormatPipe,\r\n CopyClipboardDirective,\r\n AutoFocusDirective\r\n ],\r\n providers: [\r\n SearchFilterPipe,\r\n SearchCallbackPipe,\r\n SafeHtmlPipe,\r\n SafeUrlPipe,\r\n ReplacePipe,\r\n FormatPipe\r\n ]\r\n})\r\nexport class ArsCoreModule { }\r\n\r\n\r\nexport * from './system';\r\nexport * from './definitions';\r\nexport * from './dateFnsAdapter';\r\nexport * from './selectable';\r\nexport * from './services/broadcast.service';\r\nexport * from './services/environment.service';\r\nexport * from './services/screen.service';\r\nexport * from './services/theme.service';\r\n\r\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './core.module';\r\nexport * from './directives/changeDateIntervalDirective';\r\nexport * from './directives/copyClipboardDirective';\r\nexport * from './directives/autoFocusDirective';\r\nexport * from './directives/validators';\r\nexport * from './pipes/search-filter.pipe';\r\nexport * from './pipes/search-callback.pipe';\r\nexport * from './pipes/safe-url.pipe';\r\nexport * from './pipes/safe-html.pipe';\r\nexport * from './pipes/replace.pipe';\r\nexport * from './pipes/format.pipe';\r\nexport * from './system';\r\nexport * from './definitions';\r\nexport * from './selectable';\r\nexport * from './services/broadcast.service';\r\nexport * from './services/broadcastChannelManager';\r\nexport * from './services/environment.service';\r\nexport * from './services/screen.service';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-core.mjs","sources":["../../../projects/ars-utils/core/pipes/replace.pipe.ts","../../../projects/ars-utils/core/pipes/safe-html.pipe.ts","../../../projects/ars-utils/core/pipes/safe-url.pipe.ts","../../../projects/ars-utils/core/pipes/search-callback.pipe.ts","../../../projects/ars-utils/core/pipes/search-filter.pipe.ts","../../../projects/ars-utils/core/system.ts","../../../projects/ars-utils/core/pipes/format.pipe.ts","../../../projects/ars-utils/core/directives/copyClipboardDirective.ts","../../../projects/ars-utils/core/directives/validators.ts","../../../projects/ars-utils/core/definitions.ts","../../../projects/ars-utils/core/directives/changeDateIntervalDirective.ts","../../../projects/ars-utils/core/dateFnsAdapter.ts","../../../projects/ars-utils/core/directives/autoFocusDirective.ts","../../../projects/ars-utils/core/selectable.ts","../../../projects/ars-utils/core/services/broadcast.service.ts","../../../projects/ars-utils/core/services/environment.service.ts","../../../projects/ars-utils/core/services/screen.service.ts","../../../projects/ars-utils/core/services/broadcastChannelManager.ts","../../../projects/ars-utils/core/services/theme.service.ts","../../../projects/ars-utils/core/core.module.ts","../../../projects/ars-utils/core/public_api.ts","../../../projects/ars-utils/core/arsedizioni-ars-utils-core.ts"],"sourcesContent":["import { Injectable, Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'replace',\r\n standalone: true\r\n})\r\nexport class ReplacePipe implements PipeTransform {\r\n\r\n private sanitizer = inject(DomSanitizer);\r\n \r\n transform(value: string | null | undefined, regexValue: string, replaceValue: string): SafeHtml {\r\n if (!value) return null;\r\n if (regexValue === '\\n' && !replaceValue) {\r\n replaceValue = '<br>';\r\n }\r\n return this.sanitizer.bypassSecurityTrustHtml(value.replace(new RegExp(regexValue, 'g'), replaceValue));\r\n }\r\n}\r\n","import { Pipe, Injectable, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'safeHtml',\r\n standalone: true\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n transform(value: string | null | undefined): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustHtml(value ?? '');\r\n }\r\n}\r\n","import { Pipe, Injectable, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'safeUrl',\r\n standalone: true\r\n})\r\nexport class SafeUrlPipe implements PipeTransform {\r\n private sanitizer = inject(DomSanitizer);\r\n\r\n transform(value: string | null | undefined): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(value ?? '');\r\n }\r\n}\r\n","import { PipeTransform, Pipe } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'callback',\r\n pure: false,\r\n standalone: true\r\n})\r\nexport class SearchCallbackPipe implements PipeTransform {\r\n transform(items: any[] | null | undefined, callback: (item: any) => boolean): any {\r\n if (!items || !callback) {\r\n return items;\r\n }\r\n return items.filter(item => callback(item));\r\n }\r\n}\r\n","import { Pipe, PipeTransform, Injectable } from '@angular/core';\r\nimport { SearchFilterMetadata } from '../definitions';\r\n\r\n// ---------------------------------------------------------------------------------\r\n// 2023.0921 aggiunto un campo opzionale di tipo SearchFilterMetadata per i conteggi\r\n//\r\n// - nel chiamante:\r\n// let items: Searchable[] = [...];\r\n// let myFilterText: string = 'testo del filtro';\r\n// const myFilterMetadata: SearchFilterMetadata = { total: 0, count: 0 };\r\n// \r\n// <div *ngFor=\"let item of items | search:myFilterText:myFilterMetadata\">\r\n// <div>Totale: {{ myFilterMetadata.total }}, Filtrati: {{ myFilterMetadata.count }}</div>\r\n// ---------------------------------------------------------------------------------\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'search',\r\n standalone: true\r\n})\r\nexport class SearchFilterPipe implements PipeTransform {\r\n transform(items: any[] | null | undefined, value: string | null | undefined, metadata?: SearchFilterMetadata): any {\r\n\r\n // se non vengono passati i metadati ne crea una copia locale per evitare gli if\r\n metadata = metadata || { total: 0, count: 0 };\r\n\r\n if (!items || !value) {\r\n return items;\r\n }\r\n let result = items.filter(item => {\r\n if (item) {\r\n if (item.searchBag)\r\n return item.searchBag.name\r\n .toLowerCase()\r\n .indexOf(value.toLowerCase()) !== -1;\r\n else return item.toLowerCase().indexOf(value.toLowerCase()) !== -1;\r\n }\r\n return null;\r\n });\r\n\r\n // aggiorna i conteggi\r\n metadata.total = items.length;\r\n metadata.count = result.length;\r\n\r\n return result;\r\n }\r\n}\r\n","import { HttpParams } from \"@angular/common/http\";\r\nimport { DateInterval } from './definitions';\r\nimport { format, parse, parseISO, setHours } from 'date-fns';\r\nimport { it } from 'date-fns/locale';\r\nimport { fromZonedTime } from 'date-fns-tz';\r\n\r\nexport interface INode {\r\n id: string;\r\n name?: string | null;\r\n count?: number | null;\r\n children?: INode[] | null;\r\n parent?: INode | null;\r\n bag?: any | null\r\n}\r\n\r\n\r\nexport enum DateFormat {\r\n Short = 1, // dd/mm/yyyy\r\n Long = 2, // d mmmm yyyy\r\n LongWithShortMonth = 3, // d mmm yyyy\r\n LongWithWeekDay = 4, // wwww, d mmmm yyyy\r\n LongWithShortWeekDay = 5, // www, d mmmm yyyy\r\n MonthAndYear = 6, // mmm yyyy\r\n LongMonthAndYear = 7, // mmmm yyyy\r\n WeekDay = 8, // www d\r\n LongWeekDay = 9, // wwww d\r\n DayAndMonth = 10, // d mmmm\r\n ShortUS = 11, // mm/dd/yyyy\r\n ShortISO8601 = 12 // yyyy-mm-dd\r\n}\r\n\r\nexport class SystemUtils {\r\n /**\r\n * Array find by key\r\n * @param array : the array to scan\r\n * @param key : key name\r\n * @param value : the value to search for\r\n * @returns : the property value or null\r\n */\r\n static arrayFindByKey<T>(array: T[] | null | undefined, key: string, value: any): T | null {\r\n if (!array) return null;\r\n for (const item of array) {\r\n if ((item as any)[key] === value) {\r\n return item;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Array find index by key\r\n * @param array : the array to scan\r\n * @param key : the key name\r\n * @param value : the value to search for\r\n * @returns : the array index or -1 if not found\r\n */\r\n static arrayFindIndexByKey<T>(array: T[] | null | undefined, key: string, value: any): number {\r\n if (!array) return -1;\r\n for (let i = 0; i < array.length; i++) {\r\n if ((array[i] as any)[key] === value) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * Get a value from and array made of name|value items\r\n * @param array : the array to scan\r\n * @param value : the value to search for\r\n * @returns : the property value or null if not found\r\n */\r\n static arrayGetValue<T>(array: T[] | null | undefined, value: any): any {\r\n if (!array) return null;\r\n for (var i = 0; i < array.length; i++) {\r\n const item = (array[i] as any);\r\n if (item.value === value) {\r\n return item.name || item.id;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Convert items to nodes into a tree structure\r\n * @param items : list of nodes\r\n * @param parent : parent node\r\n * @returns : an array of INode objects\r\n */\r\n static arrayToNodes(items: INode[], parent: INode = null): INode[] {\r\n const nodes: INode[] = [];\r\n items.forEach((n) => {\r\n const node: INode = {\r\n id: n.id.toString(),\r\n name: n.name,\r\n count: n.count ? n.count : 0,\r\n children: null,\r\n parent,\r\n bag: n,\r\n };\r\n nodes.push(node);\r\n node.children =\r\n n.children && n.children.length > 0\r\n ? this.arrayToNodes(n.children, node)\r\n : [];\r\n });\r\n return nodes;\r\n }\r\n\r\n /**\r\n * Used to copare items during an array of objects sorting\r\n * @param key : the property name to sort for\r\n * @param order : the order 'asc' or 'desc'\r\n * @returns : 0 if equals, 1 if bigger, -1 if lower\r\n */\r\n static arraySortCompare(key: string, order: string = \"asc\") {\r\n const result = function innerSort(a: any, b: any) {\r\n if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {\r\n // property doesn't exist on either object\r\n return 0;\r\n }\r\n const varA = typeof a[key] === \"string\" ? a[key].toUpperCase() : a[key];\r\n const varB = typeof b[key] === \"string\" ? b[key].toUpperCase() : b[key];\r\n let comparison = 0;\r\n if (varA > varB) comparison = 1;\r\n else if (varA < varB) comparison = -1;\r\n return order === \"desc\" ? comparison * -1 : comparison;\r\n };\r\n return result;\r\n }\r\n\r\n /**\r\n * Format weight\r\n * @param gr : grams\r\n * @returns : the formatted string\r\n */\r\n static formatWeight(gr: number): string {\r\n if (gr > 1000000) return (gr / 1000000).toFixed(2) + \" t\";\r\n else if (gr > 100000) return (gr / 100000).toFixed(2) + \" q\";\r\n else if (gr > 1000) return (gr / 1000).toFixed(2) + \" kg\";\r\n else return gr + \" gr\";\r\n }\r\n\r\n /**\r\n * Format file size\r\n * @param bytes : number of bytes\r\n * @returns : the formatted string\r\n */\r\n static formatFileSize(bytes: number): string {\r\n if (bytes > 1024000) return (bytes / 1024000).toFixed(1) + \" MB\";\r\n if (bytes > 1024) return (bytes / 1024).toFixed(1) + \" Kb\";\r\n return bytes + \" byte\";\r\n }\r\n\r\n /**\r\n * Compare two string\r\n * @param a : string a\r\n * @param b : string b\r\n * @returns : 0 if equals, 1 if bigger, -1 if lower\r\n */\r\n static compareString(a: string, b: string): number {\r\n if ((a ?? \"\").toLowerCase() > (b ?? \"\").toLowerCase()) return 1;\r\n if ((a ?? \"\").toLowerCase() < (b ?? \"\").toLowerCase()) return -1;\r\n return 0;\r\n }\r\n\r\n /**\r\n * Capitalize a string\r\n * @param s : the string to capitalize\r\n * @returns : the capitalized string \r\n */\r\n static capitalize(s: string): string {\r\n if (!s) return null;\r\n let b = \"\";\r\n let cap = true;\r\n for (const char of s) {\r\n if (char === \" \") {\r\n b += char;\r\n cap = true;\r\n } else if (cap) {\r\n b += char.toUpperCase();\r\n cap = false;\r\n } else {\r\n b += char.toLowerCase();\r\n }\r\n }\r\n return b;\r\n }\r\n\r\n /**\r\n * Truncate a string\r\n * @param s : the string to truncate\r\n * @param max : the max number of chars\r\n * @returns : the truncated string\r\n */\r\n static truncate(s: string, max: number = 500): string {\r\n if (!s) return null;\r\n if (s.length < max) return s;\r\n let i = max - 1;\r\n while (i > 0) {\r\n if (s[i] === ' ') return s.slice(0, i);\r\n i--;\r\n }\r\n return s;\r\n }\r\n\r\n /**\r\n * Join a list of strings\r\n * @param items : the list of strings\r\n * @param sep : the separator string\r\n * @param max : the maximum resulting string\r\n * @returns : the joined string\r\n */\r\n static join(items: string[], sep: string = \" \", max: number = 350): string {\r\n if (!items || items.length === 0) return null;\r\n if (items.length > 1) {\r\n let l = 0;\r\n let s = \"\"\r\n while (s.length < max && items.length > l) {\r\n if (l > 0) {\r\n s += sep;\r\n }\r\n s += items[l++];\r\n }\r\n if (items.length > l) {\r\n s += \"...\";\r\n }\r\n return s;\r\n }\r\n return items[0];\r\n }\r\n\r\n /**\r\n * Replace stuff in text html\r\n * @param s : the string to process\r\n * @returns : the replaced string \r\n */\r\n static replaceAsHtml(s: string): string {\r\n const regex = /https?:\\/\\/.*[^\\s]/ig\r\n const m = regex.exec(s);\r\n if (m && m.length > 0) {\r\n let v = null;\r\n for (let i = 0; i < m.length; i++) {\r\n v = m[i];\r\n s = s.replace(v, '<a href=\"' + v + '\" target=\"_blank\">' + v + '</a>');\r\n }\r\n }\r\n return s;\r\n }\r\n\r\n /**\r\n * Compare two names\r\n * @param a : name a\r\n * @param b : name b\r\n * @returns : true if a equals b\r\n */\r\n static compareNames(a: string, b: string): boolean {\r\n if (a) a = a.trim();\r\n if (b) b = b.trim();\r\n if (a && b && a.length !== b.length) return false;\r\n if (this.compareString(a, b) === 0) return true;\r\n const p1 = a.split(\" \");\r\n const p2 = b.split(\" \");\r\n if (p1.length !== p2.length) return false;\r\n let matches = p1.length;\r\n for (const s1 of p1) {\r\n for (const s2 of p2) {\r\n if (this.compareString(s1, s2) === 0) {\r\n matches--;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return matches === 0;\r\n }\r\n\r\n /**\r\n * Cipher a text\r\n * @param text : the text\r\n * @param key : the key\r\n * @param reverse : true to decode, false to encode\r\n * @returns :the ciphered text\r\n */\r\n static cipher(text: string, key: string, reverse: boolean = false): string {\r\n // Surrogate pair limit\r\n var bound = 0x10000;\r\n\r\n // Create string from character codes\r\n return String.fromCharCode.apply(\r\n null,\r\n // Turn string to character codes\r\n text.split(\"\").map(function (v: any, i: number) {\r\n // Get rotation from key\r\n var rotation = key.charCodeAt(i % key.length);\r\n\r\n // Are we decrypting?\r\n if (reverse) rotation = -rotation;\r\n\r\n // Return current character code + rotation\r\n return (v.charCodeAt() + rotation + bound) % bound;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Clone an object using JSON\r\n * @param obj : the oblect to clone\r\n * @returns : a new object\r\n */\r\n static clone(obj: any): any {\r\n if (!obj) return null;\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n\r\n /**\r\n * Clone an object using deep cloning\r\n * @param obj : the oblect to clone\r\n * @returns : a new object\r\n */\r\n static deepClone<T>(obj: any, dest: T = null): T {\r\n const cloneObj = dest ? dest : (obj.constructor() as any);\r\n const attributes = Object.keys(obj);\r\n for (const attribute of attributes) {\r\n const property = obj[attribute];\r\n if (typeof property === \"object\" && property != null) {\r\n cloneObj[attribute] = this.deepClone(property);\r\n } else {\r\n cloneObj[attribute] = property;\r\n }\r\n }\r\n return cloneObj;\r\n }\r\n\r\n\r\n /**\r\n * Check if a string is a valid UUID\r\n * @param value : the value to parse\r\n * @returns : true if is a valid UUID\r\n */\r\n static parseUUID(value: string): boolean {\r\n const regex = /^({|()?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}(}|))?$/;\r\n return regex.test(value);\r\n }\r\n\r\n /**\r\n * Parse and ensure that UUID is not empty\r\n * @param value : the value to parse\r\n * @returns : true if valid and not empty\r\n */\r\n static parseUUIDNotEmpty(value: string): boolean {\r\n const regex = /^({|()?0{8}-(0{4}-){3}0{12}(}|))?$/;\r\n return this.parseUUID(value) && !regex.test(value);\r\n }\r\n\r\n /**\r\n * Return an empty UUID\r\n * @returns : the empty UUID\r\n */\r\n static emptyUUID(): string { return \"00000000-0000-0000-0000-000000000000\" };\r\n\r\n /**\r\n * Create a new UUID\r\n * @returns : the string UUID\r\n */\r\n static generateUUID(): string {\r\n const regex = /[xy]/g;\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(regex, function (c) {\r\n var r = (Math.random() * 16) | 0,\r\n v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n /**\r\n * Parse a text and return true if is a valid email or null\r\n * @param value : email\r\n * @returns : true if the email is valid or empty\r\n */\r\n static parseEmail(value: string): boolean {\r\n if (!value) return true;\r\n const regex = /(?:[a-z0-9+!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\\/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])/gi\r\n return regex.test(value.trim().toLowerCase());\r\n }\r\n\r\n /**\r\n * Parse a text and return true if is a valid url or null\r\n * @param value : the url to parse\r\n * @returns : true if the url is valid or empty\r\n */\r\n static parseUrl(value: string): boolean {\r\n if (!value) return true;\r\n const regex = new RegExp(\r\n \"(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?\"\r\n );\r\n return regex.test(value.trim().toLowerCase());\r\n }\r\n\r\n /**\r\n * Get date parts from a string value\r\n * @param value : the string to parse\r\n * @returns : an array of numbers with year, month, day\r\n */\r\n static getDateParts(value: string): number[] {\r\n if (!value) return null;\r\n let parts: number[] = [];\r\n if (value.indexOf(\"-\") !== -1) {\r\n const p = value.split(\"-\");\r\n if (p.length !== 3) return null;\r\n parts = [parseInt(p[0]), parseInt(p[1]) - 1, parseInt(p[2])];\r\n } else if (value.indexOf(\"/\") !== -1) {\r\n const p = value.split(\"/\");\r\n if (p.length !== 3) return null;\r\n parts = [parseInt(p[2]), parseInt(p[1]) - 1, parseInt(p[0])];\r\n }\r\n return parts;\r\n }\r\n\r\n /**\r\n * Parse a date\r\n * @param value : the value to check\r\n * @param locale : the locale to use\r\n * @returns : a valid Date object or null\r\n */\r\n static parseDate(value: string | Date, locale: any = it): Date {\r\n // No value at all\r\n if (!value) return null;\r\n // A Date value\r\n if (value instanceof Date && value.getTime()) return value;\r\n // Parse known formats using date-fns\r\n let d = parseISO(value as string);\r\n if (d && d.getTime() && d.getFullYear() > 1750) return d;\r\n d = parse(value as string, 'dd/MM/yyyy', new Date(), { locale: locale });\r\n if (d && d.getTime() && d.getFullYear() > 1750) return d;\r\n d = parse(value as string, 'yyyy-MM-dd', new Date(), { locale: locale });\r\n if (d && d.getTime() && d.getFullYear() > 1750) return d;\r\n // Parse values manually\r\n let parts = this.getDateParts(value as string);\r\n if (parts[0] < 100) parts[0] += 2000;\r\n if (isNaN(parts[0]) || parts[0] < 0 || parts[0] < 1750) return null;\r\n if (isNaN(parts[1]) || parts[1] < 0) return null;\r\n if (isNaN(parts[2]) || parts[2] < 0) return null;\r\n if (parts[1] > 11) return null;\r\n if (parts[1] === 1 && parts[2] > 29) return null;\r\n else if (parts[1] !== 1 && parts[2] > 31) return null;\r\n return new Date(parts[0], parts[1], parts[2], 2);\r\n }\r\n\r\n /**\r\n * Format a date\r\n * @param value : the date or string to format\r\n * @param fmt : the DateFormat to use or the string pattern\r\n * @param locale : the locale to use (default is IT)\r\n * @returns : the formatted string\r\n */\r\n static formatDate(\r\n value: Date | string,\r\n fmt: DateFormat | string = DateFormat.Short,\r\n locale: any = it): string {\r\n // No value at all\r\n if (!value) return null;\r\n // A string\r\n if (typeof value === 'string' || value instanceof String)\r\n value = this.parseDate(value as string);\r\n // Not a date \r\n if (!(value instanceof Date && value.getTime()))\r\n return null;\r\n // Format\r\n switch (fmt) {\r\n case DateFormat.Short: return format(value, \"dd/MM/yyyy\", { locale: locale });\r\n case DateFormat.Long: return format(value, \"d MMMM yyyy\", { locale: locale });\r\n case DateFormat.LongWithShortMonth: return format(value, \"d MMM yyyy\", { locale: locale });\r\n case DateFormat.LongWithWeekDay: return format(value, \"EEEE, d MMMM yyyy\", { locale: locale });\r\n case DateFormat.LongWithShortWeekDay: return format(value, \"EEE, d MMMM yyyy\", { locale: locale });\r\n case DateFormat.MonthAndYear: return format(value, \"MMM yyyy\", { locale: locale });\r\n case DateFormat.LongMonthAndYear: return format(value, \"MMMM yyyy\", { locale: locale });\r\n case DateFormat.WeekDay: return format(value, \"EEE, d\", { locale: locale });\r\n case DateFormat.LongWeekDay: return format(value, \"EEEE, d\", { locale: locale });\r\n case DateFormat.DayAndMonth: return format(value, \"d MMMM\", { locale: locale });\r\n case DateFormat.ShortUS: return format(value, \"MM/dd/yyyy\", { locale: locale });\r\n case DateFormat.ShortISO8601: return format(value, \"yyyy-MM-dd\", { locale: locale });\r\n default:\r\n return format(value, fmt, { locale: locale });\r\n }\r\n }\r\n\r\n /**\r\n * Return an italian local date\r\n * @param value : the date\r\n * @returns : the new date\r\n */\r\n static toLocalDate(value: Date | string): Date {\r\n // No value at all\r\n if (!value) return null;\r\n // A string\r\n if (typeof value === 'string' || value instanceof String)\r\n value = this.parseDate(value as string);\r\n // Not a date\r\n if (!(value instanceof Date && value.getTime())) return null;\r\n // Update date\r\n return setHours(value, 2);\r\n\r\n }\r\n\r\n /**\r\n * Update a DateInterval object according to a string\r\n * @param value : string value\r\n * @param interval : DateInterval value to update\r\n * @param end : true if must be updated the first or the end value \r\n * @param copy : copy the same value (works only if not end element)\r\n */\r\n static changeDateInterval(value: string, interval: DateInterval, end: boolean = false, copy: boolean = false) {\r\n if (value) {\r\n let year = -1;\r\n if (value.length === 4 && (year = parseInt(value)) > 1750) {\r\n if (!end) {\r\n interval.from = fromZonedTime(new Date(year, 0, 1), 'UTC');\r\n interval.to = fromZonedTime(new Date(year, 11, 31), 'UTC');\r\n } else\r\n interval.to = new Date(year, 11, 31);\r\n } else {\r\n let parts = this.getDateParts(value);\r\n if (!parts || isNaN(parts[0]) || parts[0] < 0 || parts[0] < 1750) return;\r\n const d = fromZonedTime(new Date(parts[0], parts[1], parts[2]), 'UTC');\r\n if (end)\r\n interval.to = d;\r\n else if (copy) {\r\n interval.from = d;\r\n interval.to = d;\r\n } else\r\n interval.from = d;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Encode url\r\n * @param value : the value to encode\r\n * @returns : the url encoded string\r\n */\r\n static urlEncode(value: string): string {\r\n return encodeURIComponent(value);\r\n }\r\n\r\n /**\r\n * Decode url\r\n * @param value : the url to decode\r\n * @returns : the decode url string\r\n */\r\n static urlDecode(value: string): string {\r\n const regex = /\\+/g;\r\n return decodeURIComponent((value + \"\").replace(regex, \"%20\"));\r\n }\r\n\r\n /**\r\n * Get a querystring parameter value\r\n * @param name : the parameter name\r\n * @returns : the string value\r\n */\r\n static getQueryStringValueByName(name: string): string {\r\n if (!this.isBrowser()) return null;\r\n const url = window.location.href;\r\n if (url.includes(\"?\")) {\r\n const httpParams = new HttpParams({ fromString: url.split(\"?\")[1] });\r\n const v = decodeURIComponent(httpParams.get(name));\r\n if (v !== \"null\") return v;\r\n else return null;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Generate a password\r\n * @returns : the password string\r\n */\r\n static generatePassword(): string {\r\n const random = \"$\" + Math.random().toString(36).slice(-7);\r\n let password = \"\";\r\n let hasUpperCase = false;\r\n for (const rnd of random) {\r\n if (!hasUpperCase && \"abcdefghjilmnopqrstuvywxz\".includes(rnd)) {\r\n password += rnd.toUpperCase();\r\n hasUpperCase = true;\r\n } else {\r\n password += rnd;\r\n }\r\n }\r\n if (!hasUpperCase)\r\n password = password.substring(0, 7) + \"M\";\r\n return password;\r\n }\r\n\r\n /**\r\n * Check if current browser supports touch\r\n * @returns : true if the display is touchable\r\n */\r\n static isTouchable(): boolean {\r\n return (\r\n this.isBrowser() && (\r\n \"ontouchstart\" in window ||\r\n navigator.maxTouchPoints > 0)\r\n );\r\n }\r\n\r\n /**\r\n * This check will prevent 'window' logic to be executed\r\n * while executing the server rendering\r\n * @returns : true if using the browser\r\n */\r\n static isBrowser(): boolean {\r\n return typeof (window) !== 'undefined';\r\n }\r\n\r\n /**\r\n * Convert folders in a tree of Node object.\r\n * @param folders : the subfolders group or null to root\r\n * @returns : a node list\r\n */\r\n static toNodes(folders: INode[]): INode[] {\r\n return this._toNodes(folders, undefined);\r\n }\r\n\r\n /**\r\n * Convert folders in a tree of Node object.\r\n * @param folders : the children group or null to root\r\n * @param parent : the parent node\r\n * @returns : a node list \r\n */\r\n private static _toNodes(folders: INode[], parent: INode | undefined): INode[] {\r\n const nodes: INode[] = [];\r\n folders.forEach((n: INode) => {\r\n const node: INode = {\r\n id: n.id,\r\n name: n.name,\r\n count: n.count,\r\n parent: parent,\r\n children: undefined,\r\n bag: n,\r\n };\r\n node.children =\r\n n.children && n.children.length > 0\r\n ? this._toNodes(n.children, node)\r\n : [];\r\n nodes.push(node);\r\n });\r\n return nodes;\r\n }\r\n}\r\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { format } from 'date-fns';\r\nimport { it } from 'date-fns/locale';\r\nimport { SystemUtils } from '../system';\r\n\r\n\r\n@Injectable()\r\n@Pipe({\r\n name: 'format',\r\n standalone: true\r\n})\r\nexport class FormatPipe implements PipeTransform {\r\n\r\n\r\n transform(\r\n value: any | null | undefined,\r\n type: string = 'date',\r\n pattern: string = \"dd/MM/yyyy\"): string | null {\r\n if (!value) return null;\r\n switch (type) {\r\n case 'D':\r\n case 'date':\r\n const d = SystemUtils.parseDate(value, it);\r\n if (d) return format(d, pattern, { locale: it });\r\n break;\r\n case 'C':\r\n case 'currency':\r\n if (value > 0) return new Intl.NumberFormat('it-IT', { style: 'currency', currency: 'EUR' }).format(value);\r\n break;\r\n case 'N':\r\n case 'number':\r\n if (value > 0) return new Intl.NumberFormat('it-IT', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 2 }).format(value);\r\n break;\r\n case 'N0':\r\n case 'number0':\r\n if (value > 0) return new Intl.NumberFormat('it-IT', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(value);\r\n break;\r\n case 'P':\r\n case 'percentage':\r\n if (value> 0) return new Intl.NumberFormat('it-IT', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(value);\r\n break;\r\n }\r\n return null;\r\n }\r\n}\r\n","import {\r\n Directive,\r\n EventEmitter,\r\n HostListener,\r\n Injectable,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport { SystemUtils } from '../system';\r\n\r\n\r\n@Injectable()\r\n@Directive({\r\n selector: '[copyClipboard]',\r\n standalone: true\r\n})\r\nexport class CopyClipboardDirective {\r\n @Input('copyClipboard')\r\n public payload: string;\r\n\r\n @Output('copied')\r\n public copied: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n @HostListener('click', ['$event'])\r\n public onClick(event: MouseEvent): void {\r\n event.preventDefault();\r\n if (!this.payload) return;\r\n\r\n if (SystemUtils.isBrowser()) {\r\n let listener = (e: ClipboardEvent) => {\r\n let clipboard = e.clipboardData;\r\n clipboard.setData('text/html', this.payload.toString());\r\n e.preventDefault();\r\n\r\n this.copied.emit(this.payload);\r\n };\r\n\r\n document.addEventListener('copy', listener, false);\r\n document.execCommand('copy');\r\n document.removeEventListener('copy', listener, false);\r\n }\r\n }\r\n}\r\n","import { Directive, forwardRef, Input } from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n NG_VALIDATORS,\r\n ValidationErrors,\r\n Validator,\r\n} from \"@angular/forms\";\r\nimport { endOfDay } from 'date-fns';\r\nimport { Validated } from '../definitions';\r\nimport { SystemUtils } from \"../system\";\r\n\r\n\r\n@Directive({\r\n selector: '[validator]',\r\n providers: [{ provide: NG_VALIDATORS, useExisting: ValidatorDirective, multi: true }],\r\n standalone: true, \r\n})\r\nexport class ValidatorDirective implements Validator {\r\n @Input() validator: (control: AbstractControl) => ValidationErrors | null;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n return this.validator(control);\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[validIf]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => ValidIfDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class ValidIfDirective implements Validator {\r\n @Input() validIf: boolean = false;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n let isValid = false;\r\n let c = control.value ? (control.value as Validated) : null;\r\n if (!c) isValid = this.validIf === true;\r\n else {\r\n try {\r\n isValid = c.isValid();\r\n } catch { }\r\n }\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { validIf: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n\r\n@Directive({\r\n selector: \"[equals]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => EqualsValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class EqualsValidatorDirective implements Validator {\r\n @Input() equals: AbstractControl = null;\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const isValid = this.equals.value === control.value;\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { equals: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[emails]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => EmailsValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class EmailsValidatorDirective implements Validator {\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n let isValid = true;\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n var parts = input.replaceAll(/\\r\\n/g, \"\").split(\";\");\r\n for (var i = 0; i < parts.length; i++) {\r\n if (parts[i].length > 0) {\r\n if (!SystemUtils.parseEmail(parts[i])) {\r\n isValid = false;\r\n break;\r\n }\r\n }\r\n }\r\n if (!isValid) {\r\n return { emails: \"Elenco non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[guid]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => GuidValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class GuidValidatorDirective implements Validator {\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n const isValid = SystemUtils.parseUUID(input);\r\n if (!isValid) {\r\n return { guid: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[sqlDate]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => SqlDateValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class SqlDateValidatorDirective implements Validator {\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n const d = endOfDay(SystemUtils.parseDate(input));\r\n const isValid = d.getFullYear() > 1750;\r\n if (!isValid) {\r\n return { notFuture: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[notFuture]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => NotFutureValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class NotFutureValidatorDirective implements Validator {\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n const today = endOfDay(new Date());\r\n const d = endOfDay(SystemUtils.parseDate(input));\r\n const isValid = d <= today;\r\n if (!isValid) {\r\n return { notFuture: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[url]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => UrlValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class UrlValidatorDirective implements Validator {\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n const isValid = SystemUtils.parseUrl(input);\r\n if (!isValid) {\r\n return { url: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n\r\n@Directive({\r\n selector: \"[fileSize]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => FileSizeValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class FileSizeValidatorDirective implements Validator {\r\n @Input() maxSizeMb: number = 5;\r\n @Input() minSizeMb: number = 0;\r\n @Input() size: number;\r\n\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n let f = control.value;\r\n let s = this.size ? this.size : 0;\r\n if (!f) return null;\r\n let isValid = s <= this.maxSizeMb && s >= this.minSizeMb;\r\n if (isValid) {\r\n return null;\r\n } else {\r\n return { fileSize: \"Non valido.\" };\r\n }\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"[password]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => PasswordValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\nexport class PasswordValidatorDirective implements Validator {\r\n \r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n let isValid = input && input.length >= 8;\r\n let hasUpperCase = false;\r\n let hasSymbol = false;\r\n if (isValid) {\r\n for (let i = 0; i < input.length; i++) {\r\n let ch = input[i];\r\n if (ch == ch.toUpperCase()) hasUpperCase = true;\r\n if (\"$£$%&/()=?!*+-°^#@§[]{}<>_-:;.,\".indexOf(ch) != -1) hasSymbol = true;\r\n }\r\n isValid = hasSymbol && hasUpperCase;\r\n }\r\n if (!isValid) {\r\n return { password: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n@Directive({\r\n selector: \"[time]\",\r\n providers: [\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => TimeValidatorDirective),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n})\r\n\r\nexport class TimeValidatorDirective implements Validator {\r\n @Input() slots: string;\r\n \r\n\r\n /**\r\n * Retrieve hours as a number from a time string (e: 12:00)\r\n * @param value : the time string\r\n * @returns the hours as a number or -1\r\n */\r\n private getTime(value: string): number | null {\r\n const p = value.split(':');\r\n if (p.length !== 2) return -1;\r\n const hh = parseInt(p[0]);\r\n if (hh < 0 || hh > 23) return -1;\r\n const mm = parseInt(p[1]);\r\n if (mm < 0 || hh > 59) return -1;\r\n return parseInt(p[0] + p[1]);\r\n }\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n const input = control.value;\r\n if (!input || input.length === 0) return null;\r\n let isValid: boolean = false;\r\n const t = this.getTime(input);\r\n if (t !== -1) {\r\n if (this.slots) {\r\n const slots = this.slots.split('|');\r\n slots.forEach(s => {\r\n const t1 = this.getTime(s.substring(0, 5));\r\n const t2 = this.getTime(s.substring(6));\r\n if (t1 !== -1 && t2 !== -1 && t1 <= t && t2 >= t) {\r\n // Good\r\n isValid = true;\r\n return;\r\n }\r\n });\r\n }\r\n }\r\n if (!isValid) {\r\n return { time: \"Non valido.\" };\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n","import { INode } from './system';\r\n\r\nexport interface DoneResult<T> {\r\n isNew?: boolean | null;\r\n data?: T;\r\n}\r\n\r\nexport interface ApiResponse {\r\n success: boolean;\r\n message: string;\r\n}\r\n\r\nexport interface ApiResult<T> extends ApiResponse {\r\n value: T;\r\n}\r\n\r\nexport interface Folder extends INode {\r\n teamId?: string | null;\r\n parentId?: string | null;\r\n position?: number | null;\r\n isPrivate?: boolean | null;\r\n itemsCount?: number | null;\r\n subItemsCount?: number | null;\r\n \r\n}\r\n\r\nexport interface FolderTree extends Folder {\r\n children?: Folder[] | null;\r\n path: string;\r\n}\r\n\r\nexport interface File<T> {\r\n ownerId?: T | null;\r\n id?: number | null;\r\n fileName: string;\r\n fileData: any;\r\n}\r\n\r\nexport interface Validated {\r\n isValid(): boolean;\r\n}\r\n\r\nexport class FileInfo implements Validated {\r\n file: any;\r\n valid: boolean;\r\n\r\n isValid(): boolean {\r\n return this.valid;\r\n }\r\n}\r\n\r\n\r\nexport interface NameValueItem<T> {\r\n name: string;\r\n value: T;\r\n shortName?: string | null;\r\n parentName?: string | null;\r\n parentValue?: T | null;\r\n header?: string | null;\r\n bag?: any | null;\r\n bagInfo?: string | null;\r\n disabled?: boolean | null;\r\n selected?: boolean | null;\r\n}\r\n\r\nexport interface Checkable {\r\n checked?: boolean | null;\r\n bag: any;\r\n getId(): any;\r\n}\r\n\r\n\r\nexport class ValueModel<T> {\r\n value: T;\r\n}\r\nexport class IDModel<T> {\r\n id: T;\r\n}\r\nexport class GroupModel<T> {\r\n ids: T[];\r\n}\r\n\r\nexport class DeleteModel<T> extends GroupModel<T> {\r\n mode: number;\r\n}\r\nexport interface DeleteResultModel<T> {\r\n items?: T[] | null,\r\n deleted?: number | null;\r\n total?: number | null;\r\n log?: string | null;\r\n}\r\n\r\nexport class RelationModel<T> {\r\n id: T;\r\n parentId: T;\r\n}\r\n\r\nexport class UpdateRelationsModel<T> {\r\n id: T;\r\n relatedIds: T[];\r\n}\r\n\r\nexport class QueryModel {\r\n any?: string | null;\r\n sortBy?: string | null;\r\n sortDescending?: boolean | null;\r\n first: number;\r\n count: number;\r\n}\r\n\r\nexport interface QueryResultModel<T> {\r\n interval?: string | null;\r\n items: T[];\r\n total?: number | null;\r\n}\r\n\r\nexport interface UpdateModel<T> {\r\n parentId?: T | null,\r\n ids: T[]\r\n}\r\n\r\nexport interface UpdateResultModel<T> {\r\nitems?: T[] | null;\r\nupdated?: number | null;\r\ntotal?: number | null;\r\nlog?: string | null;\r\n}\r\n\r\nexport interface AddModel<T> extends UpdateModel<T> {\r\n\r\n}\r\n\r\nexport interface AddResultModel<T> {\r\n items?: T[] | null;\r\n added?: number | null;\r\n total?: number | null;\r\n log?: string | null;\r\n}\r\n\r\nexport class ImportModel {\r\n origin: string;\r\n dataFile: any;\r\n jumpFirstLine?: boolean | null;\r\n map?: any | null;\r\n}\r\n\r\nexport interface EnableDisableModel {\r\n value: boolean;\r\n}\r\n\r\nexport interface SendToModel {\r\n sendToRecipients: string;\r\n sendToSubject: string;\r\n sendToText: string;\r\n}\r\n\r\nexport interface SearchBag {\r\n name: string;\r\n}\r\n\r\nexport interface Searchable {\r\n searchBag: SearchBag;\r\n}\r\n\r\nexport interface SearchFilterMetadata {\r\n total: number; // totale elementi\r\n count: number; // conteggio filtrati\r\n}\r\n\r\nexport class DateInterval {\r\n from: Date = null;\r\n to: Date = null;\r\n get fromAsDate() {\r\n return this.from\r\n ? new Date(\r\n this.from.getFullYear(),\r\n this.from.getMonth(),\r\n this.from.getDate(),\r\n 2,\r\n 0,\r\n 0\r\n )\r\n : null;\r\n }\r\n get toAsDate() {\r\n return this.to\r\n ? new Date(this.to.getFullYear(), this.to.getMonth(), this.to.getDate(), 2, 0, 0)\r\n : null;\r\n }\r\n\r\n constructor(from: Date = null, to: Date = null) {\r\n this.from = from;\r\n this.to = to;\r\n }\r\n\r\n /**\r\n * Clear interval\r\n */\r\n clear() {\r\n this.from = null,\r\n this.to = null\r\n }\r\n}\r\n\r\nexport interface LoginResult<T> extends ApiResult<boolean> {\r\n context: T;\r\n token: string;\r\n refreshToken?: string;\r\n}\r\n","import { Directive, HostListener, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { DateInterval } from '../definitions';\r\nimport { SystemUtils } from '../system';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { Subject, Subscription } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[dateIntervalChange]',\r\n standalone: true,\r\n})\r\nexport class DateIntervalChangeDirective implements OnInit, OnDestroy {\r\n @Input() dateIntervalChange: DateInterval = new DateInterval(null, null);\r\n @Input() end: boolean = false;\r\n private subject = new Subject();\r\n private subscription: Subscription;\r\n\r\n ngOnInit() {\r\n this.subscription = this.subject\r\n .pipe(debounceTime(100))\r\n .subscribe((e: KeyboardEvent) => { \r\n const value = (e.target as HTMLInputElement).value;\r\n SystemUtils.changeDateInterval(value, this.dateIntervalChange, this.end, e.key === ' ');\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n @HostListener('keyup', ['$event']) public onKeyup(event: KeyboardEvent): void {\r\n if (event.key === ' ') {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n this.subject.next(event);\r\n\r\n }\r\n}","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport { DateAdapter, MatDateFormats, MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport {\r\n Locale,\r\n getMonth,\r\n getYear,\r\n getDate,\r\n getDay,\r\n getDaysInMonth,\r\n formatISO,\r\n addYears,\r\n addMonths,\r\n addDays,\r\n isValid,\r\n isDate,\r\n format,\r\n parseISO,\r\n parse,\r\n} from 'date-fns';\r\nimport { fromZonedTime } from 'date-fns-tz';\r\n\r\n/** Creates an array and fills it with values. */\r\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n const valuesArray = Array(length);\r\n for (let i = 0; i < length; i++) {\r\n valuesArray[i] = valueFunction(i);\r\n }\r\n return valuesArray;\r\n}\r\n\r\n// date-fns doesn't have a way to read/print month names or days of the week directly,\r\n// so we get them by formatting a date with a format that produces the desired month/day.\r\nconst MONTH_FORMATS = {\r\n long: 'LLLL',\r\n short: 'LLL',\r\n narrow: 'LLLLL',\r\n};\r\n\r\nconst DAY_OF_WEEK_FORMATS = {\r\n long: 'EEEE',\r\n short: 'EEE',\r\n narrow: 'EEEEE',\r\n};\r\n\r\nexport const MAT_DATE_FNS_FORMATS: MatDateFormats = {\r\n parse: {\r\n dateInput: 'P',\r\n },\r\n display: {\r\n dateInput: 'P',\r\n monthYearLabel: 'LLL uuuu',\r\n dateA11yLabel: 'PP',\r\n monthYearA11yLabel: 'LLLL uuuu',\r\n },\r\n};\r\n\r\n/** Adds date-fns support to Angular Material. */\r\n@Injectable()\r\nexport class DateFnsAdapter extends DateAdapter<Date, Locale> {\r\n constructor(@Optional() @Inject(MAT_DATE_LOCALE) matDateLocale: null) {\r\n super();\r\n if (matDateLocale){\r\n this.setLocale( matDateLocale);\r\n }\r\n }\r\n\r\n getYear(date: Date): number {\r\n return getYear(date);\r\n }\r\n\r\n getMonth(date: Date): number {\r\n return getMonth(date);\r\n }\r\n\r\n getDate(date: Date): number {\r\n return getDate(date);\r\n }\r\n\r\n getDayOfWeek(date: Date): number {\r\n return getDay(date);\r\n }\r\n\r\n getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const pattern = MONTH_FORMATS[style];\r\n return range(12, i => this.format(new Date(2017, i, 1), pattern));\r\n }\r\n\r\n getDateNames(): string[] {\r\n const dtf =\r\n typeof Intl !== 'undefined'\r\n ? new Intl.DateTimeFormat(this.locale.code, {\r\n day: 'numeric',\r\n timeZone: 'utc',\r\n })\r\n : null;\r\n\r\n return range(31, i => {\r\n if (dtf) {\r\n // date-fns doesn't appear to support this functionality.\r\n // Fall back to `Intl` on supported browsers.\r\n const date = new Date();\r\n date.setUTCFullYear(2017, 0, i + 1);\r\n date.setUTCHours(0, 0, 0, 0);\r\n return dtf.format(date).replace(/[\\u200e\\u200f]/g, '');\r\n }\r\n\r\n return i + '';\r\n });\r\n }\r\n\r\n getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const pattern = DAY_OF_WEEK_FORMATS[style];\r\n return range(7, i => this.format(new Date(2017, 0, i + 1), pattern));\r\n }\r\n\r\n getYearName(date: Date): string {\r\n return this.format(date, 'y');\r\n }\r\n\r\n getFirstDayOfWeek(): number {\r\n return this.locale.options?.weekStartsOn ?? 0;\r\n }\r\n\r\n getNumDaysInMonth(date: Date): number {\r\n return getDaysInMonth(date);\r\n }\r\n\r\n clone(date: Date): Date {\r\n return new Date(date.getTime());\r\n }\r\n\r\n createDate(year: number, month: number, date: number): Date {\r\n\r\n // Check for invalid month and date (except upper bound on date which we have to check after\r\n // creating the Date).\r\n if (month < 0 || month > 11) {\r\n throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\r\n }\r\n\r\n if (date < 1) {\r\n throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\r\n }\r\n\r\n // Passing the year to the constructor causes year numbers <100 to be converted to 19xx.\r\n // To work around this we use `setFullYear` and `setHours` instead.\r\n let result = new Date();\r\n result.setFullYear(year, month, date);\r\n result.setHours(0, 0, 0, 0);\r\n result = fromZonedTime (result, \"UTC\");\r\n\r\n // Check that the date wasn't above the upper bound for the month, causing the month to overflow\r\n if (result.getMonth() != month) {\r\n throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n today(): Date {\r\n return new Date();\r\n }\r\n\r\n parse(value: any, parseFormat: string | string[]): Date | null {\r\n if (typeof value == 'string' && value.length > 0) {\r\n let iso8601Date = parseISO(value);\r\n if (this.isValid(iso8601Date)) {\r\n iso8601Date = fromZonedTime (iso8601Date, \"UTC\");\r\n return iso8601Date;\r\n }\r\n\r\n const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];\r\n\r\n if (!parseFormat.length) {\r\n throw Error('Formats array must not be empty.');\r\n }\r\n\r\n for (const currentFormat of formats) {\r\n let fromFormat = parse(value, currentFormat, new Date(), { locale: this.locale });\r\n if (this.isValid(fromFormat)) {\r\n fromFormat = fromZonedTime (fromFormat, \"UTC\");\r\n return fromFormat;\r\n }\r\n }\r\n\r\n return this.invalid();\r\n } else if (typeof value === 'number') {\r\n return new Date(value);\r\n } else if (value instanceof Date) {\r\n return this.clone(value);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n\r\n format(date: Date, displayFormat: string): string {\r\n if (!this.isValid(date)) {\r\n throw Error('DateFnsAdapter: Cannot format invalid date.');\r\n }\r\n\r\n return format(date, displayFormat, { locale: this.locale });\r\n }\r\n\r\n addCalendarYears(date: Date, years: number): Date {\r\n return addYears(date, years);\r\n }\r\n\r\n addCalendarMonths(date: Date, months: number): Date {\r\n return addMonths(date, months);\r\n }\r\n\r\n addCalendarDays(date: Date, days: number): Date {\r\n return addDays(date, days);\r\n }\r\n\r\n toIso8601(date: Date): string {\r\n return formatISO(date, { representation: 'date' });\r\n }\r\n\r\n /**\r\n * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\r\n * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\r\n * invalid date for all other values.\r\n */\r\n override deserialize(value: any): Date | null {\r\n if (typeof value === 'string') {\r\n if (!value) {\r\n return null;\r\n }\r\n const date = parseISO(value);\r\n if (this.isValid(date)) {\r\n return date;\r\n }\r\n }\r\n return super.deserialize(value);\r\n }\r\n\r\n isDateInstance(obj: any): boolean {\r\n return isDate(obj);\r\n }\r\n\r\n isValid(date: Date): boolean {\r\n return isValid(date);\r\n }\r\n\r\n invalid(): Date {\r\n return new Date(NaN);\r\n }\r\n}","import { AfterContentInit, Directive, ElementRef, inject } from '@angular/core';\r\n\r\n@Directive({\r\n selector: \"[autoFocus]\",\r\n standalone: true\r\n })\r\nexport class AutoFocusDirective implements AfterContentInit {\r\n\r\n private elementRef = inject(ElementRef);\r\n\r\n public ngAfterContentInit() {\r\n setTimeout(() => {\r\n this.elementRef.nativeElement.focus();\r\n }, 500);\r\n }\r\n }","import { SelectionModel } from \"@angular/cdk/collections\";\r\nimport { SystemUtils } from \"./system\";\r\nimport { EventEmitter } from '@angular/core';\r\n\r\nexport class SelectableModel<T, V> {\r\n\r\n changed: EventEmitter<T> = new EventEmitter<T>();\r\n\r\n private _all: T[] = [];\r\n get all(): T[] {\r\n return this._all;\r\n }\r\n private _current: SelectionModel<T>;\r\n get current(): SelectionModel<T> {\r\n return this._current;\r\n }\r\n private _lookupFieldName: string;\r\n\r\n constructor(\r\n allowMultiSelect: boolean = true,\r\n lookupFieldName: string = \"id\"\r\n ) {\r\n this._current = new SelectionModel<T>(allowMultiSelect, []);\r\n this._all = [];\r\n this._lookupFieldName = lookupFieldName;\r\n }\r\n\r\n /**\r\n * Update the view of an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n updateCurrent(item: T, lookupValue: V) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p != -1) {\r\n this._current.toggle(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Select an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n toggle(item: T, lookupValue: V | null | undefined) {\r\n if (lookupValue) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p == -1) {\r\n this._all.push(item);\r\n } else {\r\n this._all.splice(p, 1);\r\n }\r\n this._current.toggle(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Select an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n select(item: T, lookupValue: V | null | undefined) {\r\n if (lookupValue) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p == -1) {\r\n this._all.push(item);\r\n } \r\n this._current.select(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n\r\n /**\r\n * Deselect an item\r\n * @param item : the item to update\r\n * @param lookupValue : the value\r\n */\r\n deselect(item: T, lookupValue: V | null | undefined) {\r\n if (lookupValue) {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n );\r\n if (p != -1) {\r\n this._all.splice(p, 1);\r\n this._current.deselect(item);\r\n this.changed.emit(item);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Deselect all specified item lookup values\r\n * @param lookupValues : the values\r\n */\r\n deselectByValues(lookupValues: V[]) {\r\n if (!lookupValues || lookupValues.length === 0) return;\r\n lookupValues.forEach(n => {\r\n const p = SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n n\r\n );\r\n if (p != -1) {\r\n let item = this._all[p];\r\n this._all.splice(p, 1);\r\n this._current.deselect(item);\r\n this.changed.emit(item);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Clear current view\r\n * @param clearFunc : the function used to clear\r\n */\r\n clearCurrent(clearFunc: any) {\r\n this._current.selected.forEach(n => {\r\n clearFunc(n);\r\n });\r\n this._current.clear();\r\n this.changed.emit();\r\n }\r\n\r\n /**\r\n * Deselect all items\r\n */\r\n clear() {\r\n this._all = [];\r\n this._current.clear();\r\n this.changed.emit();\r\n }\r\n\r\n /**\r\n * Checks if an item is selected using its lookup value\r\n * @param lookupValue : the value\r\n * @returns : true if the value is selected\r\n */\r\n isSelected(lookupValue: V | null | undefined): boolean {\r\n return (lookupValue &&\r\n SystemUtils.arrayFindIndexByKey(\r\n this._all,\r\n this._lookupFieldName,\r\n lookupValue\r\n ) != -1\r\n );\r\n }\r\n\r\n /**\r\n * Checks if a selection exists\r\n * @returns : true if at least one selection exists\r\n */\r\n hasValue(): boolean {\r\n return this._all.length > 0;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\nexport interface BroadcastMessageInfo {\r\n id: string;\r\n data?: any | null;\r\n}\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BroadcastService {\r\n private subject = new Subject<BroadcastMessageInfo>();\r\n\r\n /**\r\n * Send a message\r\n * @param id : the message id\r\n * @param data : the data to send\r\n * @param delay : the number of milliseconds to wait before sending the message\r\n */\r\n sendMessage(id: string, data: any = null, delay: number = 0) {\r\n setTimeout(() => {\r\n this.subject.next({ id: id, data: data } as BroadcastMessageInfo);\r\n }, delay);\r\n }\r\n\r\n /**\r\n * Get the next message as observable\r\n * @returns : the observable object\r\n */\r\n getMessage(): Observable<BroadcastMessageInfo> {\r\n return this.subject.asObservable();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EnvironmentService {\r\n \r\n private _appUri: string = '';\r\n get appUri() {\r\n return this._appUri;\r\n }\r\n set appUri(value: string) {\r\n this._appUri = value;\r\n }\r\n\r\n private _appServiceUri: string = '';\r\n get appServiceUri() {\r\n return this._appServiceUri;\r\n }\r\n set appServiceUri(value: string) {\r\n this._appServiceUri = value;\r\n }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\nimport { SystemUtils } from '../system';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ScreenService {\r\n public mq = signal<string>(\"\");\r\n \r\n get isTouchable(): boolean {\r\n return SystemUtils.isTouchable();\r\n }\r\n get isIEOrEdge(): boolean {\r\n return /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\r\n }\r\n\r\n}\r\n","/**\r\n * Standard Broadcast Messages Manager\r\n * https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\r\n */\r\n\r\n\r\n/**\r\n * The message bag sent as a message\r\n */\r\nexport interface BroadcastChannelMessageBag<T> {\r\n messageId: string;\r\n sender: string,\r\n data?: T;\r\n}\r\n\r\n/**\r\n * Message subscription params\r\n */\r\nexport interface BroadcastChannelSubscriberInfo<T> {\r\n messageId: string,\r\n action: (bag: BroadcastChannelMessageBag<T>) => void;\r\n}\r\n\r\n\r\n/**\r\n * Web Standard Broadcast Messages Manager\r\n * https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\r\n */\r\nexport class BroadcastChannelManager {\r\n private channel?: BroadcastChannel | null = undefined;\r\n private subscriptions: BroadcastChannelSubscriberInfo<any>[] = [];\r\n\r\n /**\r\n * Get the current channel registration\r\n */\r\n public get currentBus(): string | null | undefined {\r\n return this.channel?.name;\r\n }\r\n\r\n constructor(bus: string) {\r\n this.channel = new BroadcastChannel(bus);\r\n\r\n this.channel.onmessageerror = (e: any) => {\r\n console.error('[BroadcastChannelManager] Errore di ricezione del messaggio', e);\r\n };\r\n\r\n this.channel.onmessage = (e: MessageEvent) => {\r\n const bag: BroadcastChannelMessageBag<any> | null | undefined = e.data as BroadcastChannelMessageBag<any>;\r\n if (bag) {\r\n const bagInfo: BroadcastChannelSubscriberInfo<any> | undefined = this.subscriptions.find(m => m.messageId === bag.messageId);\r\n bagInfo?.action(bag);\r\n }\r\n }\r\n }\r\n\r\n dispose(): void {\r\n this.subscriptions = [];\r\n this.channel?.close();\r\n this.channel = null;\r\n }\r\n\r\n /**\r\n * Send a message\r\n * @param bag The message, see also {@link BroadcastChannelMessageBag}\r\n * \r\n * @example \r\n * channel.sendMessage({ messageId: 'my-broadcast-message', sender: 'the-sender', data: value });\r\n */\r\n sendMessage<T>(bag: BroadcastChannelMessageBag<T>): void;\r\n /**\r\n * Send a message\r\n * @param bag The message, see also {@link BroadcastChannelMessageBag}\r\n * @param delay The number of milliseconds to wait before sending the message, see also {@link setTimeout}\r\n * \r\n * @example \r\n * channel.sendMessage({ messageId: 'my-broadcast-message', sender: 'the-sender', data: value }, 250);\r\n */\r\n sendMessage<T>(bag: BroadcastChannelMessageBag<T>, delay: number | null): void;\r\n /**\r\n * Send a message\r\n * @param messageId The message id\r\n * @param data The data to send\r\n * \r\n * @example \r\n * channel.sendMessage('my-broadcast-message', value);\r\n */\r\n sendMessage<T>(messageId: string, data: T | null): void;\r\n /**\r\n * Send a message\r\n * @param messageId The message id\r\n * @param data The data to send\r\n * @param delay The number of milliseconds to wait before sending the message\r\n * \r\n * @example \r\n * channel.sendMessage('my-broadcast-message', value, 250);\r\n */\r\n sendMessage<T>(messageId: string, data: T | null, delay: number | null): void;\r\n\r\n /**\r\n * overloads\r\n */\r\n sendMessage<T>(messageIdorBag: string | BroadcastChannelMessageBag<T>, dataOrDelay: T | number = null, delay: number | null = 0) {\r\n // console.warn({ messageIdorBag, dataOrDelay, delay });\r\n setTimeout(() => {\r\n if (typeof messageIdorBag === 'string') {\r\n this.channel?.postMessage({ messageId: messageIdorBag, data: dataOrDelay } as BroadcastChannelMessageBag<T>);\r\n } else {\r\n this.channel?.postMessage(messageIdorBag as BroadcastChannelMessageBag<T>);\r\n }\r\n }, (typeof dataOrDelay === 'number' ? dataOrDelay : delay) ?? 0);\r\n }\r\n\r\n\r\n /**\r\n * Subscribe to a message\r\n * @param args The subscription info, see also {@link BroadcastChannelSubscriberInfo}\r\n */\r\n subscribe<T>(args: BroadcastChannelSubscriberInfo<T>) {\r\n const i: number = this.subscriptions.findIndex(m => m.messageId === args.messageId);\r\n if (i === -1) {\r\n this.subscriptions.push(args)\r\n } else {\r\n this.subscriptions[i].action = args.action;\r\n }\r\n }\r\n\r\n /**\r\n * Remove a message subscription\r\n * @param messageId The message id\r\n */\r\n unsubscribe(messageId: string) {\r\n const i: number = this.subscriptions.findIndex(m => m.messageId === messageId);\r\n if (i !== -1) {\r\n this.subscriptions.splice(i, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Remove all the current subscriptions\r\n */\r\n unsubscribeAll() {\r\n this.subscriptions = [];\r\n }\r\n}\r\n","import { computed, inject, Injectable, OnDestroy, RendererFactory2, Signal, signal } from \"@angular/core\";\r\nimport { BroadcastChannelManager, BroadcastChannelMessageBag } from './broadcastChannelManager';\r\nimport { BehaviorSubject, Observable } from \"rxjs\";\r\n\r\n\r\n/**\r\n * Kind of themes: system default, light or dark\r\n */\r\nexport type ThemeType = 'auto' | 'light' | 'dark';\r\n\r\n/**\r\n * Available themes' schema\r\n */\r\ninterface ThemeInfoRecord {\r\n icon: string;\r\n name: string;\r\n next: ThemeType;\r\n tooltip: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ThemeService implements OnDestroy {\r\n\r\n // messaggi broadcast\r\n private readonly broadcastChannel = new BroadcastChannelManager('THEME-SERVICE');\r\n private readonly broadcastMessage: string = '$theme-changed';\r\n\r\n // per intercettare il cambio di tema a livello di sistema\r\n private readonly prefersColorSchemeMediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');\r\n\r\n /**\r\n * Theme changed event.\r\n * Notify the consuming component about the incoming theme change.\r\n * @example \r\n * // React to theme changes\r\n * this.themeService.themeChanged\r\n * .pipe(takeUntil(this.unsubscribe))\r\n * .subscribe((value: ThemeType) => {\r\n * // do the job done....\r\n * });\r\n */\r\n private themeChanged = new BehaviorSubject<ThemeType>('auto');\r\n // espone al consumatore un'observable\r\n public changed: Observable<ThemeType> = this.themeChanged.asObservable();\r\n\r\n private renderFactory2 = inject(RendererFactory2);\r\n private renderer = this.renderFactory2.createRenderer(null, null);\r\n\r\n /**\r\n * Current theme\r\n */\r\n private readonly theme = signal<ThemeType>(\"light\");\r\n /**\r\n * The current theme is \"System default\"\r\n */\r\n private readonly auto: Signal<boolean> = computed(() => this.theme() === 'auto');\r\n\r\n /**\r\n * Configuration schema about the icon, the text and the toggle() sequence\r\n */\r\n private readonly themeInfo: Record<ThemeType, ThemeInfoRecord> = {\r\n ['auto']: { icon: 'contrast', name: 'Impostazione predefinita di sistema', next: 'light', tooltip: 'Passa a tema chiaro', },\r\n ['light']: { icon: 'light_mode', name: 'Tema chiaro', next: 'dark', tooltip: 'Passa a tema scuro', },\r\n ['dark']: { icon: 'dark_mode', name: 'Tema scuro', next: 'auto', tooltip: 'Passa a tema predefinito di sistema', },\r\n };\r\n\r\n /**\r\n * Icon of the current theme (mat-icon code)\r\n */\r\n public readonly themeIcon: Signal<string> = computed(() => this.themeInfo[this.theme()].icon);\r\n /**\r\n * Current theme name\r\n */\r\n public readonly themeName: Signal<string> = computed(() => this.themeInfo[this.theme()].name);\r\n /**\r\n * Tooltip text on toggle \r\n */\r\n public readonly toggleTooltip: Signal<string> = computed(() => this.themeInfo[this.theme()].tooltip);\r\n\r\n constructor() {\r\n this.initialize();\r\n }\r\n\r\n /**\r\n * Initialize\r\n */\r\n initialize() {\r\n // React to current theme\r\n this.prefersColorSchemeMediaQueryList.onchange = (_: MediaQueryListEvent) => this.auto() ? this.setTheme() : null;\r\n\r\n // Support boradcast channel messaging\r\n this.broadcastChannel.subscribe<ThemeType>({\r\n messageId: this.broadcastMessage,\r\n action: (bag: BroadcastChannelMessageBag<ThemeType>) => {\r\n if (this.theme() !== bag.data) {\r\n this.setTheme(bag.data);\r\n }\r\n }\r\n });\r\n\r\n // Load current theme\r\n this.loadTheme();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.broadcastChannel.dispose();\r\n }\r\n\r\n /**\r\n * Get the current preferred theme\r\n */\r\n private getPreferredTheme(): ThemeType {\r\n let theme: ThemeType = localStorage.getItem(\"preferred-theme\") as ThemeType;\r\n if (!this.isTheme(theme)) {\r\n theme = 'auto';\r\n }\r\n return theme;\r\n }\r\n\r\n /**\r\n * Load theme\r\n */\r\n private loadTheme() {\r\n this.setTheme(this.getPreferredTheme());\r\n }\r\n\r\n\r\n /**\r\n * Check if a value string is a theme type\r\n * @param value : th string value\r\n * @returns true if the the value is a valid theme type\r\n */\r\n private isTheme(value: string): value is ThemeType {\r\n return ['auto', 'light', 'dark'].includes(value);\r\n }\r\n\r\n\r\n /**\r\n * Set the new theme\r\n * @param theme the new theme\r\n */\r\n private setTheme(theme: ThemeType = 'auto') {\r\n this.renderer.removeClass(document.body, 'light');\r\n this.renderer.removeClass(document.body, 'dark');\r\n this.theme.set(theme);\r\n localStorage.setItem(\"preferred-theme\", this.theme());\r\n this.renderer.addClass(document.body, this.auto() ? (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\") : theme);\r\n // Notify that current theme has changed\r\n this.themeChanged.next(this.getTheme());\r\n this.broadcastChannel.sendMessage(this.broadcastMessage, this.theme());\r\n }\r\n\r\n /**\r\n * Toggle theme\r\n */\r\n public toggleTheme(): void {\r\n this.setTheme(this.themeInfo[this.theme()].next);\r\n }\r\n\r\n /**\r\n * Get current real theme: light or dark\r\n */\r\n public getTheme(): ThemeType {\r\n return (\r\n this.auto()\r\n ? (window.matchMedia && window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\")\r\n : this.getPreferredTheme());\r\n }\r\n}","import { NgModule } from '@angular/core';\r\nimport { ReplacePipe } from './pipes/replace.pipe';\r\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\r\nimport { SafeUrlPipe } from './pipes/safe-url.pipe';\r\nimport { SearchCallbackPipe } from './pipes/search-callback.pipe';\r\nimport { SearchFilterPipe } from './pipes/search-filter.pipe';\r\nimport { FormatPipe } from './pipes/format.pipe';\r\nimport { CopyClipboardDirective } from './directives/copyClipboardDirective';\r\nimport { EmailsValidatorDirective, EqualsValidatorDirective, FileSizeValidatorDirective, GuidValidatorDirective, NotFutureValidatorDirective, PasswordValidatorDirective, SqlDateValidatorDirective, UrlValidatorDirective, ValidIfDirective, ValidatorDirective } from './directives/validators';\r\nimport { DateIntervalChangeDirective } from './directives/changeDateIntervalDirective';\r\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport { DateFnsAdapter, MAT_DATE_FNS_FORMATS } from './dateFnsAdapter';\r\nimport { AutoFocusDirective } from './directives/autoFocusDirective';\r\n\r\n@NgModule({\r\n providers: [\r\n {\r\n provide: DateAdapter,\r\n useClass: DateFnsAdapter,\r\n deps: [MAT_DATE_LOCALE],\r\n },\r\n { provide: MAT_DATE_FORMATS, useValue: MAT_DATE_FNS_FORMATS }\r\n ],\r\n})\r\nexport class ArsDateFnsModule { }\r\n\r\n@NgModule({\r\n imports: [\r\n FileSizeValidatorDirective,\r\n ValidIfDirective,\r\n ValidatorDirective,\r\n EqualsValidatorDirective,\r\n GuidValidatorDirective,\r\n EmailsValidatorDirective,\r\n UrlValidatorDirective,\r\n NotFutureValidatorDirective,\r\n PasswordValidatorDirective,\r\n DateIntervalChangeDirective,\r\n SqlDateValidatorDirective,\r\n SearchFilterPipe,\r\n SearchCallbackPipe,\r\n SafeHtmlPipe,\r\n SafeUrlPipe,\r\n ReplacePipe,\r\n FormatPipe,\r\n CopyClipboardDirective,\r\n AutoFocusDirective\r\n ],\r\n exports: [\r\n FileSizeValidatorDirective,\r\n ValidIfDirective,\r\n ValidatorDirective,\r\n EqualsValidatorDirective,\r\n GuidValidatorDirective,\r\n EmailsValidatorDirective,\r\n UrlValidatorDirective,\r\n NotFutureValidatorDirective,\r\n PasswordValidatorDirective,\r\n DateIntervalChangeDirective,\r\n SqlDateValidatorDirective,\r\n SearchFilterPipe,\r\n SearchCallbackPipe,\r\n SafeHtmlPipe,\r\n SafeUrlPipe,\r\n ReplacePipe,\r\n FormatPipe,\r\n CopyClipboardDirective,\r\n AutoFocusDirective\r\n ],\r\n providers: [\r\n SearchFilterPipe,\r\n SearchCallbackPipe,\r\n SafeHtmlPipe,\r\n SafeUrlPipe,\r\n ReplacePipe,\r\n FormatPipe\r\n ]\r\n})\r\nexport class ArsCoreModule { }\r\n\r\n\r\nexport * from './system';\r\nexport * from './definitions';\r\nexport * from './dateFnsAdapter';\r\nexport * from './selectable';\r\nexport * from './services/broadcast.service';\r\nexport * from './services/environment.service';\r\nexport * from './services/screen.service';\r\nexport * from './services/theme.service';\r\n\r\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './core.module';\r\nexport * from './directives/changeDateIntervalDirective';\r\nexport * from './directives/copyClipboardDirective';\r\nexport * from './directives/autoFocusDirective';\r\nexport * from './directives/validators';\r\nexport * from './pipes/search-filter.pipe';\r\nexport * from './pipes/search-callback.pipe';\r\nexport * from './pipes/safe-url.pipe';\r\nexport * from './pipes/safe-html.pipe';\r\nexport * from './pipes/replace.pipe';\r\nexport * from './pipes/format.pipe';\r\nexport * from './system';\r\nexport * from './definitions';\r\nexport * from './selectable';\r\nexport * from './services/broadcast.service';\r\nexport * from './services/broadcastChannelManager';\r\nexport * from './services/environment.service';\r\nexport * from './services/screen.service';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arsedizioni/ars-utils",
3
- "version": "18.3.15",
3
+ "version": "18.3.16",
4
4
  "author": {
5
5
  "email": "software@arsedizioni.it",
6
6
  "name": "Fabio Buscaroli, Alberto Doria"
@@ -16,7 +16,7 @@
16
16
  "access": "public"
17
17
  },
18
18
  "peerDependencies": {
19
- "date-fns": "^4",
19
+ "date-fns": "^3",
20
20
  "file-saver": "^2"
21
21
  },
22
22
  "dependencies": {
@@ -52,18 +52,18 @@
52
52
  "esm": "./esm2022/core/arsedizioni-ars-utils-core.mjs",
53
53
  "default": "./fesm2022/arsedizioni-ars-utils-core.mjs"
54
54
  },
55
- "./help": {
56
- "types": "./help/index.d.ts",
57
- "esm2022": "./esm2022/help/arsedizioni-ars-utils-help.mjs",
58
- "esm": "./esm2022/help/arsedizioni-ars-utils-help.mjs",
59
- "default": "./fesm2022/arsedizioni-ars-utils-help.mjs"
60
- },
61
55
  "./evolution.common": {
62
56
  "types": "./evolution.common/index.d.ts",
63
57
  "esm2022": "./esm2022/evolution.common/arsedizioni-ars-utils-evolution.common.mjs",
64
58
  "esm": "./esm2022/evolution.common/arsedizioni-ars-utils-evolution.common.mjs",
65
59
  "default": "./fesm2022/arsedizioni-ars-utils-evolution.common.mjs"
66
60
  },
61
+ "./help": {
62
+ "types": "./help/index.d.ts",
63
+ "esm2022": "./esm2022/help/arsedizioni-ars-utils-help.mjs",
64
+ "esm": "./esm2022/help/arsedizioni-ars-utils-help.mjs",
65
+ "default": "./fesm2022/arsedizioni-ars-utils-help.mjs"
66
+ },
67
67
  "./support.common": {
68
68
  "types": "./support.common/index.d.ts",
69
69
  "esm2022": "./esm2022/support.common/arsedizioni-ars-utils-support.common.mjs",