@idea-ionic/agenda 8.0.6 → 8.0.8

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.
@@ -13,6 +13,9 @@ import * as i3 from "@idea-ionic/common";
13
13
  import * as i4 from "angular-calendar";
14
14
  export class IDEAAgendaComponent {
15
15
  constructor() {
16
+ this._cdr = inject(ChangeDetectorRef);
17
+ this._platform = inject(Platform);
18
+ this._translate = inject(IDEATranslationsService);
16
19
  /**
17
20
  * The events to display in the calendar.
18
21
  */
@@ -95,9 +98,6 @@ export class IDEAAgendaComponent {
95
98
  this.viewDate = new Date();
96
99
  this.refresh = new Subject();
97
100
  this.darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
98
- this._cdr = inject(ChangeDetectorRef);
99
- this._platform = inject(Platform);
100
- this._translate = inject(IDEATranslationsService);
101
101
  }
102
102
  ngOnInit() {
103
103
  this.locale = this._translate.getCurrentLang();
@@ -312,4 +312,4 @@ export var DragToCreateOptions;
312
312
  })(DragToCreateOptions || (DragToCreateOptions = {}));
313
313
  const floorToNearest = (amount, precision) => Math.floor(amount / precision) * precision;
314
314
  const ceilToNearest = (amount, precision) => Math.ceil(amount / precision) * precision;
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbmRhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL21vZHVsZXMvYWdlbmRhL3NyYy9hZ2VuZGEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vbW9kdWxlcy9hZ2VuZGEvc3JjL2FnZW5kYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixpQkFBaUIsRUFDakIsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFJTCxZQUFZLEVBRWIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEYsYUFBYTtBQUNiLE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBUTdELE1BQU0sT0FBTyxtQkFBbUI7SUFOaEM7UUFPRTs7V0FFRztRQUNNLFdBQU0sR0FBa0IsRUFBRSxDQUFDO1FBQ3BDOztXQUVHO1FBQ00sZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFDcEM7O1dBRUc7UUFDTSxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUMxQjs7V0FFRztRQUNNLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDekI7O1dBRUc7UUFDTSxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUMxQjs7V0FFRztRQUNNLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ2pDOztXQUVHO1FBQ00sU0FBSSxHQUFpQixZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ2hEOztXQUVHO1FBQ00saUJBQVksR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEY7O1dBRUc7UUFDTSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBSzVCOztXQUVHO1FBQ00scUJBQWdCLEdBQWdCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNqRjs7O1dBR0c7UUFDTSxzQkFBaUIsR0FBd0IsbUJBQW1CLENBQUMsUUFBUSxDQUFDO1FBSy9FOztXQUVHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBQ3hEOztXQUVHO1FBQ08sY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDL0M7O1dBRUc7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNoRDs7V0FFRztRQUNPLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUMzRDs7V0FFRztRQUNPLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUN4RDs7V0FFRztRQUNPLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2hEOztXQUVHO1FBQ08scUNBQWdDLEdBQUcsSUFBSSxZQUFZLEVBQXFDLENBQUM7UUFDbkc7O1dBRUc7UUFDTyxpQ0FBNEIsR0FBRyxJQUFJLFlBQVksRUFBc0MsQ0FBQztRQUVoRyxpQkFBWSxHQUFHLFlBQVksQ0FBQztRQUM1QixlQUFVLEdBQUcsZUFBZSxDQUFDO1FBQzdCLGFBQVEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3RCLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBVXhCLGFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUMsT0FBTyxDQUFDO1FBRTdELFNBQUksR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqQyxjQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLGVBQVUsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztLQW9KOUM7SUFsSkMsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMvQyw4RkFBOEY7UUFDOUYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILHFCQUFxQixDQUFDLEtBQXlDO1FBQzdELElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsR0FBRyxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0Q7O09BRUc7SUFDSCx5QkFBeUIsQ0FBQyxLQUF3QztRQUNoRSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFBRSxHQUFHLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO2dCQUN6RSxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVMsRUFBRSxjQUF3QjtRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNsQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQWtCO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBYTtRQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLEtBQUs7WUFBRSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUNuRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBeUM7UUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztZQUFFLE9BQU87UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3JHLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDOztZQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBa0M7UUFDM0UsS0FBSyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7UUFDdkIsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLE9BQWdCO1FBQy9ELElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDckMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbkQsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWtCO1FBQ2xDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDdEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUQsSUFBSSxLQUFLLENBQUMsV0FBVztZQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkUsSUFBSSxLQUFLLENBQUMsS0FBSztZQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlGLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFDLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlCLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQscUJBQXFCLENBQUMsV0FBbUI7UUFDdkMsT0FBTyxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ3pHLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFZLEVBQUUsV0FBaUIsRUFBRSxjQUEyQjtRQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU87UUFFcEMsSUFBSSxJQUFJLENBQUMsYUFBYTtZQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUUzRCxNQUFNLGtCQUFrQixHQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN6RixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFbkQsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0QsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFaEYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxhQUFvQixFQUFRLEVBQUU7WUFDbkQsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FDeEIsYUFBYSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFFLGFBQTRCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBRSxhQUE0QixDQUFDO1lBRWhILE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRSxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsT0FBTyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFFL0csSUFBSSxNQUFZLENBQUM7WUFDakIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssbUJBQW1CLENBQUMsYUFBYTtnQkFBRSxNQUFNLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQzs7Z0JBQzNHLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUV0RSxJQUFJLE1BQU0sR0FBRyxXQUFXLElBQUksTUFBTSxHQUFHLFNBQVM7Z0JBQUUsa0JBQWtCLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztZQUNoRixXQUFXLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxHQUFTLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsYUFBYTtnQkFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDMUQsa0JBQWtCLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzVGLFdBQVcsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxHQUFTLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ2hDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDO2lCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQ3JFLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDO2lCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7aUJBQ3BFLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUNPLHlDQUF5QyxDQUFDLGFBQTBCO1FBQzFFLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDcEQsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsSUFBSTtZQUN4RixRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsQ0FBQztRQUMvRSxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzhHQTNQVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw0dUJDOUJoQyxtK1FBcU9BOzsyRkR2TWEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGFBQWEsbUJBQ04sdUJBQXVCLENBQUMsTUFBTTs4QkFRdEMsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsZUFBZTtzQkFBdkIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUtHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFJRyxhQUFhO3NCQUFyQixLQUFLO2dCQUlJLFdBQVc7c0JBQXBCLE1BQU07Z0JBSUcsU0FBUztzQkFBbEIsTUFBTTtnQkFJRyxVQUFVO3NCQUFuQixNQUFNO2dCQUlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBSUcsV0FBVztzQkFBcEIsTUFBTTtnQkFJRyxVQUFVO3NCQUFuQixNQUFNO2dCQUlHLGdDQUFnQztzQkFBekMsTUFBTTtnQkFJRyw0QkFBNEI7c0JBQXJDLE1BQU07O0FBK01UOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN6Qiw4REFBYSxDQUFBO0lBQ2IscUVBQWdCLENBQUE7SUFDaEIsK0RBQVMsQ0FBQTtJQUNULDZEQUFRLENBQUE7QUFDVixDQUFDLEVBTFcsZUFBZSxLQUFmLGVBQWUsUUFLMUI7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLG1CQUlYO0FBSkQsV0FBWSxtQkFBbUI7SUFDN0IscUVBQVksQ0FBQTtJQUNaLCtFQUFpQixDQUFBO0lBQ2pCLDZEQUFRLENBQUE7QUFDVixDQUFDLEVBSlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUk5QjtBQUVELE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBYyxFQUFFLFNBQWlCLEVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqSCxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWMsRUFBRSxTQUFpQixFQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkNvbnRlbnQsIFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgZmluYWxpemUsIGZyb21FdmVudCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDYWxlbmRhckV2ZW50LFxuICBDYWxlbmRhckV2ZW50VGltZXNDaGFuZ2VkRXZlbnQsXG4gIENhbGVuZGFyTW9udGhWaWV3QmVmb3JlUmVuZGVyRXZlbnQsXG4gIENhbGVuZGFyVmlldyxcbiAgQ2FsZW5kYXJXZWVrVmlld0JlZm9yZVJlbmRlckV2ZW50XG59IGZyb20gJ2FuZ3VsYXItY2FsZW5kYXInO1xuaW1wb3J0IHsgaXNGdXR1cmUsIGlzVG9kYXksIGlzU2FtZURheSwgZW5kT2ZXZWVrLCBhZGREYXlzLCBhZGRNaW51dGVzIH0gZnJvbSAnZGF0ZS1mbnMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IENvbG9yUGFyc2UgZnJvbSAnY29sb3ItcGFyc2UnO1xuaW1wb3J0IHsgSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICdAaWRlYS1pb25pYy9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZGVhLWFnZW5kYScsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZVVybDogJ2FnZW5kYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydhZ2VuZGEuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJREVBQWdlbmRhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIFRoZSBldmVudHMgdG8gZGlzcGxheSBpbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBldmVudHM6IEFnZW5kYUV2ZW50W10gPSBbXTtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGRheSBpbmRleGVzICgwID0gc3VuZGF5LCAxID0gbW9uZGF5LCBldGMuKSB0aGF0IHdpbGwgYmUgaGlkZGVuIG9uIHRoZSB2aWV3LlxuICAgKi9cbiAgQElucHV0KCkgZXhjbHVkZURheXM6IG51bWJlcltdID0gW107XG4gIC8qKlxuICAgKiBUaGUgZGF5IHN0YXJ0IGhvdXJzIGluIDI0IGhvdXIgdGltZS4gTXVzdCBiZSAwLTIzXG4gICAqL1xuICBASW5wdXQoKSBkYXlTdGFydEhvdXIgPSAwO1xuICAvKipcbiAgICogVGhlIGRheSBzdGFydCBob3VycyBpbiAyNCBob3VyIHRpbWUuIE11c3QgYmUgMC0yM1xuICAgKi9cbiAgQElucHV0KCkgZGF5RW5kSG91ciA9IDIzO1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzZWdtZW50cyBpbiBhbiBob3VyLiBNdXN0IGRpdmlkZSBlcXVhbGx5IGludG8gNjAuXG4gICAqL1xuICBASW5wdXQoKSBob3VyU2VnbWVudHMgPSAyO1xuICAvKipcbiAgICogV2hldGhlciB0byBvcGVuIHRoZSBjdXJyZW50IGRheSdzIGRldGFpbHMgcmlnaHQgYXdheSBpbiBtb250aCB2aWV3LlxuICAgKi9cbiAgQElucHV0KCkgYWN0aXZlRGF5SXNPcGVuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGUgdmlldyBtb2RlIGZvciB0aGUgYWdlbmRhLlxuICAgKi9cbiAgQElucHV0KCkgdmlldzogQ2FsZW5kYXJWaWV3ID0gQ2FsZW5kYXJWaWV3LldlZWs7XG4gIC8qKlxuICAgKiBUaGUgYWxsb3dlZCB2aWV3IG1vZGUgZm9yIHRoZSBhZ2VuZGEuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd2VkVmlld3MgPSBbQ2FsZW5kYXJWaWV3LkRheSwgQ2FsZW5kYXJWaWV3LldlZWssIENhbGVuZGFyVmlldy5Nb250aF07XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGJsb2NrIGFueSBkYXkvc2xvdCBpbiB0aGUgcGFzdC5cbiAgICovXG4gIEBJbnB1dCgpIG9ubHlGdXR1cmUgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNvbWUgbm90ZXMgdG8gc2hvdyB1bmRlcm5lYXRoIHRoZSBjYWxlbmRhcidzIGhlYWRlci5cbiAgICovXG4gIEBJbnB1dCgpIHRpdGxlTm90ZXM6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBmb3IgbmV3IGV2ZW50cyBjcmVhdGVkIGJ5IGRyYWcmZHJvcC5cbiAgICovXG4gIEBJbnB1dCgpIG5ld0V2ZW50VGVtcGxhdGU6IEFnZW5kYUV2ZW50ID0geyB0aXRsZTogJ05ldycsIHN0YXJ0OiBudWxsLCBtZXRhOiB7fSB9O1xuICAvKipcbiAgICogV2hldGhlciAoYW5kIGhvdykgdG8gYWxsb3cgdGhlIGNyZWF0aW9uIG9mIGV2ZW50cyBieSBkcmFnJmRyb3AuXG4gICAqIElmIGVuYWJsZWQsIG9uIG1vYmlsZSBpdCByZXF1aXJlcyB0aGUgYHBhcmVudENvbnRlbnRgIHRvIGJlIHNldCBmb3IgYSBjb3JyZWN0IGV4ZWN1dGlvbi5cbiAgICovXG4gIEBJbnB1dCgpIGFsbG93RHJhZ1RvQ3JlYXRlOiBEcmFnVG9DcmVhdGVPcHRpb25zID0gRHJhZ1RvQ3JlYXRlT3B0aW9ucy5ESVNBQkxFRDtcbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgaW9uLWNvbnRlbnQsIGluIGNhc2Ugd2Ugd2FudCB0byBjb250cm9sIGl0cyBzY3JvbGxhYmlsaXR5IGZvciBkcmFnJmRyb3AgZmVhdHVyZXMuXG4gICAqL1xuICBASW5wdXQoKSBwYXJlbnRDb250ZW50OiBJb25Db250ZW50O1xuICAvKipcbiAgICogVHJpZ2dlciB3aGVuIGFuIGV2ZW50IGlzIHNlbGVjdGVkLlxuICAgKi9cbiAgQE91dHB1dCgpIHNlbGVjdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxBZ2VuZGFFdmVudD4oKTtcbiAgLyoqXG4gICAqIFRyaWdnZXIgd2hlbiBhIGRheSBpcyBzZWxlY3RlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBzZWxlY3REYXkgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIC8qKlxuICAgKiBUcmlnZ2VyIHdoZW4gYSB0aW1lIHNsb3QgaXMgc2VsZWN0ZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0U2xvdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcbiAgLyoqXG4gICAqIFRyaWdnZXIgd2hlbiBhIG5ldyBldmVudCBpcyBhZGRlZCBieSBkcmFnIGFuZCBkcm9wLlxuICAgKi9cbiAgQE91dHB1dCgpIG5ld0V2ZW50QnlEcmFnID0gbmV3IEV2ZW50RW1pdHRlcjxBZ2VuZGFFdmVudD4oKTtcbiAgLyoqXG4gICAqIFRyaWdnZXIgd2hlbiBhbiBldmVudCBjaGFuZ2VkIGRhdGUgKGRyYWcmZHJvcCBvciByZXNpemUpLlxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxBZ2VuZGFFdmVudD4oKTtcbiAgLyoqXG4gICAqIFRyaWdnZXIgd2hlbiB0aGUgdmlldyBkYXRlIG9mIHJlZmVyZW5jZSBjaGFuZ2VkIChiZWNhdXNlIHdlIG1vdmVkIGluc2lkZSB0aGUgY2FsZW5kYXIpLlxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZURhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIC8qKlxuICAgKiBUcmlnZ2VyIGJlZm9yZSB0aGUgcmVuZGVyaW5nIG9mIHRoZSB3ZWVrIG9yIGRheSB2aWV3LlxuICAgKi9cbiAgQE91dHB1dCgpIGJlZm9yZVdlZWtPckRheVZpZXdSZW5kZXJFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxDYWxlbmRhcldlZWtWaWV3QmVmb3JlUmVuZGVyRXZlbnQ+KCk7XG4gIC8qKlxuICAgKiBUcmlnZ2VyIGJlZm9yZSB0aGUgcmVuZGVyaW5nIG9mIHRoZSBtb250aCB2aWV3LlxuICAgKi9cbiAgQE91dHB1dCgpIGJlZm9yZU1vbnRoVmlld1JlbmRlckVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPENhbGVuZGFyTW9udGhWaWV3QmVmb3JlUmVuZGVyRXZlbnQ+KCk7XG5cbiAgQ2FsZW5kYXJWaWV3ID0gQ2FsZW5kYXJWaWV3O1xuICBBdHRlbmRhbmNlID0gRXZlbnRBdHRlbmRhbmNlO1xuICB2aWV3RGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHJlZnJlc2ggPSBuZXcgU3ViamVjdCgpO1xuICAvKipcbiAgICogQGhpZGVcbiAgICovXG4gIGxvY2FsZTogc3RyaW5nO1xuICAvKipcbiAgICogQGhpZGVcbiAgICovXG4gIHdlZWtTdGFydHNPbjogMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNjtcblxuICBkYXJrTW9kZSA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJykubWF0Y2hlcztcblxuICBwcml2YXRlIF9jZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIF9wbGF0Zm9ybSA9IGluamVjdChQbGF0Zm9ybSk7XG4gIF90cmFuc2xhdGUgPSBpbmplY3QoSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5fdHJhbnNsYXRlLmdldEN1cnJlbnRMYW5nKCk7XG4gICAgLy8gaW4gY2FzZSBvZiBJdGFsaWFuIGxvY2FsZSB0aGUgc3RhcnRpbmcgZGF5IGZvciB0aGUgd2VlayBpcyBtb25kYXkgKDEpLCBvdGhlcndpc2Ugc3VuZGF5ICgwKVxuICAgIHRoaXMud2Vla1N0YXJ0c09uID0gdGhpcy5sb2NhbGUgPT09ICdpdCcgPyAxIDogMDtcbiAgfVxuICBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXMoJ21vYmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBzb21lIGNoZWNrcyBiZWZvcmUgdGhlIG1vbnRoIHZpZXcgaXMgcmVuZGVyZWQgKGUuZy4gZGlzYWJsZSBpbnZhbGlkIGRheXMpLlxuICAgKi9cbiAgYmVmb3JlTW9udGhWaWV3UmVuZGVyKGV2ZW50OiBDYWxlbmRhck1vbnRoVmlld0JlZm9yZVJlbmRlckV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5iZWZvcmVNb250aFZpZXdSZW5kZXJFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgIGNvbnN0IHsgYm9keSB9ID0gZXZlbnQ7XG4gICAgYm9keS5mb3JFYWNoKGRheSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGF0ZUlzVmFsaWQoZGF5LmRhdGUpKSBkYXkuY3NzQ2xhc3MgPSAnY2FsLWRpc2FibGVkJztcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUnVuIHNvbWUgY2hlY2tzIGJlZm9yZSB0aGUgd2Vlay9kYXkgdmlldyBpcyByZW5kZXJlZCAoZS5nLiBkaXNhYmxlIGludmFsaWQgZGF5cykuXG4gICAqL1xuICBiZWZvcmVXZWVrT3JEYXlWaWV3UmVuZGVyKGV2ZW50OiBDYWxlbmRhcldlZWtWaWV3QmVmb3JlUmVuZGVyRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmJlZm9yZVdlZWtPckRheVZpZXdSZW5kZXJFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgIGNvbnN0IHsgaGVhZGVyLCBob3VyQ29sdW1ucyB9ID0gZXZlbnQ7XG4gICAgaGVhZGVyLmZvckVhY2goZGF5ID0+IHtcbiAgICAgIGlmICghdGhpcy5kYXRlSXNWYWxpZChkYXkuZGF0ZSkpIGRheS5jc3NDbGFzcyA9ICdjYWwtZGlzYWJsZWQnO1xuICAgIH0pO1xuICAgIGhvdXJDb2x1bW5zLmZvckVhY2goaG91ckNvbCA9PiB7XG4gICAgICBob3VyQ29sLmhvdXJzLmZvckVhY2goaG91ciA9PiB7XG4gICAgICAgIGhvdXIuc2VnbWVudHMuZm9yRWFjaChzZWdtZW50ID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuZGF0ZUlzVmFsaWQoc2VnbWVudC5kYXRlKSkgc2VnbWVudC5jc3NDbGFzcyA9ICdjYWwtZGlzYWJsZWQnO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGF0ZUlzVmFsaWQoZGF0ZTogYW55LCBzYW1lRGF5SXNWYWxpZD86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMub25seUZ1dHVyZSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGlzRnV0dXJlKGRhdGUpIHx8IChzYW1lRGF5SXNWYWxpZCA/IGlzVG9kYXkoZGF0ZSkgOiBmYWxzZSk7XG4gIH1cblxuICBzZXRWaWV3KHZpZXc6IENhbGVuZGFyVmlldyk6IHZvaWQge1xuICAgIHRoaXMudmlldyA9IHZpZXc7XG4gIH1cblxuICB2aWV3RGF0ZUNoYW5nZWQobmV3RGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZXcgPT09IENhbGVuZGFyVmlldy5Nb250aCkgdGhpcy5hY3RpdmVEYXlJc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmNoYW5nZURhdGUuZW1pdChuZXdEYXRlKTtcbiAgfVxuXG4gIGNoYW5nZURheSh7IGRhdGUsIGV2ZW50cyB9OiB7IGRhdGU6IERhdGU7IGV2ZW50czogQWdlbmRhRXZlbnRbXSB9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGVJc1ZhbGlkKGRhdGUsIHRydWUpKSByZXR1cm47XG4gICAgaWYgKChpc1NhbWVEYXkodGhpcy52aWV3RGF0ZSwgZGF0ZSkgJiYgdGhpcy5hY3RpdmVEYXlJc09wZW4gPT09IHRydWUpIHx8ICFldmVudHMgfHwgZXZlbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMuYWN0aXZlRGF5SXNPcGVuID0gZmFsc2U7XG4gICAgZWxzZSB0aGlzLmFjdGl2ZURheUlzT3BlbiA9IHRydWU7XG4gICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG4gIH1cblxuICBldmVudFRpbWVzQ2hhbmdlZCh7IGV2ZW50LCBuZXdTdGFydCwgbmV3RW5kIH06IENhbGVuZGFyRXZlbnRUaW1lc0NoYW5nZWRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0YXJ0ID0gbmV3U3RhcnQ7XG4gICAgZXZlbnQuZW5kID0gbmV3RW5kO1xuICAgIHRoaXMuZXZlbnRzID0gdGhpcy5ldmVudHMuc2xpY2UoKTtcbiAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZ2V0QWx0ZXJuYXRlQ29sb3IoY29sb3I6IHN0cmluZywgYW1vdW50OiBudW1iZXIsIG9wYWNpdHk/OiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghY29sb3I/LnRyaW0oKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBhbHQgPSBDb2xvclBhcnNlKGNvbG9yLnRyaW0oKSk7XG4gICAgY29uc3QgciA9IE1hdGgubWF4KE1hdGgubWluKDI1NSwgTnVtYmVyKGFsdC52YWx1ZXNbMF0pICsgYW1vdW50KSwgMCk7XG4gICAgY29uc3QgZyA9IE1hdGgubWF4KE1hdGgubWluKDI1NSwgTnVtYmVyKGFsdC52YWx1ZXNbMV0pICsgYW1vdW50KSwgMCk7XG4gICAgY29uc3QgYiA9IE1hdGgubWF4KE1hdGgubWluKDI1NSwgTnVtYmVyKGFsdC52YWx1ZXNbMl0pICsgYW1vdW50KSwgMCk7XG4gICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sICR7b3BhY2l0eSB8fCAxfSlgO1xuICB9XG5cbiAgZ2V0VG9vbHRpcENvbnRlbnQoZXZlbnQ6IEFnZW5kYUV2ZW50KTogc3RyaW5nIHtcbiAgICBpZiAoIWV2ZW50KSByZXR1cm4gJyc7XG4gICAgbGV0IHN0ciA9IGV2ZW50LnRpdGxlID8gJzxiPicgKyBldmVudC50aXRsZSArICc8L2I+JyA6ICcnO1xuICAgIGlmIChldmVudC5kZXNjcmlwdGlvbikgc3RyID0gc3RyLmNvbmNhdCgnPGJyPicsIGV2ZW50LmRlc2NyaXB0aW9uKTtcbiAgICBpZiAoZXZlbnQuaWNvbnMpIGV2ZW50Lmljb25zLmZvckVhY2goeCA9PiAoc3RyID0gc3RyLmNvbmNhdCgnPGJyPicsICc8aT4nLCB4LnRpdGxlLCAnPC9pPicpKSk7XG4gICAgaWYgKGV2ZW50LmF2YXRhcnMgJiYgZXZlbnQuYXZhdGFycy5sZW5ndGgpIHtcbiAgICAgIHN0ciA9IHN0ci5jb25jYXQoJzxicj48YnI+ficpO1xuICAgICAgZXZlbnQuYXZhdGFycy5mb3JFYWNoKHggPT4gKHN0ciA9IHN0ci5jb25jYXQoJzxicj4nLCB4LnRpdGxlKSkpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgZ2V0UHJldmlld0Rlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBkZXNjcmlwdGlvbiAmJiBkZXNjcmlwdGlvbi5sZW5ndGggPiAxMDAgPyBkZXNjcmlwdGlvbi5zbGljZSgwLCAxMDApLmNvbmNhdCgnLi4uJykgOiBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHN0YXJ0RHJhZ1RvQ3JlYXRlKGV2ZW50OiBFdmVudCwgc2VnbWVudERhdGU6IERhdGUsIHNlZ21lbnRFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hbGxvd0RyYWdUb0NyZWF0ZSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMucGFyZW50Q29udGVudCkgdGhpcy5wYXJlbnRDb250ZW50LnNjcm9sbFkgPSBmYWxzZTtcblxuICAgIGNvbnN0IGV2ZW50QnlEcmFnQW5kRHJvcDogQWdlbmRhRXZlbnQgPSB7IC4uLnRoaXMubmV3RXZlbnRUZW1wbGF0ZSwgc3RhcnQ6IHNlZ21lbnREYXRlIH07XG4gICAgdGhpcy5ldmVudHMgPSBbLi4udGhpcy5ldmVudHMsIGV2ZW50QnlEcmFnQW5kRHJvcF07XG5cbiAgICBjb25zdCBzZWdtZW50UG9zaXRpb24gPSBzZWdtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlbmRPZlZpZXcgPSBlbmRPZldlZWsodGhpcy52aWV3RGF0ZSwgeyB3ZWVrU3RhcnRzT246IHRoaXMud2Vla1N0YXJ0c09uIH0pO1xuXG4gICAgY29uc3Qgd2hpbGVEcmFnZ2luZyA9IChkcmFnZ2luZ0V2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBjbGllbnRZLCBjbGllbnRYIH0gPVxuICAgICAgICBkcmFnZ2luZ0V2ZW50LnR5cGUgPT09ICd0b3VjaG1vdmUnID8gKGRyYWdnaW5nRXZlbnQgYXMgVG91Y2hFdmVudCkudG91Y2hlc1swXSA6IChkcmFnZ2luZ0V2ZW50IGFzIE1vdXNlRXZlbnQpO1xuXG4gICAgICBjb25zdCBtaW51dGVzRGlmZiA9IGNlaWxUb05lYXJlc3QoY2xpZW50WSAtIHNlZ21lbnRQb3NpdGlvbi50b3AsIDMwKTtcbiAgICAgIGNvbnN0IGRheXNEaWZmID0gZmxvb3JUb05lYXJlc3QoY2xpZW50WCAtIHNlZ21lbnRQb3NpdGlvbi5sZWZ0LCBzZWdtZW50UG9zaXRpb24ud2lkdGgpIC8gc2VnbWVudFBvc2l0aW9uLndpZHRoO1xuXG4gICAgICBsZXQgbmV3RW5kOiBEYXRlO1xuICAgICAgaWYgKHRoaXMuYWxsb3dEcmFnVG9DcmVhdGUgPT09IERyYWdUb0NyZWF0ZU9wdGlvbnMuT05MWV9TQU1FX0RBWSkgbmV3RW5kID0gYWRkTWludXRlcyhzZWdtZW50RGF0ZSwgbWludXRlc0RpZmYpO1xuICAgICAgZWxzZSBuZXdFbmQgPSBhZGREYXlzKGFkZE1pbnV0ZXMoc2VnbWVudERhdGUsIG1pbnV0ZXNEaWZmKSwgZGF5c0RpZmYpO1xuXG4gICAgICBpZiAobmV3RW5kID4gc2VnbWVudERhdGUgJiYgbmV3RW5kIDwgZW5kT2ZWaWV3KSBldmVudEJ5RHJhZ0FuZERyb3AuZW5kID0gbmV3RW5kO1xuICAgICAgcmVmcmVzaFZpZXcoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW5kT2ZEcmFnID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHRoaXMucGFyZW50Q29udGVudCkgdGhpcy5wYXJlbnRDb250ZW50LnNjcm9sbFkgPSB0cnVlO1xuICAgICAgZXZlbnRCeURyYWdBbmREcm9wLmVuZCA9IHRoaXMuZ2V0Rml4ZWRFbmREYXRlV2l0aE1pbmltdW1TZWdtZW50RHVyYXRpb24oZXZlbnRCeURyYWdBbmREcm9wKTtcbiAgICAgIHJlZnJlc2hWaWV3KCk7XG4gICAgICB0aGlzLm5ld0V2ZW50QnlEcmFnLmVtaXQoZXZlbnRCeURyYWdBbmREcm9wKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVmcmVzaFZpZXcgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLmV2ZW50cyA9IFsuLi50aGlzLmV2ZW50c107XG4gICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH07XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICd0b3VjaG1vdmUnKVxuICAgICAgICAucGlwZShmaW5hbGl6ZShlbmRPZkRyYWcpLCB0YWtlVW50aWwoZnJvbUV2ZW50KGRvY3VtZW50LCAndG91Y2hlbmQnKSkpXG4gICAgICAgIC5zdWJzY3JpYmUod2hpbGVEcmFnZ2luZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlbW92ZScpXG4gICAgICAgIC5waXBlKGZpbmFsaXplKGVuZE9mRHJhZyksIHRha2VVbnRpbChmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZXVwJykpKVxuICAgICAgICAuc3Vic2NyaWJlKHdoaWxlRHJhZ2dpbmcpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldEZpeGVkRW5kRGF0ZVdpdGhNaW5pbXVtU2VnbWVudER1cmF0aW9uKGFnZW5kYUJvb2tpbmc6IEFnZW5kYUV2ZW50KTogRGF0ZSB7XG4gICAgY29uc3QgZml4ZWRFbmQgPSBuZXcgRGF0ZShhZ2VuZGFCb29raW5nLmVuZCB8fCBhZ2VuZGFCb29raW5nLnN0YXJ0KTtcbiAgICBjb25zdCBzZWdtZW50U2l6ZUluTWludXRlcyA9IDYwIC8gdGhpcy5ob3VyU2VnbWVudHM7XG4gICAgaWYgKGZpeGVkRW5kLmdldFRpbWUoKSA8PSBhZ2VuZGFCb29raW5nLnN0YXJ0LmdldFRpbWUoKSArIHNlZ21lbnRTaXplSW5NaW51dGVzICogNjAgKiAxMDAwKVxuICAgICAgZml4ZWRFbmQuc2V0TWludXRlcyhhZ2VuZGFCb29raW5nLnN0YXJ0LmdldE1pbnV0ZXMoKSArIHNlZ21lbnRTaXplSW5NaW51dGVzKTtcbiAgICByZXR1cm4gZml4ZWRFbmQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJpY2hlciB2ZXJzaW9uIG9mIHRoZSBjbGFzc2ljIENhbGVuZGFyRXZlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbmRhRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcbiAgLyoqXG4gICAqIEEgYnJpZWYgZGVzY3JpcHRpb24gZm9yIHRoZSBldmVudCAoZS5nLiBjdXN0b21lciwgYWRkcmVzcywgZXRjLikuXG4gICAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICBsb2NhdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBVUkxzIG9mIGltYWdlcyB0byBzaG93IGFzIHNtYWxsIGF2YXRhcnMuXG4gICAqL1xuICBhdmF0YXJzPzogeyBpZDogc3RyaW5nOyB1cmw6IHN0cmluZzsgdGl0bGU6IHN0cmluZyB9W107XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgaW9uLWljb25zIHRvIHNob3cuXG4gICAqL1xuICBpY29ucz86IHsgbmFtZTogc3RyaW5nOyB0aXRsZTogc3RyaW5nIH1bXTtcbiAgLyoqXG4gICAqIFRoZSBjb2xvcnMgb2YgdGhlIGV2ZW50IGRpc3BsYXllZC5cbiAgICovXG4gIGNvbG9yPzogeyBwcmltYXJ5OiBzdHJpbmc7IHNlY29uZGFyeT86IHN0cmluZyB9IHwgYW55O1xuICAvKipcbiAgICogV2hldGhlciB0aGUgZXZlbnQgaXMgZXh0ZXJuYWw7IGV4dGVybmFsIGV2ZW50cyBhcmUgbGVzcyBpbXBvcnRhbnQgVUktd2lzZS5cbiAgICovXG4gIGV4dGVybmFsPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBhdHRlbmRhbmNlIHN0YXR1cyB0byB0aGlzIGV2ZW50LCBpZiBhbnkuXG4gICAqL1xuICBhdHRlbmRhbmNlPzogRXZlbnRBdHRlbmRhbmNlO1xuICAvKipcbiAgICogQSBzdGFuZGFyZCBhbmQgdW5pcXVlIGlkIGZvciB0aGUgZXZlbnQsIHZhbGlkIGFjcm9zcyBtdWx0aXBsZSBzb3VyY2VzLlxuICAgKi9cbiAgaUNhbFVJRD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQb3NzaWJsZSBhdHRlbmRhbmNlIHN0YXR1c2VzIGZvciB0aGUgZXZlbnQuXG4gKi9cbmV4cG9ydCBlbnVtIEV2ZW50QXR0ZW5kYW5jZSB7XG4gIERFQ0xJTkVEID0gLTEsXG4gIE5FRURTX0FDVElPTiA9IDAsXG4gIFRFTlRBVElWRSxcbiAgQUNDRVBURURcbn1cblxuLyoqXG4gKiBUaGUgb3B0aW9ucyB0byBhbGxvdyAob3Igbm90KSBkcmFnJmRyb3AgdG8gY3JlYXRlIGEgbmV3IGV2ZW50LlxuICovXG5leHBvcnQgZW51bSBEcmFnVG9DcmVhdGVPcHRpb25zIHtcbiAgRElTQUJMRUQgPSAwLFxuICBPTkxZX1NBTUVfREFZID0gMSxcbiAgRlJFRSA9IDJcbn1cblxuY29uc3QgZmxvb3JUb05lYXJlc3QgPSAoYW1vdW50OiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKTogbnVtYmVyID0+IE1hdGguZmxvb3IoYW1vdW50IC8gcHJlY2lzaW9uKSAqIHByZWNpc2lvbjtcbmNvbnN0IGNlaWxUb05lYXJlc3QgPSAoYW1vdW50OiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKTogbnVtYmVyID0+IE1hdGguY2VpbChhbW91bnQgLyBwcmVjaXNpb24pICogcHJlY2lzaW9uO1xuIiwiPGRpdiBjbGFzcz1cImFnZW5kYVwiPlxuICA8IS0tIFRPT0xCQVIgLS0+XG4gIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxpb24tY29sXG4gICAgICBjbGFzcz1cImlvbi1hbGlnbi1zZWxmLWNlbnRlciBpb24tdGV4dC1yaWdodFwiXG4gICAgICBbc2l6ZV09XCI1XCJcbiAgICAgIFtzaXplU21dPVwiM1wiXG4gICAgICBbcHVzaFNtXT1cIjVcIlxuICAgICAgW3NpemVMZ109XCIyXCJcbiAgICAgIFtwdXNoTGddPVwiOFwiXG4gICAgPlxuICAgICAgQGlmIChhbGxvd2VkVmlld3MubGVuZ3RoID4gMSkge1xuICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgY2xhc3M9XCJjYWxlbmRhclZpZXdTZWxlY3RvclwiPlxuICAgICAgICAgIDxpb24tc2VsZWN0XG4gICAgICAgICAgICBpbnRlcmZhY2U9XCJwb3BvdmVyXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2aWV3XCJcbiAgICAgICAgICAgIChpb25DaGFuZ2UpPVwiJGV2ZW50Py5kZXRhaWwgPyBzZXRWaWV3KCRldmVudC5kZXRhaWwudmFsdWUpIDogbnVsbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGZvciAodmlldyBvZiBhbGxvd2VkVmlld3M7IHRyYWNrIHZpZXcpIHtcbiAgICAgICAgICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uIFt2YWx1ZV09XCJ2aWV3XCI+XG4gICAgICAgICAgICAgICAge3sgJ0lERUFfQUdFTkRBLicgKyB2aWV3IHwgdXBwZXJjYXNlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvaW9uLXNlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tc2VsZWN0PlxuICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgfVxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbFxuICAgICAgY2xhc3M9XCJpb24tYWxpZ24tc2VsZi1jZW50ZXIgaW9uLXRleHQtcmlnaHRcIlxuICAgICAgW3NpemVdPVwiN1wiXG4gICAgICBbc2l6ZVNtXT1cIjRcIlxuICAgICAgW3B1c2hTbV09XCI1XCJcbiAgICAgIFtzaXplTGddPVwiMlwiXG4gICAgICBbcHVzaExnXT1cIjhcIlxuICAgID5cbiAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgIGNvbG9yPVwiZGFya1wiXG4gICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIG13bENhbGVuZGFyUHJldmlvdXNWaWV3XG4gICAgICAgIFt2aWV3XT1cInZpZXdcIlxuICAgICAgICBbKHZpZXdEYXRlKV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICh2aWV3RGF0ZUNoYW5nZSk9XCJ2aWV3RGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1iYWNrLW91dGxpbmVcIiBzbG90PVwiaWNvbi1vbmx5XCIgLz5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgIGNvbG9yPVwiZGFya1wiXG4gICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIG13bENhbGVuZGFyVG9kYXlcbiAgICAgICAgWyh2aWV3RGF0ZSldPVwidmlld0RhdGVcIlxuICAgICAgICAodmlld0RhdGVDaGFuZ2UpPVwidmlld0RhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInRvZGF5LW91dGxpbmVcIiBzbG90PVwiaWNvbi1vbmx5XCIgLz5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgIGNvbG9yPVwiZGFya1wiXG4gICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIG13bENhbGVuZGFyTmV4dFZpZXdcbiAgICAgICAgW3ZpZXddPVwidmlld1wiXG4gICAgICAgIFsodmlld0RhdGUpXT1cInZpZXdEYXRlXCJcbiAgICAgICAgKHZpZXdEYXRlQ2hhbmdlKT1cInZpZXdEYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWZvcndhcmQtb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIiAvPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1hbGlnbi1zZWxmLWNlbnRlciB0aXRsZUNvbFwiIFtzaXplXT1cIjEyXCIgW3NpemVTbV09XCI1XCIgW3B1bGxTbV09XCI3XCIgW3NpemVMZ109XCI4XCIgW3B1bGxMZ109XCI0XCI+XG4gICAgICA8aDI+e3sgdmlld0RhdGUgfCBjYWxlbmRhckRhdGU6IHZpZXcgKyAnVmlld1RpdGxlJyA6IGxvY2FsZSB9fTwvaDI+XG4gICAgICBAaWYgKHRpdGxlTm90ZXMpIHtcbiAgICAgICAgPHA+e3sgdGl0bGVOb3RlcyB9fTwvcD5cbiAgICAgIH1cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cbiAgPCEtLSBURU1QTEFURVMgKHRvdWNoIG9ubHkgd2hhdCdzIG5lY2Vzc2FyeSBhbmQgbGVhdmUgZXZlcnl0aGluZyBlbHNlIGFzIGl0IGlzKSAtLT5cbiAgPG5nLXRlbXBsYXRlICNldmVudFRpdGxlVGVtcGxhdGUgbGV0LWV2ZW50PVwiZXZlbnRcIiBsZXQtdmlldz1cInZpZXdcIj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJjYWwtZXZlbnQtdGl0bGVcIlxuICAgICAgW2NsYXNzLm5vV3JhcF09XCJldmVudC5hbGxEYXlcIlxuICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwie30gfCBjYWxlbmRhckExMXk6ICdoaWRlRXZlbnRUaXRsZSdcIlxuICAgID5cbiAgICAgIHt7IGV2ZW50LnRpdGxlIHwgY2FsZW5kYXJFdmVudFRpdGxlOiB2aWV3IDogZXZlbnQgfX1cbiAgICAgIEBpZiAoIWV2ZW50LmFsbERheSkge1xuICAgICAgICA8cD57eyBnZXRQcmV2aWV3RGVzY3JpcHRpb24oZXZlbnQuZGVzY3JpcHRpb24pIH19PC9wPlxuICAgICAgfVxuICAgIDwvc3Bhbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2V2ZW50VGVtcGxhdGVcbiAgICBsZXQtd2Vla0V2ZW50PVwid2Vla0V2ZW50XCJcbiAgICBsZXQtdG9vbHRpcFBsYWNlbWVudD1cInRvb2x0aXBQbGFjZW1lbnRcIlxuICAgIGxldC1ldmVudENsaWNrZWQ9XCJldmVudENsaWNrZWRcIlxuICAgIGxldC10b29sdGlwVGVtcGxhdGU9XCJ0b29sdGlwVGVtcGxhdGVcIlxuICAgIGxldC10b29sdGlwQXBwZW5kVG9Cb2R5PVwidG9vbHRpcEFwcGVuZFRvQm9keVwiXG4gICAgbGV0LXRvb2x0aXBEaXNhYmxlZD1cInRvb2x0aXBEaXNhYmxlZFwiXG4gICAgbGV0LXRvb2x0aXBEZWxheT1cInRvb2x0aXBEZWxheVwiXG4gICAgbGV0LWNvbHVtbj1cImNvbHVtblwiXG4gICAgbGV0LWRheXNJbldlZWs9XCJkYXlzSW5XZWVrXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FsLWV2ZW50XCJcbiAgICAgIFtjbGFzcy5leHRlcm5hbF09XCJ3ZWVrRXZlbnQuZXZlbnQuZXh0ZXJuYWxcIlxuICAgICAgW2NsYXNzLm5lZWRzQWN0aW9uXT1cIkF0dGVuZGFuY2UuTkVFRFNfQUNUSU9OID09PSB3ZWVrRXZlbnQuZXZlbnQuYXR0ZW5kYW5jZVwiXG4gICAgICBbY2xhc3MuZGVjbGluZWRdPVwiQXR0ZW5kYW5jZS5ERUNMSU5FRCA9PT0gd2Vla0V2ZW50LmV2ZW50LmF0dGVuZGFuY2VcIlxuICAgICAgW2NsYXNzLnRlbnRhdGl2ZV09XCJBdHRlbmRhbmNlLlRFTlRBVElWRSA9PT0gd2Vla0V2ZW50LmV2ZW50LmF0dGVuZGFuY2VcIlxuICAgICAgW3N0eWxlLmJvcmRlci1sZWZ0LWNvbG9yXT1cIndlZWtFdmVudC5ldmVudC5jb2xvcj8ucHJpbWFyeVwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiZ2V0QWx0ZXJuYXRlQ29sb3Iod2Vla0V2ZW50LmV2ZW50LmNvbG9yPy5wcmltYXJ5LCBkYXJrTW9kZSA/IDgwIDogLTQwKVwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJnZXRBbHRlcm5hdGVDb2xvcih3ZWVrRXZlbnQuZXZlbnQuY29sb3I/LnByaW1hcnksIGRhcmtNb2RlID8gNjAgOiA4MCwgMC4yKVwiXG4gICAgICBbbXdsQ2FsZW5kYXJUb29sdGlwXT1cIiF0b29sdGlwRGlzYWJsZWQgJiYgIWlzTW9iaWxlKCkgPyBnZXRUb29sdGlwQ29udGVudCh3ZWVrRXZlbnQuZXZlbnQpIDogJydcIlxuICAgICAgW3Rvb2x0aXBQbGFjZW1lbnRdPVwidG9vbHRpcFBsYWNlbWVudFwiXG4gICAgICBbdG9vbHRpcEV2ZW50XT1cIndlZWtFdmVudC50ZW1wRXZlbnQgfHwgd2Vla0V2ZW50LmV2ZW50XCJcbiAgICAgIFt0b29sdGlwVGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlXCJcbiAgICAgIFt0b29sdGlwQXBwZW5kVG9Cb2R5XT1cInRvb2x0aXBBcHBlbmRUb0JvZHlcIlxuICAgICAgW3Rvb2x0aXBEZWxheV09XCJ0b29sdGlwRGVsYXlcIlxuICAgICAgKG13bENsaWNrKT1cImV2ZW50Q2xpY2tlZC5lbWl0KHsgc291cmNlRXZlbnQ6ICRldmVudCB9KVwiXG4gICAgICAobXdsS2V5ZG93bkVudGVyKT1cImV2ZW50Q2xpY2tlZC5lbWl0KHsgc291cmNlRXZlbnQ6ICRldmVudCB9KVwiXG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgcm9sZT1cImFwcGxpY2F0aW9uXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgIHsgZXZlbnQ6IHdlZWtFdmVudC50ZW1wRXZlbnQgfHwgd2Vla0V2ZW50LmV2ZW50LCBsb2NhbGU6IGxvY2FsZSB9IHwgY2FsZW5kYXJBMTF5OiAnZXZlbnREZXNjcmlwdGlvbidcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPG13bC1jYWxlbmRhci1ldmVudC1hY3Rpb25zIFtldmVudF09XCJ3ZWVrRXZlbnQudGVtcEV2ZW50IHx8IHdlZWtFdmVudC5ldmVudFwiIC8+XG4gICAgICAmbmdzcDtcbiAgICAgIDxtd2wtY2FsZW5kYXItZXZlbnQtdGl0bGVcbiAgICAgICAgW2V2ZW50XT1cIndlZWtFdmVudC50ZW1wRXZlbnQgfHwgd2Vla0V2ZW50LmV2ZW50XCJcbiAgICAgICAgW2N1c3RvbVRlbXBsYXRlXT1cImV2ZW50VGl0bGVUZW1wbGF0ZVwiXG4gICAgICAgIFt2aWV3XT1cImRheXNJbldlZWsgPT09IDEgPyAnZGF5JyA6ICd3ZWVrJ1wiXG4gICAgICA+XG4gICAgICA8L213bC1jYWxlbmRhci1ldmVudC10aXRsZT5cbiAgICAgIEBpZiAoIXdlZWtFdmVudC5ldmVudC5hbGxEYXkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50R2FkZ2V0c1wiPlxuICAgICAgICAgIEBmb3IgKGljb24gb2Ygd2Vla0V2ZW50LmV2ZW50Lmljb25zOyB0cmFjayBpY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiaWNvbi5uYW1lXCIgW3RpdGxlXT1cImljb24udGl0bGVcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZm9yIChhdmF0YXIgb2Ygd2Vla0V2ZW50LmV2ZW50LmF2YXRhcnM7IHRyYWNrIGF2YXRhcikge1xuICAgICAgICAgICAgPGlkZWEtdXNlci1hdmF0YXIgc2l6ZT1cIm1pbmlcIiBbc3JjXT1cImF2YXRhci51cmxcIiBbbmFtZV09XCJhdmF0YXIudGl0bGVcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZVxuICAgICNob3VyU2VnbWVudFRlbXBsYXRlXG4gICAgbGV0LXNlZ21lbnQ9XCJzZWdtZW50XCJcbiAgICBsZXQtbG9jYWxlPVwibG9jYWxlXCJcbiAgICBsZXQtc2VnbWVudEhlaWdodD1cInNlZ21lbnRIZWlnaHRcIlxuICAgIGxldC1pc1RpbWVMYWJlbD1cImlzVGltZUxhYmVsXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgICNzZWdtZW50RWxlbWVudFxuICAgICAgY2xhc3M9XCJjYWwtaG91ci1zZWdtZW50XCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwic2VnbWVudEhlaWdodFwiXG4gICAgICBbY2xhc3MuY2FsLWhvdXItc3RhcnRdPVwic2VnbWVudC5pc1N0YXJ0XCJcbiAgICAgIFtjbGFzcy5jYWwtYWZ0ZXItaG91ci1zdGFydF09XCIhc2VnbWVudC5pc1N0YXJ0XCJcbiAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3NcIlxuICAgICAgKG1vdXNlZG93bik9XCJhbGxvd0RyYWdUb0NyZWF0ZSA/IHN0YXJ0RHJhZ1RvQ3JlYXRlKCRldmVudCwgc2VnbWVudC5kYXRlLCBzZWdtZW50RWxlbWVudCkgOiBudWxsXCJcbiAgICAgICh0b3VjaHN0YXJ0KT1cImFsbG93RHJhZ1RvQ3JlYXRlID8gc3RhcnREcmFnVG9DcmVhdGUoJGV2ZW50LCBzZWdtZW50LmRhdGUsIHNlZ21lbnRFbGVtZW50KSA6IG51bGxcIlxuICAgID5cbiAgICAgIEBpZiAoaXNUaW1lTGFiZWwpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbC10aW1lXCI+XG4gICAgICAgICAge3sgc2VnbWVudC5kYXRlIHwgY2FsZW5kYXJEYXRlOiAnd2Vla1ZpZXdIb3VyJyA6IGxvY2FsZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPCEtLSBWSUVXUyAtLT5cbiAgPGRpdj5cbiAgICBAc3dpdGNoICh2aWV3KSB7XG4gICAgICBAY2FzZSAoQ2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgIDxtd2wtY2FsZW5kYXItbW9udGgtdmlld1xuICAgICAgICAgIFt2aWV3RGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgW2V2ZW50c109XCJldmVudHNcIlxuICAgICAgICAgIFtyZWZyZXNoXT1cInJlZnJlc2hcIlxuICAgICAgICAgIFthY3RpdmVEYXlJc09wZW5dPVwiYWN0aXZlRGF5SXNPcGVuXCJcbiAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgW2V4Y2x1ZGVEYXlzXT1cImV4Y2x1ZGVEYXlzXCJcbiAgICAgICAgICBbd2Vla1N0YXJ0c09uXT1cIndlZWtTdGFydHNPblwiXG4gICAgICAgICAgW2V2ZW50VGl0bGVUZW1wbGF0ZV09XCJldmVudFRpdGxlVGVtcGxhdGVcIlxuICAgICAgICAgIChldmVudENsaWNrZWQpPVwic2VsZWN0RXZlbnQuZW1pdCgkZXZlbnQuZXZlbnQpXCJcbiAgICAgICAgICAoZXZlbnRUaW1lc0NoYW5nZWQpPVwiZXZlbnRUaW1lc0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGRheUNsaWNrZWQpPVwiY2hhbmdlRGF5KCRldmVudC5kYXkpXCJcbiAgICAgICAgICAoYmVmb3JlVmlld1JlbmRlcik9XCJiZWZvcmVNb250aFZpZXdSZW5kZXIoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9td2wtY2FsZW5kYXItbW9udGgtdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlIChDYWxlbmRhclZpZXcuV2Vlaykge1xuICAgICAgICA8bXdsLWNhbGVuZGFyLXdlZWstdmlld1xuICAgICAgICAgIFt2aWV3RGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgW2V2ZW50c109XCJldmVudHNcIlxuICAgICAgICAgIFtyZWZyZXNoXT1cInJlZnJlc2hcIlxuICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICBbZXhjbHVkZURheXNdPVwiZXhjbHVkZURheXNcIlxuICAgICAgICAgIFt3ZWVrU3RhcnRzT25dPVwid2Vla1N0YXJ0c09uXCJcbiAgICAgICAgICBbZGF5U3RhcnRIb3VyXT1cImRheVN0YXJ0SG91clwiXG4gICAgICAgICAgW2RheUVuZEhvdXJdPVwiZGF5RW5kSG91clwiXG4gICAgICAgICAgW2hvdXJTZWdtZW50c109XCJob3VyU2VnbWVudHNcIlxuICAgICAgICAgIFtldmVudFRlbXBsYXRlXT1cImV2ZW50VGVtcGxhdGVcIlxuICAgICAgICAgIFtob3VyU2VnbWVudFRlbXBsYXRlXT1cImhvdXJTZWdtZW50VGVtcGxhdGVcIlxuICAgICAgICAgIChldmVudENsaWNrZWQpPVwic2VsZWN0RXZlbnQuZW1pdCgkZXZlbnQuZXZlbnQpXCJcbiAgICAgICAgICAoZXZlbnRUaW1lc0NoYW5nZWQpPVwiZXZlbnRUaW1lc0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGRheUhlYWRlckNsaWNrZWQpPVwiZGF0ZUlzVmFsaWQoJGV2ZW50LmRheS5kYXRlKSA/IHNlbGVjdERheS5lbWl0KCRldmVudC5kYXkuZGF0ZSkgOiBudWxsXCJcbiAgICAgICAgICAoaG91clNlZ21lbnRDbGlja2VkKT1cImRhdGVJc1ZhbGlkKCRldmVudC5kYXRlKSA/IHNlbGVjdFNsb3QuZW1pdCgkZXZlbnQuZGF0ZSkgOiBudWxsXCJcbiAgICAgICAgICAoYmVmb3JlVmlld1JlbmRlcik9XCJiZWZvcmVXZWVrT3JEYXlWaWV3UmVuZGVyKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvbXdsLWNhbGVuZGFyLXdlZWstdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlIChDYWxlbmRhclZpZXcuRGF5KSB7XG4gICAgICAgIDxtd2wtY2FsZW5kYXItZGF5LXZpZXdcbiAgICAgICAgICBbdmlld0RhdGVdPVwidmlld0RhdGVcIlxuICAgICAgICAgIFtldmVudHNdPVwiZXZlbnRzXCJcbiAgICAgICAgICBbcmVmcmVzaF09XCJyZWZyZXNoXCJcbiAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgW2RheVN0YXJ0SG91cl09XCJkYXlTdGFydEhvdXJcIlxuICAgICAgICAgIFtkYXlFbmRIb3VyXT1cImRheUVuZEhvdXJcIlxuICAgICAgICAgIFtob3VyU2VnbWVudHNdPVwiaG91clNlZ21lbnRzXCJcbiAgICAgICAgICBbZXZlbnRUZW1wbGF0ZV09XCJldmVudFRlbXBsYXRlXCJcbiAgICAgICAgICBbaG91clNlZ21lbnRUZW1wbGF0ZV09XCJob3VyU2VnbWVudFRlbXBsYXRlXCJcbiAgICAgICAgICAoZXZlbnRDbGlja2VkKT1cInNlbGVjdEV2ZW50LmVtaXQoJGV2ZW50LmV2ZW50KVwiXG4gICAgICAgICAgKGV2ZW50VGltZXNDaGFuZ2VkKT1cImV2ZW50VGltZXNDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgIChob3VyU2VnbWVudENsaWNrZWQpPVwiZGF0ZUlzVmFsaWQoJGV2ZW50LmRhdGUpID8gc2VsZWN0U2xvdC5lbWl0KCRldmVudC5kYXRlKSA6IG51bGxcIlxuICAgICAgICAgIChiZWZvcmVWaWV3UmVuZGVyKT1cImJlZm9yZVdlZWtPckRheVZpZXdSZW5kZXIoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9td2wtY2FsZW5kYXItZGF5LXZpZXc+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbmRhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL21vZHVsZXMvYWdlbmRhL3NyYy9hZ2VuZGEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vbW9kdWxlcy9hZ2VuZGEvc3JjL2FnZW5kYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFFWixpQkFBaUIsRUFDakIsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFJTCxZQUFZLEVBRWIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEYsYUFBYTtBQUNiLE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBUTdELE1BQU0sT0FBTyxtQkFBbUI7SUFOaEM7UUFPVSxTQUFJLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxlQUFVLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFN0M7O1dBRUc7UUFDTSxXQUFNLEdBQWtCLEVBQUUsQ0FBQztRQUNwQzs7V0FFRztRQUNNLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBQ3BDOztXQUVHO1FBQ00saUJBQVks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Y0FBYyxHQUFHLENBQUMsTUFBYyxFQUFFLFNBQWlCLEVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqSCxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWMsRUFBRSxTQUFpQixFQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElvbkNvbnRlbnQsIFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgZmluYWxpemUsIGZyb21FdmVudCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBDYWxlbmRhckV2ZW50LFxuICBDYWxlbmRhckV2ZW50VGltZXNDaGFuZ2VkRXZlbnQsXG4gIENhbGVuZGFyTW9udGhWaWV3QmVmb3JlUmVuZGVyRXZlbnQsXG4gIENhbGVuZGFyVmlldyxcbiAgQ2FsZW5kYXJXZWVrVmlld0JlZm9yZVJlbmRlckV2ZW50XG59IGZyb20gJ2FuZ3VsYXItY2FsZW5kYXInO1xuaW1wb3J0IHsgaXNGdXR1cmUsIGlzVG9kYXksIGlzU2FtZURheSwgZW5kT2ZXZWVrLCBhZGREYXlzLCBhZGRNaW51dGVzIH0gZnJvbSAnZGF0ZS1mbnMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IENvbG9yUGFyc2UgZnJvbSAnY29sb3ItcGFyc2UnO1xuaW1wb3J0IHsgSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICdAaWRlYS1pb25pYy9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZGVhLWFnZW5kYScsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZVVybDogJ2FnZW5kYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydhZ2VuZGEuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJREVBQWdlbmRhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBfcGxhdGZvcm0gPSBpbmplY3QoUGxhdGZvcm0pO1xuICBfdHJhbnNsYXRlID0gaW5qZWN0KElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlKTtcblxuICAvKipcbiAgICogVGhlIGV2ZW50cyB0byBkaXNwbGF5IGluIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGV2ZW50czogQWdlbmRhRXZlbnRbXSA9IFtdO1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgZGF5IGluZGV4ZXMgKDAgPSBzdW5kYXksIDEgPSBtb25kYXksIGV0Yy4pIHRoYXQgd2lsbCBiZSBoaWRkZW4gb24gdGhlIHZpZXcuXG4gICAqL1xuICBASW5wdXQoKSBleGNsdWRlRGF5czogbnVtYmVyW10gPSBbXTtcbiAgLyoqXG4gICAqIFRoZSBkYXkgc3RhcnQgaG91cnMgaW4gMjQgaG91ciB0aW1lLiBNdXN0IGJlIDAtMjNcbiAgICovXG4gIEBJbnB1dCgpIGRheVN0YXJ0SG91ciA9IDA7XG4gIC8qKlxuICAgKiBUaGUgZGF5IHN0YXJ0IGhvdXJzIGluIDI0IGhvdXIgdGltZS4gTXVzdCBiZSAwLTIzXG4gICAqL1xuICBASW5wdXQoKSBkYXlFbmRIb3VyID0gMjM7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHNlZ21lbnRzIGluIGFuIGhvdXIuIE11c3QgZGl2aWRlIGVxdWFsbHkgaW50byA2MC5cbiAgICovXG4gIEBJbnB1dCgpIGhvdXJTZWdtZW50cyA9IDI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIG9wZW4gdGhlIGN1cnJlbnQgZGF5J3MgZGV0YWlscyByaWdodCBhd2F5IGluIG1vbnRoIHZpZXcuXG4gICAqL1xuICBASW5wdXQoKSBhY3RpdmVEYXlJc09wZW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoZSB2aWV3IG1vZGUgZm9yIHRoZSBhZ2VuZGEuXG4gICAqL1xuICBASW5wdXQoKSB2aWV3OiBDYWxlbmRhclZpZXcgPSBDYWxlbmRhclZpZXcuV2VlaztcbiAgLyoqXG4gICAqIFRoZSBhbGxvd2VkIHZpZXcgbW9kZSBmb3IgdGhlIGFnZW5kYS5cbiAgICovXG4gIEBJbnB1dCgpIGFsbG93ZWRWaWV3cyA9IFtDYWxlbmRhclZpZXcuRGF5LCBDYWxlbmRhclZpZXcuV2VlaywgQ2FsZW5kYXJWaWV3Lk1vbnRoXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYmxvY2sgYW55IGRheS9zbG90IGluIHRoZSBwYXN0LlxuICAgKi9cbiAgQElucHV0KCkgb25seUZ1dHVyZSA9IGZhbHNlO1xuICAvKipcbiAgICogU29tZSBub3RlcyB0byBzaG93IHVuZGVybmVhdGggdGhlIGNhbGVuZGFyJ3MgaGVhZGVyLlxuICAgKi9cbiAgQElucHV0KCkgdGl0bGVOb3Rlczogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIGZvciBuZXcgZXZlbnRzIGNyZWF0ZWQgYnkgZHJhZyZkcm9wLlxuICAgKi9cbiAgQElucHV0KCkgbmV3RXZlbnRUZW1wbGF0ZTogQWdlbmRhRXZlbnQgPSB7IHRpdGxlOiAnTmV3Jywgc3RhcnQ6IG51bGwsIG1ldGE6IHt9IH07XG4gIC8qKlxuICAgKiBXaGV0aGVyIChhbmQgaG93KSB0byBhbGxvdyB0aGUgY3JlYXRpb24gb2YgZXZlbnRzIGJ5IGRyYWcmZHJvcC5cbiAgICogSWYgZW5hYmxlZCwgb24gbW9iaWxlIGl0IHJlcXVpcmVzIHRoZSBgcGFyZW50Q29udGVudGAgdG8gYmUgc2V0IGZvciBhIGNvcnJlY3QgZXhlY3V0aW9uLlxuICAgKi9cbiAgQElucHV0KCkgYWxsb3dEcmFnVG9DcmVhdGU6IERyYWdUb0NyZWF0ZU9wdGlvbnMgPSBEcmFnVG9DcmVhdGVPcHRpb25zLkRJU0FCTEVEO1xuICAvKipcbiAgICogVGhlIHBhcmVudCBpb24tY29udGVudCwgaW4gY2FzZSB3ZSB3YW50IHRvIGNvbnRyb2wgaXRzIHNjcm9sbGFiaWxpdHkgZm9yIGRyYWcmZHJvcCBmZWF0dXJlcy5cbiAgICovXG4gIEBJbnB1dCgpIHBhcmVudENvbnRlbnQ6IElvbkNvbnRlbnQ7XG4gIC8qKlxuICAgKiBUcmlnZ2VyIHdoZW4gYW4gZXZlbnQgaXMgc2VsZWN0ZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEFnZW5kYUV2ZW50PigpO1xuICAvKipcbiAgICogVHJpZ2dlciB3aGVuIGEgZGF5IGlzIHNlbGVjdGVkLlxuICAgKi9cbiAgQE91dHB1dCgpIHNlbGVjdERheSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcbiAgLyoqXG4gICAqIFRyaWdnZXIgd2hlbiBhIHRpbWUgc2xvdCBpcyBzZWxlY3RlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBzZWxlY3RTbG90ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuICAvKipcbiAgICogVHJpZ2dlciB3aGVuIGEgbmV3IGV2ZW50IGlzIGFkZGVkIGJ5IGRyYWcgYW5kIGRyb3AuXG4gICAqL1xuICBAT3V0cHV0KCkgbmV3RXZlbnRCeURyYWcgPSBuZXcgRXZlbnRFbWl0dGVyPEFnZW5kYUV2ZW50PigpO1xuICAvKipcbiAgICogVHJpZ2dlciB3aGVuIGFuIGV2ZW50IGNoYW5nZWQgZGF0ZSAoZHJhZyZkcm9wIG9yIHJlc2l6ZSkuXG4gICAqL1xuICBAT3V0cHV0KCkgY2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEFnZW5kYUV2ZW50PigpO1xuICAvKipcbiAgICogVHJpZ2dlciB3aGVuIHRoZSB2aWV3IGRhdGUgb2YgcmVmZXJlbmNlIGNoYW5nZWQgKGJlY2F1c2Ugd2UgbW92ZWQgaW5zaWRlIHRoZSBjYWxlbmRhcikuXG4gICAqL1xuICBAT3V0cHV0KCkgY2hhbmdlRGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcbiAgLyoqXG4gICAqIFRyaWdnZXIgYmVmb3JlIHRoZSByZW5kZXJpbmcgb2YgdGhlIHdlZWsgb3IgZGF5IHZpZXcuXG4gICAqL1xuICBAT3V0cHV0KCkgYmVmb3JlV2Vla09yRGF5Vmlld1JlbmRlckVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPENhbGVuZGFyV2Vla1ZpZXdCZWZvcmVSZW5kZXJFdmVudD4oKTtcbiAgLyoqXG4gICAqIFRyaWdnZXIgYmVmb3JlIHRoZSByZW5kZXJpbmcgb2YgdGhlIG1vbnRoIHZpZXcuXG4gICAqL1xuICBAT3V0cHV0KCkgYmVmb3JlTW9udGhWaWV3UmVuZGVyRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FsZW5kYXJNb250aFZpZXdCZWZvcmVSZW5kZXJFdmVudD4oKTtcblxuICBDYWxlbmRhclZpZXcgPSBDYWxlbmRhclZpZXc7XG4gIEF0dGVuZGFuY2UgPSBFdmVudEF0dGVuZGFuY2U7XG4gIHZpZXdEYXRlID0gbmV3IERhdGUoKTtcbiAgcmVmcmVzaCA9IG5ldyBTdWJqZWN0KCk7XG4gIC8qKlxuICAgKiBAaGlkZVxuICAgKi9cbiAgbG9jYWxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAaGlkZVxuICAgKi9cbiAgd2Vla1N0YXJ0c09uOiAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2O1xuXG4gIGRhcmtNb2RlID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5tYXRjaGVzO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5fdHJhbnNsYXRlLmdldEN1cnJlbnRMYW5nKCk7XG4gICAgLy8gaW4gY2FzZSBvZiBJdGFsaWFuIGxvY2FsZSB0aGUgc3RhcnRpbmcgZGF5IGZvciB0aGUgd2VlayBpcyBtb25kYXkgKDEpLCBvdGhlcndpc2Ugc3VuZGF5ICgwKVxuICAgIHRoaXMud2Vla1N0YXJ0c09uID0gdGhpcy5sb2NhbGUgPT09ICdpdCcgPyAxIDogMDtcbiAgfVxuICBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXMoJ21vYmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBzb21lIGNoZWNrcyBiZWZvcmUgdGhlIG1vbnRoIHZpZXcgaXMgcmVuZGVyZWQgKGUuZy4gZGlzYWJsZSBpbnZhbGlkIGRheXMpLlxuICAgKi9cbiAgYmVmb3JlTW9udGhWaWV3UmVuZGVyKGV2ZW50OiBDYWxlbmRhck1vbnRoVmlld0JlZm9yZVJlbmRlckV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5iZWZvcmVNb250aFZpZXdSZW5kZXJFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgIGNvbnN0IHsgYm9keSB9ID0gZXZlbnQ7XG4gICAgYm9keS5mb3JFYWNoKGRheSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGF0ZUlzVmFsaWQoZGF5LmRhdGUpKSBkYXkuY3NzQ2xhc3MgPSAnY2FsLWRpc2FibGVkJztcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUnVuIHNvbWUgY2hlY2tzIGJlZm9yZSB0aGUgd2Vlay9kYXkgdmlldyBpcyByZW5kZXJlZCAoZS5nLiBkaXNhYmxlIGludmFsaWQgZGF5cykuXG4gICAqL1xuICBiZWZvcmVXZWVrT3JEYXlWaWV3UmVuZGVyKGV2ZW50OiBDYWxlbmRhcldlZWtWaWV3QmVmb3JlUmVuZGVyRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmJlZm9yZVdlZWtPckRheVZpZXdSZW5kZXJFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgIGNvbnN0IHsgaGVhZGVyLCBob3VyQ29sdW1ucyB9ID0gZXZlbnQ7XG4gICAgaGVhZGVyLmZvckVhY2goZGF5ID0+IHtcbiAgICAgIGlmICghdGhpcy5kYXRlSXNWYWxpZChkYXkuZGF0ZSkpIGRheS5jc3NDbGFzcyA9ICdjYWwtZGlzYWJsZWQnO1xuICAgIH0pO1xuICAgIGhvdXJDb2x1bW5zLmZvckVhY2goaG91ckNvbCA9PiB7XG4gICAgICBob3VyQ29sLmhvdXJzLmZvckVhY2goaG91ciA9PiB7XG4gICAgICAgIGhvdXIuc2VnbWVudHMuZm9yRWFjaChzZWdtZW50ID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuZGF0ZUlzVmFsaWQoc2VnbWVudC5kYXRlKSkgc2VnbWVudC5jc3NDbGFzcyA9ICdjYWwtZGlzYWJsZWQnO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGF0ZUlzVmFsaWQoZGF0ZTogYW55LCBzYW1lRGF5SXNWYWxpZD86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMub25seUZ1dHVyZSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGlzRnV0dXJlKGRhdGUpIHx8IChzYW1lRGF5SXNWYWxpZCA/IGlzVG9kYXkoZGF0ZSkgOiBmYWxzZSk7XG4gIH1cblxuICBzZXRWaWV3KHZpZXc6IENhbGVuZGFyVmlldyk6IHZvaWQge1xuICAgIHRoaXMudmlldyA9IHZpZXc7XG4gIH1cblxuICB2aWV3RGF0ZUNoYW5nZWQobmV3RGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZXcgPT09IENhbGVuZGFyVmlldy5Nb250aCkgdGhpcy5hY3RpdmVEYXlJc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmNoYW5nZURhdGUuZW1pdChuZXdEYXRlKTtcbiAgfVxuXG4gIGNoYW5nZURheSh7IGRhdGUsIGV2ZW50cyB9OiB7IGRhdGU6IERhdGU7IGV2ZW50czogQWdlbmRhRXZlbnRbXSB9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGVJc1ZhbGlkKGRhdGUsIHRydWUpKSByZXR1cm47XG4gICAgaWYgKChpc1NhbWVEYXkodGhpcy52aWV3RGF0ZSwgZGF0ZSkgJiYgdGhpcy5hY3RpdmVEYXlJc09wZW4gPT09IHRydWUpIHx8ICFldmVudHMgfHwgZXZlbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMuYWN0aXZlRGF5SXNPcGVuID0gZmFsc2U7XG4gICAgZWxzZSB0aGlzLmFjdGl2ZURheUlzT3BlbiA9IHRydWU7XG4gICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG4gIH1cblxuICBldmVudFRpbWVzQ2hhbmdlZCh7IGV2ZW50LCBuZXdTdGFydCwgbmV3RW5kIH06IENhbGVuZGFyRXZlbnRUaW1lc0NoYW5nZWRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0YXJ0ID0gbmV3U3RhcnQ7XG4gICAgZXZlbnQuZW5kID0gbmV3RW5kO1xuICAgIHRoaXMuZXZlbnRzID0gdGhpcy5ldmVudHMuc2xpY2UoKTtcbiAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZ2V0QWx0ZXJuYXRlQ29sb3IoY29sb3I6IHN0cmluZywgYW1vdW50OiBudW1iZXIsIG9wYWNpdHk/OiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghY29sb3I/LnRyaW0oKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBhbHQgPSBDb2xvclBhcnNlKGNvbG9yLnRyaW0oKSk7XG4gICAgY29uc3QgciA9IE1hdGgubWF4KE1hdGgubWluKDI1NSwgTnVtYmVyKGFsdC52YWx1ZXNbMF0pICsgYW1vdW50KSwgMCk7XG4gICAgY29uc3QgZyA9IE1hdGgubWF4KE1hdGgubWluKDI1NSwgTnVtYmVyKGFsdC52YWx1ZXNbMV0pICsgYW1vdW50KSwgMCk7XG4gICAgY29uc3QgYiA9IE1hdGgubWF4KE1hdGgubWluKDI1NSwgTnVtYmVyKGFsdC52YWx1ZXNbMl0pICsgYW1vdW50KSwgMCk7XG4gICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sICR7b3BhY2l0eSB8fCAxfSlgO1xuICB9XG5cbiAgZ2V0VG9vbHRpcENvbnRlbnQoZXZlbnQ6IEFnZW5kYUV2ZW50KTogc3RyaW5nIHtcbiAgICBpZiAoIWV2ZW50KSByZXR1cm4gJyc7XG4gICAgbGV0IHN0ciA9IGV2ZW50LnRpdGxlID8gJzxiPicgKyBldmVudC50aXRsZSArICc8L2I+JyA6ICcnO1xuICAgIGlmIChldmVudC5kZXNjcmlwdGlvbikgc3RyID0gc3RyLmNvbmNhdCgnPGJyPicsIGV2ZW50LmRlc2NyaXB0aW9uKTtcbiAgICBpZiAoZXZlbnQuaWNvbnMpIGV2ZW50Lmljb25zLmZvckVhY2goeCA9PiAoc3RyID0gc3RyLmNvbmNhdCgnPGJyPicsICc8aT4nLCB4LnRpdGxlLCAnPC9pPicpKSk7XG4gICAgaWYgKGV2ZW50LmF2YXRhcnMgJiYgZXZlbnQuYXZhdGFycy5sZW5ndGgpIHtcbiAgICAgIHN0ciA9IHN0ci5jb25jYXQoJzxicj48YnI+ficpO1xuICAgICAgZXZlbnQuYXZhdGFycy5mb3JFYWNoKHggPT4gKHN0ciA9IHN0ci5jb25jYXQoJzxicj4nLCB4LnRpdGxlKSkpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgZ2V0UHJldmlld0Rlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBkZXNjcmlwdGlvbiAmJiBkZXNjcmlwdGlvbi5sZW5ndGggPiAxMDAgPyBkZXNjcmlwdGlvbi5zbGljZSgwLCAxMDApLmNvbmNhdCgnLi4uJykgOiBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHN0YXJ0RHJhZ1RvQ3JlYXRlKGV2ZW50OiBFdmVudCwgc2VnbWVudERhdGU6IERhdGUsIHNlZ21lbnRFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hbGxvd0RyYWdUb0NyZWF0ZSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMucGFyZW50Q29udGVudCkgdGhpcy5wYXJlbnRDb250ZW50LnNjcm9sbFkgPSBmYWxzZTtcblxuICAgIGNvbnN0IGV2ZW50QnlEcmFnQW5kRHJvcDogQWdlbmRhRXZlbnQgPSB7IC4uLnRoaXMubmV3RXZlbnRUZW1wbGF0ZSwgc3RhcnQ6IHNlZ21lbnREYXRlIH07XG4gICAgdGhpcy5ldmVudHMgPSBbLi4udGhpcy5ldmVudHMsIGV2ZW50QnlEcmFnQW5kRHJvcF07XG5cbiAgICBjb25zdCBzZWdtZW50UG9zaXRpb24gPSBzZWdtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlbmRPZlZpZXcgPSBlbmRPZldlZWsodGhpcy52aWV3RGF0ZSwgeyB3ZWVrU3RhcnRzT246IHRoaXMud2Vla1N0YXJ0c09uIH0pO1xuXG4gICAgY29uc3Qgd2hpbGVEcmFnZ2luZyA9IChkcmFnZ2luZ0V2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgeyBjbGllbnRZLCBjbGllbnRYIH0gPVxuICAgICAgICBkcmFnZ2luZ0V2ZW50LnR5cGUgPT09ICd0b3VjaG1vdmUnID8gKGRyYWdnaW5nRXZlbnQgYXMgVG91Y2hFdmVudCkudG91Y2hlc1swXSA6IChkcmFnZ2luZ0V2ZW50IGFzIE1vdXNlRXZlbnQpO1xuXG4gICAgICBjb25zdCBtaW51dGVzRGlmZiA9IGNlaWxUb05lYXJlc3QoY2xpZW50WSAtIHNlZ21lbnRQb3NpdGlvbi50b3AsIDMwKTtcbiAgICAgIGNvbnN0IGRheXNEaWZmID0gZmxvb3JUb05lYXJlc3QoY2xpZW50WCAtIHNlZ21lbnRQb3NpdGlvbi5sZWZ0LCBzZWdtZW50UG9zaXRpb24ud2lkdGgpIC8gc2VnbWVudFBvc2l0aW9uLndpZHRoO1xuXG4gICAgICBsZXQgbmV3RW5kOiBEYXRlO1xuICAgICAgaWYgKHRoaXMuYWxsb3dEcmFnVG9DcmVhdGUgPT09IERyYWdUb0NyZWF0ZU9wdGlvbnMuT05MWV9TQU1FX0RBWSkgbmV3RW5kID0gYWRkTWludXRlcyhzZWdtZW50RGF0ZSwgbWludXRlc0RpZmYpO1xuICAgICAgZWxzZSBuZXdFbmQgPSBhZGREYXlzKGFkZE1pbnV0ZXMoc2VnbWVudERhdGUsIG1pbnV0ZXNEaWZmKSwgZGF5c0RpZmYpO1xuXG4gICAgICBpZiAobmV3RW5kID4gc2VnbWVudERhdGUgJiYgbmV3RW5kIDwgZW5kT2ZWaWV3KSBldmVudEJ5RHJhZ0FuZERyb3AuZW5kID0gbmV3RW5kO1xuICAgICAgcmVmcmVzaFZpZXcoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW5kT2ZEcmFnID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHRoaXMucGFyZW50Q29udGVudCkgdGhpcy5wYXJlbnRDb250ZW50LnNjcm9sbFkgPSB0cnVlO1xuICAgICAgZXZlbnRCeURyYWdBbmREcm9wLmVuZCA9IHRoaXMuZ2V0Rml4ZWRFbmREYXRlV2l0aE1pbmltdW1TZWdtZW50RHVyYXRpb24oZXZlbnRCeURyYWdBbmREcm9wKTtcbiAgICAgIHJlZnJlc2hWaWV3KCk7XG4gICAgICB0aGlzLm5ld0V2ZW50QnlEcmFnLmVtaXQoZXZlbnRCeURyYWdBbmREcm9wKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVmcmVzaFZpZXcgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLmV2ZW50cyA9IFsuLi50aGlzLmV2ZW50c107XG4gICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH07XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICd0b3VjaG1vdmUnKVxuICAgICAgICAucGlwZShmaW5hbGl6ZShlbmRPZkRyYWcpLCB0YWtlVW50aWwoZnJvbUV2ZW50KGRvY3VtZW50LCAndG91Y2hlbmQnKSkpXG4gICAgICAgIC5zdWJzY3JpYmUod2hpbGVEcmFnZ2luZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlbW92ZScpXG4gICAgICAgIC5waXBlKGZpbmFsaXplKGVuZE9mRHJhZyksIHRha2VVbnRpbChmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZXVwJykpKVxuICAgICAgICAuc3Vic2NyaWJlKHdoaWxlRHJhZ2dpbmcpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldEZpeGVkRW5kRGF0ZVdpdGhNaW5pbXVtU2VnbWVudER1cmF0aW9uKGFnZW5kYUJvb2tpbmc6IEFnZW5kYUV2ZW50KTogRGF0ZSB7XG4gICAgY29uc3QgZml4ZWRFbmQgPSBuZXcgRGF0ZShhZ2VuZGFCb29raW5nLmVuZCB8fCBhZ2VuZGFCb29raW5nLnN0YXJ0KTtcbiAgICBjb25zdCBzZWdtZW50U2l6ZUluTWludXRlcyA9IDYwIC8gdGhpcy5ob3VyU2VnbWVudHM7XG4gICAgaWYgKGZpeGVkRW5kLmdldFRpbWUoKSA8PSBhZ2VuZGFCb29raW5nLnN0YXJ0LmdldFRpbWUoKSArIHNlZ21lbnRTaXplSW5NaW51dGVzICogNjAgKiAxMDAwKVxuICAgICAgZml4ZWRFbmQuc2V0TWludXRlcyhhZ2VuZGFCb29raW5nLnN0YXJ0LmdldE1pbnV0ZXMoKSArIHNlZ21lbnRTaXplSW5NaW51dGVzKTtcbiAgICByZXR1cm4gZml4ZWRFbmQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHJpY2hlciB2ZXJzaW9uIG9mIHRoZSBjbGFzc2ljIENhbGVuZGFyRXZlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbmRhRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcbiAgLyoqXG4gICAqIEEgYnJpZWYgZGVzY3JpcHRpb24gZm9yIHRoZSBldmVudCAoZS5nLiBjdXN0b21lciwgYWRkcmVzcywgZXRjLikuXG4gICAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgZXZlbnQuXG4gICAqL1xuICBsb2NhdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBVUkxzIG9mIGltYWdlcyB0byBzaG93IGFzIHNtYWxsIGF2YXRhcnMuXG4gICAqL1xuICBhdmF0YXJzPzogeyBpZDogc3RyaW5nOyB1cmw6IHN0cmluZzsgdGl0bGU6IHN0cmluZyB9W107XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgaW9uLWljb25zIHRvIHNob3cuXG4gICAqL1xuICBpY29ucz86IHsgbmFtZTogc3RyaW5nOyB0aXRsZTogc3RyaW5nIH1bXTtcbiAgLyoqXG4gICAqIFRoZSBjb2xvcnMgb2YgdGhlIGV2ZW50IGRpc3BsYXllZC5cbiAgICovXG4gIGNvbG9yPzogeyBwcmltYXJ5OiBzdHJpbmc7IHNlY29uZGFyeT86IHN0cmluZyB9IHwgYW55O1xuICAvKipcbiAgICogV2hldGhlciB0aGUgZXZlbnQgaXMgZXh0ZXJuYWw7IGV4dGVybmFsIGV2ZW50cyBhcmUgbGVzcyBpbXBvcnRhbnQgVUktd2lzZS5cbiAgICovXG4gIGV4dGVybmFsPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBhdHRlbmRhbmNlIHN0YXR1cyB0byB0aGlzIGV2ZW50LCBpZiBhbnkuXG4gICAqL1xuICBhdHRlbmRhbmNlPzogRXZlbnRBdHRlbmRhbmNlO1xuICAvKipcbiAgICogQSBzdGFuZGFyZCBhbmQgdW5pcXVlIGlkIGZvciB0aGUgZXZlbnQsIHZhbGlkIGFjcm9zcyBtdWx0aXBsZSBzb3VyY2VzLlxuICAgKi9cbiAgaUNhbFVJRD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQb3NzaWJsZSBhdHRlbmRhbmNlIHN0YXR1c2VzIGZvciB0aGUgZXZlbnQuXG4gKi9cbmV4cG9ydCBlbnVtIEV2ZW50QXR0ZW5kYW5jZSB7XG4gIERFQ0xJTkVEID0gLTEsXG4gIE5FRURTX0FDVElPTiA9IDAsXG4gIFRFTlRBVElWRSxcbiAgQUNDRVBURURcbn1cblxuLyoqXG4gKiBUaGUgb3B0aW9ucyB0byBhbGxvdyAob3Igbm90KSBkcmFnJmRyb3AgdG8gY3JlYXRlIGEgbmV3IGV2ZW50LlxuICovXG5leHBvcnQgZW51bSBEcmFnVG9DcmVhdGVPcHRpb25zIHtcbiAgRElTQUJMRUQgPSAwLFxuICBPTkxZX1NBTUVfREFZID0gMSxcbiAgRlJFRSA9IDJcbn1cblxuY29uc3QgZmxvb3JUb05lYXJlc3QgPSAoYW1vdW50OiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKTogbnVtYmVyID0+IE1hdGguZmxvb3IoYW1vdW50IC8gcHJlY2lzaW9uKSAqIHByZWNpc2lvbjtcbmNvbnN0IGNlaWxUb05lYXJlc3QgPSAoYW1vdW50OiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKTogbnVtYmVyID0+IE1hdGguY2VpbChhbW91bnQgLyBwcmVjaXNpb24pICogcHJlY2lzaW9uO1xuIiwiPGRpdiBjbGFzcz1cImFnZW5kYVwiPlxuICA8IS0tIFRPT0xCQVIgLS0+XG4gIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxpb24tY29sXG4gICAgICBjbGFzcz1cImlvbi1hbGlnbi1zZWxmLWNlbnRlciBpb24tdGV4dC1yaWdodFwiXG4gICAgICBbc2l6ZV09XCI1XCJcbiAgICAgIFtzaXplU21dPVwiM1wiXG4gICAgICBbcHVzaFNtXT1cIjVcIlxuICAgICAgW3NpemVMZ109XCIyXCJcbiAgICAgIFtwdXNoTGddPVwiOFwiXG4gICAgPlxuICAgICAgQGlmIChhbGxvd2VkVmlld3MubGVuZ3RoID4gMSkge1xuICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgY2xhc3M9XCJjYWxlbmRhclZpZXdTZWxlY3RvclwiPlxuICAgICAgICAgIDxpb24tc2VsZWN0XG4gICAgICAgICAgICBpbnRlcmZhY2U9XCJwb3BvdmVyXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2aWV3XCJcbiAgICAgICAgICAgIChpb25DaGFuZ2UpPVwiJGV2ZW50Py5kZXRhaWwgPyBzZXRWaWV3KCRldmVudC5kZXRhaWwudmFsdWUpIDogbnVsbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGZvciAodmlldyBvZiBhbGxvd2VkVmlld3M7IHRyYWNrIHZpZXcpIHtcbiAgICAgICAgICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uIFt2YWx1ZV09XCJ2aWV3XCI+XG4gICAgICAgICAgICAgICAge3sgJ0lERUFfQUdFTkRBLicgKyB2aWV3IHwgdXBwZXJjYXNlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvaW9uLXNlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tc2VsZWN0PlxuICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgfVxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbFxuICAgICAgY2xhc3M9XCJpb24tYWxpZ24tc2VsZi1jZW50ZXIgaW9uLXRleHQtcmlnaHRcIlxuICAgICAgW3NpemVdPVwiN1wiXG4gICAgICBbc2l6ZVNtXT1cIjRcIlxuICAgICAgW3B1c2hTbV09XCI1XCJcbiAgICAgIFtzaXplTGddPVwiMlwiXG4gICAgICBbcHVzaExnXT1cIjhcIlxuICAgID5cbiAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgIGNvbG9yPVwiZGFya1wiXG4gICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIG13bENhbGVuZGFyUHJldmlvdXNWaWV3XG4gICAgICAgIFt2aWV3XT1cInZpZXdcIlxuICAgICAgICBbKHZpZXdEYXRlKV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICh2aWV3RGF0ZUNoYW5nZSk9XCJ2aWV3RGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hldnJvbi1iYWNrLW91dGxpbmVcIiBzbG90PVwiaWNvbi1vbmx5XCIgLz5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgIGNvbG9yPVwiZGFya1wiXG4gICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIG13bENhbGVuZGFyVG9kYXlcbiAgICAgICAgWyh2aWV3RGF0ZSldPVwidmlld0RhdGVcIlxuICAgICAgICAodmlld0RhdGVDaGFuZ2UpPVwidmlld0RhdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInRvZGF5LW91dGxpbmVcIiBzbG90PVwiaWNvbi1vbmx5XCIgLz5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgIGNvbG9yPVwiZGFya1wiXG4gICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIG13bENhbGVuZGFyTmV4dFZpZXdcbiAgICAgICAgW3ZpZXddPVwidmlld1wiXG4gICAgICAgIFsodmlld0RhdGUpXT1cInZpZXdEYXRlXCJcbiAgICAgICAgKHZpZXdEYXRlQ2hhbmdlKT1cInZpZXdEYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGV2cm9uLWZvcndhcmQtb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIiAvPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1hbGlnbi1zZWxmLWNlbnRlciB0aXRsZUNvbFwiIFtzaXplXT1cIjEyXCIgW3NpemVTbV09XCI1XCIgW3B1bGxTbV09XCI3XCIgW3NpemVMZ109XCI4XCIgW3B1bGxMZ109XCI0XCI+XG4gICAgICA8aDI+e3sgdmlld0RhdGUgfCBjYWxlbmRhckRhdGU6IHZpZXcgKyAnVmlld1RpdGxlJyA6IGxvY2FsZSB9fTwvaDI+XG4gICAgICBAaWYgKHRpdGxlTm90ZXMpIHtcbiAgICAgICAgPHA+e3sgdGl0bGVOb3RlcyB9fTwvcD5cbiAgICAgIH1cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cbiAgPCEtLSBURU1QTEFURVMgKHRvdWNoIG9ubHkgd2hhdCdzIG5lY2Vzc2FyeSBhbmQgbGVhdmUgZXZlcnl0aGluZyBlbHNlIGFzIGl0IGlzKSAtLT5cbiAgPG5nLXRlbXBsYXRlICNldmVudFRpdGxlVGVtcGxhdGUgbGV0LWV2ZW50PVwiZXZlbnRcIiBsZXQtdmlldz1cInZpZXdcIj5cbiAgICA8c3BhblxuICAgICAgY2xhc3M9XCJjYWwtZXZlbnQtdGl0bGVcIlxuICAgICAgW2NsYXNzLm5vV3JhcF09XCJldmVudC5hbGxEYXlcIlxuICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwie30gfCBjYWxlbmRhckExMXk6ICdoaWRlRXZlbnRUaXRsZSdcIlxuICAgID5cbiAgICAgIHt7IGV2ZW50LnRpdGxlIHwgY2FsZW5kYXJFdmVudFRpdGxlOiB2aWV3IDogZXZlbnQgfX1cbiAgICAgIEBpZiAoIWV2ZW50LmFsbERheSkge1xuICAgICAgICA8cD57eyBnZXRQcmV2aWV3RGVzY3JpcHRpb24oZXZlbnQuZGVzY3JpcHRpb24pIH19PC9wPlxuICAgICAgfVxuICAgIDwvc3Bhbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2V2ZW50VGVtcGxhdGVcbiAgICBsZXQtd2Vla0V2ZW50PVwid2Vla0V2ZW50XCJcbiAgICBsZXQtdG9vbHRpcFBsYWNlbWVudD1cInRvb2x0aXBQbGFjZW1lbnRcIlxuICAgIGxldC1ldmVudENsaWNrZWQ9XCJldmVudENsaWNrZWRcIlxuICAgIGxldC10b29sdGlwVGVtcGxhdGU9XCJ0b29sdGlwVGVtcGxhdGVcIlxuICAgIGxldC10b29sdGlwQXBwZW5kVG9Cb2R5PVwidG9vbHRpcEFwcGVuZFRvQm9keVwiXG4gICAgbGV0LXRvb2x0aXBEaXNhYmxlZD1cInRvb2x0aXBEaXNhYmxlZFwiXG4gICAgbGV0LXRvb2x0aXBEZWxheT1cInRvb2x0aXBEZWxheVwiXG4gICAgbGV0LWNvbHVtbj1cImNvbHVtblwiXG4gICAgbGV0LWRheXNJbldlZWs9XCJkYXlzSW5XZWVrXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FsLWV2ZW50XCJcbiAgICAgIFtjbGFzcy5leHRlcm5hbF09XCJ3ZWVrRXZlbnQuZXZlbnQuZXh0ZXJuYWxcIlxuICAgICAgW2NsYXNzLm5lZWRzQWN0aW9uXT1cIkF0dGVuZGFuY2UuTkVFRFNfQUNUSU9OID09PSB3ZWVrRXZlbnQuZXZlbnQuYXR0ZW5kYW5jZVwiXG4gICAgICBbY2xhc3MuZGVjbGluZWRdPVwiQXR0ZW5kYW5jZS5ERUNMSU5FRCA9PT0gd2Vla0V2ZW50LmV2ZW50LmF0dGVuZGFuY2VcIlxuICAgICAgW2NsYXNzLnRlbnRhdGl2ZV09XCJBdHRlbmRhbmNlLlRFTlRBVElWRSA9PT0gd2Vla0V2ZW50LmV2ZW50LmF0dGVuZGFuY2VcIlxuICAgICAgW3N0eWxlLmJvcmRlci1sZWZ0LWNvbG9yXT1cIndlZWtFdmVudC5ldmVudC5jb2xvcj8ucHJpbWFyeVwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiZ2V0QWx0ZXJuYXRlQ29sb3Iod2Vla0V2ZW50LmV2ZW50LmNvbG9yPy5wcmltYXJ5LCBkYXJrTW9kZSA/IDgwIDogLTQwKVwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJnZXRBbHRlcm5hdGVDb2xvcih3ZWVrRXZlbnQuZXZlbnQuY29sb3I/LnByaW1hcnksIGRhcmtNb2RlID8gNjAgOiA4MCwgMC4yKVwiXG4gICAgICBbbXdsQ2FsZW5kYXJUb29sdGlwXT1cIiF0b29sdGlwRGlzYWJsZWQgJiYgIWlzTW9iaWxlKCkgPyBnZXRUb29sdGlwQ29udGVudCh3ZWVrRXZlbnQuZXZlbnQpIDogJydcIlxuICAgICAgW3Rvb2x0aXBQbGFjZW1lbnRdPVwidG9vbHRpcFBsYWNlbWVudFwiXG4gICAgICBbdG9vbHRpcEV2ZW50XT1cIndlZWtFdmVudC50ZW1wRXZlbnQgfHwgd2Vla0V2ZW50LmV2ZW50XCJcbiAgICAgIFt0b29sdGlwVGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlXCJcbiAgICAgIFt0b29sdGlwQXBwZW5kVG9Cb2R5XT1cInRvb2x0aXBBcHBlbmRUb0JvZHlcIlxuICAgICAgW3Rvb2x0aXBEZWxheV09XCJ0b29sdGlwRGVsYXlcIlxuICAgICAgKG13bENsaWNrKT1cImV2ZW50Q2xpY2tlZC5lbWl0KHsgc291cmNlRXZlbnQ6ICRldmVudCB9KVwiXG4gICAgICAobXdsS2V5ZG93bkVudGVyKT1cImV2ZW50Q2xpY2tlZC5lbWl0KHsgc291cmNlRXZlbnQ6ICRldmVudCB9KVwiXG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgcm9sZT1cImFwcGxpY2F0aW9uXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgIHsgZXZlbnQ6IHdlZWtFdmVudC50ZW1wRXZlbnQgfHwgd2Vla0V2ZW50LmV2ZW50LCBsb2NhbGU6IGxvY2FsZSB9IHwgY2FsZW5kYXJBMTF5OiAnZXZlbnREZXNjcmlwdGlvbidcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPG13bC1jYWxlbmRhci1ldmVudC1hY3Rpb25zIFtldmVudF09XCJ3ZWVrRXZlbnQudGVtcEV2ZW50IHx8IHdlZWtFdmVudC5ldmVudFwiIC8+XG4gICAgICAmbmdzcDtcbiAgICAgIDxtd2wtY2FsZW5kYXItZXZlbnQtdGl0bGVcbiAgICAgICAgW2V2ZW50XT1cIndlZWtFdmVudC50ZW1wRXZlbnQgfHwgd2Vla0V2ZW50LmV2ZW50XCJcbiAgICAgICAgW2N1c3RvbVRlbXBsYXRlXT1cImV2ZW50VGl0bGVUZW1wbGF0ZVwiXG4gICAgICAgIFt2aWV3XT1cImRheXNJbldlZWsgPT09IDEgPyAnZGF5JyA6ICd3ZWVrJ1wiXG4gICAgICA+XG4gICAgICA8L213bC1jYWxlbmRhci1ldmVudC10aXRsZT5cbiAgICAgIEBpZiAoIXdlZWtFdmVudC5ldmVudC5hbGxEYXkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50R2FkZ2V0c1wiPlxuICAgICAgICAgIEBmb3IgKGljb24gb2Ygd2Vla0V2ZW50LmV2ZW50Lmljb25zOyB0cmFjayBpY29uKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiaWNvbi5uYW1lXCIgW3RpdGxlXT1cImljb24udGl0bGVcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZm9yIChhdmF0YXIgb2Ygd2Vla0V2ZW50LmV2ZW50LmF2YXRhcnM7IHRyYWNrIGF2YXRhcikge1xuICAgICAgICAgICAgPGlkZWEtdXNlci1hdmF0YXIgc2l6ZT1cIm1pbmlcIiBbc3JjXT1cImF2YXRhci51cmxcIiBbbmFtZV09XCJhdmF0YXIudGl0bGVcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZVxuICAgICNob3VyU2VnbWVudFRlbXBsYXRlXG4gICAgbGV0LXNlZ21lbnQ9XCJzZWdtZW50XCJcbiAgICBsZXQtbG9jYWxlPVwibG9jYWxlXCJcbiAgICBsZXQtc2VnbWVudEhlaWdodD1cInNlZ21lbnRIZWlnaHRcIlxuICAgIGxldC1pc1RpbWVMYWJlbD1cImlzVGltZUxhYmVsXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgICNzZWdtZW50RWxlbWVudFxuICAgICAgY2xhc3M9XCJjYWwtaG91ci1zZWdtZW50XCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwic2VnbWVudEhlaWdodFwiXG4gICAgICBbY2xhc3MuY2FsLWhvdXItc3RhcnRdPVwic2VnbWVudC5pc1N0YXJ0XCJcbiAgICAgIFtjbGFzcy5jYWwtYWZ0ZXItaG91ci1zdGFydF09XCIhc2VnbWVudC5pc1N0YXJ0XCJcbiAgICAgIFtuZ0NsYXNzXT1cInNlZ21lbnQuY3NzQ2xhc3NcIlxuICAgICAgKG1vdXNlZG93bik9XCJhbGxvd0RyYWdUb0NyZWF0ZSA/IHN0YXJ0RHJhZ1RvQ3JlYXRlKCRldmVudCwgc2VnbWVudC5kYXRlLCBzZWdtZW50RWxlbWVudCkgOiBudWxsXCJcbiAgICAgICh0b3VjaHN0YXJ0KT1cImFsbG93RHJhZ1RvQ3JlYXRlID8gc3RhcnREcmFnVG9DcmVhdGUoJGV2ZW50LCBzZWdtZW50LmRhdGUsIHNlZ21lbnRFbGVtZW50KSA6IG51bGxcIlxuICAgID5cbiAgICAgIEBpZiAoaXNUaW1lTGFiZWwpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbC10aW1lXCI+XG4gICAgICAgICAge3sgc2VnbWVudC5kYXRlIHwgY2FsZW5kYXJEYXRlOiAnd2Vla1ZpZXdIb3VyJyA6IGxvY2FsZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPCEtLSBWSUVXUyAtLT5cbiAgPGRpdj5cbiAgICBAc3dpdGNoICh2aWV3KSB7XG4gICAgICBAY2FzZSAoQ2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgIDxtd2wtY2FsZW5kYXItbW9udGgtdmlld1xuICAgICAgICAgIFt2aWV3RGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgW2V2ZW50c109XCJldmVudHNcIlxuICAgICAgICAgIFtyZWZyZXNoXT1cInJlZnJlc2hcIlxuICAgICAgICAgIFthY3RpdmVEYXlJc09wZW5dPVwiYWN0aXZlRGF5SXNPcGVuXCJcbiAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgW2V4Y2x1ZGVEYXlzXT1cImV4Y2x1ZGVEYXlzXCJcbiAgICAgICAgICBbd2Vla1N0YXJ0c09uXT1cIndlZWtTdGFydHNPblwiXG4gICAgICAgICAgW2V2ZW50VGl0bGVUZW1wbGF0ZV09XCJldmVudFRpdGxlVGVtcGxhdGVcIlxuICAgICAgICAgIChldmVudENsaWNrZWQpPVwic2VsZWN0RXZlbnQuZW1pdCgkZXZlbnQuZXZlbnQpXCJcbiAgICAgICAgICAoZXZlbnRUaW1lc0NoYW5nZWQpPVwiZXZlbnRUaW1lc0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGRheUNsaWNrZWQpPVwiY2hhbmdlRGF5KCRldmVudC5kYXkpXCJcbiAgICAgICAgICAoYmVmb3JlVmlld1JlbmRlcik9XCJiZWZvcmVNb250aFZpZXdSZW5kZXIoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9td2wtY2FsZW5kYXItbW9udGgtdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlIChDYWxlbmRhclZpZXcuV2Vlaykge1xuICAgICAgICA8bXdsLWNhbGVuZGFyLXdlZWstdmlld1xuICAgICAgICAgIFt2aWV3RGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgW2V2ZW50c109XCJldmVudHNcIlxuICAgICAgICAgIFtyZWZyZXNoXT1cInJlZnJlc2hcIlxuICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgICBbZXhjbHVkZURheXNdPVwiZXhjbHVkZURheXNcIlxuICAgICAgICAgIFt3ZWVrU3RhcnRzT25dPVwid2Vla1N0YXJ0c09uXCJcbiAgICAgICAgICBbZGF5U3RhcnRIb3VyXT1cImRheVN0YXJ0SG91clwiXG4gICAgICAgICAgW2RheUVuZEhvdXJdPVwiZGF5RW5kSG91clwiXG4gICAgICAgICAgW2hvdXJTZWdtZW50c109XCJob3VyU2VnbWVudHNcIlxuICAgICAgICAgIFtldmVudFRlbXBsYXRlXT1cImV2ZW50VGVtcGxhdGVcIlxuICAgICAgICAgIFtob3VyU2VnbWVudFRlbXBsYXRlXT1cImhvdXJTZWdtZW50VGVtcGxhdGVcIlxuICAgICAgICAgIChldmVudENsaWNrZWQpPVwic2VsZWN0RXZlbnQuZW1pdCgkZXZlbnQuZXZlbnQpXCJcbiAgICAgICAgICAoZXZlbnRUaW1lc0NoYW5nZWQpPVwiZXZlbnRUaW1lc0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgKGRheUhlYWRlckNsaWNrZWQpPVwiZGF0ZUlzVmFsaWQoJGV2ZW50LmRheS5kYXRlKSA/IHNlbGVjdERheS5lbWl0KCRldmVudC5kYXkuZGF0ZSkgOiBudWxsXCJcbiAgICAgICAgICAoaG91clNlZ21lbnRDbGlja2VkKT1cImRhdGVJc1ZhbGlkKCRldmVudC5kYXRlKSA/IHNlbGVjdFNsb3QuZW1pdCgkZXZlbnQuZGF0ZSkgOiBudWxsXCJcbiAgICAgICAgICAoYmVmb3JlVmlld1JlbmRlcik9XCJiZWZvcmVXZWVrT3JEYXlWaWV3UmVuZGVyKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvbXdsLWNhbGVuZGFyLXdlZWstdmlldz5cbiAgICAgIH1cbiAgICAgIEBjYXNlIChDYWxlbmRhclZpZXcuRGF5KSB7XG4gICAgICAgIDxtd2wtY2FsZW5kYXItZGF5LXZpZXdcbiAgICAgICAgICBbdmlld0RhdGVdPVwidmlld0RhdGVcIlxuICAgICAgICAgIFtldmVudHNdPVwiZXZlbnRzXCJcbiAgICAgICAgICBbcmVmcmVzaF09XCJyZWZyZXNoXCJcbiAgICAgICAgICBbbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgW2RheVN0YXJ0SG91cl09XCJkYXlTdGFydEhvdXJcIlxuICAgICAgICAgIFtkYXlFbmRIb3VyXT1cImRheUVuZEhvdXJcIlxuICAgICAgICAgIFtob3VyU2VnbWVudHNdPVwiaG91clNlZ21lbnRzXCJcbiAgICAgICAgICBbZXZlbnRUZW1wbGF0ZV09XCJldmVudFRlbXBsYXRlXCJcbiAgICAgICAgICBbaG91clNlZ21lbnRUZW1wbGF0ZV09XCJob3VyU2VnbWVudFRlbXBsYXRlXCJcbiAgICAgICAgICAoZXZlbnRDbGlja2VkKT1cInNlbGVjdEV2ZW50LmVtaXQoJGV2ZW50LmV2ZW50KVwiXG4gICAgICAgICAgKGV2ZW50VGltZXNDaGFuZ2VkKT1cImV2ZW50VGltZXNDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgIChob3VyU2VnbWVudENsaWNrZWQpPVwiZGF0ZUlzVmFsaWQoJGV2ZW50LmRhdGUpID8gc2VsZWN0U2xvdC5lbWl0KCRldmVudC5kYXRlKSA6IG51bGxcIlxuICAgICAgICAgIChiZWZvcmVWaWV3UmVuZGVyKT1cImJlZm9yZVdlZWtPckRheVZpZXdSZW5kZXIoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9td2wtY2FsZW5kYXItZGF5LXZpZXc+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -9,8 +9,6 @@ import * as i2 from "@ionic/angular";
9
9
  import * as i3 from "@idea-ionic/common";
10
10
  export class IDEACalendarComponent {
11
11
  constructor() {
12
- this.errors = new Set();
13
- this.DEFAULT_COLOR = '#555';
14
12
  this._calendars = inject(IDEACalendarsService);
15
13
  this._modal = inject(ModalController);
16
14
  this._alert = inject(AlertController);
@@ -19,6 +17,8 @@ export class IDEACalendarComponent {
19
17
  this._message = inject(IDEAMessageService);
20
18
  this._API = inject(IDEAAWSAPIService);
21
19
  this._translate = inject(IDEATranslationsService);
20
+ this.errors = new Set();
21
+ this.DEFAULT_COLOR = '#555';
22
22
  }
23
23
  async ngOnInit() {
24
24
  this.membership = this._tc.get('membership');
@@ -105,4 +105,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImpor
105
105
  }], hideColor: [{
106
106
  type: Input
107
107
  }] } });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbW9kdWxlcy9hZ2VuZGEvc3JjL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL21vZHVsZXMvYWdlbmRhL3NyYy9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBYyxNQUFNLGNBQWMsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN4QixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7OztBQU8zRCxNQUFNLE9BQU8scUJBQXFCO0lBTGxDO1FBc0JFLFdBQU0sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQzNCLGtCQUFhLEdBQUcsTUFBTSxDQUFDO1FBRWYsZUFBVSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFDLFdBQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqQyxRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLGFBQVEsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0QyxTQUFJLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFD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QyxDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtTQUNoRSxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEYsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDOzhHQXRHVSxxQkFBcUI7a0dBQXJCLHFCQUFxQiwySkNsQmxDLHV5S0FpSUE7OzJGRC9HYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0UsZUFBZTs4QkFRaEIsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIsIEFsZXJ0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IENhbGVuZGFyLCBDaGVjaywgTWVtYmVyc2hpcCB9IGZyb20gJ2lkZWEtdG9vbGJveCc7XG5pbXBvcnQge1xuICBJREVBTG9hZGluZ1NlcnZpY2UsXG4gIElERUFBV1NBUElTZXJ2aWNlLFxuICBJREVBVGluQ2FuU2VydmljZSxcbiAgSURFQU1lc3NhZ2VTZXJ2aWNlLFxuICBJREVBVHJhbnNsYXRpb25zU2VydmljZVxufSBmcm9tICdAaWRlYS1pb25pYy9jb21tb24nO1xuXG5pbXBvcnQgeyBJREVBQ2FsZW5kYXJzU2VydmljZSB9IGZyb20gJy4vY2FsZW5kYXJzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZGVhLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydjYWxlbmRhci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIElERUFDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBUaGUgY2FsZW5kYXIgdG8gbWFuYWdlLlxuICAgKi9cbiAgQElucHV0KCkgY2FsZW5kYXI6IENhbGVuZGFyO1xuICAvKipcbiAgICogV2hldGhlciB3ZSB3YW50IHRvIGVuYWJsZSBhZHZhbmNlZCBwZXJtaXNzaW9ucyAoYmFzZWQgb24gdGhlIG1lbWJlcnNoaXBzKSBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBhZHZhbmNlZFBlcm1pc3Npb25zOiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgY2FsZW5kYXIgY29sb3IgaXMgYW4gaW1wb3J0YW50IGRldGFpbCBvciBpdCBzaG91bGRuJ3QgYmUgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKSBoaWRlQ29sb3I6IGJvb2xlYW47XG5cbiAgY2FsZW5kYXJXQzogQ2FsZW5kYXI7XG4gIG1lbWJlcnNoaXBzQ2hlY2tzOiBDaGVja1tdO1xuICBtZW1iZXJzaGlwOiBNZW1iZXJzaGlwO1xuICBlcnJvcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgREVGQVVMVF9DT0xPUiA9ICcjNTU1JztcblxuICBwcml2YXRlIF9jYWxlbmRhcnMgPSBpbmplY3QoSURFQUNhbGVuZGFyc1NlcnZpY2UpO1xuICBwcml2YXRlIF9tb2RhbCA9IGluamVjdChNb2RhbENvbnRyb2xsZXIpO1xuICBwcml2YXRlIF9hbGVydCA9IGluamVjdChBbGVydENvbnRyb2xsZXIpO1xuICBwcml2YXRlIF90YyA9IGluamVjdChJREVBVGluQ2FuU2VydmljZSk7XG4gIHByaXZhdGUgX2xvYWRpbmcgPSBpbmplY3QoSURFQUxvYWRpbmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfbWVzc2FnZSA9IGluamVjdChJREVBTWVzc2FnZVNlcnZpY2UpO1xuICBwcml2YXRlIF9BUEkgPSBpbmplY3QoSURFQUFXU0FQSVNlcnZpY2UpO1xuICBwcml2YXRlIF90cmFuc2xhdGUgPSBpbmplY3QoSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UpO1xuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubWVtYmVyc2hpcCA9IHRoaXMuX3RjLmdldCgnbWVtYmVyc2hpcCcpO1xuICAgIHRoaXMuY2FsZW5kYXJXQyA9IG5ldyBDYWxlbmRhcih0aGlzLmNhbGVuZGFyKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWVtYmVyc2hpcHM6IE1lbWJlcnNoaXBbXSA9IGF3YWl0IHRoaXMuX0FQSS5nZXRSZXNvdXJjZShgdGVhbXMvJHt0aGlzLm1lbWJlcnNoaXAudGVhbUlkfS9tZW1iZXJzaGlwc2ApO1xuICAgICAgdGhpcy5tZW1iZXJzaGlwc0NoZWNrcyA9IG1lbWJlcnNoaXBzLm1hcChcbiAgICAgICAgbSA9PlxuICAgICAgICAgIG5ldyBDaGVjayh7XG4gICAgICAgICAgICB2YWx1ZTogbS51c2VySWQsXG4gICAgICAgICAgICBuYW1lOiBtLm5hbWUsXG4gICAgICAgICAgICBjaGVja2VkOiAodGhpcy5jYWxlbmRhcldDLnVzZXJzQ2FuTWFuYWdlQXBwb2ludG1lbnRzIHx8IFtdKS5zb21lKHggPT4geCA9PT0gbS51c2VySWQpXG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuX21lc3NhZ2UuZXJyb3IoJ0NPTU1PTi5DT1VMRE5UX0xPQURfTElTVCcpO1xuICAgIH1cbiAgfVxuXG4gIGhhc0ZpZWxkQW5FcnJvcihmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmhhcyhmaWVsZCk7XG4gIH1cblxuICBhc3luYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYWxlbmRhcldDLmNvbG9yKSB0aGlzLmNhbGVuZGFyV0MuY29sb3IgPSB0aGlzLkRFRkFVTFRfQ09MT1I7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXJXQy5pc1NoYXJlZCgpICYmIHRoaXMuYWR2YW5jZWRQZXJtaXNzaW9ucylcbiAgICAgIHRoaXMuY2FsZW5kYXJXQy51c2Vyc0Nhbk1hbmFnZUFwcG9pbnRtZW50cyA9IHRoaXMubWVtYmVyc2hpcHNDaGVja3NcbiAgICAgICAgLmZpbHRlcih4ID0+IHguY2hlY2tlZClcbiAgICAgICAgLm1hcCh4ID0+IFN0cmluZyh4LnZhbHVlKSk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5jYWxlbmRhcldDLnVzZXJzQ2FuTWFuYWdlQXBwb2ludG1lbnRzO1xuXG4gICAgdGhpcy5lcnJvcnMgPSBuZXcgU2V0KHRoaXMuY2FsZW5kYXJXQy52YWxpZGF0ZSgpKTtcbiAgICBpZiAodGhpcy5lcnJvcnMuc2l6ZSkgcmV0dXJuIHRoaXMuX21lc3NhZ2UuZXJyb3IoJ0NPTU1PTi5GT1JNX0hBU19FUlJPUl9UT19DSEVDSycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2xvYWRpbmcuc2hvdygpO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fY2FsZW5kYXJzLnB1dENhbGVuZGFyKHRoaXMuY2FsZW5kYXJXQyk7XG4gICAgICB0aGlzLmNhbGVuZGFyLmxvYWQocmVzKTtcbiAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkNBTEVOREFSX1NBVkVEJyk7XG4gICAgICB0aGlzLl9tb2RhbC5kaXNtaXNzKHRoaXMuY2FsZW5kYXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLl9tZXNzYWdlLmVycm9yKCdDT01NT04uT1BFUkFUSU9OX0ZBSUxFRCcpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9sb2FkaW5nLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZG9EZWxldGUgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLl9sb2FkaW5nLnNob3coKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fY2FsZW5kYXJzLmRlbGV0ZUNhbGVuZGFyKHRoaXMuY2FsZW5kYXJXQyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkNBTEVOREFSX0RFTEVURUQnKTtcbiAgICAgICAgdGhpcy5fbW9kYWwuZGlzbWlzcyh0cnVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UuZXJyb3IoJ0NPTU1PTi5PUEVSQVRJT05fRkFJTEVEJyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9sb2FkaW5nLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5fdHJhbnNsYXRlLl8oJ0NPTU1PTi5BUkVfWU9VX1NVUkUnKTtcbiAgICBjb25zdCBzdWJIZWFkZXIgPSB0aGlzLl90cmFuc2xhdGUuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkRFTEVURV9DQUxFTkRBUicpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLl90cmFuc2xhdGUuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkRFTEVURV9DQUxFTkRBUl9ISU5UJyk7XG4gICAgY29uc3QgYnV0dG9ucyA9IFtcbiAgICAgIHsgdGV4dDogdGhpcy5fdHJhbnNsYXRlLl8oJ0NPTU1PTi5DQU5DRUwnKSwgcm9sZTogJ2NhbmNlbCcgfSxcbiAgICAgIHsgdGV4dDogdGhpcy5fdHJhbnNsYXRlLl8oJ0NPTU1PTi5ERUxFVEUnKSwgaGFuZGxlcjogZG9EZWxldGUgfVxuICAgIF07XG4gICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLl9hbGVydC5jcmVhdGUoeyBoZWFkZXIsIHN1YkhlYWRlciwgbWVzc2FnZSwgYnV0dG9ucyB9KTtcbiAgICBhbGVydC5wcmVzZW50KCk7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9tb2RhbC5kaXNtaXNzKCk7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJpZGVhVG9vbGJhclwiPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgIDxpb24tYnV0dG9uIFt0aXRsZV09XCInQ09NTU9OLkNMT1NFJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2UtY2lyY2xlXCIgc2xvdD1cImljb24tb25seVwiIC8+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgICA8aW9uLXRpdGxlPnt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuRURJVF9DQUxFTkRBUicgfCB0cmFuc2xhdGUgfX08L2lvbi10aXRsZT5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgPGlvbi1idXR0b24gW3RpdGxlXT1cIidDT01NT04uU0FWRScgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwic2F2ZSgpXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2hlY2ttYXJrLWNpcmNsZVwiIHNsb3Q9XCJpY29uLW9ubHlcIiAvPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG48aW9uLWNvbnRlbnQ+XG4gIEBpZiAoY2FsZW5kYXJXQykge1xuICAgIDxkaXYgY2xhc3M9XCJtYXhXaWR0aENvbnRhaW5lclwiPlxuICAgICAgPGlvbi1saXN0IGNsYXNzPVwiYUxpc3RcIj5cbiAgICAgICAgPGlvbi1pdGVtXG4gICAgICAgICAgbGluZXM9XCJpbnNldFwiXG4gICAgICAgICAgW2NsYXNzLmZpZWxkSGFzRXJyb3JdPVwiaGFzRmllbGRBbkVycm9yKCduYW1lJylcIlxuICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BR0VOREEuQ0FMRU5EQVJTLk5BTUVfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlvbi1pbnB1dFxuICAgICAgICAgICAgbGFiZWxQbGFjZW1lbnQ9XCJzdGFja2VkXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInSURFQV9BR0VOREEuQ0FMRU5EQVJTLk5BTUUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInSURFQV9BR0VOREEuQ0FMRU5EQVJTLk5BTUVfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjYWxlbmRhcldDLm5hbWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgIDxpb24taXRlbVxuICAgICAgICAgIGxpbmVzPVwiaW5zZXRcIlxuICAgICAgICAgIFtjbGFzcy5maWVsZEhhc0Vycm9yXT1cImhhc0ZpZWxkQW5FcnJvcignZGVzY3JpcHRpb24nKVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FHRU5EQS5DQUxFTkRBUlMuREVTQ1JJUFRJT05fSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlvbi1pbnB1dFxuICAgICAgICAgICAgbGFiZWxQbGFjZW1lbnQ9XCJzdGFja2VkXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInSURFQV9BR0VOREEuQ0FMRU5EQVJTLkRFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5ERVNDUklQVElPTl9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNhbGVuZGFyV0MuZGVzY3JpcHRpb25cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgIEBpZiAoIWhpZGVDb2xvcikge1xuICAgICAgICAgIDxpZGVhLWNvbG9yLXBpY2tlclxuICAgICAgICAgICAgW2xpbmVzXT1cIidpbnNldCdcIlxuICAgICAgICAgICAgW2N1cnJlbnRdPVwiY2FsZW5kYXJXQy5jb2xvclwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5DT0xPUicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2NsYXNzLmZpZWxkSGFzRXJyb3JdPVwiaGFzRmllbGRBbkVycm9yKCdjb2xvcicpXCJcbiAgICAgICAgICAgIChzZWxlY3QpPVwiJGV2ZW50ID8gKGNhbGVuZGFyV0MuY29sb3IgPSAkZXZlbnQpIDogbnVsbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKG1lbWJlcnNoaXBzQ2hlY2tzICYmIGNhbGVuZGFyV0MuaXNTaGFyZWQoKSAmJiBhZHZhbmNlZFBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgPGlkZWEtY2hlY2tlclxuICAgICAgICAgICAgW2RhdGFdPVwibWVtYmVyc2hpcHNDaGVja3NcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidJREVBX0FHRU5EQS5DQUxFTkRBUlMuVVNFUlNfQUxMT1dFRF9UT19NQU5BR0VfQVBQT0lOVE1FTlRTJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbc2VhcmNoUGxhY2Vob2xkZXJdPVwiJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5XSE9fQ0FOX01BTkFHRV9BUFBPSU5UTUVOVFMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtub25lVGV4dF09XCInSURFQV9BR0VOREEuQ0FMRU5EQVJTLk5PQk9EWScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FsbFRleHRdPVwiJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5FVkVSWU9ORScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FsbG93U2VsZWN0RGVzZWxlY3RBbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbbGluZXNdPVwiJ2luc2V0J1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC9pb24tbGlzdD5cbiAgICAgIEBpZiAoY2FsZW5kYXJXQy5leHRlcm5hbD8uc2VydmljZSkge1xuICAgICAgICA8aW9uLWxpc3QgY2xhc3M9XCJhTGlzdFwiPlxuICAgICAgICAgIDxpb24tbGlzdC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8aDI+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5JTkZPX09OX0NBTEVOREFSJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICA8L2lvbi1saXN0LWhlYWRlcj5cbiAgICAgICAgICBAaWYgKGNhbGVuZGFyLnVzZXJJZCkge1xuICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwiaW5zZXRcIj5cbiAgICAgICAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICB7eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLlBSSVZBVEVfQ0FMRU5EQVInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPHA+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5QUklWQVRFX0NBTEVOREFSX0hJTlQnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJlbmRcIiBuYW1lPVwicGVyc29uXCIgLz5cbiAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoY2FsZW5kYXIudGVhbUlkKSB7XG4gICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJpbnNldFwiPlxuICAgICAgICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuVEVBTV9DQUxFTkRBUicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8cD57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLlRFQU1fQ0FMRU5EQVJfSElOVCcgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImVuZFwiIG5hbWU9XCJwZW9wbGVcIiAvPlxuICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwiaW5zZXRcIj5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgICAgICAgIHt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuTElOS0VEX1RPJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICB7eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLlNFUlZJQ0VTLicgKyBjYWxlbmRhcldDLmV4dGVybmFsLnNlcnZpY2UgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPHA+e3sgY2FsZW5kYXJXQy5leHRlcm5hbC5uYW1lIH19ICh7eyBjYWxlbmRhcldDLmV4dGVybmFsLmVtYWlsIH19KTwvcD5cbiAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJlbmRcIiBbbmFtZV09XCJjYWxlbmRhcnMuZ2V0U2VydmljZUljb24oY2FsZW5kYXJXQy5leHRlcm5hbC5zZXJ2aWNlKVwiIC8+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJpbnNldFwiPlxuICAgICAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICAgICAge3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5BQ0NFU1NfTEVWRUxTLicgKyBjYWxlbmRhcldDLmV4dGVybmFsLnVzZXJBY2Nlc3MgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPHA+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5CQVNFRF9PTl9FWFRFUk5BTF9TRVJWSUNFX1NIQVJJTkdfUEVSTUlTU0lPTicgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiZW5kXCIgbmFtZT1cInNoaWVsZFwiIC8+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgIH1cbiAgICAgIDxpb24tbGlzdCBjbGFzcz1cImFMaXN0XCI+XG4gICAgICAgIDxpb24tbGlzdC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cImRhbmdlclwiPlxuICAgICAgICAgICAgPGgyPnt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuREFOR0VST1VTX1pPTkUnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgPC9pb24tbGlzdC1oZWFkZXI+XG4gICAgICAgIDxpb24taXRlbSBsaW5lcz1cImluc2V0XCI+XG4gICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIj5cbiAgICAgICAgICAgIHt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuREVMRVRFX0NBTEVOREFSJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPHA+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5ERUxFVEVfQ0FMRU5EQVJfSElOVCcgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BR0VOREEuQ0FMRU5EQVJTLkRFTEVURV9DQUxFTkRBUl9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdDT01NT04uREVMRVRFJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24taXRlbT5cbiAgICAgIDwvaW9uLWxpc3Q+XG4gICAgPC9kaXY+XG4gIH1cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbW9kdWxlcy9hZ2VuZGEvc3JjL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL21vZHVsZXMvYWdlbmRhL3NyYy9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBYyxNQUFNLGNBQWMsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN4QixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7OztBQU8zRCxNQUFNLE9BQU8scUJBQXFCO0lBTGxDO1FBTVUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFDLFdBQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqQyxRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLGFBQVEsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0QyxTQUFJLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakMsZUFBVSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBa0JyRCxXQUFNLEdB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QUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7U0FDaEUsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs4R0F0R1UscUJBQXFCO2tHQUFyQixxQkFBcUIsMkpDbEJsQyx1eUtBaUlBOzsyRkQvR2EscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLGVBQWU7OEJBaUJoQixRQUFRO3NCQUFoQixLQUFLO2dCQUlHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciwgQWxlcnRDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgQ2FsZW5kYXIsIENoZWNrLCBNZW1iZXJzaGlwIH0gZnJvbSAnaWRlYS10b29sYm94JztcbmltcG9ydCB7XG4gIElERUFMb2FkaW5nU2VydmljZSxcbiAgSURFQUFXU0FQSVNlcnZpY2UsXG4gIElERUFUaW5DYW5TZXJ2aWNlLFxuICBJREVBTWVzc2FnZVNlcnZpY2UsXG4gIElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlXG59IGZyb20gJ0BpZGVhLWlvbmljL2NvbW1vbic7XG5cbmltcG9ydCB7IElERUFDYWxlbmRhcnNTZXJ2aWNlIH0gZnJvbSAnLi9jYWxlbmRhcnMuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lkZWEtY2FsZW5kYXInLFxuICB0ZW1wbGF0ZVVybDogJ2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2NhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSURFQUNhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBfY2FsZW5kYXJzID0gaW5qZWN0KElERUFDYWxlbmRhcnNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfbW9kYWwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfYWxlcnQgPSBpbmplY3QoQWxlcnRDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfdGMgPSBpbmplY3QoSURFQVRpbkNhblNlcnZpY2UpO1xuICBwcml2YXRlIF9sb2FkaW5nID0gaW5qZWN0KElERUFMb2FkaW5nU2VydmljZSk7XG4gIHByaXZhdGUgX21lc3NhZ2UgPSBpbmplY3QoSURFQU1lc3NhZ2VTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfQVBJID0gaW5qZWN0KElERUFBV1NBUElTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfdHJhbnNsYXRlID0gaW5qZWN0KElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlKTtcblxuICAvKipcbiAgICogVGhlIGNhbGVuZGFyIHRvIG1hbmFnZS5cbiAgICovXG4gIEBJbnB1dCgpIGNhbGVuZGFyOiBDYWxlbmRhcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgd2Ugd2FudCB0byBlbmFibGUgYWR2YW5jZWQgcGVybWlzc2lvbnMgKGJhc2VkIG9uIHRoZSBtZW1iZXJzaGlwcykgb24gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgYWR2YW5jZWRQZXJtaXNzaW9uczogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNhbGVuZGFyIGNvbG9yIGlzIGFuIGltcG9ydGFudCBkZXRhaWwgb3IgaXQgc2hvdWxkbid0IGJlIHNob3duLlxuICAgKi9cbiAgQElucHV0KCkgaGlkZUNvbG9yOiBib29sZWFuO1xuXG4gIGNhbGVuZGFyV0M6IENhbGVuZGFyO1xuICBtZW1iZXJzaGlwc0NoZWNrczogQ2hlY2tbXTtcbiAgbWVtYmVyc2hpcDogTWVtYmVyc2hpcDtcbiAgZXJyb3JzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIERFRkFVTFRfQ09MT1IgPSAnIzU1NSc7XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5tZW1iZXJzaGlwID0gdGhpcy5fdGMuZ2V0KCdtZW1iZXJzaGlwJyk7XG4gICAgdGhpcy5jYWxlbmRhcldDID0gbmV3IENhbGVuZGFyKHRoaXMuY2FsZW5kYXIpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZW1iZXJzaGlwczogTWVtYmVyc2hpcFtdID0gYXdhaXQgdGhpcy5fQVBJLmdldFJlc291cmNlKGB0ZWFtcy8ke3RoaXMubWVtYmVyc2hpcC50ZWFtSWR9L21lbWJlcnNoaXBzYCk7XG4gICAgICB0aGlzLm1lbWJlcnNoaXBzQ2hlY2tzID0gbWVtYmVyc2hpcHMubWFwKFxuICAgICAgICBtID0+XG4gICAgICAgICAgbmV3IENoZWNrKHtcbiAgICAgICAgICAgIHZhbHVlOiBtLnVzZXJJZCxcbiAgICAgICAgICAgIG5hbWU6IG0ubmFtZSxcbiAgICAgICAgICAgIGNoZWNrZWQ6ICh0aGlzLmNhbGVuZGFyV0MudXNlcnNDYW5NYW5hZ2VBcHBvaW50bWVudHMgfHwgW10pLnNvbWUoeCA9PiB4ID09PSBtLnVzZXJJZClcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5fbWVzc2FnZS5lcnJvcignQ09NTU9OLkNPVUxETlRfTE9BRF9MSVNUJyk7XG4gICAgfVxuICB9XG5cbiAgaGFzRmllbGRBbkVycm9yKGZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMuaGFzKGZpZWxkKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhbGVuZGFyV0MuY29sb3IpIHRoaXMuY2FsZW5kYXJXQy5jb2xvciA9IHRoaXMuREVGQVVMVF9DT0xPUjtcbiAgICBpZiAodGhpcy5jYWxlbmRhcldDLmlzU2hhcmVkKCkgJiYgdGhpcy5hZHZhbmNlZFBlcm1pc3Npb25zKVxuICAgICAgdGhpcy5jYWxlbmRhcldDLnVzZXJzQ2FuTWFuYWdlQXBwb2ludG1lbnRzID0gdGhpcy5tZW1iZXJzaGlwc0NoZWNrc1xuICAgICAgICAuZmlsdGVyKHggPT4geC5jaGVja2VkKVxuICAgICAgICAubWFwKHggPT4gU3RyaW5nKHgudmFsdWUpKTtcbiAgICBlbHNlIGRlbGV0ZSB0aGlzLmNhbGVuZGFyV0MudXNlcnNDYW5NYW5hZ2VBcHBvaW50bWVudHM7XG5cbiAgICB0aGlzLmVycm9ycyA9IG5ldyBTZXQodGhpcy5jYWxlbmRhcldDLnZhbGlkYXRlKCkpO1xuICAgIGlmICh0aGlzLmVycm9ycy5zaXplKSByZXR1cm4gdGhpcy5fbWVzc2FnZS5lcnJvcignQ09NTU9OLkZPUk1fSEFTX0VSUk9SX1RPX0NIRUNLJyk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fbG9hZGluZy5zaG93KCk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9jYWxlbmRhcnMucHV0Q2FsZW5kYXIodGhpcy5jYWxlbmRhcldDKTtcbiAgICAgIHRoaXMuY2FsZW5kYXIubG9hZChyZXMpO1xuICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuQ0FMRU5EQVJfU0FWRUQnKTtcbiAgICAgIHRoaXMuX21vZGFsLmRpc21pc3ModGhpcy5jYWxlbmRhcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuX21lc3NhZ2UuZXJyb3IoJ0NPTU1PTi5PUEVSQVRJT05fRkFJTEVEJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmcuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkb0RlbGV0ZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2xvYWRpbmcuc2hvdygpO1xuICAgICAgICBhd2FpdCB0aGlzLl9jYWxlbmRhcnMuZGVsZXRlQ2FsZW5kYXIodGhpcy5jYWxlbmRhcldDKTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuQ0FMRU5EQVJfREVMRVRFRCcpO1xuICAgICAgICB0aGlzLl9tb2RhbC5kaXNtaXNzKHRydWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5lcnJvcignQ09NTU9OLk9QRVJBVElPTl9GQUlMRUQnKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmcuaGlkZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLl90cmFuc2xhdGUuXygnQ09NTU9OLkFSRV9ZT1VfU1VSRScpO1xuICAgIGNvbnN0IHN1YkhlYWRlciA9IHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuREVMRVRFX0NBTEVOREFSJyk7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuREVMRVRFX0NBTEVOREFSX0hJTlQnKTtcbiAgICBjb25zdCBidXR0b25zID0gW1xuICAgICAgeyB0ZXh0OiB0aGlzLl90cmFuc2xhdGUuXygnQ09NTU9OLkNBTkNFTCcpLCByb2xlOiAnY2FuY2VsJyB9LFxuICAgICAgeyB0ZXh0OiB0aGlzLl90cmFuc2xhdGUuXygnQ09NTU9OLkRFTEVURScpLCBoYW5kbGVyOiBkb0RlbGV0ZSB9XG4gICAgXTtcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuX2FsZXJ0LmNyZWF0ZSh7IGhlYWRlciwgc3ViSGVhZGVyLCBtZXNzYWdlLCBidXR0b25zIH0pO1xuICAgIGFsZXJ0LnByZXNlbnQoKTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX21vZGFsLmRpc21pc3MoKTtcbiAgfVxufVxuIiwiPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhciBjb2xvcj1cImlkZWFUb29sYmFyXCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1idXR0b24gW3RpdGxlXT1cIidDT01NT04uQ0xPU0UnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1jaXJjbGVcIiBzbG90PVwiaWNvbi1vbmx5XCIgLz5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuICAgIDxpb24tdGl0bGU+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5FRElUX0NBTEVOREFSJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLXRpdGxlPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICA8aW9uLWJ1dHRvbiBbdGl0bGVdPVwiJ0NPTU1PTi5TQVZFJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJzYXZlKClcIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjaGVja21hcmstY2lyY2xlXCIgc2xvdD1cImljb24tb25seVwiIC8+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cbjxpb24tY29udGVudD5cbiAgQGlmIChjYWxlbmRhcldDKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1heFdpZHRoQ29udGFpbmVyXCI+XG4gICAgICA8aW9uLWxpc3QgY2xhc3M9XCJhTGlzdFwiPlxuICAgICAgICA8aW9uLWl0ZW1cbiAgICAgICAgICBsaW5lcz1cImluc2V0XCJcbiAgICAgICAgICBbY2xhc3MuZmllbGRIYXNFcnJvcl09XCJoYXNGaWVsZEFuRXJyb3IoJ25hbWUnKVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FHRU5EQS5DQUxFTkRBUlMuTkFNRV9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW9uLWlucHV0XG4gICAgICAgICAgICBsYWJlbFBsYWNlbWVudD1cInN0YWNrZWRcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidJREVBX0FHRU5EQS5DQUxFTkRBUlMuTkFNRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidJREVBX0FHRU5EQS5DQUxFTkRBUlMuTkFNRV9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNhbGVuZGFyV0MubmFtZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgPGlvbi1pdGVtXG4gICAgICAgICAgbGluZXM9XCJpbnNldFwiXG4gICAgICAgICAgW2NsYXNzLmZpZWxkSGFzRXJyb3JdPVwiaGFzRmllbGRBbkVycm9yKCdkZXNjcmlwdGlvbicpXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5ERVNDUklQVElPTl9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW9uLWlucHV0XG4gICAgICAgICAgICBsYWJlbFBsYWNlbWVudD1cInN0YWNrZWRcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidJREVBX0FHRU5EQS5DQUxFTkRBUlMuREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInSURFQV9BR0VOREEuQ0FMRU5EQVJTLkRFU0NSSVBUSU9OX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2FsZW5kYXJXQy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgQGlmICghaGlkZUNvbG9yKSB7XG4gICAgICAgICAgPGlkZWEtY29sb3ItcGlja2VyXG4gICAgICAgICAgICBbbGluZXNdPVwiJ2luc2V0J1wiXG4gICAgICAgICAgICBbY3VycmVudF09XCJjYWxlbmRhcldDLmNvbG9yXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInSURFQV9BR0VOREEuQ0FMRU5EQVJTLkNPTE9SJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbY2xhc3MuZmllbGRIYXNFcnJvcl09XCJoYXNGaWVsZEFuRXJyb3IoJ2NvbG9yJylcIlxuICAgICAgICAgICAgKHNlbGVjdCk9XCIkZXZlbnQgPyAoY2FsZW5kYXJXQy5jb2xvciA9ICRldmVudCkgOiBudWxsXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAobWVtYmVyc2hpcHNDaGVja3MgJiYgY2FsZW5kYXJXQy5pc1NoYXJlZCgpICYmIGFkdmFuY2VkUGVybWlzc2lvbnMpIHtcbiAgICAgICAgICA8aWRlYS1jaGVja2VyXG4gICAgICAgICAgICBbZGF0YV09XCJtZW1iZXJzaGlwc0NoZWNrc1wiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5VU0VSU19BTExPV0VEX1RPX01BTkFHRV9BUFBPSU5UTUVOVFMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtzZWFyY2hQbGFjZWhvbGRlcl09XCInSURFQV9BR0VOREEuQ0FMRU5EQVJTLldIT19DQU5fTUFOQUdFX0FQUE9JTlRNRU5UUycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW25vbmVUZXh0XT1cIidJREVBX0FHRU5EQS5DQUxFTkRBUlMuTk9CT0RZJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYWxsVGV4dF09XCInSURFQV9BR0VOREEuQ0FMRU5EQVJTLkVWRVJZT05FJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbYWxsb3dTZWxlY3REZXNlbGVjdEFsbF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtsaW5lc109XCInaW5zZXQnXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L2lvbi1saXN0PlxuICAgICAgQGlmIChjYWxlbmRhcldDLmV4dGVybmFsPy5zZXJ2aWNlKSB7XG4gICAgICAgIDxpb24tbGlzdCBjbGFzcz1cImFMaXN0XCI+XG4gICAgICAgICAgPGlvbi1saXN0LWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgICAgICAgIDxoMj57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLklORk9fT05fQ0FMRU5EQVInIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgIDwvaW9uLWxpc3QtaGVhZGVyPlxuICAgICAgICAgIEBpZiAoY2FsZW5kYXIudXNlcklkKSB7XG4gICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJpbnNldFwiPlxuICAgICAgICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuUFJJVkFURV9DQUxFTkRBUicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8cD57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLlBSSVZBVEVfQ0FMRU5EQVJfSElOVCcgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImVuZFwiIG5hbWU9XCJwZXJzb25cIiAvPlxuICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChjYWxlbmRhci50ZWFtSWQpIHtcbiAgICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cImluc2V0XCI+XG4gICAgICAgICAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgICAgICAgICAge3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5URUFNX0NBTEVOREFSJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDxwPnt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuVEVBTV9DQUxFTkRBUl9ISU5UJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiZW5kXCIgbmFtZT1cInBlb3BsZVwiIC8+XG4gICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJpbnNldFwiPlxuICAgICAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICAgICAge3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5MSU5LRURfVE8nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIHt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuU0VSVklDRVMuJyArIGNhbGVuZGFyV0MuZXh0ZXJuYWwuc2VydmljZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8cD57eyBjYWxlbmRhcldDLmV4dGVybmFsLm5hbWUgfX0gKHt7IGNhbGVuZGFyV0MuZXh0ZXJuYWwuZW1haWwgfX0pPC9wPlxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImVuZFwiIFtuYW1lXT1cImNhbGVuZGFycy5nZXRTZXJ2aWNlSWNvbihjYWxlbmRhcldDLmV4dGVybmFsLnNlcnZpY2UpXCIgLz5cbiAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cImluc2V0XCI+XG4gICAgICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgICAgICB7eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkFDQ0VTU19MRVZFTFMuJyArIGNhbGVuZGFyV0MuZXh0ZXJuYWwudXNlckFjY2VzcyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8cD57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkJBU0VEX09OX0VYVEVSTkFMX1NFUlZJQ0VfU0hBUklOR19QRVJNSVNTSU9OJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJlbmRcIiBuYW1lPVwic2hpZWxkXCIgLz5cbiAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICA8L2lvbi1saXN0PlxuICAgICAgfVxuICAgICAgPGlvbi1saXN0IGNsYXNzPVwiYUxpc3RcIj5cbiAgICAgICAgPGlvbi1saXN0LWhlYWRlcj5cbiAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFuZ2VyXCI+XG4gICAgICAgICAgICA8aDI+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5EQU5HRVJPVVNfWk9ORScgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1saXN0LWhlYWRlcj5cbiAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwiaW5zZXRcIj5cbiAgICAgICAgICA8aW9uLWxhYmVsIGNsYXNzPVwiaW9uLXRleHQtd3JhcFwiPlxuICAgICAgICAgICAge3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5ERUxFVEVfQ0FMRU5EQVInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8cD57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkRFTEVURV9DQUxFTkRBUl9ISU5UJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FHRU5EQS5DQUxFTkRBUlMuREVMRVRFX0NBTEVOREFSX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGUoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ0NPTU1PTi5ERUxFVEUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgPC9pb24tbGlzdD5cbiAgICA8L2Rpdj5cbiAgfVxuPC9pb24tY29udGVudD5cbiJdfQ==
