@sumaris-net/ngx-components 18.21.13 → 18.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/doc/changelog.md CHANGED
@@ -1969,3 +1969,9 @@ enh: Environment: add useHash property to configure Angular router to use hash U
1969
1969
 
1970
1970
  # 18.21.13
1971
1971
  - fix(menu) set display on ion-item when has specific rules applied (e.g hidden-xs...)
1972
+
1973
+ # 18.21.14
1974
+ - fix(menu) Hide menu footer (about) on mobile device
1975
+
1976
+ # 18.22.0
1977
+ - enh(EntityFilter) Add logical combinators functions: `or()`, `and()` and `not()`
@@ -22,9 +22,13 @@ let PersonFilter = class PersonFilter extends EntityFilter {
22
22
  'additionalFields',
23
23
  ];
24
24
  static fromObject;
25
- static searchFilter(source) {
26
- return source && PersonFilter_1.fromObject(source).asFilterFn();
25
+ static asFilterFn(source) {
26
+ return PersonFilter_1.fromObject(source)?.asFilterFn();
27
27
  }
28
+ /**
29
+ * @deprecated Use `PersonFilter.asFilterFn` instead
30
+ */
31
+ static searchFilter = PersonFilter_1.asFilterFn;
28
32
  email;
29
33
  pubkey;
30
34
  searchText;
@@ -150,4 +154,4 @@ export class AdditionalFields {
150
154
  return target;
151
155
  }
152
156
  }
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLmZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvYWRtaW4vdXNlcnMvcGVyc29uLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFdEUsT0FBTyxFQUF5QixXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU1RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc3RixXQUFXO0FBRUosSUFBTSxZQUFZLEdBQWxCLE1BQU0sWUFBYSxTQUFRLFlBQWtDOztJQUNsRSxNQUFNLENBQUMsTUFBTSxHQUEyQjtRQUN0QyxZQUFZO1FBQ1osSUFBSTtRQUNKLFlBQVk7UUFDWixPQUFPO1FBQ1AsUUFBUTtRQUNSLFlBQVk7UUFDWixXQUFXO1FBQ1gsY0FBYztRQUNkLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLGtCQUFrQjtLQUNuQixDQUFDO0lBRUYsTUFBTSxDQUFDLFVBQVUsQ0FBdUM7SUFFeEQsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFXO1FBQzdCLE9BQU8sTUFBTSxJQUFJLGNBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVELEtBQUssQ0FBUztJQUNkLE1BQU0sQ0FBUztJQUNmLFVBQVUsQ0FBUztJQUNuQixTQUFTLENBQVc7SUFDcEIsWUFBWSxDQUFXO0lBQ3ZCLFdBQVcsQ0FBVztJQUN0QixXQUFXLENBQVc7SUFDdEIsZUFBZSxDQUFTO0lBQ3hCLGdCQUFnQixDQUFXO0lBQzNCLGdCQUFnQixDQUFtQjtJQUVuQztRQUNFLEtBQUssQ0FBQyxjQUFZ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QUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eUNsYXNzIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkuZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBFbnRpdHlGaWx0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBQZXJzb24gfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL3BlcnNvbi5tb2RlbCc7XG5pbXBvcnQgeyBFbnRpdHlBc09iamVjdE9wdGlvbnMsIEVudGl0eVV0aWxzIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgU3RvcmVPYmplY3QgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7IGdldFByb3BlcnR5QnlQYXRoLCBpc05pbCwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRmlsdGVyRm4gfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuXG4vLyBAZHluYW1pY1xuQEVudGl0eUNsYXNzKHsgdHlwZW5hbWU6ICdQZXJzb25GaWx0ZXJWTycgfSlcbmV4cG9ydCBjbGFzcyBQZXJzb25GaWx0ZXIgZXh0ZW5kcyBFbnRpdHlGaWx0ZXI8UGVyc29uRmlsdGVyLCBQZXJzb24+IHtcbiAgc3RhdGljIEZJRUxEUzogKGtleW9mIFBlcnNvbkZpbHRlcilbXSA9IFtcbiAgICAnX190eXBlbmFtZScsXG4gICAgJ2lkJyxcbiAgICAndXBkYXRlRGF0ZScsXG4gICAgJ2VtYWlsJyxcbiAgICAncHVia2V5JyxcbiAgICAnc2VhcmNoVGV4dCcsXG4gICAgJ3N0YXR1c0lkcycsXG4gICAgJ3VzZXJQcm9maWxlcycsXG4gICAgJ2V4Y2x1ZGVkSWRzJyxcbiAgICAnc2VhcmNoQXR0cmlidXRlJyxcbiAgICAnc2VhcmNoQXR0cmlidXRlcycsXG4gICAgJ2FkZGl0aW9uYWxGaWVsZHMnLFxuICBdO1xuXG4gIHN0YXRpYyBmcm9tT2JqZWN0OiAoc291cmNlLCBvcHRzPzogYW55KSA9PiBQZXJzb25GaWx0ZXI7XG5cbiAgc3RhdGljIHNlYXJjaEZpbHRlcihzb3VyY2U6IGFueSk6IEZpbHRlckZuPFBlcnNvbj4ge1xuICAgIHJldHVybiBzb3VyY2UgJiYgUGVyc29uRmlsdGVyLmZyb21PYmplY3Qoc291cmNlKS5hc0ZpbHRlckZuKCk7XG4gIH1cblxuICBlbWFpbDogc3RyaW5nO1xuICBwdWJrZXk6IHN0cmluZztcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBzdGF0dXNJZHM6IG51bWJlcltdO1xuICB1c2VyUHJvZmlsZXM6IHN0cmluZ1tdO1xuICBpbmNsdWRlZElkczogbnVtYmVyW107XG4gIGV4Y2x1ZGVkSWRzOiBudW1iZXJbXTtcbiAgc2VhcmNoQXR0cmlidXRlOiBzdHJpbmc7XG4gIHNlYXJjaEF0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICBhZGRpdGlvbmFsRmllbGRzOiBBZGRpdGlvbmFsRmllbGRzO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFBlcnNvbkZpbHRlci5UWVBFTkFNRSk7XG4gIH1cblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55LCBvcHRzPzogRW50aXR5QXNPYmplY3RPcHRpb25zKSB7XG4gICAgc3VwZXIuZnJvbU9iamVjdChzb3VyY2UsIG9wdHMpO1xuICAgIHRoaXMuZW1haWwgPSBzb3VyY2UuZW1haWw7XG4gICAgdGhpcy5wdWJrZXkgPSBzb3VyY2UucHVia2V5O1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHNvdXJjZS5zZWFyY2hUZXh0O1xuICAgIHRoaXMuc3RhdHVzSWRzID0gc291cmNlLnN0YXR1c0lkcyB8fCAoaXNOb3ROaWwoc291cmNlLnN0YXR1c0lkKSA/IFtzb3VyY2Uuc3RhdHVzSWRdIDogdW5kZWZpbmVkKTtcbiAgICB0aGlzLnVzZXJQcm9maWxlcyA9IHNvdXJjZS51c2VyUHJvZmlsZXM7XG4gICAgdGhpcy5leGNsdWRlZElkcyA9IHNvdXJjZS5leGNsdWRlZElkcztcbiAgICB0aGlzLnNlYXJjaEF0dHJpYnV0ZSA9IHNvdXJjZS5zZWFyY2hBdHRyaWJ1dGU7XG4gICAgdGhpcy5zZWFyY2hBdHRyaWJ1dGVzID0gc291cmNlLnNlYXJjaEF0dHJpYnV0ZXM7XG5cbiAgICAvLyBFeHRyYWN0IGFkZGl0aW9uYWwgZmllbGRzXG4gICAgdGhpcy5hZGRpdGlvbmFsRmllbGRzID0gQWRkaXRpb25hbEZpZWxkcy5mcm9tT2JqZWN0KHNvdXJjZSwgb3B0cyk7XG4gIH1cblxuICBhc09iamVjdChvcHRzPzogRW50aXR5QXNPYmplY3RPcHRpb25zKTogU3RvcmVPYmplY3Qge1xuICAgIGNvbnN0IHRhcmdldCA9IHN1cGVyLmFzT2JqZWN0KG9wdHMpO1xuICAgIHRhcmdldC5lbWFpbCA9IHRoaXMuZW1haWw7XG4gICAgdGFyZ2V0LnB1YmtleSA9IHRoaXMucHVia2V5O1xuICAgIHRhcmdldC5zZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hUZXh0O1xuICAgIHRhcmdldC5zdGF0dXNJZHMgPSB0aGlzLnN0YXR1c0lkcztcbiAgICB0YXJnZXQudXNlclByb2ZpbGVzID0gdGhpcy51c2VyUHJvZmlsZXM7XG4gICAgdGFyZ2V0LmV4Y2x1ZGVkSWRzID0gdGhpcy5leGNsdWRlZElkcztcbiAgICB0YXJnZXQuc2VhcmNoQXR0cmlidXRlID0gdGhpcy5zZWFyY2hBdHRyaWJ1dGU7XG4gICAgdGFyZ2V0LnNlYXJjaEF0dHJpYnV0ZXMgPSB0aGlzLnNlYXJjaEF0dHJpYnV0ZXM7XG4gICAgQWRkaXRpb25hbEZpZWxkcy5hc09iamVjdCh0aGlzLmFkZGl0aW9uYWxGaWVsZHMsIHRhcmdldCwgb3B0cyk7XG4gICAgZGVsZXRlIHRhcmdldC5hZGRpdGlvbmFsRmllbGRzO1xuXG4gICAgaWYgKG9wdHM/Lm1pbmlmeSkge1xuICAgICAgdGFyZ2V0LnVzZXJQcm9maWxlcyA9IEFycmF5LmlzQXJyYXkodGFyZ2V0LnVzZXJQcm9maWxlcykgPyB0YXJnZXQudXNlclByb2ZpbGVzPy5tYXAoKHVwKSA9PiB1cD8ubGFiZWwgPz8gdXApIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGJ1aWxkRmlsdGVyKCk6IEZpbHRlckZuPFBlcnNvbj5bXSB7XG4gICAgY29uc3QgZmlsdGVyRm5zID0gc3VwZXIuYnVpbGRGaWx0ZXIoKTtcblxuICAgIC8vIEZpbHRlciBieSBzdGF0dXNcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KHRoaXMuc3RhdHVzSWRzKSkge1xuICAgICAgZmlsdGVyRm5zLnB1c2goKGUpID0+IHRoaXMuc3RhdHVzSWRzLmluY2x1ZGVzKGUuc3RhdHVzSWQpKTtcbiAgICB9XG5cbiAgICAvLyBGaWx0ZXIgaW5jbHVkZWQgaWRzXG4gICAgY29uc3QgaW5jbHVkZWRJZHMgPSB0aGlzLmluY2x1ZGVkSWRzO1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoaW5jbHVkZWRJZHMpKSB7XG4gICAgICBmaWx0ZXJGbnMucHVzaCgoZSkgPT4gaXNOb3ROaWwoZS5pZCkgJiYgaW5jbHVkZWRJZHMuaW5jbHVkZXMoZS5pZCkpO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBleGNsdWRlZCBpZHNcbiAgICBjb25zdCBleGNsdWRlZElkcyA9IHRoaXMuZXhjbHVkZWRJZHM7XG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShleGNsdWRlZElkcykpIHtcbiAgICAgIGZpbHRlckZucy5wdXNoKChlKSA9PiBpc05pbChlLmlkKSB8fCAhZXhjbHVkZWRJZHMuaW5jbHVkZXMoZS5pZCkpO1xuICAgIH1cblxuICAgIC8vIFNlYXJjaCB0ZXh0XG4gICAgY29uc3Qgc2VhcmNoVGV4dEZpbHRlciA9IEVudGl0eVV0aWxzLnNlYXJjaFRleHRGaWx0ZXIoXG4gICAgICB0aGlzLnNlYXJjaEF0dHJpYnV0ZSB8fCB0aGlzLnNlYXJjaEF0dHJpYnV0ZXMgfHwgWydsYXN0TmFtZScsICdmaXJzdE5hbWUnLCAnZGVwYXJ0bWVudC5uYW1lJ10sXG4gICAgICB0aGlzLnNlYXJjaFRleHRcbiAgICApO1xuICAgIGlmIChzZWFyY2hUZXh0RmlsdGVyKSBmaWx0ZXJGbnMucHVzaChzZWFyY2hUZXh0RmlsdGVyKTtcblxuICAgIC8vIEZpbHRlciBieSBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGlmICh0aGlzLmFkZGl0aW9uYWxGaWVsZHMpIHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuYWRkaXRpb25hbEZpZWxkcykuZm9yRWFjaCgoZmllbGRLZXkpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuYWRkaXRpb25hbEZpZWxkc1tmaWVsZEtleV07XG4gICAgICAgIGlmIChpc05vdE5pbChmaWVsZFZhbHVlKSkge1xuICAgICAgICAgIGZpbHRlckZucy5wdXNoKChwZXJzb246IFBlcnNvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGVyc29uVmFsdWUgPSBnZXRQcm9wZXJ0eUJ5UGF0aChwZXJzb24sIGZpZWxkS2V5KTtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgdmFsdWUgdHlwZXMgKHN0cmluZywgb2JqZWN0IHdpdGggaWQsIGFycmF5LCBldGMuKVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9uIC0gY2hlY2sgaWYgcGVyc29uIHZhbHVlIG1hdGNoZXMgYW55IHNlbGVjdGVkIHZhbHVlXG4gICAgICAgICAgICAgIHJldHVybiBmaWVsZFZhbHVlLnNvbWUoKHNlbGVjdGVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZElkID0gc2VsZWN0ZWRWYWx1ZT8uaWQgPz8gc2VsZWN0ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJzb25JZCA9IHBlcnNvblZhbHVlPy5pZCA/PyBwZXJzb25WYWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRJZCA9PT0gcGVyc29uSWQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gU2luZ2xlIHZhbHVlIC0gZGlyZWN0IGNvbXBhcmlzb25cbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZCA9IGZpZWxkVmFsdWU/LmlkID8/IGZpZWxkVmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IHBlcnNvbklkID0gcGVyc29uVmFsdWU/LmlkID8/IHBlcnNvblZhbHVlO1xuICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRJZCA9PT0gcGVyc29uSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXJGbnM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZGl0aW9uYWxGaWVsZHMge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgc3RhdGljIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAoIXNvdXJjZSB8fCAhKHR5cGVvZiBzb3VyY2UgPT0gJ29iamVjdCcpKSByZXR1cm47XG4gICAgcmV0dXJuIChcbiAgICAgIE9iamVjdC5rZXlzKHNvdXJjZSlcbiAgICAgICAgLy8gRXhjbHVkZSBjb21tb24gZmllbGRzLCBmcm9tIFBlcnNvbkZpbHRlclxuICAgICAgICAuZmlsdGVyKChrZXkpID0+ICFQZXJzb25GaWx0ZXIuRklFTERTLmluY2x1ZGVzKGtleSBhcyBrZXlvZiBQZXJzb25GaWx0ZXIpKVxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICh0YXJnZXQsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzTmlsKHNvdXJjZVtrZXldKSkgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldCB8fCB7fTtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdW5kZWZpbmVkIGFzIHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgYXNPYmplY3Qoc291cmNlOiBhbnksIHRhcmdldDogYW55ID0ge30sIG9wdHM/OiBFbnRpdHlBc09iamVjdE9wdGlvbnMpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAoIXNvdXJjZSB8fCAhKHR5cGVvZiBzb3VyY2UgPT0gJ29iamVjdCcpKSByZXR1cm47XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoKHRhcmdldCwga2V5KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IEVudGl0eVV0aWxzLmFzT2JqZWN0KHNvdXJjZVtrZXldLCBvcHRzKTtcbiAgICAgIGlmIChpc05pbCh2YWx1ZSkpIHJldHVybiB0YXJnZXQ7XG4gICAgICB0YXJnZXQgPSB0YXJnZXQgfHwge307XG4gICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LCB0YXJnZXQpO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cbn1cbiJdfQ==
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLmZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvYWRtaW4vdXNlcnMvcGVyc29uLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFdEUsT0FBTyxFQUF5QixXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU1RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc3RixXQUFXO0FBRUosSUFBTSxZQUFZLEdBQWxCLE1BQU0sWUFBYSxTQUFRLFlBQWtDOztJQUNsRSxNQUFNLENBQUMsTUFBTSxHQUEyQjtRQUN0QyxZQUFZO1FBQ1osSUFBSTtRQUNKLFlBQVk7UUFDWixPQUFPO1FBQ1AsUUFBUTtRQUNSLFlBQVk7UUFDWixXQUFXO1FBQ1gsY0FBYztRQUNkLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLGtCQUFrQjtLQUNuQixDQUFDO0lBRUYsTUFBTSxDQUFDLFVBQVUsQ0FBdUM7SUFFeEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFXO1FBQzNCLE9BQU8sY0FBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsWUFBWSxHQUFHLGNBQVksQ0FBQyxVQUFVLENBQUM7SUFFOUMsS0FBSyxDQUFTO0lBQ2QsTUFBTSxDQUFTO0lBQ2YsVUFBVSxDQUFTO0lBQ25CLFNBQVMsQ0FBVztJQUNwQixZQUFZLENBQVc7SUFDdkIsV0FBVyxDQUFXO0lBQ3RCLFdBQVcsQ0FBVztJQUN0QixlQUFlLENBQVM7SUFDeEIsZ0JBQWdCLENB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UUFDaEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ1gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5Q2xhc3MgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5kZWNvcmF0b3JzJztcbmltcG9ydCB7IEVudGl0eUZpbHRlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvZmlsdGVyLm1vZGVsJztcbmltcG9ydCB7IFBlcnNvbiB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvcGVyc29uLm1vZGVsJztcbmltcG9ydCB7IEVudGl0eUFzT2JqZWN0T3B0aW9ucywgRW50aXR5VXRpbHMgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBTdG9yZU9iamVjdCB9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgZ2V0UHJvcGVydHlCeVBhdGgsIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBGaWx0ZXJGbiB9IGZyb20gJy4uLy4uL3NoYXJlZC90eXBlcyc7XG5cbi8vIEBkeW5hbWljXG5ARW50aXR5Q2xhc3MoeyB0eXBlbmFtZTogJ1BlcnNvbkZpbHRlclZPJyB9KVxuZXhwb3J0IGNsYXNzIFBlcnNvbkZpbHRlciBleHRlbmRzIEVudGl0eUZpbHRlcjxQZXJzb25GaWx0ZXIsIFBlcnNvbj4ge1xuICBzdGF0aWMgRklFTERTOiAoa2V5b2YgUGVyc29uRmlsdGVyKVtdID0gW1xuICAgICdfX3R5cGVuYW1lJyxcbiAgICAnaWQnLFxuICAgICd1cGRhdGVEYXRlJyxcbiAgICAnZW1haWwnLFxuICAgICdwdWJrZXknLFxuICAgICdzZWFyY2hUZXh0JyxcbiAgICAnc3RhdHVzSWRzJyxcbiAgICAndXNlclByb2ZpbGVzJyxcbiAgICAnZXhjbHVkZWRJZHMnLFxuICAgICdzZWFyY2hBdHRyaWJ1dGUnLFxuICAgICdzZWFyY2hBdHRyaWJ1dGVzJyxcbiAgICAnYWRkaXRpb25hbEZpZWxkcycsXG4gIF07XG5cbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2UsIG9wdHM/OiBhbnkpID0+IFBlcnNvbkZpbHRlcjtcblxuICBzdGF0aWMgYXNGaWx0ZXJGbihzb3VyY2U6IGFueSk6IEZpbHRlckZuPFBlcnNvbj4ge1xuICAgIHJldHVybiBQZXJzb25GaWx0ZXIuZnJvbU9iamVjdChzb3VyY2UpPy5hc0ZpbHRlckZuKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBQZXJzb25GaWx0ZXIuYXNGaWx0ZXJGbmAgaW5zdGVhZFxuICAgKi9cbiAgc3RhdGljIHNlYXJjaEZpbHRlciA9IFBlcnNvbkZpbHRlci5hc0ZpbHRlckZuO1xuXG4gIGVtYWlsOiBzdHJpbmc7XG4gIHB1YmtleTogc3RyaW5nO1xuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIHN0YXR1c0lkczogbnVtYmVyW107XG4gIHVzZXJQcm9maWxlczogc3RyaW5nW107XG4gIGluY2x1ZGVkSWRzOiBudW1iZXJbXTtcbiAgZXhjbHVkZWRJZHM6IG51bWJlcltdO1xuICBzZWFyY2hBdHRyaWJ1dGU6IHN0cmluZztcbiAgc2VhcmNoQXR0cmlidXRlczogc3RyaW5nW107XG4gIGFkZGl0aW9uYWxGaWVsZHM6IEFkZGl0aW9uYWxGaWVsZHM7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoUGVyc29uRmlsdGVyLlRZUEVOQU1FKTtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBFbnRpdHlBc09iamVjdE9wdGlvbnMpIHtcbiAgICBzdXBlci5mcm9tT2JqZWN0KHNvdXJjZSwgb3B0cyk7XG4gICAgdGhpcy5lbWFpbCA9IHNvdXJjZS5lbWFpbDtcbiAgICB0aGlzLnB1YmtleSA9IHNvdXJjZS5wdWJrZXk7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gc291cmNlLnNlYXJjaFRleHQ7XG4gICAgdGhpcy5zdGF0dXNJZHMgPSBzb3VyY2Uuc3RhdHVzSWRzIHx8IChpc05vdE5pbChzb3VyY2Uuc3RhdHVzSWQpID8gW3NvdXJjZS5zdGF0dXNJZF0gOiB1bmRlZmluZWQpO1xuICAgIHRoaXMudXNlclByb2ZpbGVzID0gc291cmNlLnVzZXJQcm9maWxlcztcbiAgICB0aGlzLmV4Y2x1ZGVkSWRzID0gc291cmNlLmV4Y2x1ZGVkSWRzO1xuICAgIHRoaXMuc2VhcmNoQXR0cmlidXRlID0gc291cmNlLnNlYXJjaEF0dHJpYnV0ZTtcbiAgICB0aGlzLnNlYXJjaEF0dHJpYnV0ZXMgPSBzb3VyY2Uuc2VhcmNoQXR0cmlidXRlcztcblxuICAgIC8vIEV4dHJhY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICB0aGlzLmFkZGl0aW9uYWxGaWVsZHMgPSBBZGRpdGlvbmFsRmllbGRzLmZyb21PYmplY3Qoc291cmNlLCBvcHRzKTtcbiAgfVxuXG4gIGFzT2JqZWN0KG9wdHM/OiBFbnRpdHlBc09iamVjdE9wdGlvbnMpOiBTdG9yZU9iamVjdCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc3VwZXIuYXNPYmplY3Qob3B0cyk7XG4gICAgdGFyZ2V0LmVtYWlsID0gdGhpcy5lbWFpbDtcbiAgICB0YXJnZXQucHVia2V5ID0gdGhpcy5wdWJrZXk7XG4gICAgdGFyZ2V0LnNlYXJjaFRleHQgPSB0aGlzLnNlYXJjaFRleHQ7XG4gICAgdGFyZ2V0LnN0YXR1c0lkcyA9IHRoaXMuc3RhdHVzSWRzO1xuICAgIHRhcmdldC51c2VyUHJvZmlsZXMgPSB0aGlzLnVzZXJQcm9maWxlcztcbiAgICB0YXJnZXQuZXhjbHVkZWRJZHMgPSB0aGlzLmV4Y2x1ZGVkSWRzO1xuICAgIHRhcmdldC5zZWFyY2hBdHRyaWJ1dGUgPSB0aGlzLnNlYXJjaEF0dHJpYnV0ZTtcbiAgICB0YXJnZXQuc2VhcmNoQXR0cmlidXRlcyA9IHRoaXMuc2VhcmNoQXR0cmlidXRlcztcbiAgICBBZGRpdGlvbmFsRmllbGRzLmFzT2JqZWN0KHRoaXMuYWRkaXRpb25hbEZpZWxkcywgdGFyZ2V0LCBvcHRzKTtcbiAgICBkZWxldGUgdGFyZ2V0LmFkZGl0aW9uYWxGaWVsZHM7XG5cbiAgICBpZiAob3B0cz8ubWluaWZ5KSB7XG4gICAgICB0YXJnZXQudXNlclByb2ZpbGVzID0gQXJyYXkuaXNBcnJheSh0YXJnZXQudXNlclByb2ZpbGVzKSA/IHRhcmdldC51c2VyUHJvZmlsZXM/Lm1hcCgodXApID0+IHVwPy5sYWJlbCA/PyB1cCkgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRGaWx0ZXIoKTogRmlsdGVyRm48UGVyc29uPltdIHtcbiAgICBjb25zdCBmaWx0ZXJGbnMgPSBzdXBlci5idWlsZEZpbHRlcigpO1xuXG4gICAgLy8gRmlsdGVyIGJ5IHN0YXR1c1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkodGhpcy5zdGF0dXNJZHMpKSB7XG4gICAgICBmaWx0ZXJGbnMucHVzaCgoZSkgPT4gdGhpcy5zdGF0dXNJZHMuaW5jbHVkZXMoZS5zdGF0dXNJZCkpO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBpbmNsdWRlZCBpZHNcbiAgICBjb25zdCBpbmNsdWRlZElkcyA9IHRoaXMuaW5jbHVkZWRJZHM7XG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShpbmNsdWRlZElkcykpIHtcbiAgICAgIGZpbHRlckZucy5wdXNoKChlKSA9PiBpc05vdE5pbChlLmlkKSAmJiBpbmNsdWRlZElkcy5pbmNsdWRlcyhlLmlkKSk7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIGV4Y2x1ZGVkIGlkc1xuICAgIGNvbnN0IGV4Y2x1ZGVkSWRzID0gdGhpcy5leGNsdWRlZElkcztcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGV4Y2x1ZGVkSWRzKSkge1xuICAgICAgZmlsdGVyRm5zLnB1c2goKGUpID0+IGlzTmlsKGUuaWQpIHx8ICFleGNsdWRlZElkcy5pbmNsdWRlcyhlLmlkKSk7XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIHRleHRcbiAgICBjb25zdCBzZWFyY2hUZXh0RmlsdGVyID0gRW50aXR5VXRpbHMuc2VhcmNoVGV4dEZpbHRlcihcbiAgICAgIHRoaXMuc2VhcmNoQXR0cmlidXRlIHx8IHRoaXMuc2VhcmNoQXR0cmlidXRlcyB8fCBbJ2xhc3ROYW1lJywgJ2ZpcnN0TmFtZScsICdkZXBhcnRtZW50Lm5hbWUnXSxcbiAgICAgIHRoaXMuc2VhcmNoVGV4dFxuICAgICk7XG4gICAgaWYgKHNlYXJjaFRleHRGaWx0ZXIpIGZpbHRlckZucy5wdXNoKHNlYXJjaFRleHRGaWx0ZXIpO1xuXG4gICAgLy8gRmlsdGVyIGJ5IGFkZGl0aW9uYWwgZmllbGRzXG4gICAgaWYgKHRoaXMuYWRkaXRpb25hbEZpZWxkcykge1xuICAgICAgT2JqZWN0LmtleXModGhpcy5hZGRpdGlvbmFsRmllbGRzKS5mb3JFYWNoKChmaWVsZEtleSkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5hZGRpdGlvbmFsRmllbGRzW2ZpZWxkS2V5XTtcbiAgICAgICAgaWYgKGlzTm90TmlsKGZpZWxkVmFsdWUpKSB7XG4gICAgICAgICAgZmlsdGVyRm5zLnB1c2goKHBlcnNvbjogUGVyc29uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwZXJzb25WYWx1ZSA9IGdldFByb3BlcnR5QnlQYXRoKHBlcnNvbiwgZmllbGRLZXkpO1xuICAgICAgICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCB2YWx1ZSB0eXBlcyAoc3RyaW5nLCBvYmplY3Qgd2l0aCBpZCwgYXJyYXksIGV0Yy4pXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZFZhbHVlKSkge1xuICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBzZWxlY3Rpb24gLSBjaGVjayBpZiBwZXJzb24gdmFsdWUgbWF0Y2hlcyBhbnkgc2VsZWN0ZWQgdmFsdWVcbiAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWUuc29tZSgoc2VsZWN0ZWRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSWQgPSBzZWxlY3RlZFZhbHVlPy5pZCA/PyBzZWxlY3RlZFZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBlcnNvbklkID0gcGVyc29uVmFsdWU/LmlkID8/IHBlcnNvblZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZElkID09PSBwZXJzb25JZDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBTaW5nbGUgdmFsdWUgLSBkaXJlY3QgY29tcGFyaXNvblxuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZElkID0gZmllbGRWYWx1ZT8uaWQgPz8gZmllbGRWYWx1ZTtcbiAgICAgICAgICAgICAgY29uc3QgcGVyc29uSWQgPSBwZXJzb25WYWx1ZT8uaWQgPz8gcGVyc29uVmFsdWU7XG4gICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZElkID09PSBwZXJzb25JZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlckZucztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWRkaXRpb25hbEZpZWxkcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcblxuICBzdGF0aWMgZnJvbU9iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IGFueSk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmICghc291cmNlIHx8ICEodHlwZW9mIHNvdXJjZSA9PSAnb2JqZWN0JykpIHJldHVybjtcbiAgICByZXR1cm4gKFxuICAgICAgT2JqZWN0LmtleXMoc291cmNlKVxuICAgICAgICAvLyBFeGNsdWRlIGNvbW1vbiBmaWVsZHMsIGZyb20gUGVyc29uRmlsdGVyXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4gIVBlcnNvbkZpbHRlci5GSUVMRFMuaW5jbHVkZXMoa2V5IGFzIGtleW9mIFBlcnNvbkZpbHRlcikpXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKHRhcmdldCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNOaWwoc291cmNlW2tleV0pKSByZXR1cm4gdGFyZ2V0O1xuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0IHx8IHt9O1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB1bmRlZmluZWQgYXMgeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBhc09iamVjdChzb3VyY2U6IGFueSwgdGFyZ2V0OiBhbnkgPSB7fSwgb3B0cz86IEVudGl0eUFzT2JqZWN0T3B0aW9ucyk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmICghc291cmNlIHx8ICEodHlwZW9mIHNvdXJjZSA9PSAnb2JqZWN0JykpIHJldHVybjtcbiAgICBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZSgodGFyZ2V0LCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gRW50aXR5VXRpbHMuYXNPYmplY3Qoc291cmNlW2tleV0sIG9wdHMpO1xuICAgICAgaWYgKGlzTmlsKHZhbHVlKSkgcmV0dXJuIHRhcmdldDtcbiAgICAgIHRhcmdldCA9IHRhcmdldCB8fCB7fTtcbiAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sIHRhcmdldCk7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxufVxuIl19
@@ -226,11 +226,11 @@ export class MenuComponent {
226
226
  this.menuService.togglePinned(item);
227
227
  }
