@ecodev/natural 62.1.1 → 62.1.3

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.
@@ -83,6 +83,11 @@ export class NaturalPanelsService {
83
83
  this.updateComponentsPosition();
84
84
  });
85
85
  }
86
+ /**
87
+ * Notify the service to start listening to route changes to open panels
88
+ *
89
+ * @internal
90
+ */
86
91
  start(route) {
87
92
  NaturalPanelsService._opened = true;
88
93
  this.routeSub = route.url.subscribe(segments => {
@@ -136,6 +141,11 @@ export class NaturalPanelsService {
136
141
  this.router.errorHandler = originalErrorHandler;
137
142
  });
138
143
  }
144
+ /**
145
+ * Notify the service that all panels were closed
146
+ *
147
+ * @internal
148
+ */
139
149
  stop() {
140
150
  NaturalPanelsService._opened = false;
141
151
  this.routeSub?.unsubscribe();
@@ -146,6 +156,8 @@ export class NaturalPanelsService {
146
156
  }
147
157
  /**
148
158
  * Go to panel matching given component. Causes an url change.
159
+ *
160
+ * @internal
149
161
  */
150
162
  goToPanelByComponent(component) {
151
163
  this.goToPanelByIndex(this.getPanelIndex(component));
@@ -289,6 +301,13 @@ export class NaturalPanelsService {
289
301
  }
290
302
  return this.dialog.openDialogs.findIndex(dialog => dialog.componentInstance === component);
291
303
  }
304
+ /**
305
+ * Whether the given panel is currently the top, visible, panel. If there are no panels opened at all, then any panel given is considered top, visible, panel.
306
+ */
307
+ isTopPanel(component) {
308
+ const length = this.dialog.openDialogs.length;
309
+ return !length || this.dialog.openDialogs[length - 1]?.componentInstance === component;
310
+ }
292
311
  /**
293
312
  * Repositions panels from start until given index
294
313
  */
@@ -326,4 +345,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
326
345
  providedIn: 'root',
327
346
  }]