@@ -8,14 +8,14 @@ import * as i1 from "@ionic/angular";
8
8
  import * as i2 from "@idea-ionic/common";
9
9
  export class IDEACalendarCreationComponent {
10
10
  constructor() {
11
- this.DEFAULT_COLOR = '#555';
12
- this.SOURCES = Object.keys(ExternalCalendarSources);
13
11
  this._calendars = inject(IDEACalendarsService);
14
12
  this._modal = inject(ModalController);
15
13
  this._tc = inject(IDEATinCanService);
16
14
  this._loading = inject(IDEALoadingService);
17
15
  this._message = inject(IDEAMessageService);
18
16
  this._translate = inject(IDEATranslationsService);
17
+ this.DEFAULT_COLOR = '#555';
18
+ this.SOURCES = Object.keys(ExternalCalendarSources);
19
19
  }
20
20
  ngOnInit() {
21
21
  this.calendar = new Calendar();
@@ -113,4 +113,4 @@ export var CalendarScopes;
113
113
  CalendarScopes["SHARED"] = "shared";
114
114
  CalendarScopes["PRIVATE"] = "private"; // userId
115
115
  })(CalendarScopes || (CalendarScopes = {}));
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXJDcmVhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2FnZW5kYS9zcmMvY2FsZW5kYXJDcmVhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9tb2R1bGVzL2FnZW5kYS9zcmMvY2FsZW5kYXJDcmVhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQWMsTUFBTSxjQUFjLENBQUM7QUFDbkcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFPM0QsTUFBTSxPQUFPLDZCQUE2QjtJQUwxQztRQWlCRSxrQkFBYSxHQUFHLE1BQU0sQ0FBQztRQUN2QixZQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRXZDLGVBQVUsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUMxQyxXQUFNLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pDLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyxhQUFRLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLGVBQVUsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztLQXVFdEQ7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O0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs4R0ExRlUsNkJBQTZCO2tHQUE3Qiw2QkFBNkIsZ0pDWjFDLGc2SUFtSEE7OzJGRHZHYSw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0Usd0JBQXdCOzhCQVF6QixRQUFRO3NCQUFoQixLQUFLO2dCQUlHLHFCQUFxQjtzQkFBN0IsS0FBSzs7QUFxRlI7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxjQUdYO0FBSEQsV0FBWSxjQUFjO0lBQ3hCLG1DQUFpQixDQUFBO0lBQ2pCLHFDQUFtQixDQUFBLENBQUMsU0FBUztBQUMvQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgQ2FsZW5kYXIsIEV4dGVybmFsQ2FsZW5kYXJJbmZvLCBFeHRlcm5hbENhbGVuZGFyU291cmNlcywgTWVtYmVyc2hpcCB9IGZyb20gJ2lkZWEtdG9vbGJveCc7XG5pbXBvcnQgeyBJREVBTG9hZGluZ1NlcnZpY2UsIElERUFUaW5DYW5TZXJ2aWNlLCBJREVBTWVzc2FnZVNlcnZpY2UsIElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQGlkZWEtaW9uaWMvY29tbW9uJztcblxuaW1wb3J0IHsgSURFQUNhbGVuZGFyc1NlcnZpY2UgfSBmcm9tICcuL2NhbGVuZGFycy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWRlYS1jYWxlbmRhci1jcmVhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnY2FsZW5kYXJDcmVhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydjYWxlbmRhckNyZWF0aW9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSURFQUNhbGVuZGFyQ3JlYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogV2hldGhlciB3ZSB3YW50IHRvIGFsbG93IHRoZSBjcmVhdGlvbiBvZiBvbmx5IGEgcGFydGljdWxhciB0eXBlIG9mIGNhbGVuZGFyLCBiYXNlZCBvbiB0aGUgc2NvcGUuXG4gICAqL1xuICBASW5wdXQoKSBmaXhTY29wZTogQ2FsZW5kYXJTY29wZXM7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHdlIHdhbnQgdG8gYWxsb3cgdGhlIGNyZWF0aW9uIG9mIGxvY2FsIGNhbGVuZGFycy5cbiAgICovXG4gIEBJbnB1dCgpIG9ubHlFeHRlcm5hbENhbGVuZGFyczogYm9vbGVhbjtcblxuICBtZW1iZXJzaGlwOiBNZW1iZXJzaGlwO1xuICBjYWxlbmRhcjogQ2FsZW5kYXI7XG4gIERFRkFVTFRfQ09MT1IgPSAnIzU1NSc7XG4gIFNPVVJDRVMgPSBPYmplY3Qua2V5cyhFeHRlcm5hbENhbGVuZGFyU291cmNlcyk7XG5cbiAgcHJpdmF0ZSBfY2FsZW5kYXJzID0gaW5qZWN0KElERUFDYWxlbmRhcnNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfbW9kYWwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfdGMgPSBpbmplY3QoSURFQVRpbkNhblNlcnZpY2UpO1xuICBwcml2YXRlIF9sb2FkaW5nID0gaW5qZWN0KElERUFMb2FkaW5nU2VydmljZSk7XG4gIHByaXZhdGUgX21lc3NhZ2UgPSBpbmplY3QoSURFQU1lc3NhZ2VTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfdHJhbnNsYXRlID0gaW5qZWN0KElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbGVuZGFyID0gbmV3IENhbGVuZGFyKCk7XG4gICAgdGhpcy5tZW1iZXJzaGlwID0gdGhpcy5fdGMuZ2V0KCdtZW1iZXJzaGlwJyk7XG4gICAgaWYgKHRoaXMuZml4U2NvcGUgPT09IENhbGVuZGFyU2NvcGVzLlNIQVJFRCkgdGhpcy5jYWxlbmRhci50ZWFtSWQgPSB0aGlzLm1lbWJlcnNoaXAudGVhbUlkO1xuICAgIGlmICh0aGlzLmZpeFNjb3BlID09PSBDYWxlbmRhclNjb3Blcy5QUklWQVRFKSB0aGlzLmNhbGVuZGFyLnVzZXJJZCA9IHRoaXMubWVtYmVyc2hpcC51c2VySWQ7XG4gIH1cblxuICByZXNldFNjb3BlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbkNoYW5nZVNjb3BlKCkpIHRoaXMuY2FsZW5kYXIudGVhbUlkID0gdGhpcy5jYWxlbmRhci51c2VySWQgPSBudWxsO1xuICB9XG4gIGNhbkNoYW5nZVNjb3BlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5maXhTY29wZSAmJiB0aGlzLnNjb3BlSXNTZXQoKTtcbiAgfVxuICBzY29wZUlzU2V0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuY2FsZW5kYXIudXNlcklkKSB8fCBCb29sZWFuKHRoaXMuY2FsZW5kYXIudGVhbUlkKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVOZXdDYWxlbmRhcihzZXJ2aWNlPzogRXh0ZXJuYWxDYWxlbmRhclNvdXJjZXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuc2NvcGVJc1NldCgpKSByZXR1cm47XG4gICAgaWYgKCFzZXJ2aWNlICYmIHRoaXMub25seUV4dGVybmFsQ2FsZW5kYXJzKSByZXR1cm47XG4gICAgaWYgKHNlcnZpY2UpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuZXh0ZXJuYWwgPSBuZXcgRXh0ZXJuYWxDYWxlbmRhckluZm8oeyBzZXJ2aWNlIH0pO1xuICAgICAgdGhpcy5jYWxlbmRhci5uYW1lID0gJy0nOyAvLyBpdCB3aWxsIGJlIHN1YnN0aXR1dGVkIHdpdGggdGhlIGV4dGVybmFsIG5hbWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYWxlbmRhci5uYW1lID0gdGhpcy5jYWxlbmRhci51c2VySWRcbiAgICAgICAgPyB0aGlzLl90cmFuc2xhdGUuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkRFRkFVTFRfUEVSU09OQUxfQ0FMRU5EQVJfTkFNRScpXG4gICAgICAgIDogdGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5ERUZBVUxUX1RFQU1fQ0FMRU5EQVJfTkFNRScpO1xuICAgICAgdGhpcy5jYWxlbmRhci5jb2xvciA9IHRoaXMuREVGQVVMVF9DT0xPUjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2xvYWRpbmcuc2hvdygpO1xuICAgICAgY29uc3QgY2FsID0gYXdhaXQgdGhpcy5fY2FsZW5kYXJzLnBvc3RDYWxlbmRhcih0aGlzLmNhbGVuZGFyKTtcbiAgICAgIHRoaXMuY2FsZW5kYXIubG9hZChjYWwpO1xuICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuQ0FMRU5EQVJfQ1JFQVRFRCcpO1xuICAgICAgaWYgKCFjYWwuZXh0ZXJuYWwpIHtcbiAgICAgICAgdGhpcy5fbW9kYWwuZGlzbWlzcyh0aGlzLmNhbGVuZGFyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fY2FsZW5kYXJzLmxpbmtFeHRTZXJ2aWNlKHRoaXMuY2FsZW5kYXIpO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9jYWxlbmRhcnMuY2hvb3NlQW5kU2V0RXh0ZXJuYWxDYWxlbmRhcih0aGlzLmNhbGVuZGFyKTtcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICB0aGlzLl9tb2RhbC5kaXNtaXNzKHRoaXMuY2FsZW5kYXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGVuZGFyLmxvYWQocmVzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fbG9hZGluZy5zaG93KHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuRklSU1RfU1lOQ19NQVlfVEFLRV9BX1dISUxFJykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbGVuZGFycy5zeW5jQ2FsZW5kYXIodGhpcy5jYWxlbmRhcik7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuRklSU1RfU1lOQ19DT01QTEVURUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLmVycm9yKCdDT01NT04uT1BFUkFUSU9OX0ZBSUxFRCcpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMuX21vZGFsLmRpc21pc3ModGhpcy5jYWxlbmRhcik7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2UuZXJyb3IoJ0NPTU1PTi5PUEVSQVRJT05fRkFJTEVEJyk7XG4gICAgICAgIHRoaXMuX21vZGFsLmRpc21pc3ModGhpcy5jYWxlbmRhcik7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuX21lc3NhZ2UuZXJyb3IoJ0NPTU1PTi5PUEVSQVRJT05fRkFJTEVEJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmcuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX21vZGFsLmRpc21pc3MoKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBwb3NzaWJsZSBzY29wZXMgb2YgdGhlIGNhbGVuZGFyLlxuICovXG5leHBvcnQgZW51bSBDYWxlbmRhclNjb3BlcyB7XG4gIFNIQVJFRCA9ICdzaGFyZWQnLCAvLyB0ZWFtSWRcbiAgUFJJVkFURSA9ICdwcml2YXRlJyAvLyB1c2VySWRcbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJpZGVhVG9vbGJhclwiPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgIEBpZiAoIWNhbkNoYW5nZVNjb3BlKCkpIHtcbiAgICAgICAgPGlvbi1idXR0b24gW3RpdGxlXT1cIidDT01NT04uQ0xPU0UnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlXCIgc2xvdD1cImljb24tb25seVwiIC8+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIH1cbiAgICAgIEBpZiAoY2FuQ2hhbmdlU2NvcGUoKSkge1xuICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwicmVzZXRTY29wZSgpXCI+XG4gICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJhcnJvdy1iYWNrXCIgc2xvdD1cImljb24tb25seVwiIC8+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2lvbi1idXR0b25zPlxuICAgIDxpb24tdGl0bGU+XG4gICAgICBAaWYgKCFzY29wZUlzU2V0KCkpIHtcbiAgICAgICAgPHNwYW4+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5BRERfQV9DQUxFTkRBUicgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICB9XG4gICAgICBAaWYgKGNhbGVuZGFyLnVzZXJJZCkge1xuICAgICAgICA8c3Bhbj57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLlBFUlNPTkFMX0NBTEVOREFSJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIEBpZiAoY2FsZW5kYXIudGVhbUlkKSB7XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgIHt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuVEVBTV9DQUxFTkRBUicgfCB0cmFuc2xhdGU6IHsgdGVhbTogdGMuZ2V0KCd0ZWFtJykubmFtZSB9IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2lvbi10aXRsZT5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cbjxpb24tY29udGVudD5cbiAgPCEtLSAxc3QgU1RFUCAtLT5cbiAgQGlmICghc2NvcGVJc1NldCgpKSB7XG4gICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLXBhZGRpbmcgY2hvaWNlR3JpZFwiPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPGgxPnt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuQ1JFQVRFX1BSSVZBVEVfT1JfVEVBTScgfCB0cmFuc2xhdGUgfX08L2gxPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1hbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIiBbc2l6ZV09XCIxMlwiIFtzaXplU21dPVwiNlwiPlxuICAgICAgICAgIDxpb24tY2FyZCBbYnV0dG9uXT1cInRydWVcIiAoY2xpY2spPVwiY2FsZW5kYXIudXNlcklkID0gbWVtYmVyc2hpcC51c2VySWRcIj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInBlcnNvblwiIC8+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8aDE+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5QRVJTT05BTF9DQUxFTkRBUicgfCB0cmFuc2xhdGUgfX08L2gxPlxuICAgICAgICAgICAgICA8cD57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLlBFUlNPTkFMX0NBTEVOREFSX0hJTlQnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIiBbc2l6ZV09XCIxMlwiIFtzaXplU21dPVwiNlwiPlxuICAgICAgICAgIDxpb24tY2FyZCBbYnV0dG9uXT1cInRydWVcIiAoY2xpY2spPVwiY2FsZW5kYXIudGVhbUlkID0gbWVtYmVyc2hpcC50ZWFtSWRcIj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInBlb3BsZVwiIC8+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8aDE+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5URUFNX0NBTEVOREFSJyB8IHRyYW5zbGF0ZSB9fTwvaDE+XG4gICAgICAgICAgICAgIDxwPnt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuVEVBTV9DQUxFTkRBUl9ISU5UJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgPC9pb24tZ3JpZD5cbiAgfVxuICA8IS0tIDJuZCBTVEVQIC0tPlxuICBAaWYgKHNjb3BlSXNTZXQoKSkge1xuICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1wYWRkaW5nIGNob2ljZUdyaWRcIj5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiPlxuICAgICAgICAgIDxoMT57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLldISUNIX0VYVEVSTkFMX1NFUlZJQ0VfVE9fTElOSycgfCB0cmFuc2xhdGUgfX08L2gxPlxuICAgICAgICAgIDxwPnt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuV0hJQ0hfRVhURVJOQUxfU0VSVklDRV9UT19MSU5LX0hJTlQnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1hbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgQGlmICghb25seUV4dGVybmFsQ2FsZW5kYXJzKSB7XG4gICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIiBbc2l6ZV09XCIxMlwiPlxuICAgICAgICAgICAgPGlvbi1jYXJkIGNsYXNzPVwic3RlcDJcIiBbYnV0dG9uXT1cInRydWVcIiAoY2xpY2spPVwic2F2ZU5ld0NhbGVuZGFyKClcIj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInJlbW92ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgIDxoMT57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkRPTlRfTElOSycgfCB0cmFuc2xhdGUgfX08L2gxPlxuICAgICAgICAgICAgICAgIDxwPnt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuRE9OVF9MSU5LX0hJTlQnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChzIG9mIFNPVVJDRVM7IHRyYWNrIHMpIHtcbiAgICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiIFtzaXplXT1cIjEyXCI+XG4gICAgICAgICAgICA8aW9uLWNhcmQgY2xhc3M9XCJzdGVwMlwiIFtidXR0b25dPVwidHJ1ZVwiIChjbGljayk9XCJzYXZlTmV3Q2FsZW5kYXIocylcIj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiY2FsZW5kYXJzLmdldFNlcnZpY2VJY29uKHMpXCIgLz5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGgxPlxuICAgICAgICAgICAgICAgICAge3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5MSU5LX1RPJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAge3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5TRVJWSUNFUy4nICsgcyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgICAgPHA+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5MSU5LX1RPX0hJTlQnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgfVxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIH1cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXJDcmVhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2FnZW5kYS9zcmMvY2FsZW5kYXJDcmVhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9tb2R1bGVzL2FnZW5kYS9zcmMvY2FsZW5kYXJDcmVhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQWMsTUFBTSxjQUFjLENBQUM7QUFDbkcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFPM0QsTUFBTSxPQUFPLDZCQUE2QjtJQUwxQztRQU1VLGVBQVUsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUMxQyxXQUFNLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pDLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyxhQUFRLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLGVBQVUsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQWFyRCxrQkFBYSxHQUFHLE1BQU0sQ0FBQztRQUN2QixZQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0tBdUVoRDtJ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SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDOzhHQTFGVSw2QkFBNkI7a0dBQTdCLDZCQUE2QixnSkNaMUMsZzZJQW1IQTs7MkZEdkdhLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSx3QkFBd0I7OEJBZXpCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcscUJBQXFCO3NCQUE3QixLQUFLOztBQThFUjs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDeEIsbUNBQWlCLENBQUE7SUFDakIscUNBQW1CLENBQUEsQ0FBQyxTQUFTO0FBQy9CLENBQUMsRUFIVyxjQUFjLEtBQWQsY0FBYyxRQUd6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBDYWxlbmRhciwgRXh0ZXJuYWxDYWxlbmRhckluZm8sIEV4dGVybmFsQ2FsZW5kYXJTb3VyY2VzLCBNZW1iZXJzaGlwIH0gZnJvbSAnaWRlYS10b29sYm94JztcbmltcG9ydCB7IElERUFMb2FkaW5nU2VydmljZSwgSURFQVRpbkNhblNlcnZpY2UsIElERUFNZXNzYWdlU2VydmljZSwgSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICdAaWRlYS1pb25pYy9jb21tb24nO1xuXG5pbXBvcnQgeyBJREVBQ2FsZW5kYXJzU2VydmljZSB9IGZyb20gJy4vY2FsZW5kYXJzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZGVhLWNhbGVuZGFyLWNyZWF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhckNyZWF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2NhbGVuZGFyQ3JlYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJREVBQ2FsZW5kYXJDcmVhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgX2NhbGVuZGFycyA9IGluamVjdChJREVBQ2FsZW5kYXJzU2VydmljZSk7XG4gIHByaXZhdGUgX21vZGFsID0gaW5qZWN0KE1vZGFsQ29udHJvbGxlcik7XG4gIHByaXZhdGUgX3RjID0gaW5qZWN0KElERUFUaW5DYW5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfbG9hZGluZyA9IGluamVjdChJREVBTG9hZGluZ1NlcnZpY2UpO1xuICBwcml2YXRlIF9tZXNzYWdlID0gaW5qZWN0KElERUFNZXNzYWdlU2VydmljZSk7XG4gIHByaXZhdGUgX3RyYW5zbGF0ZSA9IGluamVjdChJREVBVHJhbnNsYXRpb25zU2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgd2Ugd2FudCB0byBhbGxvdyB0aGUgY3JlYXRpb24gb2Ygb25seSBhIHBhcnRpY3VsYXIgdHlwZSBvZiBjYWxlbmRhciwgYmFzZWQgb24gdGhlIHNjb3BlLlxuICAgKi9cbiAgQElucHV0KCkgZml4U2NvcGU6IENhbGVuZGFyU2NvcGVzO1xuICAvKipcbiAgICogV2hldGhlciB3ZSB3YW50IHRvIGFsbG93IHRoZSBjcmVhdGlvbiBvZiBsb2NhbCBjYWxlbmRhcnMuXG4gICAqL1xuICBASW5wdXQoKSBvbmx5RXh0ZXJuYWxDYWxlbmRhcnM6IGJvb2xlYW47XG5cbiAgbWVtYmVyc2hpcDogTWVtYmVyc2hpcDtcbiAgY2FsZW5kYXI6IENhbGVuZGFyO1xuICBERUZBVUxUX0NPTE9SID0gJyM1NTUnO1xuICBTT1VSQ0VTID0gT2JqZWN0LmtleXMoRXh0ZXJuYWxDYWxlbmRhclNvdXJjZXMpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2FsZW5kYXIgPSBuZXcgQ2FsZW5kYXIoKTtcbiAgICB0aGlzLm1lbWJlcnNoaXAgPSB0aGlzLl90Yy5nZXQoJ21lbWJlcnNoaXAnKTtcbiAgICBpZiAodGhpcy5maXhTY29wZSA9PT0gQ2FsZW5kYXJTY29wZXMuU0hBUkVEKSB0aGlzLmNhbGVuZGFyLnRlYW1JZCA9IHRoaXMubWVtYmVyc2hpcC50ZWFtSWQ7XG4gICAgaWYgKHRoaXMuZml4U2NvcGUgPT09IENhbGVuZGFyU2NvcGVzLlBSSVZBVEUpIHRoaXMuY2FsZW5kYXIudXNlcklkID0gdGhpcy5tZW1iZXJzaGlwLnVzZXJJZDtcbiAgfVxuXG4gIHJlc2V0U2NvcGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FuQ2hhbmdlU2NvcGUoKSkgdGhpcy5jYWxlbmRhci50ZWFtSWQgPSB0aGlzLmNhbGVuZGFyLnVzZXJJZCA9IG51bGw7XG4gIH1cbiAgY2FuQ2hhbmdlU2NvcGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmZpeFNjb3BlICYmIHRoaXMuc2NvcGVJc1NldCgpO1xuICB9XG4gIHNjb3BlSXNTZXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5jYWxlbmRhci51c2VySWQpIHx8IEJvb2xlYW4odGhpcy5jYWxlbmRhci50ZWFtSWQpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZU5ld0NhbGVuZGFyKHNlcnZpY2U/OiBFeHRlcm5hbENhbGVuZGFyU291cmNlcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5zY29wZUlzU2V0KCkpIHJldHVybjtcbiAgICBpZiAoIXNlcnZpY2UgJiYgdGhpcy5vbmx5RXh0ZXJuYWxDYWxlbmRhcnMpIHJldHVybjtcbiAgICBpZiAoc2VydmljZSkge1xuICAgICAgdGhpcy5jYWxlbmRhci5leHRlcm5hbCA9IG5ldyBFeHRlcm5hbENhbGVuZGFySW5mbyh7IHNlcnZpY2UgfSk7XG4gICAgICB0aGlzLmNhbGVuZGFyLm5hbWUgPSAnLSc7IC8vIGl0IHdpbGwgYmUgc3Vic3RpdHV0ZWQgd2l0aCB0aGUgZXh0ZXJuYWwgbmFtZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbGVuZGFyLm5hbWUgPSB0aGlzLmNhbGVuZGFyLnVzZXJJZFxuICAgICAgICA/IHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuREVGQVVMVF9QRVJTT05BTF9DQUxFTkRBUl9OQU1FJylcbiAgICAgICAgOiB0aGlzLl90cmFuc2xhdGUuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkRFRkFVTFRfVEVBTV9DQUxFTkRBUl9OQU1FJyk7XG4gICAgICB0aGlzLmNhbGVuZGFyLmNvbG9yID0gdGhpcy5ERUZBVUxUX0NPTE9SO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fbG9hZGluZy5zaG93KCk7XG4gICAgICBjb25zdCBjYWwgPSBhd2FpdCB0aGlzLl9jYWxlbmRhcnMucG9zdENhbGVuZGFyKHRoaXMuY2FsZW5kYXIpO1xuICAgICAgdGhpcy5jYWxlbmRhci5sb2FkKGNhbCk7XG4gICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5DQUxFTkRBUl9DUkVBVEVEJyk7XG4gICAgICBpZiAoIWNhbC5leHRlcm5hbCkge1xuICAgICAgICB0aGlzLl9tb2RhbC5kaXNtaXNzKHRoaXMuY2FsZW5kYXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLl9jYWxlbmRhcnMubGlua0V4dFNlcnZpY2UodGhpcy5jYWxlbmRhcik7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2NhbGVuZGFycy5jaG9vc2VBbmRTZXRFeHRlcm5hbENhbGVuZGFyKHRoaXMuY2FsZW5kYXIpO1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgIHRoaXMuX21vZGFsLmRpc21pc3ModGhpcy5jYWxlbmRhcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsZW5kYXIubG9hZChyZXMpO1xuICAgICAgICBhd2FpdCB0aGlzLl9sb2FkaW5nLnNob3codGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5GSVJTVF9TWU5DX01BWV9UQUtFX0FfV0hJTEUnKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fY2FsZW5kYXJzLnN5bmNDYWxlbmRhcih0aGlzLmNhbGVuZGFyKTtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5GSVJTVF9TWU5DX0NPTVBMRVRFRCcpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2UuZXJyb3IoJ0NPTU1PTi5PUEVSQVRJT05fRkFJTEVEJyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhpcy5fbW9kYWwuZGlzbWlzcyh0aGlzLmNhbGVuZGFyKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5lcnJvcignQ09NTU9OLk9QRVJBVElPTl9GQUlMRUQnKTtcbiAgICAgICAgdGhpcy5fbW9kYWwuZGlzbWlzcyh0aGlzLmNhbGVuZGFyKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5fbWVzc2FnZS5lcnJvcignQ09NTU9OLk9QRVJBVElPTl9GQUlMRUQnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fbG9hZGluZy5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9kYWwuZGlzbWlzcygpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHBvc3NpYmxlIHNjb3BlcyBvZiB0aGUgY2FsZW5kYXIuXG4gKi9cbmV4cG9ydCBlbnVtIENhbGVuZGFyU2NvcGVzIHtcbiAgU0hBUkVEID0gJ3NoYXJlZCcsIC8vIHRlYW1JZFxuICBQUklWQVRFID0gJ3ByaXZhdGUnIC8vIHVzZXJJZFxufVxuIiwiPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhciBjb2xvcj1cImlkZWFUb29sYmFyXCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgQGlmICghY2FuQ2hhbmdlU2NvcGUoKSkge1xuICAgICAgICA8aW9uLWJ1dHRvbiBbdGl0bGVdPVwiJ0NPTU1PTi5DTE9TRScgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiY2xvc2UoKVwiPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiBzbG90PVwiaWNvbi1vbmx5XCIgLz5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfVxuICAgICAgQGlmIChjYW5DaGFuZ2VTY29wZSgpKSB7XG4gICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJyZXNldFNjb3BlKClcIj5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFycm93LWJhY2tcIiBzbG90PVwiaWNvbi1vbmx5XCIgLz5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfVxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPGlvbi10aXRsZT5cbiAgICAgIEBpZiAoIXNjb3BlSXNTZXQoKSkge1xuICAgICAgICA8c3Bhbj57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkFERF9BX0NBTEVOREFSJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIEBpZiAoY2FsZW5kYXIudXNlcklkKSB7XG4gICAgICAgIDxzcGFuPnt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuUEVSU09OQUxfQ0FMRU5EQVInIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgfVxuICAgICAgQGlmIChjYWxlbmRhci50ZWFtSWQpIHtcbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAge3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5URUFNX0NBTEVOREFSJyB8IHRyYW5zbGF0ZTogeyB0ZWFtOiB0Yy5nZXQoJ3RlYW0nKS5uYW1lIH0gfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgfVxuICAgIDwvaW9uLXRpdGxlPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuPGlvbi1jb250ZW50PlxuICA8IS0tIDFzdCBTVEVQIC0tPlxuICBAaWYgKCFzY29wZUlzU2V0KCkpIHtcbiAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tcGFkZGluZyBjaG9pY2VHcmlkXCI+XG4gICAgICA8aW9uLXJvdz5cbiAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8aDE+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5DUkVBVEVfUFJJVkFURV9PUl9URUFNJyB8IHRyYW5zbGF0ZSB9fTwvaDE+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiIFtzaXplXT1cIjEyXCIgW3NpemVTbV09XCI2XCI+XG4gICAgICAgICAgPGlvbi1jYXJkIFtidXR0b25dPVwidHJ1ZVwiIChjbGljayk9XCJjYWxlbmRhci51c2VySWQgPSBtZW1iZXJzaGlwLnVzZXJJZFwiPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwicGVyc29uXCIgLz5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxoMT57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLlBFUlNPTkFMX0NBTEVOREFSJyB8IHRyYW5zbGF0ZSB9fTwvaDE+XG4gICAgICAgICAgICAgIDxwPnt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuUEVSU09OQUxfQ0FMRU5EQVJfSElOVCcgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiIFtzaXplXT1cIjEyXCIgW3NpemVTbV09XCI2XCI+XG4gICAgICAgICAgPGlvbi1jYXJkIFtidXR0b25dPVwidHJ1ZVwiIChjbGljayk9XCJjYWxlbmRhci50ZWFtSWQgPSBtZW1iZXJzaGlwLnRlYW1JZFwiPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwicGVvcGxlXCIgLz5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxoMT57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLlRFQU1fQ0FMRU5EQVInIHwgdHJhbnNsYXRlIH19PC9oMT5cbiAgICAgICAgICAgICAgPHA+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5URUFNX0NBTEVOREFSX0hJTlQnIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICA8L2lvbi1ncmlkPlxuICB9XG4gIDwhLS0gMm5kIFNURVAgLS0+XG4gIEBpZiAoc2NvcGVJc1NldCgpKSB7XG4gICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLXBhZGRpbmcgY2hvaWNlR3JpZFwiPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPGgxPnt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuV0hJQ0hfRVhURVJOQUxfU0VSVklDRV9UT19MSU5LJyB8IHRyYW5zbGF0ZSB9fTwvaDE+XG4gICAgICAgICAgPHA+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5XSElDSF9FWFRFUk5BTF9TRVJWSUNFX1RPX0xJTktfSElOVCcgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICBAaWYgKCFvbmx5RXh0ZXJuYWxDYWxlbmRhcnMpIHtcbiAgICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiIFtzaXplXT1cIjEyXCI+XG4gICAgICAgICAgICA8aW9uLWNhcmQgY2xhc3M9XCJzdGVwMlwiIFtidXR0b25dPVwidHJ1ZVwiIChjbGljayk9XCJzYXZlTmV3Q2FsZW5kYXIoKVwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwicmVtb3ZlXCIgLz5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGgxPnt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuRE9OVF9MSU5LJyB8IHRyYW5zbGF0ZSB9fTwvaDE+XG4gICAgICAgICAgICAgICAgPHA+e3sgJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5ET05UX0xJTktfSElOVCcgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKHMgb2YgU09VUkNFUzsgdHJhY2sgcykge1xuICAgICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCIgW3NpemVdPVwiMTJcIj5cbiAgICAgICAgICAgIDxpb24tY2FyZCBjbGFzcz1cInN0ZXAyXCIgW2J1dHRvbl09XCJ0cnVlXCIgKGNsaWNrKT1cInNhdmVOZXdDYWxlbmRhcihzKVwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJjYWxlbmRhcnMuZ2V0U2VydmljZUljb24ocylcIiAvPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICA8aDE+XG4gICAgICAgICAgICAgICAgICB7eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkxJTktfVE8nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICB7eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLlNFUlZJQ0VTLicgKyBzIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgICA8cD57eyAnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkxJTktfVE9fSElOVCcgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICB9XG4gICAgICA8L2lvbi1yb3c+XG4gICAgPC9pb24tZ3JpZD5cbiAgfVxuPC9pb24tY29udGVudD5cbiJdfQ==
@@ -8,16 +8,16 @@ import * as i1 from "@ionic/angular";
8
8
  import * as i2 from "@idea-ionic/common";
