igniteui-angular 11.1.34 → 11.1.38

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.
@@ -122,7 +122,9 @@ export class IgxGridSummaryService {
122
122
  this.summaryHeight = 0;
123
123
  this.grid._summaryPipeTrigger++;
124
124
  if (this.grid.rootSummariesEnabled) {
125
+ this.grid.summariesHeight = 0;
125
126
  this.retriggerRootPipe++;
127
+ Promise.resolve().then(() => this.grid.notifyChanges(true));
126
128
  }
127
129
  }
128
130
  updateSummaryCache(groupingArgs) {
@@ -227,4 +229,4 @@ export class IgxGridSummaryService {
227
229
  IgxGridSummaryService.decorators = [
228
230
  { type: Injectable }
229
231
  ];
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zdW1tYXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc3VtbWFyaWVzL2dyaWQtc3VtbWFyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdqRSxjQUFjO0FBRWQsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUdXLGtCQUFhLEdBQUcsb0JBQW9CLENBQUM7UUFDckMsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUN6QixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDdEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFckIsb0JBQWUsR0FBb0MsSUFBSSxHQUFHLEVBQTJDLENBQUM7SUF1T3BILENBQUM7SUFyT1Usb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFLO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0Is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WUFDcEUsSUFBSSxRQUFRLEtBQUssY0FBYyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsT0FBTzthQUNWO1lBQ0QsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO29CQUN4QyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7d0JBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNuQztnQkFDSixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsSUFBWSxVQUFVO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLGVBQWUsQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFBWSxrQkFBa0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssdUJBQXVCLENBQUM7SUFDckYsQ0FBQzs7O1lBL09KLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneFN1bW1hcnlSZXN1bHQgfSBmcm9tICcuL2dyaWQtc3VtbWFyeSc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgY2xvbmVBcnJheSwgcmVzb2x2ZU5lc3RlZFBhdGggfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRUeXBlLCBGbGF0R3JpZFR5cGUsIFRyZWVHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cbi8qKiBAaGlkZGVuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZFN1bW1hcnlTZXJ2aWNlIHtcbiAgICBwdWJsaWMgZ3JpZDogR3JpZFR5cGU7XG4gICAgcHVibGljIHJvb3RTdW1tYXJ5SUQgPSAnaWd4R3JpZFJvb3RTdW1tYXJ5JztcbiAgICBwdWJsaWMgc3VtbWFyeUhlaWdodCA9IDA7XG4gICAgcHVibGljIG1heFN1bW1hcmllc0xlbmdodCA9IDA7XG4gICAgcHVibGljIGdyb3VwaW5nRXhwcmVzc2lvbnMgPSBbXTtcbiAgICBwdWJsaWMgcmV0cmlnZ2VyUm9vdFBpcGUgPSAwO1xuICAgIHB1YmxpYyBkZWxldGVPcGVyYXRpb24gPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBzdW1tYXJ5Q2FjaGVNYXA6IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIGFueVtdPj4gPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgSWd4U3VtbWFyeVJlc3VsdFtdPj4oKTtcblxuICAgIHB1YmxpYyByZWNhbGN1bGF0ZVN1bW1hcmllcygpIHtcbiAgICAgICAgdGhpcy5yZXNldFN1bW1hcnlIZWlnaHQoKTtcbiAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXModHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyU3VtbWFyeUNhY2hlKGFyZ3M/KSB7XG4gICAgICAgIGlmICghdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuY2xlYXIoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQgJiYgdGhpcy5ncmlkLnJvb3RTdW1tYXJpZXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyaWdnZXJSb290UGlwZSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzLmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0lEID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyBhcmdzLmRhdGFbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogYXJncy5kYXRhO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVTdW1tYXJpZXMocm93SUQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzLnJvd0lEICE9PSB1bmRlZmluZWQgJiYgYXJncy5yb3dJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IGNvbHVtbk5hbWUgPSBhcmdzLmNlbGxJRCA/IHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZpbmQoY29sID0+IGNvbC5pbmRleCA9PT0gYXJncy5jZWxsSUQuY29sdW1uSUQpLmZpZWxkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWUgJiYgdGhpcy5ncmlkLnJvd0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpc0dyb3VwZWRDb2x1bW4gPSAodGhpcy5ncmlkIGFzIEZsYXRHcmlkVHlwZSkuZ3JvdXBpbmdFeHByZXNzaW9ucyAmJlxuICAgICAgICAgICAgKHRoaXMuZ3JpZCBhcyBGbGF0R3JpZFR5cGUpLmdyb3VwaW5nRXhwcmVzc2lvbnMubWFwKGV4cHIgPT4gZXhwci5maWVsZE5hbWUpLmluZGV4T2YoY29sdW1uTmFtZSkgIT09IC0xO1xuICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWUgJiYgaXNHcm91cGVkQ29sdW1uICkge1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVN1bW1hcmllcyhhcmdzLnJvd0lELCBjb2x1bW5OYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWU/KSB7XG4gICAgICAgIHRoaXMuZGVsZXRlU3VtbWFyeUNhY2hlKHRoaXMucm9vdFN1bW1hcnlJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlDYWNoZU1hcC5zaXplID09PSAxICYmIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmhhcyh0aGlzLnJvb3RTdW1tYXJ5SUQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNUcmVlR3JpZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCAmJiB0aGlzLmRlbGV0ZU9wZXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlT3BlcmF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogdGhpcy5yZW1vdmVDaGlsZFJvd1N1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbFRyZWVHcmlkU3VtbWFyaWVzKHJvd0lELCBjb2x1bW5OYW1lKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsR3JpZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCAmJiB0aGlzLmRlbGV0ZU9wZXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlT3BlcmF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgY29uc3Qgc3VtbWFyeUlkcyA9IHRoaXMuZ2V0U3VtbWFyeUlEKHJvd0lELCAodGhpcy5ncmlkIGFzIEZsYXRHcmlkVHlwZSkuZ3JvdXBpbmdFeHByZXNzaW9ucyk7XG4gICAgICAgICAgIHN1bW1hcnlJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVN1bW1hcnlDYWNoZShpZCwgY29sdW1uTmFtZSk7XG4gICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVN1bW1hcmllc0NhY2hlUGVyQ29sdW1uKGNvbHVtbk5hbWUpIHtcbiAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZm9yRWFjaCgoY2FjaGUpID0+IHtcbiAgICAgICAgICAgIGlmIChjYWNoZS5nZXQoY29sdW1uTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBjYWNoZS5kZWxldGUoY29sdW1uTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvb3RTdW1tYXJpZXNFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJpZ2dlclJvb3RQaXBlKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2FsY01heFN1bW1hcnlIZWlnaHQoKSB7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1bW1hcnlIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmdyaWQuZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VtbWFyeUhlaWdodCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1heFN1bW1hcnlMZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmdyaWQuY29sdW1uTGlzdC5maWx0ZXIoKGNvbCkgPT4gY29sLmhhc1N1bW1hcnkgJiYgIWNvbC5oaWRkZW4pLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2V0Q3VycmVudFN1bW1hcnlDb2x1bW4gPSBjb2x1bW4uc3VtbWFyaWVzLm9wZXJhdGUoW10sIFtdLCBjb2x1bW4uZmllbGQpLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChnZXRDdXJyZW50U3VtbWFyeUNvbHVtbikge1xuICAgICAgICAgICAgICAgIGlmIChtYXhTdW1tYXJ5TGVuZ3RoIDwgZ2V0Q3VycmVudFN1bW1hcnlDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4U3VtbWFyeUxlbmd0aCA9IGdldEN1cnJlbnRTdW1tYXJ5Q29sdW1uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWF4U3VtbWFyaWVzTGVuZ2h0ID0gbWF4U3VtbWFyeUxlbmd0aDtcbiAgICAgICAgdGhpcy5zdW1tYXJ5SGVpZ2h0ID0gIG1heFN1bW1hcnlMZW5ndGggKiB0aGlzLmdyaWQuZGVmYXVsdFN1bW1hcnlIZWlnaHQ7XG4gICAgICAgIHJldHVybiB0aGlzLnN1bW1hcnlIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGN1bGF0ZVN1bW1hcmllcyhyb3dJRCwgZGF0YSkge1xuICAgICAgICBsZXQgcm93U3VtbWFyaWVzID0gdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZ2V0KHJvd0lEKTtcbiAgICAgICAgaWYgKCFyb3dTdW1tYXJpZXMpIHtcbiAgICAgICAgICAgIHJvd1N1bW1hcmllcyA9IG5ldyBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+KCk7XG4gICAgICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5zZXQocm93SUQsIHJvd1N1bW1hcmllcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmhhc1N1bW1hcml6ZWRDb2x1bW5zIHx8ICFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93U3VtbWFyaWVzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZpbHRlcihjb2wgPT4gY29sLmhhc1N1bW1hcnkpLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKCFyb3dTdW1tYXJpZXMuZ2V0KGNvbHVtbi5maWVsZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5UmVzdWx0ID0gY29sdW1uLnN1bW1hcmllcy5vcGVyYXRlKGRhdGEubWFwKHIgPT4gcmVzb2x2ZU5lc3RlZFBhdGgociwgY29sdW1uLmZpZWxkKSksXG4gICAgICAgICAgICAgICAgICAgIGRhdGEsIGNvbHVtbi5maWVsZCwgdGhpcy5ncmlkLmxvY2FsZSwgY29sdW1uLnBpcGVBcmdzKTtcbiAgICAgICAgICAgICAgICByb3dTdW1tYXJpZXMuc2V0KGNvbHVtbi5maWVsZCwgc3VtbWFyeVJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcm93U3VtbWFyaWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldFN1bW1hcnlIZWlnaHQoKSB7XG4gICAgICAgIHRoaXMuc3VtbWFyeUhlaWdodCA9IDA7XG4gICAgICAgICh0aGlzLmdyaWQgYXMgYW55KS5fc3VtbWFyeVBpcGVUcmlnZ2VyKys7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cmlnZ2VyUm9vdFBpcGUrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVTdW1tYXJ5Q2FjaGUoZ3JvdXBpbmdBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlDYWNoZU1hcC5zaXplID09PSAwIHx8ICF0aGlzLmhhc1N1bW1hcml6ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyb3VwaW5nQXJncy5leHByZXNzaW9ucy5tYXAocmVjb3JkID0+IHJlY29yZC5maWVsZE5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cGluZ0FyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTdW1tYXJ5Q2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBhcmVHcm91cGluZ0V4cHJlc3Npb25zKHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucywgZ3JvdXBpbmdBcmdzKTtcbiAgICAgICAgdGhpcy5ncm91cGluZ0V4cHJlc3Npb25zID0gZ3JvdXBpbmdBcmdzLmV4cHJlc3Npb25zLm1hcChyZWNvcmQgPT4gcmVjb3JkLmZpZWxkTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNTdW1tYXJpemVkQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgc3VtbWFyaXplZENvbHVtbnMgPSB0aGlzLmdyaWQuY29sdW1uTGlzdC5maWx0ZXIoY29sID0+IGNvbC5oYXNTdW1tYXJ5ICYmICFjb2wuaGlkZGVuKTtcbiAgICAgICAgcmV0dXJuIHN1bW1hcml6ZWRDb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWxldGVTdW1tYXJ5Q2FjaGUoaWQsIGNvbHVtbk5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VtbWFyeUNhY2hlTWFwLmdldChpZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ0FwcGxpZWQgPSBjb2x1bW5OYW1lICYmIHRoaXMuZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5tYXAoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lKS5pbmRleE9mKGNvbHVtbk5hbWUpICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lICYmIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmdldChpZCkuZ2V0KGNvbHVtbk5hbWUpICYmICFmaWx0ZXJpbmdBcHBsaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZ2V0KGlkKS5kZWxldGUoY29sdW1uTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaWQgPT09IHRoaXMucm9vdFN1bW1hcnlJRCAmJiB0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldHJpZ2dlclJvb3RQaXBlKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1bW1hcnlJRChyb3dJRCwgZ3JvdXBpbmdFeHByZXNzaW9ucykge1xuICAgICAgICBpZiAoZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdW1tYXJ5SURzID0gW107XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5ncmlkLmRhdGE7XG4gICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5tZXJnZVRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICBjbG9uZUFycmF5KHRoaXMuZ3JpZC5kYXRhKSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5wcmltYXJ5S2V5XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IGRhdGEuZmluZChyZWMgPT4gcmVjW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA9PT0gcm93SUQpIDogcm93SUQ7XG4gICAgICAgIGxldCBpZCA9ICd7ICc7XG4gICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbnMuZm9yRWFjaChleHByID0+IHtcbiAgICAgICAgICAgIGlkICs9IGAnJHtleHByLmZpZWxkTmFtZX0nOiAnJHtyb3dEYXRhW2V4cHIuZmllbGROYW1lXX0nYDtcbiAgICAgICAgICAgICAgICBzdW1tYXJ5SURzLnB1c2goaWQuY29uY2F0KCcgfScpKTtcbiAgICAgICAgICAgICAgICBpZCArPSAnLCAnO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1bW1hcnlJRHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVBbGxUcmVlR3JpZFN1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZT8pIHtcbiAgICAgICAgbGV0IHJvdyA9ICh0aGlzLmdyaWQgYXMgVHJlZUdyaWRUeXBlKS5yZWNvcmRzLmdldChyb3dJRCk7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcm93ID0gcm93LmNoaWxkcmVuID8gcm93IDogcm93LnBhcmVudDtcbiAgICAgICAgd2hpbGUgKHJvdykge1xuICAgICAgICAgICAgcm93SUQgPSByb3cucm93SUQ7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVN1bW1hcnlDYWNoZShyb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgICAgICByb3cgPSByb3cucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogcmVtb3ZlIG9ubHkgZGVsZXRlZCByb3dzXG4gICAgcHJpdmF0ZSByZW1vdmVDaGlsZFJvd1N1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZT8pIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVHcm91cGluZ0V4cHJlc3Npb25zKGN1cnJlbnQsIGdyb3VwaW5nQXJncykge1xuICAgICAgICBjb25zdCBuZXdFeHByZXNzaW9ucyA9IGdyb3VwaW5nQXJncy5leHByZXNzaW9ucy5tYXAocmVjb3JkID0+IHJlY29yZC5maWVsZE5hbWUpO1xuICAgICAgICBjb25zdCByZW1vdmVkQ29scyA9IGdyb3VwaW5nQXJncy51bmdyb3VwZWRDb2x1bW5zO1xuICAgICAgICBpZiAoY3VycmVudC5sZW5ndGggPD0gbmV3RXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdFeHByID0gbmV3RXhwcmVzc2lvbnMuc2xpY2UoMCwgY3VycmVudC5sZW5ndGgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudC50b1N0cmluZygpICE9PSBuZXdFeHByKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclN1bW1hcnlDYWNoZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3VyckV4cHIgPSBjdXJyZW50LnNsaWNlKDAsIG5ld0V4cHJlc3Npb25zLmxlbmd0aCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmIChjdXJyRXhwciAhPT0gbmV3RXhwcmVzc2lvbnMudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTdW1tYXJ5Q2FjaGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW1vdmVkQ29scy5tYXAoY29sID0+IGNvbC5maWVsZCkuZm9yRWFjaChjb2xOYW1lID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5mb3JFYWNoKChjYWNoZSwgaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICBpZiAoaWQuaW5kZXhPZihjb2xOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzVHJlZUdyaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpZ3gtdHJlZS1ncmlkJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc0hpZXJhcmNoaWNhbEdyaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQnO1xuICAgIH1cblxufVxuIl19
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zdW1tYXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc3VtbWFyaWVzL2dyaWQtc3VtbWFyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdqRSxjQUFjO0FBRWQsTUFBTSxPQUFPLHFCQUFxQjtJQURsQztRQUdXLGtCQUFhLEdBQUcsb0JBQW9CLENBQUM7UUFDckMsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUN6QixzQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDdEIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFckIsb0JBQWUsR0FBb0MsSUFBSSxHQUFHLEVBQTJDLENBQUM7SUF5T3BILENBQUM7SUF2T1Usb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFLO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0Is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SyxPQUFPLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQzVCO1NBQ0o7YUFBTTtZQUNILE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwRSxJQUFJLFFBQVEsS0FBSyxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6QixPQUFPO2FBQ1Y7WUFDRCxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7b0JBQ3hDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTt3QkFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ25DO2dCQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxJQUFZLFVBQVU7UUFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssZUFBZSxDQUFDO0lBQzdFLENBQUM7SUFFRCxJQUFZLGtCQUFrQjtRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyx1QkFBdUIsQ0FBQztJQUNyRixDQUFDOzs7WUFqUEosVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4U3VtbWFyeVJlc3VsdCB9IGZyb20gJy4vZ3JpZC1zdW1tYXJ5JztcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCByZXNvbHZlTmVzdGVkUGF0aCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgR3JpZFR5cGUsIEZsYXRHcmlkVHlwZSwgVHJlZUdyaWRUeXBlIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcblxuLyoqIEBoaWRkZW4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkU3VtbWFyeVNlcnZpY2Uge1xuICAgIHB1YmxpYyBncmlkOiBHcmlkVHlwZTtcbiAgICBwdWJsaWMgcm9vdFN1bW1hcnlJRCA9ICdpZ3hHcmlkUm9vdFN1bW1hcnknO1xuICAgIHB1YmxpYyBzdW1tYXJ5SGVpZ2h0ID0gMDtcbiAgICBwdWJsaWMgbWF4U3VtbWFyaWVzTGVuZ2h0ID0gMDtcbiAgICBwdWJsaWMgZ3JvdXBpbmdFeHByZXNzaW9ucyA9IFtdO1xuICAgIHB1YmxpYyByZXRyaWdnZXJSb290UGlwZSA9IDA7XG4gICAgcHVibGljIGRlbGV0ZU9wZXJhdGlvbiA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIHN1bW1hcnlDYWNoZU1hcDogTWFwPHN0cmluZywgTWFwPHN0cmluZywgYW55W10+PiA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBJZ3hTdW1tYXJ5UmVzdWx0W10+PigpO1xuXG4gICAgcHVibGljIHJlY2FsY3VsYXRlU3VtbWFyaWVzKCkge1xuICAgICAgICB0aGlzLnJlc2V0U3VtbWFyeUhlaWdodCgpO1xuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcyh0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJTdW1tYXJ5Q2FjaGUoYXJncz8pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1bW1hcnlDYWNoZU1hcC5zaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5jbGVhcigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZCAmJiB0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldHJpZ2dlclJvb3RQaXBlKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3MuZGF0YSkge1xuICAgICAgICAgICAgY29uc3Qgcm93SUQgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IGFyZ3MuZGF0YVt0aGlzLmdyaWQucHJpbWFyeUtleV0gOiBhcmdzLmRhdGE7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVN1bW1hcmllcyhyb3dJRCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3Mucm93SUQgIT09IHVuZGVmaW5lZCAmJiBhcmdzLnJvd0lEICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgY29sdW1uTmFtZSA9IGFyZ3MuY2VsbElEID8gdGhpcy5ncmlkLmNvbHVtbkxpc3QuZmluZChjb2wgPT4gY29sLmluZGV4ID09PSBhcmdzLmNlbGxJRC5jb2x1bW5JRCkuZmllbGQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoY29sdW1uTmFtZSAmJiB0aGlzLmdyaWQucm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlzR3JvdXBlZENvbHVtbiA9ICh0aGlzLmdyaWQgYXMgRmxhdEdyaWRUeXBlKS5ncm91cGluZ0V4cHJlc3Npb25zICYmXG4gICAgICAgICAgICAodGhpcy5ncmlkIGFzIEZsYXRHcmlkVHlwZSkuZ3JvdXBpbmdFeHByZXNzaW9ucy5tYXAoZXhwciA9PiBleHByLmZpZWxkTmFtZSkuaW5kZXhPZihjb2x1bW5OYW1lKSAhPT0gLTE7XG4gICAgICAgICAgICBpZiAoY29sdW1uTmFtZSAmJiBpc0dyb3VwZWRDb2x1bW4gKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU3VtbWFyaWVzKGFyZ3Mucm93SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVN1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZT8pIHtcbiAgICAgICAgdGhpcy5kZWxldGVTdW1tYXJ5Q2FjaGUodGhpcy5yb290U3VtbWFyeUlELCBjb2x1bW5OYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuc3VtbWFyeUNhY2hlTWFwLnNpemUgPT09IDEgJiYgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuaGFzKHRoaXMucm9vdFN1bW1hcnlJRCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1RyZWVHcmlkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkICYmIHRoaXMuZGVsZXRlT3BlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVPcGVyYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiB0aGlzLnJlbW92ZUNoaWxkUm93U3VtbWFyaWVzKHJvd0lELCBjb2x1bW5OYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsVHJlZUdyaWRTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNIaWVyYXJjaGljYWxHcmlkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkICYmIHRoaXMuZGVsZXRlT3BlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVPcGVyYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICBjb25zdCBzdW1tYXJ5SWRzID0gdGhpcy5nZXRTdW1tYXJ5SUQocm93SUQsICh0aGlzLmdyaWQgYXMgRmxhdEdyaWRUeXBlKS5ncm91cGluZ0V4cHJlc3Npb25zKTtcbiAgICAgICAgICAgc3VtbWFyeUlkcy5mb3JFYWNoKGlkID0+IHtcbiAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlU3VtbWFyeUNhY2hlKGlkLCBjb2x1bW5OYW1lKTtcbiAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlU3VtbWFyaWVzQ2FjaGVQZXJDb2x1bW4oY29sdW1uTmFtZSkge1xuICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5mb3JFYWNoKChjYWNoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmdldChjb2x1bW5OYW1lKSkge1xuICAgICAgICAgICAgICAgIGNhY2hlLmRlbGV0ZShjb2x1bW5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cmlnZ2VyUm9vdFBpcGUrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjYWxjTWF4U3VtbWFyeUhlaWdodCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VtbWFyeUhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VtbWFyeUhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdW1tYXJ5SGVpZ2h0ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWF4U3VtbWFyeUxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5MaXN0LmZpbHRlcigoY29sKSA9PiBjb2wuaGFzU3VtbWFyeSAmJiAhY29sLmhpZGRlbikuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZXRDdXJyZW50U3VtbWFyeUNvbHVtbiA9IGNvbHVtbi5zdW1tYXJpZXMub3BlcmF0ZShbXSwgW10sIGNvbHVtbi5maWVsZCkubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGdldEN1cnJlbnRTdW1tYXJ5Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heFN1bW1hcnlMZW5ndGggPCBnZXRDdXJyZW50U3VtbWFyeUNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBtYXhTdW1tYXJ5TGVuZ3RoID0gZ2V0Q3VycmVudFN1bW1hcnlDb2x1bW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tYXhTdW1tYXJpZXNMZW5naHQgPSBtYXhTdW1tYXJ5TGVuZ3RoO1xuICAgICAgICB0aGlzLnN1bW1hcnlIZWlnaHQgPSAgbWF4U3VtbWFyeUxlbmd0aCAqIHRoaXMuZ3JpZC5kZWZhdWx0U3VtbWFyeUhlaWdodDtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VtbWFyeUhlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FsY3VsYXRlU3VtbWFyaWVzKHJvd0lELCBkYXRhKSB7XG4gICAgICAgIGxldCByb3dTdW1tYXJpZXMgPSB0aGlzLnN1bW1hcnlDYWNoZU1hcC5nZXQocm93SUQpO1xuICAgICAgICBpZiAoIXJvd1N1bW1hcmllcykge1xuICAgICAgICAgICAgcm93U3VtbWFyaWVzID0gbmV3IE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4oKTtcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLnNldChyb3dJRCwgcm93U3VtbWFyaWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaGFzU3VtbWFyaXplZENvbHVtbnMgfHwgIWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiByb3dTdW1tYXJpZXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtbkxpc3QuZmlsdGVyKGNvbCA9PiBjb2wuaGFzU3VtbWFyeSkuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJvd1N1bW1hcmllcy5nZXQoY29sdW1uLmZpZWxkKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcnlSZXN1bHQgPSBjb2x1bW4uc3VtbWFyaWVzLm9wZXJhdGUoZGF0YS5tYXAociA9PiByZXNvbHZlTmVzdGVkUGF0aChyLCBjb2x1bW4uZmllbGQpKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YSwgY29sdW1uLmZpZWxkLCB0aGlzLmdyaWQubG9jYWxlLCBjb2x1bW4ucGlwZUFyZ3MpO1xuICAgICAgICAgICAgICAgIHJvd1N1bW1hcmllcy5zZXQoY29sdW1uLmZpZWxkLCBzdW1tYXJ5UmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByb3dTdW1tYXJpZXM7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0U3VtbWFyeUhlaWdodCgpIHtcbiAgICAgICAgdGhpcy5zdW1tYXJ5SGVpZ2h0ID0gMDtcbiAgICAgICAgKHRoaXMuZ3JpZCBhcyBhbnkpLl9zdW1tYXJ5UGlwZVRyaWdnZXIrKztcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb290U3VtbWFyaWVzRW5hYmxlZCkge1xuICAgICAgICAgICAgKHRoaXMuZ3JpZCBhcyBhbnkpLnN1bW1hcmllc0hlaWdodCA9IDA7XG4gICAgICAgICAgICB0aGlzLnJldHJpZ2dlclJvb3RQaXBlKys7XG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKHRydWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVTdW1tYXJ5Q2FjaGUoZ3JvdXBpbmdBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlDYWNoZU1hcC5zaXplID09PSAwIHx8ICF0aGlzLmhhc1N1bW1hcml6ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyb3VwaW5nQXJncy5leHByZXNzaW9ucy5tYXAocmVjb3JkID0+IHJlY29yZC5maWVsZE5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cGluZ0FyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTdW1tYXJ5Q2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBhcmVHcm91cGluZ0V4cHJlc3Npb25zKHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucywgZ3JvdXBpbmdBcmdzKTtcbiAgICAgICAgdGhpcy5ncm91cGluZ0V4cHJlc3Npb25zID0gZ3JvdXBpbmdBcmdzLmV4cHJlc3Npb25zLm1hcChyZWNvcmQgPT4gcmVjb3JkLmZpZWxkTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNTdW1tYXJpemVkQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgc3VtbWFyaXplZENvbHVtbnMgPSB0aGlzLmdyaWQuY29sdW1uTGlzdC5maWx0ZXIoY29sID0+IGNvbC5oYXNTdW1tYXJ5ICYmICFjb2wuaGlkZGVuKTtcbiAgICAgICAgcmV0dXJuIHN1bW1hcml6ZWRDb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWxldGVTdW1tYXJ5Q2FjaGUoaWQsIGNvbHVtbk5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VtbWFyeUNhY2hlTWFwLmdldChpZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ0FwcGxpZWQgPSBjb2x1bW5OYW1lICYmIHRoaXMuZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5tYXAoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lKS5pbmRleE9mKGNvbHVtbk5hbWUpICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lICYmIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmdldChpZCkuZ2V0KGNvbHVtbk5hbWUpICYmICFmaWx0ZXJpbmdBcHBsaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZ2V0KGlkKS5kZWxldGUoY29sdW1uTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaWQgPT09IHRoaXMucm9vdFN1bW1hcnlJRCAmJiB0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldHJpZ2dlclJvb3RQaXBlKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1bW1hcnlJRChyb3dJRCwgZ3JvdXBpbmdFeHByZXNzaW9ucykge1xuICAgICAgICBpZiAoZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdW1tYXJ5SURzID0gW107XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5ncmlkLmRhdGE7XG4gICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5tZXJnZVRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICBjbG9uZUFycmF5KHRoaXMuZ3JpZC5kYXRhKSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5wcmltYXJ5S2V5XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmdyaWQucHJpbWFyeUtleSA/IGRhdGEuZmluZChyZWMgPT4gcmVjW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA9PT0gcm93SUQpIDogcm93SUQ7XG4gICAgICAgIGxldCBpZCA9ICd7ICc7XG4gICAgICAgIGdyb3VwaW5nRXhwcmVzc2lvbnMuZm9yRWFjaChleHByID0+IHtcbiAgICAgICAgICAgIGlkICs9IGAnJHtleHByLmZpZWxkTmFtZX0nOiAnJHtyb3dEYXRhW2V4cHIuZmllbGROYW1lXX0nYDtcbiAgICAgICAgICAgICAgICBzdW1tYXJ5SURzLnB1c2goaWQuY29uY2F0KCcgfScpKTtcbiAgICAgICAgICAgICAgICBpZCArPSAnLCAnO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1bW1hcnlJRHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVBbGxUcmVlR3JpZFN1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZT8pIHtcbiAgICAgICAgbGV0IHJvdyA9ICh0aGlzLmdyaWQgYXMgVHJlZUdyaWRUeXBlKS5yZWNvcmRzLmdldChyb3dJRCk7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcm93ID0gcm93LmNoaWxkcmVuID8gcm93IDogcm93LnBhcmVudDtcbiAgICAgICAgd2hpbGUgKHJvdykge1xuICAgICAgICAgICAgcm93SUQgPSByb3cucm93SUQ7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVN1bW1hcnlDYWNoZShyb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgICAgICByb3cgPSByb3cucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogcmVtb3ZlIG9ubHkgZGVsZXRlZCByb3dzXG4gICAgcHJpdmF0ZSByZW1vdmVDaGlsZFJvd1N1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZT8pIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVHcm91cGluZ0V4cHJlc3Npb25zKGN1cnJlbnQsIGdyb3VwaW5nQXJncykge1xuICAgICAgICBjb25zdCBuZXdFeHByZXNzaW9ucyA9IGdyb3VwaW5nQXJncy5leHByZXNzaW9ucy5tYXAocmVjb3JkID0+IHJlY29yZC5maWVsZE5hbWUpO1xuICAgICAgICBjb25zdCByZW1vdmVkQ29scyA9IGdyb3VwaW5nQXJncy51bmdyb3VwZWRDb2x1bW5zO1xuICAgICAgICBpZiAoY3VycmVudC5sZW5ndGggPD0gbmV3RXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdFeHByID0gbmV3RXhwcmVzc2lvbnMuc2xpY2UoMCwgY3VycmVudC5sZW5ndGgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudC50b1N0cmluZygpICE9PSBuZXdFeHByKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclN1bW1hcnlDYWNoZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3VyckV4cHIgPSBjdXJyZW50LnNsaWNlKDAsIG5ld0V4cHJlc3Npb25zLmxlbmd0aCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmIChjdXJyRXhwciAhPT0gbmV3RXhwcmVzc2lvbnMudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTdW1tYXJ5Q2FjaGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW1vdmVkQ29scy5tYXAoY29sID0+IGNvbC5maWVsZCkuZm9yRWFjaChjb2xOYW1lID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5mb3JFYWNoKChjYWNoZSwgaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICBpZiAoaWQuaW5kZXhPZihjb2xOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzVHJlZUdyaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpZ3gtdHJlZS1ncmlkJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc0hpZXJhcmNoaWNhbEdyaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQnO1xuICAgIH1cblxufVxuIl19
@@ -32,7 +32,7 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
32
32
  if (!parents.size) {
33
33
  return;
34
34
  }
35
- visibleRowIDs = this.getRowIDs(this.allData);
35
+ visibleRowIDs = new Set(this.getRowIDs(this.allData));
36
36
  this.rowsToBeSelected = new Set(this.rowSelection);
37
37
  this.rowsToBeIndeterminate = new Set(this.indeterminateRows);
38
38
  if (crudRowID) {
@@ -119,8 +119,10 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
119
119
  * retrieve the rows which should be added/removed to/from the old selection
120
120
  */
121
121
  handleAddedAndRemovedArgs(args) {
122
- args.removed = args.oldSelection.filter(x => args.newSelection.indexOf(x) < 0);
123
- args.added = args.newSelection.filter(x => args.oldSelection.indexOf(x) < 0);
122
+ const newSelectionSet = new Set(args.newSelection);
123
+ const oldSelectionSet = new Set(args.oldSelection);
124
+ args.removed = args.oldSelection.filter(x => !newSelectionSet.has(x));
125
+ args.added = args.newSelection.filter(x => !oldSelectionSet.has(x));
124
126
  }
125
127
  /**
126
128
  * adds to rowsToBeProcessed set all visible children of the rows which was initially within the rowsToBeProcessed set
@@ -129,14 +131,15 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
129
131
  * @param visibleRowIDs list of all visible rowIds
130
132
  * @returns a new set with all direct parents of the rows within rowsToBeProcessed set
131
133
  */
132
- collectRowsChildrenAndDirectParents(rowsToBeProcessed, visibleRowIDs) {
134
+ collectRowsChildrenAndDirectParents(rowsToBeProcessed, visibleRowIDs, adding) {
133
135
  const processedRowsParents = new Set();
134
136
  Array.from(rowsToBeProcessed).forEach((rowID) => {
137
+ this.selectDeselectRow(rowID, adding);
135
138
  const rowTreeRecord = this.grid.gridAPI.get_rec_by_id(rowID);
136
139
  const rowAndAllChildren = this.get_all_children(rowTreeRecord);
137
140
  rowAndAllChildren.forEach(row => {
138
- if (visibleRowIDs.indexOf(row.rowID) >= 0) {
139
- rowsToBeProcessed.add(row.rowID);
141
+ if (visibleRowIDs.has(row.rowID)) {
142
+ this.selectDeselectRow(row.rowID, adding);
140
143
  }
141
144
  });
142
145
  if (rowTreeRecord && rowTreeRecord.parent) {
@@ -152,27 +155,19 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
152
155
  calculateRowsNewSelectionState(args) {
153
156
  this.rowsToBeSelected = new Set(args.oldSelection ? args.oldSelection : this.getSelectedRows());
154
157
  this.rowsToBeIndeterminate = new Set(this.getIndeterminateRows());
155
- const visibleRowIDs = this.getRowIDs(this.allData);
158
+ const visibleRowIDs = new Set(this.getRowIDs(this.allData));
156
159
  const removed = new Set(args.removed);
157
160
  const added = new Set(args.added);
158
161
  if (removed && removed.size) {
159
162
  let removedRowsParents = new Set();
160
- removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs);
161
- removed.forEach(removedRow => {
162
- this.rowsToBeSelected.delete(removedRow);
163
- this.rowsToBeIndeterminate.delete(removedRow);
164
- });
163
+ removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs, false);
165
164
  Array.from(removedRowsParents).forEach((parent) => {
166
165
  this.handleParentSelectionState(parent, visibleRowIDs);
167
166
  });
168
167
  }
169
168
  if (added && added.size) {
170
169
  let addedRowsParents = new Set();
171
- addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs);
172
- added.forEach(addedRow => {
173
- this.rowsToBeSelected.add(addedRow);
174
- this.rowsToBeIndeterminate.delete(addedRow);
175
- });
170
+ addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs, true);
176
171
  Array.from(addedRowsParents).forEach((parent) => {
177
172
  this.handleParentSelectionState(parent, visibleRowIDs);
178
173
  });
@@ -196,31 +191,27 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
196
191
  handleRowSelectionState(treeRow, visibleRowIDs) {
197
192
  let visibleChildren = [];
198
193
  if (treeRow && treeRow.children) {
199
- visibleChildren = treeRow.children.filter(child => visibleRowIDs.indexOf(child.rowID) >= 0);
194
+ visibleChildren = treeRow.children.filter(child => visibleRowIDs.has(child.rowID));
200
195
  }
201
196
  if (visibleChildren.length) {
202
197
  if (visibleChildren.every(row => this.rowsToBeSelected.has(row.rowID))) {
203
- this.rowsToBeSelected.add(treeRow.rowID);
204
- this.rowsToBeIndeterminate.delete(treeRow.rowID);
198
+ this.selectDeselectRow(treeRow.rowID, true);
205
199
  }
206
200
  else if (visibleChildren.some(row => this.rowsToBeSelected.has(row.rowID) || this.rowsToBeIndeterminate.has(row.rowID))) {
207
201
  this.rowsToBeIndeterminate.add(treeRow.rowID);
208
202
  this.rowsToBeSelected.delete(treeRow.rowID);
209
203
  }
210
204
  else {
211
- this.rowsToBeIndeterminate.delete(treeRow.rowID);
212
- this.rowsToBeSelected.delete(treeRow.rowID);
205
+ this.selectDeselectRow(treeRow.rowID, false);
213
206
  }
214
207
  }
215
208
  else {
216
209
  // if the children of the row has been deleted and the row was selected do not change its state
217
210
  if (this.isRowSelected(treeRow.rowID)) {
218
- this.rowsToBeSelected.add(treeRow.rowID);
219
- this.rowsToBeIndeterminate.delete(treeRow.rowID);
211
+ this.selectDeselectRow(treeRow.rowID, true);
220
212
  }
221
213
  else {
222
- this.rowsToBeSelected.delete(treeRow.rowID);
223
- this.rowsToBeIndeterminate.delete(treeRow.rowID);
214
+ this.selectDeselectRow(treeRow.rowID, false);
224
215
  }
225
216
  }
226
217
  }
@@ -234,8 +225,18 @@ export class IgxTreeGridSelectionService extends IgxGridSelectionService {
234
225
  }
235
226
  return children;
236
227
  }
228
+ selectDeselectRow(rowID, select) {
229
+ if (select) {
230
+ this.rowsToBeSelected.add(rowID);
231
+ this.rowsToBeIndeterminate.delete(rowID);
232
+ }
233
+ else {
234
+ this.rowsToBeSelected.delete(rowID);
235
+ this.rowsToBeIndeterminate.delete(rowID);
236
+ }
237
+ }
237
238
  }
238
239
  IgxTreeGridSelectionService.decorators = [
239
240
  { type: Injectable }
240
241
  ];
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLXNlbGVjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUt6RSxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsdUJBQXVCO0lBSXBFLGtEQUFrRDtJQUMzQyxxQkFBcUIsQ0FBQyxNQUFhLEVBQUUsa0JBQW1CO1FBQzNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUU7WUFDM0UsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlELE9BQU87U0FDVjtRQUNELEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsb0RBQW9EO0lBQzdDLHVCQUF1QixDQUFDLE1BQWE7UUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUU7WUFDOUQsSUFBSSxDQUFDLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLE9BQU87U0FDVjtRQUNELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0scUJBQXFCLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBTTtR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O2lCQUFNO2dCQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNwRDtTQUNKO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQXVCO1FBQzVDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3JELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hCO1NBQ0o7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUVwQixDQUFDOzs7WUE5UUosVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4vdHJlZS1ncmlkLmludGVyZmFjZXMnO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFNlbGVjdGlvblNlcnZpY2UgZXh0ZW5kcyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSByb3dzVG9CZVNlbGVjdGVkOiBTZXQ8YW55PjtcbiAgICBwcml2YXRlIHJvd3NUb0JlSW5kZXRlcm1pbmF0ZTogU2V0PGFueT47XG5cbiAgICAvKiogU2VsZWN0IHNwZWNpZmllZCByb3dzLiBObyBldmVudCBpcyBlbWl0dGVkLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5ncmlkICYmIHRoaXMuZ3JpZC5yb3dTZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlQ2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5jYXNjYWRlU2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEcywgY2xlYXJQcmV2U2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5zZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzLCBjbGVhclByZXZTZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCBzcGVjaWZpZWQgcm93cy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd1NlbGVjdGlvbiA9PT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGVDYXNjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmNhc2NhZGVEZXNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb3dTZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlQ2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0Q2FzY2FkZVJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUNhc2NhZGVTZWxlY3Rpb25PbkZpbHRlckFuZENSVUQoXG4gICAgICAgIHBhcmVudHM6IFNldDxhbnk+LFxuICAgICAgICBjcnVkUm93SUQ/OiBhbnksXG4gICAgICAgIHZpc2libGVSb3dJRHM6IGFueVtdID0gbnVsbCkge1xuICAgICAgICBpZiAodmlzaWJsZVJvd0lEcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHRyZWUgZ3JpZCBoYXMgZmxhdCBzdHJ1Y3R1cmVcbiAgICAgICAgICAgIC8vIGRvIG5vdCBleHBsaWNpdGx5IGhhbmRsZSB0aGUgc2VsZWN0aW9uIHN0YXRlIG9mIHRoZSByb3dzXG4gICAgICAgICAgICBpZiAoIXBhcmVudHMuc2l6ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZpc2libGVSb3dJRHMgPSB0aGlzLmdldFJvd0lEcyh0aGlzLmFsbERhdGEpO1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkID0gbmV3IFNldCh0aGlzLnJvd1NlbGVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZSA9IG5ldyBTZXQodGhpcy5pbmRldGVybWluYXRlUm93cyk7XG4gICAgICAgICAgICBpZiAoY3J1ZFJvd0lEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uZGVsZXRlKGNydWRSb3dJRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJlbnRzLnNpemUpIHtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cyA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUpO1xuICAgICAgICAgICAgLy8gVE9ETzogZW1pdCBzZWxlY3Rpb25DaGFuZ2VEIGV2ZW50LCBjYWxjdWxhdGUgaXRzIGFyZ3MgdGhyb3VnaCB0aGUgaGFuZGxlQWRkZWRBbmRSZW1vdmVkQXJncyBtZXRob2RcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UGFyZW50cyA9IG5ldyBTZXQ8YW55PigpO1xuICAgICAgICBwYXJlbnRzLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93U2VsZWN0aW9uU3RhdGUocGFyZW50LCB2aXNpYmxlUm93SURzKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnBhcmVudCkge1xuICAgICAgICAgICAgICAgIG5ld1BhcmVudHMuYWRkKHBhcmVudC5wYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVDYXNjYWRlU2VsZWN0aW9uT25GaWx0ZXJBbmRDUlVEKG5ld1BhcmVudHMsIG51bGwsIHZpc2libGVSb3dJRHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FzY2FkZVNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHM6IGFueVtdLCBjbGVhclByZXZTZWxlY3Rpb24/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChjbGVhclByZXZTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVJvd3NOZXdTZWxlY3Rpb25TdGF0ZSh7IGFkZGVkOiByb3dJRHMsIHJlbW92ZWQ6IFtdIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IFsuLi5vbGRTZWxlY3Rpb24sIC4uLnJvd0lEc107XG4gICAgICAgICAgICBjb25zdCBhcmdzID0geyBvbGRTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbiB9O1xuXG4gICAgICAgICAgICAvLyByZXRyaWV2ZSBvbmx5IHRoZSByb3dzIHdpdGhvdXQgdGhlaXIgcGFyZW50cy9jaGlsZHJlbiB3aGljaCBoYXMgdG8gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGlvblxuICAgICAgICAgICAgdGhpcy5oYW5kbGVBZGRlZEFuZFJlbW92ZWRBcmdzKGFyZ3MpO1xuXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVJvd3NOZXdTZWxlY3Rpb25TdGF0ZShhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZVNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cyA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUpO1xuICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXNjYWRlRGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBhcmdzID0geyBhZGRlZDogW10sIHJlbW92ZWQ6IHJvd0lEcyB9O1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZVJvd3NOZXdTZWxlY3Rpb25TdGF0ZShhcmdzKTtcblxuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZVNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cyA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUpO1xuICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWxlY3Rpb25TZXJ2aWNlKCk6IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdENhc2NhZGVSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLFxuICAgICAgICAgICAgYWRkZWQsIHJlbW92ZWQsIGV2ZW50LCBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdGVSb3dzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG5cbiAgICAgICAgYXJncy5uZXdTZWxlY3Rpb24gPSBBcnJheS5mcm9tKHRoaXMucm93c1RvQmVTZWxlY3RlZCk7XG5cbiAgICAgICAgLy8gcmV0cmlldmUgcm93cy9wYXJlbnRzL2NoaWxkcmVuIHdoaWNoIGhhcyBiZWVuIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuaGFuZGxlQWRkZWRBbmRSZW1vdmVkQXJncyhhcmdzKTtcblxuICAgICAgICB0aGlzLmdyaWQub25Sb3dTZWxlY3Rpb25DaGFuZ2UuZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGFyZ3MubmV3U2VsZWN0aW9uIGhhc24ndCBiZWVuIG1vZGlmaWVkXG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoQXJyYXkuZnJvbSh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpLCBhcmdzLm5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cyA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUpO1xuICAgICAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNlbGVjdCB0aGUgcm93cyB3aXRoaW4gdGhlIG1vZGlmaWVkIGFyZ3MubmV3U2VsZWN0aW9uIHdpdGggbm8gZXZlbnRcbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZVNlbGVjdFJvd3NXaXRoTm9FdmVudChhcmdzLm5ld1NlbGVjdGlvbiwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIHJldHJpZXZlIHRoZSByb3dzIHdoaWNoIHNob3VsZCBiZSBhZGRlZC9yZW1vdmVkIHRvL2Zyb20gdGhlIG9sZCBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZUFkZGVkQW5kUmVtb3ZlZEFyZ3MoYXJnczogYW55KSB7XG4gICAgICAgIGFyZ3MucmVtb3ZlZCA9IGFyZ3Mub2xkU2VsZWN0aW9uLmZpbHRlcih4ID0+IGFyZ3MubmV3U2VsZWN0aW9uLmluZGV4T2YoeCkgPCAwKTtcbiAgICAgICAgYXJncy5hZGRlZCA9IGFyZ3MubmV3U2VsZWN0aW9uLmZpbHRlcih4ID0+IGFyZ3Mub2xkU2VsZWN0aW9uLmluZGV4T2YoeCkgPCAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGRzIHRvIHJvd3NUb0JlUHJvY2Vzc2VkIHNldCBhbGwgdmlzaWJsZSBjaGlsZHJlbiBvZiB0aGUgcm93cyB3aGljaCB3YXMgaW5pdGlhbGx5IHdpdGhpbiB0aGUgcm93c1RvQmVQcm9jZXNzZWQgc2V0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gcm93c1RvQmVQcm9jZXNzZWQgc2V0IG9mIHRoZSByb3dzICh3aXRob3V0IHRoZWlyIHBhcmVudHMvY2hpbGRyZW4pIHRvIGJlIHNlbGVjdGVkL2Rlc2VsZWN0ZWRcbiAgICAgKiBAcGFyYW0gdmlzaWJsZVJvd0lEcyBsaXN0IG9mIGFsbCB2aXNpYmxlIHJvd0lkc1xuICAgICAqIEByZXR1cm5zIGEgbmV3IHNldCB3aXRoIGFsbCBkaXJlY3QgcGFyZW50cyBvZiB0aGUgcm93cyB3aXRoaW4gcm93c1RvQmVQcm9jZXNzZWQgc2V0XG4gICAgICovXG4gICAgcHJpdmF0ZSBjb2xsZWN0Um93c0NoaWxkcmVuQW5kRGlyZWN0UGFyZW50cyhyb3dzVG9CZVByb2Nlc3NlZDogU2V0PGFueT4sIHZpc2libGVSb3dJRHM6IGFueVtdKTogU2V0PGFueT4ge1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRSb3dzUGFyZW50cyA9IG5ldyBTZXQ8YW55PigpO1xuICAgICAgICBBcnJheS5mcm9tKHJvd3NUb0JlUHJvY2Vzc2VkKS5mb3JFYWNoKChyb3dJRCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93VHJlZVJlY29yZCA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yZWNfYnlfaWQocm93SUQpO1xuICAgICAgICAgICAgY29uc3Qgcm93QW5kQWxsQ2hpbGRyZW4gPSB0aGlzLmdldF9hbGxfY2hpbGRyZW4ocm93VHJlZVJlY29yZCk7XG4gICAgICAgICAgICByb3dBbmRBbGxDaGlsZHJlbi5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZpc2libGVSb3dJRHMuaW5kZXhPZihyb3cucm93SUQpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcm93c1RvQmVQcm9jZXNzZWQuYWRkKHJvdy5yb3dJRCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocm93VHJlZVJlY29yZCAmJiByb3dUcmVlUmVjb3JkLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZFJvd3NQYXJlbnRzLmFkZChyb3dUcmVlUmVjb3JkLnBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkUm93c1BhcmVudHM7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBwb3B1bGF0ZXMgdGhlIHJvd3NUb0JlU2VsZWN0ZWQgYW5kIHJvd3NUb0JlSW5kZXRlcm1pbmF0ZSBzZXRzXG4gICAgICogd2l0aCB0aGUgcm93cyB3aGljaCB3aWxsIGJlIGV2ZW50dWFsbHkgaW4gc2VsZWN0ZWQvaW5kZXRlcm1pbmF0ZSBzdGF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY2FsY3VsYXRlUm93c05ld1NlbGVjdGlvblN0YXRlKGFyZ3M6IGFueSkge1xuICAgICAgICB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQgPSBuZXcgU2V0PGFueT4oYXJncy5vbGRTZWxlY3Rpb24gPyBhcmdzLm9sZFNlbGVjdGlvbiA6IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCkpO1xuICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZSA9IG5ldyBTZXQ8YW55Pih0aGlzLmdldEluZGV0ZXJtaW5hdGVSb3dzKCkpO1xuXG4gICAgICAgIGNvbnN0IHZpc2libGVSb3dJRHMgPSB0aGlzLmdldFJvd0lEcyh0aGlzLmFsbERhdGEpO1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBuZXcgU2V0KGFyZ3MucmVtb3ZlZCk7XG4gICAgICAgIGNvbnN0IGFkZGVkID0gbmV3IFNldChhcmdzLmFkZGVkKTtcblxuICAgICAgICBpZiAocmVtb3ZlZCAmJiByZW1vdmVkLnNpemUpIHtcbiAgICAgICAgICAgIGxldCByZW1vdmVkUm93c1BhcmVudHMgPSBuZXcgU2V0PGFueT4oKTtcblxuICAgICAgICAgICAgcmVtb3ZlZFJvd3NQYXJlbnRzID0gdGhpcy5jb2xsZWN0Um93c0NoaWxkcmVuQW5kRGlyZWN0UGFyZW50cyhyZW1vdmVkLCB2aXNpYmxlUm93SURzKTtcblxuICAgICAgICAgICAgcmVtb3ZlZC5mb3JFYWNoKHJlbW92ZWRSb3cgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZC5kZWxldGUocmVtb3ZlZFJvdyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUuZGVsZXRlKHJlbW92ZWRSb3cpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIEFycmF5LmZyb20ocmVtb3ZlZFJvd3NQYXJlbnRzKS5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhcmVudFNlbGVjdGlvblN0YXRlKHBhcmVudCwgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRlZCAmJiBhZGRlZC5zaXplKSB7XG4gICAgICAgICAgICBsZXQgYWRkZWRSb3dzUGFyZW50cyA9IG5ldyBTZXQ8YW55PigpO1xuXG4gICAgICAgICAgICBhZGRlZFJvd3NQYXJlbnRzID0gdGhpcy5jb2xsZWN0Um93c0NoaWxkcmVuQW5kRGlyZWN0UGFyZW50cyhhZGRlZCwgdmlzaWJsZVJvd0lEcyk7XG5cbiAgICAgICAgICAgIGFkZGVkLmZvckVhY2goYWRkZWRSb3cgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZC5hZGQoYWRkZWRSb3cpO1xuICAgICAgICAgICAgICAgIHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZShhZGRlZFJvdyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgQXJyYXkuZnJvbShhZGRlZFJvd3NQYXJlbnRzKS5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhcmVudFNlbGVjdGlvblN0YXRlKHBhcmVudCwgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlY3Vyc2l2ZWx5IGhhbmRsZSB0aGUgc2VsZWN0aW9uIHN0YXRlIG9mIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IHBhcmVudHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZVBhcmVudFNlbGVjdGlvblN0YXRlKHRyZWVSb3c6IElUcmVlR3JpZFJlY29yZCwgdmlzaWJsZVJvd0lEczogYW55W10pIHtcbiAgICAgICAgaWYgKCF0cmVlUm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVSb3dTZWxlY3Rpb25TdGF0ZSh0cmVlUm93LCB2aXNpYmxlUm93SURzKTtcbiAgICAgICAgaWYgKHRyZWVSb3cucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBhcmVudFNlbGVjdGlvblN0YXRlKHRyZWVSb3cucGFyZW50LCB2aXNpYmxlUm93SURzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSB0aGUgc2VsZWN0aW9uIHN0YXRlIG9mIGEgZ2l2ZW4gcm93IGJhc2VkIHRoZSBzZWxlY3Rpb24gc3RhdGVzIG9mIGl0cyBkaXJlY3QgY2hpbGRyZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZVJvd1NlbGVjdGlvblN0YXRlKHRyZWVSb3c6IElUcmVlR3JpZFJlY29yZCwgdmlzaWJsZVJvd0lEczogYW55W10pIHtcbiAgICAgICAgbGV0IHZpc2libGVDaGlsZHJlbiA9IFtdO1xuICAgICAgICBpZiAodHJlZVJvdyAmJiB0cmVlUm93LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICB2aXNpYmxlQ2hpbGRyZW4gPSB0cmVlUm93LmNoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiB2aXNpYmxlUm93SURzLmluZGV4T2YoY2hpbGQucm93SUQpID49IDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2aXNpYmxlQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodmlzaWJsZUNoaWxkcmVuLmV2ZXJ5KHJvdyA9PiB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuaGFzKHJvdy5yb3dJRCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmFkZCh0cmVlUm93LnJvd0lEKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5kZWxldGUodHJlZVJvdy5yb3dJRCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZpc2libGVDaGlsZHJlbi5zb21lKHJvdyA9PiB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuaGFzKHJvdy5yb3dJRCkgfHwgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUuaGFzKHJvdy5yb3dJRCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUuYWRkKHRyZWVSb3cucm93SUQpO1xuICAgICAgICAgICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZC5kZWxldGUodHJlZVJvdy5yb3dJRCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZSh0cmVlUm93LnJvd0lEKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuZGVsZXRlKHRyZWVSb3cucm93SUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGNoaWxkcmVuIG9mIHRoZSByb3cgaGFzIGJlZW4gZGVsZXRlZCBhbmQgdGhlIHJvdyB3YXMgc2VsZWN0ZWQgZG8gbm90IGNoYW5nZSBpdHMgc3RhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUm93U2VsZWN0ZWQodHJlZVJvdy5yb3dJRCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuYWRkKHRyZWVSb3cucm93SUQpO1xuICAgICAgICAgICAgICAgIHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZSh0cmVlUm93LnJvd0lEKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmRlbGV0ZSh0cmVlUm93LnJvd0lEKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5kZWxldGUodHJlZVJvdy5yb3dJRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldF9hbGxfY2hpbGRyZW4ocmVjb3JkOiBJVHJlZUdyaWRSZWNvcmQpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgICAgIGlmIChyZWNvcmQgJiYgcmVjb3JkLmNoaWxkcmVuICYmIHJlY29yZC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgcmVjb3JkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCguLi50aGlzLmdldF9hbGxfY2hpbGRyZW4oY2hpbGQpKTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG5cbiAgICB9XG5cbn1cbiJdfQ==
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLXNlbGVjdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUt6RSxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsdUJBQXVCO0lBSXBFLGtEQUFrRDtJQUMzQyxxQkFBcUIsQ0FBQyxNQUFhLEVBQUUsa0JBQW1CO1FBQzNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUU7WUFDM0UsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlELE9BQU87U0FDVjtRQUNELEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsb0RBQW9EO0lBQzdDLHVCQUF1QixDQUFDLE1BQWE7UUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUU7WUFDOUQsSUFBSSxDQUFDLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLE9BQU87U0FDVjtRQUNELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0scUJBQXFCLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBTTtR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LENBQUMsQ0FBQztnQkFDL0MsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN4QjtTQUNKO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFFcEIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQVUsRUFBRSxNQUFlO1FBQ2pELElBQUksTUFBTSxFQUFFO1lBQ1IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO2FBQU07WUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUM7SUFDTCxDQUFDOzs7WUE3UUosVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElUcmVlR3JpZFJlY29yZCB9IGZyb20gJy4vdHJlZS1ncmlkLmludGVyZmFjZXMnO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFNlbGVjdGlvblNlcnZpY2UgZXh0ZW5kcyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSByb3dzVG9CZVNlbGVjdGVkOiBTZXQ8YW55PjtcbiAgICBwcml2YXRlIHJvd3NUb0JlSW5kZXRlcm1pbmF0ZTogU2V0PGFueT47XG5cbiAgICAvKiogU2VsZWN0IHNwZWNpZmllZCByb3dzLiBObyBldmVudCBpcyBlbWl0dGVkLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5ncmlkICYmIHRoaXMuZ3JpZC5yb3dTZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlQ2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5jYXNjYWRlU2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEcywgY2xlYXJQcmV2U2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5zZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzLCBjbGVhclByZXZTZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCBzcGVjaWZpZWQgcm93cy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd1NlbGVjdGlvbiA9PT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGVDYXNjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmNhc2NhZGVEZXNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5yb3dTZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm11bHRpcGxlQ2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0Q2FzY2FkZVJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUNhc2NhZGVTZWxlY3Rpb25PbkZpbHRlckFuZENSVUQoXG4gICAgICAgIHBhcmVudHM6IFNldDxhbnk+LFxuICAgICAgICBjcnVkUm93SUQ/OiBhbnksXG4gICAgICAgIHZpc2libGVSb3dJRHM6IFNldDxhbnk+ID0gbnVsbCkge1xuICAgICAgICBpZiAodmlzaWJsZVJvd0lEcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHRyZWUgZ3JpZCBoYXMgZmxhdCBzdHJ1Y3R1cmVcbiAgICAgICAgICAgIC8vIGRvIG5vdCBleHBsaWNpdGx5IGhhbmRsZSB0aGUgc2VsZWN0aW9uIHN0YXRlIG9mIHRoZSByb3dzXG4gICAgICAgICAgICBpZiAoIXBhcmVudHMuc2l6ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZpc2libGVSb3dJRHMgPSBuZXcgU2V0KHRoaXMuZ2V0Um93SURzKHRoaXMuYWxsRGF0YSkpO1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkID0gbmV3IFNldCh0aGlzLnJvd1NlbGVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZSA9IG5ldyBTZXQodGhpcy5pbmRldGVybWluYXRlUm93cyk7XG4gICAgICAgICAgICBpZiAoY3J1ZFJvd0lEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uZGVsZXRlKGNydWRSb3dJRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJlbnRzLnNpemUpIHtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cyA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUpO1xuICAgICAgICAgICAgLy8gVE9ETzogZW1pdCBzZWxlY3Rpb25DaGFuZ2VEIGV2ZW50LCBjYWxjdWxhdGUgaXRzIGFyZ3MgdGhyb3VnaCB0aGUgaGFuZGxlQWRkZWRBbmRSZW1vdmVkQXJncyBtZXRob2RcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UGFyZW50cyA9IG5ldyBTZXQ8YW55PigpO1xuICAgICAgICBwYXJlbnRzLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93U2VsZWN0aW9uU3RhdGUocGFyZW50LCB2aXNpYmxlUm93SURzKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnBhcmVudCkge1xuICAgICAgICAgICAgICAgIG5ld1BhcmVudHMuYWRkKHBhcmVudC5wYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVDYXNjYWRlU2VsZWN0aW9uT25GaWx0ZXJBbmRDUlVEKG5ld1BhcmVudHMsIG51bGwsIHZpc2libGVSb3dJRHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FzY2FkZVNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHM6IGFueVtdLCBjbGVhclByZXZTZWxlY3Rpb24/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChjbGVhclByZXZTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVJvd3NOZXdTZWxlY3Rpb25TdGF0ZSh7IGFkZGVkOiByb3dJRHMsIHJlbW92ZWQ6IFtdIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IFsuLi5vbGRTZWxlY3Rpb24sIC4uLnJvd0lEc107XG4gICAgICAgICAgICBjb25zdCBhcmdzID0geyBvbGRTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbiB9O1xuXG4gICAgICAgICAgICAvLyByZXRyaWV2ZSBvbmx5IHRoZSByb3dzIHdpdGhvdXQgdGhlaXIgcGFyZW50cy9jaGlsZHJlbiB3aGljaCBoYXMgdG8gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGlvblxuICAgICAgICAgICAgdGhpcy5oYW5kbGVBZGRlZEFuZFJlbW92ZWRBcmdzKGFyZ3MpO1xuXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVJvd3NOZXdTZWxlY3Rpb25TdGF0ZShhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZVNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cyA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUpO1xuICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXNjYWRlRGVzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBhcmdzID0geyBhZGRlZDogW10sIHJlbW92ZWQ6IHJvd0lEcyB9O1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZVJvd3NOZXdTZWxlY3Rpb25TdGF0ZShhcmdzKTtcblxuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZVNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cyA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUpO1xuICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWxlY3Rpb25TZXJ2aWNlKCk6IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdENhc2NhZGVSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLFxuICAgICAgICAgICAgYWRkZWQsIHJlbW92ZWQsIGV2ZW50LCBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdGVSb3dzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG5cbiAgICAgICAgYXJncy5uZXdTZWxlY3Rpb24gPSBBcnJheS5mcm9tKHRoaXMucm93c1RvQmVTZWxlY3RlZCk7XG5cbiAgICAgICAgLy8gcmV0cmlldmUgcm93cy9wYXJlbnRzL2NoaWxkcmVuIHdoaWNoIGhhcyBiZWVuIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuaGFuZGxlQWRkZWRBbmRSZW1vdmVkQXJncyhhcmdzKTtcblxuICAgICAgICB0aGlzLmdyaWQub25Sb3dTZWxlY3Rpb25DaGFuZ2UuZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGFyZ3MubmV3U2VsZWN0aW9uIGhhc24ndCBiZWVuIG1vZGlmaWVkXG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoQXJyYXkuZnJvbSh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpLCBhcmdzLm5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uID0gbmV3IFNldCh0aGlzLnJvd3NUb0JlU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cyA9IG5ldyBTZXQodGhpcy5yb3dzVG9CZUluZGV0ZXJtaW5hdGUpO1xuICAgICAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNlbGVjdCB0aGUgcm93cyB3aXRoaW4gdGhlIG1vZGlmaWVkIGFyZ3MubmV3U2VsZWN0aW9uIHdpdGggbm8gZXZlbnRcbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZVNlbGVjdFJvd3NXaXRoTm9FdmVudChhcmdzLm5ld1NlbGVjdGlvbiwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIHJldHJpZXZlIHRoZSByb3dzIHdoaWNoIHNob3VsZCBiZSBhZGRlZC9yZW1vdmVkIHRvL2Zyb20gdGhlIG9sZCBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZUFkZGVkQW5kUmVtb3ZlZEFyZ3MoYXJnczogYW55KSB7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvblNldCA9IG5ldyBTZXQoYXJncy5uZXdTZWxlY3Rpb24pO1xuICAgICAgICBjb25zdCBvbGRTZWxlY3Rpb25TZXQgPSBuZXcgU2V0KGFyZ3Mub2xkU2VsZWN0aW9uKTtcbiAgICAgICAgYXJncy5yZW1vdmVkID0gYXJncy5vbGRTZWxlY3Rpb24uZmlsdGVyKHggPT4gIW5ld1NlbGVjdGlvblNldC5oYXMoeCkpO1xuICAgICAgICBhcmdzLmFkZGVkID0gYXJncy5uZXdTZWxlY3Rpb24uZmlsdGVyKHggPT4gIW9sZFNlbGVjdGlvblNldC5oYXMoeCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZHMgdG8gcm93c1RvQmVQcm9jZXNzZWQgc2V0IGFsbCB2aXNpYmxlIGNoaWxkcmVuIG9mIHRoZSByb3dzIHdoaWNoIHdhcyBpbml0aWFsbHkgd2l0aGluIHRoZSByb3dzVG9CZVByb2Nlc3NlZCBzZXRcbiAgICAgKlxuICAgICAqIEBwYXJhbSByb3dzVG9CZVByb2Nlc3NlZCBzZXQgb2YgdGhlIHJvd3MgKHdpdGhvdXQgdGhlaXIgcGFyZW50cy9jaGlsZHJlbikgdG8gYmUgc2VsZWN0ZWQvZGVzZWxlY3RlZFxuICAgICAqIEBwYXJhbSB2aXNpYmxlUm93SURzIGxpc3Qgb2YgYWxsIHZpc2libGUgcm93SWRzXG4gICAgICogQHJldHVybnMgYSBuZXcgc2V0IHdpdGggYWxsIGRpcmVjdCBwYXJlbnRzIG9mIHRoZSByb3dzIHdpdGhpbiByb3dzVG9CZVByb2Nlc3NlZCBzZXRcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbGxlY3RSb3dzQ2hpbGRyZW5BbmREaXJlY3RQYXJlbnRzKHJvd3NUb0JlUHJvY2Vzc2VkOiBTZXQ8YW55PiwgdmlzaWJsZVJvd0lEczogU2V0PGFueT4sIGFkZGluZzogYm9vbGVhbik6IFNldDxhbnk+IHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkUm93c1BhcmVudHMgPSBuZXcgU2V0PGFueT4oKTtcbiAgICAgICAgQXJyYXkuZnJvbShyb3dzVG9CZVByb2Nlc3NlZCkuZm9yRWFjaCgocm93SUQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGVzZWxlY3RSb3cocm93SUQsIGFkZGluZyk7XG4gICAgICAgICAgICBjb25zdCByb3dUcmVlUmVjb3JkID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3JlY19ieV9pZChyb3dJRCk7XG4gICAgICAgICAgICBjb25zdCByb3dBbmRBbGxDaGlsZHJlbiA9IHRoaXMuZ2V0X2FsbF9jaGlsZHJlbihyb3dUcmVlUmVjb3JkKTtcbiAgICAgICAgICAgIHJvd0FuZEFsbENoaWxkcmVuLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmlzaWJsZVJvd0lEcy5oYXMocm93LnJvd0lEKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERlc2VsZWN0Um93KHJvdy5yb3dJRCwgYWRkaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChyb3dUcmVlUmVjb3JkICYmIHJvd1RyZWVSZWNvcmQucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkUm93c1BhcmVudHMuYWRkKHJvd1RyZWVSZWNvcmQucGFyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcm9jZXNzZWRSb3dzUGFyZW50cztcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIHBvcHVsYXRlcyB0aGUgcm93c1RvQmVTZWxlY3RlZCBhbmQgcm93c1RvQmVJbmRldGVybWluYXRlIHNldHNcbiAgICAgKiB3aXRoIHRoZSByb3dzIHdoaWNoIHdpbGwgYmUgZXZlbnR1YWxseSBpbiBzZWxlY3RlZC9pbmRldGVybWluYXRlIHN0YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVSb3dzTmV3U2VsZWN0aW9uU3RhdGUoYXJnczogYW55KSB7XG4gICAgICAgIHRoaXMucm93c1RvQmVTZWxlY3RlZCA9IG5ldyBTZXQ8YW55PihhcmdzLm9sZFNlbGVjdGlvbiA/IGFyZ3Mub2xkU2VsZWN0aW9uIDogdGhpcy5nZXRTZWxlY3RlZFJvd3MoKSk7XG4gICAgICAgIHRoaXMucm93c1RvQmVJbmRldGVybWluYXRlID0gbmV3IFNldDxhbnk+KHRoaXMuZ2V0SW5kZXRlcm1pbmF0ZVJvd3MoKSk7XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZVJvd0lEcyA9IG5ldyBTZXQodGhpcy5nZXRSb3dJRHModGhpcy5hbGxEYXRhKSk7XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IG5ldyBTZXQoYXJncy5yZW1vdmVkKTtcbiAgICAgICAgY29uc3QgYWRkZWQgPSBuZXcgU2V0KGFyZ3MuYWRkZWQpO1xuXG4gICAgICAgIGlmIChyZW1vdmVkICYmIHJlbW92ZWQuc2l6ZSkge1xuICAgICAgICAgICAgbGV0IHJlbW92ZWRSb3dzUGFyZW50cyA9IG5ldyBTZXQ8YW55PigpO1xuXG4gICAgICAgICAgICByZW1vdmVkUm93c1BhcmVudHMgPSB0aGlzLmNvbGxlY3RSb3dzQ2hpbGRyZW5BbmREaXJlY3RQYXJlbnRzKHJlbW92ZWQsIHZpc2libGVSb3dJRHMsIGZhbHNlKTtcblxuICAgICAgICAgICAgQXJyYXkuZnJvbShyZW1vdmVkUm93c1BhcmVudHMpLmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGFyZW50U2VsZWN0aW9uU3RhdGUocGFyZW50LCB2aXNpYmxlUm93SURzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZGVkICYmIGFkZGVkLnNpemUpIHtcbiAgICAgICAgICAgIGxldCBhZGRlZFJvd3NQYXJlbnRzID0gbmV3IFNldDxhbnk+KCk7XG5cbiAgICAgICAgICAgIGFkZGVkUm93c1BhcmVudHMgPSB0aGlzLmNvbGxlY3RSb3dzQ2hpbGRyZW5BbmREaXJlY3RQYXJlbnRzKGFkZGVkLCB2aXNpYmxlUm93SURzLCB0cnVlKTtcblxuICAgICAgICAgICAgQXJyYXkuZnJvbShhZGRlZFJvd3NQYXJlbnRzKS5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhcmVudFNlbGVjdGlvblN0YXRlKHBhcmVudCwgdmlzaWJsZVJvd0lEcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlY3Vyc2l2ZWx5IGhhbmRsZSB0aGUgc2VsZWN0aW9uIHN0YXRlIG9mIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IHBhcmVudHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZVBhcmVudFNlbGVjdGlvblN0YXRlKHRyZWVSb3c6IElUcmVlR3JpZFJlY29yZCwgdmlzaWJsZVJvd0lEczogU2V0PGFueT4pIHtcbiAgICAgICAgaWYgKCF0cmVlUm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVSb3dTZWxlY3Rpb25TdGF0ZSh0cmVlUm93LCB2aXNpYmxlUm93SURzKTtcbiAgICAgICAgaWYgKHRyZWVSb3cucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBhcmVudFNlbGVjdGlvblN0YXRlKHRyZWVSb3cucGFyZW50LCB2aXNpYmxlUm93SURzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSB0aGUgc2VsZWN0aW9uIHN0YXRlIG9mIGEgZ2l2ZW4gcm93IGJhc2VkIHRoZSBzZWxlY3Rpb24gc3RhdGVzIG9mIGl0cyBkaXJlY3QgY2hpbGRyZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZVJvd1NlbGVjdGlvblN0YXRlKHRyZWVSb3c6IElUcmVlR3JpZFJlY29yZCwgdmlzaWJsZVJvd0lEczogU2V0PGFueT4pIHtcbiAgICAgICAgbGV0IHZpc2libGVDaGlsZHJlbiA9IFtdO1xuICAgICAgICBpZiAodHJlZVJvdyAmJiB0cmVlUm93LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICB2aXNpYmxlQ2hpbGRyZW4gPSB0cmVlUm93LmNoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiB2aXNpYmxlUm93SURzLmhhcyhjaGlsZC5yb3dJRCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2aXNpYmxlQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodmlzaWJsZUNoaWxkcmVuLmV2ZXJ5KHJvdyA9PiB0aGlzLnJvd3NUb0JlU2VsZWN0ZWQuaGFzKHJvdy5yb3dJRCkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REZXNlbGVjdFJvdyh0cmVlUm93LnJvd0lELCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmlzaWJsZUNoaWxkcmVuLnNvbWUocm93ID0+IHRoaXMucm93c1RvQmVTZWxlY3RlZC5oYXMocm93LnJvd0lEKSB8fCB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5oYXMocm93LnJvd0lEKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5hZGQodHJlZVJvdy5yb3dJRCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmRlbGV0ZSh0cmVlUm93LnJvd0lEKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REZXNlbGVjdFJvdyh0cmVlUm93LnJvd0lELCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgY2hpbGRyZW4gb2YgdGhlIHJvdyBoYXMgYmVlbiBkZWxldGVkIGFuZCB0aGUgcm93IHdhcyBzZWxlY3RlZCBkbyBub3QgY2hhbmdlIGl0cyBzdGF0ZVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSb3dTZWxlY3RlZCh0cmVlUm93LnJvd0lEKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGVzZWxlY3RSb3codHJlZVJvdy5yb3dJRCwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGVzZWxlY3RSb3codHJlZVJvdy5yb3dJRCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfYWxsX2NoaWxkcmVuKHJlY29yZDogSVRyZWVHcmlkUmVjb3JkKTogYW55W10ge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuICAgICAgICBpZiAocmVjb3JkICYmIHJlY29yZC5jaGlsZHJlbiAmJiByZWNvcmQuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHJlY29yZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goLi4udGhpcy5nZXRfYWxsX2NoaWxkcmVuKGNoaWxkKSk7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3REZXNlbGVjdFJvdyhyb3dJRDogYW55LCBzZWxlY3Q6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmFkZChyb3dJRCk7XG4gICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5kZWxldGUocm93SUQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dzVG9CZVNlbGVjdGVkLmRlbGV0ZShyb3dJRCk7XG4gICAgICAgICAgICB0aGlzLnJvd3NUb0JlSW5kZXRlcm1pbmF0ZS5kZWxldGUocm93SUQpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=
@@ -43547,7 +43547,9 @@ class IgxGridSummaryService {
43547
43547
  this.summaryHeight = 0;
43548
43548
  this.grid._summaryPipeTrigger++;
43549
43549
  if (this.grid.rootSummariesEnabled) {
43550
+ this.grid.summariesHeight = 0;
43550
43551
  this.retriggerRootPipe++;
43552
+ Promise.resolve().then(() => this.grid.notifyChanges(true));
43551
43553
  }
43552
43554
  }
43553
43555
  updateSummaryCache(groupingArgs) {
@@ -59217,7 +59219,7 @@ class IgxTreeGridSelectionService extends IgxGridSelectionService {
59217
59219
  if (!parents.size) {
59218
59220
  return;
59219
59221
  }
59220
- visibleRowIDs = this.getRowIDs(this.allData);
59222
+ visibleRowIDs = new Set(this.getRowIDs(this.allData));
59221
59223
  this.rowsToBeSelected = new Set(this.rowSelection);
59222
59224
  this.rowsToBeIndeterminate = new Set(this.indeterminateRows);
59223
59225
  if (crudRowID) {
@@ -59304,8 +59306,10 @@ class IgxTreeGridSelectionService extends IgxGridSelectionService {
59304
59306
  * retrieve the rows which should be added/removed to/from the old selection
59305
59307
  */
59306
59308
  handleAddedAndRemovedArgs(args) {
59307
- args.removed = args.oldSelection.filter(x => args.newSelection.indexOf(x) < 0);
59308
- args.added = args.newSelection.filter(x => args.oldSelection.indexOf(x) < 0);
59309
+ const newSelectionSet = new Set(args.newSelection);
59310
+ const oldSelectionSet = new Set(args.oldSelection);
59311
+ args.removed = args.oldSelection.filter(x => !newSelectionSet.has(x));
59312
+ args.added = args.newSelection.filter(x => !oldSelectionSet.has(x));
59309
59313
  }
59310
59314
  /**
59311
59315
  * adds to rowsToBeProcessed set all visible children of the rows which was initially within the rowsToBeProcessed set
@@ -59314,14 +59318,15 @@ class IgxTreeGridSelectionService extends IgxGridSelectionService {
59314
59318
  * @param visibleRowIDs list of all visible rowIds
59315
59319
  * @returns a new set with all direct parents of the rows within rowsToBeProcessed set
59316
59320
  */
59317
- collectRowsChildrenAndDirectParents(rowsToBeProcessed, visibleRowIDs) {
59321
+ collectRowsChildrenAndDirectParents(rowsToBeProcessed, visibleRowIDs, adding) {
59318
59322
  const processedRowsParents = new Set();
59319
59323
  Array.from(rowsToBeProcessed).forEach((rowID) => {
59324
+ this.selectDeselectRow(rowID, adding);
59320
59325
  const rowTreeRecord = this.grid.gridAPI.get_rec_by_id(rowID);
59321
59326
  const rowAndAllChildren = this.get_all_children(rowTreeRecord);
59322
59327
  rowAndAllChildren.forEach(row => {
59323
- if (visibleRowIDs.indexOf(row.rowID) >= 0) {
59324
- rowsToBeProcessed.add(row.rowID);
59328
+ if (visibleRowIDs.has(row.rowID)) {
59329
+ this.selectDeselectRow(row.rowID, adding);
59325
59330
  }
59326
59331
  });
59327
59332
  if (rowTreeRecord && rowTreeRecord.parent) {
@@ -59337,27 +59342,19 @@ class IgxTreeGridSelectionService extends IgxGridSelectionService {
59337
59342
  calculateRowsNewSelectionState(args) {
59338
59343
  this.rowsToBeSelected = new Set(args.oldSelection ? args.oldSelection : this.getSelectedRows());
59339
59344
  this.rowsToBeIndeterminate = new Set(this.getIndeterminateRows());
59340
- const visibleRowIDs = this.getRowIDs(this.allData);
59345
+ const visibleRowIDs = new Set(this.getRowIDs(this.allData));
59341
59346
  const removed = new Set(args.removed);
59342
59347
  const added = new Set(args.added);
59343
59348
  if (removed && removed.size) {
59344
59349
  let removedRowsParents = new Set();
59345
- removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs);
59346
- removed.forEach(removedRow => {
59347
- this.rowsToBeSelected.delete(removedRow);
59348
- this.rowsToBeIndeterminate.delete(removedRow);
59349
- });
59350
+ removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs, false);
59350
59351
  Array.from(removedRowsParents).forEach((parent) => {
59351
59352
  this.handleParentSelectionState(parent, visibleRowIDs);
59352
59353
  });
59353
59354
  }
59354
59355
  if (added && added.size) {
59355
59356
  let addedRowsParents = new Set();
59356
- addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs);
59357
- added.forEach(addedRow => {
59358
- this.rowsToBeSelected.add(addedRow);
59359
- this.rowsToBeIndeterminate.delete(addedRow);
59360
- });
59357
+ addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs, true);
59361
59358
  Array.from(addedRowsParents).forEach((parent) => {
59362
59359
  this.handleParentSelectionState(parent, visibleRowIDs);
59363
59360
  });
@@ -59381,31 +59378,27 @@ class IgxTreeGridSelectionService extends IgxGridSelectionService {
59381
59378
  handleRowSelectionState(treeRow, visibleRowIDs) {
59382
59379
  let visibleChildren = [];
59383
59380
  if (treeRow && treeRow.children) {
59384
- visibleChildren = treeRow.children.filter(child => visibleRowIDs.indexOf(child.rowID) >= 0);
59381
+ visibleChildren = treeRow.children.filter(child => visibleRowIDs.has(child.rowID));
59385
59382
  }
59386
59383
  if (visibleChildren.length) {
59387
59384
  if (visibleChildren.every(row => this.rowsToBeSelected.has(row.rowID))) {
59388
- this.rowsToBeSelected.add(treeRow.rowID);
59389
- this.rowsToBeIndeterminate.delete(treeRow.rowID);
59385
+ this.selectDeselectRow(treeRow.rowID, true);
59390
59386
  }
59391
59387
  else if (visibleChildren.some(row => this.rowsToBeSelected.has(row.rowID) || this.rowsToBeIndeterminate.has(row.rowID))) {
59392
59388
  this.rowsToBeIndeterminate.add(treeRow.rowID);
59393
59389
  this.rowsToBeSelected.delete(treeRow.rowID);
59394
59390
  }
59395
59391
  else {
59396
- this.rowsToBeIndeterminate.delete(treeRow.rowID);
59397
- this.rowsToBeSelected.delete(treeRow.rowID);
59392
+ this.selectDeselectRow(treeRow.rowID, false);
59398
59393
  }
59399
59394
  }
59400
59395
  else {
59401
59396
  // if the children of the row has been deleted and the row was selected do not change its state
59402
59397
  if (this.isRowSelected(treeRow.rowID)) {
59403
- this.rowsToBeSelected.add(treeRow.rowID);
59404
- this.rowsToBeIndeterminate.delete(treeRow.rowID);
59398
+ this.selectDeselectRow(treeRow.rowID, true);
59405
59399
  }
59406
59400
  else {
59407
- this.rowsToBeSelected.delete(treeRow.rowID);
59408
- this.rowsToBeIndeterminate.delete(treeRow.rowID);
59401
+ this.selectDeselectRow(treeRow.rowID, false);
59409
59402
  }
59410
59403
  }
59411
59404
  }
@@ -59419,6 +59412,16 @@ class IgxTreeGridSelectionService extends IgxGridSelectionService {
59419
59412
  }
59420
59413
  return children;
59421
59414
  }
59415
+ selectDeselectRow(rowID, select) {
59416
+ if (select) {
59417
+ this.rowsToBeSelected.add(rowID);
59418
+ this.rowsToBeIndeterminate.delete(rowID);
59419
+ }
59420
+ else {
59421
+ this.rowsToBeSelected.delete(rowID);
59422
+ this.rowsToBeIndeterminate.delete(rowID);
59423
+ }
59424
+ }
59422
59425
  }
59423
59426
  IgxTreeGridSelectionService.decorators = [
59424
59427
  { type: Injectable }