@novha/calc-engines 1.6.2 → 1.6.4

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.
@@ -3,7 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CanadaMortgageServiceImpl = void 0;
4
4
  class CanadaMortgageServiceImpl {
5
5
  calculate(input, rules) {
6
- const { propertyPrice, downPayment, interestRate, amortizationYears, paymentFrequency } = input;
6
+ const { propertyPrice, downPayment, amortizationYears, paymentFrequency } = input;
7
+ const interestRate = input.interestRate / 100;
7
8
  /* -----------------------------
8
9
  1. Loan Amount & LTV
9
10
  ------------------------------ */
@@ -53,10 +54,24 @@ class CanadaMortgageServiceImpl {
53
54
  loanAmount: loanAmount,
54
55
  insurancePremium: insurancePremium,
55
56
  totalMortgage: totalMortgage,
56
- paymentAmount: paymentAmount,
57
+ monthlyPaymentAmount: paymentAmount,
57
58
  totalInterestPaid: totalInterestPaid,
58
59
  totalPaid: totalPaid,
59
- amortizationSchedule: amortizationSchedule
60
+ amortizationSchedule: amortizationSchedule,
61
+ otherFees: {
62
+ notaryFees: {
63
+ value: 0,
64
+ label: 'NOTARY_FEES'
65
+ },
66
+ bankFees: {
67
+ value: 0,
68
+ label: 'BANK_FEES'
69
+ },
70
+ monthlyInsuranceFees: {
71
+ value: insurancePremium,
72
+ label: 'INSURANCE_PREMIUM'
73
+ }
74
+ }
60
75
  };
61
76
  }
62
77
  /* ======================================================
@@ -106,4 +121,4 @@ class CanadaMortgageServiceImpl {
106
121
  }
107
122
  }
108
123
  exports.CanadaMortgageServiceImpl = CanadaMortgageServiceImpl;
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYWRhTW9ydGdhZ2VTZXJ2aWNlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb3J0Z2FnZS9jYW5hZGEvQ2FuYWRhTW9ydGdhZ2VTZXJ2aWNlSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFRQSxNQUFhLHlCQUF5QjtJQUU3QixTQUFTLENBQUMsS0FBK0IsRUFBRSxLQUFvQjtRQUVwRSxNQUFNLEVBQ0osYUFBYSxFQUNiLFdBQVcsRUFDWCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNqQixHQUFHLEtBQUssQ0FBQztRQUVWOzt5Q0FFaUM7UUFFakMsTUFBTSxVQUFVLEdBQUcsYUFBYSxHQUFHLFdBQVcsQ0FBQztRQUMvQyxJQUFJLFVBQVUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLFVBQVUsR0FBRyxhQUFhLENBQUM7UUFFdkM7O3lDQUVpQztRQUVqQyxJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztRQUV6QixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsWUFBWTtpQkFDckQsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU5QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztZQUN6RCxDQUFDO1lBRUQsZ0JBQWdCLEdBQUcsVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDbkQsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxr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aUQsRUFDakQsZUFBdUI7UUFHdkIsSUFBSSxXQUFXLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsTUFBTSxjQUFjLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUN0QyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFaEUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLElBQVksRUFBRSxPQUFlO1FBQ3ZFLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQzdCLENBQUM7UUFFRCxPQUFPLFNBQVM7WUFDZCxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBMUtELDhEQTBLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhbmFkYU1vcnRnYWdlU2VydmljZSB9IGZyb20gJy4vQ2FuYWRhTW9ydGdhZ2VTZXJ2aWNlJztcbmltcG9ydCB7XG4gIE1vcnRnYWdlUnVsZXMsXG4gIE1vcnRnYWdlQ2FsY3VsYXRpb25JbnB1dCxcbiAgTW9ydGdhZ2VDYWxjdWxhdGlvblJlc3VsdCxcbiAgQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtXG59IGZyb20gJy4vZG9tYWluL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENhbmFkYU1vcnRnYWdlU2VydmljZUltcGwgaW1wbGVtZW50cyBDYW5hZGFNb3J0Z2FnZVNlcnZpY2Uge1xuXG4gIHB1YmxpYyBjYWxjdWxhdGUoaW5wdXQ6IE1vcnRnYWdlQ2FsY3VsYXRpb25JbnB1dCwgcnVsZXM6IE1vcnRnYWdlUnVsZXMpOiBNb3J0Z2FnZUNhbGN1bGF0aW9uUmVzdWx0IHtcblxuICAgIGNvbnN0IHtcbiAgICAgIHByb3BlcnR5UHJpY2UsXG4gICAgICBkb3duUGF5bWVudCxcbiAgICAgIGludGVyZXN0UmF0ZSxcbiAgICAgIGFtb3J0aXphdGlvblllYXJzLFxuICAgICAgcGF5bWVudEZyZXF1ZW5jeVxuICAgIH0gPSBpbnB1dDtcblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgMS4gTG9hbiBBbW91bnQgJiBMVFZcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIGNvbnN0IGxvYW5BbW91bnQgPSBwcm9wZXJ0eVByaWNlIC0gZG93blBheW1lbnQ7XG4gICAgaWYgKGxvYW5BbW91bnQgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxvYW4gYW1vdW50Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgbHR2ID0gbG9hbkFtb3VudCAvIHByb3BlcnR5UHJpY2U7XG5cbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgIDIuIENNSEMgSW5zdXJhbmNlXG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgICBsZXQgaW5zdXJhbmNlUHJlbWl1bSA9IDA7XG5cbiAgICBpZiAobHR2ID4gcnVsZXMubW9ydGdhZ2VJbnN1cmFuY2UucmVxdWlyZWRCZWxvd0x0dikge1xuICAgICAgY29uc3QgcHJlbWl1bVJ1bGUgPSBydWxlcy5tb3J0Z2FnZUluc3VyYW5jZS5wcmVtaXVtUmF0ZXNcbiAgICAgICAgLmZpbmQociA9PiBsdHYgPD0gci5tYXhMdHYpO1xuXG4gICAgICBpZiAoIXByZW1pdW1SdWxlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTFRWIGV4Y2VlZHMgbWF4aW11bSBpbnN1cmFibGUgbGltaXQnKTtcbiAgICAgIH1cblxuICAgICAgaW5zdXJhbmNlUHJlbWl1bSA9IGxvYW5BbW91bnQgKiBwcmVtaXVtUnVsZS5yYXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsTW9ydGdhZ2UgPSBydWxlcy5tb3J0Z2FnZUluc3VyYW5jZS5wcmVtaXVtQWRkZWRUb0xvYW5cbiAgICAgID8gbG9hbkFtb3VudCArIGluc3VyYW5jZVByZW1pdW1cbiAgICAgIDogbG9hbkFtb3VudDtcblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgMy4gSW50ZXJlc3QgUmF0ZSBDb252ZXJzaW9uXG4gICAgICAgKENhbmFkYSBzZW1pLWFubnVhbCBjb21wb3VuZGluZylcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIGNvbnN0IHBlcmlvZGljUmF0ZSA9IHRoaXMuY29udmVydENhbmFkaWFuUmF0ZShcbiAgICAgIGludGVyZXN0UmF0ZSxcbiAgICAgIHJ1bGVzLmludGVyZXN0LmNvbXBvdW5kaW5nLFxuICAgICAgcnVsZXMucGF5bWVudEZyZXF1ZW5jeVJ1bGVzW3BheW1lbnRGcmVxdWVuY3ldLnBheW1lbnRzUGVyWWVhclxuICAgICk7XG5cbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgIDQuIFBheW1lbnQgRnJlcXVlbmN5XG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgICBjb25zdCBmcmVxdWVuY3lSdWxlID0gcnVsZXMucGF5bWVudEZyZXF1ZW5jeVJ1bGVzW3BheW1lbnRGcmVxdWVuY3ldO1xuICAgIGNvbnN0IHBheW1lbnRzUGVyWWVhciA9IGZyZXF1ZW5jeVJ1bGUucGF5bWVudHNQZXJZZWFyO1xuICAgIGNvbnN0IHRvdGFsUGF5bWVudHMgPSBhbW9ydGl6YXRpb25ZZWFycyAqIHBheW1lbnRzUGVyWWVhcjtcblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgNS4gTW9ydGdhZ2UgUGF5bWVudCBGb3JtdWxhXG4gICAgICAgUCA9IEwgw5cgWyByKDErcilebiBdIC8gWyAoMStyKV5uIOKIkiAxIF1cbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIGNvbnN0IHBheW1lbnRBbW91bnQgPSB0aGlzLmNhbGN1bGF0ZVBheW1lbnQoXG4gICAgICB0b3RhbE1vcnRnYWdlLFxuICAgICAgcGVyaW9kaWNSYXRlLFxuICAgICAgdG90YWxQYXltZW50c1xuICAgICk7XG5cbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgIDYuIFRvdGFsc1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gICAgY29uc3QgdG90YWxQYWlkID0gcGF5bWVudEFtb3VudCAqIHRvdGFsUGF5bWVudHM7XG4gICAgY29uc3QgdG90YWxJbnRlcmVzdFBhaWQgPSB0b3RhbFBhaWQgLSB0b3RhbE1vcnRnYWdlO1xuXG4gICAgY29uc3QgYW1vcnRpemF0aW9uU2NoZWR1bGUgPSB0aGlzLmNhbGN1bGF0ZUFtb3J0aXphdGlvblNjaGVkdWxlKFxuICAgICAgdG90YWxNb3J0Z2FnZSxcbiAgICAgIHBlcmlvZGljUmF0ZSxcbiAgICAgIHBheW1lbnRBbW91bnQsXG4gICAgICB0b3RhbFBheW1lbnRzLFxuICAgICAgYW1vcnRpemF0aW9uWWVhcnMsXG4gICAgICBwYXltZW50c1BlclllYXJcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYW5BbW91bnQ6IGxvYW5BbW91bnQsXG4gICAgICBpbnN1cmFuY2VQcmVtaXVtOiBpbnN1cmFuY2VQcmVtaXVtLFxuICAgICAgdG90YWxNb3J0Z2FnZTogdG90YWxNb3J0Z2FnZSxcbiAgICAgIHBheW1lbnRBbW91bnQ6IHBheW1lbnRBbW91bnQsXG4gICAgICB0b3RhbEludGVyZXN0UGFpZDogdG90YWxJbnRlcmVzdFBhaWQsXG4gICAgICB0b3RhbFBhaWQ6IHRvdGFsUGFpZCxcbiAgICAgIGFtb3J0aXphdGlvblNjaGVkdWxlOiBhbW9ydGl6YXRpb25TY2hlZHVsZVxuICAgIH07XG4gIH1cblxuICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgSGVscGVyIE1ldGhvZHNcbiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVBbW9ydGl6YXRpb25TY2hlZHVsZShcbiAgICBwcmluY2lwYWw6IG51bWJlcixcbiAgICBwZXJpb2RpY1JhdGU6IG51bWJlcixcbiAgICBwYXltZW50QW1vdW50OiBudW1iZXIsXG4gICAgdG90YWxQYXltZW50czogbnVtYmVyLFxuICAgIGFtb3J0aXphdGlvblllYXJzOiBudW1iZXIsXG4gICAgcGF5bWVudHNQZXJZZWFyOiBudW1iZXJcbiAgKTogQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtW10ge1xuICAgIGNvbnN0IHNjaGVkdWxlOiBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW1bXSA9IFtdO1xuICAgIGxldCBiYWxhbmNlID0gcHJpbmNpcGFsO1xuXG4gICAgZm9yIChsZXQgeWVhciA9IDE7IHllYXIgPD0gYW1vcnRpemF0aW9uWWVhcnM7IHllYXIrKykge1xuICAgICAgbGV0IHllYXJseVByaW5jaXBhbCA9IDA7XG4gICAgICBsZXQgeWVhcmx5SW50ZXJlc3QgPSAwO1xuXG4gICAgICBjb25zdCBwYXltZW50c0luWWVhciA9IE1hdGgubWluKHBheW1lbnRzUGVyWWVhciwgdG90YWxQYXltZW50cyAtICh5ZWFyIC0gMSkgKiBwYXltZW50c1BlclllYXIpO1xuXG4gICAgICBmb3IgKGxldCBwYXltZW50ID0gMTsgcGF5bWVudCA8PSBwYXltZW50c0luWWVhcjsgcGF5bWVudCsrKSB7XG4gICAgICAgIGNvbnN0IGludGVyZXN0UGF5bWVudCA9IGJhbGFuY2UgKiBwZXJpb2RpY1JhdGU7XG4gICAgICAgIGNvbnN0IHByaW5jaXBhbFBheW1lbnQgPSBwYXltZW50QW1vdW50IC0gaW50ZXJlc3RQYXltZW50O1xuXG4gICAgICAgIHllYXJseUludGVyZXN0ICs9IGludGVyZXN0UGF5bWVudDtcbiAgICAgICAgeWVhcmx5UHJpbmNpcGFsICs9IHByaW5jaXBhbFBheW1lbnQ7XG4gICAgICAgIGJhbGFuY2UgLT0gcHJpbmNpcGFsUGF5bWVudDtcbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGUucHVzaCh7XG4gICAgICAgIHllYXIsXG4gICAgICAgIHByaW5jaXBhbDogeWVhcmx5UHJpbmNpcGFsLFxuICAgICAgICBpbnRlcmVzdDogeWVhcmx5SW50ZXJlc3QsXG4gICAgICAgIGJhbGFuY2U6IE1hdGgubWF4KDAsIGJhbGFuY2UpXG4gICAgICB9KTtcblxuICAgICAgaWYgKGJhbGFuY2UgPD0gMCkgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjaGVkdWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0Q2FuYWRpYW5SYXRlKFxuICAgIGFubnVhbFJhdGU6IG51bWJlcixcbiAgICBjb21wb3VuZGluZzogJ1NFTUlfQU5OVUFMJyB8ICdBTk5VQUwnIHwgJ01PTlRITFknLFxuICAgIHBheW1lbnRzUGVyWWVhcjogbnVtYmVyXG4gICk6IG51bWJlciB7XG5cbiAgICBpZiAoY29tcG91bmRpbmcgIT09ICdTRU1JX0FOTlVBTCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBDYW5hZGlhbiBzZW1pLWFubnVhbCBjb21wb3VuZGluZyBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICAvLyBDYW5hZGlhbiBzdGFuZGFyZCBjb252ZXJzaW9uXG4gICAgY29uc3Qgc2VtaUFubnVhbFJhdGUgPSBhbm51YWxSYXRlIC8gMjtcbiAgICBjb25zdCBlZmZlY3RpdmVBbm51YWxSYXRlID0gTWF0aC5wb3coMSArIHNlbWlBbm51YWxSYXRlLCAyKSAtIDE7XG5cbiAgICByZXR1cm4gTWF0aC5wb3coMSArIGVmZmVjdGl2ZUFubnVhbFJhdGUsIDEgLyBwYXltZW50c1BlclllYXIpIC0gMTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlUGF5bWVudChwcmluY2lwYWw6IG51bWJlciwgcmF0ZTogbnVtYmVyLCBwZXJpb2RzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyYXRlID09PSAwKSB7XG4gICAgICByZXR1cm4gcHJpbmNpcGFsIC8gcGVyaW9kcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJpbmNpcGFsICpcbiAgICAgIChyYXRlICogTWF0aC5wb3coMSArIHJhdGUsIHBlcmlvZHMpKSAvXG4gICAgICAoTWF0aC5wb3coMSArIHJhdGUsIHBlcmlvZHMpIC0gMSk7XG4gIH1cbn1cbiJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYWRhTW9ydGdhZ2VTZXJ2aWNlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb3J0Z2FnZS9jYW5hZGEvQ2FuYWRhTW9ydGdhZ2VTZXJ2aWNlSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFRQSxNQUFhLHlCQUF5QjtJQUU3QixTQUFTLENBQUMsS0FBK0IsRUFBRSxLQUFvQjtRQUVwRSxNQUFNLEVBQ0osYUFBYSxFQUNiLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2pCLEdBQUcsS0FBSyxDQUFDO1FBRVYsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7UUFFOUM7O3lDQUVpQztRQUVqQyxNQUFNLFVBQVUsR0FBRyxhQUFhLEdBQUcsV0FBVyxDQUFDO1FBQy9DLElBQUksVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsVUFBVSxHQUFHLGFBQWEsQ0FBQztRQUV2Qzs7eUNBRWlDO1FBRWpDLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBRXpCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25ELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZO2lCQUNyRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTlCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFFRCxnQkFBZ0IsR0FBRyxVQUFVLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNuRCxDQUFDO1FB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QztJQUN0QyxDQUFDO0NBQ0Y7QUF6TEQsOERBeUxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FuYWRhTW9ydGdhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9DYW5hZGFNb3J0Z2FnZVNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgTW9ydGdhZ2VSdWxlcyxcbiAgTW9ydGdhZ2VDYWxjdWxhdGlvbklucHV0LFxuICBNb3J0Z2FnZUNhbGN1bGF0aW9uUmVzdWx0LFxuICBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW1cbn0gZnJvbSAnLi9kb21haW4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ2FuYWRhTW9ydGdhZ2VTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIENhbmFkYU1vcnRnYWdlU2VydmljZSB7XG5cbiAgcHVibGljIGNhbGN1bGF0ZShpbnB1dDogTW9ydGdhZ2VDYWxjdWxhdGlvbklucHV0LCBydWxlczogTW9ydGdhZ2VSdWxlcyk6IE1vcnRnYWdlQ2FsY3VsYXRpb25SZXN1bHQge1xuXG4gICAgY29uc3Qge1xuICAgICAgcHJvcGVydHlQcmljZSxcbiAgICAgIGRvd25QYXltZW50LFxuICAgICAgYW1vcnRpemF0aW9uWWVhcnMsXG4gICAgICBwYXltZW50RnJlcXVlbmN5XG4gICAgfSA9IGlucHV0O1xuXG4gICAgY29uc3QgaW50ZXJlc3RSYXRlID0gaW5wdXQuaW50ZXJlc3RSYXRlIC8gMTAwO1xuXG4gICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAxLiBMb2FuIEFtb3VudCAmIExUVlxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gICAgY29uc3QgbG9hbkFtb3VudCA9IHByb3BlcnR5UHJpY2UgLSBkb3duUGF5bWVudDtcbiAgICBpZiAobG9hbkFtb3VudCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbG9hbiBhbW91bnQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBsdHYgPSBsb2FuQW1vdW50IC8gcHJvcGVydHlQcmljZTtcblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgMi4gQ01IQyBJbnN1cmFuY2VcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIGxldCBpbnN1cmFuY2VQcmVtaXVtID0gMDtcblxuICAgIGlmIChsdHYgPiBydWxlcy5tb3J0Z2FnZUluc3VyYW5jZS5yZXF1aXJlZEJlbG93THR2KSB7XG4gICAgICBjb25zdCBwcmVtaXVtUnVsZSA9IHJ1bGVzLm1vcnRnYWdlSW5zdXJhbmNlLnByZW1pdW1SYXRlc1xuICAgICAgICAuZmluZChyID0+IGx0diA8PSByLm1heEx0dik7XG5cbiAgICAgIGlmICghcHJlbWl1bVJ1bGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMVFYgZXhjZWVkcyBtYXhpbXVtIGluc3VyYWJsZSBsaW1pdCcpO1xuICAgICAgfVxuXG4gICAgICBpbnN1cmFuY2VQcmVtaXVtID0gbG9hbkFtb3VudCAqIHByZW1pdW1SdWxlLnJhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxNb3J0Z2FnZSA9IHJ1bGVzLm1vcnRnYWdlSW5zdXJhbmNlLnByZW1pdW1BZGRlZFRvTG9hblxuICAgICAgPyBsb2FuQW1vdW50ICsgaW5zdXJhbmNlUHJlbWl1bVxuICAgICAgOiBsb2FuQW1vdW50O1xuXG4gICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAzLiBJbnRlcmVzdCBSYXRlIENvbnZlcnNpb25cbiAgICAgICAoQ2FuYWRhIHNlbWktYW5udWFsIGNvbXBvdW5kaW5nKVxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gICAgY29uc3QgcGVyaW9kaWNSYXRlID0gdGhpcy5jb252ZXJ0Q2FuYWRpYW5SYXRlKFxuICAgICAgaW50ZXJlc3RSYXRlLFxuICAgICAgcnVsZXMuaW50ZXJlc3QuY29tcG91bmRpbmcsXG4gICAgICBydWxlcy5wYXltZW50RnJlcXVlbmN5UnVsZXNbcGF5bWVudEZyZXF1ZW5jeV0ucGF5bWVudHNQZXJZZWFyXG4gICAgKTtcblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgNC4gUGF5bWVudCBGcmVxdWVuY3lcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuICAgIGNvbnN0IGZyZXF1ZW5jeVJ1bGUgPSBydWxlcy5wYXltZW50RnJlcXVlbmN5UnVsZXNbcGF5bWVudEZyZXF1ZW5jeV07XG4gICAgY29uc3QgcGF5bWVudHNQZXJZZWFyID0gZnJlcXVlbmN5UnVsZS5wYXltZW50c1BlclllYXI7XG4gICAgY29uc3QgdG90YWxQYXltZW50cyA9IGFtb3J0aXphdGlvblllYXJzICogcGF5bWVudHNQZXJZZWFyO1xuXG4gICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICA1LiBNb3J0Z2FnZSBQYXltZW50IEZvcm11bGFcbiAgICAgICBQID0gTCDDlyBbIHIoMStyKV5uIF0gLyBbICgxK3IpXm4g4oiSIDEgXVxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4gICAgY29uc3QgcGF5bWVudEFtb3VudCA9IHRoaXMuY2FsY3VsYXRlUGF5bWVudChcbiAgICAgIHRvdGFsTW9ydGdhZ2UsXG4gICAgICBwZXJpb2RpY1JhdGUsXG4gICAgICB0b3RhbFBheW1lbnRzXG4gICAgKTtcblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgNi4gVG90YWxzXG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgICBjb25zdCB0b3RhbFBhaWQgPSBwYXltZW50QW1vdW50ICogdG90YWxQYXltZW50cztcbiAgICBjb25zdCB0b3RhbEludGVyZXN0UGFpZCA9IHRvdGFsUGFpZCAtIHRvdGFsTW9ydGdhZ2U7XG5cbiAgICBjb25zdCBhbW9ydGl6YXRpb25TY2hlZHVsZSA9IHRoaXMuY2FsY3VsYXRlQW1vcnRpemF0aW9uU2NoZWR1bGUoXG4gICAgICB0b3RhbE1vcnRnYWdlLFxuICAgICAgcGVyaW9kaWNSYXRlLFxuICAgICAgcGF5bWVudEFtb3VudCxcbiAgICAgIHRvdGFsUGF5bWVudHMsXG4gICAgICBhbW9ydGl6YXRpb25ZZWFycyxcbiAgICAgIHBheW1lbnRzUGVyWWVhclxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9hbkFtb3VudDogbG9hbkFtb3VudCxcbiAgICAgIGluc3VyYW5jZVByZW1pdW06IGluc3VyYW5jZVByZW1pdW0sXG4gICAgICB0b3RhbE1vcnRnYWdlOiB0b3RhbE1vcnRnYWdlLFxuICAgICAgbW9udGhseVBheW1lbnRBbW91bnQ6IHBheW1lbnRBbW91bnQsXG4gICAgICB0b3RhbEludGVyZXN0UGFpZDogdG90YWxJbnRlcmVzdFBhaWQsXG4gICAgICB0b3RhbFBhaWQ6IHRvdGFsUGFpZCxcbiAgICAgIGFtb3J0aXphdGlvblNjaGVkdWxlOiBhbW9ydGl6YXRpb25TY2hlZHVsZSxcbiAgICAgIG90aGVyRmVlczoge1xuICAgICAgICBub3RhcnlGZWVzOiB7XG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGxhYmVsOiAnTk9UQVJZX0ZFRVMnXG4gICAgICAgIH0sXG4gICAgICAgIGJhbmtGZWVzOiB7XG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGxhYmVsOiAnQkFOS19GRUVTJ1xuICAgICAgICB9LFxuICAgICAgICBtb250aGx5SW5zdXJhbmNlRmVlczoge1xuICAgICAgICAgICAgdmFsdWU6IGluc3VyYW5jZVByZW1pdW0sXG4gICAgICAgICAgICBsYWJlbDogJ0lOU1VSQU5DRV9QUkVNSVVNJ1xuICAgICAgICB9XG4gICAgfVxuICAgIH07XG4gIH1cblxuICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgSGVscGVyIE1ldGhvZHNcbiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVBbW9ydGl6YXRpb25TY2hlZHVsZShcbiAgICBwcmluY2lwYWw6IG51bWJlcixcbiAgICBwZXJpb2RpY1JhdGU6IG51bWJlcixcbiAgICBwYXltZW50QW1vdW50OiBudW1iZXIsXG4gICAgdG90YWxQYXltZW50czogbnVtYmVyLFxuICAgIGFtb3J0aXphdGlvblllYXJzOiBudW1iZXIsXG4gICAgcGF5bWVudHNQZXJZZWFyOiBudW1iZXJcbiAgKTogQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtW10ge1xuICAgIGNvbnN0IHNjaGVkdWxlOiBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW1bXSA9IFtdO1xuICAgIGxldCBiYWxhbmNlID0gcHJpbmNpcGFsO1xuXG4gICAgZm9yIChsZXQgeWVhciA9IDE7IHllYXIgPD0gYW1vcnRpemF0aW9uWWVhcnM7IHllYXIrKykge1xuICAgICAgbGV0IHllYXJseVByaW5jaXBhbCA9IDA7XG4gICAgICBsZXQgeWVhcmx5SW50ZXJlc3QgPSAwO1xuXG4gICAgICBjb25zdCBwYXltZW50c0luWWVhciA9IE1hdGgubWluKHBheW1lbnRzUGVyWWVhciwgdG90YWxQYXltZW50cyAtICh5ZWFyIC0gMSkgKiBwYXltZW50c1BlclllYXIpO1xuXG4gICAgICBmb3IgKGxldCBwYXltZW50ID0gMTsgcGF5bWVudCA8PSBwYXltZW50c0luWWVhcjsgcGF5bWVudCsrKSB7XG4gICAgICAgIGNvbnN0IGludGVyZXN0UGF5bWVudCA9IGJhbGFuY2UgKiBwZXJpb2RpY1JhdGU7XG4gICAgICAgIGNvbnN0IHByaW5jaXBhbFBheW1lbnQgPSBwYXltZW50QW1vdW50IC0gaW50ZXJlc3RQYXltZW50O1xuXG4gICAgICAgIHllYXJseUludGVyZXN0ICs9IGludGVyZXN0UGF5bWVudDtcbiAgICAgICAgeWVhcmx5UHJpbmNpcGFsICs9IHByaW5jaXBhbFBheW1lbnQ7XG4gICAgICAgIGJhbGFuY2UgLT0gcHJpbmNpcGFsUGF5bWVudDtcbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGUucHVzaCh7XG4gICAgICAgIHllYXIsXG4gICAgICAgIHByaW5jaXBhbDogeWVhcmx5UHJpbmNpcGFsLFxuICAgICAgICBpbnRlcmVzdDogeWVhcmx5SW50ZXJlc3QsXG4gICAgICAgIGJhbGFuY2U6IE1hdGgubWF4KDAsIGJhbGFuY2UpXG4gICAgICB9KTtcblxuICAgICAgaWYgKGJhbGFuY2UgPD0gMCkgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjaGVkdWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0Q2FuYWRpYW5SYXRlKFxuICAgIGFubnVhbFJhdGU6IG51bWJlcixcbiAgICBjb21wb3VuZGluZzogJ1NFTUlfQU5OVUFMJyB8ICdBTk5VQUwnIHwgJ01PTlRITFknLFxuICAgIHBheW1lbnRzUGVyWWVhcjogbnVtYmVyXG4gICk6IG51bWJlciB7XG5cbiAgICBpZiAoY29tcG91bmRpbmcgIT09ICdTRU1JX0FOTlVBTCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBDYW5hZGlhbiBzZW1pLWFubnVhbCBjb21wb3VuZGluZyBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICAvLyBDYW5hZGlhbiBzdGFuZGFyZCBjb252ZXJzaW9uXG4gICAgY29uc3Qgc2VtaUFubnVhbFJhdGUgPSBhbm51YWxSYXRlIC8gMjtcbiAgICBjb25zdCBlZmZlY3RpdmVBbm51YWxSYXRlID0gTWF0aC5wb3coMSArIHNlbWlBbm51YWxSYXRlLCAyKSAtIDE7XG5cbiAgICByZXR1cm4gTWF0aC5wb3coMSArIGVmZmVjdGl2ZUFubnVhbFJhdGUsIDEgLyBwYXltZW50c1BlclllYXIpIC0gMTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlUGF5bWVudChwcmluY2lwYWw6IG51bWJlciwgcmF0ZTogbnVtYmVyLCBwZXJpb2RzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyYXRlID09PSAwKSB7XG4gICAgICByZXR1cm4gcHJpbmNpcGFsIC8gcGVyaW9kcztcbiAgICB9XG5cbiAgICByZXR1cm4gcHJpbmNpcGFsICpcbiAgICAgIChyYXRlICogTWF0aC5wb3coMSArIHJhdGUsIHBlcmlvZHMpKSAvXG4gICAgICAoTWF0aC5wb3coMSArIHJhdGUsIHBlcmlvZHMpIC0gMSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9ydGdhZ2UvY2FuYWRhL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUnVsZU1ldGEgfSBmcm9tIFwiLi4vLi4vLi4vc2hhcmVkL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVJbnB1dERlZmluaXRpb24ge1xuICAgIHR5cGU6ICdudW1iZXInIHwgJ3N0cmluZyc7XG4gICAgbWluPzogbnVtYmVyO1xuICAgIG1heD86IG51bWJlcjtcbiAgICBlbnVtPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZUlucHV0cyB7XG4gICAgcHJvcGVydHlQcmljZTogUnVsZUlucHV0RGVmaW5pdGlvbjtcbiAgICBkb3duUGF5bWVudDogUnVsZUlucHV0RGVmaW5pdGlvbjtcbiAgICBpbnRlcmVzdFJhdGU6IFJ1bGVJbnB1dERlZmluaXRpb247XG4gICAgYW1vcnRpemF0aW9uWWVhcnM6IFJ1bGVJbnB1dERlZmluaXRpb247XG4gICAgcGF5bWVudEZyZXF1ZW5jeTogUnVsZUlucHV0RGVmaW5pdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWxlT3V0cHV0cyB7XG4gICAgbG9hbkFtb3VudDogJ251bWJlcic7XG4gICAgaW5zdXJhbmNlUHJlbWl1bTogJ251bWJlcic7XG4gICAgdG90YWxNb3J0Z2FnZTogJ251bWJlcic7XG4gICAgcGF5bWVudEFtb3VudDogJ251bWJlcic7XG4gICAgdG90YWxJbnRlcmVzdFBhaWQ6ICdudW1iZXInO1xuICAgIHRvdGFsUGFpZDogJ251bWJlcic7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hbkNvbnN0cmFpbnRzIHtcbiAgICBtYXhBbW9ydGl6YXRpb25ZZWFyczogbnVtYmVyO1xuICAgIGluc3VyZWRNYXhBbW9ydGl6YXRpb25ZZWFyczogbnVtYmVyO1xuICAgIG1pbkRvd25QYXltZW50OiB7XG4gICAgICAgIHVwVG81MDBrOiBudW1iZXI7XG4gICAgICAgIGFib3ZlNTAwazogbnVtYmVyO1xuICAgIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VJbnN1cmFuY2VSYXRlIHtcbiAgICBtYXhMdHY6IG51bWJlcjtcbiAgICByYXRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VJbnN1cmFuY2VSdWxlcyB7XG4gICAgcmVxdWlyZWRCZWxvd0x0djogbnVtYmVyO1xuICAgIHByZW1pdW1SYXRlczogTW9ydGdhZ2VJbnN1cmFuY2VSYXRlW107XG4gICAgcHJlbWl1bUFkZGVkVG9Mb2FuOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VSdWxlcyB7XG4gICAgbG9hbkNvbnN0cmFpbnRzOiBMb2FuQ29uc3RyYWludHM7XG4gICAgbW9ydGdhZ2VJbnN1cmFuY2U6IE1vcnRnYWdlSW5zdXJhbmNlUnVsZXM7XG4gICAgaW50ZXJlc3Q6IEludGVyZXN0UnVsZXM7XG4gICAgcGF5bWVudEZyZXF1ZW5jeVJ1bGVzOiBQYXltZW50RnJlcXVlbmN5UnVsZXM7XG4gICAgc3RyZXNzVGVzdDogU3RyZXNzVGVzdFJ1bGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZXN0UnVsZXMge1xuICAgIGNvbXBvdW5kaW5nOiAnU0VNSV9BTk5VQUwnIHwgJ0FOTlVBTCcgfCAnTU9OVEhMWSc7XG4gICAgY29udmVyc2lvbkZvcm11bGE6ICdDQU5BREFfU1RBTkRBUkQnIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBheW1lbnRGcmVxdWVuY3lSdWxlIHtcbiAgICBwYXltZW50c1BlclllYXI6IG51bWJlcjtcbiAgICBhY2NlbGVyYXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBheW1lbnRGcmVxdWVuY3lSdWxlcyB7XG4gICAgTU9OVEhMWTogUGF5bWVudEZyZXF1ZW5jeVJ1bGU7XG4gICAgQklfV0VFS0xZOiBQYXltZW50RnJlcXVlbmN5UnVsZTtcbiAgICBBQ0NFTEVSQVRFRF9CSV9XRUVLTFk6IFBheW1lbnRGcmVxdWVuY3lSdWxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVzc1Rlc3RSdWxlcyB7XG4gICAgYXBwbHk6IGJvb2xlYW47XG4gICAgbWluaW11bVJhdGVCdWZmZXI6IG51bWJlcjtcbiAgICBtaW5pbXVtUXVhbGlmeWluZ1JhdGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZVJ1bGVTZXQge1xuICAgIG1ldGE6IFJ1bGVNZXRhO1xuICAgIGlucHV0czogUnVsZUlucHV0cztcbiAgICBydWxlczogTW9ydGdhZ2VSdWxlcztcbiAgICBvdXRwdXRzOiBSdWxlT3V0cHV0cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZUNhbGN1bGF0aW9uSW5wdXQge1xuICBwcm9wZXJ0eVByaWNlOiBudW1iZXI7XG4gIGRvd25QYXltZW50OiBudW1iZXI7XG4gIGludGVyZXN0UmF0ZTogbnVtYmVyOyAvLyBBbm51YWwgbm9taW5hbCByYXRlIChlLmcuIDAuMDUyKVxuICBhbW9ydGl6YXRpb25ZZWFyczogbnVtYmVyO1xuICBwYXltZW50RnJlcXVlbmN5OiAnTU9OVEhMWScgfCAnQklfV0VFS0xZJyB8ICdBQ0NFTEVSQVRFRF9CSV9XRUVLTFknO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbSB7XG4gIHllYXI6IG51bWJlcjtcbiAgcHJpbmNpcGFsOiBudW1iZXI7XG4gIGludGVyZXN0OiBudW1iZXI7XG4gIGJhbGFuY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZUNhbGN1bGF0aW9uUmVzdWx0IHtcbiAgbG9hbkFtb3VudDogbnVtYmVyO1xuICBpbnN1cmFuY2VQcmVtaXVtOiBudW1iZXI7XG4gIHRvdGFsTW9ydGdhZ2U6IG51bWJlcjtcbiAgcGF5bWVudEFtb3VudDogbnVtYmVyO1xuICB0b3RhbEludGVyZXN0UGFpZDogbnVtYmVyO1xuICB0b3RhbFBhaWQ6IG51bWJlcjtcbiAgYW1vcnRpemF0aW9uU2NoZWR1bGU6IEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbVtdO1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9ydGdhZ2UvY2FuYWRhL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUnVsZU1ldGEgfSBmcm9tIFwiLi4vLi4vLi4vc2hhcmVkL2RvbWFpbi90eXBlc1wiO1xuaW1wb3J0IHsgT3RoZXJGZWVzIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVJbnB1dERlZmluaXRpb24ge1xuICAgIHR5cGU6ICdudW1iZXInIHwgJ3N0cmluZyc7XG4gICAgbWluPzogbnVtYmVyO1xuICAgIG1heD86IG51bWJlcjtcbiAgICBlbnVtPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZUlucHV0cyB7XG4gICAgcHJvcGVydHlQcmljZTogUnVsZUlucHV0RGVmaW5pdGlvbjtcbiAgICBkb3duUGF5bWVudDogUnVsZUlucHV0RGVmaW5pdGlvbjtcbiAgICBpbnRlcmVzdFJhdGU6IFJ1bGVJbnB1dERlZmluaXRpb247XG4gICAgYW1vcnRpemF0aW9uWWVhcnM6IFJ1bGVJbnB1dERlZmluaXRpb247XG4gICAgcGF5bWVudEZyZXF1ZW5jeTogUnVsZUlucHV0RGVmaW5pdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWxlT3V0cHV0cyB7XG4gICAgbG9hbkFtb3VudDogJ251bWJlcic7XG4gICAgaW5zdXJhbmNlUHJlbWl1bTogJ251bWJlcic7XG4gICAgdG90YWxNb3J0Z2FnZTogJ251bWJlcic7XG4gICAgcGF5bWVudEFtb3VudDogJ251bWJlcic7XG4gICAgdG90YWxJbnRlcmVzdFBhaWQ6ICdudW1iZXInO1xuICAgIHRvdGFsUGFpZDogJ251bWJlcic7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hbkNvbnN0cmFpbnRzIHtcbiAgICBtYXhBbW9ydGl6YXRpb25ZZWFyczogbnVtYmVyO1xuICAgIGluc3VyZWRNYXhBbW9ydGl6YXRpb25ZZWFyczogbnVtYmVyO1xuICAgIG1pbkRvd25QYXltZW50OiB7XG4gICAgICAgIHVwVG81MDBrOiBudW1iZXI7XG4gICAgICAgIGFib3ZlNTAwazogbnVtYmVyO1xuICAgIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VJbnN1cmFuY2VSYXRlIHtcbiAgICBtYXhMdHY6IG51bWJlcjtcbiAgICByYXRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VJbnN1cmFuY2VSdWxlcyB7XG4gICAgcmVxdWlyZWRCZWxvd0x0djogbnVtYmVyO1xuICAgIHByZW1pdW1SYXRlczogTW9ydGdhZ2VJbnN1cmFuY2VSYXRlW107XG4gICAgcHJlbWl1bUFkZGVkVG9Mb2FuOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VSdWxlcyB7XG4gICAgbG9hbkNvbnN0cmFpbnRzOiBMb2FuQ29uc3RyYWludHM7XG4gICAgbW9ydGdhZ2VJbnN1cmFuY2U6IE1vcnRnYWdlSW5zdXJhbmNlUnVsZXM7XG4gICAgaW50ZXJlc3Q6IEludGVyZXN0UnVsZXM7XG4gICAgcGF5bWVudEZyZXF1ZW5jeVJ1bGVzOiBQYXltZW50RnJlcXVlbmN5UnVsZXM7XG4gICAgc3RyZXNzVGVzdDogU3RyZXNzVGVzdFJ1bGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZXN0UnVsZXMge1xuICAgIGNvbXBvdW5kaW5nOiAnU0VNSV9BTk5VQUwnIHwgJ0FOTlVBTCcgfCAnTU9OVEhMWSc7XG4gICAgY29udmVyc2lvbkZvcm11bGE6ICdDQU5BREFfU1RBTkRBUkQnIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBheW1lbnRGcmVxdWVuY3lSdWxlIHtcbiAgICBwYXltZW50c1BlclllYXI6IG51bWJlcjtcbiAgICBhY2NlbGVyYXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBheW1lbnRGcmVxdWVuY3lSdWxlcyB7XG4gICAgTU9OVEhMWTogUGF5bWVudEZyZXF1ZW5jeVJ1bGU7XG4gICAgQklfV0VFS0xZOiBQYXltZW50RnJlcXVlbmN5UnVsZTtcbiAgICBBQ0NFTEVSQVRFRF9CSV9XRUVLTFk6IFBheW1lbnRGcmVxdWVuY3lSdWxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVzc1Rlc3RSdWxlcyB7XG4gICAgYXBwbHk6IGJvb2xlYW47XG4gICAgbWluaW11bVJhdGVCdWZmZXI6IG51bWJlcjtcbiAgICBtaW5pbXVtUXVhbGlmeWluZ1JhdGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZVJ1bGVTZXQge1xuICAgIG1ldGE6IFJ1bGVNZXRhO1xuICAgIGlucHV0czogUnVsZUlucHV0cztcbiAgICBydWxlczogTW9ydGdhZ2VSdWxlcztcbiAgICBvdXRwdXRzOiBSdWxlT3V0cHV0cztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZUNhbGN1bGF0aW9uSW5wdXQge1xuICBwcm9wZXJ0eVByaWNlOiBudW1iZXI7XG4gIGRvd25QYXltZW50OiBudW1iZXI7XG4gIGludGVyZXN0UmF0ZTogbnVtYmVyOyAvLyBBbm51YWwgbm9taW5hbCByYXRlIChlLmcuIDAuMDUyKVxuICBhbW9ydGl6YXRpb25ZZWFyczogbnVtYmVyO1xuICBwYXltZW50RnJlcXVlbmN5OiAnTU9OVEhMWScgfCAnQklfV0VFS0xZJyB8ICdBQ0NFTEVSQVRFRF9CSV9XRUVLTFknO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbSB7XG4gIHllYXI6IG51bWJlcjtcbiAgcHJpbmNpcGFsOiBudW1iZXI7XG4gIGludGVyZXN0OiBudW1iZXI7XG4gIGJhbGFuY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZUNhbGN1bGF0aW9uUmVzdWx0IHtcbiAgbG9hbkFtb3VudDogbnVtYmVyO1xuICBpbnN1cmFuY2VQcmVtaXVtOiBudW1iZXI7XG4gIHRvdGFsTW9ydGdhZ2U6IG51bWJlcjtcbiAgbW9udGhseVBheW1lbnRBbW91bnQ6IG51bWJlcjtcbiAgdG90YWxJbnRlcmVzdFBhaWQ6IG51bWJlcjtcbiAgdG90YWxQYWlkOiBudW1iZXI7XG4gIGFtb3J0aXphdGlvblNjaGVkdWxlOiBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW1bXTtcbiAgb3RoZXJGZWVzOiBPdGhlckZlZXM7XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9ydGdhZ2UvZG9tYWluL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE90aGVyRmVlcyB7XG4gICAgbm90YXJ5RmVlczoge1xuICAgICAgICB2YWx1ZTogbnVtYmVyO1xuICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgIH07XG4gICAgYmFua0ZlZXM6IHtcbiAgICAgICAgdmFsdWU6IG51bWJlcjtcbiAgICAgICAgbGFiZWw6IHN0cmluZztcbiAgICB9O1xuICAgIG1vbnRobHlJbnN1cmFuY2VGZWVzOiB7XG4gICAgICAgIHZhbHVlOiBudW1iZXI7XG4gICAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgfTtcbn0iXX0=
@@ -39,27 +39,55 @@ class FranceMortgageServiceImpl {
39
39
  maxMonthlyPayment -= monthlyInsuranceCost;
40
40
  }
41
41
  const maxLoanAmount = this.calculateLoanAmount(maxMonthlyPayment, stressedRate, loanDurationYears);
42
- const amortizationSchedule = this.calculateAmortizationSchedule(requiredLoanAmount, this._input.annualInterestRate, loanDurationYears);
42
+ const monthlyPayment = this.calculateMonthlyPayment(requiredLoanAmount, this._input.annualInterestRate, loanDurationYears);
43
+ const totalPaid = monthlyPayment * loanDurationYears * 12;
44
+ const totalInterestPaid = totalPaid - requiredLoanAmount;
45
+ const amortizationSchedule = this.calculateAmortizationSchedule(requiredLoanAmount, this._input.annualInterestRate, loanDurationYears, monthlyPayment);
43
46
  return {
47
+ loanAmount: requiredLoanAmount,
48
+ totalPaid,
49
+ totalInterestPaid,
50
+ monthlyPayment,
51
+ requiredLoanAmount,
44
52
  maxMonthlyPayment,
45
53
  maxLoanAmount,
46
54
  totalProjectCost,
47
- requiredLoanAmount,
48
55
  loanDurationYears,
49
56
  debtRatio: debtRatio,
50
57
  monthlyInsuranceCost,
51
58
  isEligible: maxLoanAmount >= requiredLoanAmount,
52
- amortizationSchedule
59
+ amortizationSchedule,
60
+ otherFees: {
61
+ notaryFees: {
62
+ value: notaryFees,
63
+ label: 'NOTARY_FEES'
64
+ },
65
+ bankFees: {
66
+ value: bankFees,
67
+ label: 'BANK_FEES'
68
+ },
69
+ monthlyInsuranceFees: {
70
+ value: monthlyInsuranceCost,
71
+ label: 'MONTHLY_INSURANCE_FEES'
72
+ }
73
+ }
53
74
  };
54
75
  }
55
- calculateAmortizationSchedule(loanAmount, annualRate, years) {
76
+ calculateMonthlyPayment(principal, annualRate, years) {
77
+ const monthlyRate = annualRate / 100 / 12;
78
+ const payments = years * 12;
79
+ if (monthlyRate === 0) {
80
+ return payments === 0 ? 0 : principal / payments;
81
+ }
82
+ return (principal *
83
+ (monthlyRate / (1 - Math.pow(1 + monthlyRate, -payments))));
84
+ }
85
+ calculateAmortizationSchedule(loanAmount, annualRate, years, monthlyPayment) {
56
86
  const monthlyRate = annualRate / 100 / 12;
57
87
  const totalPayments = years * 12;
58
- if (monthlyRate === 0 || loanAmount <= 0) {
88
+ if (monthlyRate === 0 || loanAmount <= 0 || monthlyPayment <= 0) {
59
89
  return [];
60
90
  }
61
- const monthlyPayment = (loanAmount * monthlyRate) /
62
- (1 - Math.pow(1 + monthlyRate, -totalPayments));
63
91
  const schedule = [];
64
92
  let balance = loanAmount;
65
93
  for (let year = 1; year <= years; year++) {
@@ -102,10 +130,28 @@ class FranceMortgageServiceImpl {
102
130
  loanDurationYears: 0,
103
131
  debtRatio: 0,
104
132
  monthlyInsuranceCost: 0,
133
+ loanAmount: 0,
134
+ monthlyPayment: 0,
135
+ totalInterestPaid: 0,
136
+ totalPaid: 0,
105
137
  isEligible: false,
106
- amortizationSchedule: []
138
+ amortizationSchedule: [],
139
+ otherFees: {
140
+ notaryFees: {
141
+ value: 0,
142
+ label: 'NOTARY_FEES'
143
+ },
144
+ bankFees: {
145
+ value: 0,
146
+ label: 'BANK_FEES'
147
+ },
148
+ monthlyInsuranceFees: {
149
+ value: 0,
150
+ label: 'MONTHLY_INSURANCE_FEES'
151
+ }
152
+ }
107
153
  };
108
154
  }
109
155
  }
110
156
  exports.FranceMortgageServiceImpl = FranceMortgageServiceImpl;
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb3J0Z2FnZS9mcmFuY2UvRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxNQUFhLHlCQUF5QjtJQUlsQyxZQUFZLEtBQW9CLEVBQUUsS0FBb0I7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELFNBQVM7UUFFTCxJQUNJLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYztZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyx3QkFBd0I7WUFDbkQsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUNqQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FDWCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU87WUFDM0YsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVk7WUFDekMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBRW5DLE1BQU0saUJBQWlCLEdBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTztZQUM1RixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FB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LEVBQUUsVUFBa0IsRUFBRSxLQUFhO1FBQ2pGLE1BQU0sV0FBVyxHQUFHLFVBQVUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7UUFFNUIsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBQ3JDLENBQUM7UUFFRCxPQUFPLENBQ0gsY0FBYztZQUNkLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FDN0QsQ0FBQztJQUNOLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFvQjtRQUN6QyxPQUFPO1lBQ0gsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixhQUFhLEVBQUUsQ0FBQztZQUNoQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNyQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxXQUFXO1lBQzNELGlCQUFpQixFQUFFLENBQUM7WUFDcEIsU0FBUyxFQUFFLENBQUM7WUFDWixvQkFBb0IsRUFBRSxDQUFDO1lBQ3ZCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLG9CQUFvQixFQUFFLEVBQUU7U0FDM0IsQ0FBQztJQUNOLENBQUM7Q0FDSjtBQTNKRCw4REEySkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGcmFuY2VNb3J0Z2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBNb3J0Z2FnZVJ1bGVzLCBNb3J0Z2FnZUlucHV0LCBNb3J0Z2FnZU91dHB1dCwgQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtIH0gZnJvbSAnLi9kb21haW4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEZyYW5jZU1vcnRnYWdlU2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaW5wdXQ6IE1vcnRnYWdlSW5wdXQ7XG4gICAgcHJpdmF0ZSBfcnVsZXM6IE1vcnRnYWdlUnVsZXM7XG5cbiAgICBjb25zdHJ1Y3RvcihpbnB1dDogTW9ydGdhZ2VJbnB1dCwgcnVsZXM6IE1vcnRnYWdlUnVsZXMpIHtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fcnVsZXMgPSBydWxlcztcbiAgICB9XG5cbiAgICBjYWxjdWxhdGUoKTogTW9ydGdhZ2VPdXRwdXQge1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LmlzRmlyc3RUaW1lQnV5ZXIgJiZcbiAgICAgICAgICAgIHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyICYmXG4gICAgICAgICAgICB0aGlzLl9ydWxlcy5maXJzdFRpbWVCdXllci5yZXF1aXJlc1ByaW1hcnlSZXNpZGVuY2UgJiZcbiAgICAgICAgICAgICF0aGlzLl9pbnB1dC5pc1ByaW1hcnlSZXNpZGVuY2VcbiAgICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZWxpZ2libGVSZXN1bHQodGhpcy5faW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVidFJhdGlvID1cbiAgICAgICAgICAgIHRoaXMuX2lucHV0LmlzRmlyc3RUaW1lQnV5ZXIgJiYgdGhpcy5fcnVsZXMuZmlyc3RUaW1lQnV5ZXIgJiZ0aGlzLl9ydWxlcy5maXJzdFRpbWVCdXllci5lbmFibGVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9ydWxlcy5maXJzdFRpbWVCdXllci5tYXhEZWJ0UmF0aW9cbiAgICAgICAgICAgICAgICA6IHRoaXMuX3J1bGVzLm1heERlYnRSYXRpbztcblxuICAgICAgICBjb25zdCBsb2FuRHVyYXRpb25ZZWFycyA9XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5pc0ZpcnN0VGltZUJ1eWVyICYmIHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyICYmIHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyLmVuYWJsZWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyLm1heExvYW5EdXJhdGlvblllYXJzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9pbnB1dC5pc05ld0J1aWxkXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9ydWxlcy5tYXhMb2FuRHVyYXRpb25OZXdCdWlsZFllYXJzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9ydWxlcy5tYXhMb2FuRHVyYXRpb25ZZWFycztcblxuICAgICAgICBjb25zdCBtaW5Eb3duUGF5bWVudCA9IHRoaXMuX2lucHV0LnByb3BlcnR5UHJpY2UgKiB0aGlzLl9ydWxlcy5taW5Eb3duUGF5bWVudFJhdGU7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0LmRvd25QYXltZW50IDwgbWluRG93blBheW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZWxpZ2libGVSZXN1bHQodGhpcy5faW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm90YXJ5UmF0ZSA9IHRoaXMuX2lucHV0LmlzTmV3QnVpbGRcbiAgICAgICAgPyB0aGlzLl9ydWxlcy5mZWVzLm5vdGFyeVJhdGVOZXdQcm9wZXJ0eVxuICAgICAgICA6IHRoaXMuX3J1bGVzLmZlZXMubm90YXJ5UmF0ZU9sZFByb3BlcnR5O1xuXG4gICAgICAgIGNvbnN0IG5vdGFyeUZlZXMgPSB0aGlzLl9pbnB1dC5wcm9wZXJ0eVByaWNlICogbm90YXJ5UmF0ZTtcbiAgICAgICAgY29uc3QgYmFua0ZlZXMgPSB0aGlzLl9pbnB1dC5wcm9wZXJ0eVByaWNlICogdGhpcy5fcnVsZXMuZmVlcy5iYW5rRmVlc1JhdGU7XG4gICAgICAgIGNvbnN0IHRvdGFsUHJvamVjdENvc3QgPSB0aGlzLl9pbnB1dC5wcm9wZXJ0eVByaWNlICsgbm90YXJ5RmVlcyArIGJhbmtGZWVzO1xuICAgICAgICBjb25zdCByZXF1aXJlZExvYW5BbW91bnQgPSB0b3RhbFByb2plY3RDb3N0IC0gdGhpcy5faW5wdXQuZG93blBheW1lbnQ7XG4gICAgICAgIGNvbnN0IHN0cmVzc2VkUmF0ZSA9IHRoaXMuX2lucHV0LmFubnVhbEludGVyZXN0UmF0ZSArIHRoaXMuX3J1bGVzLnN0cmVzc1Rlc3QuaW50ZXJlc3RSYXRlQnVmZmVyO1xuXG4gICAgICAgIGNvbnN0IG1vbnRobHlJbnN1cmFuY2VDb3N0ID0gKHJlcXVpcmVkTG9hbkFtb3VudCAqIHRoaXMuX3J1bGVzLmluc3VyYW5jZS5hdmVyYWdlUmF0ZSkgLyAxMjtcblxuICAgICAgICBsZXQgbWF4TW9udGhseVBheW1lbnQgPSB0aGlzLl9pbnB1dC5uZXRNb250aGx5SW5jb21lICogZGVidFJhdGlvO1xuXG4gICAgICAgIGlmICh0aGlzLl9ydWxlcy5pbnN1cmFuY2UuaW5jbHVkZWRJbkRlYnRSYXRpbykge1xuICAgICAgICAgICAgbWF4TW9udGhseVBheW1lbnQgLT0gbW9udGhseUluc3VyYW5jZUNvc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXhMb2FuQW1vdW50ID0gdGhpcy5jYWxjdWxhdGVMb2FuQW1vdW50KFxuICAgICAgICAgICAgbWF4TW9udGhseVBheW1lbnQsXG4gICAgICAgICAgICBzdHJlc3NlZFJhdGUsXG4gICAgICAgICAgICBsb2FuRHVyYXRpb25ZZWFyc1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGFtb3J0aXphdGlvblNjaGVkdWxlID0gdGhpcy5jYWxjdWxhdGVBbW9ydGl6YXRpb25TY2hlZHVsZShcbiAgICAgICAgICAgIHJlcXVpcmVkTG9hbkFtb3VudCxcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LmFubnVhbEludGVyZXN0UmF0ZSxcbiAgICAgICAgICAgIGxvYW5EdXJhdGlvblllYXJzXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1heE1vbnRobHlQYXltZW50LFxuICAgICAgICAgICAgbWF4TG9hbkFtb3VudCxcbiAgICAgICAgICAgIHRvdGFsUHJvamVjdENvc3QsXG4gICAgICAgICAgICByZXF1aXJlZExvYW5BbW91bnQsXG4gICAgICAgICAgICBsb2FuRHVyYXRpb25ZZWFycyxcbiAgICAgICAgICAgIGRlYnRSYXRpbzogZGVidFJhdGlvLFxuICAgICAgICAgICAgbW9udGhseUluc3VyYW5jZUNvc3QsXG4gICAgICAgICAgICBpc0VsaWdpYmxlOiBtYXhMb2FuQW1vdW50ID49IHJlcXVpcmVkTG9hbkFtb3VudCxcbiAgICAgICAgICAgIGFtb3J0aXphdGlvblNjaGVkdWxlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVBbW9ydGl6YXRpb25TY2hlZHVsZShcbiAgICAgICAgbG9hbkFtb3VudDogbnVtYmVyLFxuICAgICAgICBhbm51YWxSYXRlOiBudW1iZXIsXG4gICAgICAgIHllYXJzOiBudW1iZXJcbiAgICApOiBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IG1vbnRobHlSYXRlID0gYW5udWFsUmF0ZSAvIDEwMCAvIDEyO1xuICAgICAgICBjb25zdCB0b3RhbFBheW1lbnRzID0geWVhcnMgKiAxMjtcblxuICAgICAgICBpZiAobW9udGhseVJhdGUgPT09IDAgfHwgbG9hbkFtb3VudCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb250aGx5UGF5bWVudCA9XG4gICAgICAgICAgICAobG9hbkFtb3VudCAqIG1vbnRobHlSYXRlKSAvXG4gICAgICAgICAgICAoMSAtIE1hdGgucG93KDEgKyBtb250aGx5UmF0ZSwgLXRvdGFsUGF5bWVudHMpKTtcblxuICAgICAgICBjb25zdCBzY2hlZHVsZTogQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtW10gPSBbXTtcbiAgICAgICAgbGV0IGJhbGFuY2UgPSBsb2FuQW1vdW50O1xuXG4gICAgICAgIGZvciAobGV0IHllYXIgPSAxOyB5ZWFyIDw9IHllYXJzOyB5ZWFyKyspIHtcbiAgICAgICAgICAgIGxldCB5ZWFybHlQcmluY2lwYWwgPSAwO1xuICAgICAgICAgICAgbGV0IHllYXJseUludGVyZXN0ID0gMDtcblxuICAgICAgICAgICAgY29uc3QgcGF5bWVudHNJblllYXIgPSBNYXRoLm1pbigxMiwgdG90YWxQYXltZW50cyAtICh5ZWFyIC0gMSkgKiAxMik7XG5cbiAgICAgICAgICAgIGZvciAobGV0IG1vbnRoID0gMTsgbW9udGggPD0gcGF5bWVudHNJblllYXI7IG1vbnRoKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcmVzdFBheW1lbnQgPSBiYWxhbmNlICogbW9udGhseVJhdGU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpbmNpcGFsUGF5bWVudCA9IG1vbnRobHlQYXltZW50IC0gaW50ZXJlc3RQYXltZW50O1xuXG4gICAgICAgICAgICAgICAgeWVhcmx5SW50ZXJlc3QgKz0gaW50ZXJlc3RQYXltZW50O1xuICAgICAgICAgICAgICAgIHllYXJseVByaW5jaXBhbCArPSBwcmluY2lwYWxQYXltZW50O1xuICAgICAgICAgICAgICAgIGJhbGFuY2UgLT0gcHJpbmNpcGFsUGF5bWVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NoZWR1bGUucHVzaCh7XG4gICAgICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgICAgICBwcmluY2lwYWw6IHllYXJseVByaW5jaXBhbCxcbiAgICAgICAgICAgICAgICBpbnRlcmVzdDogeWVhcmx5SW50ZXJlc3QsXG4gICAgICAgICAgICAgICAgYmFsYW5jZTogTWF0aC5tYXgoMCwgYmFsYW5jZSlcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoYmFsYW5jZSA8PSAwKSBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzY2hlZHVsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZUxvYW5BbW91bnQobW9udGhseVBheW1lbnQ6IG51bWJlciwgYW5udWFsUmF0ZTogbnVtYmVyLCB5ZWFyczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbW9udGhseVJhdGUgPSBhbm51YWxSYXRlIC8gMTAwIC8gMTI7XG4gICAgICAgIGNvbnN0IHBheW1lbnRzID0geWVhcnMgKiAxMjtcblxuICAgICAgICBpZiAobW9udGhseVJhdGUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aGx5UGF5bWVudCAqIHBheW1lbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG1vbnRobHlQYXltZW50ICpcbiAgICAgICAgICAgICgoMSAtIE1hdGgucG93KDEgKyBtb250aGx5UmF0ZSwgLXBheW1lbnRzKSkgLyBtb250aGx5UmF0ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluZWxpZ2libGVSZXN1bHQoaW5wdXQ6IE1vcnRnYWdlSW5wdXQpOiBNb3J0Z2FnZU91dHB1dCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtYXhNb250aGx5UGF5bWVudDogMCxcbiAgICAgICAgICAgIG1heExvYW5BbW91bnQ6IDAsXG4gICAgICAgICAgICB0b3RhbFByb2plY3RDb3N0OiBpbnB1dC5wcm9wZXJ0eVByaWNlLFxuICAgICAgICAgICAgcmVxdWlyZWRMb2FuQW1vdW50OiBpbnB1dC5wcm9wZXJ0eVByaWNlIC0gaW5wdXQuZG93blBheW1lbnQsXG4gICAgICAgICAgICBsb2FuRHVyYXRpb25ZZWFyczogMCxcbiAgICAgICAgICAgIGRlYnRSYXRpbzogMCxcbiAgICAgICAgICAgIG1vbnRobHlJbnN1cmFuY2VDb3N0OiAwLFxuICAgICAgICAgICAgaXNFbGlnaWJsZTogZmFsc2UsXG4gICAgICAgICAgICBhbW9ydGl6YXRpb25TY2hlZHVsZTogW11cbiAgICAgICAgfTtcbiAgICB9XG59Il19
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb3J0Z2FnZS9mcmFuY2UvRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxNQUFhLHlCQUF5QjtJQUlsQyxZQUFZLEtBQW9CLEVBQUUsS0FBb0I7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELFNBQVM7UUFFTCxJQUNJLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYztZQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyx3QkFBd0I7WUFDbkQsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUNqQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FDWCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU87WUFDM0YsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVk7WUFDekMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBRW5DLE1BQU0saUJBQWlCLEdBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTztZQUM1RixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FB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fSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBNb3J0Z2FnZVJ1bGVzLCBNb3J0Z2FnZUlucHV0LCBNb3J0Z2FnZU91dHB1dCwgQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtIH0gZnJvbSAnLi9kb21haW4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRnJhbmNlTW9ydGdhZ2VTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEZyYW5jZU1vcnRnYWdlU2VydmljZSB7XG4gICAgcHJpdmF0ZSBfaW5wdXQ6IE1vcnRnYWdlSW5wdXQ7XG4gICAgcHJpdmF0ZSBfcnVsZXM6IE1vcnRnYWdlUnVsZXM7XG5cbiAgICBjb25zdHJ1Y3RvcihpbnB1dDogTW9ydGdhZ2VJbnB1dCwgcnVsZXM6IE1vcnRnYWdlUnVsZXMpIHtcbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5fcnVsZXMgPSBydWxlcztcbiAgICB9XG5cbiAgICBjYWxjdWxhdGUoKTogTW9ydGdhZ2VPdXRwdXQge1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LmlzRmlyc3RUaW1lQnV5ZXIgJiZcbiAgICAgICAgICAgIHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyICYmXG4gICAgICAgICAgICB0aGlzLl9ydWxlcy5maXJzdFRpbWVCdXllci5yZXF1aXJlc1ByaW1hcnlSZXNpZGVuY2UgJiZcbiAgICAgICAgICAgICF0aGlzLl9pbnB1dC5pc1ByaW1hcnlSZXNpZGVuY2VcbiAgICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZWxpZ2libGVSZXN1bHQodGhpcy5faW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVidFJhdGlvID1cbiAgICAgICAgICAgIHRoaXMuX2lucHV0LmlzRmlyc3RUaW1lQnV5ZXIgJiYgdGhpcy5fcnVsZXMuZmlyc3RUaW1lQnV5ZXIgJiZ0aGlzLl9ydWxlcy5maXJzdFRpbWVCdXllci5lbmFibGVkXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9ydWxlcy5maXJzdFRpbWVCdXllci5tYXhEZWJ0UmF0aW9cbiAgICAgICAgICAgICAgICA6IHRoaXMuX3J1bGVzLm1heERlYnRSYXRpbztcblxuICAgICAgICBjb25zdCBsb2FuRHVyYXRpb25ZZWFycyA9XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5pc0ZpcnN0VGltZUJ1eWVyICYmIHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyICYmIHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyLmVuYWJsZWRcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3J1bGVzLmZpcnN0VGltZUJ1eWVyLm1heExvYW5EdXJhdGlvblllYXJzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9pbnB1dC5pc05ld0J1aWxkXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9ydWxlcy5tYXhMb2FuRHVyYXRpb25OZXdCdWlsZFllYXJzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9ydWxlcy5tYXhMb2FuRHVyYXRpb25ZZWFycztcblxuICAgICAgICBjb25zdCBtaW5Eb3duUGF5bWVudCA9IHRoaXMuX2lucHV0LnByb3BlcnR5UHJpY2UgKiB0aGlzLl9ydWxlcy5taW5Eb3duUGF5bWVudFJhdGU7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0LmRvd25QYXltZW50IDwgbWluRG93blBheW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmluZWxpZ2libGVSZXN1bHQodGhpcy5faW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm90YXJ5UmF0ZSA9IHRoaXMuX2lucHV0LmlzTmV3QnVpbGRcbiAgICAgICAgPyB0aGlzLl9ydWxlcy5mZWVzLm5vdGFyeVJhdGVOZXdQcm9wZXJ0eVxuICAgICAgICA6IHRoaXMuX3J1bGVzLmZlZXMubm90YXJ5UmF0ZU9sZFByb3BlcnR5O1xuXG4gICAgICAgIGNvbnN0IG5vdGFyeUZlZXMgPSB0aGlzLl9pbnB1dC5wcm9wZXJ0eVByaWNlICogbm90YXJ5UmF0ZTtcbiAgICAgICAgY29uc3QgYmFua0ZlZXMgPSB0aGlzLl9pbnB1dC5wcm9wZXJ0eVByaWNlICogdGhpcy5fcnVsZXMuZmVlcy5iYW5rRmVlc1JhdGU7XG4gICAgICAgIGNvbnN0IHRvdGFsUHJvamVjdENvc3QgPSB0aGlzLl9pbnB1dC5wcm9wZXJ0eVByaWNlICsgbm90YXJ5RmVlcyArIGJhbmtGZWVzO1xuICAgICAgICBjb25zdCByZXF1aXJlZExvYW5BbW91bnQgPSB0b3RhbFByb2plY3RDb3N0IC0gdGhpcy5faW5wdXQuZG93blBheW1lbnQ7XG4gICAgICAgIGNvbnN0IHN0cmVzc2VkUmF0ZSA9IHRoaXMuX2lucHV0LmFubnVhbEludGVyZXN0UmF0ZSArIHRoaXMuX3J1bGVzLnN0cmVzc1Rlc3QuaW50ZXJlc3RSYXRlQnVmZmVyO1xuXG4gICAgICAgIGNvbnN0IG1vbnRobHlJbnN1cmFuY2VDb3N0ID0gKHJlcXVpcmVkTG9hbkFtb3VudCAqIHRoaXMuX3J1bGVzLmluc3VyYW5jZS5hdmVyYWdlUmF0ZSkgLyAxMjtcblxuICAgICAgICBsZXQgbWF4TW9udGhseVBheW1lbnQgPSB0aGlzLl9pbnB1dC5uZXRNb250aGx5SW5jb21lICogZGVidFJhdGlvO1xuXG4gICAgICAgIGlmICh0aGlzLl9ydWxlcy5pbnN1cmFuY2UuaW5jbHVkZWRJbkRlYnRSYXRpbykge1xuICAgICAgICAgICAgbWF4TW9udGhseVBheW1lbnQgLT0gbW9udGhseUluc3VyYW5jZUNvc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXhMb2FuQW1vdW50ID0gdGhpcy5jYWxjdWxhdGVMb2FuQW1vdW50KFxuICAgICAgICAgICAgbWF4TW9udGhseVBheW1lbnQsXG4gICAgICAgICAgICBzdHJlc3NlZFJhdGUsXG4gICAgICAgICAgICBsb2FuRHVyYXRpb25ZZWFyc1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG1vbnRobHlQYXltZW50ID0gdGhpcy5jYWxjdWxhdGVNb250aGx5UGF5bWVudChcbiAgICAgICAgICAgIHJlcXVpcmVkTG9hbkFtb3VudCxcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LmFubnVhbEludGVyZXN0UmF0ZSxcbiAgICAgICAgICAgIGxvYW5EdXJhdGlvblllYXJzXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdG90YWxQYWlkID0gbW9udGhseVBheW1lbnQgKiBsb2FuRHVyYXRpb25ZZWFycyAqIDEyO1xuICAgICAgICBjb25zdCB0b3RhbEludGVyZXN0UGFpZCA9IHRvdGFsUGFpZCAtIHJlcXVpcmVkTG9hbkFtb3VudDtcblxuICAgICAgICBjb25zdCBhbW9ydGl6YXRpb25TY2hlZHVsZSA9IHRoaXMuY2FsY3VsYXRlQW1vcnRpemF0aW9uU2NoZWR1bGUoXG4gICAgICAgICAgICByZXF1aXJlZExvYW5BbW91bnQsXG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5hbm51YWxJbnRlcmVzdFJhdGUsXG4gICAgICAgICAgICBsb2FuRHVyYXRpb25ZZWFycyxcbiAgICAgICAgICAgIG1vbnRobHlQYXltZW50XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvYW5BbW91bnQ6IHJlcXVpcmVkTG9hbkFtb3VudCxcbiAgICAgICAgICAgIHRvdGFsUGFpZCxcbiAgICAgICAgICAgIHRvdGFsSW50ZXJlc3RQYWlkLFxuICAgICAgICAgICAgbW9udGhseVBheW1lbnQsXG4gICAgICAgICAgICByZXF1aXJlZExvYW5BbW91bnQsXG4gICAgICAgICAgICBtYXhNb250aGx5UGF5bWVudCxcbiAgICAgICAgICAgIG1heExvYW5BbW91bnQsXG4gICAgICAgICAgICB0b3RhbFByb2plY3RDb3N0LFxuICAgICAgICAgICAgbG9hbkR1cmF0aW9uWWVhcnMsXG4gICAgICAgICAgICBkZWJ0UmF0aW86IGRlYnRSYXRpbyxcbiAgICAgICAgICAgIG1vbnRobHlJbnN1cmFuY2VDb3N0LFxuICAgICAgICAgICAgaXNFbGlnaWJsZTogbWF4TG9hbkFtb3VudCA+PSByZXF1aXJlZExvYW5BbW91bnQsXG4gICAgICAgICAgICBhbW9ydGl6YXRpb25TY2hlZHVsZSxcbiAgICAgICAgICAgIG90aGVyRmVlczoge1xuICAgICAgICAgICAgICAgIG5vdGFyeUZlZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5vdGFyeUZlZXMsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnTk9UQVJZX0ZFRVMnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiYW5rRmVlczoge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYmFua0ZlZXMsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQkFOS19GRUVTJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbW9udGhseUluc3VyYW5jZUZlZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1vbnRobHlJbnN1cmFuY2VDb3N0LFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ01PTlRITFlfSU5TVVJBTkNFX0ZFRVMnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlTW9udGhseVBheW1lbnQocHJpbmNpcGFsOiBudW1iZXIsIGFubnVhbFJhdGU6IG51bWJlciwgeWVhcnM6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1vbnRobHlSYXRlID0gYW5udWFsUmF0ZSAvIDEwMCAvIDEyO1xuICAgICAgICBjb25zdCBwYXltZW50cyA9IHllYXJzICogMTI7XG5cbiAgICAgICAgaWYgKG1vbnRobHlSYXRlID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF5bWVudHMgPT09IDAgPyAwIDogcHJpbmNpcGFsIC8gcGF5bWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcHJpbmNpcGFsICpcbiAgICAgICAgICAgIChtb250aGx5UmF0ZSAvICgxIC0gTWF0aC5wb3coMSArIG1vbnRobHlSYXRlLCAtcGF5bWVudHMpKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZUFtb3J0aXphdGlvblNjaGVkdWxlKFxuICAgICAgICBsb2FuQW1vdW50OiBudW1iZXIsXG4gICAgICAgIGFubnVhbFJhdGU6IG51bWJlcixcbiAgICAgICAgeWVhcnM6IG51bWJlcixcbiAgICAgICAgbW9udGhseVBheW1lbnQ6IG51bWJlclxuICAgICk6IEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbVtdIHtcbiAgICAgICAgY29uc3QgbW9udGhseVJhdGUgPSBhbm51YWxSYXRlIC8gMTAwIC8gMTI7XG4gICAgICAgIGNvbnN0IHRvdGFsUGF5bWVudHMgPSB5ZWFycyAqIDEyO1xuXG4gICAgICAgIGlmIChtb250aGx5UmF0ZSA9PT0gMCB8fCBsb2FuQW1vdW50IDw9IDAgfHwgbW9udGhseVBheW1lbnQgPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2NoZWR1bGU6IEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbVtdID0gW107XG4gICAgICAgIGxldCBiYWxhbmNlID0gbG9hbkFtb3VudDtcblxuICAgICAgICBmb3IgKGxldCB5ZWFyID0gMTsgeWVhciA8PSB5ZWFyczsgeWVhcisrKSB7XG4gICAgICAgICAgICBsZXQgeWVhcmx5UHJpbmNpcGFsID0gMDtcbiAgICAgICAgICAgIGxldCB5ZWFybHlJbnRlcmVzdCA9IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHBheW1lbnRzSW5ZZWFyID0gTWF0aC5taW4oMTIsIHRvdGFsUGF5bWVudHMgLSAoeWVhciAtIDEpICogMTIpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBtb250aCA9IDE7IG1vbnRoIDw9IHBheW1lbnRzSW5ZZWFyOyBtb250aCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJlc3RQYXltZW50ID0gYmFsYW5jZSAqIG1vbnRobHlSYXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaW5jaXBhbFBheW1lbnQgPSBtb250aGx5UGF5bWVudCAtIGludGVyZXN0UGF5bWVudDtcblxuICAgICAgICAgICAgICAgIHllYXJseUludGVyZXN0ICs9IGludGVyZXN0UGF5bWVudDtcbiAgICAgICAgICAgICAgICB5ZWFybHlQcmluY2lwYWwgKz0gcHJpbmNpcGFsUGF5bWVudDtcbiAgICAgICAgICAgICAgICBiYWxhbmNlIC09IHByaW5jaXBhbFBheW1lbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjaGVkdWxlLnB1c2goe1xuICAgICAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICAgICAgcHJpbmNpcGFsOiB5ZWFybHlQcmluY2lwYWwsXG4gICAgICAgICAgICAgICAgaW50ZXJlc3Q6IHllYXJseUludGVyZXN0LFxuICAgICAgICAgICAgICAgIGJhbGFuY2U6IE1hdGgubWF4KDAsIGJhbGFuY2UpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGJhbGFuY2UgPD0gMCkgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2NoZWR1bGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVMb2FuQW1vdW50KG1vbnRobHlQYXltZW50OiBudW1iZXIsIGFubnVhbFJhdGU6IG51bWJlciwgeWVhcnM6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1vbnRobHlSYXRlID0gYW5udWFsUmF0ZSAvIDEwMCAvIDEyO1xuICAgICAgICBjb25zdCBwYXltZW50cyA9IHllYXJzICogMTI7XG5cbiAgICAgICAgaWYgKG1vbnRobHlSYXRlID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9udGhseVBheW1lbnQgKiBwYXltZW50cztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBtb250aGx5UGF5bWVudCAqXG4gICAgICAgICAgICAoKDEgLSBNYXRoLnBvdygxICsgbW9udGhseVJhdGUsIC1wYXltZW50cykpIC8gbW9udGhseVJhdGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbmVsaWdpYmxlUmVzdWx0KGlucHV0OiBNb3J0Z2FnZUlucHV0KTogTW9ydGdhZ2VPdXRwdXQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWF4TW9udGhseVBheW1lbnQ6IDAsXG4gICAgICAgICAgICBtYXhMb2FuQW1vdW50OiAwLFxuICAgICAgICAgICAgdG90YWxQcm9qZWN0Q29zdDogaW5wdXQucHJvcGVydHlQcmljZSxcbiAgICAgICAgICAgIHJlcXVpcmVkTG9hbkFtb3VudDogaW5wdXQucHJvcGVydHlQcmljZSAtIGlucHV0LmRvd25QYXltZW50LFxuICAgICAgICAgICAgbG9hbkR1cmF0aW9uWWVhcnM6IDAsXG4gICAgICAgICAgICBkZWJ0UmF0aW86IDAsXG4gICAgICAgICAgICBtb250aGx5SW5zdXJhbmNlQ29zdDogMCxcbiAgICAgICAgICAgIGxvYW5BbW91bnQ6IDAsXG4gICAgICAgICAgICBtb250aGx5UGF5bWVudDogMCxcbiAgICAgICAgICAgIHRvdGFsSW50ZXJlc3RQYWlkOiAwLFxuICAgICAgICAgICAgdG90YWxQYWlkOiAwLFxuICAgICAgICAgICAgaXNFbGlnaWJsZTogZmFsc2UsXG4gICAgICAgICAgICBhbW9ydGl6YXRpb25TY2hlZHVsZTogW10sXG4gICAgICAgICAgICBvdGhlckZlZXM6IHtcbiAgICAgICAgICAgICAgICBub3RhcnlGZWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ05PVEFSWV9GRUVTJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYmFua0ZlZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQkFOS19GRUVTJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbW9udGhseUluc3VyYW5jZUZlZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnTU9OVEhMWV9JTlNVUkFOQ0VfRkVFUydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufSJdfQ==
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9ydGdhZ2UvZnJhbmNlL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZVJ1bGVzIHtcbiAgICBtYXhEZWJ0UmF0aW86IG51bWJlcjtcbiAgICBtYXhMb2FuRHVyYXRpb25ZZWFyczogbnVtYmVyO1xuICAgIG1heExvYW5EdXJhdGlvbk5ld0J1aWxkWWVhcnM6IG51bWJlcjtcbiAgICBtaW5Eb3duUGF5bWVudFJhdGU6IG51bWJlcjtcblxuICAgIGZpcnN0VGltZUJ1eWVyPzogRmlyc3RUaW1lQnV5ZXJSdWxlcztcblxuICAgIGluc3VyYW5jZTogTW9ydGdhZ2VJbnN1cmFuY2VSdWxlcztcbiAgICBmZWVzOiBNb3J0Z2FnZUZlZXNSdWxlcztcbiAgICBzdHJlc3NUZXN0OiBTdHJlc3NUZXN0UnVsZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlyc3RUaW1lQnV5ZXJSdWxlcyB7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBtYXhEZWJ0UmF0aW86IG51bWJlcjtcbiAgICBtYXhMb2FuRHVyYXRpb25ZZWFyczogbnVtYmVyO1xuICAgIHF1b3RhRGlzY2xhaW1lcjogc3RyaW5nO1xuICAgIHJlcXVpcmVzUHJpbWFyeVJlc2lkZW5jZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZUluc3VyYW5jZVJ1bGVzIHtcbiAgICBhdmVyYWdlUmF0ZTogbnVtYmVyO1xuICAgIGluY2x1ZGVkSW5EZWJ0UmF0aW86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VGZWVzUnVsZXMge1xuICBub3RhcnlSYXRlT2xkUHJvcGVydHk6IG51bWJlcjtcbiAgbm90YXJ5UmF0ZU5ld1Byb3BlcnR5OiBudW1iZXI7XG4gIGJhbmtGZWVzUmF0ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVzc1Rlc3RSdWxlcyB7XG4gICAgaW50ZXJlc3RSYXRlQnVmZmVyOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtIHtcbiAgICB5ZWFyOiBudW1iZXI7XG4gICAgcHJpbmNpcGFsOiBudW1iZXI7XG4gICAgaW50ZXJlc3Q6IG51bWJlcjtcbiAgICBiYWxhbmNlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VJbnB1dCB7XG4gICAgcHJvcGVydHlQcmljZTogbnVtYmVyO1xuICAgIGRvd25QYXltZW50OiBudW1iZXI7XG4gICAgbmV0TW9udGhseUluY29tZTogbnVtYmVyO1xuICAgIGxvYW5EdXJhdGlvblllYXJzOiBudW1iZXI7XG4gICAgYW5udWFsSW50ZXJlc3RSYXRlOiBudW1iZXI7XG4gICAgaXNQcmltYXJ5UmVzaWRlbmNlOiBib29sZWFuO1xuICAgIGlzRmlyc3RUaW1lQnV5ZXI6IGJvb2xlYW47XG4gICAgaXNOZXdCdWlsZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZU91dHB1dCB7XG4gICAgbWF4TW9udGhseVBheW1lbnQ6IG51bWJlcjtcbiAgICBtYXhMb2FuQW1vdW50OiBudW1iZXI7XG4gICAgbG9hbkR1cmF0aW9uWWVhcnM6IG51bWJlcjtcbiAgICBkZWJ0UmF0aW86IG51bWJlcjtcbiAgICB0b3RhbFByb2plY3RDb3N0OiBudW1iZXI7XG4gICAgcmVxdWlyZWRMb2FuQW1vdW50OiBudW1iZXI7XG4gICAgbW9udGhseUluc3VyYW5jZUNvc3Q6IG51bWJlcjtcbiAgICBpc0VsaWdpYmxlOiBib29sZWFuO1xuICAgIGFtb3J0aXphdGlvblNjaGVkdWxlOiBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW1bXTtcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9ydGdhZ2UvZnJhbmNlL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3RoZXJGZWVzIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vcnRnYWdlUnVsZXMge1xuICAgIG1heERlYnRSYXRpbzogbnVtYmVyO1xuICAgIG1heExvYW5EdXJhdGlvblllYXJzOiBudW1iZXI7XG4gICAgbWF4TG9hbkR1cmF0aW9uTmV3QnVpbGRZZWFyczogbnVtYmVyO1xuICAgIG1pbkRvd25QYXltZW50UmF0ZTogbnVtYmVyO1xuXG4gICAgZmlyc3RUaW1lQnV5ZXI/OiBGaXJzdFRpbWVCdXllclJ1bGVzO1xuXG4gICAgaW5zdXJhbmNlOiBNb3J0Z2FnZUluc3VyYW5jZVJ1bGVzO1xuICAgIGZlZXM6IE1vcnRnYWdlRmVlc1J1bGVzO1xuICAgIHN0cmVzc1Rlc3Q6IFN0cmVzc1Rlc3RSdWxlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaXJzdFRpbWVCdXllclJ1bGVzIHtcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIG1heERlYnRSYXRpbzogbnVtYmVyO1xuICAgIG1heExvYW5EdXJhdGlvblllYXJzOiBudW1iZXI7XG4gICAgcXVvdGFEaXNjbGFpbWVyOiBzdHJpbmc7XG4gICAgcmVxdWlyZXNQcmltYXJ5UmVzaWRlbmNlOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vcnRnYWdlSW5zdXJhbmNlUnVsZXMge1xuICAgIGF2ZXJhZ2VSYXRlOiBudW1iZXI7XG4gICAgaW5jbHVkZWRJbkRlYnRSYXRpbzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZUZlZXNSdWxlcyB7XG4gIG5vdGFyeVJhdGVPbGRQcm9wZXJ0eTogbnVtYmVyO1xuICBub3RhcnlSYXRlTmV3UHJvcGVydHk6IG51bWJlcjtcbiAgYmFua0ZlZXNSYXRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZXNzVGVzdFJ1bGVzIHtcbiAgICBpbnRlcmVzdFJhdGVCdWZmZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW0ge1xuICAgIHllYXI6IG51bWJlcjtcbiAgICBwcmluY2lwYWw6IG51bWJlcjtcbiAgICBpbnRlcmVzdDogbnVtYmVyO1xuICAgIGJhbGFuY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZUlucHV0IHtcbiAgICBwcm9wZXJ0eVByaWNlOiBudW1iZXI7XG4gICAgZG93blBheW1lbnQ6IG51bWJlcjtcbiAgICBuZXRNb250aGx5SW5jb21lOiBudW1iZXI7XG4gICAgbG9hbkR1cmF0aW9uWWVhcnM6IG51bWJlcjtcbiAgICBhbm51YWxJbnRlcmVzdFJhdGU6IG51bWJlcjtcbiAgICBpc1ByaW1hcnlSZXNpZGVuY2U6IGJvb2xlYW47XG4gICAgaXNGaXJzdFRpbWVCdXllcjogYm9vbGVhbjtcbiAgICBpc05ld0J1aWxkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vcnRnYWdlT3V0cHV0IHtcbiAgICBsb2FuQW1vdW50OiBudW1iZXI7XG4gICAgdG90YWxQYWlkOiBudW1iZXI7XG4gICAgbW9udGhseVBheW1lbnQ6IG51bWJlcjtcbiAgICB0b3RhbEludGVyZXN0UGFpZDogbnVtYmVyO1xuICAgIG1heE1vbnRobHlQYXltZW50OiBudW1iZXI7XG4gICAgbWF4TG9hbkFtb3VudDogbnVtYmVyO1xuICAgIGxvYW5EdXJhdGlvblllYXJzOiBudW1iZXI7XG4gICAgZGVidFJhdGlvOiBudW1iZXI7XG4gICAgdG90YWxQcm9qZWN0Q29zdDogbnVtYmVyO1xuICAgIHJlcXVpcmVkTG9hbkFtb3VudDogbnVtYmVyO1xuICAgIG1vbnRobHlJbnN1cmFuY2VDb3N0OiBudW1iZXI7XG4gICAgaXNFbGlnaWJsZTogYm9vbGVhbjtcbiAgICBhbW9ydGl6YXRpb25TY2hlZHVsZTogQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtW107XG4gICAgb3RoZXJGZWVzOiBPdGhlckZlZXM7XG59XG4iXX0=
@@ -32,7 +32,21 @@ class SouthAfricaMortgageServiceImpl {
32
32
  isAffordable,
33
33
  transferDuty,
34
34
  bondRegistrationFee,
35
- amortizationSchedule
35
+ amortizationSchedule,
36
+ otherFees: {
37
+ notaryFees: {
38
+ value: bondRegistrationFee,
39
+ label: 'BOND_REGISTRATION_FEES'
40
+ },
41
+ bankFees: {
42
+ value: transferDuty,
43
+ label: 'TRANSFER_DUTY'
44
+ },
45
+ monthlyInsuranceFees: {
46
+ value: 0,
47
+ label: 'MONTHLY_INSURANCE_FEES'
48
+ }
49
+ }
36
50
  };
37
51
  }
38
52
  calculateAmortizationSchedule(loanAmount, monthlyRate, monthlyPayment, totalPayments) {
@@ -79,4 +93,4 @@ class SouthAfricaMortgageServiceImpl {
79
93
  }
80
94
  }
81
95
  exports.SouthAfricaMortgageServiceImpl = SouthAfricaMortgageServiceImpl;
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU291dGhBZnJpY2FNb3J0Z2FnZVNlcnZpY2VJbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vcnRnYWdlL3NvdXRoLWFmcmljYS9Tb3V0aEFmcmljYU1vcnRnYWdlU2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsTUFBYSw4QkFBOEI7SUFDekMsWUFDbUIsS0FBb0IsRUFDcEIsS0FBb0I7UUFEcEIsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUNwQixVQUFLLEdBQUwsS0FBSyxDQUFlO0lBQ3RDLENBQUM7SUFFSCxTQUFTO1FBQ1IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFFckUsd0JBQXdCO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUM3RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUV4RCw2Q0FBNkM7UUFDN0MsTUFBTSxjQUFjLEdBQ3BCLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztZQUMxQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRWhELE1BQU0sU0FBUyxHQUFHLGNBQWMsR0FBRyxhQUFhLENBQUM7UUFDakQsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBRWpELHVCQUF1QjtRQUN2QixNQUFNLGlCQUFpQixHQUN2QixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRXZELE1BQU0sWUFBWSxHQUNsQixpQkFBaUIsSUFBSSxJQUFJLENB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Z0JBQ3BELElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDdkQsTUFBTTtZQUNQLENBQUM7UUFDRixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0NBQ0Q7QUE5R0Qsd0VBOEdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9ydGdhZ2VSdWxlcywgTW9ydGdhZ2VJbnB1dCwgTW9ydGdhZ2VPdXRwdXQsIEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbSB9IGZyb20gJy4vZG9tYWluL3R5cGVzJztcbmltcG9ydCB7IFNvdXRoQWZyaWNhTW9ydGdhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9Tb3V0aEFmcmljYU1vcnRnYWdlU2VydmljZSc7XG5cbmV4cG9ydCBjbGFzcyBTb3V0aEFmcmljYU1vcnRnYWdlU2VydmljZUltcGwgaW1wbGVtZW50cyBTb3V0aEFmcmljYU1vcnRnYWdlU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5wdXQ6IE1vcnRnYWdlSW5wdXQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBydWxlczogTW9ydGdhZ2VSdWxlc1xuKSB7fVxuXG5cdGNhbGN1bGF0ZSgpOiBNb3J0Z2FnZU91dHB1dCB7XG5cdFx0Y29uc3QgbG9hbkFtb3VudCA9IHRoaXMuaW5wdXQucHJvcGVydHlQcmljZSAtIHRoaXMuaW5wdXQuZG93blBheW1lbnQ7XG5cblx0XHQvLyBNb250aGx5IGludGVyZXN0IHJhdGVcblx0XHRjb25zdCBtb250aGx5UmF0ZSA9IHRoaXMuaW5wdXQuYW5udWFsSW50ZXJlc3RSYXRlIC8gMTAwIC8gMTI7XG5cdFx0Y29uc3QgdG90YWxQYXltZW50cyA9IHRoaXMuaW5wdXQuYW1vcnRpemF0aW9uWWVhcnMgKiAxMjtcblxuXHRcdC8vIFN0YW5kYXJkIGFtb3J0aXplZCBtb250aGx5IHBheW1lbnQgZm9ybXVsYVxuXHRcdGNvbnN0IG1vbnRobHlQYXltZW50ID1cblx0XHQobG9hbkFtb3VudCAqIG1vbnRobHlSYXRlKSAvXG5cdFx0KDEgLSBNYXRoLnBvdygxICsgbW9udGhseVJhdGUsIC10b3RhbFBheW1lbnRzKSk7XG5cblx0XHRjb25zdCB0b3RhbFBhaWQgPSBtb250aGx5UGF5bWVudCAqIHRvdGFsUGF5bWVudHM7XG5cdFx0Y29uc3QgdG90YWxJbnRlcmVzdFBhaWQgPSB0b3RhbFBhaWQgLSBsb2FuQW1vdW50O1xuXG5cdFx0Ly8gRGVidC10by1pbmNvbWUgcmF0aW9cblx0XHRjb25zdCBkZWJ0VG9JbmNvbWVSYXRpbyA9XG5cdFx0KG1vbnRobHlQYXltZW50IC8gdGhpcy5pbnB1dC5ncm9zc01vbnRobHlJbmNvbWUpICogMTAwO1xuXG5cdFx0Y29uc3QgaXNBZmZvcmRhYmxlID1cblx0XHRkZWJ0VG9JbmNvbWVSYXRpbyA8PSB0aGlzLnJ1bGVzLmxvYW5Db25zdHJhaW50cy5tYXhEZWJ0VG9JbmNvbWVQZXJjZW50O1xuXG5cdFx0Ly8gRmVlc1xuXHRcdGNvbnN0IGJvbmRSZWdpc3RyYXRpb25GZWUgPVxuXHRcdGxvYW5BbW91bnQgKiAodGhpcy5ydWxlcy5mZWVzLmJvbmRSZWdpc3RyYXRpb25QZXJjZW50IC8gMTAwKTtcblxuXHRcdGNvbnN0IHRyYW5zZmVyRHV0eSA9IHRoaXMuY2FsY3VsYXRlVHJhbnNmZXJEdXR5KHRoaXMuaW5wdXQucHJvcGVydHlQcmljZSk7XG5cdFx0Y29uc3QgYW1vcnRpemF0aW9uU2NoZWR1bGUgPSB0aGlzLmNhbGN1bGF0ZUFtb3J0aXphdGlvblNjaGVkdWxlKFxuXHRcdFx0bG9hbkFtb3VudCxcblx0XHRcdG1vbnRobHlSYXRlLFxuXHRcdFx0bW9udGhseVBheW1lbnQsXG5cdFx0XHR0b3RhbFBheW1lbnRzXG5cdFx0KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRsb2FuQW1vdW50LFxuXHRcdFx0bW9udGhseVBheW1lbnQsXG5cdFx0XHR0b3RhbEludGVyZXN0UGFpZCxcblx0XHRcdHRvdGFsUGFpZCxcblx0XHRcdGRlYnRUb0luY29tZVJhdGlvLFxuXHRcdFx0aXNBZmZvcmRhYmxlLFxuXHRcdFx0dHJhbnNmZXJEdXR5LFxuXHRcdFx0Ym9uZFJlZ2lzdHJhdGlvbkZlZSxcblx0XHRcdGFtb3J0aXphdGlvblNjaGVkdWxlXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgY2FsY3VsYXRlQW1vcnRpemF0aW9uU2NoZWR1bGUoXG5cdFx0bG9hbkFtb3VudDogbnVtYmVyLFxuXHRcdG1vbnRobHlSYXRlOiBudW1iZXIsXG5cdFx0bW9udGhseVBheW1lbnQ6IG51bWJlcixcblx0XHR0b3RhbFBheW1lbnRzOiBudW1iZXJcblx0KTogQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtW10ge1xuXHRcdGNvbnN0IHNjaGVkdWxlOiBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW1bXSA9IFtdO1xuXHRcdGxldCBiYWxhbmNlID0gbG9hbkFtb3VudDtcblxuXHRcdGZvciAobGV0IHllYXIgPSAxOyB5ZWFyIDw9IHRoaXMuaW5wdXQuYW1vcnRpemF0aW9uWWVhcnM7IHllYXIrKykge1xuXHRcdFx0bGV0IHllYXJseVByaW5jaXBhbCA9IDA7XG5cdFx0XHRsZXQgeWVhcmx5SW50ZXJlc3QgPSAwO1xuXG5cdFx0XHQvLyBDYWxjdWxhdGUgZm9yIDEyIG1vbnRocyBvciByZW1haW5pbmcgcGF5bWVudHNcblx0XHRcdGNvbnN0IHBheW1lbnRzSW5ZZWFyID0gTWF0aC5taW4oMTIsIHRvdGFsUGF5bWVudHMgLSAoeWVhciAtIDEpICogMTIpO1xuXG5cdFx0XHRmb3IgKGxldCBtb250aCA9IDE7IG1vbnRoIDw9IHBheW1lbnRzSW5ZZWFyOyBtb250aCsrKSB7XG5cdFx0XHRcdGNvbnN0IGludGVyZXN0UGF5bWVudCA9IGJhbGFuY2UgKiBtb250aGx5UmF0ZTtcblx0XHRcdFx0Y29uc3QgcHJpbmNpcGFsUGF5bWVudCA9IG1vbnRobHlQYXltZW50IC0gaW50ZXJlc3RQYXltZW50O1xuXG5cdFx0XHRcdHllYXJseUludGVyZXN0ICs9IGludGVyZXN0UGF5bWVudDtcblx0XHRcdFx0eWVhcmx5UHJpbmNpcGFsICs9IHByaW5jaXBhbFBheW1lbnQ7XG5cdFx0XHRcdGJhbGFuY2UgLT0gcHJpbmNpcGFsUGF5bWVudDtcblx0XHRcdH1cblxuXHRcdFx0c2NoZWR1bGUucHVzaCh7XG5cdFx0XHRcdHllYXIsXG5cdFx0XHRcdHByaW5jaXBhbDogeWVhcmx5UHJpbmNpcGFsLFxuXHRcdFx0XHRpbnRlcmVzdDogeWVhcmx5SW50ZXJlc3QsXG5cdFx0XHRcdGJhbGFuY2U6IE1hdGgubWF4KDAsIGJhbGFuY2UpXG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGJhbGFuY2UgPD0gMCkgYnJlYWs7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNjaGVkdWxlO1xuXHR9XG5cblx0cHJpdmF0ZSBjYWxjdWxhdGVUcmFuc2ZlckR1dHkocHJvcGVydHlQcmljZTogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRsZXQgZHV0eSA9IDA7XG5cdFx0bGV0IHByZXZpb3VzTGltaXQgPSAwO1xuXG5cdFx0Zm9yIChjb25zdCBicmFja2V0IG9mIHRoaXMucnVsZXMuZmVlcy50cmFuc2ZlckR1dHkuYnJhY2tldHMpIHtcblx0XHRcdGlmIChicmFja2V0LnVwVG8gJiYgcHJvcGVydHlQcmljZSA+IHByZXZpb3VzTGltaXQpIHtcblx0XHRcdFx0Y29uc3QgdGF4YWJsZSA9IE1hdGgubWluKHByb3BlcnR5UHJpY2UsIGJyYWNrZXQudXBUbykgLSBwcmV2aW91c0xpbWl0O1xuXHRcdFx0XHRkdXR5ICs9IHRheGFibGUgKiBicmFja2V0LnJhdGU7XG5cdFx0XHRcdHByZXZpb3VzTGltaXQgPSBicmFja2V0LnVwVG87XG5cdFx0XHR9XG5cblx0XHRcdGlmIChicmFja2V0LmFib3ZlICYmIHByb3BlcnR5UHJpY2UgPiBicmFja2V0LmFib3ZlKSB7XG5cdFx0XHRcdGR1dHkgKz0gKHByb3BlcnR5UHJpY2UgLSBicmFja2V0LmFib3ZlKSAqIGJyYWNrZXQucmF0ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGR1dHk7XG5cdH1cbn1cbiJdfQ==
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU291dGhBZnJpY2FNb3J0Z2FnZVNlcnZpY2VJbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vcnRnYWdlL3NvdXRoLWFmcmljYS9Tb3V0aEFmcmljYU1vcnRnYWdlU2VydmljZUltcGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsTUFBYSw4QkFBOEI7SUFDekMsWUFDbUIsS0FBb0IsRUFDcEIsS0FBb0I7UUFEcEIsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUNwQixVQUFLLEdBQUwsS0FBSyxDQUFlO0lBQ3RDLENBQUM7SUFFSCxTQUFTO1FBQ1IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFFckUsd0JBQXdCO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUM3RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUV4RCw2Q0FBNkM7UUFDN0MsTUFBTSxjQUFjLEdBQ3BCLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztZQUMxQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRWhELE1BQU0sU0FBUyxHQUFHLGNBQWMsR0FBRyxhQUFhLENBQUM7UUFDakQsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBRWpELHVCQUF1QjtRQUN2QixNQUFNLGlCQUFpQixHQUN2QixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRXZELE1BQU0sWUFBWSxHQUNsQixpQkFBaUIsSUFBSSxJQUFJLENB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LElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUM7Z0JBQ3RFLElBQUksSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDL0IsYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDOUIsQ0FBQztZQUVELElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNwRCxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZELE1BQU07WUFDUCxDQUFDO1FBQ0YsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztDQUNEO0FBNUhELHdFQTRIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vcnRnYWdlUnVsZXMsIE1vcnRnYWdlSW5wdXQsIE1vcnRnYWdlT3V0cHV0LCBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW0gfSBmcm9tICcuL2RvbWFpbi90eXBlcyc7XG5pbXBvcnQgeyBTb3V0aEFmcmljYU1vcnRnYWdlU2VydmljZSB9IGZyb20gJy4vU291dGhBZnJpY2FNb3J0Z2FnZVNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgU291dGhBZnJpY2FNb3J0Z2FnZVNlcnZpY2VJbXBsIGltcGxlbWVudHMgU291dGhBZnJpY2FNb3J0Z2FnZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlucHV0OiBNb3J0Z2FnZUlucHV0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcnVsZXM6IE1vcnRnYWdlUnVsZXNcbikge31cblxuXHRjYWxjdWxhdGUoKTogTW9ydGdhZ2VPdXRwdXQge1xuXHRcdGNvbnN0IGxvYW5BbW91bnQgPSB0aGlzLmlucHV0LnByb3BlcnR5UHJpY2UgLSB0aGlzLmlucHV0LmRvd25QYXltZW50O1xuXG5cdFx0Ly8gTW9udGhseSBpbnRlcmVzdCByYXRlXG5cdFx0Y29uc3QgbW9udGhseVJhdGUgPSB0aGlzLmlucHV0LmFubnVhbEludGVyZXN0UmF0ZSAvIDEwMCAvIDEyO1xuXHRcdGNvbnN0IHRvdGFsUGF5bWVudHMgPSB0aGlzLmlucHV0LmFtb3J0aXphdGlvblllYXJzICogMTI7XG5cblx0XHQvLyBTdGFuZGFyZCBhbW9ydGl6ZWQgbW9udGhseSBwYXltZW50IGZvcm11bGFcblx0XHRjb25zdCBtb250aGx5UGF5bWVudCA9XG5cdFx0KGxvYW5BbW91bnQgKiBtb250aGx5UmF0ZSkgL1xuXHRcdCgxIC0gTWF0aC5wb3coMSArIG1vbnRobHlSYXRlLCAtdG90YWxQYXltZW50cykpO1xuXG5cdFx0Y29uc3QgdG90YWxQYWlkID0gbW9udGhseVBheW1lbnQgKiB0b3RhbFBheW1lbnRzO1xuXHRcdGNvbnN0IHRvdGFsSW50ZXJlc3RQYWlkID0gdG90YWxQYWlkIC0gbG9hbkFtb3VudDtcblxuXHRcdC8vIERlYnQtdG8taW5jb21lIHJhdGlvXG5cdFx0Y29uc3QgZGVidFRvSW5jb21lUmF0aW8gPVxuXHRcdChtb250aGx5UGF5bWVudCAvIHRoaXMuaW5wdXQuZ3Jvc3NNb250aGx5SW5jb21lKSAqIDEwMDtcblxuXHRcdGNvbnN0IGlzQWZmb3JkYWJsZSA9XG5cdFx0ZGVidFRvSW5jb21lUmF0aW8gPD0gdGhpcy5ydWxlcy5sb2FuQ29uc3RyYWludHMubWF4RGVidFRvSW5jb21lUGVyY2VudDtcblxuXHRcdC8vIEZlZXNcblx0XHRjb25zdCBib25kUmVnaXN0cmF0aW9uRmVlID1cblx0XHRsb2FuQW1vdW50ICogKHRoaXMucnVsZXMuZmVlcy5ib25kUmVnaXN0cmF0aW9uUGVyY2VudCAvIDEwMCk7XG5cblx0XHRjb25zdCB0cmFuc2ZlckR1dHkgPSB0aGlzLmNhbGN1bGF0ZVRyYW5zZmVyRHV0eSh0aGlzLmlucHV0LnByb3BlcnR5UHJpY2UpO1xuXHRcdGNvbnN0IGFtb3J0aXphdGlvblNjaGVkdWxlID0gdGhpcy5jYWxjdWxhdGVBbW9ydGl6YXRpb25TY2hlZHVsZShcblx0XHRcdGxvYW5BbW91bnQsXG5cdFx0XHRtb250aGx5UmF0ZSxcblx0XHRcdG1vbnRobHlQYXltZW50LFxuXHRcdFx0dG90YWxQYXltZW50c1xuXHRcdCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bG9hbkFtb3VudCxcblx0XHRcdG1vbnRobHlQYXltZW50LFxuXHRcdFx0dG90YWxJbnRlcmVzdFBhaWQsXG5cdFx0XHR0b3RhbFBhaWQsXG5cdFx0XHRkZWJ0VG9JbmNvbWVSYXRpbyxcblx0XHRcdGlzQWZmb3JkYWJsZSxcblx0XHRcdHRyYW5zZmVyRHV0eSxcblx0XHRcdGJvbmRSZWdpc3RyYXRpb25GZWUsXG5cdFx0XHRhbW9ydGl6YXRpb25TY2hlZHVsZSxcblx0XHRcdG90aGVyRmVlczoge1xuICAgICAgICAgICAgICAgIG5vdGFyeUZlZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGJvbmRSZWdpc3RyYXRpb25GZWUsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQk9ORF9SRUdJU1RSQVRJT05fRkVFUydcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJhbmtGZWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cmFuc2ZlckR1dHksXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnVFJBTlNGRVJfRFVUWSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1vbnRobHlJbnN1cmFuY2VGZWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ01PTlRITFlfSU5TVVJBTkNFX0ZFRVMnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGNhbGN1bGF0ZUFtb3J0aXphdGlvblNjaGVkdWxlKFxuXHRcdGxvYW5BbW91bnQ6IG51bWJlcixcblx0XHRtb250aGx5UmF0ZTogbnVtYmVyLFxuXHRcdG1vbnRobHlQYXltZW50OiBudW1iZXIsXG5cdFx0dG90YWxQYXltZW50czogbnVtYmVyXG5cdCk6IEFtb3J0aXphdGlvblNjaGVkdWxlSXRlbVtdIHtcblx0XHRjb25zdCBzY2hlZHVsZTogQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtW10gPSBbXTtcblx0XHRsZXQgYmFsYW5jZSA9IGxvYW5BbW91bnQ7XG5cblx0XHRmb3IgKGxldCB5ZWFyID0gMTsgeWVhciA8PSB0aGlzLmlucHV0LmFtb3J0aXphdGlvblllYXJzOyB5ZWFyKyspIHtcblx0XHRcdGxldCB5ZWFybHlQcmluY2lwYWwgPSAwO1xuXHRcdFx0bGV0IHllYXJseUludGVyZXN0ID0gMDtcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIGZvciAxMiBtb250aHMgb3IgcmVtYWluaW5nIHBheW1lbnRzXG5cdFx0XHRjb25zdCBwYXltZW50c0luWWVhciA9IE1hdGgubWluKDEyLCB0b3RhbFBheW1lbnRzIC0gKHllYXIgLSAxKSAqIDEyKTtcblxuXHRcdFx0Zm9yIChsZXQgbW9udGggPSAxOyBtb250aCA8PSBwYXltZW50c0luWWVhcjsgbW9udGgrKykge1xuXHRcdFx0XHRjb25zdCBpbnRlcmVzdFBheW1lbnQgPSBiYWxhbmNlICogbW9udGhseVJhdGU7XG5cdFx0XHRcdGNvbnN0IHByaW5jaXBhbFBheW1lbnQgPSBtb250aGx5UGF5bWVudCAtIGludGVyZXN0UGF5bWVudDtcblxuXHRcdFx0XHR5ZWFybHlJbnRlcmVzdCArPSBpbnRlcmVzdFBheW1lbnQ7XG5cdFx0XHRcdHllYXJseVByaW5jaXBhbCArPSBwcmluY2lwYWxQYXltZW50O1xuXHRcdFx0XHRiYWxhbmNlIC09IHByaW5jaXBhbFBheW1lbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHNjaGVkdWxlLnB1c2goe1xuXHRcdFx0XHR5ZWFyLFxuXHRcdFx0XHRwcmluY2lwYWw6IHllYXJseVByaW5jaXBhbCxcblx0XHRcdFx0aW50ZXJlc3Q6IHllYXJseUludGVyZXN0LFxuXHRcdFx0XHRiYWxhbmNlOiBNYXRoLm1heCgwLCBiYWxhbmNlKVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChiYWxhbmNlIDw9IDApIGJyZWFrO1xuXHRcdH1cblxuXHRcdHJldHVybiBzY2hlZHVsZTtcblx0fVxuXG5cdHByaXZhdGUgY2FsY3VsYXRlVHJhbnNmZXJEdXR5KHByb3BlcnR5UHJpY2U6IG51bWJlcik6IG51bWJlciB7XG5cdFx0bGV0IGR1dHkgPSAwO1xuXHRcdGxldCBwcmV2aW91c0xpbWl0ID0gMDtcblxuXHRcdGZvciAoY29uc3QgYnJhY2tldCBvZiB0aGlzLnJ1bGVzLmZlZXMudHJhbnNmZXJEdXR5LmJyYWNrZXRzKSB7XG5cdFx0XHRpZiAoYnJhY2tldC51cFRvICYmIHByb3BlcnR5UHJpY2UgPiBwcmV2aW91c0xpbWl0KSB7XG5cdFx0XHRcdGNvbnN0IHRheGFibGUgPSBNYXRoLm1pbihwcm9wZXJ0eVByaWNlLCBicmFja2V0LnVwVG8pIC0gcHJldmlvdXNMaW1pdDtcblx0XHRcdFx0ZHV0eSArPSB0YXhhYmxlICogYnJhY2tldC5yYXRlO1xuXHRcdFx0XHRwcmV2aW91c0xpbWl0ID0gYnJhY2tldC51cFRvO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYnJhY2tldC5hYm92ZSAmJiBwcm9wZXJ0eVByaWNlID4gYnJhY2tldC5hYm92ZSkge1xuXHRcdFx0XHRkdXR5ICs9IChwcm9wZXJ0eVByaWNlIC0gYnJhY2tldC5hYm92ZSkgKiBicmFja2V0LnJhdGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBkdXR5O1xuXHR9XG59XG4iXX0=
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9ydGdhZ2Uvc291dGgtYWZyaWNhL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUnVsZU1ldGEgfSBmcm9tIFwiLi4vLi4vLi4vc2hhcmVkL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVJbnB1dERlZmluaXRpb24ge1xuICB0eXBlOiBcIm51bWJlclwiIHwgXCJzdHJpbmdcIjtcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG4gIGVudW0/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWxlSW5wdXRzIHtcbiAgcHJvcGVydHlQcmljZTogUnVsZUlucHV0RGVmaW5pdGlvbjtcbiAgZG93blBheW1lbnQ6IFJ1bGVJbnB1dERlZmluaXRpb247XG4gIGludGVyZXN0UmF0ZTogUnVsZUlucHV0RGVmaW5pdGlvbjtcbiAgYW1vcnRpemF0aW9uWWVhcnM6IFJ1bGVJbnB1dERlZmluaXRpb247XG4gIGdyb3NzTW9udGhseUluY29tZTogUnVsZUlucHV0RGVmaW5pdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2FuQ29uc3RyYWludHMge1xuICBtYXhMdHY6IG51bWJlcjtcbiAgbWluRG93blBheW1lbnRQZXJjZW50OiBudW1iZXI7XG4gIG1heEFtb3J0aXphdGlvblllYXJzOiBudW1iZXI7XG4gIG1heERlYnRUb0luY29tZVBlcmNlbnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcmVzdFJ1bGVzIHtcbiAgdHlwZTogXCJmaXhlZFwiIHwgXCJ2YXJpYWJsZVwiO1xuICByYXRlUmFuZ2VQZXJjZW50OiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9O1xuICBzdHJlc3NUZXN0QnVmZmVyUGVyY2VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluc3VyYW5jZVJ1bGVzIHtcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmZXJEdXR5QnJhY2tldCB7XG4gIHVwVG8/OiBudW1iZXI7XG4gIGFib3ZlPzogbnVtYmVyO1xuICByYXRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVlc1J1bGVzIHtcbiAgYm9uZFJlZ2lzdHJhdGlvblBlcmNlbnQ6IG51bWJlcjtcbiAgdHJhbnNmZXJEdXR5OiB7XG4gICAgYnJhY2tldHM6IFRyYW5zZmVyRHV0eUJyYWNrZXRbXTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZVJ1bGVzIHtcbiAgbG9hbkNvbnN0cmFpbnRzOiBMb2FuQ29uc3RyYWludHM7XG4gIGludGVyZXN0OiBJbnRlcmVzdFJ1bGVzO1xuICBpbnN1cmFuY2U6IEluc3VyYW5jZVJ1bGVzO1xuICBmZWVzOiBGZWVzUnVsZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZU91dHB1dHMge1xuICBsb2FuQW1vdW50OiBcIm51bWJlclwiO1xuICBtb250aGx5UGF5bWVudDogXCJudW1iZXJcIjtcbiAgdG90YWxJbnRlcmVzdFBhaWQ6IFwibnVtYmVyXCI7XG4gIHRvdGFsUGFpZDogXCJudW1iZXJcIjtcbiAgZGVidFRvSW5jb21lUmF0aW86IFwibnVtYmVyXCI7XG4gIGlzQWZmb3JkYWJsZTogXCJib29sZWFuXCI7XG4gIHRyYW5zZmVyRHV0eTogXCJudW1iZXJcIjtcbiAgYm9uZFJlZ2lzdHJhdGlvbkZlZTogXCJudW1iZXJcIjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZVJ1bGVTZXQge1xuICBtZXRhOiBSdWxlTWV0YTtcbiAgaW5wdXRzOiBSdWxlSW5wdXRzO1xuICBydWxlczogTW9ydGdhZ2VSdWxlcztcbiAgb3V0cHV0czogUnVsZU91dHB1dHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtIHtcbiAgeWVhcjogbnVtYmVyO1xuICBwcmluY2lwYWw6IG51bWJlcjtcbiAgaW50ZXJlc3Q6IG51bWJlcjtcbiAgYmFsYW5jZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vcnRnYWdlSW5wdXQge1xuICBwcm9wZXJ0eVByaWNlOiBudW1iZXI7XG4gIGRvd25QYXltZW50OiBudW1iZXI7XG4gIGFubnVhbEludGVyZXN0UmF0ZTogbnVtYmVyOyAvLyBlLmcuLCAxMS43NSVcbiAgYW1vcnRpemF0aW9uWWVhcnM6IG51bWJlcjtcbiAgZ3Jvc3NNb250aGx5SW5jb21lOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VPdXRwdXQge1xuICBsb2FuQW1vdW50OiBudW1iZXI7XG4gIG1vbnRobHlQYXltZW50OiBudW1iZXI7XG4gIHRvdGFsSW50ZXJlc3RQYWlkOiBudW1iZXI7XG4gIHRvdGFsUGFpZDogbnVtYmVyO1xuICBkZWJ0VG9JbmNvbWVSYXRpbzogbnVtYmVyO1xuICBpc0FmZm9yZGFibGU6IGJvb2xlYW47XG4gIHRyYW5zZmVyRHV0eTogbnVtYmVyO1xuICBib25kUmVnaXN0cmF0aW9uRmVlOiBudW1iZXI7XG4gIGFtb3J0aXphdGlvblNjaGVkdWxlOiBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW1bXTtcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbW9ydGdhZ2Uvc291dGgtYWZyaWNhL2RvbWFpbi90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUnVsZU1ldGEgfSBmcm9tIFwiLi4vLi4vLi4vc2hhcmVkL2RvbWFpbi90eXBlc1wiO1xuaW1wb3J0IHsgT3RoZXJGZWVzIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi90eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVJbnB1dERlZmluaXRpb24ge1xuICB0eXBlOiBcIm51bWJlclwiIHwgXCJzdHJpbmdcIjtcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG4gIGVudW0/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSdWxlSW5wdXRzIHtcbiAgcHJvcGVydHlQcmljZTogUnVsZUlucHV0RGVmaW5pdGlvbjtcbiAgZG93blBheW1lbnQ6IFJ1bGVJbnB1dERlZmluaXRpb247XG4gIGludGVyZXN0UmF0ZTogUnVsZUlucHV0RGVmaW5pdGlvbjtcbiAgYW1vcnRpemF0aW9uWWVhcnM6IFJ1bGVJbnB1dERlZmluaXRpb247XG4gIGdyb3NzTW9udGhseUluY29tZTogUnVsZUlucHV0RGVmaW5pdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2FuQ29uc3RyYWludHMge1xuICBtYXhMdHY6IG51bWJlcjtcbiAgbWluRG93blBheW1lbnRQZXJjZW50OiBudW1iZXI7XG4gIG1heEFtb3J0aXphdGlvblllYXJzOiBudW1iZXI7XG4gIG1heERlYnRUb0luY29tZVBlcmNlbnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcmVzdFJ1bGVzIHtcbiAgdHlwZTogXCJmaXhlZFwiIHwgXCJ2YXJpYWJsZVwiO1xuICByYXRlUmFuZ2VQZXJjZW50OiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9O1xuICBzdHJlc3NUZXN0QnVmZmVyUGVyY2VudDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluc3VyYW5jZVJ1bGVzIHtcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmZXJEdXR5QnJhY2tldCB7XG4gIHVwVG8/OiBudW1iZXI7XG4gIGFib3ZlPzogbnVtYmVyO1xuICByYXRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVlc1J1bGVzIHtcbiAgYm9uZFJlZ2lzdHJhdGlvblBlcmNlbnQ6IG51bWJlcjtcbiAgdHJhbnNmZXJEdXR5OiB7XG4gICAgYnJhY2tldHM6IFRyYW5zZmVyRHV0eUJyYWNrZXRbXTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZVJ1bGVzIHtcbiAgbG9hbkNvbnN0cmFpbnRzOiBMb2FuQ29uc3RyYWludHM7XG4gIGludGVyZXN0OiBJbnRlcmVzdFJ1bGVzO1xuICBpbnN1cmFuY2U6IEluc3VyYW5jZVJ1bGVzO1xuICBmZWVzOiBGZWVzUnVsZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZU91dHB1dHMge1xuICBsb2FuQW1vdW50OiBcIm51bWJlclwiO1xuICBtb250aGx5UGF5bWVudDogXCJudW1iZXJcIjtcbiAgdG90YWxJbnRlcmVzdFBhaWQ6IFwibnVtYmVyXCI7XG4gIHRvdGFsUGFpZDogXCJudW1iZXJcIjtcbiAgZGVidFRvSW5jb21lUmF0aW86IFwibnVtYmVyXCI7XG4gIGlzQWZmb3JkYWJsZTogXCJib29sZWFuXCI7XG4gIHRyYW5zZmVyRHV0eTogXCJudW1iZXJcIjtcbiAgYm9uZFJlZ2lzdHJhdGlvbkZlZTogXCJudW1iZXJcIjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3J0Z2FnZVJ1bGVTZXQge1xuICBtZXRhOiBSdWxlTWV0YTtcbiAgaW5wdXRzOiBSdWxlSW5wdXRzO1xuICBydWxlczogTW9ydGdhZ2VSdWxlcztcbiAgb3V0cHV0czogUnVsZU91dHB1dHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1vcnRpemF0aW9uU2NoZWR1bGVJdGVtIHtcbiAgeWVhcjogbnVtYmVyO1xuICBwcmluY2lwYWw6IG51bWJlcjtcbiAgaW50ZXJlc3Q6IG51bWJlcjtcbiAgYmFsYW5jZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vcnRnYWdlSW5wdXQge1xuICBwcm9wZXJ0eVByaWNlOiBudW1iZXI7XG4gIGRvd25QYXltZW50OiBudW1iZXI7XG4gIGFubnVhbEludGVyZXN0UmF0ZTogbnVtYmVyOyAvLyBlLmcuLCAxMS43NSVcbiAgYW1vcnRpemF0aW9uWWVhcnM6IG51bWJlcjtcbiAgZ3Jvc3NNb250aGx5SW5jb21lOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9ydGdhZ2VPdXRwdXQge1xuICBsb2FuQW1vdW50OiBudW1iZXI7XG4gIG1vbnRobHlQYXltZW50OiBudW1iZXI7XG4gIHRvdGFsSW50ZXJlc3RQYWlkOiBudW1iZXI7XG4gIHRvdGFsUGFpZDogbnVtYmVyO1xuICBkZWJ0VG9JbmNvbWVSYXRpbzogbnVtYmVyO1xuICBpc0FmZm9yZGFibGU6IGJvb2xlYW47XG4gIHRyYW5zZmVyRHV0eTogbnVtYmVyO1xuICBib25kUmVnaXN0cmF0aW9uRmVlOiBudW1iZXI7XG4gIGFtb3J0aXphdGlvblNjaGVkdWxlOiBBbW9ydGl6YXRpb25TY2hlZHVsZUl0ZW1bXTtcbiAgb3RoZXJGZWVzOiBPdGhlckZlZXM7XG59XG4iXX0=
@@ -1,4 +1,5 @@
1
1
  import { RuleMeta } from "../../../shared/domain/types";
2
+ import { OtherFees } from "../../domain/types";
2
3
  export interface RuleInputDefinition {
3
4
  type: 'number' | 'string';
4
5
  min?: number;
@@ -85,8 +86,9 @@ export interface MortgageCalculationResult {
85
86
  loanAmount: number;
86
87
  insurancePremium: number;
87
88
  totalMortgage: number;
88
- paymentAmount: number;
89
+ monthlyPaymentAmount: number;
89
90
  totalInterestPaid: number;
90
91
  totalPaid: number;
91
92
  amortizationSchedule: AmortizationScheduleItem[];
93
+ otherFees: OtherFees;
92
94
  }
@@ -0,0 +1,14 @@
1
+ export interface OtherFees {
2
+ notaryFees: {
3
+ value: number;
4
+ label: string;
5
+ };
6
+ bankFees: {
7
+ value: number;
8
+ label: string;
9
+ };
10
+ monthlyInsuranceFees: {
11
+ value: number;
12
+ label: string;
13
+ };
14
+ }
@@ -5,6 +5,7 @@ export declare class FranceMortgageServiceImpl implements FranceMortgageService
5
5
  private _rules;
6
6
  constructor(input: MortgageInput, rules: MortgageRules);
7
7
  calculate(): MortgageOutput;
8
+ private calculateMonthlyPayment;
8
9
  private calculateAmortizationSchedule;
9
10
  private calculateLoanAmount;
10
11
  private ineligibleResult;
@@ -1,3 +1,4 @@
1
+ import { OtherFees } from "../../domain/types";
1
2
  export interface MortgageRules {
2
3
  maxDebtRatio: number;
3
4
  maxLoanDurationYears: number;
@@ -44,6 +45,10 @@ export interface MortgageInput {
44
45
  isNewBuild: boolean;
45
46
  }
46
47
  export interface MortgageOutput {
48
+ loanAmount: number;
49
+ totalPaid: number;
50
+ monthlyPayment: number;
51
+ totalInterestPaid: number;
47
52
  maxMonthlyPayment: number;
48
53
  maxLoanAmount: number;
49
54
  loanDurationYears: number;
@@ -53,4 +58,5 @@ export interface MortgageOutput {
53
58
  monthlyInsuranceCost: number;
54
59
  isEligible: boolean;
55
60
  amortizationSchedule: AmortizationScheduleItem[];
61
+ otherFees: OtherFees;
56
62
  }
@@ -1,4 +1,5 @@
1
1
  import { RuleMeta } from "../../../shared/domain/types";
2
+ import { OtherFees } from "../../domain/types";
2
3
  export interface RuleInputDefinition {
3
4
  type: "number" | "string";
4
5
  min?: number;
@@ -85,4 +86,5 @@ export interface MortgageOutput {
85
86
  transferDuty: number;
86
87
  bondRegistrationFee: number;
87
88
  amortizationSchedule: AmortizationScheduleItem[];
89
+ otherFees: OtherFees;
88
90
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@novha/calc-engines",
3
- "version": "1.6.2",
3
+ "version": "1.6.4",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/types/index.d.ts",
6
6
  "scripts": {
@@ -13,11 +13,12 @@ export class CanadaMortgageServiceImpl implements CanadaMortgageService {
13
13
  const {
14
14
  propertyPrice,
15
15
  downPayment,
16
- interestRate,
17
16
  amortizationYears,
18
17
  paymentFrequency
19
18
  } = input;
20
19
 
20
+ const interestRate = input.interestRate / 100;
21
+
21
22
  /* -----------------------------
22
23
  1. Loan Amount & LTV
23
24
  ------------------------------ */
@@ -100,10 +101,24 @@ export class CanadaMortgageServiceImpl implements CanadaMortgageService {
100
101
  loanAmount: loanAmount,
101
102
  insurancePremium: insurancePremium,
102
103
  totalMortgage: totalMortgage,
103
- paymentAmount: paymentAmount,
104
+ monthlyPaymentAmount: paymentAmount,
104
105
  totalInterestPaid: totalInterestPaid,
105
106
  totalPaid: totalPaid,
106
- amortizationSchedule: amortizationSchedule
107
+ amortizationSchedule: amortizationSchedule,
108
+ otherFees: {
109
+ notaryFees: {
110
+ value: 0,
111
+ label: 'NOTARY_FEES'
112
+ },
113
+ bankFees: {
114
+ value: 0,
115
+ label: 'BANK_FEES'
116
+ },
117
+ monthlyInsuranceFees: {
118
+ value: insurancePremium,
119
+ label: 'INSURANCE_PREMIUM'
120
+ }
121
+ }
107
122
  };
108
123
  }
