@datorama/core 22.14.1 → 22.15.2

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.
Files changed (55) hide show
  1. package/bundle.scss +9987 -6561
  2. package/bundles/datorama-core.umd.js +242 -95
  3. package/bundles/datorama-core.umd.js.map +1 -1
  4. package/bundles/datorama-core.umd.min.js +60 -60
  5. package/bundles/datorama-core.umd.min.js.map +1 -1
  6. package/datorama-core.metadata.json +1 -1
  7. package/esm2015/lib/button/button.component.js +1 -1
  8. package/esm2015/lib/grid/dato-grid.js +4 -3
  9. package/esm2015/lib/grid/grid/grid.component.js +5 -9
  10. package/esm2015/lib/grid/grid-sort.utils.js +28 -0
  11. package/esm2015/lib/grid-v2/grid/grid-v2.component.js +10 -3
  12. package/esm2015/lib/grid-v2/grid/grid-v2.config.js +45 -14
  13. package/esm2015/lib/grid-v2/grid-column-header/grid-column-header.component.js +4 -1
  14. package/esm2015/lib/grid-v2/grid-column-header/grid-multi-select-header/grid-multi-select-header.component.js +4 -1
  15. package/esm2015/lib/grid-v2/grid-controller/grid-controller.component.js +60 -26
  16. package/esm2015/lib/grid-v2/grid-header/grid-header.component.js +3 -2
  17. package/esm2015/lib/grid-v2/grid-on-hover/grid-on-hover.component.js +17 -14
  18. package/esm2015/lib/grid-v2/grid-store/grid.query.js +11 -6
  19. package/esm2015/lib/grid-v2/grid-store/grid.service.js +19 -5
  20. package/esm2015/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +23 -17
  21. package/esm2015/lib/radio/radio.component.js +1 -1
  22. package/esm2015/lib/utils/string.js +9 -11
  23. package/esm2015/lib/version.js +2 -2
  24. package/esm5/lib/button/button.component.js +1 -1
  25. package/esm5/lib/grid/dato-grid.js +4 -3
  26. package/esm5/lib/grid/grid/grid.component.js +5 -9
  27. package/esm5/lib/grid/grid-sort.utils.js +35 -0
  28. package/esm5/lib/grid-v2/grid/grid-v2.component.js +14 -3
  29. package/esm5/lib/grid-v2/grid/grid-v2.config.js +47 -15
  30. package/esm5/lib/grid-v2/grid-column-header/grid-column-header.component.js +4 -1
  31. package/esm5/lib/grid-v2/grid-column-header/grid-multi-select-header/grid-multi-select-header.component.js +4 -1
  32. package/esm5/lib/grid-v2/grid-controller/grid-controller.component.js +64 -26
  33. package/esm5/lib/grid-v2/grid-header/grid-header.component.js +3 -2
  34. package/esm5/lib/grid-v2/grid-on-hover/grid-on-hover.component.js +17 -14
  35. package/esm5/lib/grid-v2/grid-store/grid.query.js +11 -6
  36. package/esm5/lib/grid-v2/grid-store/grid.service.js +19 -5
  37. package/esm5/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +23 -17
  38. package/esm5/lib/radio/radio.component.js +1 -1
  39. package/esm5/lib/utils/string.js +9 -11
  40. package/esm5/lib/version.js +2 -2
  41. package/fesm2015/datorama-core.js +226 -96
  42. package/fesm2015/datorama-core.js.map +1 -1
  43. package/fesm5/datorama-core.js +243 -97
  44. package/fesm5/datorama-core.js.map +1 -1
  45. package/lib/grid/grid-sort.utils.d.ts +15 -0
  46. package/lib/grid-v2/grid/grid-v2.component.d.ts +4 -0
  47. package/lib/grid-v2/grid/grid-v2.config.d.ts +1 -0
  48. package/lib/grid-v2/grid-column-header/grid-column-header.component.d.ts +2 -1
  49. package/lib/grid-v2/grid-column-header/grid-multi-select-header/grid-multi-select-header.component.d.ts +1 -0
  50. package/lib/grid-v2/grid-controller/grid-controller.component.d.ts +15 -0
  51. package/lib/grid-v2/grid-on-hover/grid-on-hover.component.d.ts +1 -3
  52. package/lib/grid-v2/grid-store/grid.service.d.ts +325 -281
  53. package/lib/grid-v2/grid-toolbar/grid-toolbar.component.d.ts +1 -0
  54. package/package.json +4 -1
  55. package/testing/src/grid/rows.ts +1 -1
@@ -10,14 +10,12 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef } fro
10
10
  import { setStyles } from '../../internal/helpers';
11
11
  import { isFunction, isNil, isNumber, isString } from '../../utils/validators';
12
12
  import { GridService } from '../grid-store/grid.service';
13
- import { GridQuery } from '../grid-store/grid.query';
14
13
  import { getVisibleActions } from '../grid-v2.util';
15
14
  import { pallete } from '../../themes/themes';