328
347
  }], ctorParameters: () => [] });
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvcGFuZWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXBFLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBaUIsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBYSxNQUFNLGlCQUFpQixDQUFDO0FBQzFHLE9BQU8sRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFckUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFLSCxpQkFBaUIsR0FDcEIsTUFBTSxTQUFTLENBQUM7O0FBRWpCLFNBQVMsZ0JBQWdCLENBQUMsUUFBc0I7SUFDNUMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxDQUFxQixFQUFFLENBQXFCO0lBQ2hFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBRUQ7OztHQUdHO0FBSUgsTUFBTSxPQUFPLG9CQUFvQjtJQUNaLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQixRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLFdBQVcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUUvQixVQUFVLEdBQUcsT0FBTyxDQUFDO0lBRXRDOzs7T0FHRztJQUNLLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLE1BQU0sS0FBSyxNQUFNO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDYSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUNyRDs7O09BR0c7SUFDSyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCOzs7T0FHRztJQUNLLFVBQVUsR0FBRyxPQUFPLENBQUM7SUFFN0I7OztPQUdHO0lBQ0ssYUFBYSxHQUF5QixFQUFFLENBQUM7SUFFakQ7O09BRUc7SUFDSyxRQUFRLENBQWdCO0lBRWhDOztPQUVHO0lBQ0ssTUFBTSxDQUFnQjtJQUU5Qjs7T0FFRztJQUNLLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFFM0I7O09BRUc7SUFDSyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBRTNCOzs7T0FHRztJQUNLLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFM0I7UUFDSSxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXRELG9FQUFvRTtRQUNwRSxrQkFBa0I7YUFDYixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQzthQUMzQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMxQixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFxQjtRQUM5QixvQkFBb0IsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsQ0FBQyxFQUFFLFlBQVksZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsT0FBTztZQUNYLENBQUM7WUFFRCx1Q0FBdUM7WUFDdkMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBRVosb0dBQW9HO2dCQUNwRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2dCQUV4RCxPQUFPO1lBQ1gsQ0FBQztZQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUVmLHFHQUFxRztZQUNyRyxXQUFXO1lBQ1gsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUVqRCxtREFBbUQ7WUFDbkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUVwRyx5QkFBeUI7WUFDekIsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdkcsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCwwRUFBMEU7WUFDMUUsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQ3hGLENBQUM7WUFFRiw2QkFBNkI7WUFDN0IsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFeEQsNkJBQTZCO1lBQzdCLE1BQU0sc0JBQXNCLEdBQUcsY0FBYyxDQUN6QyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFDOUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUNoQyxJQUFJLENBQUMsUUFBUSxDQUNoQixDQUFDO1lBRUYsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSyx3QkFBd0IsQ0FBQyxNQUE0QjtRQUN6RCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBRXRELHlFQUF5RTtRQUN6RSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQy9DLENBQUM7UUFFRCwyREFBMkQ7UUFDM0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDaEUsd0ZBQXdGO1lBQ3hGLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLG9CQUFvQixDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLElBQUk7UUFDUCxvQkFBb0IsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CLENBQUMsU0FBK0I7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0I7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ2xDLHVEQUF1RDtRQUN2RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVc7YUFDOUIsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7YUFDaEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEYsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWYsOENBQThDO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGtCQUFrQixDQUFDLEtBQWE7UUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRS9FLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUVoQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWSxDQUFDLFFBQXNCLEVBQUUsTUFBaUM7UUFDMUUsOEZBQThGO1FBQzlGLHNGQUFzRjtRQUN0RixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEUsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUV2RixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWhGLElBQUksZUFBZSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEQsd0JBQXdCO1lBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLElBQUksZUFBZSxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4RCxxQkFBcUI7WUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7UUFDL0YsQ0FBQzthQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4RCxrQkFBa0I7WUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7UUFDbEcsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNLLFVBQVUsQ0FDZCxjQUFvQyxFQUNwQyxVQUFnQztRQUVoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBMEIsQ0FBQztRQUV0RCxtREFBbUQ7UUFDbkQsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV4RSxpREFBaUQ7UUFDakQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUMxQyw4Q0FBOEM7WUFDOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLFFBQVEsR0FBcUI7b0JBQzdCLCtCQUErQjtvQkFDL0IsTUFBTSxFQUFFLE1BQU07b0JBRWQsMkJBQTJCO29CQUMzQixzREFBc0Q7b0JBQ3RELElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUN2QixlQUFlLEVBQUUsRUFBRTtpQkFDdEIsQ0FBQztnQkFFRixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsZUFBZSxFQUFFLENBQUM7b0JBQ3BDLE1BQU0sS0FBSyxHQUFpQzt3QkFDeEMsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLFdBQVcsRUFBRSxNQUFNO3dCQUNuQixjQUFjLEVBQUUsY0FBYzt3QkFDOUIsZ0JBQWdCLEVBQUUsVUFBVTtxQkFDL0IsQ0FBQztvQkFFRixRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdEUsQ0FBQztnQkFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNyRixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQTBCO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQXdDLEVBQUUsQ0FBQztRQUM3RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBRWpDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcscUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMzRixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sU0FBUyxDQUFDLHNCQUEyRCxFQUFFLElBQXNCO1FBQ2pHLE1BQU0sSUFBSSxHQUFvQjtZQUMxQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsaUJBQWlCLEVBQUUsS0FBSztZQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDakQsTUFBTSxFQUFFLE1BQU07WUFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDdEIsUUFBUSxFQUFFO2dCQUNOLEdBQUcsRUFBRSxHQUFHO2dCQUNSLEtBQUssRUFBRSxHQUFHO2FBQ2I7U0FDSixDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQXVCLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXZGLDZDQUE2QztRQUM3QyxTQUFTLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNLLGFBQWEsQ0FBQyxTQUErQjtRQUNqRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRDs7T0FFRztJQUNLLHdCQUF3QjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsT0FBTztRQUNYLENBQUM7UUFFRCx1RkFBdUY7UUFDdkYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDL0MsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkMsa0hBQWtIO1lBQ2xILE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDMUUsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFFN0MsZ0JBQWdCO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTdDLElBQUksUUFBUSxHQUFRLEVBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksRUFBQyxDQUFDO1lBQzlELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDMUMsUUFBUSxHQUFHLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyw2QkFBNkI7WUFDNUYsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0wsQ0FBQzt1R0FuWFEsb0JBQW9COzJHQUFwQixvQkFBb0IsY0FGakIsTUFBTTs7MkZBRVQsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50c30gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtpbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBydW5JbkluamVjdGlvbkNvbnRleHR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7TWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWd9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBEZWZhdWx0VXJsU2VyaWFsaXplciwgTmF2aWdhdGlvbkVycm9yLCBSb3V0ZXIsIFVybFNlZ21lbnR9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2RpZmZlcmVuY2VXaXRoLCBmbGF0dGVuLCBpc0VxdWFsfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdFBhbmVsfSBmcm9tICcuL2Fic3RyYWN0LXBhbmVsJztcbmltcG9ydCB7Z2V0U3RhY2tDb25maWd9IGZyb20gJy4vcGFuZWxzLnVybG1hdGNoZXInO1xuaW1wb3J0IHtcbiAgICBOYXR1cmFsUGFuZWxDb25maWcsXG4gICAgTmF0dXJhbFBhbmVsRGF0YSxcbiAgICBOYXR1cmFsUGFuZWxzQmVmb3JlT3BlblBhbmVsLFxuICAgIE5hdHVyYWxQYW5lbHNSb3V0ZXJSdWxlLFxuICAgIFBhbmVsc0hvb2tzQ29uZmlnLFxufSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gc2VnbWVudHNUb1N0cmluZyhzZWdtZW50czogVXJsU2VnbWVudFtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2VnbWVudHMubWFwKHMgPT4gcy50b1N0cmluZygpKS5qb2luKCcvJyk7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVDb25maWdzKGE6IE5hdHVyYWxQYW5lbENvbmZpZywgYjogTmF0dXJhbFBhbmVsQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGEucm91dGUucGF0aCA9PT0gYi5yb3V0ZS5wYXRoICYmIGEucnVsZSA9PT0gYi5ydWxlICYmIGlzRXF1YWwoYS5wYXJhbXMsIGIucGFyYW1zKTtcbn1cblxuLyoqXG4gKiBUT0RPOiBpbXBsZW1lbnQgcm91dGUgdXBkYXRlIHdoZW4gY2xvc2luZyBkaWFsb2cgd2l0aCBlc2NhcGVcbiAqIEBkeW5hbWljXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxQYW5lbHNTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSBob29rc0NvbmZpZyA9IGluamVjdChQYW5lbHNIb29rc0NvbmZpZyk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhbmVsV2lkdGggPSAnOTYwcHgnO1xuXG4gICAgLyoqXG4gICAgICogQmVjYXVzZSBvZiB0aGlzIHN0YXRpYyBwcm9wZXJ0eSBQYW5lbHMgYXJlICoqbm90KiogY29tcGF0aWJsZSB3aXRoIFNTUi5cbiAgICAgKiBBbmQgd2UgY2Fubm90IG1ha2UgaXQgbm9uLXN0YXRpYywgYmVjYXVzZSBgVXJsTWF0Y2hlcmAgY2Fubm90IGJlIGluamVjdGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIF9vcGVuZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVuZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhbGwgb3BlbiBkaWFsb2cgaGF2ZSBmaW5pc2hlZCBjbG9zaW5nXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGFmdGVyQWxsQ2xvc2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3IgcGFuZWxzIGNvdW50ZXIuIFdvcmtzIG1vcmUgbGlrZSBhbiBJRC5cbiAgICAgKiBJcyB1c2VkIHRvIGdpdmUgYW4gdW5pcXVlIGlkZW50aWZpZXIgdG8gbXVsdGlwbGUgc2ltaWxhciBwYW5lbHMgY29uZmlndXJhdGlvbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvdW50ZXIgPSAxO1xuICAgIC8qKlxuICAgICAqIENsYXNzIGFwcGxpZWQgdG8gZGlhbG9nIG92ZXJsYXkgcmVsYXRlZCB3aXRoIHBhbmVsc1xuICAgICAqIElmIGNoYW5nZSwgY2hhbmdlIENTUyB0b29cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsQ2xhc3MgPSAncGFuZWwnO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHBhbmVscyBzZXR1cCBiZWZvcmUgbmF2aWdhdGlvbiBjaGFuZ2UuXG4gICAgICogVXNlZCB0byBkZXRlY3QgcGFuZWxzIG9wZW5pbmdzL2Nsb3NpbmdzIGFuZCBhZGFwdCBmb3IgbmV3IGNvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIG9sZEZ1bGxDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3Igc3Vic2NyaXB0aW9uIHN0b3BcbiAgICAgKi9cbiAgICBwcml2YXRlIHJvdXRlU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHN1YnNjcmlwdGlvbiBzdG9wXG4gICAgICovXG4gICAgcHJpdmF0ZSBuYXZTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBIb3Jpem9udGFsIGdhcHMgYmV0d2VlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsc09mZnNldEggPSAzNTtcblxuICAgIC8qKlxuICAgICAqIFZlcnRpY2FsIGdhcHMgYmV0d2VlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsc09mZnNldFYgPSA0MDtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIG9mIHByZXZpb3VzIHNjcmVlbiBzaXplXG4gICAgICogVXNlZCB0byBjaGFuZ2UgcGFuZWxzIHN0YWNrIG9yaWVudGF0aW9uIG9uIHNtYWxsIHNjcmVlbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmVydGljYWwgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludE9ic2VydmVyID0gaW5qZWN0KEJyZWFrcG9pbnRPYnNlcnZlcik7XG5cbiAgICAgICAgLy8gIFdhdGNoIG1lZGlhIHRvIGtub3cgaWYgZGlzcGxheSBwYW5lbHMgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHlcbiAgICAgICAgYnJlYWtwb2ludE9ic2VydmVyXG4gICAgICAgICAgICAub2JzZXJ2ZShCcmVha3BvaW50cy5YU21hbGwpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVydGljYWwgPSByZXN1bHQubWF0Y2hlcztcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0KHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xuICAgICAgICBOYXR1cmFsUGFuZWxzU2VydmljZS5fb3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3V0ZVN1YiA9IHJvdXRlLnVybC5zdWJzY3JpYmUoc2VnbWVudHMgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQYW5lbHMoc2VnbWVudHMsIHJvdXRlLnNuYXBzaG90LmRhdGEucGFuZWxzUm91dGVzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5uYXZTdWIgPSB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ID0+IHtcbiAgICAgICAgICAgIGlmICghKGV2IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWJvcnQgYW5kIHByb3BhZ2F0ZSBuYXZpZ2F0aW9uIGVycm9yXG4gICAgICAgICAgICBpZiAoZXYudXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcblxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgaGFja2lzaDogd2UgaGFyZGNvZGUgYW4gaW1wb3NzaWJsZSB1cmwgdG8gdHJpZ2dlciBub3JtYWwgbmF2aWdhdGlvbiBlcnJvciBtZWNoYW5pc21cbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYW5lbHMtcmVhY2hlZC1pbnZhbGlkLXVybCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvdW50ZXIrKztcblxuICAgICAgICAgICAgLy8gcGMgc3RhbmRzIGZvciBcInBhbmVsIGNvdW50ZXJcIiwgcmVxdWlyZWQgdG8gZ2l2ZSBhbiBpZGVudGlmaWNhdGlvbiB0byBwYW5lbHMgd2l0aCBleGFjdCBzYW1lIGNvbmZpZ1xuICAgICAgICAgICAgLy8gRS5nIC9uZXdcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZFVybCA9IGV2LnVybCArICc7cGM9JyArIHRoaXMuY291bnRlcjtcblxuICAgICAgICAgICAgLy8gU2VnbWVudHMgbWF0Y2hpbmcgZnJvbSB3YW50ZWQgdXJsLiBFLmcgfiBbJ25ldyddXG4gICAgICAgICAgICBjb25zdCB3YW50ZWRVclNlZ21lbnRzID0gbmV3IERlZmF1bHRVcmxTZXJpYWxpemVyKCkucGFyc2Uod2FudGVkVXJsKS5yb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHM7XG5cbiAgICAgICAgICAgIC8vIERvbid0IG1hdGNoIGFueSBjb25maWdcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKHdhbnRlZFVyU2VnbWVudHMsIHJvdXRlLnNuYXBzaG90LmRhdGEucGFuZWxzUm91dGVzLCB0aGlzLmluamVjdG9yKTtcblxuICAgICAgICAgICAgaWYgKHdhbnRlZENvbmZpZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRDb25maWdUb0N1cnJlbnRVcmwod2FudGVkQ29uZmlnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IGFjdGl2YXRlZCByb3V0ZXMuIEUuZyBbJ29iamVjdGl2ZScsICdvYmplY3RpdmUnLCAxMjMsICdyaXNrJ11cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWdtZW50cyA9IGZsYXR0ZW4oXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubWFwKGQgPT4gZC5jb21wb25lbnRJbnN0YW5jZS5wYW5lbERhdGEuY29uZmlnLnJvdXRlLnNlZ21lbnRzKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIExhc3Qgc2VnbWVudC4gRS5nIFsncmlzayddXG4gICAgICAgICAgICBjb25zdCBsYXN0T2ZDdXJyZW50U2VnbWVudHMgPSBjdXJyZW50U2VnbWVudHMuc2xpY2UoLTEpO1xuXG4gICAgICAgICAgICAvLyBDb25maWcgZm9yIFsncmlzaycsICduZXcnXVxuICAgICAgICAgICAgY29uc3QgY3VycmVudEFuZFdhbnRlZENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKFxuICAgICAgICAgICAgICAgIGxhc3RPZkN1cnJlbnRTZWdtZW50cy5jb25jYXQod2FudGVkVXJTZWdtZW50cyksXG4gICAgICAgICAgICAgICAgcm91dGUuc25hcHNob3QuZGF0YS5wYW5lbHNSb3V0ZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGVuZENvbmZpZ1RvQ3VycmVudFVybChjdXJyZW50QW5kV2FudGVkQ29uZmlnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlcyBnaXZlbiBjb25maWd1cmF0aW9uIHRvIGFkZCBpbiB0aGUgZW5kIG9mIGN1cnJlbnQgdXJsXG4gICAgICogTmV1dHJhbGl6ZXMgcm91dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBlbmRDb25maWdUb0N1cnJlbnRVcmwoY29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcmlnaW5hbEVycm9ySGFuZGxlciA9IHRoaXMucm91dGVyLmVycm9ySGFuZGxlcjtcblxuICAgICAgICAvLyBOdWxsaWZ5IGVycm9yIGhhbmRsZXIgKHdpbGwgYmUgZGUtbmV1dHJhbGl6ZWQgYWZ0ZXIgcm91dGUgcmVkaXJlY3Rpb24pXG4gICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmVycm9ySGFuZGxlciA9ICgpID0+IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5hdmlnYXRlIHRvIHNhbWUgdXJsICsgL3Jpc2svbmV3IFJlc3VsdCA6IC9yaXNrL3Jpc2svbmV3XG4gICAgICAgIGNvbnN0IG5ld1VybCA9IGNvbmZpZy5tYXAoY29uZiA9PiBzZWdtZW50c1RvU3RyaW5nKGNvbmYucm91dGUuc2VnbWVudHMpKS5qb2luKCcvJyk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJvdXRlci51cmwgKyAnLycgKyBuZXdVcmwpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gQWZ0ZXIgbmF2aWdhdGlvbiBoYXMgZW5kZWQsIHJlc3RvcmUgb3JpZ2luYWwgZXJyb3IgaGFuZGxlciBiZWNhdXNlIGhlJ3Mgbm90IGEgYmFkIGd1eVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIuZXJyb3JIYW5kbGVyID0gb3JpZ2luYWxFcnJvckhhbmRsZXI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdG9wKCk6IHZvaWQge1xuICAgICAgICBOYXR1cmFsUGFuZWxzU2VydmljZS5fb3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucm91dGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubmF2U3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICAgICAgICB0aGlzLm9sZEZ1bGxDb25maWcgPSBbXTtcbiAgICAgICAgdGhpcy5hZnRlckFsbENsb3NlZC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR28gdG8gcGFuZWwgbWF0Y2hpbmcgZ2l2ZW4gY29tcG9uZW50LiBDYXVzZXMgYW4gdXJsIGNoYW5nZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ29Ub1BhbmVsQnlDb21wb25lbnQoY29tcG9uZW50OiBOYXR1cmFsQWJzdHJhY3RQYW5lbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdvVG9QYW5lbEJ5SW5kZXgodGhpcy5nZXRQYW5lbEluZGV4KGNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdvIHRvIHBhbmVsIG1hdGNoaW5nIGdpdmVuIGNvbXBvbmVudC4gQ2F1c2VzIGFuIHVybCBjaGFuZ2UuXG4gICAgICovXG4gICAgcHVibGljIGdvVG9QZW51bHRpbWF0ZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdvVG9QYW5lbEJ5SW5kZXgodGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgdGhlIG5ldyB1cmwgdGhhdCBvbmx5IGluY2x1ZGVzIHRoZSBzZWdtZW50cyBmcm9tIHRoZSBwYW5lbHMgd2Ugd2FudCB0byBzdGF5IG9wZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdvVG9QYW5lbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBFeHRyYWN0cyB1cmwgc2VnbWVudHMgZnJvbSBuZXh0IHBhbmVsIHVudGlsIGxhc3Qgb25lXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzXG4gICAgICAgICAgICAuc2xpY2UoaW5kZXggKyAxKVxuICAgICAgICAgICAgLm1hcChkaWFsb2cgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50c1RvU3RyaW5nKGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZS5wYW5lbERhdGEuY29uZmlnLnJvdXRlLnNlZ21lbnRzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignLycpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBleHRyYSBzZWdtZW50cyBhbmQgcmVkaXJlY3RzIHRvIHJvb3RcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJvdXRlci51cmwucmVwbGFjZSgnLycgKyB1cmwsICcnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0aW5nIGEgcGFuZWwgaXMgZXF1aXZhbGVudCB0byBjbG9zZSBhbGwgdGhvc2UgdGhhdCBhcmUgaW4gZnJvbnQgb2YgaGltXG4gICAgICogQHBhcmFtIGluZGV4IG9mIHBhbmVsIGluIHN0YWNrLiBUaGUgbW9zdCBiZWhpbmQgKHRoZSBmaXJzdCBvbmUpIGlzIDAuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RQYW5lbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBsYXN0RGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NbdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgLy8gVXBkYXRlIG5ldyBwYW5lbHMgc2V0IHBvc2l0aW9uc1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAxOyBpID49IGluZGV4ICsgMTsgaS0tKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1tpXS5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxhc3REaWFsb2cuYWZ0ZXJDbG9zZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVuIG5ldyBwYW5lbHMgaWYgdXJsIGhhcyBjaGFuZ2VkIHdpdGggbmV3IHNlZ21lbnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVQYW5lbHMoc2VnbWVudHM6IFVybFNlZ21lbnRbXSwgcm91dGVzOiBOYXR1cmFsUGFuZWxzUm91dGVyUnVsZVtdKTogdm9pZCB7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB1cmwgc2VnbWVudHMgaW50byBhIGNvbmZpZyB3aXRoIGNvbXBvbmVudCBuYW1lIGFuZCBJRCBpZiBwcm92aWRlZCBpbiBuZXh0IHNlZ21lbnRcbiAgICAgICAgLy8gUmV0dXJucyBhbiBhcnJheSBvZiBjb25maWdzLCBlYWNoIGNvbmZpZyByZXByZXNlbnRzIHRoZSBjb250ZW50IHJlbGF0aXZlIHRvIGEgcGFuZWxcbiAgICAgICAgY29uc3QgbmV3RnVsbENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKHNlZ21lbnRzLCByb3V0ZXMsIHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICBjb25zdCBjb25maWdzVG9SZW1vdmUgPSBkaWZmZXJlbmNlV2l0aCh0aGlzLm9sZEZ1bGxDb25maWcsIG5ld0Z1bGxDb25maWcsIGNvbXBhcmVDb25maWdzKTtcbiAgICAgICAgY29uc3QgY29uZmlnc1RvQWRkID0gZGlmZmVyZW5jZVdpdGgobmV3RnVsbENvbmZpZywgdGhpcy5vbGRGdWxsQ29uZmlnLCBjb21wYXJlQ29uZmlncyk7XG5cbiAgICAgICAgY29uc3QgaW5kZXhPZk5leHRQYW5lbCA9IHRoaXMub2xkRnVsbENvbmZpZy5sZW5ndGggLSBjb25maWdzVG9SZW1vdmUubGVuZ3RoIC0gMTtcblxuICAgICAgICBpZiAoY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAmJiBjb25maWdzVG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBBZGQgYW5kIHJlbW92ZSBwYW5lbHNcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UGFuZWxCeUluZGV4KGluZGV4T2ZOZXh0UGFuZWwpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWxzKGNvbmZpZ3NUb0FkZCwgbmV3RnVsbENvbmZpZykuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAmJiAhY29uZmlnc1RvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gb25seSByZW1vdmUgcGFuZWxzXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFBhbmVsQnlJbmRleChpbmRleE9mTmV4dFBhbmVsKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggJiYgY29uZmlnc1RvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gb25seSBhZGQgcGFuZWxzXG4gICAgICAgICAgICB0aGlzLm9wZW5QYW5lbHMoY29uZmlnc1RvQWRkLCBuZXdGdWxsQ29uZmlnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9sZEZ1bGxDb25maWcgPSBuZXdGdWxsQ29uZmlnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgYWxsIHNlcnZpY2VzLCB0aGVuIG9wZW4gcGFuZWxzXG4gICAgICovXG4gICAgcHJpdmF0ZSBvcGVuUGFuZWxzKFxuICAgICAgICBuZXdJdGVtc0NvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnW10sXG4gICAgICAgIGZ1bGxDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdLFxuICAgICk6IE9ic2VydmFibGU8T2JzZXJ2YWJsZTxhbnk+IHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8T2JzZXJ2YWJsZTxhbnk+IHwgbnVsbD4oKTtcblxuICAgICAgICAvLyBSZXNvbHZlIGV2ZXJ5dGhpbmcgYmVmb3JlIG9wZW5pbmcgYSBzaW5nbGUgcGFuZWxcbiAgICAgICAgY29uc3QgcmVzb2x2ZXMgPSBuZXdJdGVtc0NvbmZpZy5tYXAoY29uZiA9PiB0aGlzLmdldFJlc29sdmVkRGF0YShjb25mKSk7XG5cbiAgICAgICAgLy8gRm9ya0pvaW4gZW1pdHMgd2hlbiBhbGwgcHJvbWlzZXMgYXJlIGV4ZWN1dGVkO1xuICAgICAgICBmb3JrSm9pbihyZXNvbHZlcykuc3Vic2NyaWJlKHJlc29sdmVkUmVzdWx0ID0+IHtcbiAgICAgICAgICAgIC8vIEZvciBlYWNoIG5ldyBjb25maWcgZW50cnksIG9wZW4gYSBuZXcgcGFuZWxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3SXRlbXNDb25maWcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSBuZXdJdGVtc0NvbmZpZ1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgaXRlbURhdGE6IE5hdHVyYWxQYW5lbERhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENvbmZpZyBvZiBhY3R1YWwgcGFuZWwgcm91dGVcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSByZXNvbHZlZCBieSBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSBpbiBjb21wb25lbnQgYnkgY2FsbGluZyB0aGlzLnBhbmVsRGF0YS5kYXRhLnh5elxuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZXNvbHZlZFJlc3VsdFtpXSxcbiAgICAgICAgICAgICAgICAgICAgbGlua2FibGVPYmplY3RzOiBbXSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaG9va3NDb25maWc/LmJlZm9yZU9wZW5QYW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudDogTmF0dXJhbFBhbmVsc0JlZm9yZU9wZW5QYW5lbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFJlc3VsdDogcmVzb2x2ZWRSZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsUGFuZWxzQ29uZmlnOiBmdWxsQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhID0gdGhpcy5ob29rc0NvbmZpZy5iZWZvcmVPcGVuUGFuZWwodGhpcy5pbmplY3RvciwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub3BlblBhbmVsKGNvbmZpZy5jb21wb25lbnQsIGl0ZW1EYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NbdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMV0uYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlc29sdmVkRGF0YShjb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZyk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICAgICAgaWYgKCFjb25maWcucmVzb2x2ZSB8fCAoY29uZmlnLnJlc29sdmUgJiYgT2JqZWN0LmtleXMoY29uZmlnLnJlc29sdmUpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNvbHZlS2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZy5yZXNvbHZlKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhOiBSZWNvcmQ8c3RyaW5nLCBPYnNlcnZhYmxlPHVua25vd24+PiA9IHt9O1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IGNvbmZpZy5pbmplY3RvcjtcblxuICAgICAgICBpZiAoaW5qZWN0b3IpIHtcbiAgICAgICAgICAgIHJlc29sdmVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlZERhdGFba2V5XSA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4gY29uZmlnLnJlc29sdmVba2V5XShjb25maWcpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHJlc29sdmVkRGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuUGFuZWwoY29tcG9uZW50T3JUZW1wbGF0ZVJlZjogQ29tcG9uZW50VHlwZTxOYXR1cmFsQWJzdHJhY3RQYW5lbD4sIGRhdGE6IE5hdHVyYWxQYW5lbERhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZjogTWF0RGlhbG9nQ29uZmlnID0ge1xuICAgICAgICAgICAgcGFuZWxDbGFzczogdGhpcy5wYW5lbENsYXNzLFxuICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMucGFuZWxXaWR0aCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgdG9wOiAnMCcsXG4gICAgICAgICAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxOYXR1cmFsQWJzdHJhY3RQYW5lbD4oY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwgY29uZik7XG5cbiAgICAgICAgLy8gUGFuZWxpc2FibGUgaW50ZXJmYWNlIGF0dHJpYnV0ZXMvZnVuY3Rpb25zXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5pbml0UGFuZWwoZGF0YSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmJlZm9yZUNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0UGFuZWxJbmRleChkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFuZWxCeUluZGV4KGluZGV4IC0gMSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBwYW5lbCBwb3NpdGlvbiAoaW5kZXgpIGJ5IHNlYXJjaGluZyBtYXRjaGluZyBjb21wb25lbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFBhbmVsSW5kZXgoY29tcG9uZW50OiBOYXR1cmFsQWJzdHJhY3RQYW5lbCk6IG51bWJlciB7XG4gICAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MuZmluZEluZGV4KGRpYWxvZyA9PiBkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UgPT09IGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwb3NpdGlvbnMgcGFuZWxzIGZyb20gc3RhcnQgdW50aWwgZ2l2ZW4gaW5kZXhcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlbGVjdCB0aGUgcGFuZWxzIHRoYXQgYXJlIHN0aWxsIG9wZW5lZCwgaWdub3JlIHRoZSBvdGhlcnMgYmVjYXVzZSB0aGV5J2xsIGJlIGNsb3NlZFxuICAgICAgICBjb25zdCBhZmZlY3RlZEVsZW1lbnRzID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3M7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWZmZWN0ZWRFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nID0gYWZmZWN0ZWRFbGVtZW50c1tpXTtcblxuICAgICAgICAgICAgLy8gU2V0IGFsbCBwYW5lbHMgYXMgXCJoaWRkZW5cIiBleGNlcHQgbGFzdCBvbmUuIElzRnJvbnRQYW5lbCBhdHRyaWJ1dGUgY2F1c2VzIGEgQ1NTIHRoYXQgaGlkZXMgYm9keSB2aWEgaG9zdGJpbmRpbmdcbiAgICAgICAgICAgIGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZS5pc0Zyb250UGFuZWwgPSBpID09PSBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UucGFuZWxTZXJ2aWNlID0gdGhpcztcblxuICAgICAgICAgICAgLy8gQXNzaWduIG9mZnNldFxuICAgICAgICAgICAgY29uc3QgZGVlcCA9IGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoIC0gMSAtIGk7XG5cbiAgICAgICAgICAgIGxldCBwb3NpdGlvbjogYW55ID0ge3JpZ2h0OiBkZWVwICogdGhpcy5wYW5lbHNPZmZzZXRIICsgJ3B4J307XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZlcnRpY2FsICYmIGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvcCA9IGkgKiB0aGlzLnBhbmVsc09mZnNldFYgKyAncHgnO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0ge3RvcDogdG9wLCByaWdodDogJzBweCd9O1xuICAgICAgICAgICAgICAgIGRpYWxvZy51cGRhdGVTaXplKHRoaXMucGFuZWxXaWR0aCwgYGNhbGMoMTAwJSAtICR7dG9wfSlgKTsgLy8gY2FsbCBiZWZvcmUgdXBkYXRlUG9zaXRpb25cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nLnVwZGF0ZVNpemUodGhpcy5wYW5lbFdpZHRoLCBgMTAwJWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaWFsb2cudXBkYXRlUG9zaXRpb24ocG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
348
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvcGFuZWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXBFLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBaUIsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBYSxNQUFNLGlCQUFpQixDQUFDO0FBQzFHLE9BQU8sRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFckUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFLSCxpQkFBaUIsR0FDcEIsTUFBTSxTQUFTLENBQUM7O0FBRWpCLFNBQVMsZ0JBQWdCLENBQUMsUUFBc0I7SUFDNUMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxDQUFxQixFQUFFLENBQXFCO0lBQ2hFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUss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LEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEVBQUMsQ0FBQztZQUM5RCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQzFDLFFBQVEsR0FBRyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDO2dCQUNwQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsZUFBZSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO1lBQzVGLENBQUM7aUJBQU0sQ0FBQztnQkFDSixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNMLENBQUM7dUdBdllRLG9CQUFvQjsyR0FBcEIsb0JBQW9CLGNBRmpCLE1BQU07OzJGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHN9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgcnVuSW5JbmplY3Rpb25Db250ZXh0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge01hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgRGVmYXVsdFVybFNlcmlhbGl6ZXIsIE5hdmlnYXRpb25FcnJvciwgUm91dGVyLCBVcmxTZWdtZW50fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtkaWZmZXJlbmNlV2l0aCwgZmxhdHRlbiwgaXNFcXVhbH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7Zm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RQYW5lbH0gZnJvbSAnLi9hYnN0cmFjdC1wYW5lbCc7XG5pbXBvcnQge2dldFN0YWNrQ29uZmlnfSBmcm9tICcuL3BhbmVscy51cmxtYXRjaGVyJztcbmltcG9ydCB7XG4gICAgTmF0dXJhbFBhbmVsQ29uZmlnLFxuICAgIE5hdHVyYWxQYW5lbERhdGEsXG4gICAgTmF0dXJhbFBhbmVsc0JlZm9yZU9wZW5QYW5lbCxcbiAgICBOYXR1cmFsUGFuZWxzUm91dGVyUnVsZSxcbiAgICBQYW5lbHNIb29rc0NvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIHNlZ21lbnRzVG9TdHJpbmcoc2VnbWVudHM6IFVybFNlZ21lbnRbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNlZ21lbnRzLm1hcChzID0+IHMudG9TdHJpbmcoKSkuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlQ29uZmlncyhhOiBOYXR1cmFsUGFuZWxDb25maWcsIGI6IE5hdHVyYWxQYW5lbENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhLnJvdXRlLnBhdGggPT09IGIucm91dGUucGF0aCAmJiBhLnJ1bGUgPT09IGIucnVsZSAmJiBpc0VxdWFsKGEucGFyYW1zLCBiLnBhcmFtcyk7XG59XG5cbi8qKlxuICogVE9ETzogaW1wbGVtZW50IHJvdXRlIHVwZGF0ZSB3aGVuIGNsb3NpbmcgZGlhbG9nIHdpdGggZXNjYXBlXG4gKiBAZHluYW1pY1xuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsUGFuZWxzU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICAgIHByaXZhdGUgaG9va3NDb25maWcgPSBpbmplY3QoUGFuZWxzSG9va3NDb25maWcpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYW5lbFdpZHRoID0gJzk2MHB4JztcblxuICAgIC8qKlxuICAgICAqIEJlY2F1c2Ugb2YgdGhpcyBzdGF0aWMgcHJvcGVydHkgUGFuZWxzIGFyZSAqKm5vdCoqIGNvbXBhdGlibGUgd2l0aCBTU1IuXG4gICAgICogQW5kIHdlIGNhbm5vdCBtYWtlIGl0IG5vbi1zdGF0aWMsIGJlY2F1c2UgYFVybE1hdGNoZXJgIGNhbm5vdCBiZSBpbmplY3RlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN0YXRpYyBfb3BlbmVkID0gZmFsc2U7XG4gICAgcHVibGljIHN0YXRpYyBnZXQgb3BlbmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSB0aGF0IGVtaXRzIHdoZW4gYWxsIG9wZW4gZGlhbG9nIGhhdmUgZmluaXNoZWQgY2xvc2luZ1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhZnRlckFsbENsb3NlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHBhbmVscyBjb3VudGVyLiBXb3JrcyBtb3JlIGxpa2UgYW4gSUQuXG4gICAgICogSXMgdXNlZCB0byBnaXZlIGFuIHVuaXF1ZSBpZGVudGlmaWVyIHRvIG11bHRpcGxlIHNpbWlsYXIgcGFuZWxzIGNvbmZpZ3VyYXRpb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb3VudGVyID0gMTtcbiAgICAvKipcbiAgICAgKiBDbGFzcyBhcHBsaWVkIHRvIGRpYWxvZyBvdmVybGF5IHJlbGF0ZWQgd2l0aCBwYW5lbHNcbiAgICAgKiBJZiBjaGFuZ2UsIGNoYW5nZSBDU1MgdG9vXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYW5lbENsYXNzID0gJ3BhbmVsJztcblxuICAgIC8qKlxuICAgICAqIENhY2hlIGZvciBwYW5lbHMgc2V0dXAgYmVmb3JlIG5hdmlnYXRpb24gY2hhbmdlLlxuICAgICAqIFVzZWQgdG8gZGV0ZWN0IHBhbmVscyBvcGVuaW5ncy9jbG9zaW5ncyBhbmQgYWRhcHQgZm9yIG5ldyBjb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbGRGdWxsQ29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHN1YnNjcmlwdGlvbiBzdG9wXG4gICAgICovXG4gICAgcHJpdmF0ZSByb3V0ZVN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIGZvciBzdWJzY3JpcHRpb24gc3RvcFxuICAgICAqL1xuICAgIHByaXZhdGUgbmF2U3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogSG9yaXpvbnRhbCBnYXBzIGJldHdlZW4gcGFuZWxzXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYW5lbHNPZmZzZXRIID0gMzU7XG5cbiAgICAvKipcbiAgICAgKiBWZXJ0aWNhbCBnYXBzIGJldHdlZW4gcGFuZWxzXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYW5lbHNPZmZzZXRWID0gNDA7XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZSBvZiBwcmV2aW91cyBzY3JlZW4gc2l6ZVxuICAgICAqIFVzZWQgdG8gY2hhbmdlIHBhbmVscyBzdGFjayBvcmllbnRhdGlvbiBvbiBzbWFsbCBzY3JlZW5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc1ZlcnRpY2FsID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnRPYnNlcnZlciA9IGluamVjdChCcmVha3BvaW50T2JzZXJ2ZXIpO1xuXG4gICAgICAgIC8vICBXYXRjaCBtZWRpYSB0byBrbm93IGlmIGRpc3BsYXkgcGFuZWxzIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5XG4gICAgICAgIGJyZWFrcG9pbnRPYnNlcnZlclxuICAgICAgICAgICAgLm9ic2VydmUoQnJlYWtwb2ludHMuWFNtYWxsKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZlcnRpY2FsID0gcmVzdWx0Lm1hdGNoZXM7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vdGlmeSB0aGUgc2VydmljZSB0byBzdGFydCBsaXN0ZW5pbmcgdG8gcm91dGUgY2hhbmdlcyB0byBvcGVuIHBhbmVsc1xuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHN0YXJ0KHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xuICAgICAgICBOYXR1cmFsUGFuZWxzU2VydmljZS5fb3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3V0ZVN1YiA9IHJvdXRlLnVybC5zdWJzY3JpYmUoc2VnbWVudHMgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQYW5lbHMoc2VnbWVudHMsIHJvdXRlLnNuYXBzaG90LmRhdGEucGFuZWxzUm91dGVzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5uYXZTdWIgPSB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ID0+IHtcbiAgICAgICAgICAgIGlmICghKGV2IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWJvcnQgYW5kIHByb3BhZ2F0ZSBuYXZpZ2F0aW9uIGVycm9yXG4gICAgICAgICAgICBpZiAoZXYudXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcblxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgaGFja2lzaDogd2UgaGFyZGNvZGUgYW4gaW1wb3NzaWJsZSB1cmwgdG8gdHJpZ2dlciBub3JtYWwgbmF2aWdhdGlvbiBlcnJvciBtZWNoYW5pc21cbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYW5lbHMtcmVhY2hlZC1pbnZhbGlkLXVybCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvdW50ZXIrKztcblxuICAgICAgICAgICAgLy8gcGMgc3RhbmRzIGZvciBcInBhbmVsIGNvdW50ZXJcIiwgcmVxdWlyZWQgdG8gZ2l2ZSBhbiBpZGVudGlmaWNhdGlvbiB0byBwYW5lbHMgd2l0aCBleGFjdCBzYW1lIGNvbmZpZ1xuICAgICAgICAgICAgLy8gRS5nIC9uZXdcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZFVybCA9IGV2LnVybCArICc7cGM9JyArIHRoaXMuY291bnRlcjtcblxuICAgICAgICAgICAgLy8gU2VnbWVudHMgbWF0Y2hpbmcgZnJvbSB3YW50ZWQgdXJsLiBFLmcgfiBbJ25ldyddXG4gICAgICAgICAgICBjb25zdCB3YW50ZWRVclNlZ21lbnRzID0gbmV3IERlZmF1bHRVcmxTZXJpYWxpemVyKCkucGFyc2Uod2FudGVkVXJsKS5yb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHM7XG5cbiAgICAgICAgICAgIC8vIERvbid0IG1hdGNoIGFueSBjb25maWdcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKHdhbnRlZFVyU2VnbWVudHMsIHJvdXRlLnNuYXBzaG90LmRhdGEucGFuZWxzUm91dGVzLCB0aGlzLmluamVjdG9yKTtcblxuICAgICAgICAgICAgaWYgKHdhbnRlZENvbmZpZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRDb25maWdUb0N1cnJlbnRVcmwod2FudGVkQ29uZmlnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IGFjdGl2YXRlZCByb3V0ZXMuIEUuZyBbJ29iamVjdGl2ZScsICdvYmplY3RpdmUnLCAxMjMsICdyaXNrJ11cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWdtZW50cyA9IGZsYXR0ZW4oXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubWFwKGQgPT4gZC5jb21wb25lbnRJbnN0YW5jZS5wYW5lbERhdGEuY29uZmlnLnJvdXRlLnNlZ21lbnRzKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIExhc3Qgc2VnbWVudC4gRS5nIFsncmlzayddXG4gICAgICAgICAgICBjb25zdCBsYXN0T2ZDdXJyZW50U2VnbWVudHMgPSBjdXJyZW50U2VnbWVudHMuc2xpY2UoLTEpO1xuXG4gICAgICAgICAgICAvLyBDb25maWcgZm9yIFsncmlzaycsICduZXcnXVxuICAgICAgICAgICAgY29uc3QgY3VycmVudEFuZFdhbnRlZENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKFxuICAgICAgICAgICAgICAgIGxhc3RPZkN1cnJlbnRTZWdtZW50cy5jb25jYXQod2FudGVkVXJTZWdtZW50cyksXG4gICAgICAgICAgICAgICAgcm91dGUuc25hcHNob3QuZGF0YS5wYW5lbHNSb3V0ZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGVuZENvbmZpZ1RvQ3VycmVudFVybChjdXJyZW50QW5kV2FudGVkQ29uZmlnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlcyBnaXZlbiBjb25maWd1cmF0aW9uIHRvIGFkZCBpbiB0aGUgZW5kIG9mIGN1cnJlbnQgdXJsXG4gICAgICogTmV1dHJhbGl6ZXMgcm91dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBlbmRDb25maWdUb0N1cnJlbnRVcmwoY29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcmlnaW5hbEVycm9ySGFuZGxlciA9IHRoaXMucm91dGVyLmVycm9ySGFuZGxlcjtcblxuICAgICAgICAvLyBOdWxsaWZ5IGVycm9yIGhhbmRsZXIgKHdpbGwgYmUgZGUtbmV1dHJhbGl6ZWQgYWZ0ZXIgcm91dGUgcmVkaXJlY3Rpb24pXG4gICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmVycm9ySGFuZGxlciA9ICgpID0+IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5hdmlnYXRlIHRvIHNhbWUgdXJsICsgL3Jpc2svbmV3IFJlc3VsdCA6IC9yaXNrL3Jpc2svbmV3XG4gICAgICAgIGNvbnN0IG5ld1VybCA9IGNvbmZpZy5tYXAoY29uZiA9PiBzZWdtZW50c1RvU3RyaW5nKGNvbmYucm91dGUuc2VnbWVudHMpKS5qb2luKCcvJyk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJvdXRlci51cmwgKyAnLycgKyBuZXdVcmwpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gQWZ0ZXIgbmF2aWdhdGlvbiBoYXMgZW5kZWQsIHJlc3RvcmUgb3JpZ2luYWwgZXJyb3IgaGFuZGxlciBiZWNhdXNlIGhlJ3Mgbm90IGEgYmFkIGd1eVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIuZXJyb3JIYW5kbGVyID0gb3JpZ2luYWxFcnJvckhhbmRsZXI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vdGlmeSB0aGUgc2VydmljZSB0aGF0IGFsbCBwYW5lbHMgd2VyZSBjbG9zZWRcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzdG9wKCk6IHZvaWQge1xuICAgICAgICBOYXR1cmFsUGFuZWxzU2VydmljZS5fb3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucm91dGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubmF2U3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICAgICAgICB0aGlzLm9sZEZ1bGxDb25maWcgPSBbXTtcbiAgICAgICAgdGhpcy5hZnRlckFsbENsb3NlZC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR28gdG8gcGFuZWwgbWF0Y2hpbmcgZ2l2ZW4gY29tcG9uZW50LiBDYXVzZXMgYW4gdXJsIGNoYW5nZS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnb1RvUGFuZWxCeUNvbXBvbmVudChjb21wb25lbnQ6IE5hdHVyYWxBYnN0cmFjdFBhbmVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhbmVsQnlJbmRleCh0aGlzLmdldFBhbmVsSW5kZXgoY29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR28gdG8gcGFuZWwgbWF0Y2hpbmcgZ2l2ZW4gY29tcG9uZW50LiBDYXVzZXMgYW4gdXJsIGNoYW5nZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ29Ub1BlbnVsdGltYXRlUGFuZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ29Ub1BhbmVsQnlJbmRleCh0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgbmV3IHVybCB0aGF0IG9ubHkgaW5jbHVkZXMgdGhlIHNlZ21lbnRzIGZyb20gdGhlIHBhbmVscyB3ZSB3YW50IHRvIHN0YXkgb3BlblxuICAgICAqL1xuICAgIHByaXZhdGUgZ29Ub1BhbmVsQnlJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIEV4dHJhY3RzIHVybCBzZWdtZW50cyBmcm9tIG5leHQgcGFuZWwgdW50aWwgbGFzdCBvbmVcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NcbiAgICAgICAgICAgIC5zbGljZShpbmRleCArIDEpXG4gICAgICAgICAgICAubWFwKGRpYWxvZyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRzVG9TdHJpbmcoZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlLnBhbmVsRGF0YS5jb25maWcucm91dGUuc2VnbWVudHMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcvJyk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGV4dHJhIHNlZ21lbnRzIGFuZCByZWRpcmVjdHMgdG8gcm9vdFxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMucm91dGVyLnVybC5yZXBsYWNlKCcvJyArIHVybCwgJycpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RpbmcgYSBwYW5lbCBpcyBlcXVpdmFsZW50IHRvIGNsb3NlIGFsbCB0aG9zZSB0aGF0IGFyZSBpbiBmcm9udCBvZiBoaW1cbiAgICAgKiBAcGFyYW0gaW5kZXggb2YgcGFuZWwgaW4gc3RhY2suIFRoZSBtb3N0IGJlaGluZCAodGhlIGZpcnN0IG9uZSkgaXMgMC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNlbGVjdFBhbmVsQnlJbmRleChpbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGxhc3REaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1t0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAxXTtcblxuICAgICAgICAvLyBVcGRhdGUgbmV3IHBhbmVscyBzZXQgcG9zaXRpb25zXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCAtIDE7IGkgPj0gaW5kZXggKyAxOyBpLS0pIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzW2ldLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbGFzdERpYWxvZy5hZnRlckNsb3NlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gbmV3IHBhbmVscyBpZiB1cmwgaGFzIGNoYW5nZWQgd2l0aCBuZXcgc2VnbWVudHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVBhbmVscyhzZWdtZW50czogVXJsU2VnbWVudFtdLCByb3V0ZXM6IE5hdHVyYWxQYW5lbHNSb3V0ZXJSdWxlW10pOiB2b2lkIHtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHVybCBzZWdtZW50cyBpbnRvIGEgY29uZmlnIHdpdGggY29tcG9uZW50IG5hbWUgYW5kIElEIGlmIHByb3ZpZGVkIGluIG5leHQgc2VnbWVudFxuICAgICAgICAvLyBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbmZpZ3MsIGVhY2ggY29uZmlnIHJlcHJlc2VudHMgdGhlIGNvbnRlbnQgcmVsYXRpdmUgdG8gYSBwYW5lbFxuICAgICAgICBjb25zdCBuZXdGdWxsQ29uZmlnID0gZ2V0U3RhY2tDb25maWcoc2VnbWVudHMsIHJvdXRlcywgdGhpcy5pbmplY3Rvcik7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3NUb1JlbW92ZSA9IGRpZmZlcmVuY2VXaXRoKHRoaXMub2xkRnVsbENvbmZpZywgbmV3RnVsbENvbmZpZywgY29tcGFyZUNvbmZpZ3MpO1xuICAgICAgICBjb25zdCBjb25maWdzVG9BZGQgPSBkaWZmZXJlbmNlV2l0aChuZXdGdWxsQ29uZmlnLCB0aGlzLm9sZEZ1bGxDb25maWcsIGNvbXBhcmVDb25maWdzKTtcblxuICAgICAgICBjb25zdCBpbmRleE9mTmV4dFBhbmVsID0gdGhpcy5vbGRGdWxsQ29uZmlnLmxlbmd0aCAtIGNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggLSAxO1xuXG4gICAgICAgIGlmIChjb25maWdzVG9SZW1vdmUubGVuZ3RoICYmIGNvbmZpZ3NUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIEFkZCBhbmQgcmVtb3ZlIHBhbmVsc1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQYW5lbEJ5SW5kZXgoaW5kZXhPZk5leHRQYW5lbCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5QYW5lbHMoY29uZmlnc1RvQWRkLCBuZXdGdWxsQ29uZmlnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWdzVG9SZW1vdmUubGVuZ3RoICYmICFjb25maWdzVG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBvbmx5IHJlbW92ZSBwYW5lbHNcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UGFuZWxCeUluZGV4KGluZGV4T2ZOZXh0UGFuZWwpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpKTtcbiAgICAgICAgfSBlbHNlIGlmICghY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAmJiBjb25maWdzVG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBvbmx5IGFkZCBwYW5lbHNcbiAgICAgICAgICAgIHRoaXMub3BlblBhbmVscyhjb25maWdzVG9BZGQsIG5ld0Z1bGxDb25maWcpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2xkRnVsbENvbmZpZyA9IG5ld0Z1bGxDb25maWc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBhbGwgc2VydmljZXMsIHRoZW4gb3BlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIG9wZW5QYW5lbHMoXG4gICAgICAgIG5ld0l0ZW1zQ29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSxcbiAgICAgICAgZnVsbENvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnW10sXG4gICAgKTogT2JzZXJ2YWJsZTxPYnNlcnZhYmxlPGFueT4gfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDxPYnNlcnZhYmxlPGFueT4gfCBudWxsPigpO1xuXG4gICAgICAgIC8vIFJlc29sdmUgZXZlcnl0aGluZyBiZWZvcmUgb3BlbmluZyBhIHNpbmdsZSBwYW5lbFxuICAgICAgICBjb25zdCByZXNvbHZlcyA9IG5ld0l0ZW1zQ29uZmlnLm1hcChjb25mID0+IHRoaXMuZ2V0UmVzb2x2ZWREYXRhKGNvbmYpKTtcblxuICAgICAgICAvLyBGb3JrSm9pbiBlbWl0cyB3aGVuIGFsbCBwcm9taXNlcyBhcmUgZXhlY3V0ZWQ7XG4gICAgICAgIGZvcmtKb2luKHJlc29sdmVzKS5zdWJzY3JpYmUocmVzb2x2ZWRSZXN1bHQgPT4ge1xuICAgICAgICAgICAgLy8gRm9yIGVhY2ggbmV3IGNvbmZpZyBlbnRyeSwgb3BlbiBhIG5ldyBwYW5lbFxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdJdGVtc0NvbmZpZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IG5ld0l0ZW1zQ29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGxldCBpdGVtRGF0YTogTmF0dXJhbFBhbmVsRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29uZmlnIG9mIGFjdHVhbCBwYW5lbCByb3V0ZVxuICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcblxuICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIHJlc29sdmVkIGJ5IHNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGluIGNvbXBvbmVudCBieSBjYWxsaW5nIHRoaXMucGFuZWxEYXRhLmRhdGEueHl6XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlc29sdmVkUmVzdWx0W2ldLFxuICAgICAgICAgICAgICAgICAgICBsaW5rYWJsZU9iamVjdHM6IFtdLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ob29rc0NvbmZpZz8uYmVmb3JlT3BlblBhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50OiBOYXR1cmFsUGFuZWxzQmVmb3JlT3BlblBhbmVsID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkUmVzdWx0OiByZXNvbHZlZFJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxQYW5lbHNDb25maWc6IGZ1bGxDb25maWcsXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaXRlbURhdGEgPSB0aGlzLmhvb2tzQ29uZmlnLmJlZm9yZU9wZW5QYW5lbCh0aGlzLmluamVjdG9yLCBldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWwoY29uZmlnLmNvbXBvbmVudCwgaXRlbURhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1t0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAxXS5hZnRlck9wZW5lZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVzb2x2ZWREYXRhKGNvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnKTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgICAgICBpZiAoIWNvbmZpZy5yZXNvbHZlIHx8IChjb25maWcucmVzb2x2ZSAmJiBPYmplY3Qua2V5cyhjb25maWcucmVzb2x2ZSkubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc29sdmVLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnLnJlc29sdmUpO1xuICAgICAgICBjb25zdCByZXNvbHZlZERhdGE6IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8dW5rbm93bj4+ID0ge307XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gY29uZmlnLmluamVjdG9yO1xuXG4gICAgICAgIGlmIChpbmplY3Rvcikge1xuICAgICAgICAgICAgcmVzb2x2ZUtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmVkRGF0YVtrZXldID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiBjb25maWcucmVzb2x2ZVtrZXldKGNvbmZpZykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ya0pvaW4ocmVzb2x2ZWREYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5QYW5lbChjb21wb25lbnRPclRlbXBsYXRlUmVmOiBDb21wb25lbnRUeXBlPE5hdHVyYWxBYnN0cmFjdFBhbmVsPiwgZGF0YTogTmF0dXJhbFBhbmVsRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25mOiBNYXREaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICBwYW5lbENsYXNzOiB0aGlzLnBhbmVsQ2xhc3MsXG4gICAgICAgICAgICBjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoID09PSAwLFxuICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5wYW5lbFdpZHRoLFxuICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICB0b3A6ICcwJyxcbiAgICAgICAgICAgICAgICByaWdodDogJzAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuPE5hdHVyYWxBYnN0cmFjdFBhbmVsPihjb21wb25lbnRPclRlbXBsYXRlUmVmLCBjb25mKTtcblxuICAgICAgICAvLyBQYW5lbGlzYWJsZSBpbnRlcmZhY2UgYXR0cmlidXRlcy9mdW5jdGlvbnNcbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmluaXRQYW5lbChkYXRhKTtcblxuICAgICAgICBkaWFsb2dSZWYuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRQYW5lbEluZGV4KGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZSk7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYW5lbEJ5SW5kZXgoaW5kZXggLSAxKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHBhbmVsIHBvc2l0aW9uIChpbmRleCkgYnkgc2VhcmNoaW5nIG1hdGNoaW5nIGNvbXBvbmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UGFuZWxJbmRleChjb21wb25lbnQ6IE5hdHVyYWxBYnN0cmFjdFBhbmVsKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5maW5kSW5kZXgoZGlhbG9nID0+IGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZSA9PT0gY29tcG9uZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBnaXZlbiBwYW5lbCBpcyBjdXJyZW50bHkgdGhlIHRvcCwgdmlzaWJsZSwgcGFuZWwuIElmIHRoZXJlIGFyZSBubyBwYW5lbHMgb3BlbmVkIGF0IGFsbCwgdGhlbiBhbnkgcGFuZWwgZ2l2ZW4gaXMgY29uc2lkZXJlZCB0b3AsIHZpc2libGUsIHBhbmVsLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc1RvcFBhbmVsKGNvbXBvbmVudDogTmF0dXJhbEFic3RyYWN0UGFuZWwpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoO1xuICAgICAgICByZXR1cm4gIWxlbmd0aCB8fCB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1tsZW5ndGggLSAxXT8uY29tcG9uZW50SW5zdGFuY2UgPT09IGNvbXBvbmVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBvc2l0aW9ucyBwYW5lbHMgZnJvbSBzdGFydCB1bnRpbCBnaXZlbiBpbmRleFxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VsZWN0IHRoZSBwYW5lbHMgdGhhdCBhcmUgc3RpbGwgb3BlbmVkLCBpZ25vcmUgdGhlIG90aGVycyBiZWNhdXNlIHRoZXknbGwgYmUgY2xvc2VkXG4gICAgICAgIGNvbnN0IGFmZmVjdGVkRWxlbWVudHMgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2cgPSBhZmZlY3RlZEVsZW1lbnRzW2ldO1xuXG4gICAgICAgICAgICAvLyBTZXQgYWxsIHBhbmVscyBhcyBcImhpZGRlblwiIGV4Y2VwdCBsYXN0IG9uZS4gSXNGcm9udFBhbmVsIGF0dHJpYnV0ZSBjYXVzZXMgYSBDU1MgdGhhdCBoaWRlcyBib2R5IHZpYSBob3N0YmluZGluZ1xuICAgICAgICAgICAgZGlhbG9nLmNvbXBvbmVudEluc3RhbmNlLmlzRnJvbnRQYW5lbCA9IGkgPT09IGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZS5wYW5lbFNlcnZpY2UgPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyBBc3NpZ24gb2Zmc2V0XG4gICAgICAgICAgICBjb25zdCBkZWVwID0gYWZmZWN0ZWRFbGVtZW50cy5sZW5ndGggLSAxIC0gaTtcblxuICAgICAgICAgICAgbGV0IHBvc2l0aW9uOiBhbnkgPSB7cmlnaHQ6IGRlZXAgKiB0aGlzLnBhbmVsc09mZnNldEggKyAncHgnfTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmVydGljYWwgJiYgYWZmZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9wID0gaSAqIHRoaXMucGFuZWxzT2Zmc2V0ViArICdweCc7XG4gICAgICAgICAgICAgICAgcG9zaXRpb24gPSB7dG9wOiB0b3AsIHJpZ2h0OiAnMHB4J307XG4gICAgICAgICAgICAgICAgZGlhbG9nLnVwZGF0ZVNpemUodGhpcy5wYW5lbFdpZHRoLCBgY2FsYygxMDAlIC0gJHt0b3B9KWApOyAvLyBjYWxsIGJlZm9yZSB1cGRhdGVQb3NpdGlvblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaWFsb2cudXBkYXRlU2l6ZSh0aGlzLnBhbmVsV2lkdGgsIGAxMDAlYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpYWxvZy51cGRhdGVQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
- import { Directive, EventEmitter, inject, Input, Output } from '@angular/core';
2
+ import { computed, Directive, EventEmitter, inject, input, Input, Output } from '@angular/core';
3
3
  import { FormControl, FormControlDirective, FormControlName, NgControl, Validators, } from '@angular/forms';