109
124
 
@@ -1,4 +1,5 @@
1
1
  import { RuleMeta } from "../../../shared/domain/types";
2
+ import { OtherFees } from "../../domain/types";
2
3
 
3
4
  export interface RuleInputDefinition {
4
5
  type: 'number' | 'string';
@@ -101,8 +102,9 @@ export interface MortgageCalculationResult {
101
102
  loanAmount: number;
102
103
  insurancePremium: number;
103
104
  totalMortgage: number;
104
- paymentAmount: number;
105
+ monthlyPaymentAmount: number;
105
106
  totalInterestPaid: number;
106
107
  totalPaid: number;
107
108
  amortizationSchedule: AmortizationScheduleItem[];
109
+ otherFees: OtherFees;
108
110
  }
@@ -0,0 +1,14 @@
1
+ export interface OtherFees {
2
+ notaryFees: {
3
+ value: number;
4
+ label: string;
5
+ };
6
+ bankFees: {
7
+ value: number;
8
+ label: string;
9
+ };
10
+ monthlyInsuranceFees: {
11
+ value: number;
12
+ label: string;
13
+ };
14
+ }
@@ -63,41 +63,80 @@ export class FranceMortgageServiceImpl implements FranceMortgageService {
63
63
  loanDurationYears
64
64
  );
65
65
 
66
- const amortizationSchedule = this.calculateAmortizationSchedule(
66
+ const monthlyPayment = this.calculateMonthlyPayment(
67
67
  requiredLoanAmount,
68
68
  this._input.annualInterestRate,
69
69
  loanDurationYears
70
70
  );
71
71
 
72
+ const totalPaid = monthlyPayment * loanDurationYears * 12;
73
+ const totalInterestPaid = totalPaid - requiredLoanAmount;
74
+
75
+ const amortizationSchedule = this.calculateAmortizationSchedule(
76
+ requiredLoanAmount,
77
+ this._input.annualInterestRate,
78
+ loanDurationYears,
79
+ monthlyPayment
80
+ );
81
+
72
82
  return {
83
+ loanAmount: requiredLoanAmount,
84
+ totalPaid,
85
+ totalInterestPaid,
86
+ monthlyPayment,
87
+ requiredLoanAmount,
73
88
  maxMonthlyPayment,
74
89
  maxLoanAmount,
75
90
  totalProjectCost,
76
- requiredLoanAmount,
77
91
  loanDurationYears,
78
92
  debtRatio: debtRatio,
79
93
  monthlyInsuranceCost,
80
94
  isEligible: maxLoanAmount >= requiredLoanAmount,
81
- amortizationSchedule
95
+ amortizationSchedule,
96
+ otherFees: {
97
+ notaryFees: {
98
+ value: notaryFees,
99
+ label: 'NOTARY_FEES'
100
+ },
101
+ bankFees: {
102
+ value: bankFees,
103
+ label: 'BANK_FEES'
104
+ },
105
+ monthlyInsuranceFees: {
106
+ value: monthlyInsuranceCost,
107
+ label: 'MONTHLY_INSURANCE_FEES'
108
+ }
109
+ }
82
110
  };
83
111
  }
84
112
 
113
+ private calculateMonthlyPayment(principal: number, annualRate: number, years: number): number {
114
+ const monthlyRate = annualRate / 100 / 12;
115
+ const payments = years * 12;
116
+
117
+ if (monthlyRate === 0) {
118
+ return payments === 0 ? 0 : principal / payments;
119
+ }
120
+
121
+ return (
122
+ principal *
123
+ (monthlyRate / (1 - Math.pow(1 + monthlyRate, -payments)))
124
+ );
125
+ }
126
+
85
127
  private calculateAmortizationSchedule(
86
128
  loanAmount: number,
87
129
  annualRate: number,
88
- years: number
130
+ years: number,
131
+ monthlyPayment: number
89
132
  ): AmortizationScheduleItem[] {
90
133
  const monthlyRate = annualRate / 100 / 12;
91
134
  const totalPayments = years * 12;
92
135
 
93
- if (monthlyRate === 0 || loanAmount <= 0) {
136
+ if (monthlyRate === 0 || loanAmount <= 0 || monthlyPayment <= 0) {
94
137
  return [];
95
138
  }
96
139
 
97
- const monthlyPayment =
98
- (loanAmount * monthlyRate) /
99
- (1 - Math.pow(1 + monthlyRate, -totalPayments));
100
-
101
140
  const schedule: AmortizationScheduleItem[] = [];
102
141
  let balance = loanAmount;
103
142
 
@@ -152,8 +191,26 @@ export class FranceMortgageServiceImpl implements FranceMortgageService {
152
191
  loanDurationYears: 0,
153
192
  debtRatio: 0,
154
193
  monthlyInsuranceCost: 0,
194
+ loanAmount: 0,
195
+ monthlyPayment: 0,
196
+ totalInterestPaid: 0,
197
+ totalPaid: 0,
155
198
  isEligible: false,
156
- amortizationSchedule: []
199
+ amortizationSchedule: [],
200
+ otherFees: {
201
+ notaryFees: {
202
+ value: 0,
203
+ label: 'NOTARY_FEES'
204
+ },
205
+ bankFees: {
206
+ value: 0,
207
+ label: 'BANK_FEES'
208
+ },
209
+ monthlyInsuranceFees: {
210
+ value: 0,
211
+ label: 'MONTHLY_INSURANCE_FEES'
212
+ }
213
+ }
157
214
  };
158
215
  }
159
216
  }
@@ -1,3 +1,5 @@
1
+ import { OtherFees } from "../../domain/types";
2
+
1
3
  export interface MortgageRules {
2
4
  maxDebtRatio: number;
3
5
  maxLoanDurationYears: number;
@@ -53,6 +55,10 @@ export interface MortgageInput {
53
55
  }
54
56
 
55
57
  export interface MortgageOutput {
58
+ loanAmount: number;
59
+ totalPaid: number;
60
+ monthlyPayment: number;
61
+ totalInterestPaid: number;
56
62
  maxMonthlyPayment: number;
57
63
  maxLoanAmount: number;
58
64
  loanDurationYears: number;
@@ -62,4 +68,5 @@ export interface MortgageOutput {
62
68
  monthlyInsuranceCost: number;
63
69
  isEligible: boolean;
64
70
  amortizationSchedule: AmortizationScheduleItem[];
71
+ otherFees: OtherFees;
65
72
  }
@@ -50,7 +50,21 @@ export class SouthAfricaMortgageServiceImpl implements SouthAfricaMortgageServic
50
50
  isAffordable,
51
51
  transferDuty,
52
52
  bondRegistrationFee,
53
- amortizationSchedule
53
+ amortizationSchedule,
54
+ otherFees: {
55
+ notaryFees: {
56
+ value: bondRegistrationFee,
57
+ label: 'BOND_REGISTRATION_FEES'
58
+ },
59
+ bankFees: {
60
+ value: transferDuty,
61
+ label: 'TRANSFER_DUTY'
62
+ },
63
+ monthlyInsuranceFees: {
64
+ value: 0,
65
+ label: 'MONTHLY_INSURANCE_FEES'
66
+ }
67
+ }
54
68
  };
55
69
  }
56
70
 
@@ -1,4 +1,5 @@
1
1
  import { RuleMeta } from "../../../shared/domain/types";
2
+ import { OtherFees } from "../../domain/types";
2
3
 
3
4
  export interface RuleInputDefinition {
4
5
  type: "number" | "string";
@@ -95,4 +96,5 @@ export interface MortgageOutput {
95
96
  transferDuty: number;
96
97
  bondRegistrationFee: number;
97
98
  amortizationSchedule: AmortizationScheduleItem[];
99
+ otherFees: OtherFees;
98
100
  }