16
15
  let DatoGridOnHoverComponent = class DatoGridOnHoverComponent {
17
- constructor(host, gridService, gridQuery, cdr) {
16
+ constructor(host, gridService, cdr) {
18
17
  this.host = host;
19
18
  this.gridService = gridService;
20
- this.gridQuery = gridQuery;
21
19
  this.cdr = cdr;
22
20
  this.displayedActions = [];
23
21
  this.setBgColorBound = this.setBackgroundColor.bind(this);
@@ -48,13 +46,22 @@ let DatoGridOnHoverComponent = class DatoGridOnHoverComponent {
48
46
  });
49
47
  }
50
48
  openActionMenu(event) {
51
- /* Hack to open the ag grid context menu */
52
- /* https://github.com/ag-grid/ag-grid-enterprise/issues/72 */
53
- const { rowIndex, node, column, value } = this.params;
54
- const cell = this.gridQuery.api.grid.rowRenderer.rowCompsByIndex[rowIndex].getRenderedCellForColumn(column);
55
49
  /* The actions menu is different from the regular menu, we use the grid's context to signal that this is the actions menu*/
56
50
  this.gridService.updateGridContext({ contextMenu: { fromOnHover: true } });
57
- cell.beans.contextMenuFactory.showMenu(node, column, value, event);
51
+ const target = this.params.event && this.params.event.target;
52
+ if (!(target instanceof Element)) {
53
+ return;
54
+ }
55
+ const cell = target.closest('.ag-cell');
56
+ if (!cell) {
57
+ return;
58
+ }
59
+ cell.dispatchEvent(new MouseEvent('contextmenu', {
60
+ bubbles: true,
61
+ cancelable: true,
62
+ clientX: event.clientX,
63
+ clientY: event.clientY
64
+ }));
58
65
  }
59
66
  updateScrollPos(left) {
60
67
  const cellBorder = 1;
@@ -105,7 +112,6 @@ let DatoGridOnHoverComponent = class DatoGridOnHoverComponent {
105
112
  DatoGridOnHoverComponent.ctorParameters = () => [
106
113
  { type: ElementRef },
107
114
  { type: GridService },
108
- { type: GridQuery },
109
115
  { type: ChangeDetectorRef }
110
116
  ];
111
117
  DatoGridOnHoverComponent = __decorate([
@@ -115,10 +121,7 @@ DatoGridOnHoverComponent = __decorate([
115
121
  changeDetection: ChangeDetectionStrategy.OnPush,
116
122
  styles: [":host{display:flex;justify-content:flex-end;align-content:center;align-items:center;position:absolute;max-width:150px;transition:opacity .3s ease-in-out;opacity:0}:host .gradient{min-width:20px}"]
117
123
  }),
118
- __metadata("design:paramtypes", [ElementRef,
119
- GridService,
120
- GridQuery,
121
- ChangeDetectorRef])
124
+ __metadata("design:paramtypes", [ElementRef, GridService, ChangeDetectorRef])
122
125
  ], DatoGridOnHoverComponent);
123
126
  export { DatoGridOnHoverComponent };
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1vbi1ob3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZGF0b3JhbWEvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9ncmlkLXYyL2dyaWQtb24taG92ZXIvZ3JpZC1vbi1ob3Zlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFROUMsSUFBYSx3QkFBd0IsR0FBckMsTUFBYSx3QkFBd0I7SUFRbkMsWUFDVSxJQUFnQixFQUNoQixXQUF3QixFQUN4QixTQUFvQixFQUNwQixHQUFzQjtRQUh0QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFYaEMscUJBQWdCLEdBQWdCLEVBQUUsQ0FBQztRQUNuQyxvQkFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFXbEQsQ0FBQztJQUVKLElBQVksTUFBTTtRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMs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QUFJLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQzdEO1FBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxrQ0FBa0M7UUFDbEMsTUFBTSxlQUFlLEdBQUcsNkJBQTZCLEtBQUssVUFBVSxLQUFLLFNBQVMsS0FBSyxRQUFRLENBQUM7UUFDaEcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckIsZUFBZTtTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YsQ0FBQTs7WUFsR2lCLFVBQVU7WUFDSCxXQUFXO1lBQ2IsU0FBUztZQUNmLGlCQUFpQjs7QUFackIsd0JBQXdCO0lBTnBDLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxvQkFBb0I7UUFDOUIsaWlCQUE2QztRQUU3QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7S0FDaEQsQ0FBQztxQ0FVZ0IsVUFBVTtRQUNILFdBQVc7UUFDYixTQUFTO1FBQ2YsaUJBQWlCO0dBWnJCLHdCQUF3QixDQTJHcEM7U0EzR1ksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IERhdG9yYW1hLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIEFwYWNoZSBMaWNlbnNlIDIuMCBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRvcmFtYS9jbGllbnQtY29yZS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENlbGxNb3VzZU92ZXJFdmVudCwgUm93Tm9kZSB9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcbmltcG9ydCB7IHNldFN0eWxlcyB9IGZyb20gJy4uLy4uL2ludGVybmFsL2hlbHBlcnMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNOaWwsIGlzTnVtYmVyLCBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgUm93QWN0aW9uIH0gZnJvbSAnLi4vZ3JpZC10b29sYmFyL2dyaWQtdG9vbGJhci50eXBlcyc7XG5pbXBvcnQgeyBEYXRvR3JpZE9uSG92ZXJDb25maWcgfSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuaW1wb3J0IHsgQ29yZUV2ZW50VHlwZXMgfSBmcm9tICcuLi8uLi9ldmVudC1sb2dnZXInO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgZ2V0VmlzaWJsZUFjdGlvbnMgfSBmcm9tICcuLi9ncmlkLXYyLnV0aWwnO1xuaW1wb3J0IHsgcGFsbGV0ZSB9IGZyb20gJy4uLy4uL3RoZW1lcy90aGVtZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLWdyaWQtb24taG92ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1vbi1ob3Zlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQtb24taG92ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0b0dyaWRPbkhvdmVyQ29tcG9uZW50IHtcbiAgZGlzcGxheWVkQWN0aW9uczogUm93QWN0aW9uW10gPSBbXTtcbiAgc2V0QmdDb2xvckJvdW5kID0gdGhpcy5zZXRCYWNrZ3JvdW5kQ29sb3IuYmluZCh0aGlzKTtcbiAgY29uZmlnOiBEYXRvR3JpZE9uSG92ZXJDb25maWcgJiB7IGFjdGlvbnM6IFJvd0FjdGlvbltdIH07XG4gIHNob3dNb3JlOiBib29sZWFuO1xuICBwcml2YXRlIHJvdzogUm93Tm9kZTtcbiAgcHJpdmF0ZSBwYXJhbXM6IENlbGxNb3VzZU92ZXJFdmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGhvc3Q6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmlkUXVlcnk6IEdyaWRRdWVyeSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIHByaXZhdGUgZ2V0IGhvc3RFbCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBzaG93KHBhcmFtczogQ2VsbE1vdXNlT3ZlckV2ZW50KSB7XG4gICAgdGhpcy5yZW1vdmVTZWxlY3RlZExpc3RlbmVyKCk7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgdGhpcy5yb3cgPSBwYXJhbXMubm9kZTtcbiAgICB0aGlzLnJvdy5hZGRFdmVudExpc3RlbmVyKCdyb3dTZWxlY3RlZCcsIHRoaXMuc2V0QmdDb2xvckJvdW5kKTtcbiAgICB0aGlzLnNldFJvd0FjdGlvbnMoKTtcbiAgICB0aGlzLnNldEJhY2tncm91bmRDb2xvcih7IG5vZGU6IHRoaXMucm93IH0pO1xuICAgIHNldFN0eWxlcyh0aGlzLmhvc3RFbCwge1xuICAgICAgdG9wOiBgJHt0aGlzLnJvdy5yb3dUb3B9cHhgLFxuICAgICAgaGVpZ2h0OiBgJHt0aGlzLnJvdy5yb3dIZWlnaHR9cHhgLFxuICAgICAgb3BhY2l0eTogMSxcbiAgICAgIHpJbmRleDogMSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdhbGwnXG4gICAgfSk7XG4gIH1cblxuICBoaWRlKCkge1xuICAgIHNldFN0eWxlcyh0aGlzLmhvc3RFbCwge1xuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgIHpJbmRleDogLTFcbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5BY3Rpb25NZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgLyogSGFjayB0byBvcGVuIHRoZSBhZyBncmlkIGNvbnRleHQgbWVudSAqL1xuICAgIC8qIGh0dHBzOi8vZ2l0aHViLmNvbS9hZy1ncmlkL2FnLWdyaWQtZW50ZXJwcmlzZS9pc3N1ZXMvNzIgKi9cbiAgICBjb25zdCB7IHJvd0luZGV4LCBub2RlLCBjb2x1bW4sIHZhbHVlIH0gPSB0aGlzLnBhcmFtcztcbiAgICBjb25zdCBjZWxsID0gKHRoaXMuZ3JpZFF1ZXJ5LmFwaS5ncmlkIGFzIGFueSkucm93UmVuZGVyZXIucm93Q29tcHNCeUluZGV4W3Jvd0luZGV4XS5nZXRSZW5kZXJlZENlbGxGb3JDb2x1bW4oXG4gICAgICBjb2x1bW5cbiAgICApO1xuICAgIC8qIFRoZSBhY3Rpb25zIG1lbnUgaXMgZGlmZmVyZW50IGZyb20gdGhlIHJlZ3VsYXIgbWVudSwgd2UgdXNlIHRoZSBncmlkJ3MgY29udGV4dCB0byBzaWduYWwgdGhhdCB0aGlzIGlzIHRoZSBhY3Rpb25zIG1lbnUqL1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UudXBkYXRlR3JpZENvbnRleHQoeyBjb250ZXh0TWVudTogeyBmcm9tT25Ib3ZlcjogdHJ1ZSB9IH0pO1xuICAgIGNlbGwuYmVhbnMuY29udGV4dE1lbnVGYWN0b3J5LnNob3dNZW51KG5vZGUsIGNvbHVtbiwgdmFsdWUsIGV2ZW50KTtcbiAgfVxuXG4gIHVwZGF0ZVNjcm9sbFBvcyhsZWZ0OiBudW1iZXIpIHtcbiAgICBjb25zdCBjZWxsQm9yZGVyID0gMTtcbiAgICBzZXRTdHlsZXModGhpcy5ob3N0RWwsIHsgbGVmdDogYCR7bGVmdCAtIHRoaXMuaG9zdEVsLnNjcm9sbFdpZHRoIC0gY2VsbEJvcmRlcn1weGAgfSk7XG4gIH1cblxuICBjYWxsQWN0aW9uKGFjdGlvbjogUm93QWN0aW9uKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oYWN0aW9uLm9uQ2xpY2spKSB7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLl9sb2dFdmVudChDb3JlRXZlbnRUeXBlcy5HUklEX1RBQkxFX0FDVElPTiwge1xuICAgICAgICBhY3Rpb246IGFjdGlvbi5rZXksXG4gICAgICAgIG51bU9mSXRlbXM6IDEsXG4gICAgICAgIGZyb206ICdPbiBIb3ZlcidcbiAgICAgIH0pO1xuICAgICAgYWN0aW9uLm9uQ2xpY2soW3RoaXMucm93XSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVTZWxlY3RlZExpc3RlbmVyKCk7XG4gIH1cblxuICBzZXRSb3dBY3Rpb25zKCkge1xuICAgIGNvbnN0IHsgYWN0aW9ucywgbWF4RGlzcGxheWVkSXRlbXMgfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHZhbGlkQWN0aW9ucyA9IGdldFZpc2libGVBY3Rpb25zKGFjdGlvbnMsIDEsIFt0aGlzLnJvd10sIGZhbHNlKS5maWx0ZXIoXG4gICAgICAoeyB0ZW1wbGF0ZSwgaWNvbiwgdmlzaWJsZSB9KSA9PiBpc05pbCh0ZW1wbGF0ZSkgJiYgaXNTdHJpbmcoaWNvbikgJiYgdmlzaWJsZVxuICAgICk7XG4gICAgdGhpcy5kaXNwbGF5ZWRBY3Rpb25zID0gdmFsaWRBY3Rpb25zXG4gICAgICAuZmlsdGVyKGFjdGlvbiA9PiBpc051bWJlcihhY3Rpb24ub25Ib3ZlckluZGV4KSlcbiAgICAgIC5zbGljZSgwLCBtYXhEaXNwbGF5ZWRJdGVtcylcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm9uSG92ZXJJbmRleCAtIGIub25Ib3ZlckluZGV4KTtcbiAgICBpZiAodGhpcy5kaXNwbGF5ZWRBY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRBY3Rpb25zID0gdmFsaWRBY3Rpb25zLnNsaWNlKDAsIG1heERpc3BsYXllZEl0ZW1zKTtcbiAgICB9XG4gICAgdGhpcy5zaG93TW9yZSA9IHRoaXMuZGlzcGxheWVkQWN0aW9ucy5sZW5ndGggPCB2YWxpZEFjdGlvbnMubGVuZ3RoO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlU2VsZWN0ZWRMaXN0ZW5lcigpIHtcbiAgICB0aGlzLnJvdyAmJiB0aGlzLnJvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyb3dTZWxlY3RlZCcsIHRoaXMuc2V0QmdDb2xvckJvdW5kKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QmFja2dyb3VuZENvbG9yKHsgbm9kZSB9OiB7IG5vZGU6IFJvd05vZGUgfSkge1xuICAgIGxldCBodWUgPSAnYWNjZW50LTEwMCc7XG4gICAgaWYgKG5vZGUuaXNTZWxlY3RlZCgpKSB7XG4gICAgICBodWUgPSBub2RlLnJvd0luZGV4ICUgMiA9PT0gMCA/ICdhY2NlbnQtMTgwJyA6ICdhY2NlbnQtMjAwJztcbiAgICB9XG4gICAgY29uc3QgY29sb3IgPSBwYWxsZXRlLmxpZ2h0W2h1ZV07XG4gICAgLy8gQjMgaXMgNzAlIG9wYWNpdHkgaW4gaGV4IGNvbG9yc1xuICAgIGNvbnN0IGJhY2tncm91bmRJbWFnZSA9IGBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICR7Y29sb3J9QjMgMCUsICR7Y29sb3J9IDE3JSwgJHtjb2xvcn0gMTAwJSlgO1xuICAgIHNldFN0eWxlcyh0aGlzLmhvc3RFbCwge1xuICAgICAgYmFja2dyb3VuZEltYWdlXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1vbi1ob3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZGF0b3JhbWEvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9ncmlkLXYyL2dyaWQtb24taG92ZXIvZ3JpZC1vbi1ob3Zlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVE5QyxJQUFhLHdCQUF3QixHQUFyQyxNQUFhLHdCQUF3QjtJQVFuQyxZQUFvQixJQUFnQixFQUFVLFdBQXdCLEVBQVUsR0FBc0I7UUFBbEYsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFQdEcscUJBQWdCLEdBQWdCLEVBQUUsQ0FBQztRQUNuQyxvQkFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFNb0QsQ0FBQztJQUUxRyxJQUFZLE1BQU07UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQTBCO1FBQzdCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElB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WUFDckIsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDN0Q7UUFDRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLGtDQUFrQztRQUNsQyxNQUFNLGVBQWUsR0FBRyw2QkFBNkIsS0FBSyxVQUFVLEtBQUssU0FBUyxLQUFLLFFBQVEsQ0FBQztRQUNoRyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNyQixlQUFlO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFBOztZQXZHMkIsVUFBVTtZQUF1QixXQUFXO1lBQWUsaUJBQWlCOztBQVIzRix3QkFBd0I7SUFOcEMsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLG9CQUFvQjtRQUM5QixpaUJBQTZDO1FBRTdDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOztLQUNoRCxDQUFDO3FDQVMwQixVQUFVLEVBQXVCLFdBQVcsRUFBZSxpQkFBaUI7R0FSM0Ysd0JBQXdCLENBK0dwQztTQS9HWSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgRGF0b3JhbWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gQXBhY2hlIExpY2Vuc2UgMi4wIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2RhdG9yYW1hL2NsaWVudC1jb3JlL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2VsbE1vdXNlT3ZlckV2ZW50LCBSb3dOb2RlIH0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0IHsgc2V0U3R5bGVzIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvaGVscGVycyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNOdW1iZXIsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBSb3dBY3Rpb24gfSBmcm9tICcuLi9ncmlkLXRvb2xiYXIvZ3JpZC10b29sYmFyLnR5cGVzJztcbmltcG9ydCB7IERhdG9HcmlkT25Ib3ZlckNvbmZpZyB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi50eXBlcyc7XG5pbXBvcnQgeyBDb3JlRXZlbnRUeXBlcyB9IGZyb20gJy4uLy4uL2V2ZW50LWxvZ2dlcic7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFZpc2libGVBY3Rpb25zIH0gZnJvbSAnLi4vZ3JpZC12Mi51dGlsJztcbmltcG9ydCB7IHBhbGxldGUgfSBmcm9tICcuLi8uLi90aGVtZXMvdGhlbWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0by1ncmlkLW9uLWhvdmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtb24taG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLW9uLWhvdmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIERhdG9HcmlkT25Ib3ZlckNvbXBvbmVudCB7XG4gIGRpc3BsYXllZEFjdGlvbnM6IFJvd0FjdGlvbltdID0gW107XG4gIHNldEJnQ29sb3JCb3VuZCA9IHRoaXMuc2V0QmFja2dyb3VuZENvbG9yLmJpbmQodGhpcyk7XG4gIGNvbmZpZzogRGF0b0dyaWRPbkhvdmVyQ29uZmlnICYgeyBhY3Rpb25zOiBSb3dBY3Rpb25bXSB9O1xuICBzaG93TW9yZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByb3c6IFJvd05vZGU7XG4gIHByaXZhdGUgcGFyYW1zOiBDZWxsTW91c2VPdmVyRXZlbnQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmLCBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIHByaXZhdGUgZ2V0IGhvc3RFbCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBzaG93KHBhcmFtczogQ2VsbE1vdXNlT3ZlckV2ZW50KSB7XG4gICAgdGhpcy5yZW1vdmVTZWxlY3RlZExpc3RlbmVyKCk7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgdGhpcy5yb3cgPSBwYXJhbXMubm9kZTtcbiAgICB0aGlzLnJvdy5hZGRFdmVudExpc3RlbmVyKCdyb3dTZWxlY3RlZCcsIHRoaXMuc2V0QmdDb2xvckJvdW5kKTtcbiAgICB0aGlzLnNldFJvd0FjdGlvbnMoKTtcbiAgICB0aGlzLnNldEJhY2tncm91bmRDb2xvcih7IG5vZGU6IHRoaXMucm93IH0pO1xuICAgIHNldFN0eWxlcyh0aGlzLmhvc3RFbCwge1xuICAgICAgdG9wOiBgJHt0aGlzLnJvdy5yb3dUb3B9cHhgLFxuICAgICAgaGVpZ2h0OiBgJHt0aGlzLnJvdy5yb3dIZWlnaHR9cHhgLFxuICAgICAgb3BhY2l0eTogMSxcbiAgICAgIHpJbmRleDogMSxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdhbGwnXG4gICAgfSk7XG4gIH1cblxuICBoaWRlKCkge1xuICAgIHNldFN0eWxlcyh0aGlzLmhvc3RFbCwge1xuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgIHpJbmRleDogLTFcbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5BY3Rpb25NZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgLyogVGhlIGFjdGlvbnMgbWVudSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcmVndWxhciBtZW51LCB3ZSB1c2UgdGhlIGdyaWQncyBjb250ZXh0IHRvIHNpZ25hbCB0aGF0IHRoaXMgaXMgdGhlIGFjdGlvbnMgbWVudSovXG4gICAgdGhpcy5ncmlkU2VydmljZS51cGRhdGVHcmlkQ29udGV4dCh7IGNvbnRleHRNZW51OiB7IGZyb21PbkhvdmVyOiB0cnVlIH0gfSk7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5wYXJhbXMuZXZlbnQgJiYgdGhpcy5wYXJhbXMuZXZlbnQudGFyZ2V0O1xuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNlbGwgPSB0YXJnZXQuY2xvc2VzdCgnLmFnLWNlbGwnKTtcbiAgICBpZiAoIWNlbGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2VsbC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IE1vdXNlRXZlbnQoJ2NvbnRleHRtZW51Jywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICBjbGllbnRYOiBldmVudC5jbGllbnRYLFxuICAgICAgICBjbGllbnRZOiBldmVudC5jbGllbnRZXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVTY3JvbGxQb3MobGVmdDogbnVtYmVyKSB7XG4gICAgY29uc3QgY2VsbEJvcmRlciA9IDE7XG4gICAgc2V0U3R5bGVzKHRoaXMuaG9zdEVsLCB7IGxlZnQ6IGAke2xlZnQgLSB0aGlzLmhvc3RFbC5zY3JvbGxXaWR0aCAtIGNlbGxCb3JkZXJ9cHhgIH0pO1xuICB9XG5cbiAgY2FsbEFjdGlvbihhY3Rpb246IFJvd0FjdGlvbikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGFjdGlvbi5vbkNsaWNrKSkge1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5fbG9nRXZlbnQoQ29yZUV2ZW50VHlwZXMuR1JJRF9UQUJMRV9BQ1RJT04sIHtcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24ua2V5LFxuICAgICAgICBudW1PZkl0ZW1zOiAxLFxuICAgICAgICBmcm9tOiAnT24gSG92ZXInXG4gICAgICB9KTtcbiAgICAgIGFjdGlvbi5vbkNsaWNrKFt0aGlzLnJvd10pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRMaXN0ZW5lcigpO1xuICB9XG5cbiAgc2V0Um93QWN0aW9ucygpIHtcbiAgICBjb25zdCB7IGFjdGlvbnMsIG1heERpc3BsYXllZEl0ZW1zIH0gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCB2YWxpZEFjdGlvbnMgPSBnZXRWaXNpYmxlQWN0aW9ucyhhY3Rpb25zLCAxLCBbdGhpcy5yb3ddLCBmYWxzZSkuZmlsdGVyKFxuICAgICAgKHsgdGVtcGxhdGUsIGljb24sIHZpc2libGUgfSkgPT4gaXNOaWwodGVtcGxhdGUpICYmIGlzU3RyaW5nKGljb24pICYmIHZpc2libGVcbiAgICApO1xuICAgIHRoaXMuZGlzcGxheWVkQWN0aW9ucyA9IHZhbGlkQWN0aW9uc1xuICAgICAgLmZpbHRlcihhY3Rpb24gPT4gaXNOdW1iZXIoYWN0aW9uLm9uSG92ZXJJbmRleCkpXG4gICAgICAuc2xpY2UoMCwgbWF4RGlzcGxheWVkSXRlbXMpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5vbkhvdmVySW5kZXggLSBiLm9uSG92ZXJJbmRleCk7XG4gICAgaWYgKHRoaXMuZGlzcGxheWVkQWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQWN0aW9ucyA9IHZhbGlkQWN0aW9ucy5zbGljZSgwLCBtYXhEaXNwbGF5ZWRJdGVtcyk7XG4gICAgfVxuICAgIHRoaXMuc2hvd01vcmUgPSB0aGlzLmRpc3BsYXllZEFjdGlvbnMubGVuZ3RoIDwgdmFsaWRBY3Rpb25zLmxlbmd0aDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVNlbGVjdGVkTGlzdGVuZXIoKSB7XG4gICAgdGhpcy5yb3cgJiYgdGhpcy5yb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncm93U2VsZWN0ZWQnLCB0aGlzLnNldEJnQ29sb3JCb3VuZCk7XG4gIH1cblxuICBwcml2YXRlIHNldEJhY2tncm91bmRDb2xvcih7IG5vZGUgfTogeyBub2RlOiBSb3dOb2RlIH0pIHtcbiAgICBsZXQgaHVlID0gJ2FjY2VudC0xMDAnO1xuICAgIGlmIChub2RlLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgaHVlID0gbm9kZS5yb3dJbmRleCAlIDIgPT09IDAgPyAnYWNjZW50LTE4MCcgOiAnYWNjZW50LTIwMCc7XG4gICAgfVxuICAgIGNvbnN0IGNvbG9yID0gcGFsbGV0ZS5saWdodFtodWVdO1xuICAgIC8vIEIzIGlzIDcwJSBvcGFjaXR5IGluIGhleCBjb2xvcnNcbiAgICBjb25zdCBiYWNrZ3JvdW5kSW1hZ2UgPSBgbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAke2NvbG9yfUIzIDAlLCAke2NvbG9yfSAxNyUsICR7Y29sb3J9IDEwMCUpYDtcbiAgICBzZXRTdHlsZXModGhpcy5ob3N0RWwsIHtcbiAgICAgIGJhY2tncm91bmRJbWFnZVxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -7,6 +7,7 @@ import { BehaviorSubject, fromEvent, merge, Subject } from 'rxjs';
7
7
  import { filter, map, switchMap } from 'rxjs/operators';
8
8
  import { getColField, getColumnsSizes } from './util';
9
9
  import { size } from '../../utils/collection';
10
+ import { getSortModel as getColumnSortModel } from '../../grid/grid-sort.utils';
10
11
  let GridQuery = class GridQuery extends Query {
11
12
  constructor(store) {
12
13
  super(store);
@@ -55,9 +56,13 @@ let GridQuery = class GridQuery extends Query {
55
56
  getCurrentGridSettings() {
56
57
  const toColId = column => column.getColId();
57
58
  const { columns } = this.api;
58
- const groupedColumns = columns.getRowGroupColumns();
59
- const columnsOrder = columns.getAllColumns();
60
- const allGridColumns = columns.getAllGridColumns();
59
+ // AG Grid 27: getAllColumns() returns Column[] | null (and the grouped/grid column getters can
60
+ // likewise be empty) before the grid's columns are initialized. getCurrentGridSettings() is
61
+ // reached via fitGrid -> updateSettings on window resize, which can fire before that point, so
62
+ // guard against null to avoid "Cannot read properties of undefined (reading 'filter')".
63
+ const groupedColumns = columns.getRowGroupColumns() || [];
64
+ const columnsOrder = columns.getAllColumns() || [];
65
+ const allGridColumns = columns.getAllGridColumns() || [];
61
66
  const hiddenColumns = columnsOrder
62
67
  .filter(column => !column.isVisible() && !groupedColumns.includes(column))
63
68
  .map(toColId);
@@ -68,7 +73,7 @@ let GridQuery = class GridQuery extends Query {
68
73
  hiddenColumns,
69
74
  groupedColumns: groupedColumns.map(toColId),
70
75
  filter: this.getFilter(),
71
- pinnedColumns: columns.getDisplayedLeftColumns().map(toColId),
76
+ pinnedColumns: (columns.getDisplayedLeftColumns() || []).map(toColId),
72
77
  columnsOrder: allGridColumns.map(toColId),
73
78
  columnsSizes: null,
74
79
  searchTerm: null
@@ -79,7 +84,7 @@ let GridQuery = class GridQuery extends Query {
79
84
  return settings;
80
85
  }
81
86
  getSortModel() {
82
- return this.api.grid.getSortModel().pop();
87
+ return getColumnSortModel(this.api.columns).pop();
83
88
  }
84
89
  getSavedSort() {
85
90
  return this.getValue().settings.sort || this.getSortModel();
@@ -216,4 +221,4 @@ GridQuery = __decorate([
216
221
  __metadata("design:paramtypes", [GridStore])
217
222
  ], GridQuery);
218
223
  export { GridQuery };
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxPQUFPLEVBQVUsTUFBTSxFQUFXLE1BQU0seUJBQXlCLENBQUM7QUFHbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHOUMsSUFBYSxTQUFTLEdBQXRCLE1BQWEsU0FBVSxTQUFRLEtBQXFCO0lBK0NsRCxZQUFzQixLQUFnQjtRQUNwQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFETyxVQUFLLEdBQUwsS0FBSyxDQUFXO1FBNUN0QyxXQUFXO1FBQ1gsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLGVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLFdBQVc7UUFDWCxzQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBNEIsQ0FBQztRQUM1RCxzQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUQsZ0NBQTJCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNsRCxnQ0FBMkIsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDOUUsb0JBQWUsR0FBb0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FDdkQsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUNwSCxDQUFDO1FBQ0Ysd0JBQW1CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FDMUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUN2RyxDQUFDO1FBRUYsdUJBQWtCLEdBQXNDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQzVFLE9BQU8sS0FBSyxDQUNWLElBQUksQ0FBQyxtQkFBbUIsRUFDeEIsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEVBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUN4RixDQUFDLElBQUksQ0FDSixHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNQLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZO29CQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVM7b0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUV0RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDakcsTUFBTSxxQkFBcUIsR0FDekIsQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLElBQUkscUJBQXFCLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUM5RSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztnQkFFOUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO1lBQzdGLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILGtCQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ3ZELEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBb0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQ3BGLENBQUM7UUFDRixxQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBSTdFLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLDRCQUE0QjtRQUM5QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUNoRCxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7SUFDL0MsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUM3QixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNwRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDbkQsTUFBTSxhQUFhLEdBQUcsWUFBWTthQUMvQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDekUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQXFCO1lBQ2pDLGFBQWEsRUFBRSxhQUFhLENBQUMsYUFBYTtZQUMxQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25GLGFBQWE7WUFDYixjQUFjLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDM0MsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDeEIsYUFBYSxFQUFFLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDN0QsWUFBWSxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ3pDLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUM7UUFFRixJQUFJLGFBQWEsQ0FBQyxhQUFhLG1CQUE2QixFQUFFO1lBQzVELFFBQVEsQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3pEO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBa0IsQ0FBQztJQUM1RCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCxPQUFPLENBQUMsWUFBMEIsSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNuRCxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLFNBQVMsQ0FBQztZQUM3QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUV4RCxJQUFJLE1BQU0sRUFBRTtnQkFDVixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBRTlDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQy9CO2lCQUFNO2dCQUNMLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFdkQsSUFBSSxlQUFlLEVBQUU7b0JBQ25CLE1BQU0sV0FBVyxHQUFHLFNBQVMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNyRSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7b0JBRXZELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUM7aUJBQ3ZEO2FBQ0Y7U0FDRjtRQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZUFBZTtJQUNmLE9BQU8sQ0FBQyxHQUFnQixFQUFFLE9BQXNCO1FBQzlDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQU1ELGVBQWUsQ0FBSSxZQUFzQjtRQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QyxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkMsQ0FBQztJQU1ELG1CQUFtQixDQUFDLFlBQXNCO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUMsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUN6QyxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVyQyxJQUFJLFdBQVcsRUFBRTtZQUNmLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3hELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFbEMsSUFBSSxNQUFNLEVBQUU7b0JBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2lCQUNqQztnQkFFRCxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDUjtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQzdDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFxQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFJRCxXQUFXLENBQVUsTUFBNEI7UUFDL0MsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzVFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBK0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdFLENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUNyQyxNQUFNLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ25FLE9BQU8sU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLFFBQVEsR0FBYyxFQUFFLENBQUM7UUFDL0IsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFhLEVBQUUsRUFBRTtZQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQztRQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQzNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzlDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9DLE1BQU0sY0FBYyxHQUFHLFdBQVcsR0FBRyxRQUFRLENBQUM7UUFDOUMsSUFBSSxhQUFhLEdBQUcsY0FBYyxHQUFHLFFBQVEsQ0FBQztRQUM5QyxJQUFJLGFBQWEsR0FBRyxTQUFTLEVBQUU7WUFDN0IsYUFBYSxHQUFHLFNBQVMsQ0FBQztTQUMzQjtRQUNELE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLGNBQWMsRUFBRTtnQkFDcEUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25CO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hHLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQWE7UUFDOUIsNENBQTRDO1FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUVoRSxJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDO1NBQy9EO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sNkJBQTZCLENBQUMsT0FBaUI7UUFDckQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUNuQixDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLGlCQUFpQixDQUN6RyxDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUE7O1lBbE84QixTQUFTOztBQS9DM0IsU0FBUztJQURyQixVQUFVLEVBQUU7cUNBZ0RrQixTQUFTO0dBL0MzQixTQUFTLENBaVJyQjtTQWpSWSxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0VtcHR5LCBRdWVyeSB9IGZyb20gJ0BkYXRvcmFtYS9ha2l0YSc7XG5pbXBvcnQgeyBHcmlkU3RvcmUgfSBmcm9tICcuL2dyaWQuc3RvcmUnO1xuaW1wb3J0IHsgRGF0b0dyaWRTZXR0aW5ncywgR3JpZFN0b3JlU3RhdGUsIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZmlnIH0gZnJvbSAnLi9ncmlkLnN0b3JlLnR5cGVzJztcbmltcG9ydCB7IENvbHVtbiwgRXZlbnRzLCBSb3dOb2RlIH0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0IHsgRGF0b0dyaWRBcGkgfSBmcm9tICcuLi9ncmlkLWNvbnRyb2xsZXIvZ3JpZC1jb250cm9sbGVyLnR5cGVzJztcbmltcG9ydCB7IEFnR3JpZEFuZ3VsYXIgfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvYW5ndWxhcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBEYXRvR3JpZEFsaWdubWVudCxcbiAgRGF0b0dyaWREYXRhQ2hhbmdlZEV2ZW50LFxuICBEYXRvR3JpZE9wdGlvbnMsXG4gIERhdG9HcmlkU29ydCxcbiAgR3JpZFJvd3NTZWxlY3Rpb25EYXRhXG59IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi50eXBlcyc7XG5pbXBvcnQgeyBEYXRvR3JpZEV4dGVybmFsRmlsdGVyLCBEYXRvR3JpZEZpbHRlcnNNYXAgfSBmcm9tICcuLi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci50eXBlcyc7XG5pbXBvcnQgeyBnZXRDb2xGaWVsZCwgZ2V0Q29sdW1uc1NpemVzIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IEhhc2hNYXAgfSBmcm9tICcuLi8uLi91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBzaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29sbGVjdGlvbic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHcmlkUXVlcnkgZXh0ZW5kcyBRdWVyeTxHcmlkU3RvcmVTdGF0ZT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBhcGk6IERhdG9HcmlkQXBpO1xuICBncmlkUmVmOiBBZ0dyaWRBbmd1bGFyO1xuICAvL0BpbnRlcm5hbFxuICBfZ3JpZFJlYWR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIGdyaWRSZWFkeSQgPSB0aGlzLl9ncmlkUmVhZHkuYXNPYnNlcnZhYmxlKCkucGlwZShmaWx0ZXIocmVhZHkgPT4gcmVhZHkpKTtcbiAgLy9AaW50ZXJuYWxcbiAgX3NlcnZlckRhdGFMb2FkZWQgPSBuZXcgU3ViamVjdDxEYXRvR3JpZERhdGFDaGFuZ2VkRXZlbnQ+KCk7XG4gIHNlcnZlckRhdGFMb2FkZWQkID0gdGhpcy5fc2VydmVyRGF0YUxvYWRlZC5hc09ic2VydmFibGUoKTtcbiAgX3Jvd0FjdGlvblZpc2liaWxpdHlDaGFuZ2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcm93QWN0aW9uVmlzaWJpbGl0eUNoYW5nZWQkID0gdGhpcy5fcm93QWN0aW9uVmlzaWJpbGl0eUNoYW5nZWQuYXNPYnNlcnZhYmxlKCk7XG4gIHJvd0RhdGFDaGFuZ2VkJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy53YWl0Rm9yR3JpZCgoKSA9PlxuICAgIG1lcmdlKHRoaXMuZ3JpZFJlZi5yb3dEYXRhQ2hhbmdlZCwgdGhpcy5ncmlkUmVmLnJvd0RhdGFVcGRhdGVkLCB0aGlzLmdyaWRSZWYuZmlsdGVyQ2hhbmdlZCwgdGhpcy5zZXJ2ZXJEYXRhTG9hZGVkJClcbiAgKTtcbiAgc2VsZWN0ZWRSb3dzQ2hhbmdlJCA9IHRoaXMud2FpdEZvckdyaWQoKCkgPT5cbiAgICBmcm9tRXZlbnQodGhpcy5hcGkuZ3JpZCwgRXZlbnRzLkVWRU5UX1NFTEVDVElPTl9DSEFOR0VEKS5waXBlKG1hcCgoeyBhcGkgfSkgPT4gYXBpLmdldFNlbGVjdGVkUm93cygpKSlcbiAgKTtcblxuICByb3dzU2VsZWN0aW9uRGF0YSQ6IE9ic2VydmFibGU8R3JpZFJvd3NTZWxlY3Rpb25EYXRhPiA9IHRoaXMud2FpdEZvckdyaWQoKCkgPT4ge1xuICAgIHJldHVybiBtZXJnZShcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlJCxcbiAgICAgIHRoaXMucm93RGF0YUNoYW5nZWQkLFxuICAgICAgdGhpcy5zZWxlY3RTZXJ2ZXJQYWdpbmF0aW9uQ29uZmlnKCksXG4gICAgICB0aGlzLndhaXRGb3JHcmlkKCgpID0+IG1lcmdlKHRoaXMuZ3JpZFJlZi5zb3J0Q2hhbmdlZCwgdGhpcy5ncmlkUmVmLnBhZ2luYXRpb25DaGFuZ2VkKSlcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbFJvd3NDb3VudCA9IHRoaXMuaXNTZXJ2ZXJTaWRlXG4gICAgICAgICAgPyB0aGlzLnNlcnZlclNpZGVDb25maWcudG90YWxSb3dzXG4gICAgICAgICAgOiB0aGlzLmFwaS5ncmlkLmdldERpc3BsYXllZFJvd0NvdW50KCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93c0NvdW50ID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NDb3VudCgpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlUm93cyA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VSb3dzKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUGFnZVJvd3NDb3VudCA9IHNpemUoY3VycmVudFBhZ2VSb3dzLmZpbHRlcigobm9kZTogUm93Tm9kZSkgPT4gbm9kZS5pc1NlbGVjdGVkKCkpKTtcbiAgICAgICAgY29uc3QgaXNBbGxQYWdlUm93c1NlbGVjdGVkID1cbiAgICAgICAgICAoc2VsZWN0ZWRQYWdlUm93c0NvdW50ID4gMCAmJiBzZWxlY3RlZFBhZ2VSb3dzQ291bnQgPT09IHNpemUoY3VycmVudFBhZ2VSb3dzKSkgfHxcbiAgICAgICAgICAodGhpcy5pc1NlcnZlclNlbGVjdEFsbFJvd3NFbmFibGVkICYmIGlzRW1wdHkodGhpcy5zZXJ2ZXJTaWRlQ29uZmlnLmV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCkpO1xuXG4gICAgICAgIHJldHVybiB7IHRvdGFsUm93c0NvdW50LCBzZWxlY3RlZFJvd3NDb3VudCwgc2VsZWN0ZWRQYWdlUm93c0NvdW50LCBpc0FsbFBhZ2VSb3dzU2VsZWN0ZWQgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgZmlsdGVyQWN0aXZlJCA9IHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzKS5waXBlKFxuICAgIG1hcCgoeyBmaWx0ZXIsIHNlYXJjaFRlcm0gfTogRGF0b0dyaWRTZXR0aW5ncykgPT4gc2l6ZShmaWx0ZXIpID4gMCB8fCAhIXNlYXJjaFRlcm0pXG4gICk7XG4gIHNlcnZlclNpZGVFcnJvciQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbi5oYXNFcnJvcik7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHN0b3JlOiBHcmlkU3RvcmUpIHtcbiAgICBzdXBlcihzdG9yZSk7XG4gIH1cblxuICBnZXQgc2VydmVyU2lkZUNvbmZpZygpOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbjtcbiAgfVxuXG4gIGdldCBpc1NlcnZlclNpZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VydmVyU2lkZUNvbmZpZy5lbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VydmVyU2lkZUNvbmZpZy5zZWxlY3RBbGxSb3dzRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBncmlkQWxpZ25tZW50KCk6IERhdG9HcmlkQWxpZ25tZW50IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzLmdyaWRBbGlnbm1lbnQ7XG4gIH1cblxuICBnZXRDb2x1bW5TaXplcygpOiBIYXNoTWFwPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCkuc2V0dGluZ3MuY29sdW1uc1NpemVzO1xuICB9XG5cbiAgZ2V0Q3VycmVudEdyaWRTZXR0aW5ncygpOiBEYXRvR3JpZFNldHRpbmdzIHtcbiAgICBjb25zdCB0b0NvbElkID0gY29sdW1uID0+IGNvbHVtbi5nZXRDb2xJZCgpO1xuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5hcGk7XG4gICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSBjb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuICAgIGNvbnN0IGNvbHVtbnNPcmRlciA9IGNvbHVtbnMuZ2V0QWxsQ29sdW1ucygpO1xuICAgIGNvbnN0IGFsbEdyaWRDb2x1bW5zID0gY29sdW1ucy5nZXRBbGxHcmlkQ29sdW1ucygpO1xuICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSBjb2x1bW5zT3JkZXJcbiAgICAgIC5maWx0ZXIoY29sdW1uID0+ICFjb2x1bW4uaXNWaXNpYmxlKCkgJiYgIWdyb3VwZWRDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikpXG4gICAgICAubWFwKHRvQ29sSWQpO1xuICAgIGNvbnN0IHN0b3JlU2V0dGluZ3MgPSB0aGlzLmdldFZhbHVlKCkuc2V0dGluZ3M7XG4gICAgY29uc3Qgc2V0dGluZ3M6IERhdG9HcmlkU2V0dGluZ3MgPSB7XG4gICAgICBncmlkQWxpZ25tZW50OiBzdG9yZVNldHRpbmdzLmdyaWRBbGlnbm1lbnQsXG4gICAgICBzb3J0OiB0aGlzLmdldEdyaWRPcHRpb25zKCkuc29ydEJ5U3RvcmUgPyB0aGlzLmdldFNhdmVkU29ydCgpIDogdGhpcy5nZXRTb3J0TW9kZWwoKSxcbiAgICAgIGhpZGRlbkNvbHVtbnMsXG4gICAgICBncm91cGVkQ29sdW1uczogZ3JvdXBlZENvbHVtbnMubWFwKHRvQ29sSWQpLFxuICAgICAgZmlsdGVyOiB0aGlzLmdldEZpbHRlcigpLFxuICAgICAgcGlubmVkQ29sdW1uczogY29sdW1ucy5nZXREaXNwbGF5ZWRMZWZ0Q29sdW1ucygpLm1hcCh0b0NvbElkKSxcbiAgICAgIGNvbHVtbnNPcmRlcjogYWxsR3JpZENvbHVtbnMubWFwKHRvQ29sSWQpLFxuICAgICAgY29sdW1uc1NpemVzOiBudWxsLFxuICAgICAgc2VhcmNoVGVybTogbnVsbFxuICAgIH07XG5cbiAgICBpZiAoc3RvcmVTZXR0aW5ncy5ncmlkQWxpZ25tZW50ID09PSBEYXRvR3JpZEFsaWdubWVudC5DVVNUT00pIHtcbiAgICAgIHNldHRpbmdzLmNvbHVtbnNTaXplcyA9IGdldENvbHVtbnNTaXplcyhhbGxHcmlkQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldHRpbmdzO1xuICB9XG5cbiAgZ2V0U29ydE1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLmFwaS5ncmlkLmdldFNvcnRNb2RlbCgpLnBvcCgpIGFzIERhdG9HcmlkU29ydDtcbiAgfVxuXG4gIGdldFNhdmVkU29ydCgpOiBEYXRvR3JpZFNvcnQge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCkuc2V0dGluZ3Muc29ydCB8fCB0aGlzLmdldFNvcnRNb2RlbCgpO1xuICB9XG5cbiAgZ2V0U29ydChzYXZlZFNvcnQ6IERhdG9HcmlkU29ydCA9IHRoaXMuZ2V0U2F2ZWRTb3J0KCkpOiBEYXRvR3JpZFNvcnQge1xuICAgIGlmIChzYXZlZFNvcnQpIHtcbiAgICAgIGNvbnN0IHsgY29sSWQsIHNvcnQsIHNvcnRJbmRleCB9ID0gc2F2ZWRTb3J0O1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5hcGkuY29sdW1ucy5nZXRDb2x1bW4oY29sSWQpO1xuICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuYXBpLmNvbHVtbnMuZ2V0QWxsR3JpZENvbHVtbnMoKTtcblxuICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGdldENvbEZpZWxkKGNvbHVtbi5nZXRDb2xEZWYoKSk7XG5cbiAgICAgICAgcmV0dXJuIHsgY29sSWQsIHNvcnQsIGZpZWxkIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzZWNvbmRhcnlDb2x1bW4gPSB0aGlzLmdldFNlY29uZGFyeUNvbHVtbihjb2xJZCk7XG5cbiAgICAgICAgaWYgKHNlY29uZGFyeUNvbHVtbikge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gc29ydEluZGV4IHx8IGFsbENvbHVtbnMuaW5kZXhPZihzZWNvbmRhcnlDb2x1bW4pO1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Q29sRmllbGQoc2Vjb25kYXJ5Q29sdW1uLmdldENvbERlZigpKTtcblxuICAgICAgICAgIHJldHVybiB7IGNvbElkLCBzb3J0LCBmaWVsZCwgc29ydEluZGV4OiBjb2x1bW5JbmRleCB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29sSWQ6IG51bGwsIHNvcnQ6IG51bGwgfTtcbiAgfVxuXG4gIC8qIEBpbnRlcm5hbCAqL1xuICBfc2V0QXBpKGFwaTogRGF0b0dyaWRBcGksIGdyaWRSZWY6IEFnR3JpZEFuZ3VsYXIpIHtcbiAgICB0aGlzLmFwaSA9IGFwaTtcbiAgICB0aGlzLmdyaWRSZWYgPSBncmlkUmVmO1xuICB9XG5cbiAgLyoqIFJldHVybnMganVzdCB0aGUgcm93cyBkYXRhICovXG4gIGdldFNlbGVjdGVkUm93czxUPigpOiBUW107XG4gIGdldFNlbGVjdGVkUm93czxUPihvbmx5Rmlyc3RSb3c6IHRydWUpOiBUIHwgdW5kZWZpbmVkO1xuICBnZXRTZWxlY3RlZFJvd3M8VD4ob25seUZpcnN0Um93OiBmYWxzZSk6IFRbXTtcbiAgZ2V0U2VsZWN0ZWRSb3dzPFQ+KG9ubHlGaXJzdFJvdz86IGJvb2xlYW4pOiBUW10gfCBUIHtcbiAgICBjb25zdCByb3dzID0gdGhpcy5hcGkuZ3JpZC5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICByZXR1cm4gb25seUZpcnN0Um93ID8gcm93c1swXSA6IHJvd3M7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgZW50aXJlIHJvdyBub2RlICovXG4gIGdldFNlbGVjdGVkUm93Tm9kZXMoKTogUm93Tm9kZVtdO1xuICBnZXRTZWxlY3RlZFJvd05vZGVzKG9ubHlGaXJzdFJvdzogdHJ1ZSk6IFJvd05vZGUgfCB1bmRlZmluZWQ7XG4gIGdldFNlbGVjdGVkUm93Tm9kZXMob25seUZpcnN0Um93OiBmYWxzZSk6IFJvd05vZGVbXTtcbiAgZ2V0U2VsZWN0ZWRSb3dOb2Rlcyhvbmx5Rmlyc3RSb3c/OiBib29sZWFuKTogUm93Tm9kZVtdIHwgUm93Tm9kZSB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuYXBpLmdyaWQuZ2V0U2VsZWN0ZWROb2RlcygpO1xuICAgIHJldHVybiBvbmx5Rmlyc3RSb3cgPyByb3dzWzBdIDogcm93cztcbiAgfVxuXG4gIGdldEZpbHRlcigpOiBEYXRvR3JpZEZpbHRlcnNNYXAge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCkuc2V0dGluZ3MuZmlsdGVyO1xuICB9XG5cbiAgc2VsZWN0RmlsdGVyKCk6IE9ic2VydmFibGU8RGF0b0dyaWRGaWx0ZXJzTWFwPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzLmZpbHRlcik7XG4gIH1cblxuICBnZXRFeHRlcm5hbEZpbHRlcigpOiBEYXRvR3JpZEV4dGVybmFsRmlsdGVyW10ge1xuICAgIGNvbnN0IGdyaWRGaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXIoKTtcblxuICAgIGlmIChncmlkRmlsdGVycykge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGdyaWRGaWx0ZXJzKS5yZWR1Y2UoKGZpbHRlcnMsIGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGdyaWRGaWx0ZXJzW2ZpZWxkXTtcblxuICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgZmlsdGVycy5wdXNoKHsgZmllbGQsIGZpbHRlciB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgICAgfSwgW10pO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldFNlYXJjaFRlcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzLnNlYXJjaFRlcm07XG4gIH1cblxuICBzZWxlY3RTZWFyY2hUZXJtKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KChzdGF0ZTogR3JpZFN0b3JlU3RhdGUpID0+IHN0YXRlLnNldHRpbmdzLnNlYXJjaFRlcm0pO1xuICB9XG5cbiAgd2FpdEZvckdyaWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgd2FpdEZvckdyaWQ8VCA9IGFueT4oc291cmNlOiAoKSA9PiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPjtcbiAgd2FpdEZvckdyaWQ8VCA9IGFueT4oc291cmNlPzogKCkgPT4gT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gc291cmNlID8gdGhpcy5ncmlkUmVhZHkkLnBpcGUoc3dpdGNoTWFwKHNvdXJjZSkpIDogdGhpcy5ncmlkUmVhZHkkO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZ3JpZFJlYWR5LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fc2VydmVyRGF0YUxvYWRlZC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgZ2V0R3JpZE9wdGlvbnMoKTogRGF0b0dyaWRPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkUmVmID8gKHRoaXMuZ3JpZFJlZi5ncmlkT3B0aW9ucyBhcyBEYXRvR3JpZE9wdGlvbnMpIDogbnVsbDtcbiAgfVxuXG4gIHNlbGVjdFNlcnZlclBhZ2luYXRpb25Db25maWcoKTogT2JzZXJ2YWJsZTxTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmZpZz4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdCgoc3RhdGU6IEdyaWRTdG9yZVN0YXRlKSA9PiBzdGF0ZS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbik7XG4gIH1cblxuICBnZXRTZWxlY3RlZFJvd3NDb3VudCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IHsgdG90YWxSb3dzLCBleGNsdWRlZEZyb21TZWxlY3RBbGwgfSA9IHRoaXMuc2VydmVyU2lkZUNvbmZpZztcbiAgICAgIHJldHVybiB0b3RhbFJvd3MgLSBzaXplKGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCk7XG4gICAgfVxuICAgIHJldHVybiBzaXplKHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCkpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFBhZ2VSb3dzKCk6IFJvd05vZGVbXSB7XG4gICAgY29uc3QgcGFnZVJvd3M6IFJvd05vZGVbXSA9IFtdO1xuICAgIGNvbnN0IHB1c2hQYWdlUm93ID0gKG5vZGU6IFJvd05vZGUpID0+IHtcbiAgICAgIHBhZ2VSb3dzLnB1c2gobm9kZSk7XG4gICAgfTtcbiAgICBjb25zdCBncmlkID0gdGhpcy5hcGkuZ3JpZDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IGdyaWQucGFnaW5hdGlvbkdldFBhZ2VTaXplKCk7XG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSBncmlkLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpO1xuICAgIGNvbnN0IHRvdGFsUm93cyA9IGdyaWQucGFnaW5hdGlvbkdldFJvd0NvdW50KCk7XG4gICAgY29uc3QgZmlyc3RQYWdlSW5kZXggPSBjdXJyZW50UGFnZSAqIHBhZ2VTaXplO1xuICAgIGxldCBsYXN0UGFnZUluZGV4ID0gZmlyc3RQYWdlSW5kZXggKyBwYWdlU2l6ZTtcbiAgICBpZiAobGFzdFBhZ2VJbmRleCA+IHRvdGFsUm93cykge1xuICAgICAgbGFzdFBhZ2VJbmRleCA9IHRvdGFsUm93cztcbiAgICB9XG4gICAgY29uc3QgcGVyZm9ybUFjdGlvbiA9IChub2RlOiBSb3dOb2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5yb3dJbmRleCA8IGxhc3RQYWdlSW5kZXggJiYgbm9kZS5yb3dJbmRleCA+PSBmaXJzdFBhZ2VJbmRleCkge1xuICAgICAgICBwdXNoUGFnZVJvdyhub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuaXNTZXJ2ZXJTaWRlID8gZ3JpZC5mb3JFYWNoTm9kZShwZXJmb3JtQWN0aW9uKSA6IGdyaWQuZm9yRWFjaE5vZGVBZnRlckZpbHRlckFuZFNvcnQocGVyZm9ybUFjdGlvbik7XG4gICAgcmV0dXJuIHBhZ2VSb3dzO1xuICB9XG5cbiAgZ2V0QWxsQ29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQ2hlY2tib3hTZWxlY3Rpb25Db2x1bW4odGhpcy5hcGkuY29sdW1ucy5nZXRBbGxDb2x1bW5zKCkpO1xuICB9XG5cbiAgZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyQ2hlY2tib3hTZWxlY3Rpb25Db2x1bW4odGhpcy5hcGkuY29sdW1ucy5nZXRBbGxEaXNwbGF5ZWRDb2x1bW5zKCkpO1xuICB9XG5cbiAgZ2V0QWxsUGl2b3RDb2x1bW5zKCk6IENvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxDb2x1bW5zKCkuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uaXNQaXZvdEFjdGl2ZSgpKTtcbiAgfVxuXG4gIHNlbGVjdElzU2VsZWN0QWxsUm93c0VuYWJsZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNlcnZlclNpZGVQYWdpbmF0aW9uLnNlbGVjdEFsbFJvd3NFbmFibGVkKTtcbiAgfVxuXG4gIGdldFNlY29uZGFyeUNvbHVtbihjb2xJZDogc3RyaW5nKTogQ29sdW1uIHtcbiAgICAvKiogVXNlIGdldFBpdm90UmVzdWx0Q29sdW1ucyBmcm9tIHZlciAyOCAqL1xuICAgIGNvbnN0IHNlY29uZGFyeUNvbHVtbnMgPSB0aGlzLmFwaS5jb2x1bW5zLmdldFNlY29uZGFyeUNvbHVtbnMoKTtcblxuICAgIGlmIChzZWNvbmRhcnlDb2x1bW5zKSB7XG4gICAgICByZXR1cm4gc2Vjb25kYXJ5Q29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZ2V0Q29sSWQoKSA9PT0gY29sSWQpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJDaGVja2JveFNlbGVjdGlvbkNvbHVtbihjb2x1bW5zOiBDb2x1bW5bXSk6IENvbHVtbltdIHtcbiAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoXG4gICAgICAoY29sdW1uOiBDb2x1bW4pID0+ICFjb2x1bW4uZ2V0VXNlclByb3ZpZGVkQ29sRGVmKCkgfHwgIWNvbHVtbi5nZXRVc2VyUHJvdmlkZWRDb2xEZWYoKS5jaGVja2JveFNlbGVjdGlvblxuICAgICk7XG4gIH1cbn1cbiJdfQ==
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV6QyxPQUFPLEVBQVUsTUFBTSxFQUFXLE1BQU0seUJBQXlCLENBQUM7QUFHbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksSUFBSSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR2hGLElBQWEsU0FBUyxHQUF0QixNQUFhLFNBQVUsU0FBUSxLQUFxQjtJQStDbEQsWUFBc0IsS0FBZ0I7UUFDcEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRE8sVUFBSyxHQUFMLEtBQUssQ0FBVztRQTVDdEMsV0FBVztRQUNYLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxlQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RSxX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QGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0VtcHR5LCBRdWVyeSB9IGZyb20gJ0BkYXRvcmFtYS9ha2l0YSc7XG5pbXBvcnQgeyBHcmlkU3RvcmUgfSBmcm9tICcuL2dyaWQuc3RvcmUnO1xuaW1wb3J0IHsgRGF0b0dyaWRTZXR0aW5ncywgR3JpZFN0b3JlU3RhdGUsIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZmlnIH0gZnJvbSAnLi9ncmlkLnN0b3JlLnR5cGVzJztcbmltcG9ydCB7IENvbHVtbiwgRXZlbnRzLCBSb3dOb2RlIH0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0IHsgRGF0b0dyaWRBcGkgfSBmcm9tICcuLi9ncmlkLWNvbnRyb2xsZXIvZ3JpZC1jb250cm9sbGVyLnR5cGVzJztcbmltcG9ydCB7IEFnR3JpZEFuZ3VsYXIgfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvYW5ndWxhcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBEYXRvR3JpZEFsaWdubWVudCxcbiAgRGF0b0dyaWREYXRhQ2hhbmdlZEV2ZW50LFxuICBEYXRvR3JpZE9wdGlvbnMsXG4gIERhdG9HcmlkU29ydCxcbiAgR3JpZFJvd3NTZWxlY3Rpb25EYXRhXG59IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi50eXBlcyc7XG5pbXBvcnQgeyBEYXRvR3JpZEV4dGVybmFsRmlsdGVyLCBEYXRvR3JpZEZpbHRlcnNNYXAgfSBmcm9tICcuLi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci50eXBlcyc7XG5pbXBvcnQgeyBnZXRDb2xGaWVsZCwgZ2V0Q29sdW1uc1NpemVzIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IEhhc2hNYXAgfSBmcm9tICcuLi8uLi91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBzaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29sbGVjdGlvbic7XG5pbXBvcnQgeyBnZXRTb3J0TW9kZWwgYXMgZ2V0Q29sdW1uU29ydE1vZGVsIH0gZnJvbSAnLi4vLi4vZ3JpZC9ncmlkLXNvcnQudXRpbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR3JpZFF1ZXJ5IGV4dGVuZHMgUXVlcnk8R3JpZFN0b3JlU3RhdGU+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgYXBpOiBEYXRvR3JpZEFwaTtcbiAgZ3JpZFJlZjogQWdHcmlkQW5ndWxhcjtcbiAgLy9AaW50ZXJuYWxcbiAgX2dyaWRSZWFkeSA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBncmlkUmVhZHkkID0gdGhpcy5fZ3JpZFJlYWR5LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZmlsdGVyKHJlYWR5ID0+IHJlYWR5KSk7XG4gIC8vQGludGVybmFsXG4gIF9zZXJ2ZXJEYXRhTG9hZGVkID0gbmV3IFN1YmplY3Q8RGF0b0dyaWREYXRhQ2hhbmdlZEV2ZW50PigpO1xuICBzZXJ2ZXJEYXRhTG9hZGVkJCA9IHRoaXMuX3NlcnZlckRhdGFMb2FkZWQuYXNPYnNlcnZhYmxlKCk7XG4gIF9yb3dBY3Rpb25WaXNpYmlsaXR5Q2hhbmdlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJvd0FjdGlvblZpc2liaWxpdHlDaGFuZ2VkJCA9IHRoaXMuX3Jvd0FjdGlvblZpc2liaWxpdHlDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpO1xuICByb3dEYXRhQ2hhbmdlZCQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMud2FpdEZvckdyaWQoKCkgPT5cbiAgICBtZXJnZSh0aGlzLmdyaWRSZWYucm93RGF0YUNoYW5nZWQsIHRoaXMuZ3JpZFJlZi5yb3dEYXRhVXBkYXRlZCwgdGhpcy5ncmlkUmVmLmZpbHRlckNoYW5nZWQsIHRoaXMuc2VydmVyRGF0YUxvYWRlZCQpXG4gICk7XG4gIHNlbGVjdGVkUm93c0NoYW5nZSQgPSB0aGlzLndhaXRGb3JHcmlkKCgpID0+XG4gICAgZnJvbUV2ZW50KHRoaXMuYXBpLmdyaWQsIEV2ZW50cy5FVkVOVF9TRUxFQ1RJT05fQ0hBTkdFRCkucGlwZShtYXAoKHsgYXBpIH0pID0+IGFwaS5nZXRTZWxlY3RlZFJvd3MoKSkpXG4gICk7XG5cbiAgcm93c1NlbGVjdGlvbkRhdGEkOiBPYnNlcnZhYmxlPEdyaWRSb3dzU2VsZWN0aW9uRGF0YT4gPSB0aGlzLndhaXRGb3JHcmlkKCgpID0+IHtcbiAgICByZXR1cm4gbWVyZ2UoXG4gICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZSQsXG4gICAgICB0aGlzLnJvd0RhdGFDaGFuZ2VkJCxcbiAgICAgIHRoaXMuc2VsZWN0U2VydmVyUGFnaW5hdGlvbkNvbmZpZygpLFxuICAgICAgdGhpcy53YWl0Rm9yR3JpZCgoKSA9PiBtZXJnZSh0aGlzLmdyaWRSZWYuc29ydENoYW5nZWQsIHRoaXMuZ3JpZFJlZi5wYWdpbmF0aW9uQ2hhbmdlZCkpXG4gICAgKS5waXBlKFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgY29uc3QgdG90YWxSb3dzQ291bnQgPSB0aGlzLmlzU2VydmVyU2lkZVxuICAgICAgICAgID8gdGhpcy5zZXJ2ZXJTaWRlQ29uZmlnLnRvdGFsUm93c1xuICAgICAgICAgIDogdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3NDb3VudCA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzQ291bnQoKTtcblxuICAgICAgICBjb25zdCBjdXJyZW50UGFnZVJvd3MgPSB0aGlzLmdldEN1cnJlbnRQYWdlUm93cygpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFBhZ2VSb3dzQ291bnQgPSBzaXplKGN1cnJlbnRQYWdlUm93cy5maWx0ZXIoKG5vZGU6IFJvd05vZGUpID0+IG5vZGUuaXNTZWxlY3RlZCgpKSk7XG4gICAgICAgIGNvbnN0IGlzQWxsUGFnZVJvd3NTZWxlY3RlZCA9XG4gICAgICAgICAgKHNlbGVjdGVkUGFnZVJvd3NDb3VudCA+IDAgJiYgc2VsZWN0ZWRQYWdlUm93c0NvdW50ID09PSBzaXplKGN1cnJlbnRQYWdlUm93cykpIHx8XG4gICAgICAgICAgKHRoaXMuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZCAmJiBpc0VtcHR5KHRoaXMuc2VydmVyU2lkZUNvbmZpZy5leGNsdWRlZEZyb21TZWxlY3RBbGwpKTtcblxuICAgICAgICByZXR1cm4geyB0b3RhbFJvd3NDb3VudCwgc2VsZWN0ZWRSb3dzQ291bnQsIHNlbGVjdGVkUGFnZVJvd3NDb3VudCwgaXNBbGxQYWdlUm93c1NlbGVjdGVkIH07XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIGZpbHRlckFjdGl2ZSQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiBzdGF0ZS5zZXR0aW5ncykucGlwZShcbiAgICBtYXAoKHsgZmlsdGVyLCBzZWFyY2hUZXJtIH06IERhdG9HcmlkU2V0dGluZ3MpID0+IHNpemUoZmlsdGVyKSA+IDAgfHwgISFzZWFyY2hUZXJtKVxuICApO1xuICBzZXJ2ZXJTaWRlRXJyb3IkID0gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2VydmVyU2lkZVBhZ2luYXRpb24uaGFzRXJyb3IpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzdG9yZTogR3JpZFN0b3JlKSB7XG4gICAgc3VwZXIoc3RvcmUpO1xuICB9XG5cbiAgZ2V0IHNlcnZlclNpZGVDb25maWcoKTogU2VydmVyU2lkZVBhZ2luYXRpb25Db25maWcge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCkuc2VydmVyU2lkZVBhZ2luYXRpb247XG4gIH1cblxuICBnZXQgaXNTZXJ2ZXJTaWRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlcnZlclNpZGVDb25maWcuZW5hYmxlZDtcbiAgfVxuXG4gIGdldCBpc1NlcnZlclNlbGVjdEFsbFJvd3NFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlcnZlclNpZGVDb25maWcuc2VsZWN0QWxsUm93c0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgZ3JpZEFsaWdubWVudCgpOiBEYXRvR3JpZEFsaWdubWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKS5zZXR0aW5ncy5ncmlkQWxpZ25tZW50O1xuICB9XG5cbiAgZ2V0Q29sdW1uU2l6ZXMoKTogSGFzaE1hcDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzLmNvbHVtbnNTaXplcztcbiAgfVxuXG4gIGdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTogRGF0b0dyaWRTZXR0aW5ncyB7XG4gICAgY29uc3QgdG9Db2xJZCA9IGNvbHVtbiA9PiBjb2x1bW4uZ2V0Q29sSWQoKTtcbiAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHRoaXMuYXBpO1xuICAgIC8vIEFHIEdyaWQgMjc6IGdldEFsbENvbHVtbnMoKSByZXR1cm5zIENvbHVtbltdIHwgbnVsbCAoYW5kIHRoZSBncm91cGVkL2dyaWQgY29sdW1uIGdldHRlcnMgY2FuXG4gICAgLy8gbGlrZXdpc2UgYmUgZW1wdHkpIGJlZm9yZSB0aGUgZ3JpZCdzIGNvbHVtbnMgYXJlIGluaXRpYWxpemVkLiBnZXRDdXJyZW50R3JpZFNldHRpbmdzKCkgaXNcbiAgICAvLyByZWFjaGVkIHZpYSBmaXRHcmlkIC0+IHVwZGF0ZVNldHRpbmdzIG9uIHdpbmRvdyByZXNpemUsIHdoaWNoIGNhbiBmaXJlIGJlZm9yZSB0aGF0IHBvaW50LCBzb1xuICAgIC8vIGd1YXJkIGFnYWluc3QgbnVsbCB0byBhdm9pZCBcIkNhbm5vdCByZWFkIHByb3BlcnRpZXMgb2YgdW5kZWZpbmVkIChyZWFkaW5nICdmaWx0ZXInKVwiLlxuICAgIGNvbnN0IGdyb3VwZWRDb2x1bW5zID0gY29sdW1ucy5nZXRSb3dHcm91cENvbHVtbnMoKSB8fCBbXTtcbiAgICBjb25zdCBjb2x1bW5zT3JkZXIgPSBjb2x1bW5zLmdldEFsbENvbHVtbnMoKSB8fCBbXTtcbiAgICBjb25zdCBhbGxHcmlkQ29sdW1ucyA9IGNvbHVtbnMuZ2V0QWxsR3JpZENvbHVtbnMoKSB8fCBbXTtcbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gY29sdW1uc09yZGVyXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLmlzVmlzaWJsZSgpICYmICFncm91cGVkQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pKVxuICAgICAgLm1hcCh0b0NvbElkKTtcbiAgICBjb25zdCBzdG9yZVNldHRpbmdzID0gdGhpcy5nZXRWYWx1ZSgpLnNldHRpbmdzO1xuICAgIGNvbnN0IHNldHRpbmdzOiBEYXRvR3JpZFNldHRpbmdzID0ge1xuICAgICAgZ3JpZEFsaWdubWVudDogc3RvcmVTZXR0aW5ncy5ncmlkQWxpZ25tZW50LFxuICAgICAgc29ydDogdGhpcy5nZXRHcmlkT3B0aW9ucygpLnNvcnRCeVN0b3JlID8gdGhpcy5nZXRTYXZlZFNvcnQoKSA6IHRoaXMuZ2V0U29ydE1vZGVsKCksXG4gICAgICBoaWRkZW5Db2x1bW5zLFxuICAgICAgZ3JvdXBlZENvbHVtbnM6IGdyb3VwZWRDb2x1bW5zLm1hcCh0b0NvbElkKSxcbiAgICAgIGZpbHRlcjogdGhpcy5nZXRGaWx0ZXIoKSxcbiAgICAgIHBpbm5lZENvbHVtbnM6IChjb2x1bW5zLmdldERpc3BsYXllZExlZnRDb2x1bW5zKCkgfHwgW10pLm1hcCh0b0NvbElkKSxcbiAgICAgIGNvbHVtbnNPcmRlcjogYWxsR3JpZENvbHVtbnMubWFwKHRvQ29sSWQpLFxuICAgICAgY29sdW1uc1NpemVzOiBudWxsLFxuICAgICAgc2VhcmNoVGVybTogbnVsbFxuICAgIH07XG5cbiAgICBpZiAoc3RvcmVTZXR0aW5ncy5ncmlkQWxpZ25tZW50ID09PSBEYXRvR3JpZEFsaWdubWVudC5DVVNUT00pIHtcbiAgICAgIHNldHRpbmdzLmNvbHVtbnNTaXplcyA9IGdldENvbHVtbnNTaXplcyhhbGxHcmlkQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldHRpbmdzO1xuICB9XG5cbiAgZ2V0U29ydE1vZGVsKCkge1xuICAgIHJldHVybiBnZXRDb2x1bW5Tb3J0TW9kZWwodGhpcy5hcGkuY29sdW1ucykucG9wKCkgYXMgRGF0b0dyaWRTb3J0O1xuICB9XG5cbiAgZ2V0U2F2ZWRTb3J0KCk6IERhdG9HcmlkU29ydCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKS5zZXR0aW5ncy5zb3J0IHx8IHRoaXMuZ2V0U29ydE1vZGVsKCk7XG4gIH1cblxuICBnZXRTb3J0KHNhdmVkU29ydDogRGF0b0dyaWRTb3J0ID0gdGhpcy5nZXRTYXZlZFNvcnQoKSk6IERhdG9HcmlkU29ydCB7XG4gICAgaWYgKHNhdmVkU29ydCkge1xuICAgICAgY29uc3QgeyBjb2xJZCwgc29ydCwgc29ydEluZGV4IH0gPSBzYXZlZFNvcnQ7XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmFwaS5jb2x1bW5zLmdldENvbHVtbihjb2xJZCk7XG4gICAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5hcGkuY29sdW1ucy5nZXRBbGxHcmlkQ29sdW1ucygpO1xuXG4gICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Q29sRmllbGQoY29sdW1uLmdldENvbERlZigpKTtcblxuICAgICAgICByZXR1cm4geyBjb2xJZCwgc29ydCwgZmllbGQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNlY29uZGFyeUNvbHVtbiA9IHRoaXMuZ2V0U2Vjb25kYXJ5Q29sdW1uKGNvbElkKTtcblxuICAgICAgICBpZiAoc2Vjb25kYXJ5Q29sdW1uKSB7XG4gICAgICAgICAgY29uc3QgY29sdW1uSW5kZXggPSBzb3J0SW5kZXggfHwgYWxsQ29sdW1ucy5pbmRleE9mKHNlY29uZGFyeUNvbHVtbik7XG4gICAgICAgICAgY29uc3QgZmllbGQgPSBnZXRDb2xGaWVsZChzZWNvbmRhcnlDb2x1bW4uZ2V0Q29sRGVmKCkpO1xuXG4gICAgICAgICAgcmV0dXJuIHsgY29sSWQsIHNvcnQsIGZpZWxkLCBzb3J0SW5kZXg6IGNvbHVtbkluZGV4IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2xJZDogbnVsbCwgc29ydDogbnVsbCB9O1xuICB9XG5cbiAgLyogQGludGVybmFsICovXG4gIF9zZXRBcGkoYXBpOiBEYXRvR3JpZEFwaSwgZ3JpZFJlZjogQWdHcmlkQW5ndWxhcikge1xuICAgIHRoaXMuYXBpID0gYXBpO1xuICAgIHRoaXMuZ3JpZFJlZiA9IGdyaWRSZWY7XG4gIH1cblxuICAvKiogUmV0dXJucyBqdXN0IHRoZSByb3dzIGRhdGEgKi9cbiAgZ2V0U2VsZWN0ZWRSb3dzPFQ+KCk6IFRbXTtcbiAgZ2V0U2VsZWN0ZWRSb3dzPFQ+KG9ubHlGaXJzdFJvdzogdHJ1ZSk6IFQgfCB1bmRlZmluZWQ7XG4gIGdldFNlbGVjdGVkUm93czxUPihvbmx5Rmlyc3RSb3c6IGZhbHNlKTogVFtdO1xuICBnZXRTZWxlY3RlZFJvd3M8VD4ob25seUZpcnN0Um93PzogYm9vbGVhbik6IFRbXSB8IFQge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLmFwaS5ncmlkLmdldFNlbGVjdGVkUm93cygpO1xuICAgIHJldHVybiBvbmx5Rmlyc3RSb3cgPyByb3dzWzBdIDogcm93cztcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBlbnRpcmUgcm93IG5vZGUgKi9cbiAgZ2V0U2VsZWN0ZWRSb3dOb2RlcygpOiBSb3dOb2RlW107XG4gIGdldFNlbGVjdGVkUm93Tm9kZXMob25seUZpcnN0Um93OiB0cnVlKTogUm93Tm9kZSB8IHVuZGVmaW5lZDtcbiAgZ2V0U2VsZWN0ZWRSb3dOb2Rlcyhvbmx5Rmlyc3RSb3c6IGZhbHNlKTogUm93Tm9kZVtdO1xuICBnZXRTZWxlY3RlZFJvd05vZGVzKG9ubHlGaXJzdFJvdz86IGJvb2xlYW4pOiBSb3dOb2RlW10gfCBSb3dOb2RlIHtcbiAgICBjb25zdCByb3dzID0gdGhpcy5hcGkuZ3JpZC5nZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgcmV0dXJuIG9ubHlGaXJzdFJvdyA/IHJvd3NbMF0gOiByb3dzO1xuICB9XG5cbiAgZ2V0RmlsdGVyKCk6IERhdG9HcmlkRmlsdGVyc01hcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKS5zZXR0aW5ncy5maWx0ZXI7XG4gIH1cblxuICBzZWxlY3RGaWx0ZXIoKTogT2JzZXJ2YWJsZTxEYXRvR3JpZEZpbHRlcnNNYXA+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2V0dGluZ3MuZmlsdGVyKTtcbiAgfVxuXG4gIGdldEV4dGVybmFsRmlsdGVyKCk6IERhdG9HcmlkRXh0ZXJuYWxGaWx0ZXJbXSB7XG4gICAgY29uc3QgZ3JpZEZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcigpO1xuXG4gICAgaWYgKGdyaWRGaWx0ZXJzKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoZ3JpZEZpbHRlcnMpLnJlZHVjZSgoZmlsdGVycywgZmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gZ3JpZEZpbHRlcnNbZmllbGRdO1xuXG4gICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICBmaWx0ZXJzLnB1c2goeyBmaWVsZCwgZmlsdGVyIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgICB9LCBbXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0U2VhcmNoVGVybSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCkuc2V0dGluZ3Muc2VhcmNoVGVybTtcbiAgfVxuXG4gIHNlbGVjdFNlYXJjaFRlcm0oKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoKHN0YXRlOiBHcmlkU3RvcmVTdGF0ZSkgPT4gc3RhdGUuc2V0dGluZ3Muc2VhcmNoVGVybSk7XG4gIH1cblxuICB3YWl0Rm9yR3JpZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICB3YWl0Rm9yR3JpZDxUID0gYW55Pihzb3VyY2U6ICgpID0+IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+O1xuICB3YWl0Rm9yR3JpZDxUID0gYW55Pihzb3VyY2U/OiAoKSA9PiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB8IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBzb3VyY2UgPyB0aGlzLmdyaWRSZWFkeSQucGlwZShzd2l0Y2hNYXAoc291cmNlKSkgOiB0aGlzLmdyaWRSZWFkeSQ7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9ncmlkUmVhZHkuY29tcGxldGUoKTtcbiAgICB0aGlzLl9zZXJ2ZXJEYXRhTG9hZGVkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBnZXRHcmlkT3B0aW9ucygpOiBEYXRvR3JpZE9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLmdyaWRSZWYgPyAodGhpcy5ncmlkUmVmLmdyaWRPcHRpb25zIGFzIERhdG9HcmlkT3B0aW9ucykgOiBudWxsO1xuICB9XG5cbiAgc2VsZWN0U2VydmVyUGFnaW5hdGlvbkNvbmZpZygpOiBPYnNlcnZhYmxlPFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZmlnPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KChzdGF0ZTogR3JpZFN0b3JlU3RhdGUpID0+IHN0YXRlLnNlcnZlclNpZGVQYWdpbmF0aW9uKTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkUm93c0NvdW50KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZCkge1xuICAgICAgY29uc3QgeyB0b3RhbFJvd3MsIGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCB9ID0gdGhpcy5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgICAgcmV0dXJuIHRvdGFsUm93cyAtIHNpemUoZXhjbHVkZWRGcm9tU2VsZWN0QWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpemUodGhpcy5nZXRTZWxlY3RlZFJvd3MoKSk7XG4gIH1cblxuICBnZXRDdXJyZW50UGFnZVJvd3MoKTogUm93Tm9kZVtdIHtcbiAgICBjb25zdCBwYWdlUm93czogUm93Tm9kZVtdID0gW107XG4gICAgY29uc3QgcHVzaFBhZ2VSb3cgPSAobm9kZTogUm93Tm9kZSkgPT4ge1xuICAgICAgcGFnZVJvd3MucHVzaChub2RlKTtcbiAgICB9O1xuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmFwaS5ncmlkO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gZ3JpZC5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKTtcbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IGdyaWQucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCk7XG4gICAgY29uc3QgdG90YWxSb3dzID0gZ3JpZC5wYWdpbmF0aW9uR2V0Um93Q291bnQoKTtcbiAgICBjb25zdCBmaXJzdFBhZ2VJbmRleCA9IGN1cnJlbnRQYWdlICogcGFnZVNpemU7XG4gICAgbGV0IGxhc3RQYWdlSW5kZXggPSBmaXJzdFBhZ2VJbmRleCArIHBhZ2VTaXplO1xuICAgIGlmIChsYXN0UGFnZUluZGV4ID4gdG90YWxSb3dzKSB7XG4gICAgICBsYXN0UGFnZUluZGV4ID0gdG90YWxSb3dzO1xuICAgIH1cbiAgICBjb25zdCBwZXJmb3JtQWN0aW9uID0gKG5vZGU6IFJvd05vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLnJvd0luZGV4IDwgbGFzdFBhZ2VJbmRleCAmJiBub2RlLnJvd0luZGV4ID49IGZpcnN0UGFnZUluZGV4KSB7XG4gICAgICAgIHB1c2hQYWdlUm93KG5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5pc1NlcnZlclNpZGUgPyBncmlkLmZvckVhY2hOb2RlKHBlcmZvcm1BY3Rpb24pIDogZ3JpZC5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyQW5kU29ydChwZXJmb3JtQWN0aW9uKTtcbiAgICByZXR1cm4gcGFnZVJvd3M7XG4gIH1cblxuICBnZXRBbGxDb2x1bW5zKCk6IENvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJDaGVja2JveFNlbGVjdGlvbkNvbHVtbih0aGlzLmFwaS5jb2x1bW5zLmdldEFsbENvbHVtbnMoKSk7XG4gIH1cblxuICBnZXRBbGxEaXNwbGF5ZWRDb2x1bW5zKCk6IENvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJDaGVja2JveFNlbGVjdGlvbkNvbHVtbih0aGlzLmFwaS5jb2x1bW5zLmdldEFsbERpc3BsYXllZENvbHVtbnMoKSk7XG4gIH1cblxuICBnZXRBbGxQaXZvdENvbHVtbnMoKTogQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbENvbHVtbnMoKS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5pc1Bpdm90QWN0aXZlKCkpO1xuICB9XG5cbiAgc2VsZWN0SXNTZWxlY3RBbGxSb3dzRW5hYmxlZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2VydmVyU2lkZVBhZ2luYXRpb24uc2VsZWN0QWxsUm93c0VuYWJsZWQpO1xuICB9XG5cbiAgZ2V0U2Vjb25kYXJ5Q29sdW1uKGNvbElkOiBzdHJpbmcpOiBDb2x1bW4ge1xuICAgIC8qKiBVc2UgZ2V0UGl2b3RSZXN1bHRDb2x1bW5zIGZyb20gdmVyIDI4ICovXG4gICAgY29uc3Qgc2Vjb25kYXJ5Q29sdW1ucyA9IHRoaXMuYXBpLmNvbHVtbnMuZ2V0U2Vjb25kYXJ5Q29sdW1ucygpO1xuXG4gICAgaWYgKHNlY29uZGFyeUNvbHVtbnMpIHtcbiAgICAgIHJldHVybiBzZWNvbmRhcnlDb2x1bW5zLmZpbmQoY29sID0+IGNvbC5nZXRDb2xJZCgpID09PSBjb2xJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckNoZWNrYm94U2VsZWN0aW9uQ29sdW1uKGNvbHVtbnM6IENvbHVtbltdKTogQ29sdW1uW10ge1xuICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcihcbiAgICAgIChjb2x1bW46IENvbHVtbikgPT4gIWNvbHVtbi5nZXRVc2VyUHJvdmlkZWRDb2xEZWYoKSB8fCAhY29sdW1uLmdldFVzZXJQcm92aWRlZENvbERlZigpLmNoZWNrYm94U2VsZWN0aW9uXG4gICAgKTtcbiAgfVxufVxuIl19