4
4
  import { ErrorStateMatcher } from '@angular/material/core';
5
5
  import * as i0 from "@angular/core";
@@ -26,9 +26,11 @@ class ExternalFormControlMatcher extends ErrorStateMatcher {
26
26
  export class AbstractSelect {
27
27
  placeholder;
28
28
  /**
29
- * Mat-hint
29
+ * Mat-hint, if given, and it is non-empty, then `subscriptSizing` will
30
+ * automatically be set to `dynamic` to allow for long, wrapping text.
30
31
  */
31
- hint = null;
32
+ hint = input();
33
+ subscriptSizing = computed(() => (this.hint() ? 'dynamic' : 'fixed'));
32
34
  /**
33
35
  * If given an error message, it will be displayed in a `<mat-error>`, but only if the control
34
36
  * is actually in an error state via one of its validators.
@@ -199,15 +201,13 @@ export class AbstractSelect {
199
201
  this.internalCtrl.updateValueAndValidity();
200
202
  }
201
203
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: AbstractSelect, deps: [], target: i0.ɵɵFactoryTarget.Directive });
202
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.3", type: AbstractSelect, isStandalone: true, inputs: { placeholder: "placeholder", hint: "hint", error: "error", required: "required", navigateTo: "navigateTo", clearLabel: "clearLabel", showIcon: "showIcon", icon: "icon", displayWith: "displayWith", disabled: "disabled" }, outputs: { selectionChange: "selectionChange", blur: "blur" }, ngImport: i0 });
204
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.3", type: AbstractSelect, isStandalone: true, inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: false, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: false, isRequired: false, transformFunction: null }, navigateTo: { classPropertyName: "navigateTo", publicName: "navigateTo", isSignal: false, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: false, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: false, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: false, isRequired: false, transformFunction: null }, displayWith: { classPropertyName: "displayWith", publicName: "displayWith", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { selectionChange: "selectionChange", blur: "blur" }, ngImport: i0 });
203
205
  }
204
206
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: AbstractSelect, decorators: [{
205
207
  type: Directive,
206
208
  args: [{ standalone: true }]
207
209
  }], ctorParameters: () => [], propDecorators: { placeholder: [{
208
210
  type: Input
209
- }], hint: [{
210
- type: Input
211
211
  }], error: [{
212
212
  type: Input
213
213
  }], required: [{
@@ -229,4 +229,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
229
229
  }], disabled: [{
230
230
  type: Input
231
231
  }] } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3NlbGVjdC9hYnN0cmFjdC1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBQyxTQUFTLEVBQVcsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFFSCxXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7O0FBRXpEOzs7OztHQUtHO0FBQ0gsTUFBTSwwQkFBMkMsU0FBUSxpQkFBaUI7SUFDbEM7SUFBcEMsWUFBb0MsU0FBeUM7UUFDekUsS0FBSyxFQUFFLENBQUM7UUFEd0IsY0FBUyxHQUFULFNBQVMsQ0FBZ0M7SUFFN0UsQ0FBQztJQUVlLFlBQVk7UUFDeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQ3RGLElBQUksWUFBWSxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0o7QUFHRCxNQUFNLE9BQWdCLGNBQWM7SUFDaEIsV0FBVyxDQUFVO0lBRXJDOztPQUVHO0lB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YXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7RGlyZWN0aXZlLCBEb0NoZWNrLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRm9ybUNvbnRyb2wsXG4gICAgRm9ybUNvbnRyb2xEaXJlY3RpdmUsXG4gICAgRm9ybUNvbnRyb2xOYW1lLFxuICAgIE5nQ29udHJvbCxcbiAgICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0Vycm9yU3RhdGVNYXRjaGVyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcblxuLyoqXG4gKiBUaGlzIHdpbGwgY29tcGxldGVseSBpZ25vcmUgaW50ZXJuYWwgZm9ybUNvbnRyb2wgYW5kIGluc3RlYWQgdXNlIHRoZSBvbmUgZnJvbSB0aGUgY29tcG9uZW50XG4gKiB3aGljaCBjb21lcyBmcm9tIG91dHNpZGUgb2YgdGhpcyBjb21wb25lbnQuIFRoaXMgYmFzaWNhbGx5IGFsbG93cyB1cyB0byAqKm5vdCoqIGRlcGVuZCBvblxuICogdG91Y2hlZCBzdGF0dXMgcHJvcGFnYXRpb24gYmV0d2VlbiBvdXRzaWRlIGFuZCBpbnNpZGUgd29ybGQsIGFuZCB0aHVzIGdldCByaWQgb2Ygb3VyIGxlZ2FjeVxuICogY3VzdG9tIEZvcm1Db250cm9sIGNsYXNzIChcIk5hdHVyYWxGb3JtQ29udHJvbFwiKS5cbiAqL1xuY2xhc3MgRXh0ZXJuYWxGb3JtQ29udHJvbE1hdGNoZXI8VFZhbHVlLCBUSW5wdXQ+IGV4dGVuZHMgRXJyb3JTdGF0ZU1hdGNoZXIge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudDogQWJzdHJhY3RTZWxlY3Q8VFZhbHVlLCBUSW5wdXQ+KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGlzRXJyb3JTdGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxDdHJsID0gdGhpcy5jb21wb25lbnQubmdDb250cm9sPy5jb250cm9sIHx8IHRoaXMuY29tcG9uZW50LmludGVybmFsQ3RybDtcbiAgICAgICAgaWYgKGV4dGVybmFsQ3RybCkge1xuICAgICAgICAgICAgcmV0dXJuICEhKGV4dGVybmFsQ3RybC5lcnJvcnMgJiYgKGV4dGVybmFsQ3RybC50b3VjaGVkIHx8IGV4dGVybmFsQ3RybC5kaXJ0eSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7c3RhbmRhbG9uZTogdHJ1ZX0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTZWxlY3Q8VFZhbHVlLCBUSW5wdXQ+IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRG9DaGVjayB7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTWF0LWhpbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaGludDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJZiBnaXZlbiBhbiBlcnJvciBtZXNzYWdlLCBpdCB3aWxsIGJlIGRpc3BsYXllZCBpbiBhIGA8bWF0LWVycm9yPmAsIGJ1dCBvbmx5IGlmIHRoZSBjb250cm9sXG4gICAgICogaXMgYWN0dWFsbHkgaW4gYW4gZXJyb3Igc3RhdGUgdmlhIG9uZSBvZiBpdHMgdmFsaWRhdG9ycy5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbm90IG5lZWRlZCBmb3IgdGhlIHNwZWNpYWwgY2FzZSBvZiB0aGUgcmVxdWlyZWQgdmFsaWRhdG9yLCBiZWNhdXNlIHRoZSBtZXNzYWdlIGlzIGhhcmRjb2RlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIGZpZWxkIGlzIHJlcXVpcmVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgdGhpcy5hcHBseVJlcXVpcmVkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBzdWZmaXggYnV0dG9uIHRoYXQgaXMgYSBsaW5rIHRvIGdpdmVuIGRlc3RpbmF0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG5hdmlnYXRlVG8/OiBhbnlbXSB8IHN0cmluZyB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJZiBwcm92aWRlZCBjYXVzZSBhIG5ldyBjbGVhciBidXR0b24gdG8gYXBwZWFyXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIHNlYXJjaCBpY29uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNob3dJY29uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEljb24gbmFtZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpY29uID0gJ3NlYXJjaCc7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjdXN0b21pemUgdGhlIHJlbmRlcmluZyBvZiB0aGUgc2VsZWN0ZWQgaXRlbSBhcyB0ZXh0IGluIGlucHV0XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGRpc3BsYXlXaXRoPzogKGl0ZW06IFRWYWx1ZSB8IG51bGwpID0+IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEVtaXQgdGhlIHNlbGVjdGVkIHZhbHVlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VFZhbHVlIHwgbnVsbD4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHdoZW4gaW50ZXJuYWwgaW5wdXQgaXMgYmx1cnJlZFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGZvciBjdXJyZW50IHNlbGVjdGlvbiBBTkQgc2VhcmNoZWQgdGV4dCAoZm9yIGF1dG9jb21wbGV0ZSlcbiAgICAgKlxuICAgICAqIEl0IGlzICoqbm90KiogbmVjZXNzYXJpbHkgYFRWYWx1ZSB8IG51bGxgLlxuICAgICAqXG4gICAgICogLSBOYXR1cmFsU2VsZWN0Q29tcG9uZW50OiBgc3RyaW5nIHwgVFZhbHVlIHwgbnVsbGAuIFdlIGFsbG93IGBzdHJpbmdgXG4gICAgICogICBvbmx5IHdoZW4gYG9wdGlvblJlcXVpcmVkYCBpcyBmYWxzZSwgc28gbW9zdCBvZiB0aGUgdGltZSBpdCBpcyBgVFZhbHVlIHwgbnVsbGAuXG4gICAgICogLSBOYXR1cmFsU2VsZWN0SGllcmFyY2hpY0NvbXBvbmVudDogYHN0cmluZyB8IG51bGxgLlxuICAgICAqIC0gTmF0dXJhbFNlbGVjdEVudW1Db21wb25lbnQ6IGBUVmFsdWUgfCBudWxsYC5cbiAgICAgKlxuICAgICAqIEluIG5hdHVyYWwtc2VsZWN0IGNvbnRleHQsIHdlIHVzZSBwcmlzdGluZSBhbmQgZGlydHkgdG8gaWRlbnRpZnkgaWYgdGhlIGRpc3BsYXllZCB2YWx1ZSBpcyBzZWFyY2ggb3IgY29tbWl0dGVkIG1vZGVsIDpcbiAgICAgKiAgLSBQcmlzdGluZSBzdGF0dXMgKHVuY2hhbmdlZCB2YWx1ZSkgbWVhbnMgdGhlIG1vZGVsIGlzIGRpc3BsYXllZCBhbmQgcHJvcGFnYXRlZCA9IHRoZSBzZWxlY3Rpb24gaXMgY29tbWl0dGVkXG4gICAgICogIC0gRGlydHkgc3RhdHVzIChjaGFuZ2VkIHZhbHVlKSBtZWFucyB3ZSBhcmUgaW4gc2VhcmNoL2F1dG9jb21wbGV0ZSBtb2RlXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGludGVybmFsQ3RybCA9IG5ldyBGb3JtQ29udHJvbDxUSW5wdXQgfCBudWxsPihudWxsKTtcblxuICAgIC8qKlxuICAgICAqIEludGVyZmFjZSB3aXRoIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gICAgICogTm90aWZpZXMgcGFyZW50IG1vZGVsIC8gZm9ybSBjb250cm9sbGVyXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hhbmdlPzogKGl0ZW06IFRWYWx1ZSB8IG51bGwpID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcmZhY2Ugd2l0aCBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAgICAqIE5vdGlmaWVzIHBhcmVudCBtb2RlbCAvIGZvcm0gY29udHJvbGxlclxuICAgICAqL1xuICAgIHB1YmxpYyBvblRvdWNoZWQ/OiAoKSA9PiB2b2lkO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IG1hdGNoZXI6IEV4dGVybmFsRm9ybUNvbnRyb2xNYXRjaGVyPFRWYWx1ZSwgVElucHV0PjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwge29wdGlvbmFsOiB0cnVlLCBzZWxmOiB0cnVlfSk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1hdGNoZXIgPSBuZXcgRXh0ZXJuYWxGb3JtQ29udHJvbE1hdGNoZXIodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UmVxdWlyZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBUSW5wdXQgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzUmVhY3RpdmUgPSB0aGlzLm5nQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sRGlyZWN0aXZlIHx8IHRoaXMubmdDb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2xOYW1lO1xuICAgICAgICBpZiAoaXNSZWFjdGl2ZSAmJiB0eXBlb2YgdGhpcy5fcmVxdWlyZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJzxuYXR1cmFsLXNlbGVjdC0qPiBzaG91bGQgbm90IGJlIHVzZWQgYXMgUmVhY3RpdmVGb3JtIGFuZCB3aXRoIHRoZSBbcmVxdWlyZWRdIGF0dHJpYnV0ZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdmFsdWUgY2FuIGJlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgZGlzYWJsZWQgPyB0aGlzLmludGVybmFsQ3RybC5kaXNhYmxlKCkgOiB0aGlzLmludGVybmFsQ3RybC5lbmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGl0ZW06IFRWYWx1ZSB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXREaXNwbGF5Rm4oKTogKGl0ZW06IFRWYWx1ZSB8IG51bGwpID0+IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbW1pdCB0aGUgbW9kZWwgdG8gbnVsbFxuICAgICAqIEVtaXQgYW5kIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbW9kZWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLnNldFZhbHVlKG51bGwpO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlKG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGlucHV0IGlzIGRpcnR5IChzZWFyY2ggcnVubmluZykgcmVzdG9yZSB0byBtb2RlbCB2YWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG91Y2goKTtcbiAgICAgICAgdGhpcy5ibHVyLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21taXQgdGhlIG1vZGVsIGNoYW5nZVxuICAgICAqL1xuICAgIHB1YmxpYyBwcm9wYWdhdGVWYWx1ZSh2YWx1ZTogVFZhbHVlIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICAvLyBiZWZvcmUgc2VsZWN0aW9uQ2hhbmdlIHRvIGFsbG93IGZvcm1Db250cm9sIHRvIHVwZGF0ZSBiZWZvcmUgY2hhbmdlIGlzIGVmZmVjdGl2ZWx5IGVtaXR0ZWRcbiAgICAgICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEN0cmw/LmVuYWJsZWQgJiYgISF0aGlzLmNsZWFyTGFiZWwgJiYgISF0aGlzLmludGVybmFsQ3RybC52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG91Y2goKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm9uVG91Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYXNSZXF1aXJlZEVycm9yKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2wgPyB0aGlzLm5nQ29udHJvbD8uY29udHJvbCA6IHRoaXMuaW50ZXJuYWxDdHJsO1xuXG4gICAgICAgIHJldHVybiBjb250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGx5IFZhbGlkYXRvcnMucmVxdWlyZWQgb24gdGhlIGludGVybmFsIGZvcm0sIGJhc2VkIG9uIG5nQ29udHJvbCBvciBbcmVxdWlyZWRdIGF0dHJpYnV0ZSwgZ2l2aW5nIHByaW9yaXR5IHRvIGF0dHJpYnV0ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFwcGx5UmVxdWlyZWQoKTogdm9pZCB7XG4gICAgICAgIC8vIFJlcXVpcmVkIHN0YXR1cyBvbiBwYXJlbnQgdmFsaWRhdG9yXG4gICAgICAgIGNvbnN0IG91dGVyUmVxdWlyZWRTdGF0dXMgPSB0aGlzPy5uZ0NvbnRyb2w/LmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcblxuICAgICAgICAvLyBXYW50ZWQgcmVxdWlyZWQgc3RhdHVzLCBnaXZpbmcgcHJpb3JpdHkgdG8gdGVtcGxhdGVcbiAgICAgICAgY29uc3QgbmV3UmVxdWlyZWRTdGF0dXMgPSB0eXBlb2YgdGhpcy5fcmVxdWlyZWQgIT09ICd1bmRlZmluZWQnID8gdGhpcy5fcmVxdWlyZWQgOiBvdXRlclJlcXVpcmVkU3RhdHVzO1xuXG4gICAgICAgIC8vIEFjdHVhbCBpbnRlcm5hbCB2YWxpZGF0aW9uIHN0YXR1c1xuICAgICAgICBjb25zdCBjdXJyZW50UmVxdWlyZWRTdGF0dXMgPSB0aGlzLmludGVybmFsQ3RybC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG5cbiAgICAgICAgLy8gSWYgd2FudGVkIHN0YXR1cyBpcyBzaW1pbGFyIHRvIGFjdHVhbCBzdGF0dXMsIHN0b3AgZXZlcnl0aGluZ1xuICAgICAgICBpZiAoY3VycmVudFJlcXVpcmVkU3RhdHVzID09PSBuZXdSZXF1aXJlZFN0YXR1cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXBwbHkgb25seSBpZiBjaGFuZ2VkXG4gICAgICAgIGlmIChuZXdSZXF1aXJlZFN0YXR1cykge1xuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEN0cmwuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEN0cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cbn1cbiJdfQ==
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3NlbGVjdC9hYnN0cmFjdC1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFXLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUVILFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7QUFFekQ7Ozs7O0dBS0c7QUFDSCxNQUFNLDBCQUEyQyxTQUFRLGlCQUFpQjtJQUNsQztJQUFwQyxZQUFvQyxTQUF5QztRQUN6RSxLQUFLLEVBQUUsQ0FBQztRQUR3QixjQUFTLEdBQVQsU0FBUyxDQUFnQztJQUU3RSxDQUFDO0lBRWUsWUFBWTtRQUN4QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7UUFDdEYsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQUdELE1BQU0sT0FBZ0IsY0FBYztJQUNoQixXQUFX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ZTtzQkFBeEMsTUFBTTtnQkFNbUIsSUFBSTtzQkFBN0IsTUFBTTtnQkE4REksUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtjb21wdXRlZCwgRGlyZWN0aXZlLCBEb0NoZWNrLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgaW5wdXQsIElucHV0LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1Db250cm9sRGlyZWN0aXZlLFxuICAgIEZvcm1Db250cm9sTmFtZSxcbiAgICBOZ0NvbnRyb2wsXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtFcnJvclN0YXRlTWF0Y2hlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbi8qKlxuICogVGhpcyB3aWxsIGNvbXBsZXRlbHkgaWdub3JlIGludGVybmFsIGZvcm1Db250cm9sIGFuZCBpbnN0ZWFkIHVzZSB0aGUgb25lIGZyb20gdGhlIGNvbXBvbmVudFxuICogd2hpY2ggY29tZXMgZnJvbSBvdXRzaWRlIG9mIHRoaXMgY29tcG9uZW50LiBUaGlzIGJhc2ljYWxseSBhbGxvd3MgdXMgdG8gKipub3QqKiBkZXBlbmQgb25cbiAqIHRvdWNoZWQgc3RhdHVzIHByb3BhZ2F0aW9uIGJldHdlZW4gb3V0c2lkZSBhbmQgaW5zaWRlIHdvcmxkLCBhbmQgdGh1cyBnZXQgcmlkIG9mIG91ciBsZWdhY3lcbiAqIGN1c3RvbSBGb3JtQ29udHJvbCBjbGFzcyAoXCJOYXR1cmFsRm9ybUNvbnRyb2xcIikuXG4gKi9cbmNsYXNzIEV4dGVybmFsRm9ybUNvbnRyb2xNYXRjaGVyPFRWYWx1ZSwgVElucHV0PiBleHRlbmRzIEVycm9yU3RhdGVNYXRjaGVyIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb21wb25lbnQ6IEFic3RyYWN0U2VsZWN0PFRWYWx1ZSwgVElucHV0Pikge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBpc0Vycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGV4dGVybmFsQ3RybCA9IHRoaXMuY29tcG9uZW50Lm5nQ29udHJvbD8uY29udHJvbCB8fCB0aGlzLmNvbXBvbmVudC5pbnRlcm5hbEN0cmw7XG4gICAgICAgIGlmIChleHRlcm5hbEN0cmwpIHtcbiAgICAgICAgICAgIHJldHVybiAhIShleHRlcm5hbEN0cmwuZXJyb3JzICYmIChleHRlcm5hbEN0cmwudG91Y2hlZCB8fCBleHRlcm5hbEN0cmwuZGlydHkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe3N0YW5kYWxvbmU6IHRydWV9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U2VsZWN0PFRWYWx1ZSwgVElucHV0PiBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIERvQ2hlY2sge1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1hdC1oaW50LCBpZiBnaXZlbiwgYW5kIGl0IGlzIG5vbi1lbXB0eSwgdGhlbiBgc3Vic2NyaXB0U2l6aW5nYCB3aWxsXG4gICAgICogYXV0b21hdGljYWxseSBiZSBzZXQgdG8gYGR5bmFtaWNgIHRvIGFsbG93IGZvciBsb25nLCB3cmFwcGluZyB0ZXh0LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBoaW50ID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4oKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdWJzY3JpcHRTaXppbmcgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5oaW50KCkgPyAnZHluYW1pYycgOiAnZml4ZWQnKSk7XG5cbiAgICAvKipcbiAgICAgKiBJZiBnaXZlbiBhbiBlcnJvciBtZXNzYWdlLCBpdCB3aWxsIGJlIGRpc3BsYXllZCBpbiBhIGA8bWF0LWVycm9yPmAsIGJ1dCBvbmx5IGlmIHRoZSBjb250cm9sXG4gICAgICogaXMgYWN0dWFsbHkgaW4gYW4gZXJyb3Igc3RhdGUgdmlhIG9uZSBvZiBpdHMgdmFsaWRhdG9ycy5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgbm90IG5lZWRlZCBmb3IgdGhlIHNwZWNpYWwgY2FzZSBvZiB0aGUgcmVxdWlyZWQgdmFsaWRhdG9yLCBiZWNhdXNlIHRoZSBtZXNzYWdlIGlzIGhhcmRjb2RlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSWYgdGhlIGZpZWxkIGlzIHJlcXVpcmVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgdGhpcy5hcHBseVJlcXVpcmVkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBzdWZmaXggYnV0dG9uIHRoYXQgaXMgYSBsaW5rIHRvIGdpdmVuIGRlc3RpbmF0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG5hdmlnYXRlVG8/OiBhbnlbXSB8IHN0cmluZyB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJZiBwcm92aWRlZCBjYXVzZSBhIG5ldyBjbGVhciBidXR0b24gdG8gYXBwZWFyXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIHNlYXJjaCBpY29uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNob3dJY29uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEljb24gbmFtZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpY29uID0gJ3NlYXJjaCc7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjdXN0b21pemUgdGhlIHJlbmRlcmluZyBvZiB0aGUgc2VsZWN0ZWQgaXRlbSBhcyB0ZXh0IGluIGlucHV0XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGRpc3BsYXlXaXRoPzogKGl0ZW06IFRWYWx1ZSB8IG51bGwpID0+IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEVtaXQgdGhlIHNlbGVjdGVkIHZhbHVlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VFZhbHVlIHwgbnVsbD4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHdoZW4gaW50ZXJuYWwgaW5wdXQgaXMgYmx1cnJlZFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGZvciBjdXJyZW50IHNlbGVjdGlvbiBBTkQgc2VhcmNoZWQgdGV4dCAoZm9yIGF1dG9jb21wbGV0ZSlcbiAgICAgKlxuICAgICAqIEl0IGlzICoqbm90KiogbmVjZXNzYXJpbHkgYFRWYWx1ZSB8IG51bGxgLlxuICAgICAqXG4gICAgICogLSBOYXR1cmFsU2VsZWN0Q29tcG9uZW50OiBgc3RyaW5nIHwgVFZhbHVlIHwgbnVsbGAuIFdlIGFsbG93IGBzdHJpbmdgXG4gICAgICogICBvbmx5IHdoZW4gYG9wdGlvblJlcXVpcmVkYCBpcyBmYWxzZSwgc28gbW9zdCBvZiB0aGUgdGltZSBpdCBpcyBgVFZhbHVlIHwgbnVsbGAuXG4gICAgICogLSBOYXR1cmFsU2VsZWN0SGllcmFyY2hpY0NvbXBvbmVudDogYHN0cmluZyB8IG51bGxgLlxuICAgICAqIC0gTmF0dXJhbFNlbGVjdEVudW1Db21wb25lbnQ6IGBUVmFsdWUgfCBudWxsYC5cbiAgICAgKlxuICAgICAqIEluIG5hdHVyYWwtc2VsZWN0IGNvbnRleHQsIHdlIHVzZSBwcmlzdGluZSBhbmQgZGlydHkgdG8gaWRlbnRpZnkgaWYgdGhlIGRpc3BsYXllZCB2YWx1ZSBpcyBzZWFyY2ggb3IgY29tbWl0dGVkIG1vZGVsIDpcbiAgICAgKiAgLSBQcmlzdGluZSBzdGF0dXMgKHVuY2hhbmdlZCB2YWx1ZSkgbWVhbnMgdGhlIG1vZGVsIGlzIGRpc3BsYXllZCBhbmQgcHJvcGFnYXRlZCA9IHRoZSBzZWxlY3Rpb24gaXMgY29tbWl0dGVkXG4gICAgICogIC0gRGlydHkgc3RhdHVzIChjaGFuZ2VkIHZhbHVlKSBtZWFucyB3ZSBhcmUgaW4gc2VhcmNoL2F1dG9jb21wbGV0ZSBtb2RlXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGludGVybmFsQ3RybCA9IG5ldyBGb3JtQ29udHJvbDxUSW5wdXQgfCBudWxsPihudWxsKTtcblxuICAgIC8qKlxuICAgICAqIEludGVyZmFjZSB3aXRoIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gICAgICogTm90aWZpZXMgcGFyZW50IG1vZGVsIC8gZm9ybSBjb250cm9sbGVyXG4gICAgICovXG4gICAgcHVibGljIG9uQ2hhbmdlPzogKGl0ZW06IFRWYWx1ZSB8IG51bGwpID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcmZhY2Ugd2l0aCBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAgICAqIE5vdGlmaWVzIHBhcmVudCBtb2RlbCAvIGZvcm0gY29udHJvbGxlclxuICAgICAqL1xuICAgIHB1YmxpYyBvblRvdWNoZWQ/OiAoKSA9PiB2b2lkO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IG1hdGNoZXI6IEV4dGVybmFsRm9ybUNvbnRyb2xNYXRjaGVyPFRWYWx1ZSwgVElucHV0PjtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmdDb250cm9sID0gaW5qZWN0KE5nQ29udHJvbCwge29wdGlvbmFsOiB0cnVlLCBzZWxmOiB0cnVlfSk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1hdGNoZXIgPSBuZXcgRXh0ZXJuYWxGb3JtQ29udHJvbE1hdGNoZXIodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UmVxdWlyZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBUSW5wdXQgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzUmVhY3RpdmUgPSB0aGlzLm5nQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sRGlyZWN0aXZlIHx8IHRoaXMubmdDb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2xOYW1lO1xuICAgICAgICBpZiAoaXNSZWFjdGl2ZSAmJiB0eXBlb2YgdGhpcy5fcmVxdWlyZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJzxuYXR1cmFsLXNlbGVjdC0qPiBzaG91bGQgbm90IGJlIHVzZWQgYXMgUmVhY3RpdmVGb3JtIGFuZCB3aXRoIHRoZSBbcmVxdWlyZWRdIGF0dHJpYnV0ZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdmFsdWUgY2FuIGJlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgZGlzYWJsZWQgPyB0aGlzLmludGVybmFsQ3RybC5kaXNhYmxlKCkgOiB0aGlzLmludGVybmFsQ3RybC5lbmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGl0ZW06IFRWYWx1ZSB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXREaXNwbGF5Rm4oKTogKGl0ZW06IFRWYWx1ZSB8IG51bGwpID0+IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbW1pdCB0aGUgbW9kZWwgdG8gbnVsbFxuICAgICAqIEVtaXQgYW5kIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbW9kZWxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLnNldFZhbHVlKG51bGwpO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlKG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGlucHV0IGlzIGRpcnR5IChzZWFyY2ggcnVubmluZykgcmVzdG9yZSB0byBtb2RlbCB2YWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG91Y2goKTtcbiAgICAgICAgdGhpcy5ibHVyLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21taXQgdGhlIG1vZGVsIGNoYW5nZVxuICAgICAqL1xuICAgIHB1YmxpYyBwcm9wYWdhdGVWYWx1ZSh2YWx1ZTogVFZhbHVlIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICAvLyBiZWZvcmUgc2VsZWN0aW9uQ2hhbmdlIHRvIGFsbG93IGZvcm1Db250cm9sIHRvIHVwZGF0ZSBiZWZvcmUgY2hhbmdlIGlzIGVmZmVjdGl2ZWx5IGVtaXR0ZWRcbiAgICAgICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEN0cmw/LmVuYWJsZWQgJiYgISF0aGlzLmNsZWFyTGFiZWwgJiYgISF0aGlzLmludGVybmFsQ3RybC52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG91Y2goKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm9uVG91Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYXNSZXF1aXJlZEVycm9yKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2wgPyB0aGlzLm5nQ29udHJvbD8uY29udHJvbCA6IHRoaXMuaW50ZXJuYWxDdHJsO1xuXG4gICAgICAgIHJldHVybiBjb250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGx5IFZhbGlkYXRvcnMucmVxdWlyZWQgb24gdGhlIGludGVybmFsIGZvcm0sIGJhc2VkIG9uIG5nQ29udHJvbCBvciBbcmVxdWlyZWRdIGF0dHJpYnV0ZSwgZ2l2aW5nIHByaW9yaXR5IHRvIGF0dHJpYnV0ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFwcGx5UmVxdWlyZWQoKTogdm9pZCB7XG4gICAgICAgIC8vIFJlcXVpcmVkIHN0YXR1cyBvbiBwYXJlbnQgdmFsaWRhdG9yXG4gICAgICAgIGNvbnN0IG91dGVyUmVxdWlyZWRTdGF0dXMgPSB0aGlzPy5uZ0NvbnRyb2w/LmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcblxuICAgICAgICAvLyBXYW50ZWQgcmVxdWlyZWQgc3RhdHVzLCBnaXZpbmcgcHJpb3JpdHkgdG8gdGVtcGxhdGVcbiAgICAgICAgY29uc3QgbmV3UmVxdWlyZWRTdGF0dXMgPSB0eXBlb2YgdGhpcy5fcmVxdWlyZWQgIT09ICd1bmRlZmluZWQnID8gdGhpcy5fcmVxdWlyZWQgOiBvdXRlclJlcXVpcmVkU3RhdHVzO1xuXG4gICAgICAgIC8vIEFjdHVhbCBpbnRlcm5hbCB2YWxpZGF0aW9uIHN0YXR1c1xuICAgICAgICBjb25zdCBjdXJyZW50UmVxdWlyZWRTdGF0dXMgPSB0aGlzLmludGVybmFsQ3RybC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG5cbiAgICAgICAgLy8gSWYgd2FudGVkIHN0YXR1cyBpcyBzaW1pbGFyIHRvIGFjdHVhbCBzdGF0dXMsIHN0b3AgZXZlcnl0aGluZ1xuICAgICAgICBpZiAoY3VycmVudFJlcXVpcmVkU3RhdHVzID09PSBuZXdSZXF1aXJlZFN0YXR1cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXBwbHkgb25seSBpZiBjaGFuZ2VkXG4gICAgICAgIGlmIChuZXdSZXF1aXJlZFN0YXR1cykge1xuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEN0cmwuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEN0cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -268,7 +268,7 @@ export class NaturalSelectComponent extends AbstractSelect {
268
268
  return this.variablesManager.variables.value;
269
269
  }
270
270
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
271
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: NaturalSelectComponent, isStandalone: true, selector: "natural-select", inputs: { service: "service", optionRequired: "optionRequired", searchField: "searchField", searchOperator: "searchOperator", filter: "filter", disabled: "disabled" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "autoTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n (optionSelected)=\"propagateValue($event.option.value)\"\n [displayWith]=\"getDisplayFn()\"\n panelWidth=\"auto !important\"\n>\n @for (item of items | async; track $index) {\n <mat-option [value]=\"item\">\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultACItem\"\n />\n </mat-option>\n }\n @if (hasMoreItems) {\n <div class=\"mat-caption\" i18n style=\"padding: 5px 10px\">Saisir pour chercher parmi {{ nbTotal }} r\u00E9sultats</div>\n }\n</mat-autocomplete>\n\n<ng-template #defaultACItem let-item=\"item\">\n <span>{{ getDisplayFn()(item) }}</span>\n</ng-template>\n\n<!-- Input for autocomplete -->\n<mat-form-field>\n <mat-label>{{ placeholder }}</mat-label>\n\n <input\n (blur)=\"onBlur()\"\n (change)=\"onInternalFormChange()\"\n (click)=\"autoTrigger.openPanel()\"\n (focus)=\"startSearch()\"\n (keydown.esc)=\"reset()\"\n (keydown.enter)=\"onKeyEnter()\"\n [formControl]=\"internalCtrl\"\n [matAutocomplete]=\"ac\"\n aria-label=\"Recherche et s\u00E9lection\"\n i18n-aria-label\n matInput\n [errorStateMatcher]=\"matcher\"\n />\n\n @if (hint) {\n <mat-hint>{{ hint }}</mat-hint>\n }\n\n <!-- Meta data -->\n @if (!loading && showIcon) {\n <mat-icon [naturalIcon]=\"icon\" matIconPrefix />\n }\n\n @if (loading) {\n <div class=\"loading-wrapper\" matIconPrefix>\n <mat-progress-spinner [diameter]=\"21\" [strokeWidth]=\"5\" mode=\"indeterminate\" />\n </div>\n }\n\n <!-- Clear button -->\n <div matIconSuffix>\n @if (internalCtrl.pristine && internalCtrl.value && internalCtrl.enabled && !clearLabel) {\n <button (click)=\"clear()\" mat-icon-button i18n-matTooltip matTooltip=\"D\u00E9s\u00E9lectionner\">\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n @if (internalCtrl.dirty && internalCtrl.enabled && optionRequired) {\n <button (click)=\"reset()\" mat-icon-button i18n-matTooltip matTooltip=\"Annuler la recherche\">\n <mat-icon naturalIcon=\"undo\" />\n </button>\n }\n @if (internalCtrl.pristine && internalCtrl.value && navigateTo) {\n <button\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n >\n <mat-icon naturalIcon=\"open_in_browser\" />\n </button>\n }\n </div>\n\n @if (hasRequiredError()) {\n <mat-error i18n>Ce champ est requis</mat-error>\n } @else if (error) {\n <mat-error>{{ error }}</mat-error>\n }\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n@if (showClearButton()) {\n <div class=\"external-buttons\">\n @if (showClearButton()) {\n <button (click)=\"clear()\" color=\"warn\" mat-button>{{ clearLabel }}</button>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column}:host>*:not(:last-child){margin-bottom:20px}:host>mat-autocomplete{margin-bottom:0!important}:host .external-buttons{display:flex;flex-direction:row}:host .external-buttons>*:not(:last-child){margin-right:10px}:host .loading-wrapper{display:flex;justify-content:center;align-items:center;width:48px;height:48px}\n"], dependencies: [{ kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
271
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: NaturalSelectComponent, isStandalone: true, selector: "natural-select", inputs: { service: "service", optionRequired: "optionRequired", searchField: "searchField", searchOperator: "searchOperator", filter: "filter", disabled: "disabled" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "autoTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n (optionSelected)=\"propagateValue($event.option.value)\"\n [displayWith]=\"getDisplayFn()\"\n panelWidth=\"auto !important\"\n>\n @for (item of items | async; track $index) {\n <mat-option [value]=\"item\">\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultACItem\"\n />\n </mat-option>\n }\n @if (hasMoreItems) {\n <div class=\"mat-caption\" i18n style=\"padding: 5px 10px\">Saisir pour chercher parmi {{ nbTotal }} r\u00E9sultats</div>\n }\n</mat-autocomplete>\n\n<ng-template #defaultACItem let-item=\"item\">\n <span>{{ getDisplayFn()(item) }}</span>\n</ng-template>\n\n<!-- Input for autocomplete -->\n<mat-form-field [subscriptSizing]=\"subscriptSizing()\">\n <mat-label>{{ placeholder }}</mat-label>\n\n <input\n (blur)=\"onBlur()\"\n (change)=\"onInternalFormChange()\"\n (click)=\"autoTrigger.openPanel()\"\n (focus)=\"startSearch()\"\n (keydown.esc)=\"reset()\"\n (keydown.enter)=\"onKeyEnter()\"\n [formControl]=\"internalCtrl\"\n [matAutocomplete]=\"ac\"\n aria-label=\"Recherche et s\u00E9lection\"\n i18n-aria-label\n matInput\n [errorStateMatcher]=\"matcher\"\n />\n\n @if (hint()) {\n <mat-hint>{{ hint() }}</mat-hint>\n }\n\n <!-- Meta data -->\n @if (!loading && showIcon) {\n <mat-icon [naturalIcon]=\"icon\" matIconPrefix />\n }\n\n @if (loading) {\n <div class=\"loading-wrapper\" matIconPrefix>\n <mat-progress-spinner [diameter]=\"21\" [strokeWidth]=\"5\" mode=\"indeterminate\" />\n </div>\n }\n\n <!-- Clear button -->\n <div matIconSuffix>\n @if (internalCtrl.pristine && internalCtrl.value && internalCtrl.enabled && !clearLabel) {\n <button (click)=\"clear()\" mat-icon-button i18n-matTooltip matTooltip=\"D\u00E9s\u00E9lectionner\">\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n @if (internalCtrl.dirty && internalCtrl.enabled && optionRequired) {\n <button (click)=\"reset()\" mat-icon-button i18n-matTooltip matTooltip=\"Annuler la recherche\">\n <mat-icon naturalIcon=\"undo\" />\n </button>\n }\n @if (internalCtrl.pristine && internalCtrl.value && navigateTo) {\n <button\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n >\n <mat-icon naturalIcon=\"open_in_browser\" />\n </button>\n }\n </div>\n\n @if (hasRequiredError()) {\n <mat-error i18n>Ce champ est requis</mat-error>\n } @else if (error) {\n <mat-error>{{ error }}</mat-error>\n }\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n@if (showClearButton()) {\n <div class=\"external-buttons\">\n @if (showClearButton()) {\n <button (click)=\"clear()\" color=\"warn\" mat-button>{{ clearLabel }}</button>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column}:host>*:not(:last-child){margin-bottom:20px}:host>mat-autocomplete{margin-bottom:0!important}:host .external-buttons{display:flex;flex-direction:row}:host .external-buttons>*:not(:last-child){margin-right:10px}:host .loading-wrapper{display:flex;justify-content:center;align-items:center;width:48px;height:48px}\n"], dependencies: [{ kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
272
272
  }
273
273
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalSelectComponent, decorators: [{
274
274
  type: Component,
@@ -286,7 +286,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
286
286
  MatButtonModule,
287
287
  MatTooltipModule,
288
288
  RouterLink,
289
- ], template: "<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n (optionSelected)=\"propagateValue($event.option.value)\"\n [displayWith]=\"getDisplayFn()\"\n panelWidth=\"auto !important\"\n>\n @for (item of items | async; track $index) {\n <mat-option [value]=\"item\">\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultACItem\"\n />\n </mat-option>\n }\n @if (hasMoreItems) {\n <div class=\"mat-caption\" i18n style=\"padding: 5px 10px\">Saisir pour chercher parmi {{ nbTotal }} r\u00E9sultats</div>\n }\n</mat-autocomplete>\n\n<ng-template #defaultACItem let-item=\"item\">\n <span>{{ getDisplayFn()(item) }}</span>\n</ng-template>\n\n<!-- Input for autocomplete -->\n<mat-form-field>\n <mat-label>{{ placeholder }}</mat-label>\n\n <input\n (blur)=\"onBlur()\"\n (change)=\"onInternalFormChange()\"\n (click)=\"autoTrigger.openPanel()\"\n (focus)=\"startSearch()\"\n (keydown.esc)=\"reset()\"\n (keydown.enter)=\"onKeyEnter()\"\n [formControl]=\"internalCtrl\"\n [matAutocomplete]=\"ac\"\n aria-label=\"Recherche et s\u00E9lection\"\n i18n-aria-label\n matInput\n [errorStateMatcher]=\"matcher\"\n />\n\n @if (hint) {\n <mat-hint>{{ hint }}</mat-hint>\n }\n\n <!-- Meta data -->\n @if (!loading && showIcon) {\n <mat-icon [naturalIcon]=\"icon\" matIconPrefix />\n }\n\n @if (loading) {\n <div class=\"loading-wrapper\" matIconPrefix>\n <mat-progress-spinner [diameter]=\"21\" [strokeWidth]=\"5\" mode=\"indeterminate\" />\n </div>\n }\n\n <!-- Clear button -->\n <div matIconSuffix>\n @if (internalCtrl.pristine && internalCtrl.value && internalCtrl.enabled && !clearLabel) {\n <button (click)=\"clear()\" mat-icon-button i18n-matTooltip matTooltip=\"D\u00E9s\u00E9lectionner\">\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n @if (internalCtrl.dirty && internalCtrl.enabled && optionRequired) {\n <button (click)=\"reset()\" mat-icon-button i18n-matTooltip matTooltip=\"Annuler la recherche\">\n <mat-icon naturalIcon=\"undo\" />\n </button>\n }\n @if (internalCtrl.pristine && internalCtrl.value && navigateTo) {\n <button\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n >\n <mat-icon naturalIcon=\"open_in_browser\" />\n </button>\n }\n </div>\n\n @if (hasRequiredError()) {\n <mat-error i18n>Ce champ est requis</mat-error>\n } @else if (error) {\n <mat-error>{{ error }}</mat-error>\n }\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n@if (showClearButton()) {\n <div class=\"external-buttons\">\n @if (showClearButton()) {\n <button (click)=\"clear()\" color=\"warn\" mat-button>{{ clearLabel }}</button>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column}:host>*:not(:last-child){margin-bottom:20px}:host>mat-autocomplete{margin-bottom:0!important}:host .external-buttons{display:flex;flex-direction:row}:host .external-buttons>*:not(:last-child){margin-right:10px}:host .loading-wrapper{display:flex;justify-content:center;align-items:center;width:48px;height:48px}\n"] }]
289
+ ], template: "<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n (optionSelected)=\"propagateValue($event.option.value)\"\n [displayWith]=\"getDisplayFn()\"\n panelWidth=\"auto !important\"\n>\n @for (item of items | async; track $index) {\n <mat-option [value]=\"item\">\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultACItem\"\n />\n </mat-option>\n }\n @if (hasMoreItems) {\n <div class=\"mat-caption\" i18n style=\"padding: 5px 10px\">Saisir pour chercher parmi {{ nbTotal }} r\u00E9sultats</div>\n }\n</mat-autocomplete>\n\n<ng-template #defaultACItem let-item=\"item\">\n <span>{{ getDisplayFn()(item) }}</span>\n</ng-template>\n\n<!-- Input for autocomplete -->\n<mat-form-field [subscriptSizing]=\"subscriptSizing()\">\n <mat-label>{{ placeholder }}</mat-label>\n\n <input\n (blur)=\"onBlur()\"\n (change)=\"onInternalFormChange()\"\n (click)=\"autoTrigger.openPanel()\"\n (focus)=\"startSearch()\"\n (keydown.esc)=\"reset()\"\n (keydown.enter)=\"onKeyEnter()\"\n [formControl]=\"internalCtrl\"\n [matAutocomplete]=\"ac\"\n aria-label=\"Recherche et s\u00E9lection\"\n i18n-aria-label\n matInput\n [errorStateMatcher]=\"matcher\"\n />\n\n @if (hint()) {\n <mat-hint>{{ hint() }}</mat-hint>\n }\n\n <!-- Meta data -->\n @if (!loading && showIcon) {\n <mat-icon [naturalIcon]=\"icon\" matIconPrefix />\n }\n\n @if (loading) {\n <div class=\"loading-wrapper\" matIconPrefix>\n <mat-progress-spinner [diameter]=\"21\" [strokeWidth]=\"5\" mode=\"indeterminate\" />\n </div>\n }\n\n <!-- Clear button -->\n <div matIconSuffix>\n @if (internalCtrl.pristine && internalCtrl.value && internalCtrl.enabled && !clearLabel) {\n <button (click)=\"clear()\" mat-icon-button i18n-matTooltip matTooltip=\"D\u00E9s\u00E9lectionner\">\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n @if (internalCtrl.dirty && internalCtrl.enabled && optionRequired) {\n <button (click)=\"reset()\" mat-icon-button i18n-matTooltip matTooltip=\"Annuler la recherche\">\n <mat-icon naturalIcon=\"undo\" />\n </button>\n }\n @if (internalCtrl.pristine && internalCtrl.value && navigateTo) {\n <button\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n >\n <mat-icon naturalIcon=\"open_in_browser\" />\n </button>\n }\n </div>\n\n @if (hasRequiredError()) {\n <mat-error i18n>Ce champ est requis</mat-error>\n } @else if (error) {\n <mat-error>{{ error }}</mat-error>\n }\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n@if (showClearButton()) {\n <div class=\"external-buttons\">\n @if (showClearButton()) {\n <button (click)=\"clear()\" color=\"warn\" mat-button>{{ clearLabel }}</button>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column}:host>*:not(:last-child){margin-bottom:20px}:host>mat-autocomplete{margin-bottom:0!important}:host .external-buttons{display:flex;flex-direction:row}:host .external-buttons>*:not(:last-child){margin-right:10px}:host .loading-wrapper{display:flex;justify-content:center;align-items:center;width:48px;height:48px}\n"] }]
290
290
  }], propDecorators: { autoTrigger: [{
291
291
  type: ViewChild,
292
292
  args: [MatAutocompleteTrigger]
@@ -307,4 +307,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
307
307
  }], disabled: [{
308
308
  type: Input
309
309
  }] } });
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLFdBQVcsRUFDWCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF1QixXQUFXLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUMscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWpGLE9BQU8sRUFBQyw0QkFBNEIsRUFBaUIsTUFBTSx5Q0FBeUMsQ0FBQztBQUdyRyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFB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QUFZO3dCQUNaLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4QixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsVUFBVTtxQkFDYjs4QkFvQnlDLFdBQVc7c0JBQXBELFNBQVM7dUJBQUMsc0JBQXNCO2dCQUNDLFlBQVk7c0JBQTdDLFlBQVk7dUJBQUMsV0FBVztnQkFLTyxPQUFPO3NCQUF0QyxLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFLUCxjQUFjO3NCQUE3QixLQUFLO2dCQU1VLFdBQVc7c0JBQTFCLEtBQUs7Z0JBTVUsY0FBYztzQkFBN0IsS0FBSztnQkFZSyxNQUFNO3NCQURoQixLQUFLO2dCQXFDYyxRQUFRO3NCQUQzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGVzdHJveVJlZixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVNb2R1bGUsIE1hdEF1dG9jb21wbGV0ZVRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQge21lcmdlfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQYWdpbmF0ZWREYXRhfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2RhdGEtc291cmNlJztcbmltcG9ydCB7TmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlciwgUXVlcnlWYXJpYWJsZXN9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWJzdHJhY3QtbW9kZWwuc2VydmljZSc7XG5pbXBvcnQge0V4dHJhY3RUYWxsT25lLCBFeHRyYWN0VmFsbCwgTGl0ZXJhbH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtBYnN0cmFjdFNlbGVjdH0gZnJvbSAnLi4vYWJzdHJhY3Qtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1JvdXRlckxpbmt9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge01hdFRvb2x0aXBNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQge05hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICcuLi8uLi9pY29uL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge01hdElucHV0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQge01hdEZvcm1GaWVsZE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge01hdE9wdGlvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbi8vIFJldHVybiB0aGUgdHlwZSBvZiBUVmFsdWUgZm9yIHRoZSBnaXZlbiBUU2VydmljZVxudHlwZSBWYWx1ZVR5cGVGb3I8VFNlcnZpY2U+ID0gc3RyaW5nIHwgRXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+O1xuXG4vKipcbiAqIERlZmF1bHQgdXNhZ2U6XG4gKiBgYGBodG1sXG4gKiA8bmF0dXJhbC1zZWxlY3QgW3NlcnZpY2VdPVwibXlTZXJ2aWNlSW5zdGFuY2VcIiBbKG1vZGVsKV09XCJteU1vZGVsXCIgKG1vZGVsQ2hhbmdlKT1teUNoYW5nZUZuKCRldmVudCkgLz5cbiAqIGBgYFxuICpcbiAqIEN1c3RvbSB0ZW1wbGF0ZSB1c2FnZSA6XG4gKiBgYGBodG1sXG4gKiA8bmF0dXJhbC1zZWxlY3QgW3NlcnZpY2VdPVwic3ZjXCIgWyhuZ01vZGVsKV09XCJtb2RlbFwiPlxuICogICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAqICAgICAgICAgPHNwYW4+e3sgaXRlbS54eHggfX08L3NwYW4+XG4gKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqIDwvbmF0dXJhbC1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBgWyhuZ01vZGVsKV1gIGFuZCBgKG5nTW9kZWxDaGFuZ2UpYCBhcmUgb3B0aW9uYWwuXG4gKlxuICogUGxhY2Vob2xkZXIgOlxuICogYGBgaHRtbFxuICogPG5hdHVyYWwtc2VsZWN0IHBsYWNlaG9sZGVyPVwibXkgcGxhY2Vob2xkZXJcIiAvPlxuICogYGBgXG4gKlxuICogU2VhcmNoIHdpdGggbGlrZSAleHh4JSBvbiBzcGVjaWZpZWQgZmllbGQgYG5hbWVgIGluc3RlYWQgb2YgY3VzdG9tIGZpbHRlciBvbiB3aG9sZSBvYmplY3RcbiAqIGBgYGh0bWxcbiAqIDxuYXR1cmFsLXNlbGVjdCBzZWFyY2hGaWVsZD1cIm5hbWVcIiAvPlxuICogYGBgXG4gKlxuICogQWxsb3dzIHRvIGlucHV0IGZyZWUgc3RyaW5nIHdpdGhvdXQgc2VsZWN0aW5nIGFuIG9wdGlvbiBmcm9tIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uc1xuICogYGBgaHRtbFxuICogPG5hdHVyYWwtc2VsZWN0IFtvcHRpb25SZXF1aXJlZF09XCJmYWxzZVwiIC8+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuc2NzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRPcHRpb25Nb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBOYXR1cmFsSWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgICAgIFJvdXRlckxpbmssXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFNlbGVjdENvbXBvbmVudDxcbiAgICAgICAgVFNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2U8XG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBQYWdpbmF0ZWREYXRhPExpdGVyYWw+LFxuICAgICAgICAgICAgUXVlcnlWYXJpYWJsZXMsXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnlcbiAgICAgICAgPixcbiAgICA+XG4gICAgZXh0ZW5kcyBBYnN0cmFjdFNlbGVjdDxWYWx1ZVR5cGVGb3I8VFNlcnZpY2U+LCBWYWx1ZVR5cGVGb3I8VFNlcnZpY2U+PlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdFxue1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpIHB1YmxpYyBhdXRvVHJpZ2dlciE6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG4gICAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZikgcHVibGljIGl0ZW1UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlIHdpdGggd2F0Y2hBbGwgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHF1ZXJ5VmFyaWFibGVzLlxuICAgICAqL1xuICAgIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KSBwdWJsaWMgc2VydmljZSE6IFRTZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogSWYgZmFsc2UsIGFsbG93cyB0byBpbnB1dCBmcmVlIHN0cmluZyB3aXRob3V0IHNlbGVjdGluZyBhbiBvcHRpb24gZnJvbSBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgb3B0aW9uUmVxdWlyZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZpZWxkIG9uIHdoaWNoIHRvIHNlYXJjaCBmb3IsIGRlZmF1bHQgdG8gJ2N1c3RvbScuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZWR1bmRhbnQtdHlwZS1jb25zdGl0dWVudHNcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoRmllbGQ6ICdjdXN0b20nIHwgc3RyaW5nID0gJ2N1c3RvbSc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0b3Igd2l0aCB3aGljaCB0byBzZWFyY2ggZm9yLCBkZWZhdWx0IHRvICdzZWFyY2gnIGlmIGBzZWFyY2hGaWVsZGAgaXMgJ2N1c3RvbScsIGVsc2UgJ2xpa2UnLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkdW5kYW50LXR5cGUtY29uc3RpdHVlbnRzXG4gICAgQElucHV0KCkgcHVibGljIHNlYXJjaE9wZXJhdG9yOiAnc2VhcmNoJyB8IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgdGhlIGNvbW1pdHRlZCB2YWx1ZSBkdXJpbmcgc2VhcmNoIG1vZGUuXG4gICAgICogSXQncyB1c2VkIHRvIGJlIHJlc3RvcmVkIGluIGNhc2Ugd2UgY2FuY2VsIHRoZSBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGxhc3RWYWxpZFZhbHVlOiBWYWx1ZVR5cGVGb3I8VFNlcnZpY2U+IHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBZGRpdGlvbmFsIGZpbHRlciBmb3IgcXVlcnlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZmlsdGVyKGZpbHRlcjogRXh0cmFjdFZhbGw8VFNlcnZpY2U+WydmaWx0ZXInXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnYWRkaXRpb25hbC1maWx0ZXInLCB7ZmlsdGVyOiBmaWx0ZXJ9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVtcyByZXR1cm5lZCBieSBzZXJ2ZXIgdG8gc2hvdyBpbiBsaXN0aW5nXG4gICAgICovXG4gICAgcHVibGljIGl0ZW1zOiBudWxsIHwgT2JzZXJ2YWJsZTxyZWFkb25seSBhbnlbXT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB3ZSBhcmUgc2VhcmNoaW5nIHNvbWV0aGluZ1xuICAgICAqL1xuICAgIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJZiBzb21lIGl0ZW1zIGFyZSBub3Qgc2hvd24gaW4gcmVzdWx0IGxpc3RcbiAgICAgKiBTaG93cyBhIG1lc3NhZ2UgYWZ0ZXIgbGlzdCBpZiB0cnVlXG4gICAgICovXG4gICAgcHVibGljIGhhc01vcmVJdGVtcyA9IGZhbHNlO1xuXG4gICAgcHVibGljIG5iVG90YWwgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBwYWdlIHNpemVcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhZ2VTaXplID0gMTA7XG5cbiAgICAvKipcbiAgICAgKiBJbml0IHNlYXJjaCBvcHRpb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB2YXJpYWJsZXNNYW5hZ2VyID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8UXVlcnlWYXJpYWJsZXM+KCk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB2YWx1ZSBjYW4gYmUgY2hhbmdlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICBkaXNhYmxlZCA/IHRoaXMuaW50ZXJuYWxDdHJsLmRpc2FibGUoKSA6IHRoaXMuaW50ZXJuYWxDdHJsLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5pbml0U2VydmljZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgzMDApKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2YWwgPT4gdGhpcy5zZWFyY2godmFsKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSW50ZXJuYWxGb3JtQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICAvLyBJZiB3ZSBhbGxvdyBmcmVlIHN0cmluZyB0eXBpbmcsIHRoZW4gd2UgcHJvcGFnYXRlIGl0IGFzIGl0IGlzIGJlaW5nIHR5cGVkXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25SZXF1aXJlZCkge1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVWYWx1ZSh0aGlzLmludGVybmFsQ3RybC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbnRlcm5hbEN0cmwuZGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5vbkJsdXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldCBmb3JtIHRvIGl0J3MgaW5pdGlhbCB2YWx1ZVxuICAgICAqIERpc2NhcmQgc2VhcmNoZWQgdGV4dCAoaW4gYXV0b2NvbXBsZXRlIHVzZSBjYXNlKVxuICAgICAqIERvZXN0IG5vdCBjb21taXQgdGhlIGNoYW5nZSB0byB0aGUgbW9kZWwgKG5vIGNoYW5nZSBldmVudCBpcyBlbWl0dGVkKVxuICAgICAqL1xuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEN0cmwuc2V0VmFsdWUodGhpcy5sYXN0VmFsaWRWYWx1ZSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW50ZXIgc2VtYW50aWMgbWVhbnMgd2Ugd2FudCB0byB2YWxpZGF0ZSBzb21ldGhpbmcuXG4gICAgICogSWYgd2UgaGl0IEVOVEVSIHdoaWxlIHR5cGluZyBhIHRleHQsIHRoZSBzdHJva2UgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSB2YWx1ZSBpcyBpbnZhbGlkIChpdCdzIGFjY2VwdGVkIGluIGZyZWUgdGV4dCBtb2RlKVxuICAgICAqIElmIHdlIGhpdCBFTlRFUiB3aGlsZSB0aGUgaW5wdXQgZmllbGQgaXMgZW1wdHksIHdlIHZhbGlkYXRlIHRoZSB1bnNlbGVjdGlvbiAoZW1wdHkgaXMgYSB2YWxpZCB2YWx1ZSlcbiAgICAgKi9cbiAgICBwdWJsaWMgb25LZXlFbnRlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmludGVybmFsQ3RybC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5hdXRvVHJpZ2dlci5jbG9zZVBhbmVsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogVmFsdWVUeXBlRm9yPFRTZXJ2aWNlPiB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMubGFzdFZhbGlkVmFsdWUgPSB0aGlzLmludGVybmFsQ3RybC52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICAvLyBBc3NlcnQgZ2l2ZW4gc2VydmljZSBoYXMgYSB3YXRjaEFsbCBmdW5jdGlvblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VydmljZS53YXRjaEFsbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgc2VydmljZSBkb2VzIG5vdCBjb250YWluIHdhdGNoQWxsIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWZhdWx0UGFnaW5hdGlvbiA9IHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IG1lcmdlKGRlZmF1bHRQYWdpbmF0aW9uLCB0aGlzLmdldFNlYXJjaEZpbHRlcihudWxsKSk7XG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3ZhcmlhYmxlcycsIHZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0U2VhcmNoKCk6IHZvaWQge1xuICAgICAgICAvLyBTdGFydCBzZWFyY2ggb25seSBvbmNlXG4gICAgICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbml0IHF1ZXJ5LCBhbmQgd2hlbiBxdWVyeSByZXN1bHRzIGFycml2ZSwgZmluaXNoIGxvYWRpbmcsIGFuZCBjb3VudCBpdGVtc1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5zZXJ2aWNlLndhdGNoQWxsKHRoaXMudmFyaWFibGVzTWFuYWdlcikucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSksXG4gICAgICAgICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5uYlRvdGFsID0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29uc3QgbmJMaXN0ZWQgPSBNYXRoLm1pbihkYXRhLmxlbmd0aCwgdGhpcy5wYWdlU2l6ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNNb3JlSXRlbXMgPSB0aGlzLm5iVG90YWwgPiBuYkxpc3RlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLml0ZW1zO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pdGVtcy5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21taXQgdGhlIG1vZGVsIGNoYW5nZVxuICAgICAqIFNldCBpbnRlcm5hbCBmb3JtIGFzIHByaXN0aW5lIHRvIHJlZmxlY3QgdGhhdCB0aGUgdmlzaWJsZSB2YWx1ZSBtYXRjaCB0aGUgbW9kZWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcHJvcGFnYXRlVmFsdWUodmFsdWU6IFZhbHVlVHlwZUZvcjxUU2VydmljZT4gfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIHRoaXMubGFzdFZhbGlkVmFsdWUgPSB0aGlzLmludGVybmFsQ3RybC52YWx1ZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgLy8gSWYgd2UgY2xlYXJlZCB2YWx1ZSB2aWEgYnV0dG9uLCBidXQgd2UgYWxsb3cgZnJlZSBzdHJpbmcgdHlwaW5nLCB0aGVuIGZvcmNlIHRvIGVtcHR5IHN0cmluZ1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9uUmVxdWlyZWQgJiYgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5wcm9wYWdhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmVyeSBpbXBvcnRhbnQgdG8gcmV0dXJuIHNvbWV0aGluZywgYWJvdmUgYWxsIGlmIFtzZWxlY3RdPSdkaXNwbGF5ZWRWYWx1ZScgYXR0cmlidXRlIHZhbHVlIGlzIHVzZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGlzcGxheUZuKCk6IChpdGVtOiBWYWx1ZVR5cGVGb3I8VFNlcnZpY2U+IHwgbnVsbCkgPT4gc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheVdpdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlXaXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaXRlbS5mdWxsTmFtZSB8fCBpdGVtLm5hbWUgfHwgaXRlbS5pYmFuIHx8IGl0ZW1bdGhpcy5zZWFyY2hGaWVsZF0gfHwgaXRlbS5pZDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoKG51bGwpO1xuICAgICAgICBzdXBlci5jbGVhcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWFyY2godGVybTogVmFsdWVUeXBlRm9yPFRTZXJ2aWNlPiB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXJtID09PSAnc3RyaW5nJyB8fCB0ZXJtID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGVybSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9ICEhdGhpcy5pdGVtcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCd2YXJpYWJsZXMnLCB0aGlzLmdldFNlYXJjaEZpbHRlcih0ZXJtKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEN0cmw/LmVuYWJsZWQgJiYgISF0aGlzLmNsZWFyTGFiZWwgJiYgISF0aGlzLmludGVybmFsQ3RybC52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlYXJjaEZpbHRlcih0ZXJtOiBzdHJpbmcgfCBudWxsKTogUXVlcnlWYXJpYWJsZXMge1xuICAgICAgICBjb25zdCBzZWFyY2hPcGVyYXRvciA9IHRoaXMuc2VhcmNoT3BlcmF0b3IgPz8gKHRoaXMuc2VhcmNoRmllbGQgPT09ICdjdXN0b20nID8gJ3NlYXJjaCcgOiAnbGlrZScpO1xuICAgICAgICBpZiAodGVybSAmJiBzZWFyY2hPcGVyYXRvciA9PT0gJ2xpa2UnKSB7XG4gICAgICAgICAgICB0ZXJtID0gJyUnICsgdGVybSArICclJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBncm91cHM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMuc2VhcmNoRmllbGRdOiB0ZXJtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hPcGVyYXRvcl06IHt2YWx1ZTogdGVybX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFyaWFibGVzRm9yRGVidWcoKTogUmVhZG9ubHk8UXVlcnlWYXJpYWJsZXM+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFyaWFibGVzTWFuYWdlci52YXJpYWJsZXMudmFsdWU7XG4gICAgfVxufVxuIiwiPCEtLSBBdXRvY29tcGxldGUgbWVudSAtLT5cbjxtYXQtYXV0b2NvbXBsZXRlXG4gICAgI2FjPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAob3B0aW9uU2VsZWN0ZWQpPVwicHJvcGFnYXRlVmFsdWUoJGV2ZW50Lm9wdGlvbi52YWx1ZSlcIlxuICAgIFtkaXNwbGF5V2l0aF09XCJnZXREaXNwbGF5Rm4oKVwiXG4gICAgcGFuZWxXaWR0aD1cImF1dG8gIWltcG9ydGFudFwiXG4+XG4gICAgQGZvciAoaXRlbSBvZiBpdGVtcyB8IGFzeW5jOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogaXRlbX1cIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZSA/IGl0ZW1UZW1wbGF0ZSA6IGRlZmF1bHRBQ0l0ZW1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIH1cbiAgICBAaWYgKGhhc01vcmVJdGVtcykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWNhcHRpb25cIiBpMThuIHN0eWxlPVwicGFkZGluZzogNXB4IDEwcHhcIj5TYWlzaXIgcG91ciBjaGVyY2hlciBwYXJtaSB7eyBuYlRvdGFsIH19IHLDqXN1bHRhdHM8L2Rpdj5cbiAgICB9XG48L21hdC1hdXRvY29tcGxldGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEFDSXRlbSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgICA8c3Bhbj57eyBnZXREaXNwbGF5Rm4oKShpdGVtKSB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gSW5wdXQgZm9yIGF1dG9jb21wbGV0ZSAtLT5cbjxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG5cbiAgICA8aW5wdXRcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uSW50ZXJuYWxGb3JtQ2hhbmdlKClcIlxuICAgICAgICAoY2xpY2spPVwiYXV0b1RyaWdnZXIub3BlblBhbmVsKClcIlxuICAgICAgICAoZm9jdXMpPVwic3RhcnRTZWFyY2goKVwiXG4gICAgICAgIChrZXlkb3duLmVzYyk9XCJyZXNldCgpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25LZXlFbnRlcigpXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImludGVybmFsQ3RybFwiXG4gICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYWNcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiUmVjaGVyY2hlIGV0IHPDqWxlY3Rpb25cIlxuICAgICAgICBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgW2Vycm9yU3RhdGVNYXRjaGVyXT1cIm1hdGNoZXJcIlxuICAgIC8+XG5cbiAgICBAaWYgKGhpbnQpIHtcbiAgICAgICAgPG1hdC1oaW50Pnt7IGhpbnQgfX08L21hdC1oaW50PlxuICAgIH1cblxuICAgIDwhLS0gTWV0YSBkYXRhIC0tPlxuICAgIEBpZiAoIWxvYWRpbmcgJiYgc2hvd0ljb24pIHtcbiAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJpY29uXCIgbWF0SWNvblByZWZpeCAvPlxuICAgIH1cblxuICAgIEBpZiAobG9hZGluZykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy13cmFwcGVyXCIgbWF0SWNvblByZWZpeD5cbiAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiMjFcIiBbc3Ryb2tlV2lkdGhdPVwiNVwiIG1vZGU9XCJpbmRldGVybWluYXRlXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBDbGVhciBidXR0b24gLS0+XG4gICAgPGRpdiBtYXRJY29uU3VmZml4PlxuICAgICAgICBAaWYgKGludGVybmFsQ3RybC5wcmlzdGluZSAmJiBpbnRlcm5hbEN0cmwudmFsdWUgJiYgaW50ZXJuYWxDdHJsLmVuYWJsZWQgJiYgIWNsZWFyTGFiZWwpIHtcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsZWFyKClcIiBtYXQtaWNvbi1idXR0b24gaTE4bi1tYXRUb29sdGlwIG1hdFRvb2x0aXA9XCJEw6lzw6lsZWN0aW9ubmVyXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG5hdHVyYWxJY29uPVwiY2xvc2VcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChpbnRlcm5hbEN0cmwuZGlydHkgJiYgaW50ZXJuYWxDdHJsLmVuYWJsZWQgJiYgb3B0aW9uUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInJlc2V0KClcIiBtYXQtaWNvbi1idXR0b24gaTE4bi1tYXRUb29sdGlwIG1hdFRvb2x0aXA9XCJBbm51bGVyIGxhIHJlY2hlcmNoZVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBuYXR1cmFsSWNvbj1cInVuZG9cIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChpbnRlcm5hbEN0cmwucHJpc3RpbmUgJiYgaW50ZXJuYWxDdHJsLnZhbHVlICYmIG5hdmlnYXRlVG8pIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJuYXZpZ2F0ZVRvXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTmF2aWd1ZXIgdmVyc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG5hdHVyYWxJY29uPVwib3Blbl9pbl9icm93c2VyXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGhhc1JlcXVpcmVkRXJyb3IoKSkge1xuICAgICAgICA8bWF0LWVycm9yIGkxOG4+Q2UgY2hhbXAgZXN0IHJlcXVpczwvbWF0LWVycm9yPlxuICAgIH0gQGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgIDxtYXQtZXJyb3I+e3sgZXJyb3IgfX08L21hdC1lcnJvcj5cbiAgICB9XG48L21hdC1mb3JtLWZpZWxkPlxuXG48IS0tIEFkZGl0aW9uYWwgKHVuKXNlbGVjdC8odW4pbGluayBidXR0b25zIGZvciBtb3JlIHZpc3VhbCBjb2hlc2lvbiB3aXRoIG5hdHVyYWwtcmVsYXRpb25zIC0tPjwhLS0gW2NsZWFyTGFiZWxdIGFuZC9vciBbc2VsZWN0TGFiZWxdIGhhcyB0byBiZSBnaXZlbiBhcyBhdHRyaWJ1dGUgaW5wdXQgLS0+XG5AaWYgKHNob3dDbGVhckJ1dHRvbigpKSB7XG4gICAgPGRpdiBjbGFzcz1cImV4dGVybmFsLWJ1dHRvbnNcIj5cbiAgICAgICAgQGlmIChzaG93Q2xlYXJCdXR0b24oKSkge1xuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXIoKVwiIGNvbG9yPVwid2FyblwiIG1hdC1idXR0b24+e3sgY2xlYXJMYWJlbCB9fTwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG59XG4iXX0=
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLFdBQVcsRUFDWCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF1QixXQUFXLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUMscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWhDLE9BQU8sRUFBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWpGLE9BQU8sRUFBQyw0QkFBNEIsRUFBaUIsTUFBTSx5Q0FBeUMsQ0FBQztBQUdyRyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFB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QUFZO3dCQUNaLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4QixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsVUFBVTtxQkFDYjs4QkFvQnlDLFdBQVc7c0JBQXBELFNBQVM7dUJBQUMsc0JBQXNCO2dCQUNDLFlBQVk7c0JBQTdDLFlBQVk7dUJBQUMsV0FBVztnQkFLTyxPQUFPO3NCQUF0QyxLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFLUCxjQUFjO3NCQUE3QixLQUFLO2dCQU1VLFdBQVc7c0JBQTFCLEtBQUs7Z0JBTVUsY0FBYztzQkFBN0IsS0FBSztnQkFZSyxNQUFNO3NCQURoQixLQUFLO2dCQXFDYyxRQUFRO3NCQUQzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGVzdHJveVJlZixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVNb2R1bGUsIE1hdEF1dG9jb21wbGV0ZVRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQge21lcmdlfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQYWdpbmF0ZWREYXRhfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2RhdGEtc291cmNlJztcbmltcG9ydCB7TmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlciwgUXVlcnlWYXJpYWJsZXN9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWJzdHJhY3QtbW9kZWwuc2VydmljZSc7XG5pbXBvcnQge0V4dHJhY3RUYWxsT25lLCBFeHRyYWN0VmFsbCwgTGl0ZXJhbH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtBYnN0cmFjdFNlbGVjdH0gZnJvbSAnLi4vYWJzdHJhY3Qtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1JvdXRlckxpbmt9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge01hdFRvb2x0aXBNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQge05hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICcuLi8uLi9pY29uL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge01hdElucHV0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQge01hdEZvcm1GaWVsZE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge01hdE9wdGlvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbi8vIFJldHVybiB0aGUgdHlwZSBvZiBUVmFsdWUgZm9yIHRoZSBnaXZlbiBUU2VydmljZVxudHlwZSBWYWx1ZVR5cGVGb3I8VFNlcnZpY2U+ID0gc3RyaW5nIHwgRXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+O1xuXG4vKipcbiAqIERlZmF1bHQgdXNhZ2U6XG4gKiBgYGBodG1sXG4gKiA8bmF0dXJhbC1zZWxlY3QgW3NlcnZpY2VdPVwibXlTZXJ2aWNlSW5zdGFuY2VcIiBbKG1vZGVsKV09XCJteU1vZGVsXCIgKG1vZGVsQ2hhbmdlKT1teUNoYW5nZUZuKCRldmVudCkgLz5cbiAqIGBgYFxuICpcbiAqIEN1c3RvbSB0ZW1wbGF0ZSB1c2FnZSA6XG4gKiBgYGBodG1sXG4gKiA8bmF0dXJhbC1zZWxlY3QgW3NlcnZpY2VdPVwic3ZjXCIgWyhuZ01vZGVsKV09XCJtb2RlbFwiPlxuICogICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAqICAgICAgICAgPHNwYW4+e3sgaXRlbS54eHggfX08L3NwYW4+XG4gKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqIDwvbmF0dXJhbC1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBgWyhuZ01vZGVsKV1gIGFuZCBgKG5nTW9kZWxDaGFuZ2UpYCBhcmUgb3B0aW9uYWwuXG4gKlxuICogUGxhY2Vob2xkZXIgOlxuICogYGBgaHRtbFxuICogPG5hdHVyYWwtc2VsZWN0IHBsYWNlaG9sZGVyPVwibXkgcGxhY2Vob2xkZXJcIiAvPlxuICogYGBgXG4gKlxuICogU2VhcmNoIHdpdGggbGlrZSAleHh4JSBvbiBzcGVjaWZpZWQgZmllbGQgYG5hbWVgIGluc3RlYWQgb2YgY3VzdG9tIGZpbHRlciBvbiB3aG9sZSBvYmplY3RcbiAqIGBgYGh0bWxcbiAqIDxuYXR1cmFsLXNlbGVjdCBzZWFyY2hGaWVsZD1cIm5hbWVcIiAvPlxuICogYGBgXG4gKlxuICogQWxsb3dzIHRvIGlucHV0IGZyZWUgc3RyaW5nIHdpdGhvdXQgc2VsZWN0aW5nIGFuIG9wdGlvbiBmcm9tIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uc1xuICogYGBgaHRtbFxuICogPG5hdHVyYWwtc2VsZWN0IFtvcHRpb25SZXF1aXJlZF09XCJmYWxzZVwiIC8+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuc2NzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRPcHRpb25Nb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBOYXR1cmFsSWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgICAgIFJvdXRlckxpbmssXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFNlbGVjdENvbXBvbmVudDxcbiAgICAgICAgVFNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2U8XG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBQYWdpbmF0ZWREYXRhPExpdGVyYWw+LFxuICAgICAgICAgICAgUXVlcnlWYXJpYWJsZXMsXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnlcbiAgICAgICAgPixcbiAgICA+XG4gICAgZXh0ZW5kcyBBYnN0cmFjdFNlbGVjdDxWYWx1ZVR5cGVGb3I8VFNlcnZpY2U+LCBWYWx1ZVR5cGVGb3I8VFNlcnZpY2U+PlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdFxue1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpIHB1YmxpYyBhdXRvVHJpZ2dlciE6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG4gICAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZikgcHVibGljIGl0ZW1UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlIHdpdGggd2F0Y2hBbGwgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHF1ZXJ5VmFyaWFibGVzLlxuICAgICAqL1xuICAgIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KSBwdWJsaWMgc2VydmljZSE6IFRTZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogSWYgZmFsc2UsIGFsbG93cyB0byBpbnB1dCBmcmVlIHN0cmluZyB3aXRob3V0IHNlbGVjdGluZyBhbiBvcHRpb24gZnJvbSBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgb3B0aW9uUmVxdWlyZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZpZWxkIG9uIHdoaWNoIHRvIHNlYXJjaCBmb3IsIGRlZmF1bHQgdG8gJ2N1c3RvbScuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZWR1bmRhbnQtdHlwZS1jb25zdGl0dWVudHNcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoRmllbGQ6ICdjdXN0b20nIHwgc3RyaW5nID0gJ2N1c3RvbSc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3BlcmF0b3Igd2l0aCB3aGljaCB0byBzZWFyY2ggZm9yLCBkZWZhdWx0IHRvICdzZWFyY2gnIGlmIGBzZWFyY2hGaWVsZGAgaXMgJ2N1c3RvbScsIGVsc2UgJ2xpa2UnLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkdW5kYW50LXR5cGUtY29uc3RpdHVlbnRzXG4gICAgQElucHV0KCkgcHVibGljIHNlYXJjaE9wZXJhdG9yOiAnc2VhcmNoJyB8IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgdGhlIGNvbW1pdHRlZCB2YWx1ZSBkdXJpbmcgc2VhcmNoIG1vZGUuXG4gICAgICogSXQncyB1c2VkIHRvIGJlIHJlc3RvcmVkIGluIGNhc2Ugd2UgY2FuY2VsIHRoZSBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGxhc3RWYWxpZFZhbHVlOiBWYWx1ZVR5cGVGb3I8VFNlcnZpY2U+IHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBBZGRpdGlvbmFsIGZpbHRlciBmb3IgcXVlcnlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZmlsdGVyKGZpbHRlcjogRXh0cmFjdFZhbGw8VFNlcnZpY2U+WydmaWx0ZXInXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnYWRkaXRpb25hbC1maWx0ZXInLCB7ZmlsdGVyOiBmaWx0ZXJ9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVtcyByZXR1cm5lZCBieSBzZXJ2ZXIgdG8gc2hvdyBpbiBsaXN0aW5nXG4gICAgICovXG4gICAgcHVibGljIGl0ZW1zOiBudWxsIHwgT2JzZXJ2YWJsZTxyZWFkb25seSBhbnlbXT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB3ZSBhcmUgc2VhcmNoaW5nIHNvbWV0aGluZ1xuICAgICAqL1xuICAgIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJZiBzb21lIGl0ZW1zIGFyZSBub3Qgc2hvd24gaW4gcmVzdWx0IGxpc3RcbiAgICAgKiBTaG93cyBhIG1lc3NhZ2UgYWZ0ZXIgbGlzdCBpZiB0cnVlXG4gICAgICovXG4gICAgcHVibGljIGhhc01vcmVJdGVtcyA9IGZhbHNlO1xuXG4gICAgcHVibGljIG5iVG90YWwgPSAwO1xuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBwYWdlIHNpemVcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhZ2VTaXplID0gMTA7XG5cbiAgICAvKipcbiAgICAgKiBJbml0IHNlYXJjaCBvcHRpb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB2YXJpYWJsZXNNYW5hZ2VyID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8UXVlcnlWYXJpYWJsZXM+KCk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSB2YWx1ZSBjYW4gYmUgY2hhbmdlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICBkaXNhYmxlZCA/IHRoaXMuaW50ZXJuYWxDdHJsLmRpc2FibGUoKSA6IHRoaXMuaW50ZXJuYWxDdHJsLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5pbml0U2VydmljZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgzMDApKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2YWwgPT4gdGhpcy5zZWFyY2godmFsKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSW50ZXJuYWxGb3JtQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICAvLyBJZiB3ZSBhbGxvdyBmcmVlIHN0cmluZyB0eXBpbmcsIHRoZW4gd2UgcHJvcGFnYXRlIGl0IGFzIGl0IGlzIGJlaW5nIHR5cGVkXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25SZXF1aXJlZCkge1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVWYWx1ZSh0aGlzLmludGVybmFsQ3RybC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pbnRlcm5hbEN0cmwuZGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5vbkJsdXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldCBmb3JtIHRvIGl0J3MgaW5pdGlhbCB2YWx1ZVxuICAgICAqIERpc2NhcmQgc2VhcmNoZWQgdGV4dCAoaW4gYXV0b2NvbXBsZXRlIHVzZSBjYXNlKVxuICAgICAqIERvZXN0IG5vdCBjb21taXQgdGhlIGNoYW5nZSB0byB0aGUgbW9kZWwgKG5vIGNoYW5nZSBldmVudCBpcyBlbWl0dGVkKVxuICAgICAqL1xuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEN0cmwuc2V0VmFsdWUodGhpcy5sYXN0VmFsaWRWYWx1ZSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW50ZXIgc2VtYW50aWMgbWVhbnMgd2Ugd2FudCB0byB2YWxpZGF0ZSBzb21ldGhpbmcuXG4gICAgICogSWYgd2UgaGl0IEVOVEVSIHdoaWxlIHR5cGluZyBhIHRleHQsIHRoZSBzdHJva2UgaXMgaWdub3JlZCBiZWNhdXNlIHRoZSB2YWx1ZSBpcyBpbnZhbGlkIChpdCdzIGFjY2VwdGVkIGluIGZyZWUgdGV4dCBtb2RlKVxuICAgICAqIElmIHdlIGhpdCBFTlRFUiB3aGlsZSB0aGUgaW5wdXQgZmllbGQgaXMgZW1wdHksIHdlIHZhbGlkYXRlIHRoZSB1bnNlbGVjdGlvbiAoZW1wdHkgaXMgYSB2YWxpZCB2YWx1ZSlcbiAgICAgKi9cbiAgICBwdWJsaWMgb25LZXlFbnRlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmludGVybmFsQ3RybC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5hdXRvVHJpZ2dlci5jbG9zZVBhbmVsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogVmFsdWVUeXBlRm9yPFRTZXJ2aWNlPiB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMubGFzdFZhbGlkVmFsdWUgPSB0aGlzLmludGVybmFsQ3RybC52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICAvLyBBc3NlcnQgZ2l2ZW4gc2VydmljZSBoYXMgYSB3YXRjaEFsbCBmdW5jdGlvblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VydmljZS53YXRjaEFsbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgc2VydmljZSBkb2VzIG5vdCBjb250YWluIHdhdGNoQWxsIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWZhdWx0UGFnaW5hdGlvbiA9IHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IG1lcmdlKGRlZmF1bHRQYWdpbmF0aW9uLCB0aGlzLmdldFNlYXJjaEZpbHRlcihudWxsKSk7XG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3ZhcmlhYmxlcycsIHZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0U2VhcmNoKCk6IHZvaWQge1xuICAgICAgICAvLyBTdGFydCBzZWFyY2ggb25seSBvbmNlXG4gICAgICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbml0IHF1ZXJ5LCBhbmQgd2hlbiBxdWVyeSByZXN1bHRzIGFycml2ZSwgZmluaXNoIGxvYWRpbmcsIGFuZCBjb3VudCBpdGVtc1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5zZXJ2aWNlLndhdGNoQWxsKHRoaXMudmFyaWFibGVzTWFuYWdlcikucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSksXG4gICAgICAgICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5uYlRvdGFsID0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29uc3QgbmJMaXN0ZWQgPSBNYXRoLm1pbihkYXRhLmxlbmd0aCwgdGhpcy5wYWdlU2l6ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNNb3JlSXRlbXMgPSB0aGlzLm5iVG90YWwgPiBuYkxpc3RlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLml0ZW1zO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pdGVtcy5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21taXQgdGhlIG1vZGVsIGNoYW5nZVxuICAgICAqIFNldCBpbnRlcm5hbCBmb3JtIGFzIHByaXN0aW5lIHRvIHJlZmxlY3QgdGhhdCB0aGUgdmlzaWJsZSB2YWx1ZSBtYXRjaCB0aGUgbW9kZWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcHJvcGFnYXRlVmFsdWUodmFsdWU6IFZhbHVlVHlwZUZvcjxUU2VydmljZT4gfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIHRoaXMubGFzdFZhbGlkVmFsdWUgPSB0aGlzLmludGVybmFsQ3RybC52YWx1ZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgLy8gSWYgd2UgY2xlYXJlZCB2YWx1ZSB2aWEgYnV0dG9uLCBidXQgd2UgYWxsb3cgZnJlZSBzdHJpbmcgdHlwaW5nLCB0aGVuIGZvcmNlIHRvIGVtcHR5IHN0cmluZ1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9uUmVxdWlyZWQgJiYgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5wcm9wYWdhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmVyeSBpbXBvcnRhbnQgdG8gcmV0dXJuIHNvbWV0aGluZywgYWJvdmUgYWxsIGlmIFtzZWxlY3RdPSdkaXNwbGF5ZWRWYWx1ZScgYXR0cmlidXRlIHZhbHVlIGlzIHVzZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGlzcGxheUZuKCk6IChpdGVtOiBWYWx1ZVR5cGVGb3I8VFNlcnZpY2U+IHwgbnVsbCkgPT4gc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheVdpdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlXaXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaXRlbS5mdWxsTmFtZSB8fCBpdGVtLm5hbWUgfHwgaXRlbS5pYmFuIHx8IGl0ZW1bdGhpcy5zZWFyY2hGaWVsZF0gfHwgaXRlbS5pZDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoKG51bGwpO1xuICAgICAgICBzdXBlci5jbGVhcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWFyY2godGVybTogVmFsdWVUeXBlRm9yPFRTZXJ2aWNlPiB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXJtID09PSAnc3RyaW5nJyB8fCB0ZXJtID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGVybSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9ICEhdGhpcy5pdGVtcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCd2YXJpYWJsZXMnLCB0aGlzLmdldFNlYXJjaEZpbHRlcih0ZXJtKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEN0cmw/LmVuYWJsZWQgJiYgISF0aGlzLmNsZWFyTGFiZWwgJiYgISF0aGlzLmludGVybmFsQ3RybC52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlYXJjaEZpbHRlcih0ZXJtOiBzdHJpbmcgfCBudWxsKTogUXVlcnlWYXJpYWJsZXMge1xuICAgICAgICBjb25zdCBzZWFyY2hPcGVyYXRvciA9IHRoaXMuc2VhcmNoT3BlcmF0b3IgPz8gKHRoaXMuc2VhcmNoRmllbGQgPT09ICdjdXN0b20nID8gJ3NlYXJjaCcgOiAnbGlrZScpO1xuICAgICAgICBpZiAodGVybSAmJiBzZWFyY2hPcGVyYXRvciA9PT0gJ2xpa2UnKSB7XG4gICAgICAgICAgICB0ZXJtID0gJyUnICsgdGVybSArICclJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICBncm91cHM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMuc2VhcmNoRmllbGRdOiB0ZXJtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hPcGVyYXRvcl06IHt2YWx1ZTogdGVybX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFyaWFibGVzRm9yRGVidWcoKTogUmVhZG9ubHk8UXVlcnlWYXJpYWJsZXM+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFyaWFibGVzTWFuYWdlci52YXJpYWJsZXMudmFsdWU7XG4gICAgfVxufVxuIiwiPCEtLSBBdXRvY29tcGxldGUgbWVudSAtLT5cbjxtYXQtYXV0b2NvbXBsZXRlXG4gICAgI2FjPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAob3B0aW9uU2VsZWN0ZWQpPVwicHJvcGFnYXRlVmFsdWUoJGV2ZW50Lm9wdGlvbi52YWx1ZSlcIlxuICAgIFtkaXNwbGF5V2l0aF09XCJnZXREaXNwbGF5Rm4oKVwiXG4gICAgcGFuZWxXaWR0aD1cImF1dG8gIWltcG9ydGFudFwiXG4+XG4gICAgQGZvciAoaXRlbSBvZiBpdGVtcyB8IGFzeW5jOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogaXRlbX1cIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZSA/IGl0ZW1UZW1wbGF0ZSA6IGRlZmF1bHRBQ0l0ZW1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIH1cbiAgICBAaWYgKGhhc01vcmVJdGVtcykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWNhcHRpb25cIiBpMThuIHN0eWxlPVwicGFkZGluZzogNXB4IDEwcHhcIj5TYWlzaXIgcG91ciBjaGVyY2hlciBwYXJtaSB7eyBuYlRvdGFsIH19IHLDqXN1bHRhdHM8L2Rpdj5cbiAgICB9XG48L21hdC1hdXRvY29tcGxldGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEFDSXRlbSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgICA8c3Bhbj57eyBnZXREaXNwbGF5Rm4oKShpdGVtKSB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gSW5wdXQgZm9yIGF1dG9jb21wbGV0ZSAtLT5cbjxtYXQtZm9ybS1maWVsZCBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZygpXCI+XG4gICAgPG1hdC1sYWJlbD57eyBwbGFjZWhvbGRlciB9fTwvbWF0LWxhYmVsPlxuXG4gICAgPGlucHV0XG4gICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJvbkludGVybmFsRm9ybUNoYW5nZSgpXCJcbiAgICAgICAgKGNsaWNrKT1cImF1dG9UcmlnZ2VyLm9wZW5QYW5lbCgpXCJcbiAgICAgICAgKGZvY3VzKT1cInN0YXJ0U2VhcmNoKClcIlxuICAgICAgICAoa2V5ZG93bi5lc2MpPVwicmVzZXQoKVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uS2V5RW50ZXIoKVwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJpbnRlcm5hbEN0cmxcIlxuICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImFjXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIlJlY2hlcmNoZSBldCBzw6lsZWN0aW9uXCJcbiAgICAgICAgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIFtlcnJvclN0YXRlTWF0Y2hlcl09XCJtYXRjaGVyXCJcbiAgICAvPlxuXG4gICAgQGlmIChoaW50KCkpIHtcbiAgICAgICAgPG1hdC1oaW50Pnt7IGhpbnQoKSB9fTwvbWF0LWhpbnQ+XG4gICAgfVxuXG4gICAgPCEtLSBNZXRhIGRhdGEgLS0+XG4gICAgQGlmICghbG9hZGluZyAmJiBzaG93SWNvbikge1xuICAgICAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cImljb25cIiBtYXRJY29uUHJlZml4IC8+XG4gICAgfVxuXG4gICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXdyYXBwZXJcIiBtYXRJY29uUHJlZml4PlxuICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyIFtkaWFtZXRlcl09XCIyMVwiIFtzdHJva2VXaWR0aF09XCI1XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tIENsZWFyIGJ1dHRvbiAtLT5cbiAgICA8ZGl2IG1hdEljb25TdWZmaXg+XG4gICAgICAgIEBpZiAoaW50ZXJuYWxDdHJsLnByaXN0aW5lICYmIGludGVybmFsQ3RybC52YWx1ZSAmJiBpbnRlcm5hbEN0cmwuZW5hYmxlZCAmJiAhY2xlYXJMYWJlbCkge1xuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXIoKVwiIG1hdC1pY29uLWJ1dHRvbiBpMThuLW1hdFRvb2x0aXAgbWF0VG9vbHRpcD1cIkTDqXPDqWxlY3Rpb25uZXJcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbmF0dXJhbEljb249XCJjbG9zZVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGludGVybmFsQ3RybC5kaXJ0eSAmJiBpbnRlcm5hbEN0cmwuZW5hYmxlZCAmJiBvcHRpb25SZXF1aXJlZCkge1xuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiIG1hdC1pY29uLWJ1dHRvbiBpMThuLW1hdFRvb2x0aXAgbWF0VG9vbHRpcD1cIkFubnVsZXIgbGEgcmVjaGVyY2hlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG5hdHVyYWxJY29uPVwidW5kb1wiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGludGVybmFsQ3RybC5wcmlzdGluZSAmJiBpbnRlcm5hbEN0cmwudmFsdWUgJiYgbmF2aWdhdGVUbykge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIm5hdmlnYXRlVG9cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJOYXZpZ3VlciB2ZXJzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbmF0dXJhbEljb249XCJvcGVuX2luX2Jyb3dzZXJcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoaGFzUmVxdWlyZWRFcnJvcigpKSB7XG4gICAgICAgIDxtYXQtZXJyb3IgaTE4bj5DZSBjaGFtcCBlc3QgcmVxdWlzPC9tYXQtZXJyb3I+XG4gICAgfSBAZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgPG1hdC1lcnJvcj57eyBlcnJvciB9fTwvbWF0LWVycm9yPlxuICAgIH1cbjwvbWF0LWZvcm0tZmllbGQ+XG5cbjwhLS0gQWRkaXRpb25hbCAodW4pc2VsZWN0Lyh1bilsaW5rIGJ1dHRvbnMgZm9yIG1vcmUgdmlzdWFsIGNvaGVzaW9uIHdpdGggbmF0dXJhbC1yZWxhdGlvbnMgLS0+PCEtLSBbY2xlYXJMYWJlbF0gYW5kL29yIFtzZWxlY3RMYWJlbF0gaGFzIHRvIGJlIGdpdmVuIGFzIGF0dHJpYnV0ZSBpbnB1dCAtLT5cbkBpZiAoc2hvd0NsZWFyQnV0dG9uKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZXh0ZXJuYWwtYnV0dG9uc1wiPlxuICAgICAgICBAaWYgKHNob3dDbGVhckJ1dHRvbigpKSB7XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbGVhcigpXCIgY29sb3I9XCJ3YXJuXCIgbWF0LWJ1dHRvbj57eyBjbGVhckxhYmVsIH19PC9idXR0b24+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbn1cbiJdfQ==