taxtank-core 0.33.67 → 0.33.68

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.
@@ -2,6 +2,7 @@ import first from 'lodash/first';
2
2
  import { PropertyEquityChartItem } from './property-equity-chart-item';
3
3
  import { FinancialYear } from '../financial-year';
4
4
  import { PropertyEquityChartTypeEnum } from './property-equity-chart-type.enum';
5
+ import { BankAccountTypeEnum } from '../../db/Enums';
5
6
  // count of years for future values
6
7
  const FORECAST_YEARS = 25;
7
8
  /**
@@ -122,7 +123,8 @@ export class PropertyEquityChartData {
122
123
  * @private
123
124
  */
124
125
  getLoanBalanceByYear(property, year, bankAccounts, loans) {
125
- return bankAccounts.items.reduce((totalSum, bankAccount) => totalSum + (bankAccount.getPropertyPercentage(property.id) * (loans.getByBankAccountId(bankAccount.id)?.getLastPaymentByYear(year)?.totalOwed || 0)), 0);
126
+ const offset = bankAccounts.filterBy('type', BankAccountTypeEnum.OFFSET).getPropertyBalanceAmount(property.id);
127
+ return bankAccounts.items.reduce((totalSum, bankAccount) => totalSum + (bankAccount.getPropertyPercentage(property.id) * (loans.getByBankAccountId(bankAccount.id)?.getLastPaymentByYear(year)?.totalOwed || 0)), 0) - offset;
126
128
  }
127
129
  getMarketValueForPropertyByYear(property, year) {
128
130
  if (new FinancialYear(property.contractDate).year > year) {
@@ -158,4 +160,4 @@ export class PropertyEquityChartData {
158
160
  });
159
161
  }