9
9
  export class IDEACalendarItemComponent {
10
10
  constructor() {
11
- /**
12
- * Report to parent components a change.
13
- */
14
- this.somethingChanged = new EventEmitter();
15
11
  this._alert = inject(AlertController);
16
12
  this._modal = inject(ModalController);
17
13
  this._message = inject(IDEAMessageService);
18
14
  this._loading = inject(IDEALoadingService);
19
15
  this._translate = inject(IDEATranslationsService);
20
16
  this._calendars = inject(IDEACalendarsService);
17
+ /**
18
+ * Report to parent components a change.
19
+ */
20
+ this.somethingChanged = new EventEmitter();
21
21
  }
22
22
  async manageCalendar() {
23
23
  if (this.disabled)
@@ -115,4 +115,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImpor
115
115
  }], somethingChanged: [{
116
116
  type: Output
117
117
  }] } });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXJJdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL21vZHVsZXMvYWdlbmRhL3NyYy9jYWxlbmRhckl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vbW9kdWxlcy9hZ2VuZGEvc3JjL2NhbGVuZGFySXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBTzNELE1BQU0sT0FBTyx5QkFBeUI7SUFMdEM7UUFzQkU7O1dBRUc7UUFDTyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBRWxELFdBQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqQyxhQUFRLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLGVBQVUsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUM3QyxlQUFVLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7S0FzRW5EO0lBcEVDLEtBQUssQ0FBQyxjQUFjO1FBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVE7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QUFRO3NCQUFoQixLQUFLO2dCQUlHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlJLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tICdpZGVhLXRvb2xib3gnO1xuaW1wb3J0IHsgSURFQUxvYWRpbmdTZXJ2aWNlLCBJREVBTWVzc2FnZVNlcnZpY2UsIElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQGlkZWEtaW9uaWMvY29tbW9uJztcblxuaW1wb3J0IHsgSURFQUNhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSURFQUNhbGVuZGFyc1NlcnZpY2UgfSBmcm9tICcuL2NhbGVuZGFycy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWRlYS1jYWxlbmRhci1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhckl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnY2FsZW5kYXJJdGVtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSURFQUNhbGVuZGFySXRlbUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgY2FsZW5kYXIgdG8gc2hvdy5cbiAgICovXG4gIEBJbnB1dCgpIGNhbGVuZGFyOiBDYWxlbmRhcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB3ZSB3YW50IHRvIGVuYWJsZSBhZHZhbmNlZCBwZXJtaXNzaW9ucyAoYmFzZWQgb24gdGhlIG1lbWJlcnNoaXBzKSBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBhZHZhbmNlZFBlcm1pc3Npb25zOiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgY2FsZW5kYXIgY29sb3IgaXMgYW4gaW1wb3J0YW50IGRldGFpbCBvciBpdCBzaG91bGRuJ3QgYmUgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKSBoaWRlQ29sb3I6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXBvcnQgdG8gcGFyZW50IGNvbXBvbmVudHMgYSBjaGFuZ2UuXG4gICAqL1xuICBAT3V0cHV0KCkgc29tZXRoaW5nQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FsZW5kYXI+KCk7XG5cbiAgcHJpdmF0ZSBfYWxlcnQgPSBpbmplY3QoQWxlcnRDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfbW9kYWwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfbWVzc2FnZSA9IGluamVjdChJREVBTWVzc2FnZVNlcnZpY2UpO1xuICBwcml2YXRlIF9sb2FkaW5nID0gaW5qZWN0KElERUFMb2FkaW5nU2VydmljZSk7XG4gIHByaXZhdGUgX3RyYW5zbGF0ZSA9IGluamVjdChJREVBVHJhbnNsYXRpb25zU2VydmljZSk7XG4gIHByaXZhdGUgX2NhbGVuZGFycyA9IGluamVjdChJREVBQ2FsZW5kYXJzU2VydmljZSk7XG5cbiAgYXN5bmMgbWFuYWdlQ2FsZW5kYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMuX21vZGFsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IElERUFDYWxlbmRhckNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyLFxuICAgICAgICBhZHZhbmNlZFBlcm1pc3Npb25zOiB0aGlzLmFkdmFuY2VkUGVybWlzc2lvbnMsXG4gICAgICAgIGhpZGVDb2xvcjogdGhpcy5oaWRlQ29sb3JcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtb2RhbC5vbkRpZERpc21pc3MoKS50aGVuKHJlcyA9PiB7XG4gICAgICBjb25zdCBjYWwgPSByZXMuZGF0YTtcbiAgICAgIGlmIChjYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgZWxzZSBpZiAoY2FsID09PSBudWxsKSB0aGlzLmNhbGVuZGFyID0gbnVsbDtcbiAgICAgIGVsc2UgdGhpcy5jYWxlbmRhci5sb2FkKGNhbCk7XG4gICAgICB0aGlzLnNvbWV0aGluZ0NoYW5nZWQuZW1pdCgpO1xuICAgIH0pO1xuICAgIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbGlua0V4dENhbGVuZGFyT3JEZWxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2FsID0gYXdhaXQgdGhpcy5fY2FsZW5kYXJzLmNob29zZUFuZFNldEV4dGVybmFsQ2FsZW5kYXIodGhpcy5jYWxlbmRhcik7XG4gICAgICBpZiAoIWNhbCkgdGhyb3cgbmV3IEVycm9yKCdOT19FWFRFUk5BTF9DQUxFTkRBUl9DSE9TRU4nKTtcbiAgICAgIHRoaXMuY2FsZW5kYXIubG9hZChjYWwpO1xuICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuQ0FMRU5EQVJfTElOS0VEJyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLl9sb2FkaW5nLnNob3codGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5GSVJTVF9TWU5DX01BWV9UQUtFX0FfV0hJTEUnKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2NhbGVuZGFycy5zeW5jQ2FsZW5kYXIodGhpcy5jYWxlbmRhcik7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkZJUlNUX1NZTkNfQ09NUExFVEVEJyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLmVycm9yKCdDT01NT04uT1BFUkFUSU9OX0ZBSUxFRCcpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fbG9hZGluZy5oaWRlKCk7XG4gICAgICAgIHRoaXMuc29tZXRoaW5nQ2hhbmdlZC5lbWl0KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGRvRGVsZXRlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2xvYWRpbmcuc2hvdygpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbGVuZGFycy5kZWxldGVDYWxlbmRhcih0aGlzLmNhbGVuZGFyKTtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0NPTU1PTi5PUEVSQVRJT05fQ09NUExFVEVEJyk7XG4gICAgICAgICAgdGhpcy5zb21ldGhpbmdDaGFuZ2VkLmVtaXQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLmVycm9yKCdDT01NT04uT1BFUkFUSU9OX0ZBSUxFRCcpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMuX2xvYWRpbmcuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZG9MaW5rID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbGVuZGFycy5saW5rRXh0U2VydmljZSh0aGlzLmNhbGVuZGFyKTtcbiAgICAgICAgICB0aGlzLmxpbmtFeHRDYWxlbmRhck9yRGVsZXRlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5lcnJvcignQ09NTU9OLk9QRVJBVElPTl9GQUlMRUQnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuQ0FMRU5EQVJfTk9UX1lFVF9MSU5LRUQnKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLl90cmFuc2xhdGUuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkRPX1lPVV9XQU5UX1BST0NFRURfTElOS0lOR19PUl9ERUxFVEUnKTtcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBbXG4gICAgICAgIHsgdGV4dDogdGhpcy5fdHJhbnNsYXRlLl8oJ0NPTU1PTi5ERUxFVEUnKSwgaGFuZGxlcjogZG9EZWxldGUgfSxcbiAgICAgICAgeyB0ZXh0OiB0aGlzLl90cmFuc2xhdGUuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkxJTksnKSwgaGFuZGxlcjogZG9MaW5rIH1cbiAgICAgIF07XG4gICAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuX2FsZXJ0LmNyZWF0ZSh7IGhlYWRlciwgbWVzc2FnZSwgYnV0dG9ucyB9KTtcbiAgICAgIGFsZXJ0LnByZXNlbnQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIkBpZiAoY2FsZW5kYXIpIHtcbiAgPGlvbi1pdGVtXG4gICAgY2xhc3M9XCJjYWxlbmRhckl0ZW1cIlxuICAgIFtidXR0b25dPVwiIWRpc2FibGVkXCJcbiAgICBbdGl0bGVdPVwiJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5FRElUX0NBTEVOREFSJyB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cImNhbGVuZGFyLmV4dGVybmFsICYmICFjYWxlbmRhci5leHRlcm5hbC5jYWxlbmRhcklkID8gbGlua0V4dENhbGVuZGFyT3JEZWxldGUoKSA6IG1hbmFnZUNhbGVuZGFyKClcIlxuICA+XG4gICAgQGlmICghaGlkZUNvbG9yKSB7XG4gICAgICA8aW9uLWF2YXRhciBzbG90PVwic3RhcnRcIiBjbGFzcz1cImNvbG9yQ2lyY2xlXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiY2FsZW5kYXIuY29sb3JcIiAvPlxuICAgIH1cbiAgICA8aW9uLWxhYmVsPlxuICAgICAge3sgY2FsZW5kYXIubmFtZSB9fVxuICAgICAgPHA+XG4gICAgICAgIEBpZiAoY2FsZW5kYXIuZXh0ZXJuYWwgJiYgIWNhbGVuZGFyLmV4dGVybmFsLmNhbGVuZGFySWQpIHtcbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYW5nZXJcIj5cbiAgICAgICAgICAgIHt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuVEFQX1RPX0NPTkZJR1VSRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICB9XG4gICAgICAgIHt7IGNhbGVuZGFyLmRlc2NyaXB0aW9uIH19XG4gICAgICA8L3A+XG4gICAgPC9pb24tbGFiZWw+XG4gICAgQGlmIChjYWxlbmRhci5leHRlcm5hbCAmJiAhY2FsZW5kYXIuZXh0ZXJuYWwuY2FsZW5kYXJJZCkge1xuICAgICAgPGlvbi1pY29uXG4gICAgICAgIHNsb3Q9XCJlbmRcIlxuICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgIG5hbWU9XCJmbGFzaC1vZmZcIlxuICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5DQUxFTkRBUl9OT1RfWUVUX0xJTktFRF9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAvPlxuICAgIH1cbiAgICBAaWYgKGNhbGVuZGFyLmV4dGVybmFsPy5zZXJ2aWNlKSB7XG4gICAgICA8aW9uLWljb25cbiAgICAgICAgc2xvdD1cImVuZFwiXG4gICAgICAgIFtuYW1lXT1cImNhbGVuZGFycy5nZXRTZXJ2aWNlSWNvbihjYWxlbmRhci5leHRlcm5hbC5zZXJ2aWNlKVwiXG4gICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAoJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5MSU5LRURfVE8nIHwgdHJhbnNsYXRlKSArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICAoJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5TRVJWSUNFUy4nICsgY2FsZW5kYXIuZXh0ZXJuYWwuc2VydmljZSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgXCJcbiAgICAgIC8+XG4gICAgfVxuICA8L2lvbi1pdGVtPlxufVxuIl19
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXJJdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL21vZHVsZXMvYWdlbmRhL3NyYy9jYWxlbmRhckl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vbW9kdWxlcy9hZ2VuZGEvc3JjL2NhbGVuZGFySXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBTzNELE1BQU0sT0FBTyx5QkFBeUI7SUFMdEM7UUFNVSxXQUFNLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pDLFdBQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLGFBQVEsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0QyxlQUFVLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDN0MsZUFBVSxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBa0JsRDs7V0FFRztRQUNPLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7S0FzRTNEO0lBcEVDLEtBQUssQ0FBQyxjQUFjO1FBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVE7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QUFRO3NCQUFoQixLQUFLO2dCQUlHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlJLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tICdpZGVhLXRvb2xib3gnO1xuaW1wb3J0IHsgSURFQUxvYWRpbmdTZXJ2aWNlLCBJREVBTWVzc2FnZVNlcnZpY2UsIElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQGlkZWEtaW9uaWMvY29tbW9uJztcblxuaW1wb3J0IHsgSURFQUNhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSURFQUNhbGVuZGFyc1NlcnZpY2UgfSBmcm9tICcuL2NhbGVuZGFycy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWRlYS1jYWxlbmRhci1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhckl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnY2FsZW5kYXJJdGVtLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSURFQUNhbGVuZGFySXRlbUNvbXBvbmVudCB7XG4gIHByaXZhdGUgX2FsZXJ0ID0gaW5qZWN0KEFsZXJ0Q29udHJvbGxlcik7XG4gIHByaXZhdGUgX21vZGFsID0gaW5qZWN0KE1vZGFsQ29udHJvbGxlcik7XG4gIHByaXZhdGUgX21lc3NhZ2UgPSBpbmplY3QoSURFQU1lc3NhZ2VTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfbG9hZGluZyA9IGluamVjdChJREVBTG9hZGluZ1NlcnZpY2UpO1xuICBwcml2YXRlIF90cmFuc2xhdGUgPSBpbmplY3QoSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIF9jYWxlbmRhcnMgPSBpbmplY3QoSURFQUNhbGVuZGFyc1NlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FsZW5kYXIgdG8gc2hvdy5cbiAgICovXG4gIEBJbnB1dCgpIGNhbGVuZGFyOiBDYWxlbmRhcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB3ZSB3YW50IHRvIGVuYWJsZSBhZHZhbmNlZCBwZXJtaXNzaW9ucyAoYmFzZWQgb24gdGhlIG1lbWJlcnNoaXBzKSBvbiB0aGUgY2FsZW5kYXIuXG4gICAqL1xuICBASW5wdXQoKSBhZHZhbmNlZFBlcm1pc3Npb25zOiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgY2FsZW5kYXIgY29sb3IgaXMgYW4gaW1wb3J0YW50IGRldGFpbCBvciBpdCBzaG91bGRuJ3QgYmUgc2hvd24uXG4gICAqL1xuICBASW5wdXQoKSBoaWRlQ29sb3I6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXBvcnQgdG8gcGFyZW50IGNvbXBvbmVudHMgYSBjaGFuZ2UuXG4gICAqL1xuICBAT3V0cHV0KCkgc29tZXRoaW5nQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FsZW5kYXI+KCk7XG5cbiAgYXN5bmMgbWFuYWdlQ2FsZW5kYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMuX21vZGFsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IElERUFDYWxlbmRhckNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIGNhbGVuZGFyOiB0aGlzLmNhbGVuZGFyLFxuICAgICAgICBhZHZhbmNlZFBlcm1pc3Npb25zOiB0aGlzLmFkdmFuY2VkUGVybWlzc2lvbnMsXG4gICAgICAgIGhpZGVDb2xvcjogdGhpcy5oaWRlQ29sb3JcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtb2RhbC5vbkRpZERpc21pc3MoKS50aGVuKHJlcyA9PiB7XG4gICAgICBjb25zdCBjYWwgPSByZXMuZGF0YTtcbiAgICAgIGlmIChjYWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgZWxzZSBpZiAoY2FsID09PSBudWxsKSB0aGlzLmNhbGVuZGFyID0gbnVsbDtcbiAgICAgIGVsc2UgdGhpcy5jYWxlbmRhci5sb2FkKGNhbCk7XG4gICAgICB0aGlzLnNvbWV0aGluZ0NoYW5nZWQuZW1pdCgpO1xuICAgIH0pO1xuICAgIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbGlua0V4dENhbGVuZGFyT3JEZWxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2FsID0gYXdhaXQgdGhpcy5fY2FsZW5kYXJzLmNob29zZUFuZFNldEV4dGVybmFsQ2FsZW5kYXIodGhpcy5jYWxlbmRhcik7XG4gICAgICBpZiAoIWNhbCkgdGhyb3cgbmV3IEVycm9yKCdOT19FWFRFUk5BTF9DQUxFTkRBUl9DSE9TRU4nKTtcbiAgICAgIHRoaXMuY2FsZW5kYXIubG9hZChjYWwpO1xuICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuQ0FMRU5EQVJfTElOS0VEJyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLl9sb2FkaW5nLnNob3codGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5GSVJTVF9TWU5DX01BWV9UQUtFX0FfV0hJTEUnKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2NhbGVuZGFycy5zeW5jQ2FsZW5kYXIodGhpcy5jYWxlbmRhcik7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkZJUlNUX1NZTkNfQ09NUExFVEVEJyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLl9tZXNzYWdlLmVycm9yKCdDT01NT04uT1BFUkFUSU9OX0ZBSUxFRCcpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fbG9hZGluZy5oaWRlKCk7XG4gICAgICAgIHRoaXMuc29tZXRoaW5nQ2hhbmdlZC5lbWl0KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGRvRGVsZXRlID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2xvYWRpbmcuc2hvdygpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbGVuZGFycy5kZWxldGVDYWxlbmRhcih0aGlzLmNhbGVuZGFyKTtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0NPTU1PTi5PUEVSQVRJT05fQ09NUExFVEVEJyk7XG4gICAgICAgICAgdGhpcy5zb21ldGhpbmdDaGFuZ2VkLmVtaXQoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLmVycm9yKCdDT01NT04uT1BFUkFUSU9OX0ZBSUxFRCcpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMuX2xvYWRpbmcuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgZG9MaW5rID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbGVuZGFycy5saW5rRXh0U2VydmljZSh0aGlzLmNhbGVuZGFyKTtcbiAgICAgICAgICB0aGlzLmxpbmtFeHRDYWxlbmRhck9yRGVsZXRlKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5lcnJvcignQ09NTU9OLk9QRVJBVElPTl9GQUlMRUQnKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuQ0FMRU5EQVJfTk9UX1lFVF9MSU5LRUQnKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLl90cmFuc2xhdGUuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkRPX1lPVV9XQU5UX1BST0NFRURfTElOS0lOR19PUl9ERUxFVEUnKTtcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBbXG4gICAgICAgIHsgdGV4dDogdGhpcy5fdHJhbnNsYXRlLl8oJ0NPTU1PTi5ERUxFVEUnKSwgaGFuZGxlcjogZG9EZWxldGUgfSxcbiAgICAgICAgeyB0ZXh0OiB0aGlzLl90cmFuc2xhdGUuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkxJTksnKSwgaGFuZGxlcjogZG9MaW5rIH1cbiAgICAgIF07XG4gICAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuX2FsZXJ0LmNyZWF0ZSh7IGhlYWRlciwgbWVzc2FnZSwgYnV0dG9ucyB9KTtcbiAgICAgIGFsZXJ0LnByZXNlbnQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIkBpZiAoY2FsZW5kYXIpIHtcbiAgPGlvbi1pdGVtXG4gICAgY2xhc3M9XCJjYWxlbmRhckl0ZW1cIlxuICAgIFtidXR0b25dPVwiIWRpc2FibGVkXCJcbiAgICBbdGl0bGVdPVwiJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5FRElUX0NBTEVOREFSJyB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cImNhbGVuZGFyLmV4dGVybmFsICYmICFjYWxlbmRhci5leHRlcm5hbC5jYWxlbmRhcklkID8gbGlua0V4dENhbGVuZGFyT3JEZWxldGUoKSA6IG1hbmFnZUNhbGVuZGFyKClcIlxuICA+XG4gICAgQGlmICghaGlkZUNvbG9yKSB7XG4gICAgICA8aW9uLWF2YXRhciBzbG90PVwic3RhcnRcIiBjbGFzcz1cImNvbG9yQ2lyY2xlXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiY2FsZW5kYXIuY29sb3JcIiAvPlxuICAgIH1cbiAgICA8aW9uLWxhYmVsPlxuICAgICAge3sgY2FsZW5kYXIubmFtZSB9fVxuICAgICAgPHA+XG4gICAgICAgIEBpZiAoY2FsZW5kYXIuZXh0ZXJuYWwgJiYgIWNhbGVuZGFyLmV4dGVybmFsLmNhbGVuZGFySWQpIHtcbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYW5nZXJcIj5cbiAgICAgICAgICAgIHt7ICdJREVBX0FHRU5EQS5DQUxFTkRBUlMuVEFQX1RPX0NPTkZJR1VSRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICB9XG4gICAgICAgIHt7IGNhbGVuZGFyLmRlc2NyaXB0aW9uIH19XG4gICAgICA8L3A+XG4gICAgPC9pb24tbGFiZWw+XG4gICAgQGlmIChjYWxlbmRhci5leHRlcm5hbCAmJiAhY2FsZW5kYXIuZXh0ZXJuYWwuY2FsZW5kYXJJZCkge1xuICAgICAgPGlvbi1pY29uXG4gICAgICAgIHNsb3Q9XCJlbmRcIlxuICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgIG5hbWU9XCJmbGFzaC1vZmZcIlxuICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5DQUxFTkRBUl9OT1RfWUVUX0xJTktFRF9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAvPlxuICAgIH1cbiAgICBAaWYgKGNhbGVuZGFyLmV4dGVybmFsPy5zZXJ2aWNlKSB7XG4gICAgICA8aW9uLWljb25cbiAgICAgICAgc2xvdD1cImVuZFwiXG4gICAgICAgIFtuYW1lXT1cImNhbGVuZGFycy5nZXRTZXJ2aWNlSWNvbihjYWxlbmRhci5leHRlcm5hbC5zZXJ2aWNlKVwiXG4gICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAoJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5MSU5LRURfVE8nIHwgdHJhbnNsYXRlKSArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICAoJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5TRVJWSUNFUy4nICsgY2FsZW5kYXIuZXh0ZXJuYWwuc2VydmljZSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgXCJcbiAgICAgIC8+XG4gICAgfVxuICA8L2lvbi1pdGVtPlxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, EventEmitter, inject, ChangeDetectorRef, Component, ChangeDetectionStrategy, Input, Output, NgModule } from '@angular/core';
2
+ import { Injectable, inject, ChangeDetectorRef, EventEmitter, Component, ChangeDetectionStrategy, Input, Output, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { formatDate, CommonModule } from '@angular/common';
5
5
  import * as i1$1 from '@angular/forms';
@@ -40,6 +40,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImpor
40
40
 
41
41
  class IDEAAgendaComponent {
42
42
  constructor() {
43
+ this._cdr = inject(ChangeDetectorRef);
44
+ this._platform = inject(Platform);
45
+ this._translate = inject(IDEATranslationsService);
43
46
  /**
44
47
  * The events to display in the calendar.
45
48
  */
@@ -122,9 +125,6 @@ class IDEAAgendaComponent {
122
125
  this.viewDate = new Date();
123
126
  this.refresh = new Subject();
124
127
  this.darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
125
- this._cdr = inject(ChangeDetectorRef);
126
- this._platform = inject(Platform);
127
- this._translate = inject(IDEATranslationsService);
128
128
  }
129
129
  ngOnInit() {
130
130
  this.locale = this._translate.getCurrentLang();
@@ -546,8 +546,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImpor
546
546
 
547
547
  class IDEACalendarComponent {
548
548
  constructor() {
549
- this.errors = new Set();
550
- this.DEFAULT_COLOR = '#555';
551
549
  this._calendars = inject(IDEACalendarsService);
552
550
  this._modal = inject(ModalController);
553
551
  this._alert = inject(AlertController);
@@ -556,6 +554,8 @@ class IDEACalendarComponent {
556
554
  this._message = inject(IDEAMessageService);
557
555
  this._API = inject(IDEAAWSAPIService);
558
556
  this._translate = inject(IDEATranslationsService);
557
+ this.errors = new Set();
558
+ this.DEFAULT_COLOR = '#555';
559
559
  }
560
560
  async ngOnInit() {
561
561
  this.membership = this._tc.get('membership');
@@ -645,16 +645,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImpor
645
645
 
646
646
  class IDEACalendarItemComponent {
647
647
  constructor() {
648
- /**
649
- * Report to parent components a change.
650
- */
651
- this.somethingChanged = new EventEmitter();
652
648
  this._alert = inject(AlertController);
653
649
  this._modal = inject(ModalController);
654
650
  this._message = inject(IDEAMessageService);
655
651
  this._loading = inject(IDEALoadingService);
656
652
  this._translate = inject(IDEATranslationsService);
657
653
  this._calendars = inject(IDEACalendarsService);
654
+ /**
655
+ * Report to parent components a change.
656
+ */
657
+ this.somethingChanged = new EventEmitter();
658
658
  }
659
659
  async manageCalendar() {
660
660
  if (this.disabled)
@@ -755,14 +755,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImpor
755
755
 
756
756
  class IDEACalendarCreationComponent {
757
757
  constructor() {
758
- this.DEFAULT_COLOR = '#555';
759
- this.SOURCES = Object.keys(ExternalCalendarSources);
760
758
  this._calendars = inject(IDEACalendarsService);
761
759
  this._modal = inject(ModalController);
762
760
  this._tc = inject(IDEATinCanService);
763
761
  this._loading = inject(IDEALoadingService);
764
762
  this._message = inject(IDEAMessageService);
765
763
  this._translate = inject(IDEATranslationsService);
764
+ this.DEFAULT_COLOR = '#555';
765
+ this.SOURCES = Object.keys(ExternalCalendarSources);
766
766
  }
767
767
  ngOnInit() {
768
768
  this.calendar = new Calendar();
@@ -1 +1 @@
1
- {"version":3,"file":"idea-ionic-agenda.mjs","sources":["../../../modules/agenda/src/dateFormatter.provider.ts","../../../modules/agenda/src/agenda.component.ts","../../../modules/agenda/src/agenda.component.html","../../../modules/agenda/src/calendars.service.ts","../../../modules/agenda/src/calendar.component.ts","../../../modules/agenda/src/calendar.component.html","../../../modules/agenda/src/calendarItem.component.ts","../../../modules/agenda/src/calendarItem.component.html","../../../modules/agenda/src/calendarCreation.component.ts","../../../modules/agenda/src/calendarCreation.component.html","../../../modules/agenda/src/agenda.module.ts","../../../modules/agenda/idea-ionic-agenda.ts"],"sourcesContent":["import { formatDate } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { CalendarDateFormatter, DateFormatterParams } from 'angular-calendar';\n\n@Injectable()\nexport class CustomDateFormatter extends CalendarDateFormatter {\n // MONTH VIEW\n monthViewColumnHeader = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'EEE', locale);\n monthViewTitle = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'MMMM y', locale);\n\n // WEEK VIEW\n weekViewHour = ({ date, locale }: DateFormatterParams): string =>\n locale === 'it' ? formatDate(date, 'HH:mm', locale) : formatDate(date, 'h aa', locale);\n weekViewColumnHeader = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'EEE', locale);\n weekViewTitle = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'MMMM yyyy', locale);\n\n // DAY VIEW\n dayViewHour = ({ date, locale }: DateFormatterParams): string =>\n locale === 'it' ? formatDate(date, 'HH:mm', locale) : formatDate(date, 'h aa', locale);\n dayViewTitle = ({ date, locale }: DateFormatterParams): string =>\n locale === 'it' ? formatDate(date, 'EEEE, dd MMM yyyy', locale) : formatDate(date, 'EEEE, MMM dd, yyyy', locale);\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ChangeDetectorRef,\n inject\n} from '@angular/core';\nimport { IonContent, Platform } from '@ionic/angular';\nimport { finalize, fromEvent, Subject, takeUntil } from 'rxjs';\nimport {\n CalendarEvent,\n CalendarEventTimesChangedEvent,\n CalendarMonthViewBeforeRenderEvent,\n CalendarView,\n CalendarWeekViewBeforeRenderEvent\n} from 'angular-calendar';\nimport { isFuture, isToday, isSameDay, endOfWeek, addDays, addMinutes } from 'date-fns';\n// @ts-ignore\nimport ColorParse from 'color-parse';\nimport { IDEATranslationsService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-agenda',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: 'agenda.component.html',\n styleUrls: ['agenda.component.scss']\n})\nexport class IDEAAgendaComponent implements OnInit {\n /**\n * The events to display in the calendar.\n */\n @Input() events: AgendaEvent[] = [];\n /**\n * An array of day indexes (0 = sunday, 1 = monday, etc.) that will be hidden on the view.\n */\n @Input() excludeDays: number[] = [];\n /**\n * The day start hours in 24 hour time. Must be 0-23\n */\n @Input() dayStartHour = 0;\n /**\n * The day start hours in 24 hour time. Must be 0-23\n */\n @Input() dayEndHour = 23;\n /**\n * The number of segments in an hour. Must divide equally into 60.\n */\n @Input() hourSegments = 2;\n /**\n * Whether to open the current day's details right away in month view.\n */\n @Input() activeDayIsOpen = false;\n /**\n * The view mode for the agenda.\n */\n @Input() view: CalendarView = CalendarView.Week;\n /**\n * The allowed view mode for the agenda.\n */\n @Input() allowedViews = [CalendarView.Day, CalendarView.Week, CalendarView.Month];\n /**\n * Whether to block any day/slot in the past.\n */\n @Input() onlyFuture = false;\n /**\n * Some notes to show underneath the calendar's header.\n */\n @Input() titleNotes: string;\n /**\n * The template for new events created by drag&drop.\n */\n @Input() newEventTemplate: AgendaEvent = { title: 'New', start: null, meta: {} };\n /**\n * Whether (and how) to allow the creation of events by drag&drop.\n * If enabled, on mobile it requires the `parentContent` to be set for a correct execution.\n */\n @Input() allowDragToCreate: DragToCreateOptions = DragToCreateOptions.DISABLED;\n /**\n * The parent ion-content, in case we want to control its scrollability for drag&drop features.\n */\n @Input() parentContent: IonContent;\n /**\n * Trigger when an event is selected.\n */\n @Output() selectEvent = new EventEmitter<AgendaEvent>();\n /**\n * Trigger when a day is selected.\n */\n @Output() selectDay = new EventEmitter<Date>();\n /**\n * Trigger when a time slot is selected.\n */\n @Output() selectSlot = new EventEmitter<Date>();\n /**\n * Trigger when a new event is added by drag and drop.\n */\n @Output() newEventByDrag = new EventEmitter<AgendaEvent>();\n /**\n * Trigger when an event changed date (drag&drop or resize).\n */\n @Output() changeEvent = new EventEmitter<AgendaEvent>();\n /**\n * Trigger when the view date of reference changed (because we moved inside the calendar).\n */\n @Output() changeDate = new EventEmitter<Date>();\n /**\n * Trigger before the rendering of the week or day view.\n */\n @Output() beforeWeekOrDayViewRenderEmitter = new EventEmitter<CalendarWeekViewBeforeRenderEvent>();\n /**\n * Trigger before the rendering of the month view.\n */\n @Output() beforeMonthViewRenderEmitter = new EventEmitter<CalendarMonthViewBeforeRenderEvent>();\n\n CalendarView = CalendarView;\n Attendance = EventAttendance;\n viewDate = new Date();\n refresh = new Subject();\n /**\n * @hide\n */\n locale: string;\n /**\n * @hide\n */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n private _cdr = inject(ChangeDetectorRef);\n private _platform = inject(Platform);\n _translate = inject(IDEATranslationsService);\n\n ngOnInit(): void {\n this.locale = this._translate.getCurrentLang();\n // in case of Italian locale the starting day for the week is monday (1), otherwise sunday (0)\n this.weekStartsOn = this.locale === 'it' ? 1 : 0;\n }\n isMobile(): boolean {\n return this._platform.is('mobile');\n }\n\n /**\n * Run some checks before the month view is rendered (e.g. disable invalid days).\n */\n beforeMonthViewRender(event: CalendarMonthViewBeforeRenderEvent): void {\n this.beforeMonthViewRenderEmitter.emit(event);\n const { body } = event;\n body.forEach(day => {\n if (!this.dateIsValid(day.date)) day.cssClass = 'cal-disabled';\n });\n }\n /**\n * Run some checks before the week/day view is rendered (e.g. disable invalid days).\n */\n beforeWeekOrDayViewRender(event: CalendarWeekViewBeforeRenderEvent): void {\n this.beforeWeekOrDayViewRenderEmitter.emit(event);\n const { header, hourColumns } = event;\n header.forEach(day => {\n if (!this.dateIsValid(day.date)) day.cssClass = 'cal-disabled';\n });\n hourColumns.forEach(hourCol => {\n hourCol.hours.forEach(hour => {\n hour.segments.forEach(segment => {\n if (!this.dateIsValid(segment.date)) segment.cssClass = 'cal-disabled';\n });\n });\n });\n }\n\n dateIsValid(date: any, sameDayIsValid?: boolean): boolean {\n if (!this.onlyFuture) return true;\n return isFuture(date) || (sameDayIsValid ? isToday(date) : false);\n }\n\n setView(view: CalendarView): void {\n this.view = view;\n }\n\n viewDateChanged(newDate: Date): void {\n if (this.view === CalendarView.Month) this.activeDayIsOpen = false;\n this.changeDate.emit(newDate);\n }\n\n changeDay({ date, events }: { date: Date; events: AgendaEvent[] }): void {\n if (!this.dateIsValid(date, true)) return;\n if ((isSameDay(this.viewDate, date) && this.activeDayIsOpen === true) || !events || events.length === 0)\n this.activeDayIsOpen = false;\n else this.activeDayIsOpen = true;\n this.viewDate = date;\n }\n\n eventTimesChanged({ event, newStart, newEnd }: CalendarEventTimesChangedEvent): void {\n event.start = newStart;\n event.end = newEnd;\n this.events = this.events.slice();\n this.changeEvent.emit(event);\n }\n\n getAlternateColor(color: string, amount: number, opacity?: number): string | undefined {\n if (!color?.trim()) return undefined;\n const alt = ColorParse(color.trim());\n const r = Math.max(Math.min(255, Number(alt.values[0]) + amount), 0);\n const g = Math.max(Math.min(255, Number(alt.values[1]) + amount), 0);\n const b = Math.max(Math.min(255, Number(alt.values[2]) + amount), 0);\n return `rgba(${r}, ${g}, ${b}, ${opacity || 1})`;\n }\n\n getTooltipContent(event: AgendaEvent): string {\n if (!event) return '';\n let str = event.title ? '<b>' + event.title + '</b>' : '';\n if (event.description) str = str.concat('<br>', event.description);\n if (event.icons) event.icons.forEach(x => (str = str.concat('<br>', '<i>', x.title, '</i>')));\n if (event.avatars && event.avatars.length) {\n str = str.concat('<br><br>~');\n event.avatars.forEach(x => (str = str.concat('<br>', x.title)));\n }\n return str;\n }\n\n getPreviewDescription(description: string): string {\n return description && description.length > 100 ? description.slice(0, 100).concat('...') : description;\n }\n\n startDragToCreate(event: Event, segmentDate: Date, segmentElement: HTMLElement): void {\n if (!this.allowDragToCreate) return;\n\n if (this.parentContent) this.parentContent.scrollY = false;\n\n const eventByDragAndDrop: AgendaEvent = { ...this.newEventTemplate, start: segmentDate };\n this.events = [...this.events, eventByDragAndDrop];\n\n const segmentPosition = segmentElement.getBoundingClientRect();\n const endOfView = endOfWeek(this.viewDate, { weekStartsOn: this.weekStartsOn });\n\n const whileDragging = (draggingEvent: Event): void => {\n const { clientY, clientX } =\n draggingEvent.type === 'touchmove' ? (draggingEvent as TouchEvent).touches[0] : (draggingEvent as MouseEvent);\n\n const minutesDiff = ceilToNearest(clientY - segmentPosition.top, 30);\n const daysDiff = floorToNearest(clientX - segmentPosition.left, segmentPosition.width) / segmentPosition.width;\n\n let newEnd: Date;\n if (this.allowDragToCreate === DragToCreateOptions.ONLY_SAME_DAY) newEnd = addMinutes(segmentDate, minutesDiff);\n else newEnd = addDays(addMinutes(segmentDate, minutesDiff), daysDiff);\n\n if (newEnd > segmentDate && newEnd < endOfView) eventByDragAndDrop.end = newEnd;\n refreshView();\n };\n\n const endOfDrag = (): void => {\n if (this.parentContent) this.parentContent.scrollY = true;\n eventByDragAndDrop.end = this.getFixedEndDateWithMinimumSegmentDuration(eventByDragAndDrop);\n refreshView();\n this.newEventByDrag.emit(eventByDragAndDrop);\n };\n\n const refreshView = (): void => {\n this.events = [...this.events];\n this._cdr.detectChanges();\n };\n\n if (event.type === 'touchstart') {\n fromEvent(document, 'touchmove')\n .pipe(finalize(endOfDrag), takeUntil(fromEvent(document, 'touchend')))\n .subscribe(whileDragging);\n } else {\n fromEvent(document, 'mousemove')\n .pipe(finalize(endOfDrag), takeUntil(fromEvent(document, 'mouseup')))\n .subscribe(whileDragging);\n }\n }\n private getFixedEndDateWithMinimumSegmentDuration(agendaBooking: AgendaEvent): Date {\n const fixedEnd = new Date(agendaBooking.end || agendaBooking.start);\n const segmentSizeInMinutes = 60 / this.hourSegments;\n if (fixedEnd.getTime() <= agendaBooking.start.getTime() + segmentSizeInMinutes * 60 * 1000)\n fixedEnd.setMinutes(agendaBooking.start.getMinutes() + segmentSizeInMinutes);\n return fixedEnd;\n }\n}\n\n/**\n * A richer version of the classic CalendarEvent.\n */\nexport interface AgendaEvent extends CalendarEvent {\n /**\n * A brief description for the event (e.g. customer, address, etc.).\n */\n description?: string;\n /**\n * The location of the event.\n */\n location?: string;\n /**\n * A list of URLs of images to show as small avatars.\n */\n avatars?: { id: string; url: string; title: string }[];\n /**\n * A list of ion-icons to show.\n */\n icons?: { name: string; title: string }[];\n /**\n * The colors of the event displayed.\n */\n color?: { primary: string; secondary?: string } | any;\n /**\n * Whether the event is external; external events are less important UI-wise.\n */\n external?: boolean;\n /**\n * The attendance status to this event, if any.\n */\n attendance?: EventAttendance;\n /**\n * A standard and unique id for the event, valid across multiple sources.\n */\n iCalUID?: string;\n}\n\n/**\n * Possible attendance statuses for the event.\n */\nexport enum EventAttendance {\n DECLINED = -1,\n NEEDS_ACTION = 0,\n TENTATIVE,\n ACCEPTED\n}\n\n/**\n * The options to allow (or not) drag&drop to create a new event.\n */\nexport enum DragToCreateOptions {\n DISABLED = 0,\n ONLY_SAME_DAY = 1,\n FREE = 2\n}\n\nconst floorToNearest = (amount: number, precision: number): number => Math.floor(amount / precision) * precision;\nconst ceilToNearest = (amount: number, precision: number): number => Math.ceil(amount / precision) * precision;\n","<div class=\"agenda\">\n <!-- TOOLBAR -->\n <ion-row class=\"ion-align-items-center\">\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"5\"\n [sizeSm]=\"3\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n @if (allowedViews.length > 1) {\n <ion-item lines=\"none\" class=\"calendarViewSelector\">\n <ion-select\n interface=\"popover\"\n [value]=\"view\"\n (ionChange)=\"$event?.detail ? setView($event.detail.value) : null\"\n >\n @for (view of allowedViews; track view) {\n <ion-select-option [value]=\"view\">\n {{ 'IDEA_AGENDA.' + view | uppercase | translate }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n }\n </ion-col>\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"7\"\n [sizeSm]=\"4\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarPreviousView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-back-outline\" slot=\"icon-only\" />\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarToday\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"today-outline\" slot=\"icon-only\" />\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarNextView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-forward-outline\" slot=\"icon-only\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-align-self-center titleCol\" [size]=\"12\" [sizeSm]=\"5\" [pullSm]=\"7\" [sizeLg]=\"8\" [pullLg]=\"4\">\n <h2>{{ viewDate | calendarDate: view + 'ViewTitle' : locale }}</h2>\n @if (titleNotes) {\n <p>{{ titleNotes }}</p>\n }\n </ion-col>\n </ion-row>\n <!-- TEMPLATES (touch only what's necessary and leave everything else as it is) -->\n <ng-template #eventTitleTemplate let-event=\"event\" let-view=\"view\">\n <span\n class=\"cal-event-title\"\n [class.noWrap]=\"event.allDay\"\n [attr.aria-hidden]=\"{} | calendarA11y: 'hideEventTitle'\"\n >\n {{ event.title | calendarEventTitle: view : event }}\n @if (!event.allDay) {\n <p>{{ getPreviewDescription(event.description) }}</p>\n }\n </span>\n </ng-template>\n <ng-template\n #eventTemplate\n let-weekEvent=\"weekEvent\"\n let-tooltipPlacement=\"tooltipPlacement\"\n let-eventClicked=\"eventClicked\"\n let-tooltipTemplate=\"tooltipTemplate\"\n let-tooltipAppendToBody=\"tooltipAppendToBody\"\n let-tooltipDisabled=\"tooltipDisabled\"\n let-tooltipDelay=\"tooltipDelay\"\n let-column=\"column\"\n let-daysInWeek=\"daysInWeek\"\n >\n <div\n class=\"cal-event\"\n [class.external]=\"weekEvent.event.external\"\n [class.needsAction]=\"Attendance.NEEDS_ACTION === weekEvent.event.attendance\"\n [class.declined]=\"Attendance.DECLINED === weekEvent.event.attendance\"\n [class.tentative]=\"Attendance.TENTATIVE === weekEvent.event.attendance\"\n [style.border-left-color]=\"weekEvent.event.color?.primary\"\n [style.color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 80 : -40)\"\n [style.background-color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 60 : 80, 0.2)\"\n [mwlCalendarTooltip]=\"!tooltipDisabled && !isMobile() ? getTooltipContent(weekEvent.event) : ''\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipEvent]=\"weekEvent.tempEvent || weekEvent.event\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n (mwlClick)=\"eventClicked.emit({ sourceEvent: $event })\"\n (mwlKeydownEnter)=\"eventClicked.emit({ sourceEvent: $event })\"\n tabindex=\"0\"\n role=\"application\"\n [attr.aria-label]=\"\n { event: weekEvent.tempEvent || weekEvent.event, locale: locale } | calendarA11y: 'eventDescription'\n \"\n >\n <mwl-calendar-event-actions [event]=\"weekEvent.tempEvent || weekEvent.event\" />\n &ngsp;\n <mwl-calendar-event-title\n [event]=\"weekEvent.tempEvent || weekEvent.event\"\n [customTemplate]=\"eventTitleTemplate\"\n [view]=\"daysInWeek === 1 ? 'day' : 'week'\"\n >\n </mwl-calendar-event-title>\n @if (!weekEvent.event.allDay) {\n <div class=\"eventGadgets\">\n @for (icon of weekEvent.event.icons; track icon) {\n <ion-icon [name]=\"icon.name\" [title]=\"icon.title\" />\n }\n @for (avatar of weekEvent.event.avatars; track avatar) {\n <idea-user-avatar size=\"mini\" [src]=\"avatar.url\" [name]=\"avatar.title\" />\n }\n </div>\n }\n </div>\n </ng-template>\n <ng-template\n #hourSegmentTemplate\n let-segment=\"segment\"\n let-locale=\"locale\"\n let-segmentHeight=\"segmentHeight\"\n let-isTimeLabel=\"isTimeLabel\"\n >\n <div\n #segmentElement\n class=\"cal-hour-segment\"\n [style.height.px]=\"segmentHeight\"\n [class.cal-hour-start]=\"segment.isStart\"\n [class.cal-after-hour-start]=\"!segment.isStart\"\n [ngClass]=\"segment.cssClass\"\n (mousedown)=\"allowDragToCreate ? startDragToCreate($event, segment.date, segmentElement) : null\"\n (touchstart)=\"allowDragToCreate ? startDragToCreate($event, segment.date, segmentElement) : null\"\n >\n @if (isTimeLabel) {\n <div class=\"cal-time\">\n {{ segment.date | calendarDate: 'weekViewHour' : locale }}\n </div>\n }\n </div>\n </ng-template>\n <!-- VIEWS -->\n <div>\n @switch (view) {\n @case (CalendarView.Month) {\n <mwl-calendar-month-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [activeDayIsOpen]=\"activeDayIsOpen\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays\"\n [weekStartsOn]=\"weekStartsOn\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayClicked)=\"changeDay($event.day)\"\n (beforeViewRender)=\"beforeMonthViewRender($event)\"\n >\n </mwl-calendar-month-view>\n }\n @case (CalendarView.Week) {\n <mwl-calendar-week-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays\"\n [weekStartsOn]=\"weekStartsOn\"\n [dayStartHour]=\"dayStartHour\"\n [dayEndHour]=\"dayEndHour\"\n [hourSegments]=\"hourSegments\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayHeaderClicked)=\"dateIsValid($event.day.date) ? selectDay.emit($event.day.date) : null\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-week-view>\n }\n @case (CalendarView.Day) {\n <mwl-calendar-day-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [dayStartHour]=\"dayStartHour\"\n [dayEndHour]=\"dayEndHour\"\n [hourSegments]=\"hourSegments\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-day-view>\n }\n }\n </div>\n</div>\n","import { Injectable, inject } from '@angular/core';\nimport { AlertController, ModalController } from '@ionic/angular';\nimport { Browser } from '@capacitor/browser';\nimport { Calendar, ExternalCalendarSources, Suggestion } from 'idea-toolbox';\nimport {\n IDEAEnvironment,\n IDEALoadingService,\n IDEAAWSAPIService,\n IDEATranslationsService,\n IDEASuggestionsComponent\n} from '@idea-ionic/common';\n\n/**\n * Note: to test locally, you need to temporarily change the redirect URI:\n * - in the lambda `idea_calendars`, e.g. `SCARLETT_URL`;\n * - in the client config file: `APP_URL`.\n * In both cases, the value should be set to `http://localhost:8100` (or according to the local URL).\n */\n@Injectable()\nexport class IDEACalendarsService {\n protected _env = inject(IDEAEnvironment);\n private _modal = inject(ModalController);\n private _alert = inject(AlertController);\n private _loading = inject(IDEALoadingService);\n private _API = inject(IDEAAWSAPIService);\n private _translate = inject(IDEATranslationsService);\n\n /**\n * Get the ion-icon of an external service from its name.\n */\n getServiceIcon(service: ExternalCalendarSources): string {\n switch (service) {\n case ExternalCalendarSources.GOOGLE:\n return 'logo-google';\n case ExternalCalendarSources.MICROSOFT:\n return 'logo-windows';\n default:\n return 'help';\n }\n }\n /**\n * Get the base URL for API request (shared/private calendar).\n */\n getRequestURL(calendar: Calendar): string {\n return (calendar.teamId ? `teams/${calendar.teamId}/` : '').concat('calendars');\n }\n\n /**\n * Create a new calendar.\n */\n async postCalendar(cal: Calendar): Promise<Calendar> {\n const calendar = await this._API.postResource(this.getRequestURL(cal), { idea: true, body: cal });\n return new Calendar(calendar);\n }\n /**\n * Update an existing calendar.\n */\n async putCalendar(cal: Calendar): Promise<Calendar> {\n const body = { idea: true, resourceId: cal.calendarId, body: cal };\n const calendar = await this._API.putResource(this.getRequestURL(cal), body);\n return new Calendar(calendar);\n }\n /**\n * Delete a calendar.\n */\n async deleteCalendar(cal: Calendar): Promise<void> {\n await this._API.deleteResource(this.getRequestURL(cal), { idea: true, resourceId: cal.calendarId });\n }\n /**\n * Associate an external calendar with the given calendar.\n */\n async setExternalCalendar(cal: Calendar, externalId: string): Promise<Calendar> {\n const body = { idea: true, resourceId: cal.calendarId, body: { action: 'SET_EXTERNAL_CALENDAR', externalId } };\n const calendar = await this._API.patchResource(this.getRequestURL(cal), body);\n return new Calendar(calendar);\n }\n\n /**\n * Link the calendar with the chosen external service (auth flow).\n */\n async linkExtService(cal: Calendar): Promise<void> {\n if (!cal.external) throw new Error('NOT_EXTERNAL');\n const baseURL = window.location.protocol.concat('//', window.location.hostname);\n let url: string;\n switch (cal.external.service) {\n case ExternalCalendarSources.GOOGLE:\n url =\n 'https://accounts.google.com/o/oauth2/v2/auth?' +\n `client_id=${encodeURIComponent(this._env.google.apiClientId)}` +\n '&response_type=code' +\n `&redirect_uri=${encodeURIComponent(baseURL.concat('/echo/google-calendars-integration'))}` +\n '&include_granted_scopes=true' +\n '&access_type=offline&prompt=consent' +\n `&scope=${encodeURIComponent(this._env.google.apiScope)}` +\n `&state=${encodeURIComponent(cal.calendarId)}`;\n break;\n case ExternalCalendarSources.MICROSOFT:\n url =\n 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?' +\n `client_id=${encodeURIComponent(this._env.microsoft.apiClientId)}` +\n '&response_type=code' +\n `&redirect_uri=${encodeURIComponent(baseURL.concat('/echo/microsoft-calendars-integration'))}` +\n '&response_mode=query' +\n `&scope=${encodeURIComponent(this._env.microsoft.apiScope)}` +\n `&state=${encodeURIComponent(cal.calendarId)}`;\n break;\n }\n if (!url) throw new Error('INVALID_SERVICE');\n await Browser.open({ url });\n // since we don't know when/if the auth flow will finish, we wait\n await this.showAlertLinkingCalendar();\n }\n private async showAlertLinkingCalendar(): Promise<void> {\n return new Promise(async resolve => {\n const header = this._translate._('IDEA_AGENDA.CALENDARS.LINKING_CALENDAR');\n const message = this._translate._('IDEA_AGENDA.CALENDARS.LINKING_CALENDAR_CONFIRM_ONCE_DONE');\n const buttons = [{ text: this._translate._('COMMON.DONE'), handler: resolve }];\n const alert = await this._alert.create({ header, message, buttons, backdropDismiss: false });\n alert.present();\n });\n }\n\n /**\n * Get the external calendars list of the external service.\n */\n async getExternalCalendars(cal: Calendar): Promise<ExtCalendar[]> {\n if (!cal.external) throw new Error('NOT_EXTERNAL');\n // get the access token to make requests; in case it fails, proceed to link the external service\n const body = { idea: true, resourceId: cal.calendarId, body: { action: 'GET_ACCESS_TOKEN' } };\n const result = await this._API.patchResource(this.getRequestURL(cal), body);\n const headers = { Authorization: 'Bearer '.concat(result.token) };\n if (cal.external.service === ExternalCalendarSources.GOOGLE) {\n const res = await (\n await fetch('https://www.googleapis.com/calendar/v3/users/me/calendarList', { headers })\n ).json();\n return res.items.map((c: any): ExtCalendar => ({ name: c.summary, id: c.id } as ExtCalendar));\n } else if (cal.external.service === ExternalCalendarSources.MICROSOFT) {\n const res = await (await fetch('https://graph.microsoft.com/v1.0/me/calendars', { headers })).json();\n return res.value.map((c: any): ExtCalendar => ({ name: c.name, id: c.id } as ExtCalendar));\n }\n }\n\n /**\n * If the external service is linked, choose an external calendar and set it for the chosen calendar.\n * @return the updated calendar.\n */\n async chooseAndSetExternalCalendar(cal: Calendar): Promise<Calendar> {\n const extCalId = await this.openModalAndPickExternalCalendar(cal);\n if (!extCalId) return;\n return await this.setExternalCalendar(cal, extCalId);\n }\n /**\n * Open the modal to pick a calendar from the external service.\n * @return the id of the external calendar.\n */\n private async openModalAndPickExternalCalendar(cal: Calendar): Promise<string> {\n let extCals: ExtCalendar[];\n try {\n await this._loading.show();\n extCals = await this.getExternalCalendars(cal);\n if (!extCals.length) throw new Error('NO_EXTERNAL_CALENDARS');\n } catch (error) {\n throw error;\n } finally {\n this._loading.hide();\n }\n const modal = await this._modal.create({\n component: IDEASuggestionsComponent,\n componentProps: {\n data: extCals.map(c => new Suggestion({ value: c.id, name: c.name })),\n searchPlaceholder: this._translate._('IDEA_AGENDA.CALENDARS.CHOOSE_AN_EXTERNAL_CALENDAR_TO_LINK'),\n sortData: true,\n hideIdFromUI: true,\n hideClearButton: true,\n mustChoose: true\n },\n backdropDismiss: false\n });\n modal.present();\n const res = await modal.onDidDismiss();\n return res.data ? res.data.value : null;\n }\n\n /**\n * First sync of the extenal calendar.\n */\n syncCalendar(cal: Calendar): Promise<void> {\n return new Promise((resolve, reject): void => this.syncCalendarHelper(cal, err => (err ? reject(err) : resolve())));\n }\n /**\n * Helper to recursively sync an the extenal calendar.\n */\n private syncCalendarHelper(cal: Calendar, done: (err?: Error) => void): void {\n // this is a recursive operation: the API returns if the sync has to continue or it finished\n this._API\n .patchResource(this.getRequestURL(cal), {\n idea: true,\n resourceId: cal.calendarId,\n body: { action: 'SYNC_EXTERNAL_CALENDAR', firstSync: true }\n })\n .then((res: any): void => {\n if (res.moreData) this.syncCalendarHelper(cal, done);\n else done();\n })\n .catch(err => done(err));\n }\n}\n\n/**\n * Helper structure to define external services' calendars (basic info).\n */\ninterface ExtCalendar {\n id: string;\n name: string;\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { ModalController, AlertController } from '@ionic/angular';\nimport { Calendar, Check, Membership } from 'idea-toolbox';\nimport {\n IDEALoadingService,\n IDEAAWSAPIService,\n IDEATinCanService,\n IDEAMessageService,\n IDEATranslationsService\n} from '@idea-ionic/common';\n\nimport { IDEACalendarsService } from './calendars.service';\n\n@Component({\n selector: 'idea-calendar',\n templateUrl: 'calendar.component.html',\n styleUrls: ['calendar.component.scss']\n})\nexport class IDEACalendarComponent implements OnInit {\n /**\n * The calendar to manage.\n */\n @Input() calendar: Calendar;\n /**\n * Whether we want to enable advanced permissions (based on the memberships) on the calendar.\n */\n @Input() advancedPermissions: boolean;\n /**\n * Whether the calendar color is an important detail or it shouldn't be shown.\n */\n @Input() hideColor: boolean;\n\n calendarWC: Calendar;\n membershipsChecks: Check[];\n membership: Membership;\n errors = new Set<string>();\n DEFAULT_COLOR = '#555';\n\n private _calendars = inject(IDEACalendarsService);\n private _modal = inject(ModalController);\n private _alert = inject(AlertController);\n private _tc = inject(IDEATinCanService);\n private _loading = inject(IDEALoadingService);\n private _message = inject(IDEAMessageService);\n private _API = inject(IDEAAWSAPIService);\n private _translate = inject(IDEATranslationsService);\n\n async ngOnInit(): Promise<void> {\n this.membership = this._tc.get('membership');\n this.calendarWC = new Calendar(this.calendar);\n try {\n const memberships: Membership[] = await this._API.getResource(`teams/${this.membership.teamId}/memberships`);\n this.membershipsChecks = memberships.map(\n m =>\n new Check({\n value: m.userId,\n name: m.name,\n checked: (this.calendarWC.usersCanManageAppointments || []).some(x => x === m.userId)\n })\n );\n } catch (error) {\n this._message.error('COMMON.COULDNT_LOAD_LIST');\n }\n }\n\n hasFieldAnError(field: string): boolean {\n return this.errors.has(field);\n }\n\n async save(): Promise<void> {\n if (!this.calendarWC.color) this.calendarWC.color = this.DEFAULT_COLOR;\n if (this.calendarWC.isShared() && this.advancedPermissions)\n this.calendarWC.usersCanManageAppointments = this.membershipsChecks\n .filter(x => x.checked)\n .map(x => String(x.value));\n else delete this.calendarWC.usersCanManageAppointments;\n\n this.errors = new Set(this.calendarWC.validate());\n if (this.errors.size) return this._message.error('COMMON.FORM_HAS_ERROR_TO_CHECK');\n\n try {\n await this._loading.show();\n const res = await this._calendars.putCalendar(this.calendarWC);\n this.calendar.load(res);\n this._message.success('IDEA_AGENDA.CALENDARS.CALENDAR_SAVED');\n this._modal.dismiss(this.calendar);\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n } finally {\n this._loading.hide();\n }\n }\n\n async delete(): Promise<void> {\n const doDelete = async (): Promise<void> => {\n try {\n await this._loading.show();\n await this._calendars.deleteCalendar(this.calendarWC);\n this._message.success('IDEA_AGENDA.CALENDARS.CALENDAR_DELETED');\n this._modal.dismiss(true);\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n } finally {\n this._loading.hide();\n }\n };\n\n const header = this._translate._('COMMON.ARE_YOU_SURE');\n const subHeader = this._translate._('IDEA_AGENDA.CALENDARS.DELETE_CALENDAR');\n const message = this._translate._('IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT');\n const buttons = [\n { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n { text: this._translate._('COMMON.DELETE'), handler: doDelete }\n ];\n const alert = await this._alert.create({ header, subHeader, message, buttons });\n alert.present();\n }\n\n close(): void {\n this._modal.dismiss();\n }\n}\n","<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close-circle\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>{{ 'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'COMMON.SAVE' | translate\" (click)=\"save()\">\n <ion-icon name=\"checkmark-circle\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n @if (calendarWC) {\n <div class=\"maxWidthContainer\">\n <ion-list class=\"aList\">\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('name')\"\n [title]=\"'IDEA_AGENDA.CALENDARS.NAME_HINT' | translate\"\n >\n <ion-input\n labelPlacement=\"stacked\"\n [label]=\"'IDEA_AGENDA.CALENDARS.NAME' | translate\"\n [placeholder]=\"'IDEA_AGENDA.CALENDARS.NAME_HINT' | translate\"\n [(ngModel)]=\"calendarWC.name\"\n />\n </ion-item>\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('description')\"\n [title]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT' | translate\"\n >\n <ion-input\n labelPlacement=\"stacked\"\n [label]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION' | translate\"\n [placeholder]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT' | translate\"\n [(ngModel)]=\"calendarWC.description\"\n />\n </ion-item>\n @if (!hideColor) {\n <idea-color-picker\n [lines]=\"'inset'\"\n [current]=\"calendarWC.color\"\n [label]=\"'IDEA_AGENDA.CALENDARS.COLOR' | translate\"\n [class.fieldHasError]=\"hasFieldAnError('color')\"\n (select)=\"$event ? (calendarWC.color = $event) : null\"\n />\n }\n @if (membershipsChecks && calendarWC.isShared() && advancedPermissions) {\n <idea-checker\n [data]=\"membershipsChecks\"\n [label]=\"'IDEA_AGENDA.CALENDARS.USERS_ALLOWED_TO_MANAGE_APPOINTMENTS' | translate\"\n [searchPlaceholder]=\"'IDEA_AGENDA.CALENDARS.WHO_CAN_MANAGE_APPOINTMENTS' | translate\"\n [noneText]=\"'IDEA_AGENDA.CALENDARS.NOBODY' | translate\"\n [allText]=\"'IDEA_AGENDA.CALENDARS.EVERYONE' | translate\"\n [allowSelectDeselectAll]=\"true\"\n [lines]=\"'inset'\"\n />\n }\n </ion-list>\n @if (calendarWC.external?.service) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_AGENDA.CALENDARS.INFO_ON_CALENDAR' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n @if (calendar.userId) {\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"person\" />\n </ion-item>\n }\n @if (calendar.teamId) {\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"people\" />\n </ion-item>\n }\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.LINKED_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + calendarWC.external.service | translate }}\n <p>{{ calendarWC.external.name }} ({{ calendarWC.external.email }})</p>\n </ion-label>\n <ion-icon slot=\"end\" [name]=\"calendars.getServiceIcon(calendarWC.external.service)\" />\n </ion-item>\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.ACCESS_LEVELS.' + calendarWC.external.userAccess | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.BASED_ON_EXTERNAL_SERVICE_SHARING_PERMISSION' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"shield\" />\n </ion-item>\n </ion-list>\n }\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label color=\"danger\">\n <h2>{{ 'IDEA_AGENDA.CALENDARS.DANGEROUS_ZONE' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n <ion-item lines=\"inset\">\n <ion-label class=\"ion-text-wrap\">\n {{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-button\n color=\"danger\"\n [title]=\"'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate\"\n (click)=\"delete()\"\n >\n {{ 'COMMON.DELETE' | translate }}\n </ion-button>\n </ion-item>\n </ion-list>\n </div>\n }\n</ion-content>\n","import { Component, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { AlertController, ModalController } from '@ionic/angular';\nimport { Calendar } from 'idea-toolbox';\nimport { IDEALoadingService, IDEAMessageService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEACalendarComponent } from './calendar.component';\nimport { IDEACalendarsService } from './calendars.service';\n\n@Component({\n selector: 'idea-calendar-item',\n templateUrl: 'calendarItem.component.html',\n styleUrls: ['calendarItem.component.scss']\n})\nexport class IDEACalendarItemComponent {\n /**\n * The calendar to show.\n */\n @Input() calendar: Calendar;\n /**\n * Whether the component is disabled.\n */\n @Input() disabled: boolean;\n /**\n * Whether we want to enable advanced permissions (based on the memberships) on the calendar.\n */\n @Input() advancedPermissions: boolean;\n /**\n * Whether the calendar color is an important detail or it shouldn't be shown.\n */\n @Input() hideColor: boolean;\n /**\n * Report to parent components a change.\n */\n @Output() somethingChanged = new EventEmitter<Calendar>();\n\n private _alert = inject(AlertController);\n private _modal = inject(ModalController);\n private _message = inject(IDEAMessageService);\n private _loading = inject(IDEALoadingService);\n private _translate = inject(IDEATranslationsService);\n private _calendars = inject(IDEACalendarsService);\n\n async manageCalendar(): Promise<void> {\n if (this.disabled) return;\n const modal = await this._modal.create({\n component: IDEACalendarComponent,\n componentProps: {\n calendar: this.calendar,\n advancedPermissions: this.advancedPermissions,\n hideColor: this.hideColor\n }\n });\n modal.onDidDismiss().then(res => {\n const cal = res.data;\n if (cal === undefined) return;\n else if (cal === null) this.calendar = null;\n else this.calendar.load(cal);\n this.somethingChanged.emit();\n });\n modal.present();\n }\n\n private async linkExtCalendarOrDelete(): Promise<void> {\n if (this.disabled) return;\n try {\n const cal = await this._calendars.chooseAndSetExternalCalendar(this.calendar);\n if (!cal) throw new Error('NO_EXTERNAL_CALENDAR_CHOSEN');\n this.calendar.load(cal);\n this._message.success('IDEA_AGENDA.CALENDARS.CALENDAR_LINKED');\n try {\n await this._loading.show(this._translate._('IDEA_AGENDA.CALENDARS.FIRST_SYNC_MAY_TAKE_A_WHILE'));\n await this._calendars.syncCalendar(this.calendar);\n this._message.success('IDEA_AGENDA.CALENDARS.FIRST_SYNC_COMPLETED');\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n } finally {\n this._loading.hide();\n this.somethingChanged.emit();\n }\n } catch (error) {\n const doDelete = async (): Promise<void> => {\n try {\n await this._loading.show();\n await this._calendars.deleteCalendar(this.calendar);\n this._message.success('COMMON.OPERATION_COMPLETED');\n this.somethingChanged.emit();\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n } finally {\n this._loading.hide();\n }\n };\n const doLink = async (): Promise<void> => {\n try {\n await this._calendars.linkExtService(this.calendar);\n this.linkExtCalendarOrDelete();\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n }\n };\n const header = this._translate._('IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED');\n const message = this._translate._('IDEA_AGENDA.CALENDARS.DO_YOU_WANT_PROCEED_LINKING_OR_DELETE');\n const buttons = [\n { text: this._translate._('COMMON.DELETE'), handler: doDelete },\n { text: this._translate._('IDEA_AGENDA.CALENDARS.LINK'), handler: doLink }\n ];\n const alert = await this._alert.create({ header, message, buttons });\n alert.present();\n }\n }\n}\n","@if (calendar) {\n <ion-item\n class=\"calendarItem\"\n [button]=\"!disabled\"\n [title]=\"'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate\"\n (click)=\"calendar.external && !calendar.external.calendarId ? linkExtCalendarOrDelete() : manageCalendar()\"\n >\n @if (!hideColor) {\n <ion-avatar slot=\"start\" class=\"colorCircle\" [style.background-color]=\"calendar.color\" />\n }\n <ion-label>\n {{ calendar.name }}\n <p>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-text color=\"danger\">\n {{ 'IDEA_AGENDA.CALENDARS.TAP_TO_CONFIGURE' | translate }}\n </ion-text>\n }\n {{ calendar.description }}\n </p>\n </ion-label>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-icon\n slot=\"end\"\n color=\"danger\"\n name=\"flash-off\"\n [title]=\"'IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED_HINT' | translate\"\n />\n }\n @if (calendar.external?.service) {\n <ion-icon\n slot=\"end\"\n [name]=\"calendars.getServiceIcon(calendar.external.service)\"\n [title]=\"\n ('IDEA_AGENDA.CALENDARS.LINKED_TO' | translate) +\n ' ' +\n ('IDEA_AGENDA.CALENDARS.SERVICES.' + calendar.external.service | translate)\n \"\n />\n }\n </ion-item>\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\nimport { Calendar, ExternalCalendarInfo, ExternalCalendarSources, Membership } from 'idea-toolbox';\nimport { IDEALoadingService, IDEATinCanService, IDEAMessageService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEACalendarsService } from './calendars.service';\n\n@Component({\n selector: 'idea-calendar-creation',\n templateUrl: 'calendarCreation.component.html',\n styleUrls: ['calendarCreation.component.scss']\n})\nexport class IDEACalendarCreationComponent implements OnInit {\n /**\n * Whether we want to allow the creation of only a particular type of calendar, based on the scope.\n */\n @Input() fixScope: CalendarScopes;\n /**\n * Whether we want to allow the creation of local calendars.\n */\n @Input() onlyExternalCalendars: boolean;\n\n membership: Membership;\n calendar: Calendar;\n DEFAULT_COLOR = '#555';\n SOURCES = Object.keys(ExternalCalendarSources);\n\n private _calendars = inject(IDEACalendarsService);\n private _modal = inject(ModalController);\n private _tc = inject(IDEATinCanService);\n private _loading = inject(IDEALoadingService);\n private _message = inject(IDEAMessageService);\n private _translate = inject(IDEATranslationsService);\n\n ngOnInit(): void {\n this.calendar = new Calendar();\n this.membership = this._tc.get('membership');\n if (this.fixScope === CalendarScopes.SHARED) this.calendar.teamId = this.membership.teamId;\n if (this.fixScope === CalendarScopes.PRIVATE) this.calendar.userId = this.membership.userId;\n }\n\n resetScope(): void {\n if (this.canChangeScope()) this.calendar.teamId = this.calendar.userId = null;\n }\n canChangeScope(): boolean {\n return !this.fixScope && this.scopeIsSet();\n }\n scopeIsSet(): boolean {\n return Boolean(this.calendar.userId) || Boolean(this.calendar.teamId);\n }\n\n async saveNewCalendar(service?: ExternalCalendarSources): Promise<void> {\n if (!this.scopeIsSet()) return;\n if (!service && this.onlyExternalCalendars) return;\n if (service) {\n this.calendar.external = new ExternalCalendarInfo({ service });\n this.calendar.name = '-'; // it will be substituted with the external name\n } else {\n this.calendar.name = this.calendar.userId\n ? this._translate._('IDEA_AGENDA.CALENDARS.DEFAULT_PERSONAL_CALENDAR_NAME')\n : this._translate._('IDEA_AGENDA.CALENDARS.DEFAULT_TEAM_CALENDAR_NAME');\n this.calendar.color = this.DEFAULT_COLOR;\n }\n try {\n await this._loading.show();\n const cal = await this._calendars.postCalendar(this.calendar);\n this.calendar.load(cal);\n this._message.success('IDEA_AGENDA.CALENDARS.CALENDAR_CREATED');\n if (!cal.external) {\n this._modal.dismiss(this.calendar);\n return;\n }\n try {\n await this._calendars.linkExtService(this.calendar);\n const res = await this._calendars.chooseAndSetExternalCalendar(this.calendar);\n if (!res) {\n this._modal.dismiss(this.calendar);\n return;\n }\n this.calendar.load(res);\n await this._loading.show(this._translate._('IDEA_AGENDA.CALENDARS.FIRST_SYNC_MAY_TAKE_A_WHILE'));\n try {\n await this._calendars.syncCalendar(this.calendar);\n this._message.success('IDEA_AGENDA.CALENDARS.FIRST_SYNC_COMPLETED');\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n } finally {\n this._modal.dismiss(this.calendar);\n }\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n this._modal.dismiss(this.calendar);\n }\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n } finally {\n this._loading.hide();\n }\n }\n\n close(): void {\n this._modal.dismiss();\n }\n}\n\n/**\n * The possible scopes of the calendar.\n */\nexport enum CalendarScopes {\n SHARED = 'shared', // teamId\n PRIVATE = 'private' // userId\n}\n","<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n @if (!canChangeScope()) {\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n }\n @if (canChangeScope()) {\n <ion-button (click)=\"resetScope()\">\n <ion-icon name=\"arrow-back\" slot=\"icon-only\" />\n </ion-button>\n }\n </ion-buttons>\n <ion-title>\n @if (!scopeIsSet()) {\n <span>{{ 'IDEA_AGENDA.CALENDARS.ADD_A_CALENDAR' | translate }}</span>\n }\n @if (calendar.userId) {\n <span>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</span>\n }\n @if (calendar.teamId) {\n <span>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate: { team: tc.get('team').name } }}\n </span>\n }\n </ion-title>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <!-- 1st STEP -->\n @if (!scopeIsSet()) {\n <ion-grid class=\"ion-padding choiceGrid\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.CREATE_PRIVATE_OR_TEAM' | translate }}</h1>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.userId = membership.userId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"person\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.teamId = membership.teamId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"people\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n }\n <!-- 2nd STEP -->\n @if (scopeIsSet()) {\n <ion-grid class=\"ion-padding choiceGrid\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK_HINT' | translate }}</p>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n @if (!onlyExternalCalendars) {\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar()\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"remove\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n @for (s of SOURCES; track s) {\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar(s)\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon [name]=\"calendars.getServiceIcon(s)\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>\n {{ 'IDEA_AGENDA.CALENDARS.LINK_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + s | translate }}\n </h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.LINK_TO_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n }\n</ion-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\n\nimport { CalendarDateFormatter, CalendarModule, DateAdapter } from 'angular-calendar';\nimport { adapterFactory } from 'angular-calendar/date-adapters/date-fns';\nimport { CustomDateFormatter } from './dateFormatter.provider';\n\nimport {\n IDEATranslationsModule,\n IDEAColorPickerModule,\n IDEACheckerModule,\n IDEAUserAvatarModule\n} from '@idea-ionic/common';\n\nimport { IDEAAgendaComponent } from './agenda.component';\nimport { IDEACalendarComponent } from './calendar.component';\nimport { IDEACalendarItemComponent } from './calendarItem.component';\nimport { IDEACalendarCreationComponent } from './calendarCreation.component';\n\nimport { IDEACalendarsService } from './calendars.service';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n IonicModule,\n IDEATranslationsModule,\n IDEAColorPickerModule,\n IDEACheckerModule,\n IDEAUserAvatarModule,\n CalendarModule.forRoot({ provide: DateAdapter, useFactory: adapterFactory })\n ],\n declarations: [IDEAAgendaComponent, IDEACalendarComponent, IDEACalendarItemComponent, IDEACalendarCreationComponent],\n exports: [IDEAAgendaComponent, IDEACalendarComponent, IDEACalendarItemComponent, IDEACalendarCreationComponent],\n providers: [{ provide: CalendarDateFormatter, useClass: CustomDateFormatter }, IDEACalendarsService]\n})\nexport class IDEAAgendaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"idea-ionic-agenda.mjs","sources":["../../../modules/agenda/src/dateFormatter.provider.ts","../../../modules/agenda/src/agenda.component.ts","../../../modules/agenda/src/agenda.component.html","../../../modules/agenda/src/calendars.service.ts","../../../modules/agenda/src/calendar.component.ts","../../../modules/agenda/src/calendar.component.html","../../../modules/agenda/src/calendarItem.component.ts","../../../modules/agenda/src/calendarItem.component.html","../../../modules/agenda/src/calendarCreation.component.ts","../../../modules/agenda/src/calendarCreation.component.html","../../../modules/agenda/src/agenda.module.ts","../../../modules/agenda/idea-ionic-agenda.ts"],"sourcesContent":["import { formatDate } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { CalendarDateFormatter, DateFormatterParams } from 'angular-calendar';\n\n@Injectable()\nexport class CustomDateFormatter extends CalendarDateFormatter {\n // MONTH VIEW\n monthViewColumnHeader = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'EEE', locale);\n monthViewTitle = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'MMMM y', locale);\n\n // WEEK VIEW\n weekViewHour = ({ date, locale }: DateFormatterParams): string =>\n locale === 'it' ? formatDate(date, 'HH:mm', locale) : formatDate(date, 'h aa', locale);\n weekViewColumnHeader = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'EEE', locale);\n weekViewTitle = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'MMMM yyyy', locale);\n\n // DAY VIEW\n dayViewHour = ({ date, locale }: DateFormatterParams): string =>\n locale === 'it' ? formatDate(date, 'HH:mm', locale) : formatDate(date, 'h aa', locale);\n dayViewTitle = ({ date, locale }: DateFormatterParams): string =>\n locale === 'it' ? formatDate(date, 'EEEE, dd MMM yyyy', locale) : formatDate(date, 'EEEE, MMM dd, yyyy', locale);\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ChangeDetectorRef,\n inject\n} from '@angular/core';\nimport { IonContent, Platform } from '@ionic/angular';\nimport { finalize, fromEvent, Subject, takeUntil } from 'rxjs';\nimport {\n CalendarEvent,\n CalendarEventTimesChangedEvent,\n CalendarMonthViewBeforeRenderEvent,\n CalendarView,\n CalendarWeekViewBeforeRenderEvent\n} from 'angular-calendar';\nimport { isFuture, isToday, isSameDay, endOfWeek, addDays, addMinutes } from 'date-fns';\n// @ts-ignore\nimport ColorParse from 'color-parse';\nimport { IDEATranslationsService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-agenda',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: 'agenda.component.html',\n styleUrls: ['agenda.component.scss']\n})\nexport class IDEAAgendaComponent implements OnInit {\n private _cdr = inject(ChangeDetectorRef);\n private _platform = inject(Platform);\n _translate = inject(IDEATranslationsService);\n\n /**\n * The events to display in the calendar.\n */\n @Input() events: AgendaEvent[] = [];\n /**\n * An array of day indexes (0 = sunday, 1 = monday, etc.) that will be hidden on the view.\n */\n @Input() excludeDays: number[] = [];\n /**\n * The day start hours in 24 hour time. Must be 0-23\n */\n @Input() dayStartHour = 0;\n /**\n * The day start hours in 24 hour time. Must be 0-23\n */\n @Input() dayEndHour = 23;\n /**\n * The number of segments in an hour. Must divide equally into 60.\n */\n @Input() hourSegments = 2;\n /**\n * Whether to open the current day's details right away in month view.\n */\n @Input() activeDayIsOpen = false;\n /**\n * The view mode for the agenda.\n */\n @Input() view: CalendarView = CalendarView.Week;\n /**\n * The allowed view mode for the agenda.\n */\n @Input() allowedViews = [CalendarView.Day, CalendarView.Week, CalendarView.Month];\n /**\n * Whether to block any day/slot in the past.\n */\n @Input() onlyFuture = false;\n /**\n * Some notes to show underneath the calendar's header.\n */\n @Input() titleNotes: string;\n /**\n * The template for new events created by drag&drop.\n */\n @Input() newEventTemplate: AgendaEvent = { title: 'New', start: null, meta: {} };\n /**\n * Whether (and how) to allow the creation of events by drag&drop.\n * If enabled, on mobile it requires the `parentContent` to be set for a correct execution.\n */\n @Input() allowDragToCreate: DragToCreateOptions = DragToCreateOptions.DISABLED;\n /**\n * The parent ion-content, in case we want to control its scrollability for drag&drop features.\n */\n @Input() parentContent: IonContent;\n /**\n * Trigger when an event is selected.\n */\n @Output() selectEvent = new EventEmitter<AgendaEvent>();\n /**\n * Trigger when a day is selected.\n */\n @Output() selectDay = new EventEmitter<Date>();\n /**\n * Trigger when a time slot is selected.\n */\n @Output() selectSlot = new EventEmitter<Date>();\n /**\n * Trigger when a new event is added by drag and drop.\n */\n @Output() newEventByDrag = new EventEmitter<AgendaEvent>();\n /**\n * Trigger when an event changed date (drag&drop or resize).\n */\n @Output() changeEvent = new EventEmitter<AgendaEvent>();\n /**\n * Trigger when the view date of reference changed (because we moved inside the calendar).\n */\n @Output() changeDate = new EventEmitter<Date>();\n /**\n * Trigger before the rendering of the week or day view.\n */\n @Output() beforeWeekOrDayViewRenderEmitter = new EventEmitter<CalendarWeekViewBeforeRenderEvent>();\n /**\n * Trigger before the rendering of the month view.\n */\n @Output() beforeMonthViewRenderEmitter = new EventEmitter<CalendarMonthViewBeforeRenderEvent>();\n\n CalendarView = CalendarView;\n Attendance = EventAttendance;\n viewDate = new Date();\n refresh = new Subject();\n /**\n * @hide\n */\n locale: string;\n /**\n * @hide\n */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n ngOnInit(): void {\n this.locale = this._translate.getCurrentLang();\n // in case of Italian locale the starting day for the week is monday (1), otherwise sunday (0)\n this.weekStartsOn = this.locale === 'it' ? 1 : 0;\n }\n isMobile(): boolean {\n return this._platform.is('mobile');\n }\n\n /**\n * Run some checks before the month view is rendered (e.g. disable invalid days).\n */\n beforeMonthViewRender(event: CalendarMonthViewBeforeRenderEvent): void {\n this.beforeMonthViewRenderEmitter.emit(event);\n const { body } = event;\n body.forEach(day => {\n if (!this.dateIsValid(day.date)) day.cssClass = 'cal-disabled';\n });\n }\n /**\n * Run some checks before the week/day view is rendered (e.g. disable invalid days).\n */\n beforeWeekOrDayViewRender(event: CalendarWeekViewBeforeRenderEvent): void {\n this.beforeWeekOrDayViewRenderEmitter.emit(event);\n const { header, hourColumns } = event;\n header.forEach(day => {\n if (!this.dateIsValid(day.date)) day.cssClass = 'cal-disabled';\n });\n hourColumns.forEach(hourCol => {\n hourCol.hours.forEach(hour => {\n hour.segments.forEach(segment => {\n if (!this.dateIsValid(segment.date)) segment.cssClass = 'cal-disabled';\n });\n });\n });\n }\n\n dateIsValid(date: any, sameDayIsValid?: boolean): boolean {\n if (!this.onlyFuture) return true;\n return isFuture(date) || (sameDayIsValid ? isToday(date) : false);\n }\n\n setView(view: CalendarView): void {\n this.view = view;\n }\n\n viewDateChanged(newDate: Date): void {\n if (this.view === CalendarView.Month) this.activeDayIsOpen = false;\n this.changeDate.emit(newDate);\n }\n\n changeDay({ date, events }: { date: Date; events: AgendaEvent[] }): void {\n if (!this.dateIsValid(date, true)) return;\n if ((isSameDay(this.viewDate, date) && this.activeDayIsOpen === true) || !events || events.length === 0)\n this.activeDayIsOpen = false;\n else this.activeDayIsOpen = true;\n this.viewDate = date;\n }\n\n eventTimesChanged({ event, newStart, newEnd }: CalendarEventTimesChangedEvent): void {\n event.start = newStart;\n event.end = newEnd;\n this.events = this.events.slice();\n this.changeEvent.emit(event);\n }\n\n getAlternateColor(color: string, amount: number, opacity?: number): string | undefined {\n if (!color?.trim()) return undefined;\n const alt = ColorParse(color.trim());\n const r = Math.max(Math.min(255, Number(alt.values[0]) + amount), 0);\n const g = Math.max(Math.min(255, Number(alt.values[1]) + amount), 0);\n const b = Math.max(Math.min(255, Number(alt.values[2]) + amount), 0);\n return `rgba(${r}, ${g}, ${b}, ${opacity || 1})`;\n }\n\n getTooltipContent(event: AgendaEvent): string {\n if (!event) return '';\n let str = event.title ? '<b>' + event.title + '</b>' : '';\n if (event.description) str = str.concat('<br>', event.description);\n if (event.icons) event.icons.forEach(x => (str = str.concat('<br>', '<i>', x.title, '</i>')));\n if (event.avatars && event.avatars.length) {\n str = str.concat('<br><br>~');\n event.avatars.forEach(x => (str = str.concat('<br>', x.title)));\n }\n return str;\n }\n\n getPreviewDescription(description: string): string {\n return description && description.length > 100 ? description.slice(0, 100).concat('...') : description;\n }\n\n startDragToCreate(event: Event, segmentDate: Date, segmentElement: HTMLElement): void {\n if (!this.allowDragToCreate) return;\n\n if (this.parentContent) this.parentContent.scrollY = false;\n\n const eventByDragAndDrop: AgendaEvent = { ...this.newEventTemplate, start: segmentDate };\n this.events = [...this.events, eventByDragAndDrop];\n\n const segmentPosition = segmentElement.getBoundingClientRect();\n const endOfView = endOfWeek(this.viewDate, { weekStartsOn: this.weekStartsOn });\n\n const whileDragging = (draggingEvent: Event): void => {\n const { clientY, clientX } =\n draggingEvent.type === 'touchmove' ? (draggingEvent as TouchEvent).touches[0] : (draggingEvent as MouseEvent);\n\n const minutesDiff = ceilToNearest(clientY - segmentPosition.top, 30);\n const daysDiff = floorToNearest(clientX - segmentPosition.left, segmentPosition.width) / segmentPosition.width;\n\n let newEnd: Date;\n if (this.allowDragToCreate === DragToCreateOptions.ONLY_SAME_DAY) newEnd = addMinutes(segmentDate, minutesDiff);\n else newEnd = addDays(addMinutes(segmentDate, minutesDiff), daysDiff);\n\n if (newEnd > segmentDate && newEnd < endOfView) eventByDragAndDrop.end = newEnd;\n refreshView();\n };\n\n const endOfDrag = (): void => {\n if (this.parentContent) this.parentContent.scrollY = true;\n eventByDragAndDrop.end = this.getFixedEndDateWithMinimumSegmentDuration(eventByDragAndDrop);\n refreshView();\n this.newEventByDrag.emit(eventByDragAndDrop);\n };\n\n const refreshView = (): void => {\n this.events = [...this.events];\n this._cdr.detectChanges();\n };\n\n if (event.type === 'touchstart') {\n fromEvent(document, 'touchmove')\n .pipe(finalize(endOfDrag), takeUntil(fromEvent(document, 'touchend')))\n .subscribe(whileDragging);\n } else {\n fromEvent(document, 'mousemove')\n .pipe(finalize(endOfDrag), takeUntil(fromEvent(document, 'mouseup')))\n .subscribe(whileDragging);\n }\n }\n private getFixedEndDateWithMinimumSegmentDuration(agendaBooking: AgendaEvent): Date {\n const fixedEnd = new Date(agendaBooking.end || agendaBooking.start);\n const segmentSizeInMinutes = 60 / this.hourSegments;\n if (fixedEnd.getTime() <= agendaBooking.start.getTime() + segmentSizeInMinutes * 60 * 1000)\n fixedEnd.setMinutes(agendaBooking.start.getMinutes() + segmentSizeInMinutes);\n return fixedEnd;\n }\n}\n\n/**\n * A richer version of the classic CalendarEvent.\n */\nexport interface AgendaEvent extends CalendarEvent {\n /**\n * A brief description for the event (e.g. customer, address, etc.).\n */\n description?: string;\n /**\n * The location of the event.\n */\n location?: string;\n /**\n * A list of URLs of images to show as small avatars.\n */\n avatars?: { id: string; url: string; title: string }[];\n /**\n * A list of ion-icons to show.\n */\n icons?: { name: string; title: string }[];\n /**\n * The colors of the event displayed.\n */\n color?: { primary: string; secondary?: string } | any;\n /**\n * Whether the event is external; external events are less important UI-wise.\n */\n external?: boolean;\n /**\n * The attendance status to this event, if any.\n */\n attendance?: EventAttendance;\n /**\n * A standard and unique id for the event, valid across multiple sources.\n */\n iCalUID?: string;\n}\n\n/**\n * Possible attendance statuses for the event.\n */\nexport enum EventAttendance {\n DECLINED = -1,\n NEEDS_ACTION = 0,\n TENTATIVE,\n ACCEPTED\n}\n\n/**\n * The options to allow (or not) drag&drop to create a new event.\n */\nexport enum DragToCreateOptions {\n DISABLED = 0,\n ONLY_SAME_DAY = 1,\n FREE = 2\n}\n\nconst floorToNearest = (amount: number, precision: number): number => Math.floor(amount / precision) * precision;\nconst ceilToNearest = (amount: number, precision: number): number => Math.ceil(amount / precision) * precision;\n","<div class=\"agenda\">\n <!-- TOOLBAR -->\n <ion-row class=\"ion-align-items-center\">\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"5\"\n [sizeSm]=\"3\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n @if (allowedViews.length > 1) {\n <ion-item lines=\"none\" class=\"calendarViewSelector\">\n <ion-select\n interface=\"popover\"\n [value]=\"view\"\n (ionChange)=\"$event?.detail ? setView($event.detail.value) : null\"\n >\n @for (view of allowedViews; track view) {\n <ion-select-option [value]=\"view\">\n {{ 'IDEA_AGENDA.' + view | uppercase | translate }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n }\n </ion-col>\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"7\"\n [sizeSm]=\"4\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarPreviousView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-back-outline\" slot=\"icon-only\" />\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarToday\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"today-outline\" slot=\"icon-only\" />\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarNextView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-forward-outline\" slot=\"icon-only\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-align-self-center titleCol\" [size]=\"12\" [sizeSm]=\"5\" [pullSm]=\"7\" [sizeLg]=\"8\" [pullLg]=\"4\">\n <h2>{{ viewDate | calendarDate: view + 'ViewTitle' : locale }}</h2>\n @if (titleNotes) {\n <p>{{ titleNotes }}</p>\n }\n </ion-col>\n </ion-row>\n <!-- TEMPLATES (touch only what's necessary and leave everything else as it is) -->\n <ng-template #eventTitleTemplate let-event=\"event\" let-view=\"view\">\n <span\n class=\"cal-event-title\"\n [class.noWrap]=\"event.allDay\"\n [attr.aria-hidden]=\"{} | calendarA11y: 'hideEventTitle'\"\n >\n {{ event.title | calendarEventTitle: view : event }}\n @if (!event.allDay) {\n <p>{{ getPreviewDescription(event.description) }}</p>\n }\n </span>\n </ng-template>\n <ng-template\n #eventTemplate\n let-weekEvent=\"weekEvent\"\n let-tooltipPlacement=\"tooltipPlacement\"\n let-eventClicked=\"eventClicked\"\n let-tooltipTemplate=\"tooltipTemplate\"\n let-tooltipAppendToBody=\"tooltipAppendToBody\"\n let-tooltipDisabled=\"tooltipDisabled\"\n let-tooltipDelay=\"tooltipDelay\"\n let-column=\"column\"\n let-daysInWeek=\"daysInWeek\"\n >\n <div\n class=\"cal-event\"\n [class.external]=\"weekEvent.event.external\"\n [class.needsAction]=\"Attendance.NEEDS_ACTION === weekEvent.event.attendance\"\n [class.declined]=\"Attendance.DECLINED === weekEvent.event.attendance\"\n [class.tentative]=\"Attendance.TENTATIVE === weekEvent.event.attendance\"\n [style.border-left-color]=\"weekEvent.event.color?.primary\"\n [style.color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 80 : -40)\"\n [style.background-color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 60 : 80, 0.2)\"\n [mwlCalendarTooltip]=\"!tooltipDisabled && !isMobile() ? getTooltipContent(weekEvent.event) : ''\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipEvent]=\"weekEvent.tempEvent || weekEvent.event\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n (mwlClick)=\"eventClicked.emit({ sourceEvent: $event })\"\n (mwlKeydownEnter)=\"eventClicked.emit({ sourceEvent: $event })\"\n tabindex=\"0\"\n role=\"application\"\n [attr.aria-label]=\"\n { event: weekEvent.tempEvent || weekEvent.event, locale: locale } | calendarA11y: 'eventDescription'\n \"\n >\n <mwl-calendar-event-actions [event]=\"weekEvent.tempEvent || weekEvent.event\" />\n &ngsp;\n <mwl-calendar-event-title\n [event]=\"weekEvent.tempEvent || weekEvent.event\"\n [customTemplate]=\"eventTitleTemplate\"\n [view]=\"daysInWeek === 1 ? 'day' : 'week'\"\n >\n </mwl-calendar-event-title>\n @if (!weekEvent.event.allDay) {\n <div class=\"eventGadgets\">\n @for (icon of weekEvent.event.icons; track icon) {\n <ion-icon [name]=\"icon.name\" [title]=\"icon.title\" />\n }\n @for (avatar of weekEvent.event.avatars; track avatar) {\n <idea-user-avatar size=\"mini\" [src]=\"avatar.url\" [name]=\"avatar.title\" />\n }\n </div>\n }\n </div>\n </ng-template>\n <ng-template\n #hourSegmentTemplate\n let-segment=\"segment\"\n let-locale=\"locale\"\n let-segmentHeight=\"segmentHeight\"\n let-isTimeLabel=\"isTimeLabel\"\n >\n <div\n #segmentElement\n class=\"cal-hour-segment\"\n [style.height.px]=\"segmentHeight\"\n [class.cal-hour-start]=\"segment.isStart\"\n [class.cal-after-hour-start]=\"!segment.isStart\"\n [ngClass]=\"segment.cssClass\"\n (mousedown)=\"allowDragToCreate ? startDragToCreate($event, segment.date, segmentElement) : null\"\n (touchstart)=\"allowDragToCreate ? startDragToCreate($event, segment.date, segmentElement) : null\"\n >\n @if (isTimeLabel) {\n <div class=\"cal-time\">\n {{ segment.date | calendarDate: 'weekViewHour' : locale }}\n </div>\n }\n </div>\n </ng-template>\n <!-- VIEWS -->\n <div>\n @switch (view) {\n @case (CalendarView.Month) {\n <mwl-calendar-month-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [activeDayIsOpen]=\"activeDayIsOpen\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays\"\n [weekStartsOn]=\"weekStartsOn\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayClicked)=\"changeDay($event.day)\"\n (beforeViewRender)=\"beforeMonthViewRender($event)\"\n >\n </mwl-calendar-month-view>\n }\n @case (CalendarView.Week) {\n <mwl-calendar-week-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays\"\n [weekStartsOn]=\"weekStartsOn\"\n [dayStartHour]=\"dayStartHour\"\n [dayEndHour]=\"dayEndHour\"\n [hourSegments]=\"hourSegments\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayHeaderClicked)=\"dateIsValid($event.day.date) ? selectDay.emit($event.day.date) : null\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-week-view>\n }\n @case (CalendarView.Day) {\n <mwl-calendar-day-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [dayStartHour]=\"dayStartHour\"\n [dayEndHour]=\"dayEndHour\"\n [hourSegments]=\"hourSegments\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-day-view>\n }\n }\n </div>\n</div>\n","import { Injectable, inject } from '@angular/core';\nimport { AlertController, ModalController } from '@ionic/angular';\nimport { Browser } from '@capacitor/browser';\nimport { Calendar, ExternalCalendarSources, Suggestion } from 'idea-toolbox';\nimport {\n IDEAEnvironment,\n IDEALoadingService,\n IDEAAWSAPIService,\n IDEATranslationsService,\n IDEASuggestionsComponent\n} from '@idea-ionic/common';\n\n/**\n * Note: to test locally, you need to temporarily change the redirect URI:\n * - in the lambda `idea_calendars`, e.g. `SCARLETT_URL`;\n * - in the client config file: `APP_URL`.\n * In both cases, the value should be set to `http://localhost:8100` (or according to the local URL).\n */\n@Injectable()\nexport class IDEACalendarsService {\n protected _env = inject(IDEAEnvironment);\n private _modal = inject(ModalController);\n private _alert = inject(AlertController);\n private _loading = inject(IDEALoadingService);\n private _API = inject(IDEAAWSAPIService);\n private _translate = inject(IDEATranslationsService);\n\n /**\n * Get the ion-icon of an external service from its name.\n */\n getServiceIcon(service: ExternalCalendarSources): string {\n switch (service) {\n case ExternalCalendarSources.GOOGLE:\n return 'logo-google';\n case ExternalCalendarSources.MICROSOFT:\n return 'logo-windows';\n default:\n return 'help';\n }\n }\n /**\n * Get the base URL for API request (shared/private calendar).\n */\n getRequestURL(calendar: Calendar): string {\n return (calendar.teamId ? `teams/${calendar.teamId}/` : '').concat('calendars');\n }\n\n /**\n * Create a new calendar.\n */\n async postCalendar(cal: Calendar): Promise<Calendar> {\n const calendar = await this._API.postResource(this.getRequestURL(cal), { idea: true, body: cal });\n return new Calendar(calendar);\n }\n /**\n * Update an existing calendar.\n */\n async putCalendar(cal: Calendar): Promise<Calendar> {\n const body = { idea: true, resourceId: cal.calendarId, body: cal };\n const calendar = await this._API.putResource(this.getRequestURL(cal), body);\n return new Calendar(calendar);\n }\n /**\n * Delete a calendar.\n */\n async deleteCalendar(cal: Calendar): Promise<void> {\n await this._API.deleteResource(this.getRequestURL(cal), { idea: true, resourceId: cal.calendarId });\n }\n /**\n * Associate an external calendar with the given calendar.\n */\n async setExternalCalendar(cal: Calendar, externalId: string): Promise<Calendar> {\n const body = { idea: true, resourceId: cal.calendarId, body: { action: 'SET_EXTERNAL_CALENDAR', externalId } };\n const calendar = await this._API.patchResource(this.getRequestURL(cal), body);\n return new Calendar(calendar);\n }\n\n /**\n * Link the calendar with the chosen external service (auth flow).\n */\n async linkExtService(cal: Calendar): Promise<void> {\n if (!cal.external) throw new Error('NOT_EXTERNAL');\n const baseURL = window.location.protocol.concat('//', window.location.hostname);\n let url: string;\n switch (cal.external.service) {\n case ExternalCalendarSources.GOOGLE:\n url =\n 'https://accounts.google.com/o/oauth2/v2/auth?' +\n `client_id=${encodeURIComponent(this._env.google.apiClientId)}` +\n '&response_type=code' +\n `&redirect_uri=${encodeURIComponent(baseURL.concat('/echo/google-calendars-integration'))}` +\n '&include_granted_scopes=true' +\n '&access_type=offline&prompt=consent' +\n `&scope=${encodeURIComponent(this._env.google.apiScope)}` +\n `&state=${encodeURIComponent(cal.calendarId)}`;\n break;\n case ExternalCalendarSources.MICROSOFT:\n url =\n 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?' +\n `client_id=${encodeURIComponent(this._env.microsoft.apiClientId)}` +\n '&response_type=code' +\n `&redirect_uri=${encodeURIComponent(baseURL.concat('/echo/microsoft-calendars-integration'))}` +\n '&response_mode=query' +\n `&scope=${encodeURIComponent(this._env.microsoft.apiScope)}` +\n `&state=${encodeURIComponent(cal.calendarId)}`;\n break;\n }\n if (!url) throw new Error('INVALID_SERVICE');\n await Browser.open({ url });\n // since we don't know when/if the auth flow will finish, we wait\n await this.showAlertLinkingCalendar();\n }\n private async showAlertLinkingCalendar(): Promise<void> {\n return new Promise(async resolve => {\n const header = this._translate._('IDEA_AGENDA.CALENDARS.LINKING_CALENDAR');\n const message = this._translate._('IDEA_AGENDA.CALENDARS.LINKING_CALENDAR_CONFIRM_ONCE_DONE');\n const buttons = [{ text: this._translate._('COMMON.DONE'), handler: resolve }];\n const alert = await this._alert.create({ header, message, buttons, backdropDismiss: false });\n alert.present();\n });\n }\n\n /**\n * Get the external calendars list of the external service.\n */\n async getExternalCalendars(cal: Calendar): Promise<ExtCalendar[]> {\n if (!cal.external) throw new Error('NOT_EXTERNAL');\n // get the access token to make requests; in case it fails, proceed to link the external service\n const body = { idea: true, resourceId: cal.calendarId, body: { action: 'GET_ACCESS_TOKEN' } };\n const result = await this._API.patchResource(this.getRequestURL(cal), body);\n const headers = { Authorization: 'Bearer '.concat(result.token) };\n if (cal.external.service === ExternalCalendarSources.GOOGLE) {\n const res = await (\n await fetch('https://www.googleapis.com/calendar/v3/users/me/calendarList', { headers })\n ).json();\n return res.items.map((c: any): ExtCalendar => ({ name: c.summary, id: c.id } as ExtCalendar));\n } else if (cal.external.service === ExternalCalendarSources.MICROSOFT) {\n const res = await (await fetch('https://graph.microsoft.com/v1.0/me/calendars', { headers })).json();\n return res.value.map((c: any): ExtCalendar => ({ name: c.name, id: c.id } as ExtCalendar));\n }\n }\n\n /**\n * If the external service is linked, choose an external calendar and set it for the chosen calendar.\n * @return the updated calendar.\n */\n async chooseAndSetExternalCalendar(cal: Calendar): Promise<Calendar> {\n const extCalId = await this.openModalAndPickExternalCalendar(cal);\n if (!extCalId) return;\n return await this.setExternalCalendar(cal, extCalId);\n }\n /**\n * Open the modal to pick a calendar from the external service.\n * @return the id of the external calendar.\n */\n private async openModalAndPickExternalCalendar(cal: Calendar): Promise<string> {\n let extCals: ExtCalendar[];\n try {\n await this._loading.show();\n extCals = await this.getExternalCalendars(cal);\n if (!extCals.length) throw new Error('NO_EXTERNAL_CALENDARS');\n } catch (error) {\n throw error;\n } finally {\n this._loading.hide();\n }\n const modal = await this._modal.create({\n component: IDEASuggestionsComponent,\n componentProps: {\n data: extCals.map(c => new Suggestion({ value: c.id, name: c.name })),\n searchPlaceholder: this._translate._('IDEA_AGENDA.CALENDARS.CHOOSE_AN_EXTERNAL_CALENDAR_TO_LINK'),\n sortData: true,\n hideIdFromUI: true,\n hideClearButton: true,\n mustChoose: true\n },\n backdropDismiss: false\n });\n modal.present();\n const res = await modal.onDidDismiss();\n return res.data ? res.data.value : null;\n }\n\n /**\n * First sync of the extenal calendar.\n */\n syncCalendar(cal: Calendar): Promise<void> {\n return new Promise((resolve, reject): void => this.syncCalendarHelper(cal, err => (err ? reject(err) : resolve())));\n }\n /**\n * Helper to recursively sync an the extenal calendar.\n */\n private syncCalendarHelper(cal: Calendar, done: (err?: Error) => void): void {\n // this is a recursive operation: the API returns if the sync has to continue or it finished\n this._API\n .patchResource(this.getRequestURL(cal), {\n idea: true,\n resourceId: cal.calendarId,\n body: { action: 'SYNC_EXTERNAL_CALENDAR', firstSync: true }\n })\n .then((res: any): void => {\n if (res.moreData) this.syncCalendarHelper(cal, done);\n else done();\n })\n .catch(err => done(err));\n }\n}\n\n/**\n * Helper structure to define external services' calendars (basic info).\n */\ninterface ExtCalendar {\n id: string;\n name: string;\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { ModalController, AlertController } from '@ionic/angular';\nimport { Calendar, Check, Membership } from 'idea-toolbox';\nimport {\n IDEALoadingService,\n IDEAAWSAPIService,\n IDEATinCanService,\n IDEAMessageService,\n IDEATranslationsService\n} from '@idea-ionic/common';\n\nimport { IDEACalendarsService } from './calendars.service';\n\n@Component({\n selector: 'idea-calendar',\n templateUrl: 'calendar.component.html',\n styleUrls: ['calendar.component.scss']\n})\nexport class IDEACalendarComponent implements OnInit {\n private _calendars = inject(IDEACalendarsService);\n private _modal = inject(ModalController);\n private _alert = inject(AlertController);\n private _tc = inject(IDEATinCanService);\n private _loading = inject(IDEALoadingService);\n private _message = inject(IDEAMessageService);\n private _API = inject(IDEAAWSAPIService);\n private _translate = inject(IDEATranslationsService);\n\n /**\n * The calendar to manage.\n */\n @Input() calendar: Calendar;\n /**\n * Whether we want to enable advanced permissions (based on the memberships) on the calendar.\n */\n @Input() advancedPermissions: boolean;\n /**\n * Whether the calendar color is an important detail or it shouldn't be shown.\n */\n @Input() hideColor: boolean;\n\n calendarWC: Calendar;\n membershipsChecks: Check[];\n membership: Membership;\n errors = new Set<string>();\n DEFAULT_COLOR = '#555';\n\n async ngOnInit(): Promise<void> {\n this.membership = this._tc.get('membership');\n this.calendarWC = new Calendar(this.calendar);\n try {\n const memberships: Membership[] = await this._API.getResource(`teams/${this.membership.teamId}/memberships`);\n this.membershipsChecks = memberships.map(\n m =>\n new Check({\n value: m.userId,\n name: m.name,\n checked: (this.calendarWC.usersCanManageAppointments || []).some(x => x === m.userId)\n })\n );\n } catch (error) {\n this._message.error('COMMON.COULDNT_LOAD_LIST');\n }\n }\n\n hasFieldAnError(field: string): boolean {\n return this.errors.has(field);\n }\n\n async save(): Promise<void> {\n if (!this.calendarWC.color) this.calendarWC.color = this.DEFAULT_COLOR;\n if (this.calendarWC.isShared() && this.advancedPermissions)\n this.calendarWC.usersCanManageAppointments = this.membershipsChecks\n .filter(x => x.checked)\n .map(x => String(x.value));\n else delete this.calendarWC.usersCanManageAppointments;\n\n this.errors = new Set(this.calendarWC.validate());\n if (this.errors.size) return this._message.error('COMMON.FORM_HAS_ERROR_TO_CHECK');\n\n try {\n await this._loading.show();\n const res = await this._calendars.putCalendar(this.calendarWC);\n this.calendar.load(res);\n this._message.success('IDEA_AGENDA.CALENDARS.CALENDAR_SAVED');\n this._modal.dismiss(this.calendar);\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n } finally {\n this._loading.hide();\n }\n }\n\n async delete(): Promise<void> {\n const doDelete = async (): Promise<void> => {\n try {\n await this._loading.show();\n await this._calendars.deleteCalendar(this.calendarWC);\n this._message.success('IDEA_AGENDA.CALENDARS.CALENDAR_DELETED');\n this._modal.dismiss(true);\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n } finally {\n this._loading.hide();\n }\n };\n\n const header = this._translate._('COMMON.ARE_YOU_SURE');\n const subHeader = this._translate._('IDEA_AGENDA.CALENDARS.DELETE_CALENDAR');\n const message = this._translate._('IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT');\n const buttons = [\n { text: this._translate._('COMMON.CANCEL'), role: 'cancel' },\n { text: this._translate._('COMMON.DELETE'), handler: doDelete }\n ];\n const alert = await this._alert.create({ header, subHeader, message, buttons });\n alert.present();\n }\n\n close(): void {\n this._modal.dismiss();\n }\n}\n","<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close-circle\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>{{ 'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'COMMON.SAVE' | translate\" (click)=\"save()\">\n <ion-icon name=\"checkmark-circle\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n @if (calendarWC) {\n <div class=\"maxWidthContainer\">\n <ion-list class=\"aList\">\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('name')\"\n [title]=\"'IDEA_AGENDA.CALENDARS.NAME_HINT' | translate\"\n >\n <ion-input\n labelPlacement=\"stacked\"\n [label]=\"'IDEA_AGENDA.CALENDARS.NAME' | translate\"\n [placeholder]=\"'IDEA_AGENDA.CALENDARS.NAME_HINT' | translate\"\n [(ngModel)]=\"calendarWC.name\"\n />\n </ion-item>\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('description')\"\n [title]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT' | translate\"\n >\n <ion-input\n labelPlacement=\"stacked\"\n [label]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION' | translate\"\n [placeholder]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT' | translate\"\n [(ngModel)]=\"calendarWC.description\"\n />\n </ion-item>\n @if (!hideColor) {\n <idea-color-picker\n [lines]=\"'inset'\"\n [current]=\"calendarWC.color\"\n [label]=\"'IDEA_AGENDA.CALENDARS.COLOR' | translate\"\n [class.fieldHasError]=\"hasFieldAnError('color')\"\n (select)=\"$event ? (calendarWC.color = $event) : null\"\n />\n }\n @if (membershipsChecks && calendarWC.isShared() && advancedPermissions) {\n <idea-checker\n [data]=\"membershipsChecks\"\n [label]=\"'IDEA_AGENDA.CALENDARS.USERS_ALLOWED_TO_MANAGE_APPOINTMENTS' | translate\"\n [searchPlaceholder]=\"'IDEA_AGENDA.CALENDARS.WHO_CAN_MANAGE_APPOINTMENTS' | translate\"\n [noneText]=\"'IDEA_AGENDA.CALENDARS.NOBODY' | translate\"\n [allText]=\"'IDEA_AGENDA.CALENDARS.EVERYONE' | translate\"\n [allowSelectDeselectAll]=\"true\"\n [lines]=\"'inset'\"\n />\n }\n </ion-list>\n @if (calendarWC.external?.service) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_AGENDA.CALENDARS.INFO_ON_CALENDAR' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n @if (calendar.userId) {\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"person\" />\n </ion-item>\n }\n @if (calendar.teamId) {\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"people\" />\n </ion-item>\n }\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.LINKED_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + calendarWC.external.service | translate }}\n <p>{{ calendarWC.external.name }} ({{ calendarWC.external.email }})</p>\n </ion-label>\n <ion-icon slot=\"end\" [name]=\"calendars.getServiceIcon(calendarWC.external.service)\" />\n </ion-item>\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.ACCESS_LEVELS.' + calendarWC.external.userAccess | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.BASED_ON_EXTERNAL_SERVICE_SHARING_PERMISSION' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"shield\" />\n </ion-item>\n </ion-list>\n }\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label color=\"danger\">\n <h2>{{ 'IDEA_AGENDA.CALENDARS.DANGEROUS_ZONE' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n <ion-item lines=\"inset\">\n <ion-label class=\"ion-text-wrap\">\n {{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-button\n color=\"danger\"\n [title]=\"'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate\"\n (click)=\"delete()\"\n >\n {{ 'COMMON.DELETE' | translate }}\n </ion-button>\n </ion-item>\n </ion-list>\n </div>\n }\n</ion-content>\n","import { Component, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { AlertController, ModalController } from '@ionic/angular';\nimport { Calendar } from 'idea-toolbox';\nimport { IDEALoadingService, IDEAMessageService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEACalendarComponent } from './calendar.component';\nimport { IDEACalendarsService } from './calendars.service';\n\n@Component({\n selector: 'idea-calendar-item',\n templateUrl: 'calendarItem.component.html',\n styleUrls: ['calendarItem.component.scss']\n})\nexport class IDEACalendarItemComponent {\n private _alert = inject(AlertController);\n private _modal = inject(ModalController);\n private _message = inject(IDEAMessageService);\n private _loading = inject(IDEALoadingService);\n private _translate = inject(IDEATranslationsService);\n private _calendars = inject(IDEACalendarsService);\n\n /**\n * The calendar to show.\n */\n @Input() calendar: Calendar;\n /**\n * Whether the component is disabled.\n */\n @Input() disabled: boolean;\n /**\n * Whether we want to enable advanced permissions (based on the memberships) on the calendar.\n */\n @Input() advancedPermissions: boolean;\n /**\n * Whether the calendar color is an important detail or it shouldn't be shown.\n */\n @Input() hideColor: boolean;\n /**\n * Report to parent components a change.\n */\n @Output() somethingChanged = new EventEmitter<Calendar>();\n\n async manageCalendar(): Promise<void> {\n if (this.disabled) return;\n const modal = await this._modal.create({\n component: IDEACalendarComponent,\n componentProps: {\n calendar: this.calendar,\n advancedPermissions: this.advancedPermissions,\n hideColor: this.hideColor\n }\n });\n modal.onDidDismiss().then(res => {\n const cal = res.data;\n if (cal === undefined) return;\n else if (cal === null) this.calendar = null;\n else this.calendar.load(cal);\n this.somethingChanged.emit();\n });\n modal.present();\n }\n\n private async linkExtCalendarOrDelete(): Promise<void> {\n if (this.disabled) return;\n try {\n const cal = await this._calendars.chooseAndSetExternalCalendar(this.calendar);\n if (!cal) throw new Error('NO_EXTERNAL_CALENDAR_CHOSEN');\n this.calendar.load(cal);\n this._message.success('IDEA_AGENDA.CALENDARS.CALENDAR_LINKED');\n try {\n await this._loading.show(this._translate._('IDEA_AGENDA.CALENDARS.FIRST_SYNC_MAY_TAKE_A_WHILE'));\n await this._calendars.syncCalendar(this.calendar);\n this._message.success('IDEA_AGENDA.CALENDARS.FIRST_SYNC_COMPLETED');\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n } finally {\n this._loading.hide();\n this.somethingChanged.emit();\n }\n } catch (error) {\n const doDelete = async (): Promise<void> => {\n try {\n await this._loading.show();\n await this._calendars.deleteCalendar(this.calendar);\n this._message.success('COMMON.OPERATION_COMPLETED');\n this.somethingChanged.emit();\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n } finally {\n this._loading.hide();\n }\n };\n const doLink = async (): Promise<void> => {\n try {\n await this._calendars.linkExtService(this.calendar);\n this.linkExtCalendarOrDelete();\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n }\n };\n const header = this._translate._('IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED');\n const message = this._translate._('IDEA_AGENDA.CALENDARS.DO_YOU_WANT_PROCEED_LINKING_OR_DELETE');\n const buttons = [\n { text: this._translate._('COMMON.DELETE'), handler: doDelete },\n { text: this._translate._('IDEA_AGENDA.CALENDARS.LINK'), handler: doLink }\n ];\n const alert = await this._alert.create({ header, message, buttons });\n alert.present();\n }\n }\n}\n","@if (calendar) {\n <ion-item\n class=\"calendarItem\"\n [button]=\"!disabled\"\n [title]=\"'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate\"\n (click)=\"calendar.external && !calendar.external.calendarId ? linkExtCalendarOrDelete() : manageCalendar()\"\n >\n @if (!hideColor) {\n <ion-avatar slot=\"start\" class=\"colorCircle\" [style.background-color]=\"calendar.color\" />\n }\n <ion-label>\n {{ calendar.name }}\n <p>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-text color=\"danger\">\n {{ 'IDEA_AGENDA.CALENDARS.TAP_TO_CONFIGURE' | translate }}\n </ion-text>\n }\n {{ calendar.description }}\n </p>\n </ion-label>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-icon\n slot=\"end\"\n color=\"danger\"\n name=\"flash-off\"\n [title]=\"'IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED_HINT' | translate\"\n />\n }\n @if (calendar.external?.service) {\n <ion-icon\n slot=\"end\"\n [name]=\"calendars.getServiceIcon(calendar.external.service)\"\n [title]=\"\n ('IDEA_AGENDA.CALENDARS.LINKED_TO' | translate) +\n ' ' +\n ('IDEA_AGENDA.CALENDARS.SERVICES.' + calendar.external.service | translate)\n \"\n />\n }\n </ion-item>\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\nimport { Calendar, ExternalCalendarInfo, ExternalCalendarSources, Membership } from 'idea-toolbox';\nimport { IDEALoadingService, IDEATinCanService, IDEAMessageService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEACalendarsService } from './calendars.service';\n\n@Component({\n selector: 'idea-calendar-creation',\n templateUrl: 'calendarCreation.component.html',\n styleUrls: ['calendarCreation.component.scss']\n})\nexport class IDEACalendarCreationComponent implements OnInit {\n private _calendars = inject(IDEACalendarsService);\n private _modal = inject(ModalController);\n private _tc = inject(IDEATinCanService);\n private _loading = inject(IDEALoadingService);\n private _message = inject(IDEAMessageService);\n private _translate = inject(IDEATranslationsService);\n\n /**\n * Whether we want to allow the creation of only a particular type of calendar, based on the scope.\n */\n @Input() fixScope: CalendarScopes;\n /**\n * Whether we want to allow the creation of local calendars.\n */\n @Input() onlyExternalCalendars: boolean;\n\n membership: Membership;\n calendar: Calendar;\n DEFAULT_COLOR = '#555';\n SOURCES = Object.keys(ExternalCalendarSources);\n\n ngOnInit(): void {\n this.calendar = new Calendar();\n this.membership = this._tc.get('membership');\n if (this.fixScope === CalendarScopes.SHARED) this.calendar.teamId = this.membership.teamId;\n if (this.fixScope === CalendarScopes.PRIVATE) this.calendar.userId = this.membership.userId;\n }\n\n resetScope(): void {\n if (this.canChangeScope()) this.calendar.teamId = this.calendar.userId = null;\n }\n canChangeScope(): boolean {\n return !this.fixScope && this.scopeIsSet();\n }\n scopeIsSet(): boolean {\n return Boolean(this.calendar.userId) || Boolean(this.calendar.teamId);\n }\n\n async saveNewCalendar(service?: ExternalCalendarSources): Promise<void> {\n if (!this.scopeIsSet()) return;\n if (!service && this.onlyExternalCalendars) return;\n if (service) {\n this.calendar.external = new ExternalCalendarInfo({ service });\n this.calendar.name = '-'; // it will be substituted with the external name\n } else {\n this.calendar.name = this.calendar.userId\n ? this._translate._('IDEA_AGENDA.CALENDARS.DEFAULT_PERSONAL_CALENDAR_NAME')\n : this._translate._('IDEA_AGENDA.CALENDARS.DEFAULT_TEAM_CALENDAR_NAME');\n this.calendar.color = this.DEFAULT_COLOR;\n }\n try {\n await this._loading.show();\n const cal = await this._calendars.postCalendar(this.calendar);\n this.calendar.load(cal);\n this._message.success('IDEA_AGENDA.CALENDARS.CALENDAR_CREATED');\n if (!cal.external) {\n this._modal.dismiss(this.calendar);\n return;\n }\n try {\n await this._calendars.linkExtService(this.calendar);\n const res = await this._calendars.chooseAndSetExternalCalendar(this.calendar);\n if (!res) {\n this._modal.dismiss(this.calendar);\n return;\n }\n this.calendar.load(res);\n await this._loading.show(this._translate._('IDEA_AGENDA.CALENDARS.FIRST_SYNC_MAY_TAKE_A_WHILE'));\n try {\n await this._calendars.syncCalendar(this.calendar);\n this._message.success('IDEA_AGENDA.CALENDARS.FIRST_SYNC_COMPLETED');\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n } finally {\n this._modal.dismiss(this.calendar);\n }\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n this._modal.dismiss(this.calendar);\n }\n } catch (error) {\n this._message.error('COMMON.OPERATION_FAILED');\n } finally {\n this._loading.hide();\n }\n }\n\n close(): void {\n this._modal.dismiss();\n }\n}\n\n/**\n * The possible scopes of the calendar.\n */\nexport enum CalendarScopes {\n SHARED = 'shared', // teamId\n PRIVATE = 'private' // userId\n}\n","<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n @if (!canChangeScope()) {\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n }\n @if (canChangeScope()) {\n <ion-button (click)=\"resetScope()\">\n <ion-icon name=\"arrow-back\" slot=\"icon-only\" />\n </ion-button>\n }\n </ion-buttons>\n <ion-title>\n @if (!scopeIsSet()) {\n <span>{{ 'IDEA_AGENDA.CALENDARS.ADD_A_CALENDAR' | translate }}</span>\n }\n @if (calendar.userId) {\n <span>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</span>\n }\n @if (calendar.teamId) {\n <span>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate: { team: tc.get('team').name } }}\n </span>\n }\n </ion-title>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <!-- 1st STEP -->\n @if (!scopeIsSet()) {\n <ion-grid class=\"ion-padding choiceGrid\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.CREATE_PRIVATE_OR_TEAM' | translate }}</h1>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.userId = membership.userId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"person\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.teamId = membership.teamId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"people\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n }\n <!-- 2nd STEP -->\n @if (scopeIsSet()) {\n <ion-grid class=\"ion-padding choiceGrid\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK_HINT' | translate }}</p>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n @if (!onlyExternalCalendars) {\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar()\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"remove\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n @for (s of SOURCES; track s) {\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar(s)\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon [name]=\"calendars.getServiceIcon(s)\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>\n {{ 'IDEA_AGENDA.CALENDARS.LINK_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + s | translate }}\n </h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.LINK_TO_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n }\n</ion-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\n\nimport { CalendarDateFormatter, CalendarModule, DateAdapter } from 'angular-calendar';\nimport { adapterFactory } from 'angular-calendar/date-adapters/date-fns';\nimport { CustomDateFormatter } from './dateFormatter.provider';\n\nimport {\n IDEATranslationsModule,\n IDEAColorPickerModule,\n IDEACheckerModule,\n IDEAUserAvatarModule\n} from '@idea-ionic/common';\n\nimport { IDEAAgendaComponent } from './agenda.component';\nimport { IDEACalendarComponent } from './calendar.component';\nimport { IDEACalendarItemComponent } from './calendarItem.component';\nimport { IDEACalendarCreationComponent } from './calendarCreation.component';\n\nimport { IDEACalendarsService } from './calendars.service';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n IonicModule,\n IDEATranslationsModule,\n IDEAColorPickerModule,\n IDEACheckerModule,\n IDEAUserAvatarModule,\n CalendarModule.forRoot({ provide: DateAdapter, useFactory: adapterFactory })\n ],\n declarations: [IDEAAgendaComponent, IDEACalendarComponent, IDEACalendarItemComponent, IDEACalendarCreationComponent],\n exports: [IDEAAgendaComponent, IDEACalendarComponent, IDEACalendarItemComponent, IDEACalendarCreationComponent],\n providers: [{ provide: CalendarDateFormatter, useClass: CustomDateFormatter }, IDEACalendarsService]\n})\nexport class IDEAAgendaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idea-ionic/agenda",
3
- "version": "8.0.6",
3
+ "version": "8.0.8",
4
4
  "description": "IDEA Ionic agenda (calendar)",
5
5
  "license": "MPL-2.0",
6
6
  "author": "ITER IDEA <info@iter-idea.com> (https://iter-idea.com)",
@@ -5,6 +5,9 @@ import { CalendarEvent, CalendarEventTimesChangedEvent, CalendarMonthViewBeforeR
5
5
  import { IDEATranslationsService } from '@idea-ionic/common';
6
6
  import * as i0 from "@angular/core";
7
7
  export declare class IDEAAgendaComponent implements OnInit {
8
+ private _cdr;
9
+ private _platform;
10
+ _translate: IDEATranslationsService;
8
11
  /**
9
12
  * The events to display in the calendar.
10
13
  */
@@ -103,9 +106,6 @@ export declare class IDEAAgendaComponent implements OnInit {
103
106
  */
104
107
  weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;
105
108
  darkMode: boolean;
106
- private _cdr;
107
- private _platform;
108
- _translate: IDEATranslationsService;
109
109
  ngOnInit(): void;
110
110
  isMobile(): boolean;
111
111
  /**
@@ -2,6 +2,14 @@ import { OnInit } from '@angular/core';
2
2
  import { Calendar, Check, Membership } from 'idea-toolbox';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class IDEACalendarComponent implements OnInit {
5
+ private _calendars;
6
+ private _modal;
7
+ private _alert;
8
+ private _tc;
9
+ private _loading;
10
+ private _message;
11
+ private _API;
12
+ private _translate;
5
13
  /**
6
14
  * The calendar to manage.
7
15
  */
@@ -19,14 +27,6 @@ export declare class IDEACalendarComponent implements OnInit {
19
27
  membership: Membership;
20
28
  errors: Set<string>;
21
29
  DEFAULT_COLOR: string;
22
- private _calendars;
23
- private _modal;
24
- private _alert;
25
- private _tc;
26
- private _loading;
27
- private _message;
28
- private _API;
29
- private _translate;
30
30
  ngOnInit(): Promise<void>;
31
31
  hasFieldAnError(field: string): boolean;
32
32
  save(): Promise<void>;
@@ -2,6 +2,12 @@ import { OnInit } from '@angular/core';
2
2
  import { Calendar, ExternalCalendarSources, Membership } from 'idea-toolbox';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class IDEACalendarCreationComponent implements OnInit {
5
+ private _calendars;
6
+ private _modal;
7
+ private _tc;
8
+ private _loading;
9
+ private _message;
10
+ private _translate;
5
11
  /**
6
12
  * Whether we want to allow the creation of only a particular type of calendar, based on the scope.
7
13
  */
@@ -14,12 +20,6 @@ export declare class IDEACalendarCreationComponent implements OnInit {
14
20
  calendar: Calendar;
15
21
  DEFAULT_COLOR: string;
16
22
  SOURCES: string[];
17
- private _calendars;
18
- private _modal;
19
- private _tc;
20
- private _loading;
21
- private _message;
22
- private _translate;
23
23
  ngOnInit(): void;
24
24
  resetScope(): void;
25
25
  canChangeScope(): boolean;
@@ -2,6 +2,12 @@ import { EventEmitter } from '@angular/core';
2
2
  import { Calendar } from 'idea-toolbox';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class IDEACalendarItemComponent {
5
+ private _alert;
6
+ private _modal;
7
+ private _message;
8
+ private _loading;
9
+ private _translate;
10
+ private _calendars;
5
11
  /**
6
12
  * The calendar to show.
7
13
  */
@@ -22,12 +28,6 @@ export declare class IDEACalendarItemComponent {
22
28
  * Report to parent components a change.
23
29
  */
24
30
  somethingChanged: EventEmitter<Calendar>;
25
- private _alert;
26
- private _modal;
27
- private _message;
28
- private _loading;
29
- private _translate;
30
- private _calendars;
31
31
  manageCalendar(): Promise<void>;
32
32
  private linkExtCalendarOrDelete;
33
33
  static ɵfac: i0.ɵɵFactoryDeclaration<IDEACalendarItemComponent, never>;