@ecodev/natural 38.0.1 → 41.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -25,7 +25,7 @@ function unwrapNavigable(item) {
25
25
  * Components inheriting from this class can be used as standalone with input attributes.
26
26
  *
27
27
  * Usage :
28
- * <natural-my-listing [forcedVariables]="{filter:...}" [initialColumns]="['col1']" [persistSearch]="false">
28
+ * <natural-my-listing [forcedVariables]="{filter:...}" [selectedColumns]="['col1']" [persistSearch]="false">
29
29
  */
30
30
  // @dynamic
31
31
  export class NaturalAbstractList extends NaturalAbstractPanel {
@@ -40,7 +40,7 @@ export class NaturalAbstractList extends NaturalAbstractPanel {
40
40
  /**
41
41
  * Columns list after interaction with <natural-columns-picker>
42
42
  */
43
- this._selectedColumns = [];
43
+ this.columnsForTable = [];
44
44
  /**
45
45
  * The default column selection that automatically happened after <natural-columns-picker> initialization
46
46
  */
@@ -283,7 +283,7 @@ export class NaturalAbstractList extends NaturalAbstractPanel {
283
283
  * Uses data provided by router such as:
284
284
  *
285
285
  * - `route.data.forcedVariables`
286
- * - `route.data.initialColumns`
286
+ * - `route.data.selectedColumns`
287
287
  */
288
288
  initFromRoute() {
289
289
  // Variables
@@ -291,8 +291,8 @@ export class NaturalAbstractList extends NaturalAbstractPanel {
291
291
  this.applyForcedVariables(this.route.snapshot.data.forcedVariables);
292
292
  }
293
293
  // Columns
294
- if (this.route.snapshot.data.initialColumns) {
295
- this.initialColumns = this.route.snapshot.data.initialColumns;
294
+ if (this.route.snapshot.data.selectedColumns) {
295
+ this.selectedColumns = this.route.snapshot.data.selectedColumns;
296
296
  }
297
297
  }
298
298
  getDataObservable() {
@@ -318,6 +318,11 @@ export class NaturalAbstractList extends NaturalAbstractPanel {
318
318
  if (sorting) {
319
319
  this.variablesManager.set('sorting', { sorting });
320
320
  }
321
+ // Columns
322
+ const persistedColumns = this.persistenceService.get('col', this.route, storageKey);
323
+ if (typeof persistedColumns === 'string') {
324
+ this.selectedColumns = persistedColumns.split(',');
325
+ }
321
326
  // Natural search : ns
322
327
  this.naturalSearchSelections = fromUrl(this.persistenceService.get('ns', this.route, storageKey));
323
328
  this.translateSearchAndRefreshList(this.naturalSearchSelections, true);
@@ -373,23 +378,14 @@ export class NaturalAbstractList extends NaturalAbstractPanel {
373
378
  this.variablesManager.set('sorting', { sorting: variables.sorting });
374
379
  }
375
380
  }
376
- get selectedColumns() {
377
- return this._selectedColumns;
378
- }
379
- set selectedColumns(columns) {
380
- this._selectedColumns = columns;
381
+ selectColumns(columns) {
382
+ this.columnsForTable = columns;
381
383
  if (!this.persistSearch || this.isPanel) {
382
384
  return;
383
385
  }
384
386
  // The first selection we receive is the default one made by <natural-columns-picker>
385
387
  if (!this.defaultSelectedColumns) {
386
388
  this.defaultSelectedColumns = columns;
387
- // Now that we know the defaults, we can try to reload from persistence
388
- const storageKey = this.getStorageKey();
389
- const persistedColumns = this.persistenceService.get('col', this.route, storageKey);
390
- if (typeof persistedColumns === 'string') {
391
- this.selectedColumns = persistedColumns.split(',');
392
- }
393
389
  }
394
390
  else {
395
391
  // Persist only if wanted columns are different from default selection
@@ -407,7 +403,7 @@ NaturalAbstractList.ctorParameters = () => [
407
403
  ];
408
404
  NaturalAbstractList.propDecorators = {
409
405
  persistSearch: [{ type: Input }],
410
- initialColumns: [{ type: Input }],
406
+ selectedColumns: [{ type: Input }],
411
407
  forcedVariables: [{ type: Input }]
412
408
  };
413
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL2Fic3RyYWN0LWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRzVFLE9BQU8sRUFBQyxjQUFjLEVBQTBCLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDM0QsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBSTdELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxpQkFBaUIsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNILDRCQUE0QixFQUk1QixZQUFZLEdBQ2YsTUFBTSwwQkFBMEIsQ0FBQztBQUdsQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJekMsU0FBUyxlQUFlLENBQUMsSUFBb0I7SUFDekMsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUU7UUFDM0Ms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Z0JBQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3REO1NBQ0o7YUFBTTtZQUNILHNFQUFzRTtZQUN0RSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDbkY7SUFDTCxDQUFDOzs7WUFsZ0JKLFNBQVM7Ozs7WUEvQ1MsUUFBUTs7OzRCQXdFdEIsS0FBSzs2QkFpQkwsS0FBSzs4QkEyRUwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmltcG9ydCB7U2VsZWN0aW9uTW9kZWx9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQge0RpcmVjdGl2ZSwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BhZ2VFdmVudH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7U29ydH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBEYXRhLCBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2RlZmF1bHRzLCBpc0VtcHR5LCBpc0VxdWFsLCBwaWNrfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7TmF0dXJhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vbW9kdWxlcy9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0UGFuZWx9IGZyb20gJy4uL21vZHVsZXMvcGFuZWxzL2Fic3RyYWN0LXBhbmVsJztcbmltcG9ydCB7dG9HcmFwaFFMRG9jdHJpbmVGaWx0ZXJ9IGZyb20gJy4uL21vZHVsZXMvc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZSc7XG5pbXBvcnQge2Zyb21VcmwsIHRvVXJsfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC9jbGFzc2VzL3VybCc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hGYWNldHN9IGZyb20gJy4uL21vZHVsZXMvc2VhcmNoL3R5cGVzL2ZhY2V0JztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaFNlbGVjdGlvbnN9IGZyb20gJy4uL21vZHVsZXMvc2VhcmNoL3R5cGVzL3ZhbHVlcyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvYWJzdHJhY3QtbW9kZWwuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxQZXJzaXN0ZW5jZVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3BlcnNpc3RlbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsRGF0YVNvdXJjZSwgUGFnaW5hdGVkRGF0YX0gZnJvbSAnLi9kYXRhLXNvdXJjZSc7XG5pbXBvcnQge1xuICAgIE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXIsXG4gICAgUGFnaW5hdGlvbklucHV0LFxuICAgIFF1ZXJ5VmFyaWFibGVzLFxuICAgIFNvcnRpbmcsXG4gICAgU29ydGluZ09yZGVyLFxufSBmcm9tICcuL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHtFeHRyYWN0VGFsbCwgRXh0cmFjdFZhbGwsIExpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7TmF2aWdhYmxlSXRlbX0gZnJvbSAnLi9hYnN0cmFjdC1uYXZpZ2FibGUtbGlzdCc7XG5pbXBvcnQge3Rha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG50eXBlIE1heWJlTmF2aWdhYmxlID0gTGl0ZXJhbCB8IE5hdmlnYWJsZUl0ZW08TGl0ZXJhbD47XG5cbmZ1bmN0aW9uIHVud3JhcE5hdmlnYWJsZShpdGVtOiBNYXliZU5hdmlnYWJsZSk6IExpdGVyYWwge1xuICAgIGlmICgnaXRlbScgaW4gaXRlbSAmJiAnaGFzTmF2aWdhdGlvbicgaW4gaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5pdGVtO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtO1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaGVscHMgbWFuYWdpbmcgYSBsaXN0IG9mIHBhZ2luYXRlZCBpdGVtcyB0aGF0IGNhbiBiZSBmaWx0ZXJlZCxcbiAqIHNlbGVjdGVkLCBhbmQgdGhlbiBidWxrIGFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBvbiBzZWxlY3Rpb24uXG4gKlxuICogQ29tcG9uZW50cyBpbmhlcml0aW5nIGZyb20gdGhpcyBjbGFzcyBjYW4gYmUgdXNlZCBhcyBzdGFuZGFsb25lIHdpdGggaW5wdXQgYXR0cmlidXRlcy5cbiAqXG4gKiBVc2FnZSA6XG4gKiA8bmF0dXJhbC1teS1saXN0aW5nIFtmb3JjZWRWYXJpYWJsZXNdPVwie2ZpbHRlcjouLi59XCIgW2luaXRpYWxDb2x1bW5zXT1cIlsnY29sMSddXCIgW3BlcnNpc3RTZWFyY2hdPVwiZmFsc2VcIj5cbiAqL1xuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgTmF0dXJhbEFic3RyYWN0TGlzdDxcbiAgICAgICAgVFNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2U8XG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBQYWdpbmF0ZWREYXRhPExpdGVyYWw+LFxuICAgICAgICAgICAgUXVlcnlWYXJpYWJsZXMsXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnlcbiAgICAgICAgPixcbiAgICAgICAgLy8gSW4gbW9zdCBjYXNlIHRoaXMgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgYnkgaW5oZXJpdGluZyBjbGFzc2VzLlxuICAgICAgICAvLyBJdCBzaG91bGQgb25seSBiZSBzcGVjaWZpZWQgdG8gb3ZlcnJpZGUgZGVmYXVsdCBpZiB0aGUgc2VydmljZSBpdGVtcyBhcmVcbiAgICAgICAgLy8gbWFwcGVkIHRvIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBsaWtlIGluIE5hdHVyYWxBYnN0cmFjdE5hdmlnYWJsZUxpc3RcbiAgICAgICAgVGFsbCBleHRlbmRzIFBhZ2luYXRlZERhdGE8TWF5YmVOYXZpZ2FibGU+ID0gRXh0cmFjdFRhbGw8VFNlcnZpY2U+LFxuICAgID5cbiAgICBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdFBhbmVsXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAgIC8qKlxuICAgICAqIFdoZXJldmVyIHNlYXJjaCBzaG91bGQgYmUgbG9hZGVkIGZyb20gdXJsL3N0b3JhZ2UgYW5kIHBlcnNpc3RlZCBpbiBpdCB0b28uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHBlcnNpc3RTZWFyY2ggPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ29sdW1ucyBsaXN0IGFmdGVyIGludGVyYWN0aW9uIHdpdGggPG5hdHVyYWwtY29sdW1ucy1waWNrZXI+XG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgY29sdW1uIHNlbGVjdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgaGFwcGVuZWQgYWZ0ZXIgPG5hdHVyYWwtY29sdW1ucy1waWNrZXI+IGluaXRpYWxpemF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWZhdWx0U2VsZWN0ZWRDb2x1bW5zOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbCBjb2x1bW5zIG9uIGNvbXBvbmVudCBpbml0XG4gICAgICpcbiAgICAgKiBDaGFuZ2luZyB0aGlzIHZhbHVlIGFmdGVyIGluaXRpYWxpemF0aW9uIHdpbGwgaGF2ZSBubyBlZmZlY3QgYXQgYWxsXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGluaXRpYWxDb2x1bW5zPzogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBTb3VyY2Ugb2YgdGhlIGxpc3RcbiAgICAgKi9cbiAgICBwdWJsaWMgZGF0YVNvdXJjZT86IE5hdHVyYWxEYXRhU291cmNlPFRhbGw+O1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0aW9uIGZvciBidWxrIGFjdGlvbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPEV4dHJhY3RUYWxsPFRTZXJ2aWNlPlsnaXRlbXMnXVswXT4odHJ1ZSwgW10pO1xuXG4gICAgLyoqXG4gICAgICogTmV4dCBleGVjdXRlZCBhY3Rpb24gZnJvbSBidWxrIG1lbnVcbiAgICAgKi9cbiAgICBwdWJsaWMgYnVsa0FjdGlvblNlbGVjdGVkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIENlbnRyYWxpc2F0aW9uIG9mIHF1ZXJ5IHZhcmlhYmxlc1xuICAgICAqL1xuICAgIHB1YmxpYyB2YXJpYWJsZXNNYW5hZ2VyOiBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPEV4dHJhY3RWYWxsPFRTZXJ2aWNlPj4gPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxcbiAgICAgICAgRXh0cmFjdFZhbGw8VFNlcnZpY2U+XG4gICAgPigpO1xuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgbmF0dXJhbC1zZWFyY2ggZmFjZXRzXG4gICAgICovXG4gICAgcHVibGljIG5hdHVyYWxTZWFyY2hGYWNldHM6IE5hdHVyYWxTZWFyY2hGYWNldHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFJlc3VsdCBvZiBhIHNlYXJjaCAoY2FuIGJlIHByb3ZpZGVkIGFzIGlucHV0IGZvciBpbml0aWFsaXNhdGlvbilcbiAgICAgKi9cbiAgICBwdWJsaWMgbmF0dXJhbFNlYXJjaFNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zID0gW1tdXTtcblxuICAgIC8qKlxuICAgICAqIERhdGEgYXR0cmlidXRlIHByb3ZpZGVkIGJ5IGFjdGl2YXRlZCByb3V0ZSBzbmFwc2hvdFxuICAgICAqL1xuICAgIHB1YmxpYyByb3V0ZURhdGE/OiBEYXRhO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwYWdlIHNpemVzXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHBhZ2VTaXplT3B0aW9ucyA9IFs1LCAxMCwgMjUsIDUwLCAxMDAsIDIwMF07XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsIHBhZ2luYXRpb24gc2V0dXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFBhZ2luYXRpb246IFJlcXVpcmVkPFBhZ2luYXRpb25JbnB1dD4gPSB7XG4gICAgICAgIG9mZnNldDogbnVsbCxcbiAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICBwYWdlU2l6ZTogMjUsXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgc29ydGluZ1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZWZhdWx0U29ydGluZz86IEFycmF5PFNvcnRpbmc+O1xuXG4gICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xuICAgIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gICAgcHJvdGVjdGVkIGFsZXJ0U2VydmljZTogTmF0dXJhbEFsZXJ0U2VydmljZTtcbiAgICBwcm90ZWN0ZWQgcGVyc2lzdGVuY2VTZXJ2aWNlOiBOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHNlcnZpY2U6IFRTZXJ2aWNlLCBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMucm91dGVyID0gaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICAgIHRoaXMucm91dGUgPSBpbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZSA9IGluamVjdG9yLmdldChOYXR1cmFsQWxlcnRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoTmF0dXJhbFBlcnNpc3RlbmNlU2VydmljZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFyaWFibGVzIHRoYXQgYXJlIGFsd2F5cyBmb3JjZWQgb24gYSBsaXN0LCBpbiBhZGRpdGlvbiB0byB3aGF0ZXZlciB0aGUgZW5kLXVzZXIgbWlnaHQgc2VsZWN0XG4gICAgICovXG4gICAgQElucHV0KCkgc2V0IGZvcmNlZFZhcmlhYmxlcyh2YXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodmFyaWFibGVzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5Rm9yY2VkVmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiBjaGFuZ2UsIGNoZWNrIERvY3VtZW50c0NvbXBvbmVudCB0aGF0IG92ZXJyaWRlcyB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgY2FsbGluZyBzdXBlci5uZ09uSW5pdCgpLlxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3V0ZURhdGEgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGE7XG5cbiAgICAgICAgdGhpcy5pbml0RnJvbVJvdXRlKCk7XG4gICAgICAgIHRoaXMuaW5pdEZyb21QZXJzaXN0ZWQoKTtcblxuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuZGVmYXVsdHMoJ3BhZ2luYXRpb24nLCB7cGFnaW5hdGlvbjogdGhpcy5kZWZhdWx0UGFnaW5hdGlvbn0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLmRlZmF1bHRzKCdzb3J0aW5nJywge3NvcnRpbmc6IHRoaXMuZGVmYXVsdFNvcnRpbmd9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE5hdHVyYWxEYXRhU291cmNlPFRhbGw+KHRoaXMuZ2V0RGF0YU9ic2VydmFibGUoKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyc2lzdCBzZWFyY2ggYW5kIHRoZW4gbGF1bmNoIHdoYXRldmVyIGlzIHJlcXVpcmVkIHRvIHJlZnJlc2ggdGhlIGxpc3RcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VhcmNoKFxuICAgICAgICBuYXR1cmFsU2VhcmNoU2VsZWN0aW9uczogTmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMsXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICAgICByZXNldFBhZ2luYXRpb24gPSB0cnVlLFxuICAgICk6IHZvaWQge1xuICAgICAgICAvLyBSZXNldCBwYWdlIGluZGV4IHRvIHJlc3RhcnQgdGhlIHBhZ2luYXRpb24gKHByZXNlcnZlIHBhZ2VTaXplKVxuXG4gICAgICAgIGlmIChyZXNldFBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5tZXJnZSgncGFnaW5hdGlvbicsIHtcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiBwaWNrKHRoaXMuZGVmYXVsdFBhZ2luYXRpb24sIFsnb2Zmc2V0JywgJ3BhZ2VJbmRleCddKSxcbiAgICAgICAgICAgIH0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBlcnNpc3QgaWYgYWN0aXZhdGVkXG4gICAgICAgIC8vIFR3byBwYXJhbGxlbCBuYXZpZ2F0aW9ucyBjb25mbGljdC4gV2UgZmlyc3QgcGVyc2lzdCB0aGUgc2VhcmNoLCB0aGVuIHRoZSBwYWdpbmF0aW9uXG4gICAgICAgIGlmICh0aGlzLnBlcnNpc3RTZWFyY2ggJiYgIXRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3QoXG4gICAgICAgICAgICAgICAgJ25zJyxcbiAgICAgICAgICAgICAgICB0b1VybChuYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyksXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0b3JhZ2VLZXkoKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLmdldFBhZ2luYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbihwYWdpbmF0aW9uLCBwcm9taXNlLCBuYXZpZ2F0aW9uRXh0cmFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VhcmNoQW5kUmVmcmVzaExpc3QobmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSBzb3J0aW5nIHZhcmlhYmxlcyBmb3IgcXVlcnkgYW5kIHBlcnNpc3QgdGhlIG5ldyB2YWx1ZSBpbiB1cmwgYW5kIGxvY2FsIHN0b3JhZ2VcbiAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBub3QgcGVyc2lzdGVkXG4gICAgICogQHBhcmFtIHNvcnRpbmdFdmVudHMgTGlzdCBvZiBtYXRlcmlhbCBzb3J0aW5nIGV2ZW50c1xuICAgICAqL1xuICAgIHB1YmxpYyBzb3J0aW5nKHNvcnRpbmdFdmVudHM6IChTb3J0ICYgUGFydGlhbDxQaWNrPFNvcnRpbmcsICdudWxsQXNIaWdoZXN0Jz4+KVtdKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IHBhZ2UgaW5kZXggdG8gcmVzdGFydCB0aGUgcGFnaW5hdGlvbiAocHJlc2VydmUgcGFnZVNpemUpXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5tZXJnZSgncGFnaW5hdGlvbicsIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHBpY2sodGhpcy5kZWZhdWx0UGFnaW5hdGlvbiwgWydvZmZzZXQnLCAncGFnZUluZGV4J10pLFxuICAgICAgICB9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG5cbiAgICAgICAgLy8gUHJlc2VydmUgb25seSBzb3J0aW5nIGV2ZW50cyB3aXRoIGRpcmVjdGlvbiBhbmQgY29udmVydCBpbnRvIG5hdHVyYWwvZ3JhcGhxbCBTb3J0aW5nIHR5cGVcbiAgICAgICAgbGV0IHNvcnRpbmc6IFNvcnRpbmdbXSA9IHNvcnRpbmdFdmVudHNcbiAgICAgICAgICAgIC5maWx0ZXIoZSA9PiAhIWUuZGlyZWN0aW9uKVxuICAgICAgICAgICAgLm1hcChzb3J0aW5nRXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHM6IFNvcnRpbmcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzb3J0aW5nRXZlbnQuYWN0aXZlLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoc29ydGluZ0V2ZW50LmRpcmVjdGlvbiA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5vcmRlciA9IFNvcnRpbmdPcmRlci5BU0M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3J0aW5nRXZlbnQuZGlyZWN0aW9uID09PSAnZGVzYycpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5vcmRlciA9IFNvcnRpbmdPcmRlci5ERVNDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgnbnVsbEFzSGlnaGVzdCcgaW4gc29ydGluZ0V2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHMubnVsbEFzSGlnaGVzdCA9IHNvcnRpbmdFdmVudC5udWxsQXNIaWdoZXN0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRW1wdHkgc29ydGluZyBmYWxsYmFja3Mgb24gZGVmYXVsdFxuICAgICAgICBpZiAoc29ydGluZy5sZW5ndGggPT09IDAgJiYgdGhpcy5kZWZhdWx0U29ydGluZykge1xuICAgICAgICAgICAgc29ydGluZyA9IHRoaXMuZGVmYXVsdFNvcnRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgc29ydGluZyBhcyBzZWFyY2ggdmFyaWFibGVcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnc29ydGluZycsIHtzb3J0aW5nOiBzb3J0aW5nfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuXG4gICAgICAgIGlmICh0aGlzLnBlcnNpc3RTZWFyY2ggJiYgIXRoaXMuaXNQYW5lbCkge1xuICAgICAgICAgICAgLy8gSWYgc29ydGluZyBpcyBlcXVhbCB0byBkZWZhdWx0IHNvcnRpbmcsIG51bGxpZnkgaXQgdG8gcmVtb3ZlIGZyb20gcGVyc2lzdGVuY2UgKHVybCBhbmQgc2Vzc2lvbiBzdG9yYWdlKVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3QoXG4gICAgICAgICAgICAgICAgJ3NvJyxcbiAgICAgICAgICAgICAgICBpc0VxdWFsKHNvcnRpbmcsIHRoaXMuZGVmYXVsdFNvcnRpbmcpID8gbnVsbCA6IHNvcnRpbmcsXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0b3JhZ2VLZXkoKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLmdldFBhZ2luYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbihwYWdpbmF0aW9uLCBwcm9taXNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBjdXJyZW50IHBhZ2luYXRpb24sIGVpdGhlciB0aGUgdXNlciBkZWZpbmVkIG9uZSwgb3IgdGhlIGRlZmF1bHQgb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQYWdpbmF0aW9uKCk6IFBhZ2luYXRpb25JbnB1dCB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25DaGFubmVsOiBQYXJ0aWFsPEV4dHJhY3RWYWxsPFRTZXJ2aWNlPj4gfCB1bmRlZmluZWQgPSB0aGlzLnZhcmlhYmxlc01hbmFnZXIuZ2V0KCdwYWdpbmF0aW9uJyk7XG5cbiAgICAgICAgaWYgKHBhZ2luYXRpb25DaGFubmVsICYmIHBhZ2luYXRpb25DaGFubmVsLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIC8vIFRoZSBjYXN0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IGJlY2F1c2UgVHlwZXNjcmlwdCBjb3JyZWN0bHkgbmFycm93IGRvd24gdGhlIHR5cGUgdG8gYFBhZ2luYXRpb25JbnB1dGBcbiAgICAgICAgICAgIC8vIGJ1dCBzb21laG93IHN0aWxsIGdldCBjb25mdXNlZCB3aGVuIHJldHVybmluZyBpdFxuICAgICAgICAgICAgcmV0dXJuIHBhZ2luYXRpb25DaGFubmVsLnBhZ2luYXRpb24gYXMgUGFnaW5hdGlvbklucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBhZ2luYXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHBhZ2luYXRpb24gdmFyaWFibGVzIGZvciBxdWVyeSBhbmQgcGVyc2lzdCBpbiB1cmwgYW5kIGxvY2FsIHN0b3JhZ2UgdGhlIG5ldyB2YWx1ZVxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIG5vdCBwZXJzaXN0ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCBOYXR1cmFsIG9yIFBhZ2luYXRvciBQYWdlRXZlbnRcbiAgICAgKiBAcGFyYW0gZGVmZXIgUHJvbWlzZSAodXN1YWxseSBhIHJvdXRlIHByb21pc2UpIHRoYXQgZGVmZXJzIHRoZSByZWRpcmVjdGlvbiBmcm9tIHRoaXMgY2FsbCB0byBwcmV2ZW50IHJvdXRlIG5hdmlnYXRpb24gY29sbGlzaW9uXG4gICAgICogQHBhcmFtIG5hdmlnYXRpb25FeHRyYXMgQW5ndWxhciByb3V0ZXIgbmF2aWdhdGlvbiBvcHRpb25zLiBJcyByZWxldmFudCBvbmx5IGlmIHBlcnNpc3RTZWFyY2ggaXMgdHJ1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBwYWdpbmF0aW9uKFxuICAgICAgICBldmVudDogUGFnaW5hdGlvbklucHV0IHwgUGFnZUV2ZW50LFxuICAgICAgICBkZWZlcj86IFByb21pc2U8dW5rbm93bj4sXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICk6IHZvaWQge1xuICAgICAgICBsZXQgcGFnaW5hdGlvbjogUGFnaW5hdGlvbklucHV0ID0gdGhpcy5kZWZhdWx0UGFnaW5hdGlvbjtcbiAgICAgICAgbGV0IGZvclBlcnNpc3RlbmNlOiBQYWdpbmF0aW9uSW5wdXQgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAvLyBDb252ZXJ0IHRvIG5hdHVyYWwvZ3JhcGhxbCBmb3JtYXQsIGFkZGluZyBtaXNzaW5nIGF0dHJpYnV0ZXNcbiAgICAgICAgbGV0IG5hdHVyYWxFdmVudDogUGFnaW5hdGlvbklucHV0ID0gcGljayhldmVudCwgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0UGFnaW5hdGlvbikpOyAvLyBvYmplY3Qgd2l0aCBvbmx5IFBhZ2luYXRpb25JbnB1dCBhdHRyaWJ1dGVzXG4gICAgICAgIG5hdHVyYWxFdmVudCA9IGRlZmF1bHRzKG5hdHVyYWxFdmVudCwgdGhpcy5kZWZhdWx0UGFnaW5hdGlvbik7IC8vIERlZmF1bHQgd2l0aCBjb250cm9sbGVyIHZhbHVlc1xuXG4gICAgICAgIGlmICghaXNFcXVhbChuYXR1cmFsRXZlbnQsIHRoaXMuZGVmYXVsdFBhZ2luYXRpb24pKSB7XG4gICAgICAgICAgICBwYWdpbmF0aW9uID0gZm9yUGVyc2lzdGVuY2UgPSBuYXR1cmFsRXZlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdwYWdpbmF0aW9uJywge3BhZ2luYXRpb259IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG5cbiAgICAgICAgdGhpcy5wZXJzaXN0UGFnaW5hdGlvbihmb3JQZXJzaXN0ZW5jZSwgZGVmZXIsIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwZXJzaXN0UGFnaW5hdGlvbihcbiAgICAgICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbklucHV0IHwgbnVsbCxcbiAgICAgICAgZGVmZXI/OiBQcm9taXNlPHVua25vd24+LFxuICAgICAgICBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlYXJjaCAmJiAhdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICAvLyBEZWNsYXJlIHBlcnNpc3QgZnVuY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IHBlcnNpc3QgPSAodmFsdWU6IFBhZ2luYXRpb25JbnB1dCB8IG51bGwpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdCgncGEnLCB2YWx1ZSwgdGhpcy5yb3V0ZSwgdGhpcy5nZXRTdG9yYWdlS2V5KCksIG5hdmlnYXRpb25FeHRyYXMpO1xuXG4gICAgICAgICAgICAvLyBDYWxsIGZ1bmN0aW9uIGRpcmVjdGx5IG9yIHdoZW4gcHJvbWlzZSBpcyByZXNvbHZlZFxuICAgICAgICAgICAgaWYgKGRlZmVyKSB7XG4gICAgICAgICAgICAgICAgZGVmZXIudGhlbigoKSA9PiBwZXJzaXN0KHBhZ2luYXRpb24pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVyc2lzdChwYWdpbmF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgYWxsIHJvd3MgaWYgdGhleSBhcmUgbm90IGFsbCBzZWxlY3RlZDsgb3RoZXJ3aXNlIGNsZWFyIHNlbGVjdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBtYXN0ZXJUb2dnbGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uaXRlbXMuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcE5hdmlnYWJsZShyb3cpO1xuICAgICAgICAgICAgICAgIGlmICh1bndyYXBwZWQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KHVud3JhcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgZWxlbWVudHMgbWF0Y2hlcyB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3NcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XG4gICAgICAgIGxldCBudW1Sb3dzID0gMDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5pdGVtcy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bndyYXBwZWQgPSB1bndyYXBOYXZpZ2FibGUocm93KTtcbiAgICAgICAgICAgIGlmICh1bndyYXBwZWQuaWQpIHtcbiAgICAgICAgICAgICAgICBudW1Sb3dzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBhIGJ1bGsgYWN0aW9uIGlzIHNlbGVjdGVkXG4gICAgICovXG4gICAgcHVibGljIGJ1bGtBY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGV4ZWN1dGUgYSBidWxrIGFjdGlvbiB3aXRob3V0IHNlbGVjdGluZyBvbmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKHRoaXMuYnVsa0FjdGlvblNlbGVjdGVkIGluIHRoaXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byBleGVjdXRlIGEgYnVsayBhY3Rpb24gdGhhdCBkb2VzIG5vdCBleGlzdDogJyArIHRoaXMuYnVsa0FjdGlvblNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgICh0aGlzIGFzIGFueSlbdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWRdKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGVhZGVyIGlzIGFsd2F5cyB2aXNpYmxlIGluIG5vbi1wYW5lbCBjb250ZXh0XG4gICAgICogSXMgaGlkZGVuIHdoZW4gbm8gcmVzdWx0cyBpbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd0hlYWRlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzUGFuZWwgfHwgKHRoaXMuaXNQYW5lbCAmJiB0aGlzLnNob3dUYWJsZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2ggaXMgdmlzaWJsZSBpbiBtb3N0IGNhc2VzLCBidXQgaGlkZGVuIG9uIGEgcGFuZWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1NlYXJjaCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzUGFuZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFibGUgc2hvdWxkIGJlIHNob3duIG9ubHkgd2hlbiB0aGVyZSBpcyBkYXRhXG4gICAgICovXG4gICAgcHVibGljIHNob3dUYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5kYXRhU291cmNlICYmICEhdGhpcy5kYXRhU291cmNlLmRhdGEgJiYgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBObyByZXN1bHRzIGlzIHNob3duIHdoZW4gdGhlcmUgaXMgbm8gaXRlbXMsIGJ1dCBvbmx5IGluIG5vbi1wYW5lbCBjb250ZXh0IG9ubHkuXG4gICAgICogSW4gcGFuZWxzIHdlIHdhbnQgZGlzY3JldGUgbW9kZSwgdGhlcmUgaXMgbm8gc2VhcmNoIGFuZCBubyBcIm5vLXJlc3VsdHNcIlxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93Tm9SZXN1bHRzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbCAmJiAhIXRoaXMuZGF0YVNvdXJjZSAmJiAhIXRoaXMuZGF0YVNvdXJjZS5kYXRhICYmIHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplIGZyb20gcm91dGUuXG4gICAgICpcbiAgICAgKiBVc2VzIGRhdGEgcHJvdmlkZWQgYnkgcm91dGVyIHN1Y2ggYXM6XG4gICAgICpcbiAgICAgKiAtIGByb3V0ZS5kYXRhLmZvcmNlZFZhcmlhYmxlc2BcbiAgICAgKiAtIGByb3V0ZS5kYXRhLmluaXRpYWxDb2x1bW5zYFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpbml0RnJvbVJvdXRlKCk6IHZvaWQge1xuICAgICAgICAvLyBWYXJpYWJsZXNcbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5mb3JjZWRWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JjZWRWYXJpYWJsZXModGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmZvcmNlZFZhcmlhYmxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb2x1bW5zXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuaW5pdGlhbENvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbENvbHVtbnMgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuaW5pdGlhbENvbHVtbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGF0YU9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxUYWxsPiB7XG4gICAgICAgIC8vIEhlcmUgdGhlIGNhc3RpbmcgaXMgYSBiaXQgdW5mb3J0dW5hdGUgYnV0IHJlcXVpcmVkIGJlY2F1c2UgTmF0dXJhbEFic3RyYWN0TmF2aWdhYmxlTGlzdFxuICAgICAgICAvLyBicmVha3MgdGhlIGRhdGEgc3RydWN0dXJlIGNvbnZlbnRpb24gKGJ5IHdyYXBwaW5nIGl0ZW1zIGluIGEgc3RydWN0dXJlKS4gSWRlYWxseSB3ZSBzaG91bGQgcmVtb3ZlXG4gICAgICAgIC8vIHRoZSBjYXN0aW5nIGFuZCByZXNvbHZlIHRoaW5ncyBpbiBhIGJldHRlciB3YXksIGJ1dCB0aGF0J3MgdG9vIG11Y2ggd29yayBmb3Igbm93XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAgIC53YXRjaEFsbCh0aGlzLnZhcmlhYmxlc01hbmFnZXIgYXMgdW5rbm93biBhcyBhbnkpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkgYXMgdW5rbm93biBhcyBPYnNlcnZhYmxlPFRhbGw+O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0RnJvbVBlcnNpc3RlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBlcnNpc3RTZWFyY2ggfHwgdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdG9yYWdlS2V5ID0gdGhpcy5nZXRTdG9yYWdlS2V5KCk7XG5cbiAgICAgICAgLy8gUGFnaW5hdGlvbiA6IHBhXG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ3BhJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSk7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdwYWdpbmF0aW9uJywge3BhZ2luYXRpb259IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3J0aW5nIDogc29cbiAgICAgICAgY29uc3Qgc29ydGluZyA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmdldCgnc28nLCB0aGlzLnJvdXRlLCBzdG9yYWdlS2V5KTtcbiAgICAgICAgaWYgKHNvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3NvcnRpbmcnLCB7c29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5hdHVyYWwgc2VhcmNoIDogbnNcbiAgICAgICAgdGhpcy5uYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IGZyb21VcmwodGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0KCducycsIHRoaXMucm91dGUsIHN0b3JhZ2VLZXkpKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdCh0aGlzLm5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VhcmNoQW5kUmVmcmVzaExpc3QoXG4gICAgICAgIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyxcbiAgICAgICAgaWdub3JlRW1wdHlGaWx0ZXIgPSBmYWxzZSxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdG9HcmFwaFFMRG9jdHJpbmVGaWx0ZXIodGhpcy5uYXR1cmFsU2VhcmNoRmFjZXRzLCBuYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk7XG5cbiAgICAgICAgaWYgKGlnbm9yZUVtcHR5RmlsdGVyICYmIGlzRW1wdHkoZmlsdGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnbmF0dXJhbC1zZWFyY2gnLCB7ZmlsdGVyfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBjdXJyZW50IHVybCBleGNsdWRpbmcgbGFzdCByb3V0ZSBwYXJhbWV0ZXJzO1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRTdG9yYWdlS2V5KCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICB1cmxUcmVlLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50c1t1cmxUcmVlLnJvb3QuY2hpbGRyZW4ucHJpbWFyeS5zZWdtZW50cy5sZW5ndGggLSAxXS5wYXJhbWV0ZXJzID0ge307XG4gICAgICAgIHJldHVybiB1cmxUcmVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGJ1bGtkRGVsZXRlQ29uZmlybWF0aW9uKCk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGVydFNlcnZpY2UuY29uZmlybShcbiAgICAgICAgICAgICRsb2NhbGl6ZWBTdXBwcmVzc2lvbmAsXG4gICAgICAgICAgICAkbG9jYWxpemVgVm91bGV6LXZvdXMgc3VwcHJpbWVyIGTDqWZpbml0aXZlbWVudCBsZXMgw6lsw6ltZW50cyBzw6lsZWN0aW9ubsOpcyA/YCxcbiAgICAgICAgICAgICRsb2NhbGl6ZWBTdXBwcmltZXIgZMOpZmluaXRpdmVtZW50YCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGUgbXVsdGlwbGUgaXRlbXMgYXQgb25jZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBidWxrRGVsZXRlKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgICAgdGhpcy5idWxrZERlbGV0ZUNvbmZpcm1hdGlvbigpLnN1YnNjcmliZShjb25maXJtZWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IG91ciBvYmplY3RzIGhhdmUgSUQuIFRoaXMgaXMgdHJ1ZSBpbiBhbG1vc3QgYWxsIGNhc2VzLiBCdXQgaWZcbiAgICAgICAgICAgICAgICAvLyBpdCBpcyBub3QsIGxpa2UgQXR0cmlidXRlUmVwb3J0Q29tcG9uZW50LCB0aGVuIHRoZSBpbmhlcml0aW5nIGNsYXNzIG11c3RcbiAgICAgICAgICAgICAgICAvLyBuZXZlciBjYWxsIHRoaXMgbWV0aG9kLlxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkIGFzIHtpZDogc3RyaW5nfVtdO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmRlbGV0ZShzZWxlY3Rpb24pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oJGxvY2FsaXplYFN1cHByaW3DqWApO1xuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5Rm9yY2VkVmFyaWFibGVzKHZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhcmlhYmxlcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ2ZvcmNlZC1maWx0ZXInLCB7ZmlsdGVyOiB2YXJpYWJsZXMuZmlsdGVyfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhcmlhYmxlcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdwYWdpbmF0aW9uJywge3BhZ2luYXRpb246IHZhcmlhYmxlcy5wYWdpbmF0aW9ufSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhcmlhYmxlcy5zb3J0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdzb3J0aW5nJywge3NvcnRpbmc6IHZhcmlhYmxlcy5zb3J0aW5nfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWxlY3RlZENvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc2VsZWN0ZWRDb2x1bW5zKGNvbHVtbnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IGNvbHVtbnM7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBlcnNpc3RTZWFyY2ggfHwgdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0aW9uIHdlIHJlY2VpdmUgaXMgdGhlIGRlZmF1bHQgb25lIG1hZGUgYnkgPG5hdHVyYWwtY29sdW1ucy1waWNrZXI+XG4gICAgICAgIGlmICghdGhpcy5kZWZhdWx0U2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZENvbHVtbnMgPSBjb2x1bW5zO1xuXG4gICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBkZWZhdWx0cywgd2UgY2FuIHRyeSB0byByZWxvYWQgZnJvbSBwZXJzaXN0ZW5jZVxuICAgICAgICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IHRoaXMuZ2V0U3RvcmFnZUtleSgpO1xuICAgICAgICAgICAgY29uc3QgcGVyc2lzdGVkQ29sdW1ucyA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmdldCgnY29sJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBlcnNpc3RlZENvbHVtbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSBwZXJzaXN0ZWRDb2x1bW5zLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBQZXJzaXN0IG9ubHkgaWYgd2FudGVkIGNvbHVtbnMgYXJlIGRpZmZlcmVudCBmcm9tIGRlZmF1bHQgc2VsZWN0aW9uXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGlzRXF1YWwodGhpcy5kZWZhdWx0U2VsZWN0ZWRDb2x1bW5zLCBjb2x1bW5zKSA/IG51bGwgOiBjb2x1bW5zLmpvaW4oJywnKTtcbiAgICAgICAgICAgIHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3QoJ2NvbCcsIHZhbHVlLCB0aGlzLnJvdXRlLCB0aGlzLmdldFN0b3JhZ2VLZXkoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
409
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL2Fic3RyYWN0LWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRzVFLE9BQU8sRUFBQyxjQUFjLEVBQTBCLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDM0QsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBSTdELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxpQkFBaUIsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNILDRCQUE0QixFQUk1QixZQUFZLEdBQ2YsTUFBTSwwQkFBMEIsQ0FBQztBQUdsQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJekMsU0FBUyxlQUFlLENBQUMsSUFBb0I7SUFDekMsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUU7UUFDM0Ms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LENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDbkY7SUFDTCxDQUFDOzs7WUEzZkosU0FBUzs7OztZQS9DUyxRQUFROzs7NEJBd0V0QixLQUFLOzhCQWVMLEtBQUs7OEJBMkVMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTpkaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5pbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYWdlRXZlbnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQge1NvcnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgRGF0YSwgTmF2aWdhdGlvbkV4dHJhcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtkZWZhdWx0cywgaXNFbXB0eSwgaXNFcXVhbCwgcGlja30gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05hdHVyYWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL21vZHVsZXMvYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdFBhbmVsfSBmcm9tICcuLi9tb2R1bGVzL3BhbmVscy9hYnN0cmFjdC1wYW5lbCc7XG5pbXBvcnQge3RvR3JhcGhRTERvY3RyaW5lRmlsdGVyfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC9jbGFzc2VzL2dyYXBocWwtZG9jdHJpbmUnO1xuaW1wb3J0IHtmcm9tVXJsLCB0b1VybH0gZnJvbSAnLi4vbW9kdWxlcy9zZWFyY2gvY2xhc3Nlcy91cmwnO1xuaW1wb3J0IHtOYXR1cmFsU2VhcmNoRmFjZXRzfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC90eXBlcy9mYWNldCc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hTZWxlY3Rpb25zfSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC90eXBlcy92YWx1ZXMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2Fic3RyYWN0LW1vZGVsLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9wZXJzaXN0ZW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7TmF0dXJhbERhdGFTb3VyY2UsIFBhZ2luYXRlZERhdGF9IGZyb20gJy4vZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtcbiAgICBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyLFxuICAgIFBhZ2luYXRpb25JbnB1dCxcbiAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICBTb3J0aW5nLFxuICAgIFNvcnRpbmdPcmRlcixcbn0gZnJvbSAnLi9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7RXh0cmFjdFRhbGwsIEV4dHJhY3RWYWxsLCBMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge05hdmlnYWJsZUl0ZW19IGZyb20gJy4vYWJzdHJhY3QtbmF2aWdhYmxlLWxpc3QnO1xuaW1wb3J0IHt0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxudHlwZSBNYXliZU5hdmlnYWJsZSA9IExpdGVyYWwgfCBOYXZpZ2FibGVJdGVtPExpdGVyYWw+O1xuXG5mdW5jdGlvbiB1bndyYXBOYXZpZ2FibGUoaXRlbTogTWF5YmVOYXZpZ2FibGUpOiBMaXRlcmFsIHtcbiAgICBpZiAoJ2l0ZW0nIGluIGl0ZW0gJiYgJ2hhc05hdmlnYXRpb24nIGluIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaXRlbTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGhlbHBzIG1hbmFnaW5nIGEgbGlzdCBvZiBwYWdpbmF0ZWQgaXRlbXMgdGhhdCBjYW4gYmUgZmlsdGVyZWQsXG4gKiBzZWxlY3RlZCwgYW5kIHRoZW4gYnVsayBhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQgb24gc2VsZWN0aW9uLlxuICpcbiAqIENvbXBvbmVudHMgaW5oZXJpdGluZyBmcm9tIHRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgYXMgc3RhbmRhbG9uZSB3aXRoIGlucHV0IGF0dHJpYnV0ZXMuXG4gKlxuICogVXNhZ2UgOlxuICogPG5hdHVyYWwtbXktbGlzdGluZyBbZm9yY2VkVmFyaWFibGVzXT1cIntmaWx0ZXI6Li4ufVwiIFtzZWxlY3RlZENvbHVtbnNdPVwiWydjb2wxJ11cIiBbcGVyc2lzdFNlYXJjaF09XCJmYWxzZVwiPlxuICovXG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBOYXR1cmFsQWJzdHJhY3RMaXN0PFxuICAgICAgICBUU2VydmljZSBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIFBhZ2luYXRlZERhdGE8TGl0ZXJhbD4sXG4gICAgICAgICAgICBRdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueSxcbiAgICAgICAgICAgIGFueVxuICAgICAgICA+LFxuICAgICAgICAvLyBJbiBtb3N0IGNhc2UgdGhpcyBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBieSBpbmhlcml0aW5nIGNsYXNzZXMuXG4gICAgICAgIC8vIEl0IHNob3VsZCBvbmx5IGJlIHNwZWNpZmllZCB0byBvdmVycmlkZSBkZWZhdWx0IGlmIHRoZSBzZXJ2aWNlIGl0ZW1zIGFyZVxuICAgICAgICAvLyBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgc3RydWN0dXJlIGxpa2UgaW4gTmF0dXJhbEFic3RyYWN0TmF2aWdhYmxlTGlzdFxuICAgICAgICBUYWxsIGV4dGVuZHMgUGFnaW5hdGVkRGF0YTxNYXliZU5hdmlnYWJsZT4gPSBFeHRyYWN0VGFsbDxUU2VydmljZT4sXG4gICAgPlxuICAgIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0UGFuZWxcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gICAgLyoqXG4gICAgICogV2hlcmV2ZXIgc2VhcmNoIHNob3VsZCBiZSBsb2FkZWQgZnJvbSB1cmwvc3RvcmFnZSBhbmQgcGVyc2lzdGVkIGluIGl0IHRvby5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgcGVyc2lzdFNlYXJjaCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDb2x1bW5zIGxpc3QgYWZ0ZXIgaW50ZXJhY3Rpb24gd2l0aCA8bmF0dXJhbC1jb2x1bW5zLXBpY2tlcj5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29sdW1uc0ZvclRhYmxlOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgY29sdW1uIHNlbGVjdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgaGFwcGVuZWQgYWZ0ZXIgPG5hdHVyYWwtY29sdW1ucy1waWNrZXI+IGluaXRpYWxpemF0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZWZhdWx0U2VsZWN0ZWRDb2x1bW5zOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVmlzaWJsZSAoY2hlY2tlZCkgY29sdW1uc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZENvbHVtbnM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFNvdXJjZSBvZiB0aGUgbGlzdFxuICAgICAqL1xuICAgIHB1YmxpYyBkYXRhU291cmNlPzogTmF0dXJhbERhdGFTb3VyY2U8VGFsbD47XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3Rpb24gZm9yIGJ1bGsgYWN0aW9uc1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8RXh0cmFjdFRhbGw8VFNlcnZpY2U+WydpdGVtcyddWzBdPih0cnVlLCBbXSk7XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IGV4ZWN1dGVkIGFjdGlvbiBmcm9tIGJ1bGsgbWVudVxuICAgICAqL1xuICAgIHB1YmxpYyBidWxrQWN0aW9uU2VsZWN0ZWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQ2VudHJhbGlzYXRpb24gb2YgcXVlcnkgdmFyaWFibGVzXG4gICAgICovXG4gICAgcHVibGljIHZhcmlhYmxlc01hbmFnZXI6IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8RXh0cmFjdFZhbGw8VFNlcnZpY2U+PiA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFxuICAgICAgICBFeHRyYWN0VmFsbDxUU2VydmljZT5cbiAgICA+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciBuYXR1cmFsLXNlYXJjaCBmYWNldHNcbiAgICAgKi9cbiAgICBwdWJsaWMgbmF0dXJhbFNlYXJjaEZhY2V0czogTmF0dXJhbFNlYXJjaEZhY2V0cyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUmVzdWx0IG9mIGEgc2VhcmNoIChjYW4gYmUgcHJvdmlkZWQgYXMgaW5wdXQgZm9yIGluaXRpYWxpc2F0aW9uKVxuICAgICAqL1xuICAgIHB1YmxpYyBuYXR1cmFsU2VhcmNoU2VsZWN0aW9uczogTmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMgPSBbW11dO1xuXG4gICAgLyoqXG4gICAgICogRGF0YSBhdHRyaWJ1dGUgcHJvdmlkZWQgYnkgYWN0aXZhdGVkIHJvdXRlIHNuYXBzaG90XG4gICAgICovXG4gICAgcHVibGljIHJvdXRlRGF0YT86IERhdGE7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIHBhZ2Ugc2l6ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFnZVNpemVPcHRpb25zID0gWzUsIDEwLCAyNSwgNTAsIDEwMCwgMjAwXTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgcGFnaW5hdGlvbiBzZXR1cFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZWZhdWx0UGFnaW5hdGlvbjogUmVxdWlyZWQ8UGFnaW5hdGlvbklucHV0PiA9IHtcbiAgICAgICAgb2Zmc2V0OiBudWxsLFxuICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbCBzb3J0aW5nXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRTb3J0aW5nPzogQXJyYXk8U29ydGluZz47XG5cbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXI7XG4gICAgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBwcm90ZWN0ZWQgYWxlcnRTZXJ2aWNlOiBOYXR1cmFsQWxlcnRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBwZXJzaXN0ZW5jZVNlcnZpY2U6IE5hdHVyYWxQZXJzaXN0ZW5jZVNlcnZpY2U7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc2VydmljZTogVFNlcnZpY2UsIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIgPSBpbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICAgICAgdGhpcy5yb3V0ZSA9IGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KE5hdHVyYWxBbGVydFNlcnZpY2UpO1xuICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZSA9IGluamVjdG9yLmdldChOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYXJpYWJsZXMgdGhhdCBhcmUgYWx3YXlzIGZvcmNlZCBvbiBhIGxpc3QsIGluIGFkZGl0aW9uIHRvIHdoYXRldmVyIHRoZSBlbmQtdXNlciBtaWdodCBzZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgZm9yY2VkVmFyaWFibGVzKHZhcmlhYmxlczogUXVlcnlWYXJpYWJsZXMgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JjZWRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGNoYW5nZSwgY2hlY2sgRG9jdW1lbnRzQ29tcG9uZW50IHRoYXQgb3ZlcnJpZGVzIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBjYWxsaW5nIHN1cGVyLm5nT25Jbml0KCkuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJvdXRlRGF0YSA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YTtcblxuICAgICAgICB0aGlzLmluaXRGcm9tUm91dGUoKTtcbiAgICAgICAgdGhpcy5pbml0RnJvbVBlcnNpc3RlZCgpO1xuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5kZWZhdWx0cygncGFnaW5hdGlvbicsIHtwYWdpbmF0aW9uOiB0aGlzLmRlZmF1bHRQYWdpbmF0aW9ufSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuZGVmYXVsdHMoJ3NvcnRpbmcnLCB7c29ydGluZzogdGhpcy5kZWZhdWx0U29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTmF0dXJhbERhdGFTb3VyY2U8VGFsbD4odGhpcy5nZXREYXRhT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJzaXN0IHNlYXJjaCBhbmQgdGhlbiBsYXVuY2ggd2hhdGV2ZXIgaXMgcmVxdWlyZWQgdG8gcmVmcmVzaCB0aGUgbGlzdFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWFyY2goXG4gICAgICAgIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyxcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgICAgIHJlc2V0UGFnaW5hdGlvbiA9IHRydWUsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IHBhZ2UgaW5kZXggdG8gcmVzdGFydCB0aGUgcGFnaW5hdGlvbiAocHJlc2VydmUgcGFnZVNpemUpXG5cbiAgICAgICAgaWYgKHJlc2V0UGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCdwYWdpbmF0aW9uJywge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHBpY2sodGhpcy5kZWZhdWx0UGFnaW5hdGlvbiwgWydvZmZzZXQnLCAncGFnZUluZGV4J10pLFxuICAgICAgICAgICAgfSBhcyBFeHRyYWN0VmFsbDxUU2VydmljZT4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVyc2lzdCBpZiBhY3RpdmF0ZWRcbiAgICAgICAgLy8gVHdvIHBhcmFsbGVsIG5hdmlnYXRpb25zIGNvbmZsaWN0LiBXZSBmaXJzdCBwZXJzaXN0IHRoZSBzZWFyY2gsIHRoZW4gdGhlIHBhZ2luYXRpb25cbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlYXJjaCAmJiAhdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdChcbiAgICAgICAgICAgICAgICAnbnMnLFxuICAgICAgICAgICAgICAgIHRvVXJsKG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmFnZUtleSgpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uKHBhZ2luYXRpb24sIHByb21pc2UsIG5hdmlnYXRpb25FeHRyYXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdChuYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHNvcnRpbmcgdmFyaWFibGVzIGZvciBxdWVyeSBhbmQgcGVyc2lzdCB0aGUgbmV3IHZhbHVlIGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZVxuICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG5vdCBwZXJzaXN0ZWRcbiAgICAgKiBAcGFyYW0gc29ydGluZ0V2ZW50cyBMaXN0IG9mIG1hdGVyaWFsIHNvcnRpbmcgZXZlbnRzXG4gICAgICovXG4gICAgcHVibGljIHNvcnRpbmcoc29ydGluZ0V2ZW50czogKFNvcnQgJiBQYXJ0aWFsPFBpY2s8U29ydGluZywgJ251bGxBc0hpZ2hlc3QnPj4pW10pOiB2b2lkIHtcbiAgICAgICAgLy8gUmVzZXQgcGFnZSBpbmRleCB0byByZXN0YXJ0IHRoZSBwYWdpbmF0aW9uIChwcmVzZXJ2ZSBwYWdlU2l6ZSlcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCdwYWdpbmF0aW9uJywge1xuICAgICAgICAgICAgcGFnaW5hdGlvbjogcGljayh0aGlzLmRlZmF1bHRQYWdpbmF0aW9uLCBbJ29mZnNldCcsICdwYWdlSW5kZXgnXSksXG4gICAgICAgIH0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICAvLyBQcmVzZXJ2ZSBvbmx5IHNvcnRpbmcgZXZlbnRzIHdpdGggZGlyZWN0aW9uIGFuZCBjb252ZXJ0IGludG8gbmF0dXJhbC9ncmFwaHFsIFNvcnRpbmcgdHlwZVxuICAgICAgICBsZXQgc29ydGluZzogU29ydGluZ1tdID0gc29ydGluZ0V2ZW50c1xuICAgICAgICAgICAgLmZpbHRlcihlID0+ICEhZS5kaXJlY3Rpb24pXG4gICAgICAgICAgICAubWFwKHNvcnRpbmdFdmVudCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgczogU29ydGluZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHNvcnRpbmdFdmVudC5hY3RpdmUsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChzb3J0aW5nRXZlbnQuZGlyZWN0aW9uID09PSAnYXNjJykge1xuICAgICAgICAgICAgICAgICAgICBzLm9yZGVyID0gU29ydGluZ09yZGVyLkFTQztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvcnRpbmdFdmVudC5kaXJlY3Rpb24gPT09ICdkZXNjJykge1xuICAgICAgICAgICAgICAgICAgICBzLm9yZGVyID0gU29ydGluZ09yZGVyLkRFU0M7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCdudWxsQXNIaWdoZXN0JyBpbiBzb3J0aW5nRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5udWxsQXNIaWdoZXN0ID0gc29ydGluZ0V2ZW50Lm51bGxBc0hpZ2hlc3Q7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBFbXB0eSBzb3J0aW5nIGZhbGxiYWNrcyBvbiBkZWZhdWx0XG4gICAgICAgIGlmIChzb3J0aW5nLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmRlZmF1bHRTb3J0aW5nKSB7XG4gICAgICAgICAgICBzb3J0aW5nID0gdGhpcy5kZWZhdWx0U29ydGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBzb3J0aW5nIGFzIHNlYXJjaCB2YXJpYWJsZVxuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdzb3J0aW5nJywge3NvcnRpbmc6IHNvcnRpbmd9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG5cbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlYXJjaCAmJiAhdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICAvLyBJZiBzb3J0aW5nIGlzIGVxdWFsIHRvIGRlZmF1bHQgc29ydGluZywgbnVsbGlmeSBpdCB0byByZW1vdmUgZnJvbSBwZXJzaXN0ZW5jZSAodXJsIGFuZCBzZXNzaW9uIHN0b3JhZ2UpXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5wZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdChcbiAgICAgICAgICAgICAgICAnc28nLFxuICAgICAgICAgICAgICAgIGlzRXF1YWwoc29ydGluZywgdGhpcy5kZWZhdWx0U29ydGluZykgPyBudWxsIDogc29ydGluZyxcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmFnZUtleSgpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMuZ2V0UGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uKHBhZ2luYXRpb24sIHByb21pc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGN1cnJlbnQgcGFnaW5hdGlvbiwgZWl0aGVyIHRoZSB1c2VyIGRlZmluZWQgb25lLCBvciB0aGUgZGVmYXVsdCBvbmVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbklucHV0IHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkNoYW5uZWw6IFBhcnRpYWw8RXh0cmFjdFZhbGw8VFNlcnZpY2U+PiB8IHVuZGVmaW5lZCA9IHRoaXMudmFyaWFibGVzTWFuYWdlci5nZXQoJ3BhZ2luYXRpb24nKTtcblxuICAgICAgICBpZiAocGFnaW5hdGlvbkNoYW5uZWwgJiYgcGFnaW5hdGlvbkNoYW5uZWwucGFnaW5hdGlvbikge1xuICAgICAgICAgICAgLy8gVGhlIGNhc3Qgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYmVjYXVzZSBUeXBlc2NyaXB0IGNvcnJlY3RseSBuYXJyb3cgZG93biB0aGUgdHlwZSB0byBgUGFnaW5hdGlvbklucHV0YFxuICAgICAgICAgICAgLy8gYnV0IHNvbWVob3cgc3RpbGwgZ2V0IGNvbmZ1c2VkIHdoZW4gcmV0dXJuaW5nIGl0XG4gICAgICAgICAgICByZXR1cm4gcGFnaW5hdGlvbkNoYW5uZWwucGFnaW5hdGlvbiBhcyBQYWdpbmF0aW9uSW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UGFnaW5hdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgcGFnaW5hdGlvbiB2YXJpYWJsZXMgZm9yIHF1ZXJ5IGFuZCBwZXJzaXN0IGluIHVybCBhbmQgbG9jYWwgc3RvcmFnZSB0aGUgbmV3IHZhbHVlXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgbm90IHBlcnNpc3RlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IE5hdHVyYWwgb3IgUGFnaW5hdG9yIFBhZ2VFdmVudFxuICAgICAqIEBwYXJhbSBkZWZlciBQcm9taXNlICh1c3VhbGx5IGEgcm91dGUgcHJvbWlzZSkgdGhhdCBkZWZlcnMgdGhlIHJlZGlyZWN0aW9uIGZyb20gdGhpcyBjYWxsIHRvIHByZXZlbnQgcm91dGUgbmF2aWdhdGlvbiBjb2xsaXNpb25cbiAgICAgKiBAcGFyYW0gbmF2aWdhdGlvbkV4dHJhcyBBbmd1bGFyIHJvdXRlciBuYXZpZ2F0aW9uIG9wdGlvbnMuIElzIHJlbGV2YW50IG9ubHkgaWYgcGVyc2lzdFNlYXJjaCBpcyB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHBhZ2luYXRpb24oXG4gICAgICAgIGV2ZW50OiBQYWdpbmF0aW9uSW5wdXQgfCBQYWdlRXZlbnQsXG4gICAgICAgIGRlZmVyPzogUHJvbWlzZTx1bmtub3duPixcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGxldCBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uSW5wdXQgPSB0aGlzLmRlZmF1bHRQYWdpbmF0aW9uO1xuICAgICAgICBsZXQgZm9yUGVyc2lzdGVuY2U6IFBhZ2luYXRpb25JbnB1dCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdG8gbmF0dXJhbC9ncmFwaHFsIGZvcm1hdCwgYWRkaW5nIG1pc3NpbmcgYXR0cmlidXRlc1xuICAgICAgICBsZXQgbmF0dXJhbEV2ZW50OiBQYWdpbmF0aW9uSW5wdXQgPSBwaWNrKGV2ZW50LCBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRQYWdpbmF0aW9uKSk7IC8vIG9iamVjdCB3aXRoIG9ubHkgUGFnaW5hdGlvbklucHV0IGF0dHJpYnV0ZXNcbiAgICAgICAgbmF0dXJhbEV2ZW50ID0gZGVmYXVsdHMobmF0dXJhbEV2ZW50LCB0aGlzLmRlZmF1bHRQYWdpbmF0aW9uKTsgLy8gRGVmYXVsdCB3aXRoIGNvbnRyb2xsZXIgdmFsdWVzXG5cbiAgICAgICAgaWYgKCFpc0VxdWFsKG5hdHVyYWxFdmVudCwgdGhpcy5kZWZhdWx0UGFnaW5hdGlvbikpIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb24gPSBmb3JQZXJzaXN0ZW5jZSA9IG5hdHVyYWxFdmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3BhZ2luYXRpb24nLCB7cGFnaW5hdGlvbn0gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcblxuICAgICAgICB0aGlzLnBlcnNpc3RQYWdpbmF0aW9uKGZvclBlcnNpc3RlbmNlLCBkZWZlciwgbmF2aWdhdGlvbkV4dHJhcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHBlcnNpc3RQYWdpbmF0aW9uKFxuICAgICAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uSW5wdXQgfCBudWxsLFxuICAgICAgICBkZWZlcj86IFByb21pc2U8dW5rbm93bj4sXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wZXJzaXN0U2VhcmNoICYmICF0aGlzLmlzUGFuZWwpIHtcbiAgICAgICAgICAgIC8vIERlY2xhcmUgcGVyc2lzdCBmdW5jdGlvblxuICAgICAgICAgICAgY29uc3QgcGVyc2lzdCA9ICh2YWx1ZTogUGFnaW5hdGlvbklucHV0IHwgbnVsbCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0KCdwYScsIHZhbHVlLCB0aGlzLnJvdXRlLCB0aGlzLmdldFN0b3JhZ2VLZXkoKSwgbmF2aWdhdGlvbkV4dHJhcyk7XG5cbiAgICAgICAgICAgIC8vIENhbGwgZnVuY3Rpb24gZGlyZWN0bHkgb3Igd2hlbiBwcm9taXNlIGlzIHJlc29sdmVkXG4gICAgICAgICAgICBpZiAoZGVmZXIpIHtcbiAgICAgICAgICAgICAgICBkZWZlci50aGVuKCgpID0+IHBlcnNpc3QocGFnaW5hdGlvbikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZXJzaXN0KHBhZ2luYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIG1hc3RlclRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlPy5kYXRhPy5pdGVtcy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW53cmFwcGVkID0gdW53cmFwTmF2aWdhYmxlKHJvdyk7XG4gICAgICAgICAgICAgICAgaWYgKHVud3JhcHBlZC5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodW53cmFwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBlbGVtZW50cyBtYXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93c1xuICAgICAqL1xuICAgIHB1YmxpYyBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgICAgICAgbGV0IG51bVJvd3MgPSAwO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2U/LmRhdGE/Lml0ZW1zLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVud3JhcHBlZCA9IHVud3JhcE5hdmlnYWJsZShyb3cpO1xuICAgICAgICAgICAgaWYgKHVud3JhcHBlZC5pZCkge1xuICAgICAgICAgICAgICAgIG51bVJvd3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIGEgYnVsayBhY3Rpb24gaXMgc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgYnVsa0FjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gZXhlY3V0ZSBhIGJ1bGsgYWN0aW9uIHdpdGhvdXQgc2VsZWN0aW5nIG9uZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQgaW4gdGhpcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJ5aW5nIHRvIGV4ZWN1dGUgYSBidWxrIGFjdGlvbiB0aGF0IGRvZXMgbm90IGV4aXN0OiAnICsgdGhpcy5idWxrQWN0aW9uU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXMgYXMgYW55KVt0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZF0oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWFkZXIgaXMgYWx3YXlzIHZpc2libGUgaW4gbm9uLXBhbmVsIGNvbnRleHRcbiAgICAgKiBJcyBoaWRkZW4gd2hlbiBubyByZXN1bHRzIGluIHBhbmVsc1xuICAgICAqL1xuICAgIHB1YmxpYyBzaG93SGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbCB8fCAodGhpcy5pc1BhbmVsICYmIHRoaXMuc2hvd1RhYmxlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBpcyB2aXNpYmxlIGluIG1vc3QgY2FzZXMsIGJ1dCBoaWRkZW4gb24gYSBwYW5lbFxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93U2VhcmNoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNQYW5lbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWJsZSBzaG91bGQgYmUgc2hvd24gb25seSB3aGVuIHRoZXJlIGlzIGRhdGFcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1RhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRhdGFTb3VyY2UgJiYgISF0aGlzLmRhdGFTb3VyY2UuZGF0YSAmJiB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vIHJlc3VsdHMgaXMgc2hvd24gd2hlbiB0aGVyZSBpcyBubyBpdGVtcywgYnV0IG9ubHkgaW4gbm9uLXBhbmVsIGNvbnRleHQgb25seS5cbiAgICAgKiBJbiBwYW5lbHMgd2Ugd2FudCBkaXNjcmV0ZSBtb2RlLCB0aGVyZSBpcyBubyBzZWFyY2ggYW5kIG5vIFwibm8tcmVzdWx0c1wiXG4gICAgICovXG4gICAgcHVibGljIHNob3dOb1Jlc3VsdHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc1BhbmVsICYmICEhdGhpcy5kYXRhU291cmNlICYmICEhdGhpcy5kYXRhU291cmNlLmRhdGEgJiYgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgZnJvbSByb3V0ZS5cbiAgICAgKlxuICAgICAqIFVzZXMgZGF0YSBwcm92aWRlZCBieSByb3V0ZXIgc3VjaCBhczpcbiAgICAgKlxuICAgICAqIC0gYHJvdXRlLmRhdGEuZm9yY2VkVmFyaWFibGVzYFxuICAgICAqIC0gYHJvdXRlLmRhdGEuc2VsZWN0ZWRDb2x1bW5zYFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpbml0RnJvbVJvdXRlKCk6IHZvaWQge1xuICAgICAgICAvLyBWYXJpYWJsZXNcbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5mb3JjZWRWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JjZWRWYXJpYWJsZXModGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmZvcmNlZFZhcmlhYmxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb2x1bW5zXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5zZWxlY3RlZENvbHVtbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGF0YU9ic2VydmFibGUoKTogT2JzZXJ2YWJsZTxUYWxsPiB7XG4gICAgICAgIC8vIEhlcmUgdGhlIGNhc3RpbmcgaXMgYSBiaXQgdW5mb3J0dW5hdGUgYnV0IHJlcXVpcmVkIGJlY2F1c2UgTmF0dXJhbEFic3RyYWN0TmF2aWdhYmxlTGlzdFxuICAgICAgICAvLyBicmVha3MgdGhlIGRhdGEgc3RydWN0dXJlIGNvbnZlbnRpb24gKGJ5IHdyYXBwaW5nIGl0ZW1zIGluIGEgc3RydWN0dXJlKS4gSWRlYWxseSB3ZSBzaG91bGQgcmVtb3ZlXG4gICAgICAgIC8vIHRoZSBjYXN0aW5nIGFuZCByZXNvbHZlIHRoaW5ncyBpbiBhIGJldHRlciB3YXksIGJ1dCB0aGF0J3MgdG9vIG11Y2ggd29yayBmb3Igbm93XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAgIC53YXRjaEFsbCh0aGlzLnZhcmlhYmxlc01hbmFnZXIgYXMgdW5rbm93biBhcyBhbnkpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkgYXMgdW5rbm93biBhcyBPYnNlcnZhYmxlPFRhbGw+O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0RnJvbVBlcnNpc3RlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBlcnNpc3RTZWFyY2ggfHwgdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdG9yYWdlS2V5ID0gdGhpcy5nZXRTdG9yYWdlS2V5KCk7XG5cbiAgICAgICAgLy8gUGFnaW5hdGlvbiA6IHBhXG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ3BhJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSk7XG4gICAgICAgIGlmIChwYWdpbmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCdwYWdpbmF0aW9uJywge3BhZ2luYXRpb259IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3J0aW5nIDogc29cbiAgICAgICAgY29uc3Qgc29ydGluZyA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmdldCgnc28nLCB0aGlzLnJvdXRlLCBzdG9yYWdlS2V5KTtcbiAgICAgICAgaWYgKHNvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3NvcnRpbmcnLCB7c29ydGluZ30gYXMgRXh0cmFjdFZhbGw8VFNlcnZpY2U+KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbHVtbnNcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkQ29sdW1ucyA9IHRoaXMucGVyc2lzdGVuY2VTZXJ2aWNlLmdldCgnY29sJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSk7XG4gICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVkQ29sdW1ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gcGVyc2lzdGVkQ29sdW1ucy5zcGxpdCgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTmF0dXJhbCBzZWFyY2ggOiBuc1xuICAgICAgICB0aGlzLm5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zID0gZnJvbVVybCh0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5nZXQoJ25zJywgdGhpcy5yb3V0ZSwgc3RvcmFnZUtleSkpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlYXJjaEFuZFJlZnJlc2hMaXN0KHRoaXMubmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMsIHRydWUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZWFyY2hBbmRSZWZyZXNoTGlzdChcbiAgICAgICAgbmF0dXJhbFNlYXJjaFNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zLFxuICAgICAgICBpZ25vcmVFbXB0eUZpbHRlciA9IGZhbHNlLFxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0b0dyYXBoUUxEb2N0cmluZUZpbHRlcih0aGlzLm5hdHVyYWxTZWFyY2hGYWNldHMsIG5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKTtcblxuICAgICAgICBpZiAoaWdub3JlRW1wdHlGaWx0ZXIgJiYgaXNFbXB0eShmaWx0ZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhcmlhYmxlc01hbmFnZXIuc2V0KCduYXR1cmFsLXNlYXJjaCcsIHtmaWx0ZXJ9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGN1cnJlbnQgdXJsIGV4Y2x1ZGluZyBsYXN0IHJvdXRlIHBhcmFtZXRlcnM7XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFN0b3JhZ2VLZXkoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XG4gICAgICAgIHVybFRyZWUucm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzW3VybFRyZWUucm9vdC5jaGlsZHJlbi5wcmltYXJ5LnNlZ21lbnRzLmxlbmd0aCAtIDFdLnBhcmFtZXRlcnMgPSB7fTtcbiAgICAgICAgcmV0dXJuIHVybFRyZWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYnVsa2REZWxldGVDb25maXJtYXRpb24oKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsZXJ0U2VydmljZS5jb25maXJtKFxuICAgICAgICAgICAgJGxvY2FsaXplYFN1cHByZXNzaW9uYCxcbiAgICAgICAgICAgICRsb2NhbGl6ZWBWb3VsZXotdm91cyBzdXBwcmltZXIgZMOpZmluaXRpdmVtZW50IGxlcyDDqWzDqW1lbnRzIHPDqWxlY3Rpb25uw6lzID9gLFxuICAgICAgICAgICAgJGxvY2FsaXplYFN1cHByaW1lciBkw6lmaW5pdGl2ZW1lbnRgLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBtdWx0aXBsZSBpdGVtcyBhdCBvbmNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGJ1bGtEZWxldGUoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgICAgICB0aGlzLmJ1bGtkRGVsZXRlQ29uZmlybWF0aW9uKCkuc3Vic2NyaWJlKGNvbmZpcm1lZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmJ1bGtBY3Rpb25TZWxlY3RlZCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgb3VyIG9iamVjdHMgaGF2ZSBJRC4gVGhpcyBpcyB0cnVlIGluIGFsbW9zdCBhbGwgY2FzZXMuIEJ1dCBpZlxuICAgICAgICAgICAgICAgIC8vIGl0IGlzIG5vdCwgbGlrZSBBdHRyaWJ1dGVSZXBvcnRDb21wb25lbnQsIHRoZW4gdGhlIGluaGVyaXRpbmcgY2xhc3MgbXVzdFxuICAgICAgICAgICAgICAgIC8vIG5ldmVyIGNhbGwgdGhpcyBtZXRob2QuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQgYXMge2lkOiBzdHJpbmd9W107XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2UuZGVsZXRlKHNlbGVjdGlvbikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbygkbG9jYWxpemVgU3VwcHJpbcOpYCk7XG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlGb3JjZWRWYXJpYWJsZXModmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyk6IHZvaWQge1xuICAgICAgICBpZiAodmFyaWFibGVzLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnZm9yY2VkLWZpbHRlcicsIHtmaWx0ZXI6IHZhcmlhYmxlcy5maWx0ZXJ9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFyaWFibGVzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3BhZ2luYXRpb24nLCB7cGFnaW5hdGlvbjogdmFyaWFibGVzLnBhZ2luYXRpb259IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFyaWFibGVzLnNvcnRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3NvcnRpbmcnLCB7c29ydGluZzogdmFyaWFibGVzLnNvcnRpbmd9IGFzIEV4dHJhY3RWYWxsPFRTZXJ2aWNlPik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtbnNGb3JUYWJsZSA9IGNvbHVtbnM7XG5cbiAgICAgICAgaWYgKCF0aGlzLnBlcnNpc3RTZWFyY2ggfHwgdGhpcy5pc1BhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZmlyc3Qgc2VsZWN0aW9uIHdlIHJlY2VpdmUgaXMgdGhlIGRlZmF1bHQgb25lIG1hZGUgYnkgPG5hdHVyYWwtY29sdW1ucy1waWNrZXI+XG4gICAgICAgIGlmICghdGhpcy5kZWZhdWx0U2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWxlY3RlZENvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUGVyc2lzdCBvbmx5IGlmIHdhbnRlZCBjb2x1bW5zIGFyZSBkaWZmZXJlbnQgZnJvbSBkZWZhdWx0IHNlbGVjdGlvblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpc0VxdWFsKHRoaXMuZGVmYXVsdFNlbGVjdGVkQ29sdW1ucywgY29sdW1ucykgPyBudWxsIDogY29sdW1ucy5qb2luKCcsJyk7XG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0KCdjb2wnLCB2YWx1ZSwgdGhpcy5yb3V0ZSwgdGhpcy5nZXRTdG9yYWdlS2V5KCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { timer } from 'rxjs';
2
- import { map, take, takeUntil } from 'rxjs/operators';
2
+ import { map, take, takeUntil, tap } from 'rxjs/operators';
3
3
  /**
4
4
  * Behave like setTimeout(), but with a mandatory cancel mechanism.
5
5
  *
@@ -33,4 +33,15 @@ export function cancellableTimeout(canceller, milliSeconds = 0) {
33
33
  return;
34
34
  }));
35
35
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnhqcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3J4anMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFNBQThCLEVBQUUsZUFBdUIsQ0FBQztJQUN2RixPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3BCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7UUFDTCxPQUFPO0lBQ1gsQ0FBQyxDQUFDLENBQ0wsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09ic2VydmFibGUsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YWtlLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBCZWhhdmUgbGlrZSBzZXRUaW1lb3V0KCksIGJ1dCB3aXRoIGEgbWFuZGF0b3J5IGNhbmNlbCBtZWNoYW5pc20uXG4gKlxuICogVGhpcyBpcyB0eXBpY2FsbHkgdXNlZnVsIHRvIHJlcGxhY2Ugc2V0VGltZW91dCgpIGluIGNvbXBvbmVudHMgd2hlcmUgdGhlIGNhbGxiYWNrXG4gKiB3b3VsZCBjcmFzaCBpZiBleGVjdXRlZCBhZnRlciB0aGUgY29tcG9uZW50IGRlc3RydWN0aW9uLiBUaGF0IGNhbiBlYXNpbHkgaGFwcGVuXG4gKiB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlIHF1aWNrbHkgYmV0d2VlbiBwYWdlcy5cbiAqXG4gKiBUeXBpY2FsIHVzYWdlIGluIGEgY29tcG9uZW50IHdvdWxkIGJlOlxuICpcbiAqIGBgYHRzXG4gKiBjYW5jZWxsYWJsZVRpbWVvdXQodGhpcy5uZ1Vuc3Vic2NyaWJlKS5zdWJzY3JpYmUobXlDYWxsYmFjayk7XG4gKiBgYGBcbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBtb3JlIGVycm9yIHByb25lOlxuICpcbiAqIGBgYHRzXG4gKiBwdWJsaWMgZm9vKCk6IHZvaWQge1xuICogICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQobXlDYWxsQmFjayk7XG4gKiB9XG4gKlxuICogcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICogICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAqICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gKiAgICAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gKiAgICAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsbGFibGVUaW1lb3V0KGNhbmNlbGxlcjogT2JzZXJ2YWJsZTx1bmtub3duPiwgbWlsbGlTZWNvbmRzOiBudW1iZXIgPSAwKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRpbWVyKG1pbGxpU2Vjb25kcykucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFrZVVudGlsKGNhbmNlbGxlciksXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0pLFxuICAgICk7XG59XG4iXX0=
36
+ /**
37
+ * For debugging purpose only, will dump in console everything that happen to
38
+ * the observable
39
+ */
40
+ export function debug(debugName) {
41
+ return tap({
42
+ next: value => console.log('NEXT', debugName, value),
43
+ error: error => console.log('ERROR', debugName, error),
44
+ complete: () => console.log('COMPLETE', debugName),
45
+ });
46
+ }
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnhqcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3J4anMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QyxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsU0FBOEIsRUFBRSxlQUF1QixDQUFDO0lBQ3ZGLE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDcEIsR0FBRyxDQUFDLEdBQUcsRUFBRTtRQUNMLE9BQU87SUFDWCxDQUFDLENBQUMsQ0FDTCxDQUFDO0FBQ04sQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQUksU0FBaUI7SUFDdEMsT0FBTyxHQUFHLENBQUk7UUFDVixJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDO1FBQ3BELEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDdEQsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQztLQUNyRCxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIE9ic2VydmFibGUsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIEJlaGF2ZSBsaWtlIHNldFRpbWVvdXQoKSwgYnV0IHdpdGggYSBtYW5kYXRvcnkgY2FuY2VsIG1lY2hhbmlzbS5cbiAqXG4gKiBUaGlzIGlzIHR5cGljYWxseSB1c2VmdWwgdG8gcmVwbGFjZSBzZXRUaW1lb3V0KCkgaW4gY29tcG9uZW50cyB3aGVyZSB0aGUgY2FsbGJhY2tcbiAqIHdvdWxkIGNyYXNoIGlmIGV4ZWN1dGVkIGFmdGVyIHRoZSBjb21wb25lbnQgZGVzdHJ1Y3Rpb24uIFRoYXQgY2FuIGVhc2lseSBoYXBwZW5cbiAqIHdoZW4gdGhlIHVzZXIgbmF2aWdhdGUgcXVpY2tseSBiZXR3ZWVuIHBhZ2VzLlxuICpcbiAqIFR5cGljYWwgdXNhZ2UgaW4gYSBjb21wb25lbnQgd291bGQgYmU6XG4gKlxuICogYGBgdHNcbiAqIGNhbmNlbGxhYmxlVGltZW91dCh0aGlzLm5nVW5zdWJzY3JpYmUpLnN1YnNjcmliZShteUNhbGxiYWNrKTtcbiAqIGBgYFxuICpcbiAqIEluc3RlYWQgb2YgdGhlIG1vcmUgZXJyb3IgcHJvbmU6XG4gKlxuICogYGBgdHNcbiAqIHB1YmxpYyBmb28oKTogdm9pZCB7XG4gKiAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChteUNhbGxCYWNrKTtcbiAqIH1cbiAqXG4gKiBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gKiAgICAgaWYgKHRoaXMudGltZW91dCkge1xuICogICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAqICAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAqICAgICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWxsYWJsZVRpbWVvdXQoY2FuY2VsbGVyOiBPYnNlcnZhYmxlPHVua25vd24+LCBtaWxsaVNlY29uZHM6IG51bWJlciA9IDApOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGltZXIobWlsbGlTZWNvbmRzKS5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB0YWtlVW50aWwoY2FuY2VsbGVyKSxcbiAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSksXG4gICAgKTtcbn1cblxuLyoqXG4gKiBGb3IgZGVidWdnaW5nIHB1cnBvc2Ugb25seSwgd2lsbCBkdW1wIGluIGNvbnNvbGUgZXZlcnl0aGluZyB0aGF0IGhhcHBlbiB0b1xuICogdGhlIG9ic2VydmFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYnVnPFQ+KGRlYnVnTmFtZTogc3RyaW5nKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+IHtcbiAgICByZXR1cm4gdGFwPFQ+KHtcbiAgICAgICAgbmV4dDogdmFsdWUgPT4gY29uc29sZS5sb2coJ05FWFQnLCBkZWJ1Z05hbWUsIHZhbHVlKSxcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IGNvbnNvbGUubG9nKCdFUlJPUicsIGRlYnVnTmFtZSwgZXJyb3IpLFxuICAgICAgICBjb21wbGV0ZTogKCkgPT4gY29uc29sZS5sb2coJ0NPTVBMRVRFJywgZGVidWdOYW1lKSxcbiAgICB9KTtcbn1cbiJdfQ==
@@ -25,6 +25,20 @@ export function unique(fieldName, excludedId, modelService) {
25
25
  return timer(500).pipe(switchMap(() => modelService.count(qvm).pipe(map(count => (count > 0 ? { duplicateValue: count } : null)))));
26
26
  };
27
27
  }
28
+ /**
29
+ * Returns an async validator function that checks that the form control value is available
30
+ *
31
+ * Similar to `unique` validator, but allows to use a custom query for when the client does
32
+ * not have permissions for `modelService.count()`.
33
+ */
34
+ export function available(getAvailableQuery, excludedId = null) {
35
+ return (control) => {
36
+ if (!control.value || !control.dirty) {
37
+ return of(null);
38
+ }
39
+ return timer(500).pipe(switchMap(() => getAvailableQuery(control.value, excludedId).pipe(map(isAvailable => (isAvailable ? null : { available: true })))));
40
+ };
41
+ }
28
42
  /**
29
43
  * Return all errors recursively for the given Form or control
30
44
  */
@@ -159,4 +173,4 @@ const twoDecimals = decimal(2);
159
173
  export function money(control) {
160
174
  return twoDecimals(control) ? { money: true } : null;
161
175
  }
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFDVCxTQUFTLEVBR1QsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTdELE9BQU8sRUFBQyw0QkFBNEIsRUFBaUIsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBR2hDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDbEIsU0FBaUIsRUFDakIsVUFBcUMsRUFDckMsWUFBc0I7SUFFdEIsT0FBTyxDQUFDLE9BQXdCLEVBQXVDLEVBQUU7UUFDckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2xDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25CO1FBRUQsTUFBTSxTQUFTLEdBQXlCLEVBQUUsQ0FBQztRQUMzQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBQyxFQUFDLENBQUM7UUFFdkQsSUFBSSxVQUFVLEVBQUU7WUFDWixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUMsRUFBQyxDQUFDO1NBQzdEO1FBRUQsTUFBTSxTQUFTLEdBQW1CO1lB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SUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQztBQUNoRixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQWE7SUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsb0JBQW9CLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDM0QsT0FBTyxPQUFPLENBQUMsRUFBRTtRQUNiLHlEQUF5RDtRQUN6RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFO1lBQy9FLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRS9COztHQUVHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxPQUF3QjtJQUMxQyxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbnRyb2wsXG4gICAgQXN5bmNWYWxpZGF0b3JGbixcbiAgICBGb3JtQXJyYXksXG4gICAgRm9ybUdyb3VwLFxuICAgIFZhbGlkYXRpb25FcnJvcnMsXG4gICAgVmFsaWRhdG9yRm4sXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIGZpcnN0LCBtYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2Fic3RyYWN0LW1vZGVsLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyLCBRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7dmFsaWRUbGRzfSBmcm9tICcuL3RsZCc7XG5pbXBvcnQge0ZpbHRlckdyb3VwQ29uZGl0aW9ufSBmcm9tICcuLi9tb2R1bGVzL3NlYXJjaC9jbGFzc2VzL2dyYXBocWwtZG9jdHJpbmUudHlwZXMnO1xuXG4vKipcbiAqIFJldHVybnMgYW4gYXN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHRoYXQgdGhlIGZvcm0gY29udHJvbCB2YWx1ZSBpcyB1bmlxdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZTxUU2VydmljZSBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTxhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnk+PihcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICBleGNsdWRlZElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIG1vZGVsU2VydmljZTogVFNlcnZpY2UsXG4pOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+ID0+IHtcbiAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8ICFjb250cm9sLmRpcnR5KSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25kaXRpb246IEZpbHRlckdyb3VwQ29uZGl0aW9uID0ge307XG4gICAgICAgIGNvbmRpdGlvbltmaWVsZE5hbWVdID0ge2VxdWFsOiB7dmFsdWU6IGNvbnRyb2wudmFsdWV9fTtcblxuICAgICAgICBpZiAoZXhjbHVkZWRJZCkge1xuICAgICAgICAgICAgY29uZGl0aW9uWydpZCddID0ge2VxdWFsOiB7dmFsdWU6IGV4Y2x1ZGVkSWQsIG5vdDogdHJ1ZX19O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFyaWFibGVzOiBRdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtwYWdlSW5kZXg6IDAsIHBhZ2VTaXplOiAwfSxcbiAgICAgICAgICAgIGZpbHRlcjoge2dyb3VwczogW3tjb25kaXRpb25zOiBbY29uZGl0aW9uXX1dfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBxdm0gPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcigpO1xuICAgICAgICBxdm0uc2V0KCd2YXJpYWJsZXMnLCB2YXJpYWJsZXMpO1xuXG4gICAgICAgIHJldHVybiB0aW1lcig1MDApLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gbW9kZWxTZXJ2aWNlLmNvdW50KHF2bSkucGlwZShtYXAoY291bnQgPT4gKGNvdW50ID4gMCA/IHtkdXBsaWNhdGVWYWx1ZTogY291bnR9IDogbnVsbCkpKSksXG4gICAgICAgICk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxsIGVycm9ycyByZWN1cnNpdmVseSBmb3IgdGhlIGdpdmVuIEZvcm0gb3IgY29udHJvbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEVycm9ycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgbGV0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgZXJyb3JzID0gT2JqZWN0LmVudHJpZXMoY29udHJvbC5jb250cm9scykucmVkdWNlKChhY2M6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsLCBba2V5LCBjaGlsZENvbnRyb2xdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZEVycm9ycyA9IGNvbGxlY3RFcnJvcnMoY2hpbGRDb250cm9sKTtcbiAgICAgICAgICAgIGlmIChjaGlsZEVycm9ycykge1xuICAgICAgICAgICAgICAgIGFjYyA9IHsuLi5hY2MsIFtrZXldOiBjaGlsZEVycm9yc307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBudWxsKTtcbiAgICB9XG5cbiAgICBpZiAoIWVycm9ycykge1xuICAgICAgICBlcnJvcnMgPSBjb250cm9sLmVycm9ycztcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIEZvcmNlIHZhbGlkYXRpb24gb2YgYWxsIGZvcm0gY29udHJvbHMgcmVjdXJzaXZlbHkuXG4gKlxuICogUmVjdXJzaXZlbHkgbWFyayBkZXNjZW5kaW5nIGZvcm0gdHJlZSBhcyBkaXJ0eSBhbmQgdG91Y2hlZCBpbiBvcmRlciB0byBzaG93IGFsbCBpbnZhbGlkIGZpZWxkcyBvbiBkZW1hbmQuXG4gKiBUeXBpY2FsbHkgdXNlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IG9iamVjdCBhbmQgdXNlciBjbGlja2VkIG9uIGNyZWF0ZSBidXR0b24gYnV0IHNldmVyYWwgZmllbGRzIHdlcmUgbm90XG4gKiB0b3VjaGVkIGFuZCBhcmUgaW52YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQWxsRm9ybUNvbnRyb2xzKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQge1xuICAgIGNvbnRyb2wubWFya0FzRGlydHkoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xuXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICBmb3IgKGNvbnN0IFssIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyhjb250cm9sLmNvbnRyb2xzKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVBbGxGb3JtQ29udHJvbHMoY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEVtaXRzIGV4YWN0bHkgMCBvciAxIHRpbWU6XG4gKlxuICogLSBpZiB0aGUgZm9ybSBpcyBWQUxJRCwgZW1pdHMgaW1tZWRpYXRlbHlcbiAqIC0gaWYgdGhlIGZvcm0gaXMgUEVORElORyBlbWl0cyBpZiBpdCBjaGFuZ2VzIGZyb20gUEVORElORyB0byBWQUxJRFxuICogLSBhbnkgb3RoZXIgY2FzZXMgd2lsbCAqKm5ldmVyKiogZW1pdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaWZWYWxpZChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBPYnNlcnZhYmxlPCdWQUxJRCc+IHtcbiAgICBjb25zdCBvYnNlcnZhYmxlID0gY29udHJvbC5wZW5kaW5nID8gY29udHJvbC5zdGF0dXNDaGFuZ2VzLnBpcGUoZmlyc3QoKSkgOiBvZihjb250cm9sLnN0YXR1cyk7XG5cbiAgICByZXR1cm4gb2JzZXJ2YWJsZS5waXBlKGZpbHRlcihzdGF0dXMgPT4gc3RhdHVzID09PSAnVkFMSUQnKSk7XG59XG5cbi8vIFRoaXMgaXMgaXMgYW4gYXBwcm94aW1hdGlvbiBvZiBSRkNfNTMyMiB3aGVyZSB0aGUgaG9zdG5hbWU6XG4vL1xuLy8gLSBpcyB0b28gc3RyaWN0IGJlY2F1c2UgaXQgcmVqZWN0cyBJUCBhZGRyZXNzXG4vLyAtIGlzIHRvbyBsYXggYmVjYXVzZSBpdCBhY2NlcHRzIHByZXR0eSBtdWNoIGFueXRoaW5nIGVsc2Vcbi8vXG4vLyBidXQgdGhlIFRMRCB3aWxsIGJlIHZhbGlkYXRlZCBhZ2FpbnN0IGEgd2hpdGVsaXN0IHNvIHRoYXQgc2hvdWxkIG1ha2UgdGhlIHdob2xlIHRoaW5nIGFjY2VwdGFibGVcbmNvbnN0IFJGQ181MzIyID0gL15bYS16QS1aMC05LiEjJCUmJyorXFwvPT9eX2B7fH1+LV0rQFteQCBdK1xcLlteQF0rJC91O1xuXG4vKipcbiAqIFZhbGlkYXRlIGFuIGVtYWlsIGFkZHJlc3MgYWNjb3JkaW5nIHRvIFJGQywgYW5kIGFsc28gdGhhdCBpdCBpcyBwdWJsaWNseSBkZWxpdmVyYWJsZSAobm90IFwicm9vdEBsb2NhbGhvc3RcIiBvciBcInJvb3RAMTI3LjAuMC4xXCIpXG4gKlxuICogVGhpcyBpcyBtZWFudCB0byByZXBsYWNlICoqYWxsKiogdXNhZ2VzIG9mIEFuZ3VsYXIgdG9vIHBlcm1pc3NpdmUgYFZhbGlkYXRvcnMuZW1haWxgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpdmVyYWJsZUVtYWlsKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAvLyBkb24ndCB2YWxpZGF0ZSBlbXB0eSB2YWx1ZXMgdG8gYWxsb3cgb3B0aW9uYWwgY29udHJvbHNcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvciA9IHtlbWFpbDogdHJ1ZX07XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA+IDI1NCkge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFSRkNfNTMyMi50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgdGxkID0gdmFsdWUuc3BsaXQoJy4nKS5wb3AoKTtcbiAgICBpZiAoIXZhbGlkVGxkcy5pbmNsdWRlcyh0bGQpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBOYWl2ZSBVUkwgdmFsaWRhdG9yIGZvciBcIm5vcm1hbFwiIHdlYiBsaW5rcywgdGhhdCBpcyBhIGJpdCB0b28gcGVybWlzc2l2ZVxuICpcbiAqIEl0IGVuZm9yY2VzOlxuICpcbiAqICAgICAtIGh0dHAvaHR0cHMgcHJvdG9jb2xcbiAqICAgICAtIG9uZSBkb21haW5cbiAqICAgICAtIG9uZSB0bGRcbiAqXG4gKiBJdCBhbGxvd3M6XG4gKlxuICogICAgIC0gYW55IG51bWJlciBvZiBzdWJkb21haW5zXG4gKiAgICAgLSBhbnkgcGFyYW1ldGVyc1xuICogICAgIC0gYW55IGZyYWdtZW50c1xuICogICAgIC0gYW55IGNoYXJhY3RlcnMgZm9yIGFueSBwYXJ0cyAoZG9lcyBub3QgY29uZm9ybSB0byByZmMxNzM4KVxuICovXG5leHBvcnQgY29uc3QgdXJsVmFsaWRhdG9yID0gVmFsaWRhdG9ycy5wYXR0ZXJuKC9eaHR0cHM/OlxcL1xcLyg/OlteLlxcc10rXFwuKStbXi5cXHNdKyQvKTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciAobm9uLWZsb2F0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZWdlcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgLy8gRG9uJ3QgdmFsaWRhdGUgZW1wdHkgdmFsdWVzIHRvIGFsbG93IG9wdGlvbmFsIGNvbnRyb2xzXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgPT09IG51bGwgfHwgY29udHJvbC52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2wudmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlRmxvYXQoY29udHJvbC52YWx1ZSkpID8gbnVsbCA6IHtpbnRlZ2VyOiB0cnVlfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IHRoZSB2YWx1ZSBpcyBhIGRlY2ltYWwgbnVtYmVyIHdpdGggdXAgdG8gYHNjYWxlYCBkaWdpdHNcbiAqXG4gKiBUaGUgZXJyb3IgY29udGFpbnMgdGhlIGV4cGVjdGVkIHNjYWxlLCBzbyB0aGF0IHRoZSBlcnJvciBtZXNzYWdlIGNhbiBleHBsYWluXG4gKiBpdCB0byB0aGUgZW5kLXVzZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNpbWFsKHNjYWxlOiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cChgXi0/XFxcXGQrKFxcXFwuXFxcXGR7MCwke3NjYWxlfX0pPyRgKTtcbiAgICByZXR1cm4gY29udHJvbCA9PiB7XG4gICAgICAgIC8vIERvbid0IHZhbGlkYXRlIGVtcHR5IHZhbHVlcyB0byBhbGxvdyBvcHRpb25hbCBjb250cm9sc1xuICAgICAgICBpZiAoY29udHJvbC52YWx1ZSA9PT0gbnVsbCB8fCBjb250cm9sLnZhbHVlID09PSB1bmRlZmluZWQgfHwgY29udHJvbC52YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSAnJyArIGNvbnRyb2wudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZS5tYXRjaChyZWdFeHApKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7ZGVjaW1hbDogc2NhbGV9O1xuICAgIH07XG59XG5cbi8qKlxuICogRm9yIGludGVybmFsIHVzZSB0byBhdm9pZCByZS1jcmVhdGluZyByZWdleHAgb24gZWFjaCBjYWxsIG9mIGBtb25leWBcbiAqL1xuY29uc3QgdHdvRGVjaW1hbHMgPSBkZWNpbWFsKDIpO1xuXG4vKipcbiAqIFZhbGlkYXRlIHRoYXQgdGhlIHZhbHVlIGlzIGFuIGFtb3VudCBvZiBtb25leSwgbWVhbmluZyBhIG51bWJlciB3aXRoIGF0IG1vc3QgMiBkZWNpbWFsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9uZXkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiB0d29EZWNpbWFscyhjb250cm9sKSA/IHttb25leTogdHJ1ZX0gOiBudWxsO1xufVxuIl19
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9jbGFzc2VzL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFDVCxTQUFTLEVBR1QsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTdELE9BQU8sRUFBQyw0QkFBNEIsRUFBaUIsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBR2hDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDbEIsU0FBaUIsRUFDakIsVUFBcUMsRUFDckMsWUFBc0I7SUFFdEIsT0FBTyxDQUFDLE9BQXdCLEVBQXVDLEVBQUU7UUFDckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2xDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25CO1FBRUQsTUFBTSxTQUFTLEdBQXlCLEVBQUUsQ0FBQztRQUMzQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBQyxFQUFDLENBQUM7UUFFdkQsSUFBSSxVQUFVLEVBQUU7WUFDWixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUMsRUFBQyxDQUFDO1NBQzdEO1FBRUQsTUFBTSxTQUFTLEdBQW1CO1lB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QUFNLENBQUMsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUM1QixDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFL0I7O0dBRUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLE9BQXdCO0lBQzFDLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFic3RyYWN0Q29udHJvbCxcbiAgICBBc3luY1ZhbGlkYXRvckZuLFxuICAgIEZvcm1BcnJheSxcbiAgICBGb3JtR3JvdXAsXG4gICAgVmFsaWRhdGlvbkVycm9ycyxcbiAgICBWYWxpZGF0b3JGbixcbiAgICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgZmlyc3QsIG1hcCwgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvYWJzdHJhY3QtbW9kZWwuc2VydmljZSc7XG5pbXBvcnQge05hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXIsIFF1ZXJ5VmFyaWFibGVzfSBmcm9tICcuL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHt2YWxpZFRsZHN9IGZyb20gJy4vdGxkJztcbmltcG9ydCB7RmlsdGVyR3JvdXBDb25kaXRpb259IGZyb20gJy4uL21vZHVsZXMvc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZS50eXBlcyc7XG5cbi8qKlxuICogUmV0dXJucyBhbiBhc3luYyB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjaGVja3MgdGhhdCB0aGUgZm9ybSBjb250cm9sIHZhbHVlIGlzIHVuaXF1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlPFRTZXJ2aWNlIGV4dGVuZHMgTmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlPGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueT4+KFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGV4Y2x1ZGVkSWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgbW9kZWxTZXJ2aWNlOiBUU2VydmljZSxcbik6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gPT4ge1xuICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgIWNvbnRyb2wuZGlydHkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbjogRmlsdGVyR3JvdXBDb25kaXRpb24gPSB7fTtcbiAgICAgICAgY29uZGl0aW9uW2ZpZWxkTmFtZV0gPSB7ZXF1YWw6IHt2YWx1ZTogY29udHJvbC52YWx1ZX19O1xuXG4gICAgICAgIGlmIChleGNsdWRlZElkKSB7XG4gICAgICAgICAgICBjb25kaXRpb25bJ2lkJ10gPSB7ZXF1YWw6IHt2YWx1ZTogZXhjbHVkZWRJZCwgbm90OiB0cnVlfX07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YXJpYWJsZXM6IFF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICAgICAgcGFnaW5hdGlvbjoge3BhZ2VJbmRleDogMCwgcGFnZVNpemU6IDB9LFxuICAgICAgICAgICAgZmlsdGVyOiB7Z3JvdXBzOiBbe2NvbmRpdGlvbnM6IFtjb25kaXRpb25dfV19LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHF2bSA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyKCk7XG4gICAgICAgIHF2bS5zZXQoJ3ZhcmlhYmxlcycsIHZhcmlhYmxlcyk7XG5cbiAgICAgICAgcmV0dXJuIHRpbWVyKDUwMCkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBtb2RlbFNlcnZpY2UuY291bnQocXZtKS5waXBlKG1hcChjb3VudCA9PiAoY291bnQgPiAwID8ge2R1cGxpY2F0ZVZhbHVlOiBjb3VudH0gOiBudWxsKSkpKSxcbiAgICAgICAgKTtcbiAgICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHRoYXQgdGhlIGZvcm0gY29udHJvbCB2YWx1ZSBpcyBhdmFpbGFibGVcbiAqXG4gKiBTaW1pbGFyIHRvIGB1bmlxdWVgIHZhbGlkYXRvciwgYnV0IGFsbG93cyB0byB1c2UgYSBjdXN0b20gcXVlcnkgZm9yIHdoZW4gdGhlIGNsaWVudCBkb2VzXG4gKiBub3QgaGF2ZSBwZXJtaXNzaW9ucyBmb3IgYG1vZGVsU2VydmljZS5jb3VudCgpYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF2YWlsYWJsZShcbiAgICBnZXRBdmFpbGFibGVRdWVyeTogKHZhbHVlOiBzdHJpbmcsIGV4Y2x1ZGVkSWQ6IHN0cmluZyB8IG51bGwpID0+IE9ic2VydmFibGU8Ym9vbGVhbj4sXG4gICAgZXhjbHVkZWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4pOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+ID0+IHtcbiAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8ICFjb250cm9sLmRpcnR5KSB7XG4gICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGltZXIoNTAwKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICAgICAgZ2V0QXZhaWxhYmxlUXVlcnkoY29udHJvbC52YWx1ZSwgZXhjbHVkZWRJZCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKGlzQXZhaWxhYmxlID0+IChpc0F2YWlsYWJsZSA/IG51bGwgOiB7YXZhaWxhYmxlOiB0cnVlfSkpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgIH07XG59XG5cbi8qKlxuICogUmV0dXJuIGFsbCBlcnJvcnMgcmVjdXJzaXZlbHkgZm9yIHRoZSBnaXZlbiBGb3JtIG9yIGNvbnRyb2xcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RFcnJvcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGxldCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgIGVycm9ycyA9IE9iamVjdC5lbnRyaWVzKGNvbnRyb2wuY29udHJvbHMpLnJlZHVjZSgoYWNjOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCwgW2tleSwgY2hpbGRDb250cm9sXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRFcnJvcnMgPSBjb2xsZWN0RXJyb3JzKGNoaWxkQ29udHJvbCk7XG4gICAgICAgICAgICBpZiAoY2hpbGRFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhY2MgPSB7Li4uYWNjLCBba2V5XTogY2hpbGRFcnJvcnN9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgbnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKCFlcnJvcnMpIHtcbiAgICAgICAgZXJyb3JzID0gY29udHJvbC5lcnJvcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBGb3JjZSB2YWxpZGF0aW9uIG9mIGFsbCBmb3JtIGNvbnRyb2xzIHJlY3Vyc2l2ZWx5LlxuICpcbiAqIFJlY3Vyc2l2ZWx5IG1hcmsgZGVzY2VuZGluZyBmb3JtIHRyZWUgYXMgZGlydHkgYW5kIHRvdWNoZWQgaW4gb3JkZXIgdG8gc2hvdyBhbGwgaW52YWxpZCBmaWVsZHMgb24gZGVtYW5kLlxuICogVHlwaWNhbGx5IHVzZWQgd2hlbiBjcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kIHVzZXIgY2xpY2tlZCBvbiBjcmVhdGUgYnV0dG9uIGJ1dCBzZXZlcmFsIGZpZWxkcyB3ZXJlIG5vdFxuICogdG91Y2hlZCBhbmQgYXJlIGludmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUFsbEZvcm1Db250cm9scyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkIHtcbiAgICBjb250cm9sLm1hcmtBc0RpcnR5KHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgZm9yIChjb25zdCBbLCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMoY29udHJvbC5jb250cm9scykpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlQWxsRm9ybUNvbnRyb2xzKGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBFbWl0cyBleGFjdGx5IDAgb3IgMSB0aW1lOlxuICpcbiAqIC0gaWYgdGhlIGZvcm0gaXMgVkFMSUQsIGVtaXRzIGltbWVkaWF0ZWx5XG4gKiAtIGlmIHRoZSBmb3JtIGlzIFBFTkRJTkcgZW1pdHMgaWYgaXQgY2hhbmdlcyBmcm9tIFBFTkRJTkcgdG8gVkFMSURcbiAqIC0gYW55IG90aGVyIGNhc2VzIHdpbGwgKipuZXZlcioqIGVtaXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlmVmFsaWQoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogT2JzZXJ2YWJsZTwnVkFMSUQnPiB7XG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IGNvbnRyb2wucGVuZGluZyA/IGNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKGZpcnN0KCkpIDogb2YoY29udHJvbC5zdGF0dXMpO1xuXG4gICAgcmV0dXJuIG9ic2VydmFibGUucGlwZShmaWx0ZXIoc3RhdHVzID0+IHN0YXR1cyA9PT0gJ1ZBTElEJykpO1xufVxuXG4vLyBUaGlzIGlzIGlzIGFuIGFwcHJveGltYXRpb24gb2YgUkZDXzUzMjIgd2hlcmUgdGhlIGhvc3RuYW1lOlxuLy9cbi8vIC0gaXMgdG9vIHN0cmljdCBiZWNhdXNlIGl0IHJlamVjdHMgSVAgYWRkcmVzc1xuLy8gLSBpcyB0b28gbGF4IGJlY2F1c2UgaXQgYWNjZXB0cyBwcmV0dHkgbXVjaCBhbnl0aGluZyBlbHNlXG4vL1xuLy8gYnV0IHRoZSBUTEQgd2lsbCBiZSB2YWxpZGF0ZWQgYWdhaW5zdCBhIHdoaXRlbGlzdCBzbyB0aGF0IHNob3VsZCBtYWtlIHRoZSB3aG9sZSB0aGluZyBhY2NlcHRhYmxlXG5jb25zdCBSRkNfNTMyMiA9IC9eW2EtekEtWjAtOS4hIyQlJicqK1xcLz0/Xl9ge3x9fi1dK0BbXkAgXStcXC5bXkBdKyQvdTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBhbiBlbWFpbCBhZGRyZXNzIGFjY29yZGluZyB0byBSRkMsIGFuZCBhbHNvIHRoYXQgaXQgaXMgcHVibGljbHkgZGVsaXZlcmFibGUgKG5vdCBcInJvb3RAbG9jYWxob3N0XCIgb3IgXCJyb290QDEyNy4wLjAuMVwiKVxuICpcbiAqIFRoaXMgaXMgbWVhbnQgdG8gcmVwbGFjZSAqKmFsbCoqIHVzYWdlcyBvZiBBbmd1bGFyIHRvbyBwZXJtaXNzaXZlIGBWYWxpZGF0b3JzLmVtYWlsYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaXZlcmFibGVFbWFpbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgLy8gZG9uJ3QgdmFsaWRhdGUgZW1wdHkgdmFsdWVzIHRvIGFsbG93IG9wdGlvbmFsIGNvbnRyb2xzXG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSB7ZW1haWw6IHRydWV9O1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyNTQpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIGlmICghUkZDXzUzMjIudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIGNvbnN0IHRsZCA9IHZhbHVlLnNwbGl0KCcuJykucG9wKCk7XG4gICAgaWYgKCF2YWxpZFRsZHMuaW5jbHVkZXModGxkKSkge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTmFpdmUgVVJMIHZhbGlkYXRvciBmb3IgXCJub3JtYWxcIiB3ZWIgbGlua3MsIHRoYXQgaXMgYSBiaXQgdG9vIHBlcm1pc3NpdmVcbiAqXG4gKiBJdCBlbmZvcmNlczpcbiAqXG4gKiAgICAgLSBodHRwL2h0dHBzIHByb3RvY29sXG4gKiAgICAgLSBvbmUgZG9tYWluXG4gKiAgICAgLSBvbmUgdGxkXG4gKlxuICogSXQgYWxsb3dzOlxuICpcbiAqICAgICAtIGFueSBudW1iZXIgb2Ygc3ViZG9tYWluc1xuICogICAgIC0gYW55IHBhcmFtZXRlcnNcbiAqICAgICAtIGFueSBmcmFnbWVudHNcbiAqICAgICAtIGFueSBjaGFyYWN0ZXJzIGZvciBhbnkgcGFydHMgKGRvZXMgbm90IGNvbmZvcm0gdG8gcmZjMTczOClcbiAqL1xuZXhwb3J0IGNvbnN0IHVybFZhbGlkYXRvciA9IFZhbGlkYXRvcnMucGF0dGVybigvXmh0dHBzPzpcXC9cXC8oPzpbXi5cXHNdK1xcLikrW14uXFxzXSskLyk7XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoYXQgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIgKG5vbi1mbG9hdClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVnZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIC8vIERvbid0IHZhbGlkYXRlIGVtcHR5IHZhbHVlcyB0byBhbGxvdyBvcHRpb25hbCBjb250cm9sc1xuICAgIGlmIChjb250cm9sLnZhbHVlID09PSBudWxsIHx8IGNvbnRyb2wudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBjb250cm9sLnZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihwYXJzZUZsb2F0KGNvbnRyb2wudmFsdWUpKSA/IG51bGwgOiB7aW50ZWdlcjogdHJ1ZX07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhhdCB0aGUgdmFsdWUgaXMgYSBkZWNpbWFsIG51bWJlciB3aXRoIHVwIHRvIGBzY2FsZWAgZGlnaXRzXG4gKlxuICogVGhlIGVycm9yIGNvbnRhaW5zIHRoZSBleHBlY3RlZCBzY2FsZSwgc28gdGhhdCB0aGUgZXJyb3IgbWVzc2FnZSBjYW4gZXhwbGFpblxuICogaXQgdG8gdGhlIGVuZC11c2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaW1hbChzY2FsZTogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYF4tP1xcXFxkKyhcXFxcLlxcXFxkezAsJHtzY2FsZX19KT8kYCk7XG4gICAgcmV0dXJuIGNvbnRyb2wgPT4ge1xuICAgICAgICAvLyBEb24ndCB2YWxpZGF0ZSBlbXB0eSB2YWx1ZXMgdG8gYWxsb3cgb3B0aW9uYWwgY29udHJvbHNcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgPT09IG51bGwgfHwgY29udHJvbC52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2wudmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gJycgKyBjb250cm9sLnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUubWF0Y2gocmVnRXhwKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge2RlY2ltYWw6IHNjYWxlfTtcbiAgICB9O1xufVxuXG4vKipcbiAqIEZvciBpbnRlcm5hbCB1c2UgdG8gYXZvaWQgcmUtY3JlYXRpbmcgcmVnZXhwIG9uIGVhY2ggY2FsbCBvZiBgbW9uZXlgXG4gKi9cbmNvbnN0IHR3b0RlY2ltYWxzID0gZGVjaW1hbCgyKTtcblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBhbW91bnQgb2YgbW9uZXksIG1lYW5pbmcgYSBudW1iZXIgd2l0aCBhdCBtb3N0IDIgZGVjaW1hbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbmV5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdHdvRGVjaW1hbHMoY29udHJvbCkgPyB7bW9uZXk6IHRydWV9IDogbnVsbDtcbn1cbiJdfQ==
@@ -6,19 +6,37 @@ export class NaturalColumnsPickerComponent {
6
6
  constructor(changeDetectorRef) {
7
7
  this.changeDetectorRef = changeDetectorRef;
8
8
  /**
9
- * Emit a list of column keys whenever the selection changes
9
+ * Emit a list of valid and selected column keys whenever the selection changes
10
10
  */
11
11
  this.selectionChange = new EventEmitter();
12
- this.defaultSelectionChange = new EventEmitter();
12
+ /**
13
+ * Available columns are defined by options in the template
14
+ */
13
15
  this.availableColumns = null;
16
+ /**
17
+ * Displayed options in the dropdown menu
18
+ */
14
19
  this.displayedColumns = [];
15
20
  this.ngUnsubscribe = new Subject();
16
21
  }
17
- set selection(columns) {
22
+ /**
23
+ * Set the columns that are wanted but might be unavailable.
24
+ *
25
+ * If a column is unavailable it will be ignored silently. To know what columns were actually applied
26
+ * you should use `selectionChange`.
27
+ *
28
+ * It is often set once on component initialization, but it can also be set again later in the lifespan of the component.
29
+ */
30
+ set selections(columns) {
18
31
  var _a;
32
+ this._selections = columns;
33
+ if (!columns || !this.availableColumns) {
34
+ return;
35
+ }
19
36
  (_a = this.availableColumns) === null || _a === void 0 ? void 0 : _a.forEach(col => {
20
37
  col.checked = columns.includes(col.key);
21
38
  });
39
+ this.updateColumns();
22
40
  }
23
41
  ngAfterViewInit() {
24
42
  cancellableTimeout(this.ngUnsubscribe).subscribe(() => {
@@ -30,8 +48,10 @@ export class NaturalColumnsPickerComponent {
30
48
  initColumns() {
31
49
  var _a, _b, _c;
32
50
  (_a = this.availableColumns) === null || _a === void 0 ? void 0 : _a.forEach(col => {
33
- col.checked = this.initialSelection ? this.initialSelection.includes(col.key) : col.checked;
51
+ var _a;
52
+ col.checked = ((_a = this._selections) === null || _a === void 0 ? void 0 : _a.length) ? this._selections.includes(col.key) : col.checked;
34
53
  });
54
+ // Show options only for columns that are not hidden
35
55
  this.displayedColumns = (_c = (_b = this.availableColumns) === null || _b === void 0 ? void 0 : _b.filter(col => !col.hidden)) !== null && _c !== void 0 ? _c : [];
36
56
  }
37
57
  updateColumns() {
@@ -55,10 +75,8 @@ NaturalColumnsPickerComponent.ctorParameters = () => [
55
75
  { type: ChangeDetectorRef }
56
76
  ];
57
77
  NaturalColumnsPickerComponent.propDecorators = {
58
- selection: [{ type: Input }],
78
+ selections: [{ type: Input }],
59
79
  selectionChange: [{ type: Output }],
60
- defaultSelectionChange: [{ type: Output }],
61
- initialSelection: [{ type: Input }],
62
80
  availableColumns: [{ type: ContentChildren, args: [NaturalColumnsPickerColumnDirective,] }]
63
81
  };
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvY29sdW1ucy1waWNrZXIvY29sdW1ucy1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG1DQUFtQyxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDdEYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQU83QixNQUFNLE9BQU8sNkJBQTZCO0lBMEJ0QyxZQUE2QixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWxCakU7O1dBRUc7UUFDdUIsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBQy9DLDJCQUFzQixHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFRekUscUJBQWdCLEdBQTBELElBQUksQ0FBQztRQUUvRSxxQkFBZ0IsR0FBMEMsRUFBRSxDQUFDO1FBRTVELGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV3QixDQUFDO0lBekJyRSxJQUNXLFNBQVMsQ0FBQyxPQUFpQjs7UUFDbEMsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNqQyxHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQXNCTSxlQUFlO1FBQ2xCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFdBQVc7O1FBQ2YsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNqQyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDaEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLG1DQUFJLEVBQUUsQ0FBQztJQUNwRixDQUFDO0lBRU0sYUFBYTs7UUFDaEIsTUFBTSxlQUFlLEdBQUcsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTlGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QjtRQUNuRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsd0RBQXdEO0lBQzNGLENBQUM7OztZQTFESixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHdCQUF3QjtnQkFDbEMsc3NCQUE4QztnQkFDOUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDbEQ7OztZQWpCRyxpQkFBaUI7Ozt3QkFtQmhCLEtBQUs7OEJBVUwsTUFBTTtxQ0FDTixNQUFNOytCQUtOLEtBQUs7K0JBRUwsZUFBZSxTQUFDLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05hdHVyYWxDb2x1bW5zUGlja2VyQ29sdW1uRGlyZWN0aXZlfSBmcm9tICcuL2NvbHVtbnMtcGlja2VyLWNvbHVtbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHtjYW5jZWxsYWJsZVRpbWVvdXR9IGZyb20gJy4uLy4uL2NsYXNzZXMvcnhqcyc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25hdHVyYWwtY29sdW1ucy1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW5zLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxDb2x1bW5zUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgc2VsZWN0aW9uKGNvbHVtbnM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1ucz8uZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgY29sLmNoZWNrZWQgPSBjb2x1bW5zLmluY2x1ZGVzKGNvbC5rZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0IGEgbGlzdCBvZiBjb2x1bW4ga2V5cyB3aGVuZXZlciB0aGUgc2VsZWN0aW9uIGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBkZWZhdWx0U2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcblxuICAgIC8qKlxuICAgICAqIEZpbHRlciBhdmFpbGFibGUgY29sdW1uc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpbml0aWFsU2VsZWN0aW9uPzogc3RyaW5nW107XG5cbiAgICBAQ29udGVudENoaWxkcmVuKE5hdHVyYWxDb2x1bW5zUGlja2VyQ29sdW1uRGlyZWN0aXZlKVxuICAgIHB1YmxpYyBhdmFpbGFibGVDb2x1bW5zOiBRdWVyeUxpc3Q8TmF0dXJhbENvbHVtbnNQaWNrZXJDb2x1bW5EaXJlY3RpdmU+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgZGlzcGxheWVkQ29sdW1uczogTmF0dXJhbENvbHVtbnNQaWNrZXJDb2x1bW5EaXJlY3RpdmVbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY2FuY2VsbGFibGVUaW1lb3V0KHRoaXMubmdVbnN1YnNjcmliZSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdENvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1ucz8uZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgY29sLmNoZWNrZWQgPSB0aGlzLmluaXRpYWxTZWxlY3Rpb24gPyB0aGlzLmluaXRpYWxTZWxlY3Rpb24uaW5jbHVkZXMoY29sLmtleSkgOiBjb2wuY2hlY2tlZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5hdmFpbGFibGVDb2x1bW5zPy5maWx0ZXIoY29sID0+ICFjb2wuaGlkZGVuKSA/PyBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ29sdW1ucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5hdmFpbGFibGVDb2x1bW5zPy5maWx0ZXIoY29sID0+IGNvbC5jaGVja2VkKS5tYXAoY29sID0+IGNvbC5rZXkpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0ZWRDb2x1bW5zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7IC8vIHVuc3Vic2NyaWJlIGV2ZXJ5Ym9keVxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTsgLy8gY29tcGxldGUgdGhlIHN0cmVhbSwgYmVjYXVzZSB3ZSB3aWxsIG5ldmVyIGVtaXQgYWdhaW5cbiAgICB9XG59XG4iXX0=
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvY29sdW1ucy1waWNrZXIvY29sdW1ucy1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG1DQUFtQyxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDdEYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQU83QixNQUFNLE9BQU8sNkJBQTZCO0lBNEN0QyxZQUE2QixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWxCakU7O1dBRUc7UUFDdUIsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBRXpFOztXQUVHO1FBRUkscUJBQWdCLEdBQTBELElBQUksQ0FBQztRQUV0Rjs7V0FFRztRQUNJLHFCQUFnQixHQUEwQyxFQUFFLENBQUM7UUFFNUQsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXdCLENBQUM7SUF6Q3JFOzs7Ozs7O09BT0c7SUFDSCxJQUNXLFVBQVUsQ0FBQyxPQUE2Qjs7UUFDL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7UUFFM0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNwQyxPQUFPO1NBQ1Y7UUFFRCxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQXNCTSxlQUFlO1FBQ2xCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFdBQVc7O1FBQ2YsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTs7WUFDakMsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLFdBQVcsMENBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDOUYsQ0FBQyxDQUFDLENBQUM7UUFFSCxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQUEsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQ0FBSSxFQUFFLENBQUM7SUFDcEYsQ0FBQztJQUVNLGFBQWE7O1FBQ2hCLE1BQU0sZUFBZSxHQUFHLE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyx3QkFBd0I7UUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLHdEQUF3RDtJQUMzRixDQUFDOzs7WUE1RUosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSx3QkFBd0I7Z0JBQ2xDLHNzQkFBOEM7Z0JBQzlDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2xEOzs7WUFqQkcsaUJBQWlCOzs7eUJBNkJoQixLQUFLOzhCQWtCTCxNQUFNOytCQUtOLGVBQWUsU0FBQyxtQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXR1cmFsQ29sdW1uc1BpY2tlckNvbHVtbkRpcmVjdGl2ZX0gZnJvbSAnLi9jb2x1bW5zLXBpY2tlci1jb2x1bW4uZGlyZWN0aXZlJztcbmltcG9ydCB7Y2FuY2VsbGFibGVUaW1lb3V0fSBmcm9tICcuLi8uLi9jbGFzc2VzL3J4anMnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLWNvbHVtbnMtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29sdW1ucy1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsQ29sdW1uc1BpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9ucz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjb2x1bW5zIHRoYXQgYXJlIHdhbnRlZCBidXQgbWlnaHQgYmUgdW5hdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBJZiBhIGNvbHVtbiBpcyB1bmF2YWlsYWJsZSBpdCB3aWxsIGJlIGlnbm9yZWQgc2lsZW50bHkuIFRvIGtub3cgd2hhdCBjb2x1bW5zIHdlcmUgYWN0dWFsbHkgYXBwbGllZFxuICAgICAqIHlvdSBzaG91bGQgdXNlIGBzZWxlY3Rpb25DaGFuZ2VgLlxuICAgICAqXG4gICAgICogSXQgaXMgb2Z0ZW4gc2V0IG9uY2Ugb24gY29tcG9uZW50IGluaXRpYWxpemF0aW9uLCBidXQgaXQgY2FuIGFsc28gYmUgc2V0IGFnYWluIGxhdGVyIGluIHRoZSBsaWZlc3BhbiBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBzZWxlY3Rpb25zKGNvbHVtbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbnMgPSBjb2x1bW5zO1xuXG4gICAgICAgIGlmICghY29sdW1ucyB8fCAhdGhpcy5hdmFpbGFibGVDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmF2YWlsYWJsZUNvbHVtbnM/LmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGNvbC5jaGVja2VkID0gY29sdW1ucy5pbmNsdWRlcyhjb2wua2V5KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdCBhIGxpc3Qgb2YgdmFsaWQgYW5kIHNlbGVjdGVkIGNvbHVtbiBrZXlzIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcblxuICAgIC8qKlxuICAgICAqIEF2YWlsYWJsZSBjb2x1bW5zIGFyZSBkZWZpbmVkIGJ5IG9wdGlvbnMgaW4gdGhlIHRlbXBsYXRlXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihOYXR1cmFsQ29sdW1uc1BpY2tlckNvbHVtbkRpcmVjdGl2ZSlcbiAgICBwdWJsaWMgYXZhaWxhYmxlQ29sdW1uczogUXVlcnlMaXN0PE5hdHVyYWxDb2x1bW5zUGlja2VyQ29sdW1uRGlyZWN0aXZlPiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGlzcGxheWVkIG9wdGlvbnMgaW4gdGhlIGRyb3Bkb3duIG1lbnVcbiAgICAgKi9cbiAgICBwdWJsaWMgZGlzcGxheWVkQ29sdW1uczogTmF0dXJhbENvbHVtbnNQaWNrZXJDb2x1bW5EaXJlY3RpdmVbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY2FuY2VsbGFibGVUaW1lb3V0KHRoaXMubmdVbnN1YnNjcmliZSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdENvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENvbHVtbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1ucz8uZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgY29sLmNoZWNrZWQgPSB0aGlzLl9zZWxlY3Rpb25zPy5sZW5ndGggPyB0aGlzLl9zZWxlY3Rpb25zLmluY2x1ZGVzKGNvbC5rZXkpIDogY29sLmNoZWNrZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFNob3cgb3B0aW9ucyBvbmx5IGZvciBjb2x1bW5zIHRoYXQgYXJlIG5vdCBoaWRkZW5cbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5hdmFpbGFibGVDb2x1bW5zPy5maWx0ZXIoY29sID0+ICFjb2wuaGlkZGVuKSA/PyBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlQ29sdW1ucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5hdmFpbGFibGVDb2x1bW5zPy5maWx0ZXIoY29sID0+IGNvbC5jaGVja2VkKS5tYXAoY29sID0+IGNvbC5rZXkpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHNlbGVjdGVkQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpOyAvLyB1bnN1YnNjcmliZSBldmVyeWJvZHlcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7IC8vIGNvbXBsZXRlIHRoZSBzdHJlYW0sIGJlY2F1c2Ugd2Ugd2lsbCBuZXZlciBlbWl0IGFnYWluXG4gICAgfVxufVxuIl19
@@ -17,7 +17,7 @@ export class NaturalHierarchicSelectorDialogComponent {
17
17
  }
18
18
  NaturalHierarchicSelectorDialogComponent.decorators = [
19
19
  { type: Component, args: [{
20
- template: "<h2 i18n mat-dialog-title>S\u00E9lection</h2>\n\n<mat-dialog-content>\n <natural-hierarchic-selector\n (selectionChange)=\"config.hierarchicSelection = $event\"\n [selected]=\"config.hierarchicSelection ?? {}\"\n [config]=\"config.hierarchicConfig\"\n [filters]=\"config.hierarchicFilters\"\n [multiple]=\"config.multiple ?? false\"\n [allowUnselect]=\"config.allowUnselect ?? true\"\n [searchFacets]=\"config.searchFacets ?? []\"\n [searchSelections]=\"config.searchSelections ?? []\"\n (searchSelectionChange)=\"searchSelectionsOutput = $event\"\n ></natural-hierarchic-selector>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button [mat-dialog-close] i18n mat-button>Annuler</button>\n <button (click)=\"close(config.hierarchicSelection)\" color=\"primary\" mat-raised-button\n ><span i18n>Valider</span>\n </button>\n</mat-dialog-actions>\n",
20
+ template: "<h2 i18n mat-dialog-title>S\u00E9lection</h2>\n\n<mat-dialog-content>\n <natural-hierarchic-selector\n (selectionChange)=\"config.hierarchicSelection = $event\"\n [selected]=\"config.hierarchicSelection ?? {}\"\n [config]=\"config.hierarchicConfig\"\n [filters]=\"config.hierarchicFilters\"\n [multiple]=\"config.multiple ?? false\"\n [allowUnselect]=\"config.allowUnselect ?? true\"\n [searchFacets]=\"config.searchFacets ?? []\"\n [searchSelections]=\"config.searchSelections ?? []\"\n (searchSelectionChange)=\"searchSelectionsOutput = $event\"\n ></natural-hierarchic-selector>\n</mat-dialog-content>\n\n<mat-dialog-actions>\n <button [mat-dialog-close] mat-button i18n>Annuler</button>\n <button (click)=\"close(config.hierarchicSelection)\" color=\"primary\" mat-raised-button\n ><span i18n>Valider</span>\n </button>\n</mat-dialog-actions>\n",
21
21
  styles: [":host mat-dialog-actions{display:flex;flex-direction:row;justify-content:flex-end}\n"]
22
22
  },] }
23
23
  ];