160
162
  }
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZXF1aXR5LWNoYXJ0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvbW9kZWxzL3Byb3BlcnR5L3Byb3BlcnR5LWVxdWl0eS1jaGFydC1kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQU92RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFJaEYsbUNBQW1DO0FBQ25DLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUUxQjs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFNbEMsWUFDVSxVQUE4QixFQUM5QixVQUF1QyxFQUN2QyxZQUFtQyxFQUNuQyxLQUFxQixFQUNyQixZQUFrQjtRQUpsQixlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixlQUFVLEdBQVYsVUFBVSxDQUE2QjtRQUN2QyxpQkFBWSxHQUFaLFlBQVksQ0FBdUI7UUFDbkMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQU07UUFFMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUM1RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztR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LElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFO1lBQ3hELE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFFRCx3RkFBd0Y7UUFDeEYsT0FBTyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNLLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQTZCLEVBQUUsRUFBRTtZQUNsRCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssQ0FBQyxFQUFFO2dCQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBNkIsRUFBRSxFQUFFO1lBQ2xELElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZmlyc3QgZnJvbSAnbG9kYXNoL2ZpcnN0JztcbmltcG9ydCB7IFByb3BlcnR5RXF1aXR5Q2hhcnRJdGVtIH0gZnJvbSAnLi9wcm9wZXJ0eS1lcXVpdHktY2hhcnQtaXRlbSc7XG5pbXBvcnQge1xuICBCYW5rQWNjb3VudENvbGxlY3Rpb24sXG4gIExvYW5Db2xsZWN0aW9uLFxuICBQcm9wZXJ0eUNvbGxlY3Rpb24sXG4gIFByb3BlcnR5VmFsdWF0aW9uQ29sbGVjdGlvblxufSBmcm9tICcuLi8uLi9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBGaW5hbmNpYWxZZWFyIH0gZnJvbSAnLi4vZmluYW5jaWFsLXllYXInO1xuaW1wb3J0IHsgUHJvcGVydHlFcXVpdHlDaGFydFR5cGVFbnVtIH0gZnJvbSAnLi9wcm9wZXJ0eS1lcXVpdHktY2hhcnQtdHlwZS5lbnVtJztcbmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAnLi9wcm9wZXJ0eSc7XG5pbXBvcnQgeyBCYW5rQWNjb3VudCB9IGZyb20gJy4uL2JhbmsnO1xuXG4vLyBjb3VudCBvZiB5ZWFycyBmb3IgZnV0dXJlIHZhbHVlc1xuY29uc3QgRk9SRUNBU1RfWUVBUlMgPSAyNTtcblxuLyoqXG4gKiBjbGFzcyBjb250YWluIGFjdHVhbCBhbmQgZm9yZWNhc3RlZCBtYXJrZXQgdmFsdWVzIGFuZCBsb2FuIGJhbGFuY2VzIGZvciBwYXNzZWQgcHJvcGVydGllc1xuICogWCBheGlzIC0geWVhcnMgZnJvbSB0aGUgZmlyc3QgYWN0dWFsIGRhdGEgeWVhciB0byB0aGUgbGFzdCBmb3JlY2FzdGVkIHllYXJcbiAqIFkgYXhpcyAtIGFtb3VudHMgb2YgbWFya2V0IHZhbHVlcywgbG9hbiBiYWxhbmNlc1xuICogQWxzbyBvbiBob3ZlciBhcHBlYXIgZXF1aXR5IHBvc2l0aW9ucyBwb2ludFxuICovXG5leHBvcnQgY2xhc3MgUHJvcGVydHlFcXVpdHlDaGFydERhdGEge1xuICAvLyBsaXN0IG9mIGVxdWl0eSBwb3NpdGlvbnMgZm9yIGFsbCB5ZWFycyByYW5nZVxuICBsaXN0OiBQcm9wZXJ0eUVxdWl0eUNoYXJ0SXRlbVtdO1xuICAvLyBjdXJyZW50IGZpbmFuY2lhbCB5ZWFyXG4gIGN1cnJlbnRZZWFyOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwcm9wZXJ0aWVzOiBQcm9wZXJ0eUNvbGxlY3Rpb24sXG4gICAgcHJpdmF0ZSB2YWx1YXRpb25zOiBQcm9wZXJ0eVZhbHVhdGlvbkNvbGxlY3Rpb24sXG4gICAgcHJpdmF0ZSBiYW5rQWNjb3VudHM6IEJhbmtBY2NvdW50Q29sbGVjdGlvbixcbiAgICBwcml2YXRlIGxvYW5zOiBMb2FuQ29sbGVjdGlvbixcbiAgICBwcml2YXRlIHJlZ2lzdGVyRGF0ZTogRGF0ZVxuICApIHtcbiAgICB0aGlzLmJhbmtBY2NvdW50cyA9IGJhbmtBY2NvdW50cy5nZXRMb2FuQW5kT2Zmc2V0QWNjb3VudHMoKTtcbiAgICB0aGlzLmN1cnJlbnRZZWFyID0gbmV3IEZpbmFuY2lhbFllYXIobmV3IERhdGUoKSkueWVhcjtcbiAgICB0aGlzLmluaXRJdGVtcygpO1xuICAgIHRoaXMuYnVpbGRIaXN0b3J5SXRlbXMoKTtcbiAgICB0aGlzLmJ1aWxkQWN0dWFsSXRlbSgpO1xuICAgIHRoaXMuYnVpbGRGb3JlY2FzdGVkSXRlbXMoKTtcbiAgICB0aGlzLmNoZWNrWmVyb0xvYW5CYWxhbmNlKCk7XG4gICAgdGhpcy5jaGVja1plcm9NYXJrZXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBpdGVtcyBsaXN0IGluIGNoYXJ0IHNlcmllcyBmb3JtYXRcbiAgICogQHBhcmFtIHR5cGVcbiAgICovXG4gIGdldENoYXJ0U2VyaWVzKHR5cGU6IFByb3BlcnR5RXF1aXR5Q2hhcnRUeXBlRW51bSk6IG51bWJlcltdW10ge1xuICAgIHJldHVybiB0aGlzLmxpc3QubWFwKChpdGVtOiBQcm9wZXJ0eUVxdWl0eUNoYXJ0SXRlbSkgPT4gaXRlbS5nZXRTZXJpZSh0eXBlKSk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHByZXBhcmVkIGNoYXJ0IGRhdGFcbiAgICovXG4gIGdldENoYXJ0RGF0YSgpOiBvYmplY3RbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdtYXJrZXRWYWx1ZScsXG4gICAgICAgIG5hbWU6ICdNYXJrZXQgVmFsdWUnLFxuICAgICAgICBzZXJpZXM6IHRoaXMuZ2V0Q2hhcnRTZXJpZXMoUHJvcGVydHlFcXVpdHlDaGFydFR5cGVFbnVtLk1BUktFVF9WQUxVRSksXG4gICAgICAgIC8vIGRpc3BsYXkgZnV0dXJlIG1hcmtldCB2YWx1ZSB3aXRoIGRhc2ggbGluZSBhbmQgcGFzdCBtYXJrZXQgdmFsdWUgd2l0aCBzb2xpZCBsaW5lXG4gICAgICAgIHpvbmVzOiBbe1xuICAgICAgICAgIC8vIGxpbmUgc3R5bGUgYWZ0ZXIgY3VycmVudCBjYWxlbmRhciB5ZWFyXG4gICAgICAgICAgdmFsdWU6IHRoaXMuY3VycmVudFllYXIsXG4gICAgICAgICAgZGFzaFN0eWxlOiAnU29saWQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAvLyBkZWZhdWx0IGxpbmUgc3R5bGVcbiAgICAgICAgICBkYXNoU3R5bGU6ICdEYXNoJ1xuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gaWQgdXNlZCB0byBhZGQvcmVtb3ZlIHNlcmllIHRvIGNoYXJ0XG4gICAgICAgIGlkOiAnbG9hbkJhbGFuY2UnLFxuICAgICAgICBuYW1lOiAnTG9hbiBCYWxhbmNlJyxcbiAgICAgICAgc2VyaWVzOiB0aGlzLmdldENoYXJ0U2VyaWVzKFByb3BlcnR5RXF1aXR5Q2hhcnRUeXBlRW51bS5MT0FOX0JBTEFOQ0UpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgZW1wdHkgZXF1aXR5IHBvc2l0aW9uIGl0ZW0gZm9yIGVhY2ggeWVhciBpbiBjb2xsZWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGluaXRJdGVtcygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3QgPSBbXTtcbiAgICBmb3IgKGxldCB5ZWFyOiBudW1iZXIgPSBuZXcgRmluYW5jaWFsWWVhcih0aGlzLnJlZ2lzdGVyRGF0ZSkueWVhciAtIDE7IHllYXIgPD0gKHRoaXMuY3VycmVudFllYXIgKyBGT1JFQ0FTVF9ZRUFSUyk7IHllYXIrKykge1xuICAgICAgdGhpcy5saXN0LnB1c2gobmV3IFByb3BlcnR5RXF1aXR5Q2hhcnRJdGVtKHllYXIpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY29sbGVjdCBlcXVpdHkgcG9zaXRpb24gaXRlbXMgd2l0aCBwYXN0IHZhbHVlcyBmcm9tIHByb3BlcnRpZXMgZm9yZWNhc3RzXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkSGlzdG9yeUl0ZW1zKCk6IHZvaWQge1xuICAgIC8vIGdldCBpdGVtcyBmb3IgcGFzdCBhbmQgY3VycmVudCB5ZWFyc1xuICAgIGNvbnN0IGl0ZW1zOiBQcm9wZXJ0eUVxdWl0eUNoYXJ0SXRlbVtdID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogUHJvcGVydHlFcXVpdHlDaGFydEl0ZW0pID0+IGl0ZW0ueWVhciA8PSB0aGlzLmN1cnJlbnRZZWFyKTtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBQcm9wZXJ0eUVxdWl0eUNoYXJ0SXRlbSkgPT4ge1xuICAgICAgLy8gaW5jcmVhc2UgaXRlbSB2YWx1ZXMgd2l0aCBwcm9wZXJ0eSBhY3R1YWwgZm9yZWNhc3RzIGZvciBpdGVtIHllYXJcbiAgICAgIGl0ZW0ubWFya2V0VmFsdWUgPSB0aGlzLnByb3BlcnRpZXMuaXRlbXMucmVkdWNlKChzdW06IG51bWJlciwgcHJvcGVydHk6IFByb3BlcnR5KTogbnVtYmVyID0+IHN1bSArIHRoaXMuZ2V0TWFya2V0VmFsdWVGb3JQcm9wZXJ0eUJ5WWVhcihwcm9wZXJ0eSwgaXRlbS55ZWFyKSwgMCk7XG5cbiAgICAgIGl0ZW0ubG9hbkJhbGFuY2UgPSBNYXRoLmFicyh0aGlzLnByb3BlcnRpZXMuaXRlbXMucmVkdWNlKChzdW06IG51bWJlciwgcHJvcGVydHk6IFByb3BlcnR5KTogbnVtYmVyID0+IHN1bSArIHRoaXMuZ2V0TG9hbkJhbGFuY2VGb3JQcm9wZXJ0eUJ5WWVhcihwcm9wZXJ0eSwgaXRlbS55ZWFyKSwgMCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBUT0RPIHJlbW92ZSwgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGFjdHVhbCBhbmQgaGlzdG9yeSBjYWxjdWxhdGlvbnNcbiAgICogc2V0IGFjdHVhbCB5ZWFyJ3MgcmVhbCBkYXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQWN0dWFsSXRlbSgpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtOiBQcm9wZXJ0eUVxdWl0eUNoYXJ0SXRlbSA9IHRoaXMubGlzdC5maW5kKChpOiBQcm9wZXJ0eUVxdWl0eUNoYXJ0SXRlbSkgPT4gaS55ZWFyID09PSB0aGlzLmN1cnJlbnRZZWFyKTtcbiAgICBpdGVtLm1hcmtldFZhbHVlID0gdGhpcy52YWx1YXRpb25zLmdldE1hcmtldFZhbHVlKG5ldyBEYXRlKCkpO1xuICAgIGl0ZW0ubG9hbkJhbGFuY2UgPSB0aGlzLnByb3BlcnRpZXMuaXRlbXMucmVkdWNlKChzdW06IG51bWJlciwgcHJvcGVydHk6IFByb3BlcnR5KTogbnVtYmVyID0+IHN1bSArIE1hdGguYWJzKHRoaXMuYmFua0FjY291bnRzLmdldFByb3BlcnR5QmFsYW5jZUFtb3VudChwcm9wZXJ0eS5pZCkpLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb2xsZWN0IGVxdWl0eSBwb3NpdGlvbiBpdGVtcyB3aXRoIGZvcmVjYXN0ZWQgKGZ1dHVyZSkgY2FsY3VsYXRlZCB2YWx1ZXNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRGb3JlY2FzdGVkSXRlbXMoKTogdm9pZCB7XG4gICAgLy8gY2FsY3VsYXRlIGZ1dHVyZSB2YWx1ZXMgZm9yIGFsbCBwcm9wZXJ0aWVzIHNlcGFyYXRlbHlcbiAgICB0aGlzLnByb3BlcnRpZXMuaXRlbXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBtYXJrZXRWYWx1ZSA9IHRoaXMudmFsdWF0aW9ucy5maWx0ZXJCeSgncHJvcGVydHkuaWQnLCBwcm9wZXJ0eS5pZCkuZ2V0TWFya2V0VmFsdWUobmV3IERhdGUoKSk7XG4gICAgICBsZXQgZm9yZWNhc3RlZE1hcmtldFZhbHVlOiBudW1iZXIgPSAocHJvcGVydHkuZ3Jvd3RoUGVyY2VudCAvIDEwMCkgKiBtYXJrZXRWYWx1ZSArIG1hcmtldFZhbHVlO1xuXG4gICAgICAvLyBjYWxjdWxhdGUgZnV0dXJlIHZhbHVlcyBmb3IgZWFjaCBmdXR1cmUgeWVhciBmb3IgY3VycmVudCBoYW5kbGluZyBwcm9wZXJ0eVxuICAgICAgdGhpcy5saXN0XG4gICAgICAgIC5maWx0ZXIoKGl0ZW06IFByb3BlcnR5RXF1aXR5Q2hhcnRJdGVtKSA9PiBpdGVtLnllYXIgPiB0aGlzLmN1cnJlbnRZZWFyKVxuICAgICAgICAuZm9yRWFjaCgoaXRlbTogUHJvcGVydHlFcXVpdHlDaGFydEl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eUJhbmtBY2NvdW50czogQmFua0FjY291bnRDb2xsZWN0aW9uID0gdGhpcy5iYW5rQWNjb3VudHMuZ2V0QnlQcm9wZXJ0eUlkKHByb3BlcnR5LmlkKTtcbiAgICAgICAgICAvLyBpbmNyZWFzZSBsb2FuIGJhbGFuY2UgYW1vdW50IGZvciBoYW5kbGluZyBlcXVpdHkgcG9zaXRpb24gaXRlbVxuICAgICAgICAgIGl0ZW0ubG9hbkJhbGFuY2UgKz0gdGhpcy5nZXRMb2FuQmFsYW5jZUJ5WWVhcihwcm9wZXJ0eSwgaXRlbS55ZWFyLCBwcm9wZXJ0eUJhbmtBY2NvdW50cywgdGhpcy5sb2Fucy5nZXRCeUJhbmtBY2NvdW50c0lkcyhwcm9wZXJ0eUJhbmtBY2NvdW50cy5nZXRJZHMoKSkpO1xuXG4gICAgICAgICAgLy8gaW5jcmVhc2UgbWFya2V0IHZhbHVlIGFtb3VudCBmb3IgaGFuZGxpbmcgZXF1aXR5IHBvc2l0aW9uIGl0ZW1cbiAgICAgICAgICBpdGVtLm1hcmtldFZhbHVlICs9IGZvcmVjYXN0ZWRNYXJrZXRWYWx1ZTtcblxuICAgICAgICAgIC8vIGluY3JlYXNlIGN1cnJlbnQgbWFya2V0IHZhbHVlIGZvcmVjYXN0IGZvciB0aGUgbmV4dCBjeWNsZSBpdGVyYXRpb25cbiAgICAgICAgICBmb3JlY2FzdGVkTWFya2V0VmFsdWUgKz0gZm9yZWNhc3RlZE1hcmtldFZhbHVlICogKHByb3BlcnR5Lmdyb3d0aFBlcmNlbnQgLyAxMDApO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcHJvcGVydHkgbG9hbiBiYWxhbmNlIGJ5IGZpbmFuY2lhbCB5ZWFyXG4gICAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSBpbnN0YW5jZSBmb3IgZmlsdGVyXG4gICAqIEBwYXJhbSB5ZWFyIEZpbmFuY2lhbCB5ZWFyIG51bWJlclxuICAgKiBAcGFyYW0gYmFua0FjY291bnRzIExpc3Qgb2YgYmFuayBhY2NvdW50c1xuICAgKiBAcGFyYW0gbG9hbnMgTGlzdCBvZiBsb2Fuc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRMb2FuQmFsYW5jZUJ5WWVhcihwcm9wZXJ0eTogUHJvcGVydHksIHllYXI6IG51bWJlciwgYmFua0FjY291bnRzOiBCYW5rQWNjb3VudENvbGxlY3Rpb24sIGxvYW5zOiBMb2FuQ29sbGVjdGlvbik6IG51bWJlciB7XG4gICAgcmV0dXJuIGJhbmtBY2NvdW50cy5pdGVtcy5yZWR1Y2UoKHRvdGFsU3VtOiBudW1iZXIsIGJhbmtBY2NvdW50OiBCYW5rQWNjb3VudCk6IG51bWJlciA9PiB0b3RhbFN1bSArIChiYW5rQWNjb3VudC5nZXRQcm9wZXJ0eVBlcmNlbnRhZ2UocHJvcGVydHkuaWQpICogKGxvYW5zLmdldEJ5QmFua0FjY291bnRJZChiYW5rQWNjb3VudC5pZCk/LmdldExhc3RQYXltZW50QnlZZWFyKHllYXIpPy50b3RhbE93ZWQgfHwgMCkpLCAwKTtcbiAgfVxuXG4gIGdldE1hcmtldFZhbHVlRm9yUHJvcGVydHlCeVllYXIocHJvcGVydHk6IFByb3BlcnR5LCB5ZWFyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChuZXcgRmluYW5jaWFsWWVhcihwcm9wZXJ0eS5jb250cmFjdERhdGUpLnllYXIgPiB5ZWFyKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gKHByb3BlcnR5LmdldEZvcmVjYXN0QnlZZWFyKHllYXIpIHx8IGZpcnN0KHByb3BlcnR5LmZvcmVjYXN0cykpLm1hcmtldFZhbHVlO1xuICB9XG5cbiAgZ2V0TG9hbkJhbGFuY2VGb3JQcm9wZXJ0eUJ5WWVhcihwcm9wZXJ0eTogUHJvcGVydHksIHllYXI6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKG5ldyBGaW5hbmNpYWxZZWFyKHByb3BlcnR5LmNvbnRyYWN0RGF0ZSkueWVhciA+IHllYXIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIEBUT0RPIHJlbW92ZSBhZnRlciB0ZXN0cyBgfHwgdGhpcy5iYW5rQWNjb3VudHMuZ2V0UHJvcGVydHlCYWxhbmNlQW1vdW50KHByb3BlcnR5LmlkKWBcbiAgICByZXR1cm4gcHJvcGVydHkuZ2V0Rm9yZWNhc3RCeVllYXIoeWVhcik/LmxvYW5CYWxhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGxvYW4gYmFsYW5jZSBpcyAwIGFuZCBzZXQgaXQgYXMgbnVsbCAodG8gbm90IHRvIGRyYXcgcG9pbnQgb24gdGhlIGNoYXJ0KVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1plcm9Mb2FuQmFsYW5jZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3QuZm9yRWFjaCgoaXRlbTogUHJvcGVydHlFcXVpdHlDaGFydEl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLmxvYW5CYWxhbmNlID09PSAwKSB7XG4gICAgICAgIGl0ZW0ubG9hbkJhbGFuY2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIG1hcmtldCB2YWx1ZSBpcyAwIGFuZCBzZXQgaXQgYXMgbnVsbCAodG8gbm90IHRvIGRyYXcgcG9pbnQgb24gdGhlIGNoYXJ0KVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1plcm9NYXJrZXRWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3QuZm9yRWFjaCgoaXRlbTogUHJvcGVydHlFcXVpdHlDaGFydEl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLm1hcmtldFZhbHVlID09PSAwKSB7XG4gICAgICAgIGl0ZW0ubWFya2V0VmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZXF1aXR5LWNoYXJ0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvbW9kZWxzL3Byb3BlcnR5L3Byb3BlcnR5LWVxdWl0eS1jaGFydC1kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQU92RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHaEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckQsbUNBQW1DO0FBQ25DLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUUxQjs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFNbEMsWUFDVSxVQUE4QixFQUM5QixVQUF1QyxFQUN2QyxZQUFtQyxFQUNuQyxLQUFxQixFQUNyQixZQUFrQjtRQUpsQixlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixlQUFVLEdBQVYsVUFBVSxDQUE2QjtRQUN2QyxpQkFBWSxHQUFaLFlBQVksQ0FBdUI7UUFDbkMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQU07UUFFMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUM1RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFl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QUFDLENBQUM7U0FDVjtRQUVELE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUNyRixDQUFDO0lBRUQsK0JBQStCLENBQUMsUUFBa0IsRUFBRSxJQUFZO1FBQzlELElBQUksSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUU7WUFDeEQsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUVELHdGQUF3RjtRQUN4RixPQUFPLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBNkIsRUFBRSxFQUFFO1lBQ2xELElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUE2QixFQUFFLEVBQUU7WUFDbEQsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDekI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmaXJzdCBmcm9tICdsb2Rhc2gvZmlyc3QnO1xuaW1wb3J0IHsgUHJvcGVydHlFcXVpdHlDaGFydEl0ZW0gfSBmcm9tICcuL3Byb3BlcnR5LWVxdWl0eS1jaGFydC1pdGVtJztcbmltcG9ydCB7XG4gIEJhbmtBY2NvdW50Q29sbGVjdGlvbixcbiAgTG9hbkNvbGxlY3Rpb24sXG4gIFByb3BlcnR5Q29sbGVjdGlvbixcbiAgUHJvcGVydHlWYWx1YXRpb25Db2xsZWN0aW9uXG59IGZyb20gJy4uLy4uL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEZpbmFuY2lhbFllYXIgfSBmcm9tICcuLi9maW5hbmNpYWwteWVhcic7XG5pbXBvcnQgeyBQcm9wZXJ0eUVxdWl0eUNoYXJ0VHlwZUVudW0gfSBmcm9tICcuL3Byb3BlcnR5LWVxdWl0eS1jaGFydC10eXBlLmVudW0nO1xuaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tICcuL3Byb3BlcnR5JztcbmltcG9ydCB7IEJhbmtBY2NvdW50IH0gZnJvbSAnLi4vYmFuayc7XG5pbXBvcnQgeyBCYW5rQWNjb3VudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vZGIvRW51bXMnO1xuXG4vLyBjb3VudCBvZiB5ZWFycyBmb3IgZnV0dXJlIHZhbHVlc1xuY29uc3QgRk9SRUNBU1RfWUVBUlMgPSAyNTtcblxuLyoqXG4gKiBjbGFzcyBjb250YWluIGFjdHVhbCBhbmQgZm9yZWNhc3RlZCBtYXJrZXQgdmFsdWVzIGFuZCBsb2FuIGJhbGFuY2VzIGZvciBwYXNzZWQgcHJvcGVydGllc1xuICogWCBheGlzIC0geWVhcnMgZnJvbSB0aGUgZmlyc3QgYWN0dWFsIGRhdGEgeWVhciB0byB0aGUgbGFzdCBmb3JlY2FzdGVkIHllYXJcbiAqIFkgYXhpcyAtIGFtb3VudHMgb2YgbWFya2V0IHZhbHVlcywgbG9hbiBiYWxhbmNlc1xuICogQWxzbyBvbiBob3ZlciBhcHBlYXIgZXF1aXR5IHBvc2l0aW9ucyBwb2ludFxuICovXG5leHBvcnQgY2xhc3MgUHJvcGVydHlFcXVpdHlDaGFydERhdGEge1xuICAvLyBsaXN0IG9mIGVxdWl0eSBwb3NpdGlvbnMgZm9yIGFsbCB5ZWFycyByYW5nZVxuICBsaXN0OiBQcm9wZXJ0eUVxdWl0eUNoYXJ0SXRlbVtdO1xuICAvLyBjdXJyZW50IGZpbmFuY2lhbCB5ZWFyXG4gIGN1cnJlbnRZZWFyOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwcm9wZXJ0aWVzOiBQcm9wZXJ0eUNvbGxlY3Rpb24sXG4gICAgcHJpdmF0ZSB2YWx1YXRpb25zOiBQcm9wZXJ0eVZhbHVhdGlvbkNvbGxlY3Rpb24sXG4gICAgcHJpdmF0ZSBiYW5rQWNjb3VudHM6IEJhbmtBY2NvdW50Q29sbGVjdGlvbixcbiAgICBwcml2YXRlIGxvYW5zOiBMb2FuQ29sbGVjdGlvbixcbiAgICBwcml2YXRlIHJlZ2lzdGVyRGF0ZTogRGF0ZVxuICApIHtcbiAgICB0aGlzLmJhbmtBY2NvdW50cyA9IGJhbmtBY2NvdW50cy5nZXRMb2FuQW5kT2Zmc2V0QWNjb3VudHMoKTtcbiAgICB0aGlzLmN1cnJlbnRZZWFyID0gbmV3IEZpbmFuY2lhbFllYXIobmV3IERhdGUoKSkueWVhcjtcbiAgICB0aGlzLmluaXRJdGVtcygpO1xuICAgIHRoaXMuYnVpbGRIaXN0b3J5SXRlbXMoKTtcbiAgICB0aGlzLmJ1aWxkQWN0dWFsSXRlbSgpO1xuICAgIHRoaXMuYnVpbGRGb3JlY2FzdGVkSXRlbXMoKTtcbiAgICB0aGlzLmNoZWNrWmVyb0xvYW5CYWxhbmNlKCk7XG4gICAgdGhpcy5jaGVja1plcm9NYXJrZXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBpdGVtcyBsaXN0IGluIGNoYXJ0IHNlcmllcyBmb3JtYXRcbiAgICogQHBhcmFtIHR5cGVcbiAgICovXG4gIGdldENoYXJ0U2VyaWVzKHR5cGU6IFByb3BlcnR5RXF1aXR5Q2hhcnRUeXBlRW51bSk6IG51bWJlcltdW10ge1xuICAgIHJldHVybiB0aGlzLmxpc3QubWFwKChpdGVtOiBQcm9wZXJ0eUVxdWl0eUNoYXJ0SXRlbSkgPT4gaXRlbS5nZXRTZXJpZSh0eXBlKSk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHByZXBhcmVkIGNoYXJ0IGRhdGFcbiAgICovXG4gIGdldENoYXJ0RGF0YSgpOiBvYmplY3RbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdtYXJrZXRWYWx1ZScsXG4gICAgICAgIG5hbWU6ICdNYXJrZXQgVmFsdWUnLFxuICAgICAgICBzZXJpZXM6IHRoaXMuZ2V0Q2hhcnRTZXJpZXMoUHJvcGVydHlFcXVpdHlDaGFydFR5cGVFbnVtLk1BUktFVF9WQUxVRSksXG4gICAgICAgIC8vIGRpc3BsYXkgZnV0dXJlIG1hcmtldCB2YWx1ZSB3aXRoIGRhc2ggbGluZSBhbmQgcGFzdCBtYXJrZXQgdmFsdWUgd2l0aCBzb2xpZCBsaW5lXG4gICAgICAgIHpvbmVzOiBbe1xuICAgICAgICAgIC8vIGxpbmUgc3R5bGUgYWZ0ZXIgY3VycmVudCBjYWxlbmRhciB5ZWFyXG4gICAgICAgICAgdmFsdWU6IHRoaXMuY3VycmVudFllYXIsXG4gICAgICAgICAgZGFzaFN0eWxlOiAnU29saWQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAvLyBkZWZhdWx0IGxpbmUgc3R5bGVcbiAgICAgICAgICBkYXNoU3R5bGU6ICdEYXNoJ1xuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gaWQgdXNlZCB0byBhZGQvcmVtb3ZlIHNlcmllIHRvIGNoYXJ0XG4gICAgICAgIGlkOiAnbG9hbkJhbGFuY2UnLFxuICAgICAgICBuYW1lOiAnTG9hbiBCYWxhbmNlJyxcbiAgICAgICAgc2VyaWVzOiB0aGlzLmdldENoYXJ0U2VyaWVzKFByb3BlcnR5RXF1aXR5Q2hhcnRUeXBlRW51bS5MT0FOX0JBTEFOQ0UpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGUgZW1wdHkgZXF1aXR5IHBvc2l0aW9uIGl0ZW0gZm9yIGVhY2ggeWVhciBpbiBjb2xsZWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGluaXRJdGVtcygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3QgPSBbXTtcbiAgICBmb3IgKGxldCB5ZWFyOiBudW1iZXIgPSBuZXcgRmluYW5jaWFsWWVhcih0aGlzLnJlZ2lzdGVyRGF0ZSkueWVhciAtIDE7IHllYXIgPD0gKHRoaXMuY3VycmVudFllYXIgKyBGT1JFQ0FTVF9ZRUFSUyk7IHllYXIrKykge1xuICAgICAgdGhpcy5saXN0LnB1c2gobmV3IFByb3BlcnR5RXF1aXR5Q2hhcnRJdGVtKHllYXIpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY29sbGVjdCBlcXVpdHkgcG9zaXRpb24gaXRlbXMgd2l0aCBwYXN0IHZhbHVlcyBmcm9tIHByb3BlcnRpZXMgZm9yZWNhc3RzXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkSGlzdG9yeUl0ZW1zKCk6IHZvaWQge1xuICAgIC8vIGdldCBpdGVtcyBmb3IgcGFzdCBhbmQgY3VycmVudCB5ZWFyc1xuICAgIGNvbnN0IGl0ZW1zOiBQcm9wZXJ0eUVxdWl0eUNoYXJ0SXRlbVtdID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogUHJvcGVydHlFcXVpdHlDaGFydEl0ZW0pID0+IGl0ZW0ueWVhciA8PSB0aGlzLmN1cnJlbnRZZWFyKTtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBQcm9wZXJ0eUVxdWl0eUNoYXJ0SXRlbSkgPT4ge1xuICAgICAgLy8gaW5jcmVhc2UgaXRlbSB2YWx1ZXMgd2l0aCBwcm9wZXJ0eSBhY3R1YWwgZm9yZWNhc3RzIGZvciBpdGVtIHllYXJcbiAgICAgIGl0ZW0ubWFya2V0VmFsdWUgPSB0aGlzLnByb3BlcnRpZXMuaXRlbXMucmVkdWNlKChzdW06IG51bWJlciwgcHJvcGVydHk6IFByb3BlcnR5KTogbnVtYmVyID0+IHN1bSArIHRoaXMuZ2V0TWFya2V0VmFsdWVGb3JQcm9wZXJ0eUJ5WWVhcihwcm9wZXJ0eSwgaXRlbS55ZWFyKSwgMCk7XG5cbiAgICAgIGl0ZW0ubG9hbkJhbGFuY2UgPSBNYXRoLmFicyh0aGlzLnByb3BlcnRpZXMuaXRlbXMucmVkdWNlKChzdW06IG51bWJlciwgcHJvcGVydHk6IFByb3BlcnR5KTogbnVtYmVyID0+IHN1bSArIHRoaXMuZ2V0TG9hbkJhbGFuY2VGb3JQcm9wZXJ0eUJ5WWVhcihwcm9wZXJ0eSwgaXRlbS55ZWFyKSwgMCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBUT0RPIHJlbW92ZSwgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGFjdHVhbCBhbmQgaGlzdG9yeSBjYWxjdWxhdGlvbnNcbiAgICogc2V0IGFjdHVhbCB5ZWFyJ3MgcmVhbCBkYXRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQWN0dWFsSXRlbSgpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtOiBQcm9wZXJ0eUVxdWl0eUNoYXJ0SXRlbSA9IHRoaXMubGlzdC5maW5kKChpOiBQcm9wZXJ0eUVxdWl0eUNoYXJ0SXRlbSkgPT4gaS55ZWFyID09PSB0aGlzLmN1cnJlbnRZZWFyKTtcbiAgICBpdGVtLm1hcmtldFZhbHVlID0gdGhpcy52YWx1YXRpb25zLmdldE1hcmtldFZhbHVlKG5ldyBEYXRlKCkpO1xuICAgIGl0ZW0ubG9hbkJhbGFuY2UgPSB0aGlzLnByb3BlcnRpZXMuaXRlbXMucmVkdWNlKChzdW06IG51bWJlciwgcHJvcGVydHk6IFByb3BlcnR5KTogbnVtYmVyID0+IHN1bSArIE1hdGguYWJzKHRoaXMuYmFua0FjY291bnRzLmdldFByb3BlcnR5QmFsYW5jZUFtb3VudChwcm9wZXJ0eS5pZCkpLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb2xsZWN0IGVxdWl0eSBwb3NpdGlvbiBpdGVtcyB3aXRoIGZvcmVjYXN0ZWQgKGZ1dHVyZSkgY2FsY3VsYXRlZCB2YWx1ZXNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRGb3JlY2FzdGVkSXRlbXMoKTogdm9pZCB7XG4gICAgLy8gY2FsY3VsYXRlIGZ1dHVyZSB2YWx1ZXMgZm9yIGFsbCBwcm9wZXJ0aWVzIHNlcGFyYXRlbHlcbiAgICB0aGlzLnByb3BlcnRpZXMuaXRlbXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG4gICAgICBjb25zdCBtYXJrZXRWYWx1ZSA9IHRoaXMudmFsdWF0aW9ucy5maWx0ZXJCeSgncHJvcGVydHkuaWQnLCBwcm9wZXJ0eS5pZCkuZ2V0TWFya2V0VmFsdWUobmV3IERhdGUoKSk7XG4gICAgICBsZXQgZm9yZWNhc3RlZE1hcmtldFZhbHVlOiBudW1iZXIgPSAocHJvcGVydHkuZ3Jvd3RoUGVyY2VudCAvIDEwMCkgKiBtYXJrZXRWYWx1ZSArIG1hcmtldFZhbHVlO1xuXG4gICAgICAvLyBjYWxjdWxhdGUgZnV0dXJlIHZhbHVlcyBmb3IgZWFjaCBmdXR1cmUgeWVhciBmb3IgY3VycmVudCBoYW5kbGluZyBwcm9wZXJ0eVxuICAgICAgdGhpcy5saXN0XG4gICAgICAgIC5maWx0ZXIoKGl0ZW06IFByb3BlcnR5RXF1aXR5Q2hhcnRJdGVtKSA9PiBpdGVtLnllYXIgPiB0aGlzLmN1cnJlbnRZZWFyKVxuICAgICAgICAuZm9yRWFjaCgoaXRlbTogUHJvcGVydHlFcXVpdHlDaGFydEl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eUJhbmtBY2NvdW50czogQmFua0FjY291bnRDb2xsZWN0aW9uID0gdGhpcy5iYW5rQWNjb3VudHMuZ2V0QnlQcm9wZXJ0eUlkKHByb3BlcnR5LmlkKTtcbiAgICAgICAgICAvLyBpbmNyZWFzZSBsb2FuIGJhbGFuY2UgYW1vdW50IGZvciBoYW5kbGluZyBlcXVpdHkgcG9zaXRpb24gaXRlbVxuICAgICAgICAgIGl0ZW0ubG9hbkJhbGFuY2UgKz0gdGhpcy5nZXRMb2FuQmFsYW5jZUJ5WWVhcihwcm9wZXJ0eSwgaXRlbS55ZWFyLCBwcm9wZXJ0eUJhbmtBY2NvdW50cywgdGhpcy5sb2Fucy5nZXRCeUJhbmtBY2NvdW50c0lkcyhwcm9wZXJ0eUJhbmtBY2NvdW50cy5nZXRJZHMoKSkpO1xuXG4gICAgICAgICAgLy8gaW5jcmVhc2UgbWFya2V0IHZhbHVlIGFtb3VudCBmb3IgaGFuZGxpbmcgZXF1aXR5IHBvc2l0aW9uIGl0ZW1cbiAgICAgICAgICBpdGVtLm1hcmtldFZhbHVlICs9IGZvcmVjYXN0ZWRNYXJrZXRWYWx1ZTtcblxuICAgICAgICAgIC8vIGluY3JlYXNlIGN1cnJlbnQgbWFya2V0IHZhbHVlIGZvcmVjYXN0IGZvciB0aGUgbmV4dCBjeWNsZSBpdGVyYXRpb25cbiAgICAgICAgICBmb3JlY2FzdGVkTWFya2V0VmFsdWUgKz0gZm9yZWNhc3RlZE1hcmtldFZhbHVlICogKHByb3BlcnR5Lmdyb3d0aFBlcmNlbnQgLyAxMDApO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcHJvcGVydHkgbG9hbiBiYWxhbmNlIGJ5IGZpbmFuY2lhbCB5ZWFyXG4gICAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSBpbnN0YW5jZSBmb3IgZmlsdGVyXG4gICAqIEBwYXJhbSB5ZWFyIEZpbmFuY2lhbCB5ZWFyIG51bWJlclxuICAgKiBAcGFyYW0gYmFua0FjY291bnRzIExpc3Qgb2YgYmFuayBhY2NvdW50c1xuICAgKiBAcGFyYW0gbG9hbnMgTGlzdCBvZiBsb2Fuc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRMb2FuQmFsYW5jZUJ5WWVhcihwcm9wZXJ0eTogUHJvcGVydHksIHllYXI6IG51bWJlciwgYmFua0FjY291bnRzOiBCYW5rQWNjb3VudENvbGxlY3Rpb24sIGxvYW5zOiBMb2FuQ29sbGVjdGlvbik6IG51bWJlciB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gYmFua0FjY291bnRzLmZpbHRlckJ5KCd0eXBlJywgQmFua0FjY291bnRUeXBlRW51bS5PRkZTRVQpLmdldFByb3BlcnR5QmFsYW5jZUFtb3VudChwcm9wZXJ0eS5pZCk7XG5cbiAgICByZXR1cm4gYmFua0FjY291bnRzLml0ZW1zLnJlZHVjZSgodG90YWxTdW06IG51bWJlciwgYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KSA9PiB0b3RhbFN1bSArIChiYW5rQWNjb3VudC5nZXRQcm9wZXJ0eVBlcmNlbnRhZ2UocHJvcGVydHkuaWQpICogKGxvYW5zLmdldEJ5QmFua0FjY291bnRJZChiYW5rQWNjb3VudC5pZCk/LmdldExhc3RQYXltZW50QnlZZWFyKHllYXIpPy50b3RhbE93ZWQgfHwgMCkpLCAwKSAtIG9mZnNldDtcbiAgfVxuXG4gIGdldE1hcmtldFZhbHVlRm9yUHJvcGVydHlCeVllYXIocHJvcGVydHk6IFByb3BlcnR5LCB5ZWFyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChuZXcgRmluYW5jaWFsWWVhcihwcm9wZXJ0eS5jb250cmFjdERhdGUpLnllYXIgPiB5ZWFyKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gKHByb3BlcnR5LmdldEZvcmVjYXN0QnlZZWFyKHllYXIpIHx8IGZpcnN0KHByb3BlcnR5LmZvcmVjYXN0cykpLm1hcmtldFZhbHVlO1xuICB9XG5cbiAgZ2V0TG9hbkJhbGFuY2VGb3JQcm9wZXJ0eUJ5WWVhcihwcm9wZXJ0eTogUHJvcGVydHksIHllYXI6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKG5ldyBGaW5hbmNpYWxZZWFyKHByb3BlcnR5LmNvbnRyYWN0RGF0ZSkueWVhciA+IHllYXIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIEBUT0RPIHJlbW92ZSBhZnRlciB0ZXN0cyBgfHwgdGhpcy5iYW5rQWNjb3VudHMuZ2V0UHJvcGVydHlCYWxhbmNlQW1vdW50KHByb3BlcnR5LmlkKWBcbiAgICByZXR1cm4gcHJvcGVydHkuZ2V0Rm9yZWNhc3RCeVllYXIoeWVhcik/LmxvYW5CYWxhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGxvYW4gYmFsYW5jZSBpcyAwIGFuZCBzZXQgaXQgYXMgbnVsbCAodG8gbm90IHRvIGRyYXcgcG9pbnQgb24gdGhlIGNoYXJ0KVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1plcm9Mb2FuQmFsYW5jZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3QuZm9yRWFjaCgoaXRlbTogUHJvcGVydHlFcXVpdHlDaGFydEl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLmxvYW5CYWxhbmNlID09PSAwKSB7XG4gICAgICAgIGl0ZW0ubG9hbkJhbGFuY2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIG1hcmtldCB2YWx1ZSBpcyAwIGFuZCBzZXQgaXQgYXMgbnVsbCAodG8gbm90IHRvIGRyYXcgcG9pbnQgb24gdGhlIGNoYXJ0KVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1plcm9NYXJrZXRWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3QuZm9yRWFjaCgoaXRlbTogUHJvcGVydHlFcXVpdHlDaGFydEl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLm1hcmtldFZhbHVlID09PSAwKSB7XG4gICAgICAgIGl0ZW0ubWFya2V0VmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -39,14 +39,7 @@ export class TransactionService extends RestService {
39
39
  this.listenNotifications();
40
40
  }