228
228
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuComponent, deps: [{ token: i1.AccountService }, { token: i2.NavController }, { token: i2.MenuController }, { token: i2.ModalController }, { token: i3.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i4.MenuService }, { token: i5.Router }, { token: ENVIRONMENT }, { token: i5.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
229
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MenuComponent, selector: "app-menu", inputs: { id: "id", menuId: "menuId", side: "side", contentId: "contentId", logo: "logo", appName: "appName", rxStrategy: "rxStrategy", appVersion: "appVersion" }, viewQueries: [{ propertyName: "splitPane", first: true, predicate: ["splitPane"], descendants: true, static: true }], ngImport: i0, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n <ion-toolbar *ngIf=\"!loading && isLogin; else notLogin\" @fadeInSlowAnimation class=\"user-toolbar\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button\n type=\"button\"\n mat-flat-button\n class=\"user-avatar\"\n [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url(' + (accountAvatar || './assets/img/person.png') + ')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT' | translate\"\n ></button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img\n *ngIf=\"logo; else noLogo\"\n [attr.src]=\"logo\"\n [title]=\"'APP_NAME' | translate: { appName: appName }\"\n alt=\"Logo\"\n width=\"108px\"\n />\n <ng-template #noLogo>\n <span style=\"width: 108px\">{{ appName }}</span>\n </ng-template>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button\n mat-button\n type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT' | translate\"\n >\n <ion-label class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{ accountName }}</b>\n </h3>\n <h4>{{ accountEmail }}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar\n class=\"ion-padding\"\n *ngIf=\"!loading\"\n style=\"height: unset; display: block; margin: auto; text-align: center\"\n >\n <img\n *ngIf=\"logo\"\n [attr.src]=\"logo\"\n [title]=\"'APP_NAME' | translate: { appName: appName }\"\n width=\"150px;\"\n alt=\"logo\"\n />\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{ appName }}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n <!-- will close the menu, after a click, in mobile -->\n <ion-menu-toggle auto-hide=\"false\">\n <ion-list lines=\"none\" *ngIf=\"!loading\">\n <ng-container *rxFor=\"let item of menuService.dataSubject; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: { $implicit: item, level: 0 }\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-menu-toggle>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"menuService.openAboutModal()\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"menuService.openAboutModal()\" color=\"medium\">\n {{ 'MENU.FOOTER_VERSION_ABOUT' | translate: { version: appVersion } }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button\n mat-icon-button\n color=\"accent\"\n (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') | translate\"\n >\n <mat-icon>\n <span>{{ splitPane.when ? '&#xab;' : '&#xbb;' }}</span>\n </mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n </ion-menu>\n\n <ng-content></ng-content>\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n @if (item.divider) {\n <!-- divider -->\n <ion-item-divider class=\"{{ item.cssClass }} {{ item.color }}\" @fadeInSlowAnimation>\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-label *ngIf=\"item.cssClass !== 'flex-spacer'\">\n <span *rxIf=\"item.$title; let title; else: skeletonText\" [innerHTML]=\"title | translate\"></span>\n </ion-label>\n </ion-item-divider>\n } @else if (item.path && !item.action) {\n <!-- tappable link -->\n <ion-item\n @fadeInSlowAnimation\n class=\"{{ item.cssClass }} {{ item.color }}\"\n [class.menu-item-sub]=\"level !== 0\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{\n paths: item.path === '/' || level !== 0 ? 'exact' : 'subset',\n queryParams: item.pathParams?.tab || level === 0 ? 'subset' : 'exact',\n matrixParams: 'exact',\n fragment: 'ignored',\n }\"\n >\n @if (item.icon) {\n <ion-icon slot=\"start\" [name]=\"item.icon\"></ion-icon>\n } @else if (item.matIcon) {\n <mat-icon slot=\"start\">{{ item.matIcon }}</mat-icon>\n }\n <ion-label *rxLet=\"item.$title; let title\">\n <span *ngIf=\"title; else skeletonText\" [innerHTML]=\"title | translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <ion-badge *rxIf=\"item.$badge; let badge\" [color]=\"item.$badgeColor | push\">\n {{badge}}\n </ion-badge>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: { $implicit: item, level: level }\"></ng-container>\n </ion-item>\n } @else if (item.action) {\n <!-- action -->\n <ion-item\n @fadeInSlowAnimation\n class=\"{{ item.cssClass }} {{ item.color }} text-1x\"\n [class.menu-item-sub]=\"level !== 0\"\n tappable\n (click)=\"executeAction($event, item)\"\n >\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-label>\n <span *rxIf=\"item.$title; let title; else: skeletonText\" [innerHTML]=\"title | translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <ion-badge *rxIf=\"item.$badge; let badge\" [color]=\"item.$badgeColor | push\">\n {{badge}}\n </ion-badge>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: { $implicit: item, level: level }\"></ng-container>\n </ion-item>\n }\n\n <!-- children -->\n @if (item.$children) {\n <div class=\"sub-menu-container\">\n <ng-container *rxFor=\"let child of item.$children; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: { $implicit: child, level: level + 1 }\"></ng-container>\n </ng-container>\n </div>\n }\n</ng-template>\n\n<ng-template #pinButton let-item let-level=\"level\">\n <!-- pin button -->\n @if (level && item.pinnable) {\n <ion-button\n slot=\"end\"\n shape=\"round\"\n fill=\"clear\"\n size=\"small\"\n [class.visible-hover]=\"!item.pinned\"\n (click)=\"togglePinned($event, item)\"\n >\n <!--<mat-icon slot=\"icon-only\" [color]=\"item.pinned ? 'primary' : undefined\">push_pin</mat-icon>-->\n <ion-icon slot=\"icon-only\" [name]=\"item.pinned ? 'pin' : 'pin-outline'\"></ion-icon>\n </ion-button>\n }\n</ng-template>\n\n<ng-template #skeletonText let-width let-animated>\n <ion-skeleton-text [animated]=\"animated\" [style.width.%]=\"width || 60\"></ion-skeleton-text>\n</ng-template>\n", styles: [":host{--menu-item-margin: 0;--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium);--menu-item-background-selected-sub: var(--ion-color-secondary50);--menu-item-border-width-sub: 0 0 1px 0;--menu-item-margin-start-sub: 16px}@keyframes fadeinout{0%{opacity:0;display:none}75%{opacity:0;display:none}to{opacity:1;display:flex}}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header ion-toolbar.user-toolbar{--ion-toolbar-height: 128px}ion-menu ion-header .user-avatar{-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;width:100%;justify-content:flex-start;text-align:start!important;color:var(--ion-item-text-color)}ion-menu ion-header button[mat-button].selected{background-color:var(--ion-item-background-selected);color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item{display:block}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item span{margin-left:var(--menu-item-margin)}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-content ion-list ion-item.selected.menu-item-sub{background-color:var(--menu-item-background-selected-sub)!important}ion-menu ion-content ion-list ion-item.menu-item-sub{--min-height: 34px;--padding-vertical: 8px;--padding-start: 8px;--padding-horizontal: 8px;--inner-border-width: var(--menu-item-border-width-sub);font-size:.8em;overflow:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-icon[slot],ion-menu ion-content ion-list ion-item.menu-item-sub mat-icon[slot]{font-size:calc(var(--min-height) / 2 - 1px);height:calc(var(--min-height) / 2 - 1px);margin-top:calc(var(--padding-vertical) + 2px);margin-inline-end:calc(var(--padding-horizontal) + 2px);margin-bottom:calc(var(--padding-vertical) + 2px)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-label{margin-top:var(--padding-vertical);margin-bottom:var(--padding-vertical)}ion-menu ion-content ion-list ion-item.menu-item-sub .item-inner{border-width:var(--inner-border-width);border-style:var(--border-style);border-color:var(--border-color);box-shadow:var(--inner-box-shadow)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end]{-webkit-margin-start:unset;margin-inline-start:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] mat-icon[slot=icon-only],ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] ion-icon[slot=icon-only]{margin:0}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end].visible-hover{opacity:0;display:none;animation:fadeinout 1s linear 1 backwards}ion-menu ion-content ion-list ion-item.menu-item-sub:hover ion-button.visible-hover{opacity:1;display:flex}ion-menu ion-content ion-list .sub-menu-container{margin-inline-start:var(--menu-item-margin-start-sub, 16px)}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonMenu, selector: "ion-menu", inputs: ["contentId", "disabled", "maxEdgeStart", "menuId", "side", "swipeGesture", "type"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i2.IonSplitPane, selector: "ion-split-pane", inputs: ["contentId", "disabled", "when"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i7.RxFor, selector: "[rxFor][rxForOf]", inputs: ["rxForOf", "rxForTemplate", "rxForStrategy", "rxForParent", "rxForPatchZone", "rxForTrackBy", "rxForRenderCallback"] }, { kind: "directive", type: i8.RxIf, selector: "[rxIf]", inputs: ["rxIf", "rxIfStrategy", "rxIfElse", "rxIfThen", "rxIfSuspense", "rxIfComplete", "rxIfError", "rxIfContextTrigger", "rxIfNextTrigger", "rxIfSuspenseTrigger", "rxIfErrorTrigger", "rxIfCompleteTrigger", "rxIfParent", "rxIfPatchZone", "rxIfRenderCallback"] }, { kind: "directive", type: i9.RxLet, selector: "[rxLet]", inputs: ["rxLet", "rxLetStrategy", "rxLetComplete", "rxLetError", "rxLetSuspense", "rxLetContextTrigger", "rxLetCompleteTrigger", "rxLetErrorTrigger", "rxLetSuspenseTrigger", "rxLetNextTrigger", "rxLetRenderCallback", "rxLetParent", "rxLetPatchZone"], outputs: ["rendered"] }, { kind: "component", type: i10.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i12.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i13.RxPush, name: "push" }], animations: [fadeInSlowAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
229
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MenuComponent, selector: "app-menu", inputs: { id: "id", menuId: "menuId", side: "side", contentId: "contentId", logo: "logo", appName: "appName", rxStrategy: "rxStrategy", appVersion: "appVersion" }, viewQueries: [{ propertyName: "splitPane", first: true, predicate: ["splitPane"], descendants: true, static: true }], ngImport: i0, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n <ion-toolbar *ngIf=\"!loading && isLogin; else notLogin\" @fadeInSlowAnimation class=\"user-toolbar\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button\n type=\"button\"\n mat-flat-button\n class=\"user-avatar\"\n [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url(' + (accountAvatar || './assets/img/person.png') + ')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT' | translate\"\n ></button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img\n *ngIf=\"logo; else noLogo\"\n [attr.src]=\"logo\"\n [title]=\"'APP_NAME' | translate: { appName: appName }\"\n alt=\"Logo\"\n width=\"108px\"\n />\n <ng-template #noLogo>\n <span style=\"width: 108px\">{{ appName }}</span>\n </ng-template>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button\n mat-button\n type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT' | translate\"\n >\n <ion-label class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{ accountName }}</b>\n </h3>\n <h4>{{ accountEmail }}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar\n class=\"ion-padding\"\n *ngIf=\"!loading\"\n style=\"height: unset; display: block; margin: auto; text-align: center\"\n >\n <img\n *ngIf=\"logo\"\n [attr.src]=\"logo\"\n [title]=\"'APP_NAME' | translate: { appName: appName }\"\n width=\"150px;\"\n alt=\"logo\"\n />\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{ appName }}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n <!-- will close the menu, after a click, in mobile -->\n <ion-menu-toggle auto-hide=\"false\">\n <ion-list lines=\"none\" *ngIf=\"!loading\">\n <ng-container *rxFor=\"let item of menuService.dataSubject; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: { $implicit: item, level: 0 }\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-menu-toggle>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm hidden-mobile\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"menuService.openAboutModal()\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"menuService.openAboutModal()\" color=\"medium\">\n {{ 'MENU.FOOTER_VERSION_ABOUT' | translate: { version: appVersion } }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button\n mat-icon-button\n color=\"accent\"\n (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') | translate\"\n >\n <mat-icon>\n <span>{{ splitPane.when ? '&#xab;' : '&#xbb;' }}</span>\n </mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n </ion-menu>\n\n <ng-content></ng-content>\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n @if (item.divider) {\n <!-- divider -->\n <ion-item-divider class=\"{{ item.cssClass }} {{ item.color }}\" @fadeInSlowAnimation>\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-label *ngIf=\"item.cssClass !== 'flex-spacer'\">\n <span *rxIf=\"item.$title; let title; else: skeletonText\" [innerHTML]=\"title | translate\"></span>\n </ion-label>\n </ion-item-divider>\n } @else if (item.path && !item.action) {\n <!-- tappable link -->\n <ion-item\n @fadeInSlowAnimation\n class=\"{{ item.cssClass }} {{ item.color }}\"\n [class.menu-item-sub]=\"level !== 0\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{\n paths: item.path === '/' || level !== 0 ? 'exact' : 'subset',\n queryParams: item.pathParams?.tab || level === 0 ? 'subset' : 'exact',\n matrixParams: 'exact',\n fragment: 'ignored',\n }\"\n >\n @if (item.icon) {\n <ion-icon slot=\"start\" [name]=\"item.icon\"></ion-icon>\n } @else if (item.matIcon) {\n <mat-icon slot=\"start\">{{ item.matIcon }}</mat-icon>\n }\n <ion-label *rxLet=\"item.$title; let title\">\n <span *ngIf=\"title; else skeletonText\" [innerHTML]=\"title | translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <ion-badge *rxIf=\"item.$badge; let badge\" [color]=\"item.$badgeColor | push\">\n {{badge}}\n </ion-badge>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: { $implicit: item, level: level }\"></ng-container>\n </ion-item>\n } @else if (item.action) {\n <!-- action -->\n <ion-item\n @fadeInSlowAnimation\n class=\"{{ item.cssClass }} {{ item.color }} text-1x\"\n [class.menu-item-sub]=\"level !== 0\"\n tappable\n (click)=\"executeAction($event, item)\"\n >\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-label>\n <span *rxIf=\"item.$title; let title; else: skeletonText\" [innerHTML]=\"title | translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <ion-badge *rxIf=\"item.$badge; let badge\" [color]=\"item.$badgeColor | push\">\n {{badge}}\n </ion-badge>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: { $implicit: item, level: level }\"></ng-container>\n </ion-item>\n }\n\n <!-- children -->\n @if (item.$children) {\n <div class=\"sub-menu-container\">\n <ng-container *rxFor=\"let child of item.$children; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: { $implicit: child, level: level + 1 }\"></ng-container>\n </ng-container>\n </div>\n }\n</ng-template>\n\n<ng-template #pinButton let-item let-level=\"level\">\n <!-- pin button -->\n @if (level && item.pinnable) {\n <ion-button\n slot=\"end\"\n shape=\"round\"\n fill=\"clear\"\n size=\"small\"\n [class.visible-hover]=\"!item.pinned\"\n (click)=\"togglePinned($event, item)\"\n >\n <!--<mat-icon slot=\"icon-only\" [color]=\"item.pinned ? 'primary' : undefined\">push_pin</mat-icon>-->\n <ion-icon slot=\"icon-only\" [name]=\"item.pinned ? 'pin' : 'pin-outline'\"></ion-icon>\n </ion-button>\n }\n</ng-template>\n\n<ng-template #skeletonText let-width let-animated>\n <ion-skeleton-text [animated]=\"animated\" [style.width.%]=\"width || 60\"></ion-skeleton-text>\n</ng-template>\n", styles: [":host{--menu-item-margin: 0;--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium);--menu-item-background-selected-sub: var(--ion-color-secondary50);--menu-item-border-width-sub: 0 0 1px 0;--menu-item-margin-start-sub: 16px}@keyframes fadeinout{0%{opacity:0;display:none}75%{opacity:0;display:none}to{opacity:1;display:flex}}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header ion-toolbar.user-toolbar{--ion-toolbar-height: 128px}ion-menu ion-header .user-avatar{-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;width:100%;justify-content:flex-start;text-align:start!important;color:var(--ion-item-text-color)}ion-menu ion-header button[mat-button].selected{background-color:var(--ion-item-background-selected);color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item{display:block}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item span{margin-left:var(--menu-item-margin)}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-content ion-list ion-item.selected.menu-item-sub{background-color:var(--menu-item-background-selected-sub)!important}ion-menu ion-content ion-list ion-item.menu-item-sub{--min-height: 34px;--padding-vertical: 8px;--padding-start: 8px;--padding-horizontal: 8px;--inner-border-width: var(--menu-item-border-width-sub);font-size:.8em;overflow:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-icon[slot],ion-menu ion-content ion-list ion-item.menu-item-sub mat-icon[slot]{font-size:calc(var(--min-height) / 2 - 1px);height:calc(var(--min-height) / 2 - 1px);margin-top:calc(var(--padding-vertical) + 2px);margin-inline-end:calc(var(--padding-horizontal) + 2px);margin-bottom:calc(var(--padding-vertical) + 2px)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-label{margin-top:var(--padding-vertical);margin-bottom:var(--padding-vertical)}ion-menu ion-content ion-list ion-item.menu-item-sub .item-inner{border-width:var(--inner-border-width);border-style:var(--border-style);border-color:var(--border-color);box-shadow:var(--inner-box-shadow)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end]{-webkit-margin-start:unset;margin-inline-start:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] mat-icon[slot=icon-only],ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] ion-icon[slot=icon-only]{margin:0}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end].visible-hover{opacity:0;display:none;animation:fadeinout 1s linear 1 backwards}ion-menu ion-content ion-list ion-item.menu-item-sub:hover ion-button.visible-hover{opacity:1;display:flex}ion-menu ion-content ion-list .sub-menu-container{margin-inline-start:var(--menu-item-margin-start-sub, 16px)}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonMenu, selector: "ion-menu", inputs: ["contentId", "disabled", "maxEdgeStart", "menuId", "side", "swipeGesture", "type"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i2.IonSplitPane, selector: "ion-split-pane", inputs: ["contentId", "disabled", "when"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i7.RxFor, selector: "[rxFor][rxForOf]", inputs: ["rxForOf", "rxForTemplate", "rxForStrategy", "rxForParent", "rxForPatchZone", "rxForTrackBy", "rxForRenderCallback"] }, { kind: "directive", type: i8.RxIf, selector: "[rxIf]", inputs: ["rxIf", "rxIfStrategy", "rxIfElse", "rxIfThen", "rxIfSuspense", "rxIfComplete", "rxIfError", "rxIfContextTrigger", "rxIfNextTrigger", "rxIfSuspenseTrigger", "rxIfErrorTrigger", "rxIfCompleteTrigger", "rxIfParent", "rxIfPatchZone", "rxIfRenderCallback"] }, { kind: "directive", type: i9.RxLet, selector: "[rxLet]", inputs: ["rxLet", "rxLetStrategy", "rxLetComplete", "rxLetError", "rxLetSuspense", "rxLetContextTrigger", "rxLetCompleteTrigger", "rxLetErrorTrigger", "rxLetSuspenseTrigger", "rxLetNextTrigger", "rxLetRenderCallback", "rxLetParent", "rxLetPatchZone"], outputs: ["rendered"] }, { kind: "component", type: i10.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i12.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i13.RxPush, name: "push" }], animations: [fadeInSlowAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
230
230
  }
231
231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuComponent, decorators: [{
232
232
  type: Component,
233
- args: [{ selector: 'app-menu', animations: [fadeInSlowAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n <ion-toolbar *ngIf=\"!loading && isLogin; else notLogin\" @fadeInSlowAnimation class=\"user-toolbar\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button\n type=\"button\"\n mat-flat-button\n class=\"user-avatar\"\n [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url(' + (accountAvatar || './assets/img/person.png') + ')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT' | translate\"\n ></button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img\n *ngIf=\"logo; else noLogo\"\n [attr.src]=\"logo\"\n [title]=\"'APP_NAME' | translate: { appName: appName }\"\n alt=\"Logo\"\n width=\"108px\"\n />\n <ng-template #noLogo>\n <span style=\"width: 108px\">{{ appName }}</span>\n </ng-template>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button\n mat-button\n type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT' | translate\"\n >\n <ion-label class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{ accountName }}</b>\n </h3>\n <h4>{{ accountEmail }}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar\n class=\"ion-padding\"\n *ngIf=\"!loading\"\n style=\"height: unset; display: block; margin: auto; text-align: center\"\n >\n <img\n *ngIf=\"logo\"\n [attr.src]=\"logo\"\n [title]=\"'APP_NAME' | translate: { appName: appName }\"\n width=\"150px;\"\n alt=\"logo\"\n />\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{ appName }}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n <!-- will close the menu, after a click, in mobile -->\n <ion-menu-toggle auto-hide=\"false\">\n <ion-list lines=\"none\" *ngIf=\"!loading\">\n <ng-container *rxFor=\"let item of menuService.dataSubject; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: { $implicit: item, level: 0 }\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-menu-toggle>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"menuService.openAboutModal()\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"menuService.openAboutModal()\" color=\"medium\">\n {{ 'MENU.FOOTER_VERSION_ABOUT' | translate: { version: appVersion } }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button\n mat-icon-button\n color=\"accent\"\n (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') | translate\"\n >\n <mat-icon>\n <span>{{ splitPane.when ? '&#xab;' : '&#xbb;' }}</span>\n </mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n </ion-menu>\n\n <ng-content></ng-content>\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n @if (item.divider) {\n <!-- divider -->\n <ion-item-divider class=\"{{ item.cssClass }} {{ item.color }}\" @fadeInSlowAnimation>\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-label *ngIf=\"item.cssClass !== 'flex-spacer'\">\n <span *rxIf=\"item.$title; let title; else: skeletonText\" [innerHTML]=\"title | translate\"></span>\n </ion-label>\n </ion-item-divider>\n } @else if (item.path && !item.action) {\n <!-- tappable link -->\n <ion-item\n @fadeInSlowAnimation\n class=\"{{ item.cssClass }} {{ item.color }}\"\n [class.menu-item-sub]=\"level !== 0\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{\n paths: item.path === '/' || level !== 0 ? 'exact' : 'subset',\n queryParams: item.pathParams?.tab || level === 0 ? 'subset' : 'exact',\n matrixParams: 'exact',\n fragment: 'ignored',\n }\"\n >\n @if (item.icon) {\n <ion-icon slot=\"start\" [name]=\"item.icon\"></ion-icon>\n } @else if (item.matIcon) {\n <mat-icon slot=\"start\">{{ item.matIcon }}</mat-icon>\n }\n <ion-label *rxLet=\"item.$title; let title\">\n <span *ngIf=\"title; else skeletonText\" [innerHTML]=\"title | translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <ion-badge *rxIf=\"item.$badge; let badge\" [color]=\"item.$badgeColor | push\">\n {{badge}}\n </ion-badge>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: { $implicit: item, level: level }\"></ng-container>\n </ion-item>\n } @else if (item.action) {\n <!-- action -->\n <ion-item\n @fadeInSlowAnimation\n class=\"{{ item.cssClass }} {{ item.color }} text-1x\"\n [class.menu-item-sub]=\"level !== 0\"\n tappable\n (click)=\"executeAction($event, item)\"\n >\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-label>\n <span *rxIf=\"item.$title; let title; else: skeletonText\" [innerHTML]=\"title | translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <ion-badge *rxIf=\"item.$badge; let badge\" [color]=\"item.$badgeColor | push\">\n {{badge}}\n </ion-badge>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: { $implicit: item, level: level }\"></ng-container>\n </ion-item>\n }\n\n <!-- children -->\n @if (item.$children) {\n <div class=\"sub-menu-container\">\n <ng-container *rxFor=\"let child of item.$children; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: { $implicit: child, level: level + 1 }\"></ng-container>\n </ng-container>\n </div>\n }\n</ng-template>\n\n<ng-template #pinButton let-item let-level=\"level\">\n <!-- pin button -->\n @if (level && item.pinnable) {\n <ion-button\n slot=\"end\"\n shape=\"round\"\n fill=\"clear\"\n size=\"small\"\n [class.visible-hover]=\"!item.pinned\"\n (click)=\"togglePinned($event, item)\"\n >\n <!--<mat-icon slot=\"icon-only\" [color]=\"item.pinned ? 'primary' : undefined\">push_pin</mat-icon>-->\n <ion-icon slot=\"icon-only\" [name]=\"item.pinned ? 'pin' : 'pin-outline'\"></ion-icon>\n </ion-button>\n }\n</ng-template>\n\n<ng-template #skeletonText let-width let-animated>\n <ion-skeleton-text [animated]=\"animated\" [style.width.%]=\"width || 60\"></ion-skeleton-text>\n</ng-template>\n", styles: [":host{--menu-item-margin: 0;--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium);--menu-item-background-selected-sub: var(--ion-color-secondary50);--menu-item-border-width-sub: 0 0 1px 0;--menu-item-margin-start-sub: 16px}@keyframes fadeinout{0%{opacity:0;display:none}75%{opacity:0;display:none}to{opacity:1;display:flex}}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header ion-toolbar.user-toolbar{--ion-toolbar-height: 128px}ion-menu ion-header .user-avatar{-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;width:100%;justify-content:flex-start;text-align:start!important;color:var(--ion-item-text-color)}ion-menu ion-header button[mat-button].selected{background-color:var(--ion-item-background-selected);color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item{display:block}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item span{margin-left:var(--menu-item-margin)}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-content ion-list ion-item.selected.menu-item-sub{background-color:var(--menu-item-background-selected-sub)!important}ion-menu ion-content ion-list ion-item.menu-item-sub{--min-height: 34px;--padding-vertical: 8px;--padding-start: 8px;--padding-horizontal: 8px;--inner-border-width: var(--menu-item-border-width-sub);font-size:.8em;overflow:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-icon[slot],ion-menu ion-content ion-list ion-item.menu-item-sub mat-icon[slot]{font-size:calc(var(--min-height) / 2 - 1px);height:calc(var(--min-height) / 2 - 1px);margin-top:calc(var(--padding-vertical) + 2px);margin-inline-end:calc(var(--padding-horizontal) + 2px);margin-bottom:calc(var(--padding-vertical) + 2px)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-label{margin-top:var(--padding-vertical);margin-bottom:var(--padding-vertical)}ion-menu ion-content ion-list ion-item.menu-item-sub .item-inner{border-width:var(--inner-border-width);border-style:var(--border-style);border-color:var(--border-color);box-shadow:var(--inner-box-shadow)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end]{-webkit-margin-start:unset;margin-inline-start:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] mat-icon[slot=icon-only],ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] ion-icon[slot=icon-only]{margin:0}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end].visible-hover{opacity:0;display:none;animation:fadeinout 1s linear 1 backwards}ion-menu ion-content ion-list ion-item.menu-item-sub:hover ion-button.visible-hover{opacity:1;display:flex}ion-menu ion-content ion-list .sub-menu-container{margin-inline-start:var(--menu-item-margin-start-sub, 16px)}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"] }]
233
+ args: [{ selector: 'app-menu', animations: [fadeInSlowAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n <ion-toolbar *ngIf=\"!loading && isLogin; else notLogin\" @fadeInSlowAnimation class=\"user-toolbar\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button\n type=\"button\"\n mat-flat-button\n class=\"user-avatar\"\n [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url(' + (accountAvatar || './assets/img/person.png') + ')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT' | translate\"\n ></button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img\n *ngIf=\"logo; else noLogo\"\n [attr.src]=\"logo\"\n [title]=\"'APP_NAME' | translate: { appName: appName }\"\n alt=\"Logo\"\n width=\"108px\"\n />\n <ng-template #noLogo>\n <span style=\"width: 108px\">{{ appName }}</span>\n </ng-template>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button\n mat-button\n type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT' | translate\"\n >\n <ion-label class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{ accountName }}</b>\n </h3>\n <h4>{{ accountEmail }}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar\n class=\"ion-padding\"\n *ngIf=\"!loading\"\n style=\"height: unset; display: block; margin: auto; text-align: center\"\n >\n <img\n *ngIf=\"logo\"\n [attr.src]=\"logo\"\n [title]=\"'APP_NAME' | translate: { appName: appName }\"\n width=\"150px;\"\n alt=\"logo\"\n />\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{ appName }}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n <!-- will close the menu, after a click, in mobile -->\n <ion-menu-toggle auto-hide=\"false\">\n <ion-list lines=\"none\" *ngIf=\"!loading\">\n <ng-container *rxFor=\"let item of menuService.dataSubject; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: { $implicit: item, level: 0 }\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-menu-toggle>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm hidden-mobile\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"menuService.openAboutModal()\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"menuService.openAboutModal()\" color=\"medium\">\n {{ 'MENU.FOOTER_VERSION_ABOUT' | translate: { version: appVersion } }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button\n mat-icon-button\n color=\"accent\"\n (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') | translate\"\n >\n <mat-icon>\n <span>{{ splitPane.when ? '&#xab;' : '&#xbb;' }}</span>\n </mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n </ion-menu>\n\n <ng-content></ng-content>\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n @if (item.divider) {\n <!-- divider -->\n <ion-item-divider class=\"{{ item.cssClass }} {{ item.color }}\" @fadeInSlowAnimation>\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-label *ngIf=\"item.cssClass !== 'flex-spacer'\">\n <span *rxIf=\"item.$title; let title; else: skeletonText\" [innerHTML]=\"title | translate\"></span>\n </ion-label>\n </ion-item-divider>\n } @else if (item.path && !item.action) {\n <!-- tappable link -->\n <ion-item\n @fadeInSlowAnimation\n class=\"{{ item.cssClass }} {{ item.color }}\"\n [class.menu-item-sub]=\"level !== 0\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{\n paths: item.path === '/' || level !== 0 ? 'exact' : 'subset',\n queryParams: item.pathParams?.tab || level === 0 ? 'subset' : 'exact',\n matrixParams: 'exact',\n fragment: 'ignored',\n }\"\n >\n @if (item.icon) {\n <ion-icon slot=\"start\" [name]=\"item.icon\"></ion-icon>\n } @else if (item.matIcon) {\n <mat-icon slot=\"start\">{{ item.matIcon }}</mat-icon>\n }\n <ion-label *rxLet=\"item.$title; let title\">\n <span *ngIf=\"title; else skeletonText\" [innerHTML]=\"title | translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <ion-badge *rxIf=\"item.$badge; let badge\" [color]=\"item.$badgeColor | push\">\n {{badge}}\n </ion-badge>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: { $implicit: item, level: level }\"></ng-container>\n </ion-item>\n } @else if (item.action) {\n <!-- action -->\n <ion-item\n @fadeInSlowAnimation\n class=\"{{ item.cssClass }} {{ item.color }} text-1x\"\n [class.menu-item-sub]=\"level !== 0\"\n tappable\n (click)=\"executeAction($event, item)\"\n >\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-label>\n <span *rxIf=\"item.$title; let title; else: skeletonText\" [innerHTML]=\"title | translate\"></span>\n <!--<span *ngIf=\"_debug\"> {{item.id}}</span>-->\n </ion-label>\n\n <ion-badge *rxIf=\"item.$badge; let badge\" [color]=\"item.$badgeColor | push\">\n {{badge}}\n </ion-badge>\n\n <!-- pin button -->\n <ng-container *ngTemplateOutlet=\"pinButton; context: { $implicit: item, level: level }\"></ng-container>\n </ion-item>\n }\n\n <!-- children -->\n @if (item.$children) {\n <div class=\"sub-menu-container\">\n <ng-container *rxFor=\"let child of item.$children; strategy: rxStrategy; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: { $implicit: child, level: level + 1 }\"></ng-container>\n </ng-container>\n </div>\n }\n</ng-template>\n\n<ng-template #pinButton let-item let-level=\"level\">\n <!-- pin button -->\n @if (level && item.pinnable) {\n <ion-button\n slot=\"end\"\n shape=\"round\"\n fill=\"clear\"\n size=\"small\"\n [class.visible-hover]=\"!item.pinned\"\n (click)=\"togglePinned($event, item)\"\n >\n <!--<mat-icon slot=\"icon-only\" [color]=\"item.pinned ? 'primary' : undefined\">push_pin</mat-icon>-->\n <ion-icon slot=\"icon-only\" [name]=\"item.pinned ? 'pin' : 'pin-outline'\"></ion-icon>\n </ion-button>\n }\n</ng-template>\n\n<ng-template #skeletonText let-width let-animated>\n <ion-skeleton-text [animated]=\"animated\" [style.width.%]=\"width || 60\"></ion-skeleton-text>\n</ng-template>\n", styles: [":host{--menu-item-margin: 0;--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium);--menu-item-background-selected-sub: var(--ion-color-secondary50);--menu-item-border-width-sub: 0 0 1px 0;--menu-item-margin-start-sub: 16px}@keyframes fadeinout{0%{opacity:0;display:none}75%{opacity:0;display:none}to{opacity:1;display:flex}}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header ion-toolbar.user-toolbar{--ion-toolbar-height: 128px}ion-menu ion-header .user-avatar{-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;width:100%;justify-content:flex-start;text-align:start!important;color:var(--ion-item-text-color)}ion-menu ion-header button[mat-button].selected{background-color:var(--ion-item-background-selected);color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item{display:block}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item span{margin-left:var(--menu-item-margin)}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-content ion-list ion-item.selected.menu-item-sub{background-color:var(--menu-item-background-selected-sub)!important}ion-menu ion-content ion-list ion-item.menu-item-sub{--min-height: 34px;--padding-vertical: 8px;--padding-start: 8px;--padding-horizontal: 8px;--inner-border-width: var(--menu-item-border-width-sub);font-size:.8em;overflow:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-icon[slot],ion-menu ion-content ion-list ion-item.menu-item-sub mat-icon[slot]{font-size:calc(var(--min-height) / 2 - 1px);height:calc(var(--min-height) / 2 - 1px);margin-top:calc(var(--padding-vertical) + 2px);margin-inline-end:calc(var(--padding-horizontal) + 2px);margin-bottom:calc(var(--padding-vertical) + 2px)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-label{margin-top:var(--padding-vertical);margin-bottom:var(--padding-vertical)}ion-menu ion-content ion-list ion-item.menu-item-sub .item-inner{border-width:var(--inner-border-width);border-style:var(--border-style);border-color:var(--border-color);box-shadow:var(--inner-box-shadow)}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end]{-webkit-margin-start:unset;margin-inline-start:unset}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] mat-icon[slot=icon-only],ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end] ion-icon[slot=icon-only]{margin:0}ion-menu ion-content ion-list ion-item.menu-item-sub ion-button[slot=end].visible-hover{opacity:0;display:none;animation:fadeinout 1s linear 1 backwards}ion-menu ion-content ion-list ion-item.menu-item-sub:hover ion-button.visible-hover{opacity:1;display:flex}ion-menu ion-content ion-list .sub-menu-container{margin-inline-start:var(--menu-item-margin-start-sub, 16px)}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"] }]
234
234
  }], ctorParameters: () => [{ type: i1.AccountService }, { type: i2.NavController }, { type: i2.MenuController }, { type: i2.ModalController }, { type: i3.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i4.MenuService }, { type: i5.Router }, { type: i14.Environment, decorators: [{
235
235
  type: Inject,
236
236
  args: [ENVIRONMENT]
@@ -256,4 +256,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
256
256
  type: ViewChild,
257
257
  args: ['splitPane', { static: true }]
258
258
  }] } });
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTWxJLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRWhGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxzQkFBc0IsRUFBa0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVc5RCxNQUFNLE9BQU8sYUFBYTtJQXNCWjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ3FCO0lBQ1Q7SUE5QmYsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNaLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDaEIsSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUNkLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFDM0IsSUFBSSxDQUFTO0lBQ2IsT0FBTyxDQUFTO0lBQ2hCLFVBQVUsR0FBb0IsUUFBUSxDQUFDO0lBQ3ZDLFVBQVUsQ0FBUztJQUVjLFNBQVMsQ0FBZTtJQUVsRSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ2YsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixX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QUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFb0MsU0FBUztzQkFBbEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uU3BsaXRQYW5lLCBNZW51Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5cbmltcG9ydCB7IGZhZGVJblNsb3dBbmltYXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IERFRkFVTFRfTUVOVV9TSE9XX1dIRU4sIE1lbnVTZXJ2aWNlLCBTcGxpdFBhbmVTaG93V2hlbiB9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IElNZW51SXRlbSwgTWVudUl0ZW0gfSBmcm9tICcuL21lbnUubW9kZWwnO1xuaW1wb3J0IHsgZmlyc3ROb3ROaWxQcm9taXNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUnhTdHJhdGVneU5hbWVzIH0gZnJvbSAnQHJ4LWFuZ3VsYXIvY2RrL3JlbmRlci1zdHJhdGVnaWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJ21lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtmYWRlSW5TbG93QW5pbWF0aW9uXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBpZCA9ICdtZW51JztcbiAgQElucHV0KCkgbWVudUlkID0gJ2xlZnQnO1xuICBASW5wdXQoKSBzaWRlID0gJ2xlZnQnO1xuICBASW5wdXQoKSBjb250ZW50SWQgPSAnbWVudS1jb250ZW50JztcbiAgQElucHV0KCkgbG9nbzogc3RyaW5nO1xuICBASW5wdXQoKSBhcHBOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJ4U3RyYXRlZ3k6IFJ4U3RyYXRlZ3lOYW1lcyA9ICdub3JtYWwnO1xuICBASW5wdXQoKSBhcHBWZXJzaW9uOiBzdHJpbmc7XG5cbiAgQFZpZXdDaGlsZCgnc3BsaXRQYW5lJywgeyBzdGF0aWM6IHRydWUgfSkgc3BsaXRQYW5lOiBJb25TcGxpdFBhbmU7XG5cbiAgbG9hZGluZyA9IHRydWU7XG4gIGlzTG9naW4gPSBmYWxzZTtcbiAgYWNjb3VudE5hbWU6IHN0cmluZztcbiAgYWNjb3VudEF2YXRhcjogc3RyaW5nO1xuICBhY2NvdW50RW1haWw6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWJ1ZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIG1lbnU6IE1lbnVDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIG1lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlIC8vIE1vZGFsIGVkaXRvciBnaXZlICdudWxsJ1xuICApIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWVudS1jb21wb25lbnRdIENyZWF0ZScpO1xuICAgIHRoaXMuYXBwVmVyc2lvbiA9IGVudmlyb25tZW50LnZlcnNpb247XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3BsaXRQYW5lLndoZW4gPSBhd2FpdCBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5tZW51U2VydmljZS5zcGxpdFBhbmVXaGVuKTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLmFjY291bnRDaGFuZ2VzLnN1YnNjcmliZSgoYWNjb3VudCkgPT4ge1xuICAgICAgICBpZiAoYWNjb3VudCkgdGhpcy5vbkxvZ2luKGFjY291bnQpO1xuICAgICAgICBlbHNlIHRoaXMub25Mb2dvdXQodHJ1ZSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gdG8gbWVudSBzZXJ2aWNlIGV2ZW50XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLm1lbnVTZXJ2aWNlLnNwbGl0UGFuZVdoZW4uc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5zZXRTcGxpdFBhbmVXaGVuKHZhbHVlKSkpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5tZW51U2VydmljZS5lbmFibGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuZW5hYmxlKHZhbHVlKSkpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLm9wZW5lZFxuICAgICAgICAvLyBBdm9pZCBkdXBsaWNhdGVkIGV2ZW50c1xuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gKHZhbHVlID8gdGhpcy5vcGVuKHsgZW1pdEV2ZW50OiBmYWxzZSB9KSA6IHRoaXMuY2xvc2UoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKSlcbiAgICApO1xuXG4gICAgLy8gVE9ETyA6IEZpbmQgYSBtb3JlIHJlbGlhYmxlIHdheSB0byBkbyB0aGlzIDpcbiAgICAvLyAgICBNdXN0IGJlIGRvbm5lIGFmdGVyIG1lbnVTZXJ2aWNlIHN1YnNjcmlwdGlvbiA6XG4gICAgLy8gICAgLSBJbiBNZW51U2VydmljZS5uZ09uU3RhcnQgYWNjb3VudENoYW5nZXMgY2hhbmdlIHdpbGwgYmUgZW1pdHRlZCBiZWZvcmUgdGhlIHNlcnZpY2UgaXMgcmVhZHlcbiAgICAvLyAgICAtIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBzdWJqZWN0RGF0YSBiZSBmaWxsZWQgYWZ0ZXIgZ2V0IGFjY291bnQgY2hhbmdlXG4gICAgLy8gICAgICBhbmQgTWVudVNlcnZpY2UgYXdhaXQgZm9yIHN1YmplY3REYXRhIGJlIGZpbGxlZCB0byBiZSByZWFkeVxuICAgIGF3YWl0IHRoaXMubWVudVNlcnZpY2UucmVhZHkoKTtcbiAgfVxuXG4gIGFzeW5jIG9uTG9naW4oYWNjb3VudDogQWNjb3VudCkge1xuICAgIGNvbnNvbGUuaW5mbygnW21lbnVdIFVwZGF0ZSAob24gbG9naW4pJyk7XG4gICAgdGhpcy5hY2NvdW50QXZhdGFyID0gYWNjb3VudC5hdmF0YXI7XG4gICAgdGhpcy5hY2NvdW50TmFtZSA9IGFjY291bnQuZGlzcGxheU5hbWU7XG4gICAgdGhpcy5hY2NvdW50RW1haWwgPSBhY2NvdW50LmVtYWlsO1xuICAgIHRoaXMuaXNMb2dpbiA9IHRydWU7XG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhc3luYyBvbkxvZ291dChza2lwUmVkaXJlY3Q/OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9naW4pIHtcbiAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgICByZXR1cm47IC8vIFNraXAgaWYgYWxyZWFkeSBsb2dvdXRcbiAgICB9XG5cbiAgICBpZiAoIXNraXBSZWRpcmVjdCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIExvZ291dCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gVXBkYXRlIChvbiBsb2dvdXQpJyk7XG4gICAgfVxuICAgIHRoaXMuYWNjb3VudEF2YXRhciA9IG51bGw7XG4gICAgdGhpcy5hY2NvdW50RW1haWwgPSBudWxsO1xuICAgIHRoaXMuYWNjb3VudE5hbWUgPSBudWxsO1xuXG4gICAgLy8gV2FpdCB0aGUgZW5kIG9mIGZhZGVvdXQsIHRvIHJlc2V0IHRoZSBhY2NvdW50XG4gICAgaWYgKCFza2lwUmVkaXJlY3QpIHtcbiAgICAgIGF3YWl0IHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoJy8nKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzTG9naW4gPSBmYWxzZTtcbiAgICB0aGlzLm1hcmtBc0xvYWRlZCh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBJTWVudUl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5pZC50b1N0cmluZygpO1xuICB9XG5cbiAgYXN5bmMgZW5hYmxlKHZhbHVlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW5hYmxlZCA9IGF3YWl0IHRoaXMubWVudS5pc0VuYWJsZWQodGhpcy5tZW51SWQpO1xuICAgIGlmIChlbmFibGVkICE9PSB2YWx1ZSkge1xuICAgICAgYXdhaXQgdGhpcy5tZW51LmVuYWJsZSh2YWx1ZSwgdGhpcy5tZW51SWQpO1xuICAgICAgaWYgKCF2YWx1ZSkgYXdhaXQgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW4ob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENoZWNraW5nIG9wZW4gZXZlbnQuLi4nKTtcbiAgICBjb25zdCBvcGVuZWQgPSBhd2FpdCB0aGlzLm1lbnUuaXNPcGVuKHRoaXMubWVudUlkKTtcbiAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIE9wZW5pbmcgbWVudScpO1xuICAgICAgYXdhaXQgdGhpcy5tZW51Lm9wZW4odGhpcy5tZW51SWQpO1xuXG4gICAgICAvLyBQcm9wYWdhdGUgdG8gc2VydmljZVxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLl9tYXJrQXNPcGVuZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBjbG9zZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gQ2hlY2tpbmcgY2xvc2UgZXZlbnQuLi4nKTtcbiAgICBjb25zdCBvcGVuZWQgPSBhd2FpdCB0aGlzLm1lbnUuaXNPcGVuKHRoaXMubWVudUlkKTtcbiAgICBpZiAob3BlbmVkKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gQ2xvc2luZyBtZW51Jyk7XG4gICAgICBhd2FpdCB0aGlzLm1lbnUuY2xvc2UodGhpcy5tZW51SWQpO1xuXG4gICAgICAvLyBQcm9wYWdhdGUgdG8gc2VydmljZVxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLl9tYXJrQXNDbG9zZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBzZXRTcGxpdFBhbmVXaGVuKHZhbHVlOiBTcGxpdFBhbmVTaG93V2hlbikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBDaGVja2luZyBzcGxpdFBhbmUgd2hlbi4uLicpO1xuICAgIGlmICh0aGlzLnNwbGl0UGFuZS53aGVuICE9PSB2YWx1ZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIFNldCBzcGxpdFBhbmUgd2hlbiB0byAnICsgdmFsdWUpO1xuICAgICAgdGhpcy5zcGxpdFBhbmUud2hlbiA9IHZhbHVlO1xuICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIFByb3BhZ2F0ZSB0byB0aGUgbWVudSBzZXJ2aWNlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubWVudVNlcnZpY2Uuc2V0U3BsaXRQYW5lU2hvd1doZW4odmFsdWUpLCAyMDApO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNwbGl0UGFuZVNob3coZXZlbnQ/OiBFdmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKHRoaXMuc3BsaXRQYW5lLndoZW4gPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRTcGxpdFBhbmVXaGVuKERFRkFVTFRfTUVOVV9TSE9XX1dIRU4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRTcGxpdFBhbmVXaGVuKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBleGVjdXRlQWN0aW9uKGV2ZW50OiBFdmVudCwgaXRlbTogTWVudUl0ZW0pIHtcbiAgICB0aGlzLmNsb3NlKCk7XG5cbiAgICAvLyBEZWxlZ2F0ZSBleGVjdXRpb24gdG8gc2VydmljZVxuICAgIHJldHVybiB0aGlzLm1lbnVTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oZXZlbnQsIGl0ZW0pO1xuICB9XG5cbiAgb25Td2lwZVJpZ2h0KGV2ZW50KSB7XG4gICAgLy8gU2tpcCwgaWYgbm90IGEgdmFsaWQgc3dpcGUgZXZlbnRcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnBvaW50ZXJUeXBlICE9PSAndG91Y2gnIHx8IGV2ZW50LnZlbG9jaXR5IDwgMC40KSB7XG4gICAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gV2lsbCBvcGVuIHRoZSBsZWZ0IG1lbnUsIHNvIGNhbmNlbGxlZCB0aGlzIHN3aXBlIGV2ZW50XG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQuY2VudGVyLnggLSBldmVudC5kaXN0YW5jZTtcbiAgICBpZiAoc3RhcnRYIDw9IDUwKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiW21lbnVdIENhbmNlbCBzd2lwZSByaWdodCwgYmVjYXVzZSBuZWFyIHRoZSBsZWZ0IG1lbnUge3g6IFwiICsgc3RhcnRYICsgXCIsIHZlbG9jaXR5OiBcIiArIGV2ZW50LnZlbG9jaXR5ICsgXCJ9XCIpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPSzogY29udGludWVcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiW21lbnVdIFJlY2VpdmVkIHN3aXBlIHJpZ2h0IHt4OiBcIiArIHN0YXJ0WCArIFwiLCB2ZWxvY2l0eTogXCIgKyBldmVudC52ZWxvY2l0eSArIFwifVwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrQXNMb2FkZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LCA0NTApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrQXNMb2FkaW5nKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRlY3RDaGFuZ2VzKCkge1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVQaW5uZWQoZXZlbnQ6IEV2ZW50LCBpdGVtOiBJTWVudUl0ZW0pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMubWVudVNlcnZpY2UudG9nZ2xlUGlubmVkKGl0ZW0pO1xuICB9XG59XG4iLCI8aW9uLXNwbGl0LXBhbmUgI3NwbGl0UGFuZSBbY29udGVudElkXT1cImNvbnRlbnRJZFwiIChzd2lwZXJpZ2h0KT1cIm9uU3dpcGVSaWdodCgkZXZlbnQpXCI+XG4gIDxpb24tbWVudSBbaWRdPVwiaWRcIiBbbWVudUlkXT1cIm1lbnVJZFwiIFtjb250ZW50SWRdPVwiY29udGVudElkXCI+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXIgKm5nSWY9XCIhbG9hZGluZyAmJiBpc0xvZ2luOyBlbHNlIG5vdExvZ2luXCIgQGZhZGVJblNsb3dBbmltYXRpb24gY2xhc3M9XCJ1c2VyLXRvb2xiYXJcIj5cbiAgICAgICAgPGlvbi1ncmlkPlxuICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG1hdC1mbGF0LWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1hdmF0YXJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wcmltYXJ5XT1cIiFhY2NvdW50QXZhdGFyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV09XCIndXJsKCcgKyAoYWNjb3VudEF2YXRhciB8fCAnLi9hc3NldHMvaW1nL3BlcnNvbi5wbmcnKSArICcpJ1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvYWNjb3VudCddXCJcbiAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJyb290XCJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiaW9uLWNvbG9yLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ01FTlUuQlROX01ZX0FDQ09VTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjhcIiBjbGFzcz1cInVzZXItbG9nb1wiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJsb2dvOyBlbHNlIG5vTG9nb1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuc3JjXT1cImxvZ29cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQVBQX05BTUUnIHwgdHJhbnNsYXRlOiB7IGFwcE5hbWU6IGFwcE5hbWUgfVwiXG4gICAgICAgICAgICAgICAgYWx0PVwiTG9nb1wiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDhweFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9Mb2dvPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwid2lkdGg6IDEwOHB4XCI+e3sgYXBwTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvYWNjb3VudCddXCJcbiAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJyb290XCJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ01FTlUuQlROX01ZX0FDQ09VTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC13cmFwIGlvbi10ZXh0LXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJuby1tYXJnaW4gdXNlcm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGI+e3sgYWNjb3VudE5hbWUgfX08L2I+XG4gICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgPGg0Pnt7IGFjY291bnRFbWFpbCB9fTwvaDQ+XG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgICAgICA8IS0tIEluc2VydGlvbiBoZWFkZXJCb3R0b21SaWdodCAtLT5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJCb3R0b21SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG5cbiAgICAgIDwhLS0gVXNlciBub3QgbG9nZ2VkIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICNub3RMb2dpbj5cbiAgICAgICAgPG1hdC10b29sYmFyXG4gICAgICAgICAgY2xhc3M9XCJpb24tcGFkZGluZ1wiXG4gICAgICAgICAgKm5nSWY9XCIhbG9hZGluZ1wiXG4gICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IHVuc2V0OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgKm5nSWY9XCJsb2dvXCJcbiAgICAgICAgICAgIFthdHRyLnNyY109XCJsb2dvXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInQVBQX05BTUUnIHwgdHJhbnNsYXRlOiB7IGFwcE5hbWU6IGFwcE5hbWUgfVwiXG4gICAgICAgICAgICB3aWR0aD1cIjE1MHB4O1wiXG4gICAgICAgICAgICBhbHQ9XCJsb2dvXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWxvZ29cIiBzdHlsZT1cIndpZHRoOiAxNTBweFwiPnt7IGFwcE5hbWUgfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvaW9uLWhlYWRlcj5cblxuICAgIDxpb24tY29udGVudCBbY2xhc3MuaGFzLXVzZXItaGVhZGVyXT1cImlzTG9naW5cIj5cbiAgICAgIDwhLS0gd2lsbCBjbG9zZSB0aGUgbWVudSwgYWZ0ZXIgYSBjbGljaywgaW4gbW9iaWxlIC0tPlxuICAgICAgPGlvbi1tZW51LXRvZ2dsZSBhdXRvLWhpZGU9XCJmYWxzZVwiPlxuICAgICAgICA8aW9uLWxpc3QgbGluZXM9XCJub25lXCIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnJ4Rm9yPVwibGV0IGl0ZW0gb2YgbWVudVNlcnZpY2UuZGF0YVN1YmplY3Q7IHN0cmF0ZWd5OiByeFN0cmF0ZWd5OyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGxldmVsOiAwIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgIDwvaW9uLW1lbnUtdG9nZ2xlPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG5cbiAgICA8aW9uLWZvb3RlciBjbGFzcz1cImhpZGRlbi14cyBoaWRkZW4tc21cIj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIChjbGljayk9XCJtZW51U2VydmljZS5vcGVuQWJvdXRNb2RhbCgpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gc2xvdD1cImljb24tb25seVwiPmhlbHBfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgICAgIDxpb24tdGl0bGUgKGNsaWNrKT1cIm1lbnVTZXJ2aWNlLm9wZW5BYm91dE1vZGFsKClcIiBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgIHt7ICdNRU5VLkZPT1RFUl9WRVJTSU9OX0FCT1VUJyB8IHRyYW5zbGF0ZTogeyB2ZXJzaW9uOiBhcHBWZXJzaW9uIH0gfX1cbiAgICAgICAgPC9pb24tdGl0bGU+XG5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTcGxpdFBhbmVTaG93KCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJoaWRkZW4teHMgaGlkZGVuLXNtIGhpZGRlbi1tZFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiKHNwbGl0UGFuZS53aGVuID8gJ0NPTU1PTi5CVE5fSElERV9NRU5VJyA6ICdDT01NT04uQlROX1NIT1dfTUVOVScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHNwbGl0UGFuZS53aGVuID8gJyYjeGFiOycgOiAnJiN4YmI7JyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWZvb3Rlcj5cbiAgPC9pb24tbWVudT5cblxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2lvbi1zcGxpdC1wYW5lPlxuXG48bmctdGVtcGxhdGUgI2hlYWRlckJvdHRvbVJpZ2h0PlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbaGVhZGVyQm90dG9tUmlnaHRdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtZW51SXRlbSBsZXQtaXRlbSBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICBAaWYgKGl0ZW0uZGl2aWRlcikge1xuICAgIDwhLS0gZGl2aWRlciAtLT5cbiAgICA8aW9uLWl0ZW0tZGl2aWRlciBjbGFzcz1cInt7IGl0ZW0uY3NzQ2xhc3MgfX0ge3sgaXRlbS5jb2xvciB9fVwiIEBmYWRlSW5TbG93QW5pbWF0aW9uPlxuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiICpuZ0lmPVwiaXRlbS5pY29uXCIgW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIml0ZW0ubWF0SWNvblwiPnt7IGl0ZW0ubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICA8aW9uLWxhYmVsICpuZ0lmPVwiaXRlbS5jc3NDbGFzcyAhPT0gJ2ZsZXgtc3BhY2VyJ1wiPlxuICAgICAgICA8c3BhbiAqcnhJZj1cIml0ZW0uJHRpdGxlOyBsZXQgdGl0bGU7IGVsc2U6IHNrZWxldG9uVGV4dFwiIFtpbm5lckhUTUxdPVwidGl0bGUgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICA8L2lvbi1sYWJlbD5cbiAgICA8L2lvbi1pdGVtLWRpdmlkZXI+XG4gIH0gQGVsc2UgaWYgKGl0ZW0ucGF0aCAmJiAhaXRlbS5hY3Rpb24pIHtcbiAgICA8IS0tIHRhcHBhYmxlIGxpbmsgLS0+XG4gICAgPGlvbi1pdGVtXG4gICAgICBAZmFkZUluU2xvd0FuaW1hdGlvblxuICAgICAgY2xhc3M9XCJ7eyBpdGVtLmNzc0NsYXNzIH19IHt7IGl0ZW0uY29sb3IgfX1cIlxuICAgICAgW2NsYXNzLm1lbnUtaXRlbS1zdWJdPVwibGV2ZWwgIT09IDBcIlxuICAgICAgdGFwcGFibGVcbiAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucGF0aFwiXG4gICAgICBbcXVlcnlQYXJhbXNdPVwiaXRlbS5wYXRoUGFyYW1zXCJcbiAgICAgIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIlxuICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInNlbGVjdGVkXCJcbiAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7XG4gICAgICAgIHBhdGhzOiBpdGVtLnBhdGggPT09ICcvJyB8fCBsZXZlbCAhPT0gMCA/ICdleGFjdCcgOiAnc3Vic2V0JyxcbiAgICAgICAgcXVlcnlQYXJhbXM6IGl0ZW0ucGF0aFBhcmFtcz8udGFiIHx8IGxldmVsID09PSAwID8gJ3N1YnNldCcgOiAnZXhhY3QnLFxuICAgICAgICBtYXRyaXhQYXJhbXM6ICdleGFjdCcsXG4gICAgICAgIGZyYWdtZW50OiAnaWdub3JlZCcsXG4gICAgICB9XCJcbiAgICA+XG4gICAgICBAaWYgKGl0ZW0uaWNvbikge1xuICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgIH0gQGVsc2UgaWYgKGl0ZW0ubWF0SWNvbikge1xuICAgICAgICA8bWF0LWljb24gc2xvdD1cInN0YXJ0XCI+e3sgaXRlbS5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgIH1cbiAgICAgIDxpb24tbGFiZWwgKnJ4TGV0PVwiaXRlbS4kdGl0bGU7IGxldCB0aXRsZVwiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInRpdGxlOyBlbHNlIHNrZWxldG9uVGV4dFwiIFtpbm5lckhUTUxdPVwidGl0bGUgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICAgIDwhLS08c3BhbiAqbmdJZj1cIl9kZWJ1Z1wiPiB7e2l0ZW0uaWR9fTwvc3Bhbj4tLT5cbiAgICAgIDwvaW9uLWxhYmVsPlxuXG4gICAgICA8aW9uLWJhZGdlICpyeElmPVwiaXRlbS4kYmFkZ2U7IGxldCBiYWRnZVwiIFtjb2xvcl09XCJpdGVtLiRiYWRnZUNvbG9yIHwgcHVzaFwiPlxuICAgICAgICB7e2JhZGdlfX1cbiAgICAgIDwvaW9uLWJhZGdlPlxuXG4gICAgICA8IS0tIHBpbiBidXR0b24gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGluQnV0dG9uOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgbGV2ZWw6IGxldmVsIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2lvbi1pdGVtPlxuICB9IEBlbHNlIGlmIChpdGVtLmFjdGlvbikge1xuICAgIDwhLS0gYWN0aW9uIC0tPlxuICAgIDxpb24taXRlbVxuICAgICAgQGZhZGVJblNsb3dBbmltYXRpb25cbiAgICAgIGNsYXNzPVwie3sgaXRlbS5jc3NDbGFzcyB9fSB7eyBpdGVtLmNvbG9yIH19IHRleHQtMXhcIlxuICAgICAgW2NsYXNzLm1lbnUtaXRlbS1zdWJdPVwibGV2ZWwgIT09IDBcIlxuICAgICAgdGFwcGFibGVcbiAgICAgIChjbGljayk9XCJleGVjdXRlQWN0aW9uKCRldmVudCwgaXRlbSlcIlxuICAgID5cbiAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIml0ZW0uaWNvblwiIFtuYW1lXT1cIml0ZW0uaWNvblwiPjwvaW9uLWljb24+XG4gICAgICA8bWF0LWljb24gc2xvdD1cInN0YXJ0XCIgKm5nSWY9XCJpdGVtLm1hdEljb25cIj57eyBpdGVtLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgPHNwYW4gKnJ4SWY9XCJpdGVtLiR0aXRsZTsgbGV0IHRpdGxlOyBlbHNlOiBza2VsZXRvblRleHRcIiBbaW5uZXJIVE1MXT1cInRpdGxlIHwgdHJhbnNsYXRlXCI+PC9zcGFuPlxuICAgICAgICA8IS0tPHNwYW4gKm5nSWY9XCJfZGVidWdcIj4ge3tpdGVtLmlkfX08L3NwYW4+LS0+XG4gICAgICA8L2lvbi1sYWJlbD5cblxuICAgICAgPGlvbi1iYWRnZSAqcnhJZj1cIml0ZW0uJGJhZGdlOyBsZXQgYmFkZ2VcIiBbY29sb3JdPVwiaXRlbS4kYmFkZ2VDb2xvciB8IHB1c2hcIj5cbiAgICAgICAge3tiYWRnZX19XG4gICAgICA8L2lvbi1iYWRnZT5cblxuICAgICAgPCEtLSBwaW4gYnV0dG9uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBpbkJ1dHRvbjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGxldmVsOiBsZXZlbCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9pb24taXRlbT5cbiAgfVxuXG4gIDwhLS0gY2hpbGRyZW4gLS0+XG4gIEBpZiAoaXRlbS4kY2hpbGRyZW4pIHtcbiAgICA8ZGl2IGNsYXNzPVwic3ViLW1lbnUtY29udGFpbmVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpyeEZvcj1cImxldCBjaGlsZCBvZiBpdGVtLiRjaGlsZHJlbjsgc3RyYXRlZ3k6IHJ4U3RyYXRlZ3k7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudUl0ZW07IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjaGlsZCwgbGV2ZWw6IGxldmVsICsgMSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwaW5CdXR0b24gbGV0LWl0ZW0gbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgPCEtLSBwaW4gYnV0dG9uIC0tPlxuICBAaWYgKGxldmVsICYmIGl0ZW0ucGlubmFibGUpIHtcbiAgICA8aW9uLWJ1dHRvblxuICAgICAgc2xvdD1cImVuZFwiXG4gICAgICBzaGFwZT1cInJvdW5kXCJcbiAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICBzaXplPVwic21hbGxcIlxuICAgICAgW2NsYXNzLnZpc2libGUtaG92ZXJdPVwiIWl0ZW0ucGlubmVkXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVQaW5uZWQoJGV2ZW50LCBpdGVtKVwiXG4gICAgPlxuICAgICAgPCEtLTxtYXQtaWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgW2NvbG9yXT1cIml0ZW0ucGlubmVkID8gJ3ByaW1hcnknIDogdW5kZWZpbmVkXCI+cHVzaF9waW48L21hdC1pY29uPi0tPlxuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBbbmFtZV09XCJpdGVtLnBpbm5lZCA/ICdwaW4nIDogJ3Bpbi1vdXRsaW5lJ1wiPjwvaW9uLWljb24+XG4gICAgPC9pb24tYnV0dG9uPlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NrZWxldG9uVGV4dCBsZXQtd2lkdGggbGV0LWFuaW1hdGVkPlxuICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cImFuaW1hdGVkXCIgW3N0eWxlLndpZHRoLiVdPVwid2lkdGggfHwgNjBcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTWxJLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRWhGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxzQkFBc0IsRUFBa0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVc5RCxNQUFNLE9BQU8sYUFBYTtJQXNCWjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ3FCO0lBQ1Q7SUE5QmYsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNaLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDaEIsSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUNkLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFDM0IsSUFBSSxDQUFTO0lBQ2IsT0FBTyxDQUFTO0lBQ2hCLFVBQVUsR0FBb0IsUUFBUSxDQUFDO0lBQ3ZDLFVBQVUsQ0FBUztJQUVjLFNBQVMsQ0FBZTtJQUVsRSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ2YsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixX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QUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFb0MsU0FBUztzQkFBbEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uU3BsaXRQYW5lLCBNZW51Q29udHJvbGxlciwgTW9kYWxDb250cm9sbGVyLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5cbmltcG9ydCB7IGZhZGVJblNsb3dBbmltYXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IERFRkFVTFRfTUVOVV9TSE9XX1dIRU4sIE1lbnVTZXJ2aWNlLCBTcGxpdFBhbmVTaG93V2hlbiB9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IElNZW51SXRlbSwgTWVudUl0ZW0gfSBmcm9tICcuL21lbnUubW9kZWwnO1xuaW1wb3J0IHsgZmlyc3ROb3ROaWxQcm9taXNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUnhTdHJhdGVneU5hbWVzIH0gZnJvbSAnQHJ4LWFuZ3VsYXIvY2RrL3JlbmRlci1zdHJhdGVnaWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJ21lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtmYWRlSW5TbG93QW5pbWF0aW9uXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBpZCA9ICdtZW51JztcbiAgQElucHV0KCkgbWVudUlkID0gJ2xlZnQnO1xuICBASW5wdXQoKSBzaWRlID0gJ2xlZnQnO1xuICBASW5wdXQoKSBjb250ZW50SWQgPSAnbWVudS1jb250ZW50JztcbiAgQElucHV0KCkgbG9nbzogc3RyaW5nO1xuICBASW5wdXQoKSBhcHBOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJ4U3RyYXRlZ3k6IFJ4U3RyYXRlZ3lOYW1lcyA9ICdub3JtYWwnO1xuICBASW5wdXQoKSBhcHBWZXJzaW9uOiBzdHJpbmc7XG5cbiAgQFZpZXdDaGlsZCgnc3BsaXRQYW5lJywgeyBzdGF0aWM6IHRydWUgfSkgc3BsaXRQYW5lOiBJb25TcGxpdFBhbmU7XG5cbiAgbG9hZGluZyA9IHRydWU7XG4gIGlzTG9naW4gPSBmYWxzZTtcbiAgYWNjb3VudE5hbWU6IHN0cmluZztcbiAgYWNjb3VudEF2YXRhcjogc3RyaW5nO1xuICBhY2NvdW50RW1haWw6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWJ1ZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIG1lbnU6IE1lbnVDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIG1lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlIC8vIE1vZGFsIGVkaXRvciBnaXZlICdudWxsJ1xuICApIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWVudS1jb21wb25lbnRdIENyZWF0ZScpO1xuICAgIHRoaXMuYXBwVmVyc2lvbiA9IGVudmlyb25tZW50LnZlcnNpb247XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3BsaXRQYW5lLndoZW4gPSBhd2FpdCBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5tZW51U2VydmljZS5zcGxpdFBhbmVXaGVuKTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLmFjY291bnRDaGFuZ2VzLnN1YnNjcmliZSgoYWNjb3VudCkgPT4ge1xuICAgICAgICBpZiAoYWNjb3VudCkgdGhpcy5vbkxvZ2luKGFjY291bnQpO1xuICAgICAgICBlbHNlIHRoaXMub25Mb2dvdXQodHJ1ZSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gdG8gbWVudSBzZXJ2aWNlIGV2ZW50XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLm1lbnVTZXJ2aWNlLnNwbGl0UGFuZVdoZW4uc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5zZXRTcGxpdFBhbmVXaGVuKHZhbHVlKSkpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5tZW51U2VydmljZS5lbmFibGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuZW5hYmxlKHZhbHVlKSkpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLm9wZW5lZFxuICAgICAgICAvLyBBdm9pZCBkdXBsaWNhdGVkIGV2ZW50c1xuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gKHZhbHVlID8gdGhpcy5vcGVuKHsgZW1pdEV2ZW50OiBmYWxzZSB9KSA6IHRoaXMuY2xvc2UoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKSlcbiAgICApO1xuXG4gICAgLy8gVE9ETyA6IEZpbmQgYSBtb3JlIHJlbGlhYmxlIHdheSB0byBkbyB0aGlzIDpcbiAgICAvLyAgICBNdXN0IGJlIGRvbm5lIGFmdGVyIG1lbnVTZXJ2aWNlIHN1YnNjcmlwdGlvbiA6XG4gICAgLy8gICAgLSBJbiBNZW51U2VydmljZS5uZ09uU3RhcnQgYWNjb3VudENoYW5nZXMgY2hhbmdlIHdpbGwgYmUgZW1pdHRlZCBiZWZvcmUgdGhlIHNlcnZpY2UgaXMgcmVhZHlcbiAgICAvLyAgICAtIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBzdWJqZWN0RGF0YSBiZSBmaWxsZWQgYWZ0ZXIgZ2V0IGFjY291bnQgY2hhbmdlXG4gICAgLy8gICAgICBhbmQgTWVudVNlcnZpY2UgYXdhaXQgZm9yIHN1YmplY3REYXRhIGJlIGZpbGxlZCB0byBiZSByZWFkeVxuICAgIGF3YWl0IHRoaXMubWVudVNlcnZpY2UucmVhZHkoKTtcbiAgfVxuXG4gIGFzeW5jIG9uTG9naW4oYWNjb3VudDogQWNjb3VudCkge1xuICAgIGNvbnNvbGUuaW5mbygnW21lbnVdIFVwZGF0ZSAob24gbG9naW4pJyk7XG4gICAgdGhpcy5hY2NvdW50QXZhdGFyID0gYWNjb3VudC5hdmF0YXI7XG4gICAgdGhpcy5hY2NvdW50TmFtZSA9IGFjY291bnQuZGlzcGxheU5hbWU7XG4gICAgdGhpcy5hY2NvdW50RW1haWwgPSBhY2NvdW50LmVtYWlsO1xuICAgIHRoaXMuaXNMb2dpbiA9IHRydWU7XG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhc3luYyBvbkxvZ291dChza2lwUmVkaXJlY3Q/OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9naW4pIHtcbiAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgICByZXR1cm47IC8vIFNraXAgaWYgYWxyZWFkeSBsb2dvdXRcbiAgICB9XG5cbiAgICBpZiAoIXNraXBSZWRpcmVjdCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIExvZ291dCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gVXBkYXRlIChvbiBsb2dvdXQpJyk7XG4gICAgfVxuICAgIHRoaXMuYWNjb3VudEF2YXRhciA9IG51bGw7XG4gICAgdGhpcy5hY2NvdW50RW1haWwgPSBudWxsO1xuICAgIHRoaXMuYWNjb3VudE5hbWUgPSBudWxsO1xuXG4gICAgLy8gV2FpdCB0aGUgZW5kIG9mIGZhZGVvdXQsIHRvIHJlc2V0IHRoZSBhY2NvdW50XG4gICAgaWYgKCFza2lwUmVkaXJlY3QpIHtcbiAgICAgIGF3YWl0IHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoJy8nKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzTG9naW4gPSBmYWxzZTtcbiAgICB0aGlzLm1hcmtBc0xvYWRlZCh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBJTWVudUl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5pZC50b1N0cmluZygpO1xuICB9XG5cbiAgYXN5bmMgZW5hYmxlKHZhbHVlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW5hYmxlZCA9IGF3YWl0IHRoaXMubWVudS5pc0VuYWJsZWQodGhpcy5tZW51SWQpO1xuICAgIGlmIChlbmFibGVkICE9PSB2YWx1ZSkge1xuICAgICAgYXdhaXQgdGhpcy5tZW51LmVuYWJsZSh2YWx1ZSwgdGhpcy5tZW51SWQpO1xuICAgICAgaWYgKCF2YWx1ZSkgYXdhaXQgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW4ob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENoZWNraW5nIG9wZW4gZXZlbnQuLi4nKTtcbiAgICBjb25zdCBvcGVuZWQgPSBhd2FpdCB0aGlzLm1lbnUuaXNPcGVuKHRoaXMubWVudUlkKTtcbiAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIE9wZW5pbmcgbWVudScpO1xuICAgICAgYXdhaXQgdGhpcy5tZW51Lm9wZW4odGhpcy5tZW51SWQpO1xuXG4gICAgICAvLyBQcm9wYWdhdGUgdG8gc2VydmljZVxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLl9tYXJrQXNPcGVuZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBjbG9zZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gQ2hlY2tpbmcgY2xvc2UgZXZlbnQuLi4nKTtcbiAgICBjb25zdCBvcGVuZWQgPSBhd2FpdCB0aGlzLm1lbnUuaXNPcGVuKHRoaXMubWVudUlkKTtcbiAgICBpZiAob3BlbmVkKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gQ2xvc2luZyBtZW51Jyk7XG4gICAgICBhd2FpdCB0aGlzLm1lbnUuY2xvc2UodGhpcy5tZW51SWQpO1xuXG4gICAgICAvLyBQcm9wYWdhdGUgdG8gc2VydmljZVxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLl9tYXJrQXNDbG9zZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBzZXRTcGxpdFBhbmVXaGVuKHZhbHVlOiBTcGxpdFBhbmVTaG93V2hlbikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBDaGVja2luZyBzcGxpdFBhbmUgd2hlbi4uLicpO1xuICAgIGlmICh0aGlzLnNwbGl0UGFuZS53aGVuICE9PSB2YWx1ZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIFNldCBzcGxpdFBhbmUgd2hlbiB0byAnICsgdmFsdWUpO1xuICAgICAgdGhpcy5zcGxpdFBhbmUud2hlbiA9IHZhbHVlO1xuICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIFByb3BhZ2F0ZSB0byB0aGUgbWVudSBzZXJ2aWNlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubWVudVNlcnZpY2Uuc2V0U3BsaXRQYW5lU2hvd1doZW4odmFsdWUpLCAyMDApO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNwbGl0UGFuZVNob3coZXZlbnQ/OiBFdmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKHRoaXMuc3BsaXRQYW5lLndoZW4gPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRTcGxpdFBhbmVXaGVuKERFRkFVTFRfTUVOVV9TSE9XX1dIRU4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRTcGxpdFBhbmVXaGVuKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBleGVjdXRlQWN0aW9uKGV2ZW50OiBFdmVudCwgaXRlbTogTWVudUl0ZW0pIHtcbiAgICB0aGlzLmNsb3NlKCk7XG5cbiAgICAvLyBEZWxlZ2F0ZSBleGVjdXRpb24gdG8gc2VydmljZVxuICAgIHJldHVybiB0aGlzLm1lbnVTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oZXZlbnQsIGl0ZW0pO1xuICB9XG5cbiAgb25Td2lwZVJpZ2h0KGV2ZW50KSB7XG4gICAgLy8gU2tpcCwgaWYgbm90IGEgdmFsaWQgc3dpcGUgZXZlbnRcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnBvaW50ZXJUeXBlICE9PSAndG91Y2gnIHx8IGV2ZW50LnZlbG9jaXR5IDwgMC40KSB7XG4gICAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gV2lsbCBvcGVuIHRoZSBsZWZ0IG1lbnUsIHNvIGNhbmNlbGxlZCB0aGlzIHN3aXBlIGV2ZW50XG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQuY2VudGVyLnggLSBldmVudC5kaXN0YW5jZTtcbiAgICBpZiAoc3RhcnRYIDw9IDUwKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiW21lbnVdIENhbmNlbCBzd2lwZSByaWdodCwgYmVjYXVzZSBuZWFyIHRoZSBsZWZ0IG1lbnUge3g6IFwiICsgc3RhcnRYICsgXCIsIHZlbG9jaXR5OiBcIiArIGV2ZW50LnZlbG9jaXR5ICsgXCJ9XCIpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPSzogY29udGludWVcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiW21lbnVdIFJlY2VpdmVkIHN3aXBlIHJpZ2h0IHt4OiBcIiArIHN0YXJ0WCArIFwiLCB2ZWxvY2l0eTogXCIgKyBldmVudC52ZWxvY2l0eSArIFwifVwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrQXNMb2FkZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LCA0NTApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrQXNMb2FkaW5nKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRlY3RDaGFuZ2VzKCkge1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVQaW5uZWQoZXZlbnQ6IEV2ZW50LCBpdGVtOiBJTWVudUl0ZW0pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMubWVudVNlcnZpY2UudG9nZ2xlUGlubmVkKGl0ZW0pO1xuICB9XG59XG4iLCI8aW9uLXNwbGl0LXBhbmUgI3NwbGl0UGFuZSBbY29udGVudElkXT1cImNvbnRlbnRJZFwiIChzd2lwZXJpZ2h0KT1cIm9uU3dpcGVSaWdodCgkZXZlbnQpXCI+XG4gIDxpb24tbWVudSBbaWRdPVwiaWRcIiBbbWVudUlkXT1cIm1lbnVJZFwiIFtjb250ZW50SWRdPVwiY29udGVudElkXCI+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXIgKm5nSWY9XCIhbG9hZGluZyAmJiBpc0xvZ2luOyBlbHNlIG5vdExvZ2luXCIgQGZhZGVJblNsb3dBbmltYXRpb24gY2xhc3M9XCJ1c2VyLXRvb2xiYXJcIj5cbiAgICAgICAgPGlvbi1ncmlkPlxuICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG1hdC1mbGF0LWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1hdmF0YXJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wcmltYXJ5XT1cIiFhY2NvdW50QXZhdGFyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV09XCIndXJsKCcgKyAoYWNjb3VudEF2YXRhciB8fCAnLi9hc3NldHMvaW1nL3BlcnNvbi5wbmcnKSArICcpJ1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvYWNjb3VudCddXCJcbiAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJyb290XCJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiaW9uLWNvbG9yLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ01FTlUuQlROX01ZX0FDQ09VTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjhcIiBjbGFzcz1cInVzZXItbG9nb1wiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJsb2dvOyBlbHNlIG5vTG9nb1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuc3JjXT1cImxvZ29cIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQVBQX05BTUUnIHwgdHJhbnNsYXRlOiB7IGFwcE5hbWU6IGFwcE5hbWUgfVwiXG4gICAgICAgICAgICAgICAgYWx0PVwiTG9nb1wiXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDhweFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9Mb2dvPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwid2lkdGg6IDEwOHB4XCI+e3sgYXBwTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvYWNjb3VudCddXCJcbiAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJyb290XCJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ01FTlUuQlROX01ZX0FDQ09VTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC13cmFwIGlvbi10ZXh0LXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJuby1tYXJnaW4gdXNlcm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGI+e3sgYWNjb3VudE5hbWUgfX08L2I+XG4gICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgPGg0Pnt7IGFjY291bnRFbWFpbCB9fTwvaDQ+XG4gICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgICAgICA8IS0tIEluc2VydGlvbiBoZWFkZXJCb3R0b21SaWdodCAtLT5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJCb3R0b21SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG5cbiAgICAgIDwhLS0gVXNlciBub3QgbG9nZ2VkIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICNub3RMb2dpbj5cbiAgICAgICAgPG1hdC10b29sYmFyXG4gICAgICAgICAgY2xhc3M9XCJpb24tcGFkZGluZ1wiXG4gICAgICAgICAgKm5nSWY9XCIhbG9hZGluZ1wiXG4gICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IHVuc2V0OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgKm5nSWY9XCJsb2dvXCJcbiAgICAgICAgICAgIFthdHRyLnNyY109XCJsb2dvXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInQVBQX05BTUUnIHwgdHJhbnNsYXRlOiB7IGFwcE5hbWU6IGFwcE5hbWUgfVwiXG4gICAgICAgICAgICB3aWR0aD1cIjE1MHB4O1wiXG4gICAgICAgICAgICBhbHQ9XCJsb2dvXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWxvZ29cIiBzdHlsZT1cIndpZHRoOiAxNTBweFwiPnt7IGFwcE5hbWUgfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvaW9uLWhlYWRlcj5cblxuICAgIDxpb24tY29udGVudCBbY2xhc3MuaGFzLXVzZXItaGVhZGVyXT1cImlzTG9naW5cIj5cbiAgICAgIDwhLS0gd2lsbCBjbG9zZSB0aGUgbWVudSwgYWZ0ZXIgYSBjbGljaywgaW4gbW9iaWxlIC0tPlxuICAgICAgPGlvbi1tZW51LXRvZ2dsZSBhdXRvLWhpZGU9XCJmYWxzZVwiPlxuICAgICAgICA8aW9uLWxpc3QgbGluZXM9XCJub25lXCIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKnJ4Rm9yPVwibGV0IGl0ZW0gb2YgbWVudVNlcnZpY2UuZGF0YVN1YmplY3Q7IHN0cmF0ZWd5OiByeFN0cmF0ZWd5OyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGxldmVsOiAwIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgIDwvaW9uLW1lbnUtdG9nZ2xlPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG5cbiAgICA8aW9uLWZvb3RlciBjbGFzcz1cImhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZVwiPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cIm1lbnVTZXJ2aWNlLm9wZW5BYm91dE1vZGFsKClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwiaWNvbi1vbmx5XCI+aGVscF9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICAgICAgPGlvbi10aXRsZSAoY2xpY2spPVwibWVudVNlcnZpY2Uub3BlbkFib3V0TW9kYWwoKVwiIGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAge3sgJ01FTlUuRk9PVEVSX1ZFUlNJT05fQUJPVVQnIHwgdHJhbnNsYXRlOiB7IHZlcnNpb246IGFwcFZlcnNpb24gfSB9fVxuICAgICAgICA8L2lvbi10aXRsZT5cblxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNwbGl0UGFuZVNob3coJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1kXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCIoc3BsaXRQYW5lLndoZW4gPyAnQ09NTU9OLkJUTl9ISURFX01FTlUnIDogJ0NPTU1PTi5CVE5fU0hPV19NRU5VJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgc3BsaXRQYW5lLndoZW4gPyAnJiN4YWI7JyA6ICcmI3hiYjsnIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24tZm9vdGVyPlxuICA8L2lvbi1tZW51PlxuXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvaW9uLXNwbGl0LXBhbmU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyQm90dG9tUmlnaHQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJCb3R0b21SaWdodF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21lbnVJdGVtIGxldC1pdGVtIGxldC1sZXZlbD1cImxldmVsXCI+XG4gIEBpZiAoaXRlbS5kaXZpZGVyKSB7XG4gICAgPCEtLSBkaXZpZGVyIC0tPlxuICAgIDxpb24taXRlbS1kaXZpZGVyIGNsYXNzPVwie3sgaXRlbS5jc3NDbGFzcyB9fSB7eyBpdGVtLmNvbG9yIH19XCIgQGZhZGVJblNsb3dBbmltYXRpb24+XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgKm5nSWY9XCJpdGVtLmljb25cIiBbbmFtZV09XCJpdGVtLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgPG1hdC1pY29uIHNsb3Q9XCJzdGFydFwiICpuZ0lmPVwiaXRlbS5tYXRJY29uXCI+e3sgaXRlbS5tYXRJY29uIH19PC9tYXQtaWNvbj5cbiAgICAgIDxpb24tbGFiZWwgKm5nSWY9XCJpdGVtLmNzc0NsYXNzICE9PSAnZmxleC1zcGFjZXInXCI+XG4gICAgICAgIDxzcGFuICpyeElmPVwiaXRlbS4kdGl0bGU7IGxldCB0aXRsZTsgZWxzZTogc2tlbGV0b25UZXh0XCIgW2lubmVySFRNTF09XCJ0aXRsZSB8IHRyYW5zbGF0ZVwiPjwvc3Bhbj5cbiAgICAgIDwvaW9uLWxhYmVsPlxuICAgIDwvaW9uLWl0ZW0tZGl2aWRlcj5cbiAgfSBAZWxzZSBpZiAoaXRlbS5wYXRoICYmICFpdGVtLmFjdGlvbikge1xuICAgIDwhLS0gdGFwcGFibGUgbGluayAtLT5cbiAgICA8aW9uLWl0ZW1cbiAgICAgIEBmYWRlSW5TbG93QW5pbWF0aW9uXG4gICAgICBjbGFzcz1cInt7IGl0ZW0uY3NzQ2xhc3MgfX0ge3sgaXRlbS5jb2xvciB9fVwiXG4gICAgICBbY2xhc3MubWVudS1pdGVtLXN1Yl09XCJsZXZlbCAhPT0gMFwiXG4gICAgICB0YXBwYWJsZVxuICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5wYXRoXCJcbiAgICAgIFtxdWVyeVBhcmFtc109XCJpdGVtLnBhdGhQYXJhbXNcIlxuICAgICAgcm91dGVyRGlyZWN0aW9uPVwicm9vdFwiXG4gICAgICByb3V0ZXJMaW5rQWN0aXZlPVwic2VsZWN0ZWRcIlxuICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntcbiAgICAgICAgcGF0aHM6IGl0ZW0ucGF0aCA9PT0gJy8nIHx8IGxldmVsICE9PSAwID8gJ2V4YWN0JyA6ICdzdWJzZXQnLFxuICAgICAgICBxdWVyeVBhcmFtczogaXRlbS5wYXRoUGFyYW1zPy50YWIgfHwgbGV2ZWwgPT09IDAgPyAnc3Vic2V0JyA6ICdleGFjdCcsXG4gICAgICAgIG1hdHJpeFBhcmFtczogJ2V4YWN0JyxcbiAgICAgICAgZnJhZ21lbnQ6ICdpZ25vcmVkJyxcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIEBpZiAoaXRlbS5pY29uKSB7XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBbbmFtZV09XCJpdGVtLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgfSBAZWxzZSBpZiAoaXRlbS5tYXRJY29uKSB7XG4gICAgICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIj57eyBpdGVtLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgfVxuICAgICAgPGlvbi1sYWJlbCAqcnhMZXQ9XCJpdGVtLiR0aXRsZTsgbGV0IHRpdGxlXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwidGl0bGU7IGVsc2Ugc2tlbGV0b25UZXh0XCIgW2lubmVySFRNTF09XCJ0aXRsZSB8IHRyYW5zbGF0ZVwiPjwvc3Bhbj5cbiAgICAgICAgPCEtLTxzcGFuICpuZ0lmPVwiX2RlYnVnXCI+IHt7aXRlbS5pZH19PC9zcGFuPi0tPlxuICAgICAgPC9pb24tbGFiZWw+XG5cbiAgICAgIDxpb24tYmFkZ2UgKnJ4SWY9XCJpdGVtLiRiYWRnZTsgbGV0IGJhZGdlXCIgW2NvbG9yXT1cIml0ZW0uJGJhZGdlQ29sb3IgfCBwdXNoXCI+XG4gICAgICAgIHt7YmFkZ2V9fVxuICAgICAgPC9pb24tYmFkZ2U+XG5cbiAgICAgIDwhLS0gcGluIGJ1dHRvbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwaW5CdXR0b247IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtLCBsZXZlbDogbGV2ZWwgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaW9uLWl0ZW0+XG4gIH0gQGVsc2UgaWYgKGl0ZW0uYWN0aW9uKSB7XG4gICAgPCEtLSBhY3Rpb24gLS0+XG4gICAgPGlvbi1pdGVtXG4gICAgICBAZmFkZUluU2xvd0FuaW1hdGlvblxuICAgICAgY2xhc3M9XCJ7eyBpdGVtLmNzc0NsYXNzIH19IHt7IGl0ZW0uY29sb3IgfX0gdGV4dC0xeFwiXG4gICAgICBbY2xhc3MubWVudS1pdGVtLXN1Yl09XCJsZXZlbCAhPT0gMFwiXG4gICAgICB0YXBwYWJsZVxuICAgICAgKGNsaWNrKT1cImV4ZWN1dGVBY3Rpb24oJGV2ZW50LCBpdGVtKVwiXG4gICAgPlxuICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiICpuZ0lmPVwiaXRlbS5pY29uXCIgW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIml0ZW0ubWF0SWNvblwiPnt7IGl0ZW0ubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICA8aW9uLWxhYmVsPlxuICAgICAgICA8c3BhbiAqcnhJZj1cIml0ZW0uJHRpdGxlOyBsZXQgdGl0bGU7IGVsc2U6IHNrZWxldG9uVGV4dFwiIFtpbm5lckhUTUxdPVwidGl0bGUgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICAgIDwhLS08c3BhbiAqbmdJZj1cIl9kZWJ1Z1wiPiB7e2l0ZW0uaWR9fTwvc3Bhbj4tLT5cbiAgICAgIDwvaW9uLWxhYmVsPlxuXG4gICAgICA8aW9uLWJhZGdlICpyeElmPVwiaXRlbS4kYmFkZ2U7IGxldCBiYWRnZVwiIFtjb2xvcl09XCJpdGVtLiRiYWRnZUNvbG9yIHwgcHVzaFwiPlxuICAgICAgICB7e2JhZGdlfX1cbiAgICAgIDwvaW9uLWJhZGdlPlxuXG4gICAgICA8IS0tIHBpbiBidXR0b24gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGluQnV0dG9uOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgbGV2ZWw6IGxldmVsIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2lvbi1pdGVtPlxuICB9XG5cbiAgPCEtLSBjaGlsZHJlbiAtLT5cbiAgQGlmIChpdGVtLiRjaGlsZHJlbikge1xuICAgIDxkaXYgY2xhc3M9XCJzdWItbWVudS1jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKnJ4Rm9yPVwibGV0IGNoaWxkIG9mIGl0ZW0uJGNoaWxkcmVuOyBzdHJhdGVneTogcnhTdHJhdGVneTsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNoaWxkLCBsZXZlbDogbGV2ZWwgKyAxIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3BpbkJ1dHRvbiBsZXQtaXRlbSBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICA8IS0tIHBpbiBidXR0b24gLS0+XG4gIEBpZiAobGV2ZWwgJiYgaXRlbS5waW5uYWJsZSkge1xuICAgIDxpb24tYnV0dG9uXG4gICAgICBzbG90PVwiZW5kXCJcbiAgICAgIHNoYXBlPVwicm91bmRcIlxuICAgICAgZmlsbD1cImNsZWFyXCJcbiAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICBbY2xhc3MudmlzaWJsZS1ob3Zlcl09XCIhaXRlbS5waW5uZWRcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZVBpbm5lZCgkZXZlbnQsIGl0ZW0pXCJcbiAgICA+XG4gICAgICA8IS0tPG1hdC1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBbY29sb3JdPVwiaXRlbS5waW5uZWQgPyAncHJpbWFyeScgOiB1bmRlZmluZWRcIj5wdXNoX3BpbjwvbWF0LWljb24+LS0+XG4gICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIFtuYW1lXT1cIml0ZW0ucGlubmVkID8gJ3BpbicgOiAncGluLW91dGxpbmUnXCI+PC9pb24taWNvbj5cbiAgICA8L2lvbi1idXR0b24+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2tlbGV0b25UZXh0IGxldC13aWR0aCBsZXQtYW5pbWF0ZWQ+XG4gIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwiYW5pbWF0ZWRcIiBbc3R5bGUud2lkdGguJV09XCJ3aWR0aCB8fCA2MFwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG48L25nLXRlbXBsYXRlPlxuIl19