41
41
  get(path = this.apiUrl) {
42
- return super.get(path).pipe(map(transactions => {
43
- transactions.forEach((transaction) => {
44
- transaction.transactions = transactions
45
- // get list of child transactions
46
- .filter((t) => t.parentTransaction && t.parentTransaction.id === transaction.id);
47
- });
48
- return transactions;
49
- }));
42
+ return super.get(path).pipe(map(transactions => this.groupByParent(transactions)));
50
43
  }
51
44
  getCurrentYear() {
52
45
  return super.get().pipe(map((transactions) => new TransactionCollection(transactions).filterByFinancialYear('date').toArray()));
@@ -85,7 +78,15 @@ export class TransactionService extends RestService {
85
78
  return this.fetch(`${this.environment.apiV2}/properties/${propertyId}/holding-costs`, false);
86
79
  }
87
80
  getWithoutTaxFreeProperty() {
88
- return this.fetch(`${this.apiUrl}?excludeTaxFreePropertyCategories`, false);
81
+ return this.fetch(`${this.apiUrl}?excludeTaxFreePropertyCategories`, false).pipe(map(transactions => this.groupByParent(transactions)));
82
+ }
83
+ groupByParent(transactions) {
84
+ transactions.forEach((transaction) => {
85
+ transaction.transactions = transactions
86
+ // get list of child transactions
87
+ .filter((t) => t.parentTransaction && t.parentTransaction.id === transaction.id);
88
+ });
89
+ return transactions;
89
90
  }
90
91
  /**
91
92
  * get list of taxable transactions with tank type 'Work'
@@ -269,4 +270,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
269
270
  type: Inject,
270
271
  args: ['environment']
271
272
  }] }] });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDeEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUM5QixhQUFhLEVBQzNCLFdBQVcsRUFDWCxZQUFZLEVBQ2IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFJdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0FBRTdEOztHQUVHO0FBSUgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFdBQXlDO0lBTS9FLFlBQ1ksSUFBZ0IsRUFDaEIsc0JBQThDLEVBQ3ZCLFdBQWdCO1FBRWpELEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUpULFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN2QixnQkFB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QyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO2FBQ1Q7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBelRVLGtCQUFrQixrRkFTbkIsYUFBYTttSEFUWixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBVUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uQmFzZSB9IGZyb20gJy4uLy4uLy4uL2RiL01vZGVscy90cmFuc2FjdGlvbi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyByZXBsYWNlIH0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zL2FycmF5JztcbmltcG9ydCB7IFRyYW5zYWN0aW9uT3BlcmF0aW9uRW51bSB9IGZyb20gJy4uLy4uLy4uL2RiL0VudW1zL3RyYW5zYWN0aW9uLW9wZXJhdGlvbi5lbnVtJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzdC9yZXN0LW9sZC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFwcEV2ZW50LFxuICBBcHBFdmVudFR5cGVFbnVtLFxuICBEZXByZWNpYXRpb24sIEhvbWVPZmZpY2VDbGFpbSwgSG9tZU9mZmljZUxvZyxcbiAgTm90aWZpY2F0aW9uLCBQcm9wZXJ0eVNoYXJlLFxuICBUcmFuc2FjdGlvbixcbiAgVmVoaWNsZUNsYWltXG59IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9ldmVudCc7XG5pbXBvcnQgeyBJRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgY2xhc3NUb1BsYWluIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgVXNlckV2ZW50VHlwZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vZGIvRW51bXMvdXNlci1ldmVudC10eXBlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkNvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb2xsZWN0aW9ucyc7XG5cbi8qKlxuICogU2VydmljZSBmb3IgdHJhbnNhY3Rpb25zIGJ1c2luZXNzIGxvZ2ljXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uU2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPFRyYW5zYWN0aW9uQmFzZSwgVHJhbnNhY3Rpb24+IGltcGxlbWVudHMgSUV2ZW50TGlzdGVuZXIge1xuICAvLyB1cmwgcGFydCBmb3IgVHJhbnNhY3Rpb24gQVBJXG4gIHVybCA9ICd0cmFuc2FjdGlvbnMnO1xuICBtb2RlbENsYXNzID0gVHJhbnNhY3Rpb247XG4gIHRyYW5zYWN0aW9uRGVsZXRlZDogRXZlbnRFbWl0dGVyPFRyYW5zYWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJhbnNhY3Rpb24+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IGFueSxcbiAgKSB7XG4gICAgc3VwZXIoZW52aXJvbm1lbnQpO1xuICAgIHRoaXMubGlzdGVuRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGV2ZW50cyBmcm9tIEV2ZW50IERpc3BhdGNoZXIgc2VydmljZXNcbiAgICovXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24yKFByb3BlcnR5U2hhcmUuZ2V0RXZlbnROYW1lKCdwdXQnKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaENhY2hlKCkpO1xuICAgIHRoaXMubGlzdGVuRGVwcmVjaWF0aW9uQ2hhbmdlKCk7XG4gICAgdGhpcy5saXN0ZW5WZWhpY2xlQ2xhaW1DaGFuZ2VzKCk7XG4gICAgdGhpcy5saXN0ZW5Ib21lT2ZmaWNlQ2xhaW0oKTtcbiAgICB0aGlzLmxpc3RlbkhvbWVPZmZpY2VMb2coKTtcbiAgICB0aGlzLmxpc3RlblByb3BlcnR5Rm9yZWNhc3RVcGRhdGUoKTtcbiAgICB0aGlzLmxpc3Rlbk5vdGlmaWNhdGlvbnMoKTtcbiAgfVxuXG4gIGdldChwYXRoID0gdGhpcy5hcGlVcmwpOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uW10+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0KHBhdGgpLnBpcGUoXG4gICAgICBtYXAodHJhbnNhY3Rpb25zID0+IHtcbiAgICAgICAgdHJhbnNhY3Rpb25zLmZvckVhY2goKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IHZvaWQgPT4ge1xuICAgICAgICAgIHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9ucyA9IHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgLy8gZ2V0IGxpc3Qgb2YgY2hpbGQgdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICAuZmlsdGVyKCh0OiBUcmFuc2FjdGlvbik6IGJvb2xlYW4gPT4gdC5wYXJlbnRUcmFuc2FjdGlvbiAmJiB0LnBhcmVudFRyYW5zYWN0aW9uLmlkID09PSB0cmFuc2FjdGlvbi5pZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0cmFuc2FjdGlvbnM7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGdldEN1cnJlbnRZZWFyKCk6IE9ic2VydmFibGU8VHJhbnNhY3Rpb25bXT4ge1xuICAgIHJldHVybiBzdXBlci5nZXQoKS5waXBlKFxuICAgICAgbWFwKCh0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uW10pOiBUcmFuc2FjdGlvbltdID0+IG5ldyBUcmFuc2FjdGlvbkNvbGxlY3Rpb24odHJhbnNhY3Rpb25zKS5maWx0ZXJCeUZpbmFuY2lhbFllYXIoJ2RhdGUnKS50b0FycmF5KCkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgc2luZ2xlIG5ldyB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gbW9kZWwgTmV3IFRyYW5zYWN0aW9uIGluc3RhbmNlIGZvciBzYXZpbmdcbiAgICovXG4gIGFkZChtb2RlbDogVHJhbnNhY3Rpb24pOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uPiB7XG4gICAgLy8gd2UgZG9uJ3QgaGF2ZSBQT1NUIEFQSSBlbmRwb2ludCBmb3Igc2luZ2xlIHRyYW5zYWN0aW9uXG4gICAgcmV0dXJuIHRoaXMuYWRkQmF0Y2goW21vZGVsXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKG5ld1RyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25bXSk6IFRyYW5zYWN0aW9uID0+IHtcbiAgICAgICAgICAvLyBAVE9ETyBhbGV4XG4gICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKFxuICAgICAgICAgICAgbmV3IEFwcEV2ZW50PFRyYW5zYWN0aW9uPihBcHBFdmVudFR5cGVFbnVtLlRSQU5TQUNUSU9OX0NSRUFURUQsIG5ld1RyYW5zYWN0aW9uc1swXSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIG5ld1RyYW5zYWN0aW9uc1swXTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRyYW5zYWN0aW9ucyByZWxhdGVkIHdpdGggcHJvcGVydHlcbiAgICovXG4gIGdldEJ5UHJvcGVydHlJZChwcm9wZXJ0eUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50WWVhcigpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uW10pOiBUcmFuc2FjdGlvbltdID0+IHRyYW5zYWN0aW9ucy5maWx0ZXIoKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IGJvb2xlYW4gPT4gdHJhbnNhY3Rpb24ucHJvcGVydHk/LmlkID09PSBwcm9wZXJ0eUlkKSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGxpc3Qgb2YgdHJhbnNhY3Rpb25zIHdpdGggdGFuayB0eXBlICdXb3JrJ1xuICAgKi9cbiAgZ2V0V29ya1RyYW5zYWN0aW9ucygpOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50WWVhcigpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uW10pOiBUcmFuc2FjdGlvbltdID0+IHRyYW5zYWN0aW9ucy5maWx0ZXIoKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IGJvb2xlYW4gPT4gdHJhbnNhY3Rpb24uaXNXb3JrVGFuaygpKSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxpc3Qgb2YgcHJvcGVydHkgaG9sZGluZyBjb3N0cyAodHJhbnNhY3Rpb25zIHJlbGF0ZWQgdG8gdmFjYW50IGxhbmQgcHJvcGVydHkpXG4gICAqL1xuICBnZXRQcm9wZXJ0eUhvbGRpbmdDb3N0cyhwcm9wZXJ0eUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS9wcm9wZXJ0aWVzLyR7cHJvcGVydHlJZH0vaG9sZGluZy1jb3N0c2AsIGZhbHNlKTtcbiAgfVxuXG4gIGdldFdpdGhvdXRUYXhGcmVlUHJvcGVydHkoKTogT2JzZXJ2YWJsZTxUcmFuc2FjdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goYCR7dGhpcy5hcGlVcmx9P2V4Y2x1ZGVUYXhGcmVlUHJvcGVydHlDYXRlZ29yaWVzYCwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBsaXN0IG9mIHRheGFibGUgdHJhbnNhY3Rpb25zIHdpdGggdGFuayB0eXBlICdXb3JrJ1xuICAgKi9cbiAgZ2V0VGF4YWJsZVdvcmtUcmFuc2FjdGlvbnMoKTogT2JzZXJ2YWJsZTxUcmFuc2FjdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V29ya1RyYW5zYWN0aW9ucygpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uW10pOiBUcmFuc2FjdGlvbltdID0+IHRyYW5zYWN0aW9ucy5maWx0ZXIoKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IGJvb2xlYW4gPT4gISF0cmFuc2FjdGlvbi5jaGFydEFjY291bnRzLnRheFJldHVybkl0ZW0pKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhZGQgbXVsdGlwbGUgdHJhbnNhY3Rpb25zXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbnMgTGlzdCBvZiBuZXcgVHJhbnNhY3Rpb24gaW5zdGFuY2VzIGZvciBzYXZpbmdcbiAgICovXG4gIGFkZEJhdGNoKHRyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25bXSk6IE9ic2VydmFibGU8VHJhbnNhY3Rpb25bXT4ge1xuICAgIHRyYW5zYWN0aW9ucyA9IF8uY2xvbmVEZWVwKHRyYW5zYWN0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9YCwgY2xhc3NUb1BsYWluKHRyYW5zYWN0aW9ucykpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogVHJhbnNhY3Rpb25CYXNlW10pID0+IHtcbiAgICAgICAgICBjb25zdCBhZGRlZFRyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25bXSA9IHJlc3BvbnNlLm1hcCgoaXRlbTogVHJhbnNhY3Rpb25CYXNlKSA9PiB0aGlzLmNyZWF0ZU1vZGVsSW5zdGFuY2UoaXRlbSkpO1xuXG4gICAgICAgICAgdHJhbnNhY3Rpb25zLmZvckVhY2goKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgLy8gQFRPRE8gVmlrdG9yOiBpbXBsZW1lbnQgQVBJIGZvciBzYXZpbmcgb2YgbmVzdGVkIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgLy8gYWRkIGNoaWxkIHRyYW5zYWN0aW9ucyBpZiBleGlzdFxuICAgICAgICAgICAgaWYgKHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdHJhbnNhY3Rpb24udHJhbnNhY3Rpb25zLmZvckVhY2goKGNoaWxkVHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgY2hpbGRUcmFuc2FjdGlvbi5wYXJlbnRUcmFuc2FjdGlvbiA9IHRoaXMuY3JlYXRlTW9kZWxJbnN0YW5jZSh7IGlkOiBhZGRlZFRyYW5zYWN0aW9uc1tpbmRleF0uaWQgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmFkZEJhdGNoKHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9ucykuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFkZCB0cmFuc2ZlciB0cmFuc2FjdGlvbiB0byBjYWNoZVxuICAgICAgICAgICAgaWYgKHRyYW5zYWN0aW9uLm9wZXJhdGlvbiA9PT0gVHJhbnNhY3Rpb25PcGVyYXRpb25FbnVtLlRSQU5TRkVSKSB7XG4gICAgICAgICAgICAgIGFkZGVkVHJhbnNhY3Rpb25zLnB1c2goYWRkZWRUcmFuc2FjdGlvbnNbMF0udHJhbnNmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGUucHVzaCguLi5hZGRlZFRyYW5zYWN0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKFxuICAgICAgICAgICAgbmV3IEFwcEV2ZW50PFRyYW5zYWN0aW9uW10+KEFwcEV2ZW50VHlwZUVudW0uVFJBTlNBQ1RJT05TX0NSRUFURUQsIGFkZGVkVHJhbnNhY3Rpb25zKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gYWRkZWRUcmFuc2FjdGlvbnM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIHVwZGF0ZSBleGlzdGluZyB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb24gVHJhbnNhY3Rpb24gaW5zdGFuY2UgZm9yIHVwZGF0aW5nXG4gICAqL1xuICB1cGRhdGUodHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogT2JzZXJ2YWJsZTxUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9LyR7dHJhbnNhY3Rpb24uaWR9YCwgY2xhc3NUb1BsYWluKHRyYW5zYWN0aW9uKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkJhc2UpID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkVHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0gdGhpcy5jcmVhdGVNb2RlbEluc3RhbmNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAvLyBAVE9ETyBWaWt0b3I6IGltcGxlbWVudCBBUEkgZm9yIHNhdmluZyBvZiBuZXN0ZWQgdHJhbnNhY3Rpb25zXG4gICAgICAgICAgaWYgKHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGFkZCBwYXJlbnQgdHJhbnNhY3Rpb24gdG8gY2hpbGQgdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICB0cmFuc2FjdGlvbi50cmFuc2FjdGlvbnMuZm9yRWFjaCgoY2hpbGRUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgY2hpbGRUcmFuc2FjdGlvbi5wYXJlbnRUcmFuc2FjdGlvbiA9IHRoaXMuY3JlYXRlTW9kZWxJbnN0YW5jZSh7IGlkOiB1cGRhdGVkVHJhbnNhY3Rpb24uaWQgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHNlcGFyYXRlIGNoaWxkIHRyYW5zYWN0aW9ucyBieSBpZCBleGlzdGluZyB0byBkZWZpbmUgYWRkIG9yIHVwZGF0ZSBhY3Rpb24uXG4gICAgICAgICAgICBjb25zdCBjaGlsZFRyYW5zYWN0aW9uc1RvVXBkYXRlOiBUcmFuc2FjdGlvbltdID0gdHJhbnNhY3Rpb24udHJhbnNhY3Rpb25zLmZpbHRlcigodDogVHJhbnNhY3Rpb24pID0+IHQuaWQpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRUcmFuc2FjdGlvbnNUb0FkZDogVHJhbnNhY3Rpb25bXSA9IHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9ucy5maWx0ZXIoKHQ6IFRyYW5zYWN0aW9uKSA9PiAhdC5pZCk7XG5cbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjaGlsZCB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgIGlmIChjaGlsZFRyYW5zYWN0aW9uc1RvVXBkYXRlLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJhdGNoKGNoaWxkVHJhbnNhY3Rpb25zVG9VcGRhdGUpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZGQgY2hpbGQgdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBpZiAoY2hpbGRUcmFuc2FjdGlvbnNUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5hZGRCYXRjaChjaGlsZFRyYW5zYWN0aW9uc1RvQWRkKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnJlcGxhY2VJbkNhY2hlKHVwZGF0ZWRUcmFuc2FjdGlvbik7XG5cbiAgICAgICAgICByZXR1cm4gdXBkYXRlZFRyYW5zYWN0aW9uO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGUgbXVsdGlwbGUgdHJhbnNhY3Rpb25zXG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbnMgbGlzdCBvZiB0cmFuc2FjdGlvbnMgZm9yIHVwZGF0aW5nXG4gICAqL1xuICB1cGRhdGVCYXRjaCh0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uW10pOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfWAsIGNsYXNzVG9QbGFpbih0cmFuc2FjdGlvbnMpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IFRyYW5zYWN0aW9uQmFzZVtdKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZFRyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25bXSA9IHJlc3BvbnNlLm1hcCgoaXRlbTogVHJhbnNhY3Rpb25CYXNlKSA9PiB0aGlzLmNyZWF0ZU1vZGVsSW5zdGFuY2UoaXRlbSkpO1xuXG4gICAgICAgICAgdXBkYXRlZFRyYW5zYWN0aW9ucy5mb3JFYWNoKCh1cGRhdGVkVHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICByZXBsYWNlKHRoaXMuY2FjaGUsIHVwZGF0ZWRUcmFuc2FjdGlvbik7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWRUcmFuc2FjdGlvbnM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQmF0Y2gobW9kZWxzOiBUcmFuc2FjdGlvbltdKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHN1cGVyLmRlbGV0ZUJhdGNoKG1vZGVscykucGlwZShcbiAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChcbiAgICAgICAgICBuZXcgQXBwRXZlbnQ8VHJhbnNhY3Rpb24+KEFwcEV2ZW50VHlwZUVudW0uVFJBTlNBQ1RJT05fREVMRVRFRCwgbW9kZWxzWzBdKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSB0cmFuc2FjdGlvbiBhbmQgcmVsYXRlZCB0cmFuc2FjdGlvbnNcbiAgICogQHBhcmFtIG1vZGVsXG4gICAqL1xuICBkZWxldGUobW9kZWw6IFRyYW5zYWN0aW9uKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH0vJHttb2RlbC5pZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuZmlsdGVyKCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIC8vIHdoZW4gZGVsZXRlIHRyYW5zZmVyIHdlIGRlbGV0ZSBhY3R1YWxseSAyIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgaWYgKG1vZGVsLmlzVHJhbnNmZXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFttb2RlbC5pZF07XG5cbiAgICAgICAgICAgICAgLy8gZ2V0IGlkIG9mIHJlbGF0ZWQgdHJhbnNmZXIgdHJhbnNhY3Rpb25cbiAgICAgICAgICAgICAgaWYgKG1vZGVsLnRyYW5zZmVyKSB7XG4gICAgICAgICAgICAgICAgLy8ganVzdCB0YWtlIGlkIGlmIHdlIGRlbGV0ZSBzb3VyY2UgdHJhbnNhY3Rpb25cbiAgICAgICAgICAgICAgICBpZHMucHVzaChtb2RlbC50cmFuc2Zlci5pZCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCBzb3VyY2UgdHJhbnNhY3Rpb24gaWQgaWYgd2UgZGVsZXRlIGRlc3RpbmF0aW9uIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICAgICAgaWRzLnB1c2godGhpcy5jYWNoZS5maW5kKCh0OiBUcmFuc2FjdGlvbik6IGJvb2xlYW4gPT4gdC50cmFuc2Zlci5pZCA9PT0gbW9kZWwuaWQpLmlkKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiAhaWRzLmluY2x1ZGVzKHRyYW5zYWN0aW9uLmlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLmlkICE9PSBtb2RlbC5pZCAmJiB0cmFuc2FjdGlvbi5wYXJlbnRUcmFuc2FjdGlvbj8uaWQgIT09IG1vZGVsLmlkO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKFxuICAgICAgICAgICAgbmV3IEFwcEV2ZW50PFRyYW5zYWN0aW9uPihBcHBFdmVudFR5cGVFbnVtLlRSQU5TQUNUSU9OX0RFTEVURUQsIG1vZGVsKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRlbGV0ZWQuZW1pdChtb2RlbCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiB0byBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIGV2ZW50IHJlbGF0ZWQgdG8gRGVwcmVjaWF0aW9uIGNoYW5naW5nXG4gICAqL1xuICBwcml2YXRlIGxpc3RlbkRlcHJlY2lhdGlvbkNoYW5nZSgpOiB2b2lkIHtcbiAgICAvLyBAVE9ETyByZXNldCBjYWNoZSBvbmx5IHdoZW4gcmVxdWlyZWQgKGRlcHJlY2lhdGlvbiBoYXMgdHJhbnNhY3Rpb24pXG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uMiguLi5EZXByZWNpYXRpb24uZ2V0RXZlbnROYW1lcygncG9zdCcsICdkZWxldGUnKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVmcmVzaENhY2hlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblZlaGljbGVDbGFpbUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uMiguLi5WZWhpY2xlQ2xhaW0uZ2V0RXZlbnROYW1lcygncG9zdCcsICdwdXQnKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaENhY2hlKCkpO1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihbQXBwRXZlbnRUeXBlRW51bS5WRUhJQ0xFX0NMQUlNX0RFVEFJTFNfVVBEQVRFRF0pLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hDYWNoZSgpO1xuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkhvbWVPZmZpY2VDbGFpbSgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24yKC4uLkhvbWVPZmZpY2VDbGFpbS5nZXRFdmVudE5hbWVzKCdwb3N0JywgJ3B1dCcpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoQ2FjaGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuSG9tZU9mZmljZUxvZygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24yKC4uLkhvbWVPZmZpY2VMb2cuZ2V0RXZlbnROYW1lcygncG9zdCcsICdwdXQnLCAnZGVsZXRlJykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hDYWNoZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHByb3BlcnR5IGZvcmVjYXN0IGluY2x1ZGVzIGNsYWltUGVyY2VudCB3aGljaCBhZmZlY3RzIHByb3BlcnR5IHJlbGF0ZWQgZXhwZW5zZXNcbiAgICogQFRPRE8gQWxleCBtb3ZlIHRvIGZvcmVjYXN0IGFwaSBpbnN0ZWFkIG9mIHByb3BlcnR5XG4gICAqL1xuICBwcml2YXRlIGxpc3RlblByb3BlcnR5Rm9yZWNhc3RVcGRhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKFtBcHBFdmVudFR5cGVFbnVtLlBST1BFUlRZX1VQREFURURdKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoQ2FjaGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUluQ2FjaGUodHJhbnNhY3Rpb25Ub1JlcGxhY2U6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgcmVwbGFjZSh0aGlzLmNhY2hlLCB0cmFuc2FjdGlvblRvUmVwbGFjZSk7XG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Ob3RpZmljYXRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLk5PVElGSUNBVElPTl9BRERFRCkuc3Vic2NyaWJlKChub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbikgPT4ge1xuICAgICAgY29uc3QgZXZlbnRzID0gW1xuICAgICAgICBVc2VyRXZlbnRUeXBlVHlwZUVudW0uSU5WT0lDRV9BVVRPX0FMTE9DQVRFRCxcbiAgICAgICAgVXNlckV2ZW50VHlwZVR5cGVFbnVtLklOVk9JQ0VfQVVUT19QQVJUX0FMTE9DQVRFRCxcbiAgICAgICAgVXNlckV2ZW50VHlwZVR5cGVFbnVtLlJVTEVTX0FVVE9fQUxMT0NBVEVEXG4gICAgICBdO1xuXG4gICAgICBpZiAoIW5vdGlmaWNhdGlvbi5pc1JlYWQgJiYgZXZlbnRzLmluY2x1ZGVzKG5vdGlmaWNhdGlvbi5ldmVudFR5cGUpKSB7XG4gICAgICAgIC8vIEBUT0RPIFRULTM4MjYgbW92ZSB0byB1bmlmaWVkIG1lcmN1cmUgZXZlbnRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoQ2FjaGUoKTtcbiAgICAgICAgfSwgMzAwMClcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDeEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUM5QixhQUFhLEVBQzNCLFdBQVcsRUFDWCxZQUFZLEVBQ2IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFJdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0FBRTdEOztHQUVHO0FBSUgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFdBQXlDO0lBTS9FLFlBQ1ksSUFBZ0IsRUFDaEIsc0JBQThDLEVBQ3ZCLFdBQWdCO1FBRWpELEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUpULFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN2QixnQkFB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LENBQUM7WUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDbkUsOENBQThDO2dCQUM5QyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO2FBQ1Q7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBM1RVLGtCQUFrQixrRkFTbkIsYUFBYTttSEFUWixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBVUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uQmFzZSB9IGZyb20gJy4uLy4uLy4uL2RiL01vZGVscy90cmFuc2FjdGlvbi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyByZXBsYWNlIH0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zL2FycmF5JztcbmltcG9ydCB7IFRyYW5zYWN0aW9uT3BlcmF0aW9uRW51bSB9IGZyb20gJy4uLy4uLy4uL2RiL0VudW1zL3RyYW5zYWN0aW9uLW9wZXJhdGlvbi5lbnVtJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzdC9yZXN0LW9sZC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFwcEV2ZW50LFxuICBBcHBFdmVudFR5cGVFbnVtLFxuICBEZXByZWNpYXRpb24sIEhvbWVPZmZpY2VDbGFpbSwgSG9tZU9mZmljZUxvZyxcbiAgTm90aWZpY2F0aW9uLCBQcm9wZXJ0eVNoYXJlLFxuICBUcmFuc2FjdGlvbixcbiAgVmVoaWNsZUNsYWltXG59IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9ldmVudCc7XG5pbXBvcnQgeyBJRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgY2xhc3NUb1BsYWluIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgVXNlckV2ZW50VHlwZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vZGIvRW51bXMvdXNlci1ldmVudC10eXBlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkNvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb2xsZWN0aW9ucyc7XG5cbi8qKlxuICogU2VydmljZSBmb3IgdHJhbnNhY3Rpb25zIGJ1c2luZXNzIGxvZ2ljXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uU2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPFRyYW5zYWN0aW9uQmFzZSwgVHJhbnNhY3Rpb24+IGltcGxlbWVudHMgSUV2ZW50TGlzdGVuZXIge1xuICAvLyB1cmwgcGFydCBmb3IgVHJhbnNhY3Rpb24gQVBJXG4gIHVybCA9ICd0cmFuc2FjdGlvbnMnO1xuICBtb2RlbENsYXNzID0gVHJhbnNhY3Rpb247XG4gIHRyYW5zYWN0aW9uRGVsZXRlZDogRXZlbnRFbWl0dGVyPFRyYW5zYWN0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJhbnNhY3Rpb24+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IGFueSxcbiAgKSB7XG4gICAgc3VwZXIoZW52aXJvbm1lbnQpO1xuICAgIHRoaXMubGlzdGVuRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGV2ZW50cyBmcm9tIEV2ZW50IERpc3BhdGNoZXIgc2VydmljZXNcbiAgICovXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24yKFByb3BlcnR5U2hhcmUuZ2V0RXZlbnROYW1lKCdwdXQnKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaENhY2hlKCkpO1xuICAgIHRoaXMubGlzdGVuRGVwcmVjaWF0aW9uQ2hhbmdlKCk7XG4gICAgdGhpcy5saXN0ZW5WZWhpY2xlQ2xhaW1DaGFuZ2VzKCk7XG4gICAgdGhpcy5saXN0ZW5Ib21lT2ZmaWNlQ2xhaW0oKTtcbiAgICB0aGlzLmxpc3RlbkhvbWVPZmZpY2VMb2coKTtcbiAgICB0aGlzLmxpc3RlblByb3BlcnR5Rm9yZWNhc3RVcGRhdGUoKTtcbiAgICB0aGlzLmxpc3Rlbk5vdGlmaWNhdGlvbnMoKTtcbiAgfVxuXG4gIGdldChwYXRoID0gdGhpcy5hcGlVcmwpOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uW10+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0KHBhdGgpLnBpcGUobWFwKHRyYW5zYWN0aW9ucyA9PiB0aGlzLmdyb3VwQnlQYXJlbnQodHJhbnNhY3Rpb25zKSkpXG4gIH1cblxuICBnZXRDdXJyZW50WWVhcigpOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uW10+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0KCkucGlwZShcbiAgICAgIG1hcCgodHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvbltdKTogVHJhbnNhY3Rpb25bXSA9PiBuZXcgVHJhbnNhY3Rpb25Db2xsZWN0aW9uKHRyYW5zYWN0aW9ucykuZmlsdGVyQnlGaW5hbmNpYWxZZWFyKCdkYXRlJykudG9BcnJheSgpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHNpbmdsZSBuZXcgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIG1vZGVsIE5ldyBUcmFuc2FjdGlvbiBpbnN0YW5jZSBmb3Igc2F2aW5nXG4gICAqL1xuICBhZGQobW9kZWw6IFRyYW5zYWN0aW9uKTogT2JzZXJ2YWJsZTxUcmFuc2FjdGlvbj4ge1xuICAgIC8vIHdlIGRvbid0IGhhdmUgUE9TVCBBUEkgZW5kcG9pbnQgZm9yIHNpbmdsZSB0cmFuc2FjdGlvblxuICAgIHJldHVybiB0aGlzLmFkZEJhdGNoKFttb2RlbF0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChuZXdUcmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uW10pOiBUcmFuc2FjdGlvbiA9PiB7XG4gICAgICAgICAgLy8gQFRPRE8gYWxleFxuICAgICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChcbiAgICAgICAgICAgIG5ldyBBcHBFdmVudDxUcmFuc2FjdGlvbj4oQXBwRXZlbnRUeXBlRW51bS5UUkFOU0FDVElPTl9DUkVBVEVELCBuZXdUcmFuc2FjdGlvbnNbMF0pXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiBuZXdUcmFuc2FjdGlvbnNbMF07XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0cmFuc2FjdGlvbnMgcmVsYXRlZCB3aXRoIHByb3BlcnR5XG4gICAqL1xuICBnZXRCeVByb3BlcnR5SWQocHJvcGVydHlJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUcmFuc2FjdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFllYXIoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvbltdKTogVHJhbnNhY3Rpb25bXSA9PiB0cmFuc2FjdGlvbnMuZmlsdGVyKCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBib29sZWFuID0+IHRyYW5zYWN0aW9uLnByb3BlcnR5Py5pZCA9PT0gcHJvcGVydHlJZCkpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBsaXN0IG9mIHRyYW5zYWN0aW9ucyB3aXRoIHRhbmsgdHlwZSAnV29yaydcbiAgICovXG4gIGdldFdvcmtUcmFuc2FjdGlvbnMoKTogT2JzZXJ2YWJsZTxUcmFuc2FjdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFllYXIoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvbltdKTogVHJhbnNhY3Rpb25bXSA9PiB0cmFuc2FjdGlvbnMuZmlsdGVyKCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBib29sZWFuID0+IHRyYW5zYWN0aW9uLmlzV29ya1RhbmsoKSkpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsaXN0IG9mIHByb3BlcnR5IGhvbGRpbmcgY29zdHMgKHRyYW5zYWN0aW9ucyByZWxhdGVkIHRvIHZhY2FudCBsYW5kIHByb3BlcnR5KVxuICAgKi9cbiAgZ2V0UHJvcGVydHlIb2xkaW5nQ29zdHMocHJvcGVydHlJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUcmFuc2FjdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vcHJvcGVydGllcy8ke3Byb3BlcnR5SWR9L2hvbGRpbmctY29zdHNgLCBmYWxzZSk7XG4gIH1cblxuICBnZXRXaXRob3V0VGF4RnJlZVByb3BlcnR5KCk6IE9ic2VydmFibGU8VHJhbnNhY3Rpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKGAke3RoaXMuYXBpVXJsfT9leGNsdWRlVGF4RnJlZVByb3BlcnR5Q2F0ZWdvcmllc2AsIGZhbHNlKS5waXBlKFxuICAgICAgbWFwKHRyYW5zYWN0aW9ucyA9PiB0aGlzLmdyb3VwQnlQYXJlbnQodHJhbnNhY3Rpb25zKSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cEJ5UGFyZW50KHRyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25bXSk6IFRyYW5zYWN0aW9uW10ge1xuICAgIHRyYW5zYWN0aW9ucy5mb3JFYWNoKCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkID0+IHtcbiAgICAgIHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9ucyA9IHRyYW5zYWN0aW9uc1xuICAgICAgICAvLyBnZXQgbGlzdCBvZiBjaGlsZCB0cmFuc2FjdGlvbnNcbiAgICAgICAgLmZpbHRlcigodDogVHJhbnNhY3Rpb24pOiBib29sZWFuID0+IHQucGFyZW50VHJhbnNhY3Rpb24gJiYgdC5wYXJlbnRUcmFuc2FjdGlvbi5pZCA9PT0gdHJhbnNhY3Rpb24uaWQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyYW5zYWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgbGlzdCBvZiB0YXhhYmxlIHRyYW5zYWN0aW9ucyB3aXRoIHRhbmsgdHlwZSAnV29yaydcbiAgICovXG4gIGdldFRheGFibGVXb3JrVHJhbnNhY3Rpb25zKCk6IE9ic2VydmFibGU8VHJhbnNhY3Rpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLmdldFdvcmtUcmFuc2FjdGlvbnMoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvbltdKTogVHJhbnNhY3Rpb25bXSA9PiB0cmFuc2FjdGlvbnMuZmlsdGVyKCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBib29sZWFuID0+ICEhdHJhbnNhY3Rpb24uY2hhcnRBY2NvdW50cy50YXhSZXR1cm5JdGVtKSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogYWRkIG11bHRpcGxlIHRyYW5zYWN0aW9uc1xuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25zIExpc3Qgb2YgbmV3IFRyYW5zYWN0aW9uIGluc3RhbmNlcyBmb3Igc2F2aW5nXG4gICAqL1xuICBhZGRCYXRjaCh0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uW10pOiBPYnNlcnZhYmxlPFRyYW5zYWN0aW9uW10+IHtcbiAgICB0cmFuc2FjdGlvbnMgPSBfLmNsb25lRGVlcCh0cmFuc2FjdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfWAsIGNsYXNzVG9QbGFpbih0cmFuc2FjdGlvbnMpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IFRyYW5zYWN0aW9uQmFzZVtdKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWRkZWRUcmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uW10gPSByZXNwb25zZS5tYXAoKGl0ZW06IFRyYW5zYWN0aW9uQmFzZSkgPT4gdGhpcy5jcmVhdGVNb2RlbEluc3RhbmNlKGl0ZW0pKTtcblxuICAgICAgICAgIHRyYW5zYWN0aW9ucy5mb3JFYWNoKCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIC8vIEBUT0RPIFZpa3RvcjogaW1wbGVtZW50IEFQSSBmb3Igc2F2aW5nIG9mIG5lc3RlZCB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgIC8vIGFkZCBjaGlsZCB0cmFuc2FjdGlvbnMgaWYgZXhpc3RcbiAgICAgICAgICAgIGlmICh0cmFuc2FjdGlvbi50cmFuc2FjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9ucy5mb3JFYWNoKChjaGlsZFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNoaWxkVHJhbnNhY3Rpb24ucGFyZW50VHJhbnNhY3Rpb24gPSB0aGlzLmNyZWF0ZU1vZGVsSW5zdGFuY2UoeyBpZDogYWRkZWRUcmFuc2FjdGlvbnNbaW5kZXhdLmlkIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5hZGRCYXRjaCh0cmFuc2FjdGlvbi50cmFuc2FjdGlvbnMpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhZGQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gdG8gY2FjaGVcbiAgICAgICAgICAgIGlmICh0cmFuc2FjdGlvbi5vcGVyYXRpb24gPT09IFRyYW5zYWN0aW9uT3BlcmF0aW9uRW51bS5UUkFOU0ZFUikge1xuICAgICAgICAgICAgICBhZGRlZFRyYW5zYWN0aW9ucy5wdXNoKGFkZGVkVHJhbnNhY3Rpb25zWzBdLnRyYW5zZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmICh0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLnB1c2goLi4uYWRkZWRUcmFuc2FjdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChcbiAgICAgICAgICAgIG5ldyBBcHBFdmVudDxUcmFuc2FjdGlvbltdPihBcHBFdmVudFR5cGVFbnVtLlRSQU5TQUNUSU9OU19DUkVBVEVELCBhZGRlZFRyYW5zYWN0aW9ucylcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIGFkZGVkVHJhbnNhY3Rpb25zO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB1cGRhdGUgZXhpc3RpbmcgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uIFRyYW5zYWN0aW9uIGluc3RhbmNlIGZvciB1cGRhdGluZ1xuICAgKi9cbiAgdXBkYXRlKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IE9ic2VydmFibGU8VHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS8ke3RoaXMudXJsfS8ke3RyYW5zYWN0aW9uLmlkfWAsIGNsYXNzVG9QbGFpbih0cmFuc2FjdGlvbikpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogVHJhbnNhY3Rpb25CYXNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiA9IHRoaXMuY3JlYXRlTW9kZWxJbnN0YW5jZShyZXNwb25zZSk7XG4gICAgICAgICAgLy8gQFRPRE8gVmlrdG9yOiBpbXBsZW1lbnQgQVBJIGZvciBzYXZpbmcgb2YgbmVzdGVkIHRyYW5zYWN0aW9uc1xuICAgICAgICAgIGlmICh0cmFuc2FjdGlvbi50cmFuc2FjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBhZGQgcGFyZW50IHRyYW5zYWN0aW9uIHRvIGNoaWxkIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgdHJhbnNhY3Rpb24udHJhbnNhY3Rpb25zLmZvckVhY2goKGNoaWxkVHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNoaWxkVHJhbnNhY3Rpb24ucGFyZW50VHJhbnNhY3Rpb24gPSB0aGlzLmNyZWF0ZU1vZGVsSW5zdGFuY2UoeyBpZDogdXBkYXRlZFRyYW5zYWN0aW9uLmlkIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBzZXBhcmF0ZSBjaGlsZCB0cmFuc2FjdGlvbnMgYnkgaWQgZXhpc3RpbmcgdG8gZGVmaW5lIGFkZCBvciB1cGRhdGUgYWN0aW9uLlxuICAgICAgICAgICAgY29uc3QgY2hpbGRUcmFuc2FjdGlvbnNUb1VwZGF0ZTogVHJhbnNhY3Rpb25bXSA9IHRyYW5zYWN0aW9uLnRyYW5zYWN0aW9ucy5maWx0ZXIoKHQ6IFRyYW5zYWN0aW9uKSA9PiB0LmlkKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkVHJhbnNhY3Rpb25zVG9BZGQ6IFRyYW5zYWN0aW9uW10gPSB0cmFuc2FjdGlvbi50cmFuc2FjdGlvbnMuZmlsdGVyKCh0OiBUcmFuc2FjdGlvbikgPT4gIXQuaWQpO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgY2hpbGQgdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBpZiAoY2hpbGRUcmFuc2FjdGlvbnNUb1VwZGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVCYXRjaChjaGlsZFRyYW5zYWN0aW9uc1RvVXBkYXRlKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYWRkIGNoaWxkIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgaWYgKGNoaWxkVHJhbnNhY3Rpb25zVG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWRkQmF0Y2goY2hpbGRUcmFuc2FjdGlvbnNUb0FkZCkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5yZXBsYWNlSW5DYWNoZSh1cGRhdGVkVHJhbnNhY3Rpb24pO1xuXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWRUcmFuc2FjdGlvbjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogdXBkYXRlIG11bHRpcGxlIHRyYW5zYWN0aW9uc1xuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25zIGxpc3Qgb2YgdHJhbnNhY3Rpb25zIGZvciB1cGRhdGluZ1xuICAgKi9cbiAgdXBkYXRlQmF0Y2godHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvbltdKTogT2JzZXJ2YWJsZTxUcmFuc2FjdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH1gLCBjbGFzc1RvUGxhaW4odHJhbnNhY3Rpb25zKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkJhc2VbXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRUcmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uW10gPSByZXNwb25zZS5tYXAoKGl0ZW06IFRyYW5zYWN0aW9uQmFzZSkgPT4gdGhpcy5jcmVhdGVNb2RlbEluc3RhbmNlKGl0ZW0pKTtcblxuICAgICAgICAgIHVwZGF0ZWRUcmFuc2FjdGlvbnMuZm9yRWFjaCgodXBkYXRlZFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgICAgcmVwbGFjZSh0aGlzLmNhY2hlLCB1cGRhdGVkVHJhbnNhY3Rpb24pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkVHJhbnNhY3Rpb25zO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJhdGNoKG1vZGVsczogVHJhbnNhY3Rpb25bXSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiBzdXBlci5kZWxldGVCYXRjaChtb2RlbHMpLnBpcGUoXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2goXG4gICAgICAgICAgbmV3IEFwcEV2ZW50PFRyYW5zYWN0aW9uPihBcHBFdmVudFR5cGVFbnVtLlRSQU5TQUNUSU9OX0RFTEVURUQsIG1vZGVsc1swXSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkZWxldGUgdHJhbnNhY3Rpb24gYW5kIHJlbGF0ZWQgdHJhbnNhY3Rpb25zXG4gICAqIEBwYXJhbSBtb2RlbFxuICAgKi9cbiAgZGVsZXRlKG1vZGVsOiBUcmFuc2FjdGlvbik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9LyR7bW9kZWwuaWR9YClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlLmZpbHRlcigodHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICAvLyB3aGVuIGRlbGV0ZSB0cmFuc2ZlciB3ZSBkZWxldGUgYWN0dWFsbHkgMiB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgIGlmIChtb2RlbC5pc1RyYW5zZmVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlkczogbnVtYmVyW10gPSBbbW9kZWwuaWRdO1xuXG4gICAgICAgICAgICAgIC8vIGdldCBpZCBvZiByZWxhdGVkIHRyYW5zZmVyIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICAgIGlmIChtb2RlbC50cmFuc2Zlcikge1xuICAgICAgICAgICAgICAgIC8vIGp1c3QgdGFrZSBpZCBpZiB3ZSBkZWxldGUgc291cmNlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICAgICAgaWRzLnB1c2gobW9kZWwudHJhbnNmZXIuaWQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZpbmQgc291cmNlIHRyYW5zYWN0aW9uIGlkIGlmIHdlIGRlbGV0ZSBkZXN0aW5hdGlvbiB0cmFuc2FjdGlvblxuICAgICAgICAgICAgICAgIGlkcy5wdXNoKHRoaXMuY2FjaGUuZmluZCgodDogVHJhbnNhY3Rpb24pOiBib29sZWFuID0+IHQudHJhbnNmZXIuaWQgPT09IG1vZGVsLmlkKS5pZCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gIWlkcy5pbmNsdWRlcyh0cmFuc2FjdGlvbi5pZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbi5pZCAhPT0gbW9kZWwuaWQgJiYgdHJhbnNhY3Rpb24ucGFyZW50VHJhbnNhY3Rpb24/LmlkICE9PSBtb2RlbC5pZDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChcbiAgICAgICAgICAgIG5ldyBBcHBFdmVudDxUcmFuc2FjdGlvbj4oQXBwRXZlbnRUeXBlRW51bS5UUkFOU0FDVElPTl9ERUxFVEVELCBtb2RlbClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZWxldGVkLmVtaXQobW9kZWwpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRXZlbnREaXNwYXRjaGVyU2VydmljZSBldmVudCByZWxhdGVkIHRvIERlcHJlY2lhdGlvbiBjaGFuZ2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5EZXByZWNpYXRpb25DaGFuZ2UoKTogdm9pZCB7XG4gICAgLy8gQFRPRE8gcmVzZXQgY2FjaGUgb25seSB3aGVuIHJlcXVpcmVkIChkZXByZWNpYXRpb24gaGFzIHRyYW5zYWN0aW9uKVxuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbjIoLi4uRGVwcmVjaWF0aW9uLmdldEV2ZW50TmFtZXMoJ3Bvc3QnLCAnZGVsZXRlJykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hDYWNoZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5WZWhpY2xlQ2xhaW1DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbjIoLi4uVmVoaWNsZUNsYWltLmdldEV2ZW50TmFtZXMoJ3Bvc3QnLCAncHV0JykpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2hDYWNoZSgpKTtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oW0FwcEV2ZW50VHlwZUVudW0uVkVISUNMRV9DTEFJTV9ERVRBSUxTX1VQREFURURdKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoQ2FjaGUoKTtcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Ib21lT2ZmaWNlQ2xhaW0oKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uMiguLi5Ib21lT2ZmaWNlQ2xhaW0uZ2V0RXZlbnROYW1lcygncG9zdCcsICdwdXQnKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVmcmVzaENhY2hlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkhvbWVPZmZpY2VMb2coKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uMiguLi5Ib21lT2ZmaWNlTG9nLmdldEV2ZW50TmFtZXMoJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoQ2FjaGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwcm9wZXJ0eSBmb3JlY2FzdCBpbmNsdWRlcyBjbGFpbVBlcmNlbnQgd2hpY2ggYWZmZWN0cyBwcm9wZXJ0eSByZWxhdGVkIGV4cGVuc2VzXG4gICAqIEBUT0RPIEFsZXggbW92ZSB0byBmb3JlY2FzdCBhcGkgaW5zdGVhZCBvZiBwcm9wZXJ0eVxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5Qcm9wZXJ0eUZvcmVjYXN0VXBkYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihbQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9VUERBVEVEXSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVmcmVzaENhY2hlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VJbkNhY2hlKHRyYW5zYWN0aW9uVG9SZXBsYWNlOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHJlcGxhY2UodGhpcy5jYWNoZSwgdHJhbnNhY3Rpb25Ub1JlcGxhY2UpO1xuICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuTm90aWZpY2F0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5OT1RJRklDQVRJT05fQURERUQpLnN1YnNjcmliZSgobm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IFtcbiAgICAgICAgVXNlckV2ZW50VHlwZVR5cGVFbnVtLklOVk9JQ0VfQVVUT19BTExPQ0FURUQsXG4gICAgICAgIFVzZXJFdmVudFR5cGVUeXBlRW51bS5JTlZPSUNFX0FVVE9fUEFSVF9BTExPQ0FURUQsXG4gICAgICAgIFVzZXJFdmVudFR5cGVUeXBlRW51bS5SVUxFU19BVVRPX0FMTE9DQVRFRFxuICAgICAgXTtcblxuICAgICAgaWYgKCFub3RpZmljYXRpb24uaXNSZWFkICYmIGV2ZW50cy5pbmNsdWRlcyhub3RpZmljYXRpb24uZXZlbnRUeXBlKSkge1xuICAgICAgICAvLyBAVE9ETyBUVC0zODI2IG1vdmUgdG8gdW5pZmllZCBtZXJjdXJlIGV2ZW50XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVmcmVzaENhY2hlKCk7XG4gICAgICAgIH0sIDMwMDApXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -6144,7 +6144,8 @@ class PropertyEquityChartData {
6144
6144
  * @private
6145
6145
  */
6146
6146
  getLoanBalanceByYear(property, year, bankAccounts, loans) {
6147
- return bankAccounts.items.reduce((totalSum, bankAccount) => totalSum + (bankAccount.getPropertyPercentage(property.id) * (loans.getByBankAccountId(bankAccount.id)?.getLastPaymentByYear(year)?.totalOwed || 0)), 0);
6147
+ const offset = bankAccounts.filterBy('type', BankAccountTypeEnum.OFFSET).getPropertyBalanceAmount(property.id);
6148
+ return bankAccounts.items.reduce((totalSum, bankAccount) => totalSum + (bankAccount.getPropertyPercentage(property.id) * (loans.getByBankAccountId(bankAccount.id)?.getLastPaymentByYear(year)?.totalOwed || 0)), 0) - offset;
6148
6149
  }
6149
6150
  getMarketValueForPropertyByYear(property, year) {
6150
6151
  if (new FinancialYear(property.contractDate).year > year) {
@@ -15559,14 +15560,7 @@ class TransactionService extends RestService {
15559
15560
  this.listenNotifications();
15560
15561
  }
15561
15562
  get(path = this.apiUrl) {
15562
- return super.get(path).pipe(map(transactions => {
15563
- transactions.forEach((transaction) => {
15564
- transaction.transactions = transactions
15565
- // get list of child transactions
15566
- .filter((t) => t.parentTransaction && t.parentTransaction.id === transaction.id);
15567
- });
15568
- return transactions;
15569
- }));
15563
+ return super.get(path).pipe(map(transactions => this.groupByParent(transactions)));
15570
15564
  }
15571
15565
  getCurrentYear() {
15572
15566
  return super.get().pipe(map((transactions) => new TransactionCollection(transactions).filterByFinancialYear('date').toArray()));
@@ -15605,7 +15599,15 @@ class TransactionService extends RestService {
15605
15599
  return this.fetch(`${this.environment.apiV2}/properties/${propertyId}/holding-costs`, false);
15606
15600
  }
15607
15601
  getWithoutTaxFreeProperty() {
15608
- return this.fetch(`${this.apiUrl}?excludeTaxFreePropertyCategories`, false);
15602
+ return this.fetch(`${this.apiUrl}?excludeTaxFreePropertyCategories`, false).pipe(map(transactions => this.groupByParent(transactions)));
15603
+ }
15604
+ groupByParent(transactions) {
15605
+ transactions.forEach((transaction) => {
15606
+ transaction.transactions = transactions
15607
+ // get list of child transactions
15608
+ .filter((t) => t.parentTransaction && t.parentTransaction.id === transaction.id);
15609
+ });
15610
+ return transactions;
15609
15611
  }
15610
15612
  /**
15611
15613
  * get list of taxable transactions with tank type 'Work'