@vendasta/billing 8.2.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/_generated/host.service.mjs +25 -0
- package/esm2020/lib/_generated/index.mjs +2 -0
- package/esm2020/lib/_internal/bank-reconciliation.api.service.mjs +46 -0
- package/esm2020/lib/_internal/billing.api.service.mjs +216 -0
- package/esm2020/lib/_internal/bundle.api.service.mjs +50 -0
- package/esm2020/lib/_internal/contract-document.api.service.mjs +45 -0
- package/esm2020/lib/_internal/contract.api.service.mjs +55 -0
- package/esm2020/lib/_internal/credit.api.service.mjs +45 -0
- package/esm2020/lib/_internal/discount.api.service.mjs +53 -0
- package/esm2020/lib/_internal/enums/applied-discount.enum.mjs +14 -0
- package/esm2020/lib/_internal/enums/card.enum.mjs +17 -0
- package/esm2020/lib/_internal/enums/contract.enum.mjs +14 -0
- package/esm2020/lib/_internal/enums/currency.enum.mjs +35 -0
- package/esm2020/lib/_internal/enums/frequency.enum.mjs +14 -0
- package/esm2020/lib/_internal/enums/index.mjs +31 -0
- package/esm2020/lib/_internal/enums/invoice.enum.mjs +18 -0
- package/esm2020/lib/_internal/enums/merchant-report.enum.mjs +13 -0
- package/{esm2015/lib/_internal/enums/merchant.enum.js → esm2020/lib/_internal/enums/merchant.enum.mjs} +1 -1
- package/esm2020/lib/_internal/enums/month.enum.mjs +23 -0
- package/esm2020/lib/_internal/enums/payment-card.enum.mjs +24 -0
- package/esm2020/lib/_internal/enums/payment-processor.enum.mjs +13 -0
- package/{esm2015/lib/_internal/enums/payment.enum.js → esm2020/lib/_internal/enums/payment.enum.mjs} +1 -1
- package/esm2020/lib/_internal/enums/payout.enum.mjs +22 -0
- package/esm2020/lib/_internal/enums/pricing-plan.enum.mjs +22 -0
- package/{esm2015/lib/_internal/enums/product-summary.enum.js → esm2020/lib/_internal/enums/product-summary.enum.mjs} +1 -1
- package/esm2020/lib/_internal/enums/product.enum.mjs +17 -0
- package/esm2020/lib/_internal/enums/purchase.enum.mjs +27 -0
- package/esm2020/lib/_internal/enums/recurring-invoice.enum.mjs +29 -0
- package/esm2020/lib/_internal/enums/refund.enum.mjs +25 -0
- package/esm2020/lib/_internal/enums/sales-credit-note.enum.mjs +14 -0
- package/{esm2015/lib/_internal/enums/sales-invoice.enum.js → esm2020/lib/_internal/enums/sales-invoice.enum.mjs} +1 -1
- package/esm2020/lib/_internal/enums/sort-direction.enum.mjs +12 -0
- package/{esm2015/lib/_internal/enums/subscribe-validation.enum.js → esm2020/lib/_internal/enums/subscribe-validation.enum.mjs} +1 -1
- package/esm2020/lib/_internal/enums/subscription.enum.mjs +12 -0
- package/esm2020/lib/_internal/index.mjs +33 -0
- package/esm2020/lib/_internal/interfaces/api.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/applied-bundle.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/applied-discount.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/applied-tax-rate.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/balance.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/billable-item.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/bundle.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/card.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/commitment.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/common.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/contract-document.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/contract.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/credit.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/currency.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/customer-summary.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/date-range.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/discount.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/external-account.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/field-mask.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/frequency.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/index.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/invoice-template.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/invoice.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/merchant-report.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/merchant.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/metered-component.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/month.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/payment-card.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/payment-processor.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/payment.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/payout.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/pricing-plan-product.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/pricing-plan.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/product-pricing.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/product-summary.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/product.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/purchase.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/recurring-invoice.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/refund.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/retail-customer-configuration.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/sales-credit-note.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/sales-invoice.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/sort-direction.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/subscribe-validation.interface.mjs +8 -0
- package/esm2020/lib/_internal/interfaces/subscription.interface.mjs +2 -0
- package/esm2020/lib/_internal/interfaces/tax-rate.interface.mjs +2 -0
- package/esm2020/lib/_internal/invoice-template.api.service.mjs +85 -0
- package/esm2020/lib/_internal/invoice.api.service.mjs +116 -0
- package/esm2020/lib/_internal/merchant.api.service.mjs +159 -0
- package/esm2020/lib/_internal/objects/api.mjs +841 -0
- package/esm2020/lib/_internal/objects/applied-bundle.mjs +77 -0
- package/esm2020/lib/_internal/objects/applied-discount.mjs +46 -0
- package/esm2020/lib/_internal/objects/applied-tax-rate.mjs +39 -0
- package/esm2020/lib/_internal/objects/balance.mjs +45 -0
- package/esm2020/lib/_internal/objects/billable-item.mjs +562 -0
- package/esm2020/lib/_internal/objects/bundle.mjs +390 -0
- package/esm2020/lib/_internal/objects/card.mjs +7 -0
- package/esm2020/lib/_internal/objects/commitment.mjs +36 -0
- package/esm2020/lib/_internal/objects/common.mjs +56 -0
- package/esm2020/lib/_internal/objects/contract-document.mjs +141 -0
- package/esm2020/lib/_internal/objects/contract.mjs +474 -0
- package/esm2020/lib/_internal/objects/credit.mjs +114 -0
- package/esm2020/lib/_internal/objects/currency.mjs +7 -0
- package/esm2020/lib/_internal/objects/customer-summary.mjs +104 -0
- package/esm2020/lib/_internal/objects/date-range.mjs +36 -0
- package/esm2020/lib/_internal/objects/discount.mjs +299 -0
- package/esm2020/lib/_internal/objects/external-account.mjs +160 -0
- package/esm2020/lib/_internal/objects/field-mask.mjs +27 -0
- package/esm2020/lib/_internal/objects/frequency.mjs +7 -0
- package/esm2020/lib/_internal/objects/index.mjs +46 -0
- package/esm2020/lib/_internal/objects/invoice-template.mjs +707 -0
- package/esm2020/lib/_internal/objects/invoice.mjs +1117 -0
- package/esm2020/lib/_internal/objects/merchant-report.mjs +108 -0
- package/esm2020/lib/_internal/objects/merchant.mjs +991 -0
- package/esm2020/lib/_internal/objects/metered-component.mjs +97 -0
- package/esm2020/lib/_internal/objects/month.mjs +7 -0
- package/esm2020/lib/_internal/objects/payment-card.mjs +211 -0
- package/esm2020/lib/_internal/objects/payment-processor.mjs +7 -0
- package/esm2020/lib/_internal/objects/payment.mjs +1219 -0
- package/esm2020/lib/_internal/objects/payout.mjs +258 -0
- package/esm2020/lib/_internal/objects/pricing-plan-product.mjs +565 -0
- package/esm2020/lib/_internal/objects/pricing-plan.mjs +290 -0
- package/esm2020/lib/_internal/objects/product-pricing.mjs +107 -0
- package/esm2020/lib/_internal/objects/product-summary.mjs +538 -0
- package/esm2020/lib/_internal/objects/product.mjs +302 -0
- package/esm2020/lib/_internal/objects/purchase.mjs +524 -0
- package/esm2020/lib/_internal/objects/recurring-invoice.mjs +324 -0
- package/esm2020/lib/_internal/objects/refund.mjs +181 -0
- package/esm2020/lib/_internal/objects/retail-customer-configuration.mjs +159 -0
- package/esm2020/lib/_internal/objects/sales-credit-note.mjs +211 -0
- package/esm2020/lib/_internal/objects/sales-invoice.mjs +300 -0
- package/esm2020/lib/_internal/objects/sort-direction.mjs +7 -0
- package/esm2020/lib/_internal/objects/subscribe-validation.mjs +31 -0
- package/esm2020/lib/_internal/objects/subscription.mjs +555 -0
- package/esm2020/lib/_internal/objects/tax-rate.mjs +342 -0
- package/esm2020/lib/_internal/payment-method.api.service.mjs +49 -0
- package/esm2020/lib/_internal/payment.api.service.mjs +102 -0
- package/esm2020/lib/_internal/pricing.api.service.mjs +76 -0
- package/esm2020/lib/_internal/product-summary.api.service.mjs +46 -0
- package/esm2020/lib/_internal/product.api.service.mjs +47 -0
- package/esm2020/lib/_internal/purchase.api.service.mjs +59 -0
- package/esm2020/lib/_internal/recurring-invoice.api.service.mjs +60 -0
- package/esm2020/lib/_internal/refund.api.service.mjs +45 -0
- package/esm2020/lib/_internal/retail-customer-configuration.api.service.mjs +45 -0
- package/esm2020/lib/_internal/sales-credit-note.api.service.mjs +45 -0
- package/esm2020/lib/_internal/sales-invoice.api.service.mjs +50 -0
- package/esm2020/lib/_internal/tax.api.service.mjs +63 -0
- package/esm2020/lib/_internal/vendor.api.service.mjs +46 -0
- package/esm2020/lib/index.mjs +3 -0
- package/esm2020/public_api.mjs +2 -0
- package/esm2020/vendasta-billing.mjs +5 -0
- package/fesm2015/{vendasta-billing.js → vendasta-billing.mjs} +622 -5227
- package/fesm2015/vendasta-billing.mjs.map +1 -0
- package/fesm2020/vendasta-billing.mjs +14368 -0
- package/fesm2020/vendasta-billing.mjs.map +1 -0
- package/lib/_generated/host.service.d.ts +5 -9
- package/lib/_internal/bank-reconciliation.api.service.d.ts +4 -0
- package/lib/_internal/billing.api.service.d.ts +4 -0
- package/lib/_internal/bundle.api.service.d.ts +4 -0
- package/lib/_internal/contract-document.api.service.d.ts +4 -0
- package/lib/_internal/contract.api.service.d.ts +4 -0
- package/lib/_internal/credit.api.service.d.ts +4 -0
- package/lib/_internal/discount.api.service.d.ts +4 -0
- package/lib/_internal/invoice-template.api.service.d.ts +4 -0
- package/lib/_internal/invoice.api.service.d.ts +4 -0
- package/lib/_internal/merchant.api.service.d.ts +4 -0
- package/lib/_internal/payment-method.api.service.d.ts +4 -0
- package/lib/_internal/payment.api.service.d.ts +4 -0
- package/lib/_internal/pricing.api.service.d.ts +4 -0
- package/lib/_internal/product-summary.api.service.d.ts +4 -0
- package/lib/_internal/product.api.service.d.ts +4 -0
- package/lib/_internal/purchase.api.service.d.ts +4 -0
- package/lib/_internal/recurring-invoice.api.service.d.ts +4 -0
- package/lib/_internal/refund.api.service.d.ts +4 -0
- package/lib/_internal/retail-customer-configuration.api.service.d.ts +4 -0
- package/lib/_internal/sales-credit-note.api.service.d.ts +4 -0
- package/lib/_internal/sales-invoice.api.service.d.ts +4 -0
- package/lib/_internal/tax.api.service.d.ts +4 -0
- package/lib/_internal/vendor.api.service.d.ts +4 -0
- package/lib/index.d.ts +2 -37
- package/package.json +26 -15
- package/src/README.md +1 -0
- package/vendasta-billing.d.ts +1 -0
- package/bundles/vendasta-billing.umd.js +0 -19912
- package/bundles/vendasta-billing.umd.js.map +0 -1
- package/bundles/vendasta-billing.umd.min.js +0 -16
- package/bundles/vendasta-billing.umd.min.js.map +0 -1
- package/esm2015/lib/_generated/host.service.js +0 -65
- package/esm2015/lib/_generated/index.js +0 -2
- package/esm2015/lib/_internal/bank-reconciliation.api.service.js +0 -47
- package/esm2015/lib/_internal/billing.api.service.js +0 -217
- package/esm2015/lib/_internal/bundle.api.service.js +0 -51
- package/esm2015/lib/_internal/contract-document.api.service.js +0 -46
- package/esm2015/lib/_internal/contract.api.service.js +0 -56
- package/esm2015/lib/_internal/credit.api.service.js +0 -46
- package/esm2015/lib/_internal/discount.api.service.js +0 -54
- package/esm2015/lib/_internal/enums/applied-discount.enum.js +0 -14
- package/esm2015/lib/_internal/enums/card.enum.js +0 -17
- package/esm2015/lib/_internal/enums/contract.enum.js +0 -14
- package/esm2015/lib/_internal/enums/currency.enum.js +0 -35
- package/esm2015/lib/_internal/enums/frequency.enum.js +0 -14
- package/esm2015/lib/_internal/enums/index.js +0 -31
- package/esm2015/lib/_internal/enums/invoice.enum.js +0 -18
- package/esm2015/lib/_internal/enums/merchant-report.enum.js +0 -13
- package/esm2015/lib/_internal/enums/month.enum.js +0 -23
- package/esm2015/lib/_internal/enums/payment-card.enum.js +0 -24
- package/esm2015/lib/_internal/enums/payment-processor.enum.js +0 -13
- package/esm2015/lib/_internal/enums/payout.enum.js +0 -22
- package/esm2015/lib/_internal/enums/pricing-plan.enum.js +0 -22
- package/esm2015/lib/_internal/enums/product.enum.js +0 -17
- package/esm2015/lib/_internal/enums/purchase.enum.js +0 -27
- package/esm2015/lib/_internal/enums/recurring-invoice.enum.js +0 -29
- package/esm2015/lib/_internal/enums/refund.enum.js +0 -25
- package/esm2015/lib/_internal/enums/sales-credit-note.enum.js +0 -14
- package/esm2015/lib/_internal/enums/sort-direction.enum.js +0 -12
- package/esm2015/lib/_internal/enums/subscription.enum.js +0 -12
- package/esm2015/lib/_internal/index.js +0 -33
- package/esm2015/lib/_internal/interfaces/api.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/applied-bundle.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/applied-discount.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/applied-tax-rate.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/balance.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/billable-item.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/bundle.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/card.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/commitment.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/common.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/contract-document.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/contract.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/credit.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/currency.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/customer-summary.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/date-range.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/discount.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/external-account.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/field-mask.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/frequency.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/index.js +0 -2
- package/esm2015/lib/_internal/interfaces/invoice-template.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/invoice.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/merchant-report.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/merchant.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/metered-component.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/month.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/payment-card.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/payment-processor.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/payment.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/payout.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/pricing-plan-product.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/pricing-plan.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/product-pricing.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/product-summary.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/product.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/purchase.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/recurring-invoice.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/refund.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/retail-customer-configuration.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/sales-credit-note.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/sales-invoice.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/sort-direction.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/subscribe-validation.interface.js +0 -8
- package/esm2015/lib/_internal/interfaces/subscription.interface.js +0 -2
- package/esm2015/lib/_internal/interfaces/tax-rate.interface.js +0 -2
- package/esm2015/lib/_internal/invoice-template.api.service.js +0 -86
- package/esm2015/lib/_internal/invoice.api.service.js +0 -117
- package/esm2015/lib/_internal/merchant.api.service.js +0 -160
- package/esm2015/lib/_internal/objects/api.js +0 -841
- package/esm2015/lib/_internal/objects/applied-bundle.js +0 -77
- package/esm2015/lib/_internal/objects/applied-discount.js +0 -46
- package/esm2015/lib/_internal/objects/applied-tax-rate.js +0 -39
- package/esm2015/lib/_internal/objects/balance.js +0 -45
- package/esm2015/lib/_internal/objects/billable-item.js +0 -562
- package/esm2015/lib/_internal/objects/bundle.js +0 -390
- package/esm2015/lib/_internal/objects/card.js +0 -7
- package/esm2015/lib/_internal/objects/commitment.js +0 -36
- package/esm2015/lib/_internal/objects/common.js +0 -56
- package/esm2015/lib/_internal/objects/contract-document.js +0 -141
- package/esm2015/lib/_internal/objects/contract.js +0 -474
- package/esm2015/lib/_internal/objects/credit.js +0 -114
- package/esm2015/lib/_internal/objects/currency.js +0 -7
- package/esm2015/lib/_internal/objects/customer-summary.js +0 -104
- package/esm2015/lib/_internal/objects/date-range.js +0 -36
- package/esm2015/lib/_internal/objects/discount.js +0 -299
- package/esm2015/lib/_internal/objects/external-account.js +0 -160
- package/esm2015/lib/_internal/objects/field-mask.js +0 -27
- package/esm2015/lib/_internal/objects/frequency.js +0 -7
- package/esm2015/lib/_internal/objects/index.js +0 -46
- package/esm2015/lib/_internal/objects/invoice-template.js +0 -707
- package/esm2015/lib/_internal/objects/invoice.js +0 -1117
- package/esm2015/lib/_internal/objects/merchant-report.js +0 -108
- package/esm2015/lib/_internal/objects/merchant.js +0 -991
- package/esm2015/lib/_internal/objects/metered-component.js +0 -97
- package/esm2015/lib/_internal/objects/month.js +0 -7
- package/esm2015/lib/_internal/objects/payment-card.js +0 -211
- package/esm2015/lib/_internal/objects/payment-processor.js +0 -7
- package/esm2015/lib/_internal/objects/payment.js +0 -1219
- package/esm2015/lib/_internal/objects/payout.js +0 -258
- package/esm2015/lib/_internal/objects/pricing-plan-product.js +0 -565
- package/esm2015/lib/_internal/objects/pricing-plan.js +0 -290
- package/esm2015/lib/_internal/objects/product-pricing.js +0 -107
- package/esm2015/lib/_internal/objects/product-summary.js +0 -538
- package/esm2015/lib/_internal/objects/product.js +0 -302
- package/esm2015/lib/_internal/objects/purchase.js +0 -524
- package/esm2015/lib/_internal/objects/recurring-invoice.js +0 -324
- package/esm2015/lib/_internal/objects/refund.js +0 -181
- package/esm2015/lib/_internal/objects/retail-customer-configuration.js +0 -159
- package/esm2015/lib/_internal/objects/sales-credit-note.js +0 -211
- package/esm2015/lib/_internal/objects/sales-invoice.js +0 -300
- package/esm2015/lib/_internal/objects/sort-direction.js +0 -7
- package/esm2015/lib/_internal/objects/subscribe-validation.js +0 -31
- package/esm2015/lib/_internal/objects/subscription.js +0 -555
- package/esm2015/lib/_internal/objects/tax-rate.js +0 -342
- package/esm2015/lib/_internal/payment-method.api.service.js +0 -50
- package/esm2015/lib/_internal/payment.api.service.js +0 -103
- package/esm2015/lib/_internal/pricing.api.service.js +0 -77
- package/esm2015/lib/_internal/product-summary.api.service.js +0 -47
- package/esm2015/lib/_internal/product.api.service.js +0 -48
- package/esm2015/lib/_internal/purchase.api.service.js +0 -60
- package/esm2015/lib/_internal/recurring-invoice.api.service.js +0 -61
- package/esm2015/lib/_internal/refund.api.service.js +0 -46
- package/esm2015/lib/_internal/retail-customer-configuration.api.service.js +0 -46
- package/esm2015/lib/_internal/sales-credit-note.api.service.js +0 -46
- package/esm2015/lib/_internal/sales-invoice.api.service.js +0 -51
- package/esm2015/lib/_internal/tax.api.service.js +0 -64
- package/esm2015/lib/_internal/vendor.api.service.js +0 -47
- package/esm2015/lib/applied_bundle/applied_bundle.js +0 -12
- package/esm2015/lib/applied_bundle/index.js +0 -2
- package/esm2015/lib/applied_discount/applied_discount.js +0 -48
- package/esm2015/lib/applied_discount/index.js +0 -2
- package/esm2015/lib/bank_account/bank-account.service.js +0 -38
- package/esm2015/lib/bank_account/bank_account.js +0 -13
- package/esm2015/lib/bank_account/index.js +0 -3
- package/esm2015/lib/bank_reconciliation/bank-reconciliation.service.js +0 -54
- package/esm2015/lib/bank_reconciliation/index.js +0 -3
- package/esm2015/lib/bank_reconciliation/payout.js +0 -53
- package/esm2015/lib/billable-item/billable-item.js +0 -40
- package/esm2015/lib/billable-item/billable-item.service.js +0 -31
- package/esm2015/lib/billable-item/index.js +0 -2
- package/esm2015/lib/billing-host.service.js +0 -41
- package/esm2015/lib/billing.service.js +0 -376
- package/esm2015/lib/bundle/bundle.js +0 -37
- package/esm2015/lib/bundle/bundle.service.js +0 -56
- package/esm2015/lib/bundle/index.js +0 -2
- package/esm2015/lib/contract/contract.js +0 -21
- package/esm2015/lib/contract/contract.service.js +0 -39
- package/esm2015/lib/contract/dimension.js +0 -21
- package/esm2015/lib/contract/index.js +0 -5
- package/esm2015/lib/contract/mutations.js +0 -11
- package/esm2015/lib/contract-document/contract-document.js +0 -9
- package/esm2015/lib/contract-document/contract-document.service.js +0 -68
- package/esm2015/lib/contract-document/index.js +0 -2
- package/esm2015/lib/contract-document/list-contract-document.js +0 -2
- package/esm2015/lib/core/index.js +0 -3
- package/esm2015/lib/core/paged-response.js +0 -8
- package/esm2015/lib/core/sort-direction.js +0 -6
- package/esm2015/lib/credit/credit.js +0 -8
- package/esm2015/lib/credit/credit.service.js +0 -33
- package/esm2015/lib/credit/index.js +0 -2
- package/esm2015/lib/customer_summary/customer-summary.js +0 -15
- package/esm2015/lib/discount/discount.js +0 -18
- package/esm2015/lib/discount/discount.service.js +0 -73
- package/esm2015/lib/discount/discount_type.js +0 -32
- package/esm2015/lib/discount/index.js +0 -3
- package/esm2015/lib/discount/list-discount.js +0 -2
- package/esm2015/lib/http-shared/error-handlers.js +0 -20
- package/esm2015/lib/index.js +0 -38
- package/esm2015/lib/invoice/index.js +0 -3
- package/esm2015/lib/invoice/invoice.js +0 -198
- package/esm2015/lib/invoice/invoice.service.js +0 -254
- package/esm2015/lib/invoice/list-invoice.js +0 -2
- package/esm2015/lib/invoice-template/index.js +0 -2
- package/esm2015/lib/invoice-template/invoice-template.js +0 -38
- package/esm2015/lib/invoice-template/invoice-template.service.js +0 -78
- package/esm2015/lib/merchant/balance.js +0 -2
- package/esm2015/lib/merchant/index.js +0 -5
- package/esm2015/lib/merchant/merchant.interface.js +0 -2
- package/esm2015/lib/merchant/merchant.js +0 -20
- package/esm2015/lib/merchant/merchant.service.js +0 -212
- package/esm2015/lib/merchant/payout-summary.js +0 -32
- package/esm2015/lib/merchant/retail-configuration.js +0 -57
- package/esm2015/lib/merchant-report/index.js +0 -2
- package/esm2015/lib/merchant-report/merchant-report-status.js +0 -2
- package/esm2015/lib/merchant-report/merchant-report.interfaces.js +0 -2
- package/esm2015/lib/merchant-report/merchant-report.js +0 -2
- package/esm2015/lib/merchant-report/merchant-report.service.js +0 -38
- package/esm2015/lib/payment/dispute.js +0 -92
- package/esm2015/lib/payment/index.js +0 -10
- package/esm2015/lib/payment/payment-allocation-type.js +0 -18
- package/esm2015/lib/payment/payment-source.js +0 -18
- package/esm2015/lib/payment/payment-status.js +0 -17
- package/esm2015/lib/payment/payment.js +0 -292
- package/esm2015/lib/payment/payment.service.js +0 -138
- package/esm2015/lib/payment/retail-payment.js +0 -70
- package/esm2015/lib/payment/retail-status.js +0 -50
- package/esm2015/lib/payment-card/index.js +0 -3
- package/esm2015/lib/payment-card/payment-card.js +0 -60
- package/esm2015/lib/payment-card/payment-card.service.js +0 -45
- package/esm2015/lib/payment-method/index.js +0 -2
- package/esm2015/lib/payment-method/payment-method.service.js +0 -43
- package/esm2015/lib/pricing/billing-strategy.js +0 -39
- package/esm2015/lib/pricing/commitment.js +0 -7
- package/esm2015/lib/pricing/currency.js +0 -86
- package/esm2015/lib/pricing/frequency.js +0 -42
- package/esm2015/lib/pricing/index.js +0 -12
- package/esm2015/lib/pricing/list-pricing-plan-product-filter.js +0 -2
- package/esm2015/lib/pricing/pricing-plan-product.js +0 -53
- package/esm2015/lib/pricing/pricing-plan.js +0 -14
- package/esm2015/lib/pricing/pricing-plan.service.js +0 -287
- package/esm2015/lib/pricing/product-pricing-rules.js +0 -10
- package/esm2015/lib/pricing/product-pricing-type.js +0 -31
- package/esm2015/lib/pricing/product-pricing.js +0 -44
- package/esm2015/lib/pricing/wholesale-pricing.service.js +0 -61
- package/esm2015/lib/product/index.js +0 -3
- package/esm2015/lib/product/list-products.js +0 -30
- package/esm2015/lib/product/product.js +0 -10
- package/esm2015/lib/product-summary/index.js +0 -3
- package/esm2015/lib/product-summary/product-summary.service.js +0 -42
- package/esm2015/lib/product-summary/subscription-retention.js +0 -19
- package/esm2015/lib/purchase/index.js +0 -4
- package/esm2015/lib/purchase/list-purchases.js +0 -17
- package/esm2015/lib/purchase/purchase.js +0 -79
- package/esm2015/lib/purchase/purchase.service.js +0 -31
- package/esm2015/lib/purchase/purchase_status.js +0 -26
- package/esm2015/lib/recurring_invoice/collection-method.js +0 -31
- package/esm2015/lib/recurring_invoice/index.js +0 -6
- package/esm2015/lib/recurring_invoice/interval.js +0 -42
- package/esm2015/lib/recurring_invoice/payment-processor.js +0 -32
- package/esm2015/lib/recurring_invoice/recurring-invoice.js +0 -123
- package/esm2015/lib/recurring_invoice/recurring-invoice.service.js +0 -64
- package/esm2015/lib/recurring_invoice/status.js +0 -37
- package/esm2015/lib/refund/index.js +0 -3
- package/esm2015/lib/refund/refund.js +0 -81
- package/esm2015/lib/refund/refund.service.js +0 -53
- package/esm2015/lib/retail-customer-configuration/index.js +0 -3
- package/esm2015/lib/retail-customer-configuration/retail-customer-configuration.js +0 -44
- package/esm2015/lib/retail-customer-configuration/retail-customer-configuration.service.js +0 -39
- package/esm2015/lib/revenue/index.js +0 -2
- package/esm2015/lib/revenue/revenue.interfaces.js +0 -2
- package/esm2015/lib/revenue/revenue.service.js +0 -34
- package/esm2015/lib/sales-credit-note/index.js +0 -3
- package/esm2015/lib/sales-credit-note/sales-credit-note.js +0 -53
- package/esm2015/lib/sales-credit-note/sales-credit-note.service.js +0 -72
- package/esm2015/lib/sales-invoice/index.js +0 -3
- package/esm2015/lib/sales-invoice/sales-invoice.js +0 -87
- package/esm2015/lib/sales-invoice/sales-invoice.service.js +0 -77
- package/esm2015/lib/sku.js +0 -4
- package/esm2015/lib/stripe-file/file.js +0 -2
- package/esm2015/lib/stripe-file/index.js +0 -3
- package/esm2015/lib/stripe-file/purpose.js +0 -13
- package/esm2015/lib/stripe-file/stripe-file.service.js +0 -35
- package/esm2015/lib/subscription/can-create-subscriptions-item.js +0 -2
- package/esm2015/lib/subscription/index.js +0 -2
- package/esm2015/lib/tax-rate/index.js +0 -2
- package/esm2015/lib/tax-rate/tax-rate.js +0 -13
- package/esm2015/lib/tax-rate/tax-rate.service.js +0 -86
- package/esm2015/public_api.js +0 -2
- package/esm2015/vendasta-billing.js +0 -5
- package/fesm2015/vendasta-billing.js.map +0 -1
- package/lib/applied_bundle/applied_bundle.d.ts +0 -15
- package/lib/applied_bundle/index.d.ts +0 -1
- package/lib/applied_discount/applied_discount.d.ts +0 -26
- package/lib/applied_discount/index.d.ts +0 -1
- package/lib/bank_account/bank-account.service.d.ts +0 -11
- package/lib/bank_account/bank_account.d.ts +0 -12
- package/lib/bank_account/index.d.ts +0 -3
- package/lib/bank_reconciliation/bank-reconciliation.service.d.ts +0 -10
- package/lib/bank_reconciliation/index.d.ts +0 -2
- package/lib/bank_reconciliation/payout.d.ts +0 -37
- package/lib/billable-item/billable-item.d.ts +0 -40
- package/lib/billable-item/billable-item.service.d.ts +0 -10
- package/lib/billable-item/index.d.ts +0 -2
- package/lib/billing-host.service.d.ts +0 -11
- package/lib/billing.service.d.ts +0 -88
- package/lib/bundle/bundle.d.ts +0 -26
- package/lib/bundle/bundle.service.d.ts +0 -14
- package/lib/bundle/index.d.ts +0 -2
- package/lib/contract/contract.d.ts +0 -20
- package/lib/contract/contract.service.d.ts +0 -23
- package/lib/contract/dimension.d.ts +0 -11
- package/lib/contract/index.d.ts +0 -5
- package/lib/contract/mutations.d.ts +0 -11
- package/lib/contract-document/contract-document.d.ts +0 -8
- package/lib/contract-document/contract-document.service.d.ts +0 -17
- package/lib/contract-document/index.d.ts +0 -3
- package/lib/contract-document/list-contract-document.d.ts +0 -3
- package/lib/core/index.d.ts +0 -2
- package/lib/core/paged-response.d.ts +0 -6
- package/lib/core/sort-direction.d.ts +0 -4
- package/lib/credit/credit.d.ts +0 -7
- package/lib/credit/credit.service.d.ts +0 -9
- package/lib/credit/index.d.ts +0 -2
- package/lib/customer_summary/customer-summary.d.ts +0 -9
- package/lib/discount/discount.d.ts +0 -17
- package/lib/discount/discount.service.d.ts +0 -15
- package/lib/discount/discount_type.d.ts +0 -9
- package/lib/discount/index.d.ts +0 -4
- package/lib/discount/list-discount.d.ts +0 -5
- package/lib/http-shared/error-handlers.d.ts +0 -4
- package/lib/invoice/index.d.ts +0 -3
- package/lib/invoice/invoice.d.ts +0 -86
- package/lib/invoice/invoice.service.d.ts +0 -40
- package/lib/invoice/list-invoice.d.ts +0 -15
- package/lib/invoice-template/index.d.ts +0 -2
- package/lib/invoice-template/invoice-template.d.ts +0 -35
- package/lib/invoice-template/invoice-template.service.d.ts +0 -14
- package/lib/merchant/balance.d.ts +0 -5
- package/lib/merchant/index.d.ts +0 -7
- package/lib/merchant/merchant.d.ts +0 -19
- package/lib/merchant/merchant.interface.d.ts +0 -3
- package/lib/merchant/merchant.service.d.ts +0 -59
- package/lib/merchant/payout-summary.d.ts +0 -19
- package/lib/merchant/retail-configuration.d.ts +0 -24
- package/lib/merchant-report/index.d.ts +0 -4
- package/lib/merchant-report/merchant-report-status.d.ts +0 -1
- package/lib/merchant-report/merchant-report.d.ts +0 -8
- package/lib/merchant-report/merchant-report.interfaces.d.ts +0 -5
- package/lib/merchant-report/merchant-report.service.d.ts +0 -12
- package/lib/payment/dispute.d.ts +0 -61
- package/lib/payment/index.d.ts +0 -9
- package/lib/payment/payment-allocation-type.d.ts +0 -7
- package/lib/payment/payment-source.d.ts +0 -7
- package/lib/payment/payment-status.d.ts +0 -7
- package/lib/payment/payment.d.ts +0 -42
- package/lib/payment/payment.service.d.ts +0 -24
- package/lib/payment/retail-payment.d.ts +0 -33
- package/lib/payment/retail-status.d.ts +0 -24
- package/lib/payment-card/index.d.ts +0 -2
- package/lib/payment-card/payment-card.d.ts +0 -41
- package/lib/payment-card/payment-card.service.d.ts +0 -13
- package/lib/payment-method/index.d.ts +0 -1
- package/lib/payment-method/payment-method.service.d.ts +0 -10
- package/lib/pricing/billing-strategy.d.ts +0 -11
- package/lib/pricing/commitment.d.ts +0 -6
- package/lib/pricing/currency.d.ts +0 -29
- package/lib/pricing/frequency.d.ts +0 -10
- package/lib/pricing/index.d.ts +0 -11
- package/lib/pricing/list-pricing-plan-product-filter.d.ts +0 -4
- package/lib/pricing/pricing-plan-product.d.ts +0 -34
- package/lib/pricing/pricing-plan.d.ts +0 -13
- package/lib/pricing/pricing-plan.service.d.ts +0 -17
- package/lib/pricing/product-pricing-rules.d.ts +0 -7
- package/lib/pricing/product-pricing-type.d.ts +0 -9
- package/lib/pricing/product-pricing.d.ts +0 -37
- package/lib/pricing/wholesale-pricing.service.d.ts +0 -19
- package/lib/product/index.d.ts +0 -2
- package/lib/product/list-products.d.ts +0 -16
- package/lib/product/product.d.ts +0 -9
- package/lib/product-summary/index.d.ts +0 -2
- package/lib/product-summary/product-summary.service.d.ts +0 -10
- package/lib/product-summary/subscription-retention.d.ts +0 -20
- package/lib/purchase/index.d.ts +0 -4
- package/lib/purchase/list-purchases.d.ts +0 -27
- package/lib/purchase/purchase.d.ts +0 -56
- package/lib/purchase/purchase.service.d.ts +0 -10
- package/lib/purchase/purchase_status.d.ts +0 -10
- package/lib/recurring_invoice/collection-method.d.ts +0 -4
- package/lib/recurring_invoice/index.d.ts +0 -5
- package/lib/recurring_invoice/interval.d.ts +0 -10
- package/lib/recurring_invoice/payment-processor.d.ts +0 -8
- package/lib/recurring_invoice/recurring-invoice.d.ts +0 -62
- package/lib/recurring_invoice/recurring-invoice.service.d.ts +0 -14
- package/lib/recurring_invoice/status.d.ts +0 -9
- package/lib/refund/index.d.ts +0 -2
- package/lib/refund/refund.d.ts +0 -36
- package/lib/refund/refund.service.d.ts +0 -11
- package/lib/retail-customer-configuration/index.d.ts +0 -2
- package/lib/retail-customer-configuration/retail-customer-configuration.d.ts +0 -20
- package/lib/retail-customer-configuration/retail-customer-configuration.service.d.ts +0 -9
- package/lib/revenue/index.d.ts +0 -2
- package/lib/revenue/revenue.interfaces.d.ts +0 -3
- package/lib/revenue/revenue.service.d.ts +0 -11
- package/lib/sales-credit-note/index.d.ts +0 -2
- package/lib/sales-credit-note/sales-credit-note.d.ts +0 -30
- package/lib/sales-credit-note/sales-credit-note.service.d.ts +0 -16
- package/lib/sales-invoice/index.d.ts +0 -2
- package/lib/sales-invoice/sales-invoice.d.ts +0 -42
- package/lib/sales-invoice/sales-invoice.service.d.ts +0 -16
- package/lib/sku.d.ts +0 -3
- package/lib/stripe-file/file.d.ts +0 -6
- package/lib/stripe-file/index.d.ts +0 -3
- package/lib/stripe-file/purpose.d.ts +0 -11
- package/lib/stripe-file/stripe-file.service.d.ts +0 -12
- package/lib/subscription/can-create-subscriptions-item.d.ts +0 -6
- package/lib/subscription/index.d.ts +0 -1
- package/lib/tax-rate/index.d.ts +0 -2
- package/lib/tax-rate/tax-rate.d.ts +0 -20
- package/lib/tax-rate/tax-rate.service.d.ts +0 -15
- package/vendasta-billing.metadata.json +0 -1
|
@@ -0,0 +1,1117 @@
|
|
|
1
|
+
import { AppliedBundle } from './applied-bundle';
|
|
2
|
+
import { AppliedDiscount } from './applied-discount';
|
|
3
|
+
import { AppliedTaxRate } from './applied-tax-rate';
|
|
4
|
+
import { FieldMask } from './field-mask';
|
|
5
|
+
import { PagedRequestOptions, PagedResponseMetadata } from './common';
|
|
6
|
+
import { TaxRate } from './tax-rate';
|
|
7
|
+
import * as e from '../enums';
|
|
8
|
+
export function enumStringToValue(enumRef, value) {
|
|
9
|
+
if (typeof value === 'number') {
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
return enumRef[value];
|
|
13
|
+
}
|
|
14
|
+
export class AddBundleRequest {
|
|
15
|
+
constructor(kwargs) {
|
|
16
|
+
if (!kwargs) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
Object.assign(this, kwargs);
|
|
20
|
+
}
|
|
21
|
+
static fromProto(proto) {
|
|
22
|
+
let m = new AddBundleRequest();
|
|
23
|
+
m = Object.assign(m, proto);
|
|
24
|
+
return m;
|
|
25
|
+
}
|
|
26
|
+
toApiJson() {
|
|
27
|
+
const toReturn = {};
|
|
28
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
29
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
30
|
+
}
|
|
31
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
32
|
+
toReturn['merchantId'] = this.merchantId;
|
|
33
|
+
}
|
|
34
|
+
if (typeof this.bundleId !== 'undefined') {
|
|
35
|
+
toReturn['bundleId'] = this.bundleId;
|
|
36
|
+
}
|
|
37
|
+
return toReturn;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export class AddBundleResponse {
|
|
41
|
+
constructor(kwargs) {
|
|
42
|
+
if (!kwargs) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
Object.assign(this, kwargs);
|
|
46
|
+
}
|
|
47
|
+
static fromProto(proto) {
|
|
48
|
+
let m = new AddBundleResponse();
|
|
49
|
+
m = Object.assign(m, proto);
|
|
50
|
+
if (proto.invoice) {
|
|
51
|
+
m.invoice = Invoice.fromProto(proto.invoice);
|
|
52
|
+
}
|
|
53
|
+
return m;
|
|
54
|
+
}
|
|
55
|
+
toApiJson() {
|
|
56
|
+
const toReturn = {};
|
|
57
|
+
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
58
|
+
toReturn['invoice'] = 'toApiJson' in this.invoice ? this.invoice.toApiJson() : this.invoice;
|
|
59
|
+
}
|
|
60
|
+
return toReturn;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export class AddLineItemRequest {
|
|
64
|
+
constructor(kwargs) {
|
|
65
|
+
if (!kwargs) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
Object.assign(this, kwargs);
|
|
69
|
+
}
|
|
70
|
+
static fromProto(proto) {
|
|
71
|
+
let m = new AddLineItemRequest();
|
|
72
|
+
m = Object.assign(m, proto);
|
|
73
|
+
if (proto.amount) {
|
|
74
|
+
m.amount = parseInt(proto.amount, 10);
|
|
75
|
+
}
|
|
76
|
+
return m;
|
|
77
|
+
}
|
|
78
|
+
toApiJson() {
|
|
79
|
+
const toReturn = {};
|
|
80
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
81
|
+
toReturn['merchantId'] = this.merchantId;
|
|
82
|
+
}
|
|
83
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
84
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
85
|
+
}
|
|
86
|
+
if (typeof this.sku !== 'undefined') {
|
|
87
|
+
toReturn['sku'] = this.sku;
|
|
88
|
+
}
|
|
89
|
+
if (typeof this.amount !== 'undefined') {
|
|
90
|
+
toReturn['amount'] = this.amount;
|
|
91
|
+
}
|
|
92
|
+
if (typeof this.quantity !== 'undefined') {
|
|
93
|
+
toReturn['quantity'] = this.quantity;
|
|
94
|
+
}
|
|
95
|
+
if (typeof this.description !== 'undefined') {
|
|
96
|
+
toReturn['description'] = this.description;
|
|
97
|
+
}
|
|
98
|
+
if (typeof this.taxRates !== 'undefined') {
|
|
99
|
+
toReturn['taxRates'] = this.taxRates;
|
|
100
|
+
}
|
|
101
|
+
return toReturn;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export class AddLineItemResponse {
|
|
105
|
+
constructor(kwargs) {
|
|
106
|
+
if (!kwargs) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
Object.assign(this, kwargs);
|
|
110
|
+
}
|
|
111
|
+
static fromProto(proto) {
|
|
112
|
+
let m = new AddLineItemResponse();
|
|
113
|
+
m = Object.assign(m, proto);
|
|
114
|
+
if (proto.invoice) {
|
|
115
|
+
m.invoice = Invoice.fromProto(proto.invoice);
|
|
116
|
+
}
|
|
117
|
+
return m;
|
|
118
|
+
}
|
|
119
|
+
toApiJson() {
|
|
120
|
+
const toReturn = {};
|
|
121
|
+
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
122
|
+
toReturn['invoice'] = 'toApiJson' in this.invoice ? this.invoice.toApiJson() : this.invoice;
|
|
123
|
+
}
|
|
124
|
+
return toReturn;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export class ChargeInvoiceRequest {
|
|
128
|
+
constructor(kwargs) {
|
|
129
|
+
if (!kwargs) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
Object.assign(this, kwargs);
|
|
133
|
+
}
|
|
134
|
+
static fromProto(proto) {
|
|
135
|
+
let m = new ChargeInvoiceRequest();
|
|
136
|
+
m = Object.assign(m, proto);
|
|
137
|
+
return m;
|
|
138
|
+
}
|
|
139
|
+
toApiJson() {
|
|
140
|
+
const toReturn = {};
|
|
141
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
142
|
+
toReturn['merchantId'] = this.merchantId;
|
|
143
|
+
}
|
|
144
|
+
if (typeof this.customerId !== 'undefined') {
|
|
145
|
+
toReturn['customerId'] = this.customerId;
|
|
146
|
+
}
|
|
147
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
148
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
149
|
+
}
|
|
150
|
+
if (typeof this.paymentMethodId !== 'undefined') {
|
|
151
|
+
toReturn['paymentMethodId'] = this.paymentMethodId;
|
|
152
|
+
}
|
|
153
|
+
return toReturn;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
export class CreateInvoiceRequest {
|
|
157
|
+
constructor(kwargs) {
|
|
158
|
+
if (!kwargs) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
Object.assign(this, kwargs);
|
|
162
|
+
}
|
|
163
|
+
static fromProto(proto) {
|
|
164
|
+
let m = new CreateInvoiceRequest();
|
|
165
|
+
m = Object.assign(m, proto);
|
|
166
|
+
return m;
|
|
167
|
+
}
|
|
168
|
+
toApiJson() {
|
|
169
|
+
const toReturn = {};
|
|
170
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
171
|
+
toReturn['merchantId'] = this.merchantId;
|
|
172
|
+
}
|
|
173
|
+
if (typeof this.customerId !== 'undefined') {
|
|
174
|
+
toReturn['customerId'] = this.customerId;
|
|
175
|
+
}
|
|
176
|
+
if (typeof this.currencyCode !== 'undefined') {
|
|
177
|
+
toReturn['currencyCode'] = this.currencyCode;
|
|
178
|
+
}
|
|
179
|
+
if (typeof this.orderId !== 'undefined') {
|
|
180
|
+
toReturn['orderId'] = this.orderId;
|
|
181
|
+
}
|
|
182
|
+
return toReturn;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
export class CreateInvoiceResponse {
|
|
186
|
+
constructor(kwargs) {
|
|
187
|
+
if (!kwargs) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
Object.assign(this, kwargs);
|
|
191
|
+
}
|
|
192
|
+
static fromProto(proto) {
|
|
193
|
+
let m = new CreateInvoiceResponse();
|
|
194
|
+
m = Object.assign(m, proto);
|
|
195
|
+
return m;
|
|
196
|
+
}
|
|
197
|
+
toApiJson() {
|
|
198
|
+
const toReturn = {};
|
|
199
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
200
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
201
|
+
}
|
|
202
|
+
return toReturn;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
export class InvoiceCustomerAddress {
|
|
206
|
+
constructor(kwargs) {
|
|
207
|
+
if (!kwargs) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
Object.assign(this, kwargs);
|
|
211
|
+
}
|
|
212
|
+
static fromProto(proto) {
|
|
213
|
+
let m = new InvoiceCustomerAddress();
|
|
214
|
+
m = Object.assign(m, proto);
|
|
215
|
+
return m;
|
|
216
|
+
}
|
|
217
|
+
toApiJson() {
|
|
218
|
+
const toReturn = {};
|
|
219
|
+
if (typeof this.address !== 'undefined') {
|
|
220
|
+
toReturn['address'] = this.address;
|
|
221
|
+
}
|
|
222
|
+
if (typeof this.city !== 'undefined') {
|
|
223
|
+
toReturn['city'] = this.city;
|
|
224
|
+
}
|
|
225
|
+
if (typeof this.state !== 'undefined') {
|
|
226
|
+
toReturn['state'] = this.state;
|
|
227
|
+
}
|
|
228
|
+
if (typeof this.zip !== 'undefined') {
|
|
229
|
+
toReturn['zip'] = this.zip;
|
|
230
|
+
}
|
|
231
|
+
if (typeof this.country !== 'undefined') {
|
|
232
|
+
toReturn['country'] = this.country;
|
|
233
|
+
}
|
|
234
|
+
if (typeof this.address2 !== 'undefined') {
|
|
235
|
+
toReturn['address2'] = this.address2;
|
|
236
|
+
}
|
|
237
|
+
return toReturn;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
export class ListInvoicesRequestFiltersDateFilter {
|
|
241
|
+
constructor(kwargs) {
|
|
242
|
+
if (!kwargs) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
Object.assign(this, kwargs);
|
|
246
|
+
}
|
|
247
|
+
static fromProto(proto) {
|
|
248
|
+
let m = new ListInvoicesRequestFiltersDateFilter();
|
|
249
|
+
m = Object.assign(m, proto);
|
|
250
|
+
if (proto.dateField) {
|
|
251
|
+
m.dateField = enumStringToValue(e.ListInvoicesRequestFiltersDateFilterDateField, proto.dateField);
|
|
252
|
+
}
|
|
253
|
+
if (proto.dateLte) {
|
|
254
|
+
m.dateLte = new Date(proto.dateLte);
|
|
255
|
+
}
|
|
256
|
+
if (proto.dateGte) {
|
|
257
|
+
m.dateGte = new Date(proto.dateGte);
|
|
258
|
+
}
|
|
259
|
+
return m;
|
|
260
|
+
}
|
|
261
|
+
toApiJson() {
|
|
262
|
+
const toReturn = {};
|
|
263
|
+
if (typeof this.dateField !== 'undefined') {
|
|
264
|
+
toReturn['dateField'] = this.dateField;
|
|
265
|
+
}
|
|
266
|
+
if (typeof this.dateLte !== 'undefined' && this.dateLte !== null) {
|
|
267
|
+
toReturn['dateLte'] = 'toApiJson' in this.dateLte ? this.dateLte.toApiJson() : this.dateLte;
|
|
268
|
+
}
|
|
269
|
+
if (typeof this.dateGte !== 'undefined' && this.dateGte !== null) {
|
|
270
|
+
toReturn['dateGte'] = 'toApiJson' in this.dateGte ? this.dateGte.toApiJson() : this.dateGte;
|
|
271
|
+
}
|
|
272
|
+
return toReturn;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
export class DeleteInvoiceRequest {
|
|
276
|
+
constructor(kwargs) {
|
|
277
|
+
if (!kwargs) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
Object.assign(this, kwargs);
|
|
281
|
+
}
|
|
282
|
+
static fromProto(proto) {
|
|
283
|
+
let m = new DeleteInvoiceRequest();
|
|
284
|
+
m = Object.assign(m, proto);
|
|
285
|
+
return m;
|
|
286
|
+
}
|
|
287
|
+
toApiJson() {
|
|
288
|
+
const toReturn = {};
|
|
289
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
290
|
+
toReturn['merchantId'] = this.merchantId;
|
|
291
|
+
}
|
|
292
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
293
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
294
|
+
}
|
|
295
|
+
return toReturn;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
export class DeleteLineItemRequest {
|
|
299
|
+
constructor(kwargs) {
|
|
300
|
+
if (!kwargs) {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
Object.assign(this, kwargs);
|
|
304
|
+
}
|
|
305
|
+
static fromProto(proto) {
|
|
306
|
+
let m = new DeleteLineItemRequest();
|
|
307
|
+
m = Object.assign(m, proto);
|
|
308
|
+
return m;
|
|
309
|
+
}
|
|
310
|
+
toApiJson() {
|
|
311
|
+
const toReturn = {};
|
|
312
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
313
|
+
toReturn['merchantId'] = this.merchantId;
|
|
314
|
+
}
|
|
315
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
316
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
317
|
+
}
|
|
318
|
+
if (typeof this.id !== 'undefined') {
|
|
319
|
+
toReturn['id'] = this.id;
|
|
320
|
+
}
|
|
321
|
+
return toReturn;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
export class DeleteLineItemResponse {
|
|
325
|
+
constructor(kwargs) {
|
|
326
|
+
if (!kwargs) {
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
Object.assign(this, kwargs);
|
|
330
|
+
}
|
|
331
|
+
static fromProto(proto) {
|
|
332
|
+
let m = new DeleteLineItemResponse();
|
|
333
|
+
m = Object.assign(m, proto);
|
|
334
|
+
if (proto.invoice) {
|
|
335
|
+
m.invoice = Invoice.fromProto(proto.invoice);
|
|
336
|
+
}
|
|
337
|
+
return m;
|
|
338
|
+
}
|
|
339
|
+
toApiJson() {
|
|
340
|
+
const toReturn = {};
|
|
341
|
+
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
342
|
+
toReturn['invoice'] = 'toApiJson' in this.invoice ? this.invoice.toApiJson() : this.invoice;
|
|
343
|
+
}
|
|
344
|
+
return toReturn;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
export class DuplicateInvoiceRequest {
|
|
348
|
+
constructor(kwargs) {
|
|
349
|
+
if (!kwargs) {
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
Object.assign(this, kwargs);
|
|
353
|
+
}
|
|
354
|
+
static fromProto(proto) {
|
|
355
|
+
let m = new DuplicateInvoiceRequest();
|
|
356
|
+
m = Object.assign(m, proto);
|
|
357
|
+
return m;
|
|
358
|
+
}
|
|
359
|
+
toApiJson() {
|
|
360
|
+
const toReturn = {};
|
|
361
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
362
|
+
toReturn['merchantId'] = this.merchantId;
|
|
363
|
+
}
|
|
364
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
365
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
366
|
+
}
|
|
367
|
+
return toReturn;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
export class DuplicateInvoiceResponse {
|
|
371
|
+
constructor(kwargs) {
|
|
372
|
+
if (!kwargs) {
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
Object.assign(this, kwargs);
|
|
376
|
+
}
|
|
377
|
+
static fromProto(proto) {
|
|
378
|
+
let m = new DuplicateInvoiceResponse();
|
|
379
|
+
m = Object.assign(m, proto);
|
|
380
|
+
return m;
|
|
381
|
+
}
|
|
382
|
+
toApiJson() {
|
|
383
|
+
const toReturn = {};
|
|
384
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
385
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
386
|
+
}
|
|
387
|
+
return toReturn;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
export class ListInvoicesRequestFilters {
|
|
391
|
+
constructor(kwargs) {
|
|
392
|
+
if (!kwargs) {
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
Object.assign(this, kwargs);
|
|
396
|
+
}
|
|
397
|
+
static fromProto(proto) {
|
|
398
|
+
let m = new ListInvoicesRequestFilters();
|
|
399
|
+
m = Object.assign(m, proto);
|
|
400
|
+
if (proto.statuses) {
|
|
401
|
+
m.statuses = proto.statuses.map((v) => enumStringToValue(e.InvoiceStatus, v));
|
|
402
|
+
}
|
|
403
|
+
if (proto.dateFilter) {
|
|
404
|
+
m.dateFilter = ListInvoicesRequestFiltersDateFilter.fromProto(proto.dateFilter);
|
|
405
|
+
}
|
|
406
|
+
return m;
|
|
407
|
+
}
|
|
408
|
+
toApiJson() {
|
|
409
|
+
const toReturn = {};
|
|
410
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
411
|
+
toReturn['merchantId'] = this.merchantId;
|
|
412
|
+
}
|
|
413
|
+
if (typeof this.customerId !== 'undefined') {
|
|
414
|
+
toReturn['customerId'] = this.customerId;
|
|
415
|
+
}
|
|
416
|
+
if (typeof this.statuses !== 'undefined') {
|
|
417
|
+
toReturn['statuses'] = this.statuses;
|
|
418
|
+
}
|
|
419
|
+
if (typeof this.pastDue !== 'undefined') {
|
|
420
|
+
toReturn['pastDue'] = this.pastDue;
|
|
421
|
+
}
|
|
422
|
+
if (typeof this.number !== 'undefined') {
|
|
423
|
+
toReturn['number'] = this.number;
|
|
424
|
+
}
|
|
425
|
+
if (typeof this.dateFilter !== 'undefined' && this.dateFilter !== null) {
|
|
426
|
+
toReturn['dateFilter'] = 'toApiJson' in this.dateFilter ? this.dateFilter.toApiJson() : this.dateFilter;
|
|
427
|
+
}
|
|
428
|
+
return toReturn;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
export class GetInvoiceRequest {
|
|
432
|
+
constructor(kwargs) {
|
|
433
|
+
if (!kwargs) {
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
Object.assign(this, kwargs);
|
|
437
|
+
}
|
|
438
|
+
static fromProto(proto) {
|
|
439
|
+
let m = new GetInvoiceRequest();
|
|
440
|
+
m = Object.assign(m, proto);
|
|
441
|
+
return m;
|
|
442
|
+
}
|
|
443
|
+
toApiJson() {
|
|
444
|
+
const toReturn = {};
|
|
445
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
446
|
+
toReturn['merchantId'] = this.merchantId;
|
|
447
|
+
}
|
|
448
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
449
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
450
|
+
}
|
|
451
|
+
return toReturn;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
export class GetInvoiceResponse {
|
|
455
|
+
constructor(kwargs) {
|
|
456
|
+
if (!kwargs) {
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
Object.assign(this, kwargs);
|
|
460
|
+
}
|
|
461
|
+
static fromProto(proto) {
|
|
462
|
+
let m = new GetInvoiceResponse();
|
|
463
|
+
m = Object.assign(m, proto);
|
|
464
|
+
if (proto.invoice) {
|
|
465
|
+
m.invoice = Invoice.fromProto(proto.invoice);
|
|
466
|
+
}
|
|
467
|
+
return m;
|
|
468
|
+
}
|
|
469
|
+
toApiJson() {
|
|
470
|
+
const toReturn = {};
|
|
471
|
+
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
472
|
+
toReturn['invoice'] = 'toApiJson' in this.invoice ? this.invoice.toApiJson() : this.invoice;
|
|
473
|
+
}
|
|
474
|
+
return toReturn;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
export class Invoice {
|
|
478
|
+
constructor(kwargs) {
|
|
479
|
+
if (!kwargs) {
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
Object.assign(this, kwargs);
|
|
483
|
+
}
|
|
484
|
+
static fromProto(proto) {
|
|
485
|
+
let m = new Invoice();
|
|
486
|
+
m = Object.assign(m, proto);
|
|
487
|
+
if (proto.status) {
|
|
488
|
+
m.status = enumStringToValue(e.InvoiceStatus, proto.status);
|
|
489
|
+
}
|
|
490
|
+
if (proto.subtotal) {
|
|
491
|
+
m.subtotal = parseInt(proto.subtotal, 10);
|
|
492
|
+
}
|
|
493
|
+
if (proto.total) {
|
|
494
|
+
m.total = parseInt(proto.total, 10);
|
|
495
|
+
}
|
|
496
|
+
if (proto.amountPaid) {
|
|
497
|
+
m.amountPaid = parseInt(proto.amountPaid, 10);
|
|
498
|
+
}
|
|
499
|
+
if (proto.issued) {
|
|
500
|
+
m.issued = new Date(proto.issued);
|
|
501
|
+
}
|
|
502
|
+
if (proto.due) {
|
|
503
|
+
m.due = new Date(proto.due);
|
|
504
|
+
}
|
|
505
|
+
if (proto.created) {
|
|
506
|
+
m.created = new Date(proto.created);
|
|
507
|
+
}
|
|
508
|
+
if (proto.updated) {
|
|
509
|
+
m.updated = new Date(proto.updated);
|
|
510
|
+
}
|
|
511
|
+
if (proto.items) {
|
|
512
|
+
m.items = proto.items.map(InvoiceItem.fromProto);
|
|
513
|
+
}
|
|
514
|
+
if (proto.currency) {
|
|
515
|
+
m.currency = enumStringToValue(e.Currency, proto.currency);
|
|
516
|
+
}
|
|
517
|
+
if (proto.paid) {
|
|
518
|
+
m.paid = new Date(proto.paid);
|
|
519
|
+
}
|
|
520
|
+
if (proto.amountTax) {
|
|
521
|
+
m.amountTax = parseInt(proto.amountTax, 10);
|
|
522
|
+
}
|
|
523
|
+
if (proto.appliedTaxes) {
|
|
524
|
+
m.appliedTaxes = proto.appliedTaxes.map(AppliedTaxRate.fromProto);
|
|
525
|
+
}
|
|
526
|
+
if (proto.defaultTaxRates) {
|
|
527
|
+
m.defaultTaxRates = proto.defaultTaxRates.map(TaxRate.fromProto);
|
|
528
|
+
}
|
|
529
|
+
if (proto.appliedBundles) {
|
|
530
|
+
m.appliedBundles = proto.appliedBundles.map(AppliedBundle.fromProto);
|
|
531
|
+
}
|
|
532
|
+
if (proto.amountDiscount) {
|
|
533
|
+
m.amountDiscount = parseInt(proto.amountDiscount, 10);
|
|
534
|
+
}
|
|
535
|
+
if (proto.voided) {
|
|
536
|
+
m.voided = new Date(proto.voided);
|
|
537
|
+
}
|
|
538
|
+
if (proto.customerAddress) {
|
|
539
|
+
m.customerAddress = InvoiceCustomerAddress.fromProto(proto.customerAddress);
|
|
540
|
+
}
|
|
541
|
+
return m;
|
|
542
|
+
}
|
|
543
|
+
toApiJson() {
|
|
544
|
+
const toReturn = {};
|
|
545
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
546
|
+
toReturn['merchantId'] = this.merchantId;
|
|
547
|
+
}
|
|
548
|
+
if (typeof this.id !== 'undefined') {
|
|
549
|
+
toReturn['id'] = this.id;
|
|
550
|
+
}
|
|
551
|
+
if (typeof this.number !== 'undefined') {
|
|
552
|
+
toReturn['number'] = this.number;
|
|
553
|
+
}
|
|
554
|
+
if (typeof this.customerId !== 'undefined') {
|
|
555
|
+
toReturn['customerId'] = this.customerId;
|
|
556
|
+
}
|
|
557
|
+
if (typeof this.status !== 'undefined') {
|
|
558
|
+
toReturn['status'] = this.status;
|
|
559
|
+
}
|
|
560
|
+
if (typeof this.subtotal !== 'undefined') {
|
|
561
|
+
toReturn['subtotal'] = this.subtotal;
|
|
562
|
+
}
|
|
563
|
+
if (typeof this.total !== 'undefined') {
|
|
564
|
+
toReturn['total'] = this.total;
|
|
565
|
+
}
|
|
566
|
+
if (typeof this.amountPaid !== 'undefined') {
|
|
567
|
+
toReturn['amountPaid'] = this.amountPaid;
|
|
568
|
+
}
|
|
569
|
+
if (typeof this.issued !== 'undefined' && this.issued !== null) {
|
|
570
|
+
toReturn['issued'] = 'toApiJson' in this.issued ? this.issued.toApiJson() : this.issued;
|
|
571
|
+
}
|
|
572
|
+
if (typeof this.due !== 'undefined' && this.due !== null) {
|
|
573
|
+
toReturn['due'] = 'toApiJson' in this.due ? this.due.toApiJson() : this.due;
|
|
574
|
+
}
|
|
575
|
+
if (typeof this.created !== 'undefined' && this.created !== null) {
|
|
576
|
+
toReturn['created'] = 'toApiJson' in this.created ? this.created.toApiJson() : this.created;
|
|
577
|
+
}
|
|
578
|
+
if (typeof this.updated !== 'undefined' && this.updated !== null) {
|
|
579
|
+
toReturn['updated'] = 'toApiJson' in this.updated ? this.updated.toApiJson() : this.updated;
|
|
580
|
+
}
|
|
581
|
+
if (typeof this.items !== 'undefined' && this.items !== null) {
|
|
582
|
+
toReturn['items'] = 'toApiJson' in this.items ? this.items.toApiJson() : this.items;
|
|
583
|
+
}
|
|
584
|
+
if (typeof this.currency !== 'undefined') {
|
|
585
|
+
toReturn['currency'] = this.currency;
|
|
586
|
+
}
|
|
587
|
+
if (typeof this.paid !== 'undefined' && this.paid !== null) {
|
|
588
|
+
toReturn['paid'] = 'toApiJson' in this.paid ? this.paid.toApiJson() : this.paid;
|
|
589
|
+
}
|
|
590
|
+
if (typeof this.orderId !== 'undefined') {
|
|
591
|
+
toReturn['orderId'] = this.orderId;
|
|
592
|
+
}
|
|
593
|
+
if (typeof this.amountTax !== 'undefined') {
|
|
594
|
+
toReturn['amountTax'] = this.amountTax;
|
|
595
|
+
}
|
|
596
|
+
if (typeof this.appliedTaxes !== 'undefined' && this.appliedTaxes !== null) {
|
|
597
|
+
toReturn['appliedTaxes'] = 'toApiJson' in this.appliedTaxes ? this.appliedTaxes.toApiJson() : this.appliedTaxes;
|
|
598
|
+
}
|
|
599
|
+
if (typeof this.defaultTaxRates !== 'undefined' && this.defaultTaxRates !== null) {
|
|
600
|
+
toReturn['defaultTaxRates'] = 'toApiJson' in this.defaultTaxRates ? this.defaultTaxRates.toApiJson() : this.defaultTaxRates;
|
|
601
|
+
}
|
|
602
|
+
if (typeof this.appliedBundles !== 'undefined' && this.appliedBundles !== null) {
|
|
603
|
+
toReturn['appliedBundles'] = 'toApiJson' in this.appliedBundles ? this.appliedBundles.toApiJson() : this.appliedBundles;
|
|
604
|
+
}
|
|
605
|
+
if (typeof this.amountDiscount !== 'undefined') {
|
|
606
|
+
toReturn['amountDiscount'] = this.amountDiscount;
|
|
607
|
+
}
|
|
608
|
+
if (typeof this.customerName !== 'undefined') {
|
|
609
|
+
toReturn['customerName'] = this.customerName;
|
|
610
|
+
}
|
|
611
|
+
if (typeof this.origin !== 'undefined') {
|
|
612
|
+
toReturn['origin'] = this.origin;
|
|
613
|
+
}
|
|
614
|
+
if (typeof this.collectionMethod !== 'undefined') {
|
|
615
|
+
toReturn['collectionMethod'] = this.collectionMethod;
|
|
616
|
+
}
|
|
617
|
+
if (typeof this.contactId !== 'undefined') {
|
|
618
|
+
toReturn['contactId'] = this.contactId;
|
|
619
|
+
}
|
|
620
|
+
if (typeof this.memo !== 'undefined') {
|
|
621
|
+
toReturn['memo'] = this.memo;
|
|
622
|
+
}
|
|
623
|
+
if (typeof this.voided !== 'undefined' && this.voided !== null) {
|
|
624
|
+
toReturn['voided'] = 'toApiJson' in this.voided ? this.voided.toApiJson() : this.voided;
|
|
625
|
+
}
|
|
626
|
+
if (typeof this.defaultPaymentMethod !== 'undefined') {
|
|
627
|
+
toReturn['defaultPaymentMethod'] = this.defaultPaymentMethod;
|
|
628
|
+
}
|
|
629
|
+
if (typeof this.customerAddress !== 'undefined' && this.customerAddress !== null) {
|
|
630
|
+
toReturn['customerAddress'] = 'toApiJson' in this.customerAddress ? this.customerAddress.toApiJson() : this.customerAddress;
|
|
631
|
+
}
|
|
632
|
+
if (typeof this.externalCustomerIdentifier !== 'undefined') {
|
|
633
|
+
toReturn['externalCustomerIdentifier'] = this.externalCustomerIdentifier;
|
|
634
|
+
}
|
|
635
|
+
return toReturn;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
export class InvoiceItem {
|
|
639
|
+
constructor(kwargs) {
|
|
640
|
+
if (!kwargs) {
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
643
|
+
Object.assign(this, kwargs);
|
|
644
|
+
}
|
|
645
|
+
static fromProto(proto) {
|
|
646
|
+
let m = new InvoiceItem();
|
|
647
|
+
m = Object.assign(m, proto);
|
|
648
|
+
if (proto.amount) {
|
|
649
|
+
m.amount = parseInt(proto.amount, 10);
|
|
650
|
+
}
|
|
651
|
+
if (proto.total) {
|
|
652
|
+
m.total = parseInt(proto.total, 10);
|
|
653
|
+
}
|
|
654
|
+
if (proto.appliedTaxes) {
|
|
655
|
+
m.appliedTaxes = proto.appliedTaxes.map(AppliedTaxRate.fromProto);
|
|
656
|
+
}
|
|
657
|
+
if (proto.taxRates) {
|
|
658
|
+
m.taxRates = proto.taxRates.map(TaxRate.fromProto);
|
|
659
|
+
}
|
|
660
|
+
if (proto.discounts) {
|
|
661
|
+
m.discounts = proto.discounts.map(AppliedDiscount.fromProto);
|
|
662
|
+
}
|
|
663
|
+
if (proto.subtotal) {
|
|
664
|
+
m.subtotal = parseInt(proto.subtotal, 10);
|
|
665
|
+
}
|
|
666
|
+
return m;
|
|
667
|
+
}
|
|
668
|
+
toApiJson() {
|
|
669
|
+
const toReturn = {};
|
|
670
|
+
if (typeof this.id !== 'undefined') {
|
|
671
|
+
toReturn['id'] = this.id;
|
|
672
|
+
}
|
|
673
|
+
if (typeof this.sku !== 'undefined') {
|
|
674
|
+
toReturn['sku'] = this.sku;
|
|
675
|
+
}
|
|
676
|
+
if (typeof this.amount !== 'undefined') {
|
|
677
|
+
toReturn['amount'] = this.amount;
|
|
678
|
+
}
|
|
679
|
+
if (typeof this.quantity !== 'undefined') {
|
|
680
|
+
toReturn['quantity'] = this.quantity;
|
|
681
|
+
}
|
|
682
|
+
if (typeof this.description !== 'undefined') {
|
|
683
|
+
toReturn['description'] = this.description;
|
|
684
|
+
}
|
|
685
|
+
if (typeof this.total !== 'undefined') {
|
|
686
|
+
toReturn['total'] = this.total;
|
|
687
|
+
}
|
|
688
|
+
if (typeof this.appliedTaxes !== 'undefined' && this.appliedTaxes !== null) {
|
|
689
|
+
toReturn['appliedTaxes'] = 'toApiJson' in this.appliedTaxes ? this.appliedTaxes.toApiJson() : this.appliedTaxes;
|
|
690
|
+
}
|
|
691
|
+
if (typeof this.taxRates !== 'undefined' && this.taxRates !== null) {
|
|
692
|
+
toReturn['taxRates'] = 'toApiJson' in this.taxRates ? this.taxRates.toApiJson() : this.taxRates;
|
|
693
|
+
}
|
|
694
|
+
if (typeof this.bundleId !== 'undefined') {
|
|
695
|
+
toReturn['bundleId'] = this.bundleId;
|
|
696
|
+
}
|
|
697
|
+
if (typeof this.discounts !== 'undefined' && this.discounts !== null) {
|
|
698
|
+
toReturn['discounts'] = 'toApiJson' in this.discounts ? this.discounts.toApiJson() : this.discounts;
|
|
699
|
+
}
|
|
700
|
+
if (typeof this.subtotal !== 'undefined') {
|
|
701
|
+
toReturn['subtotal'] = this.subtotal;
|
|
702
|
+
}
|
|
703
|
+
if (typeof this.bundleInstanceId !== 'undefined') {
|
|
704
|
+
toReturn['bundleInstanceId'] = this.bundleInstanceId;
|
|
705
|
+
}
|
|
706
|
+
return toReturn;
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
export class ListInvoicesRequest {
|
|
710
|
+
constructor(kwargs) {
|
|
711
|
+
if (!kwargs) {
|
|
712
|
+
return;
|
|
713
|
+
}
|
|
714
|
+
Object.assign(this, kwargs);
|
|
715
|
+
}
|
|
716
|
+
static fromProto(proto) {
|
|
717
|
+
let m = new ListInvoicesRequest();
|
|
718
|
+
m = Object.assign(m, proto);
|
|
719
|
+
if (proto.filters) {
|
|
720
|
+
m.filters = ListInvoicesRequestFilters.fromProto(proto.filters);
|
|
721
|
+
}
|
|
722
|
+
if (proto.pagingOptions) {
|
|
723
|
+
m.pagingOptions = PagedRequestOptions.fromProto(proto.pagingOptions);
|
|
724
|
+
}
|
|
725
|
+
return m;
|
|
726
|
+
}
|
|
727
|
+
toApiJson() {
|
|
728
|
+
const toReturn = {};
|
|
729
|
+
if (typeof this.filters !== 'undefined' && this.filters !== null) {
|
|
730
|
+
toReturn['filters'] = 'toApiJson' in this.filters ? this.filters.toApiJson() : this.filters;
|
|
731
|
+
}
|
|
732
|
+
if (typeof this.pagingOptions !== 'undefined' && this.pagingOptions !== null) {
|
|
733
|
+
toReturn['pagingOptions'] = 'toApiJson' in this.pagingOptions ? this.pagingOptions.toApiJson() : this.pagingOptions;
|
|
734
|
+
}
|
|
735
|
+
return toReturn;
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
export class ListInvoicesResponse {
|
|
739
|
+
constructor(kwargs) {
|
|
740
|
+
if (!kwargs) {
|
|
741
|
+
return;
|
|
742
|
+
}
|
|
743
|
+
Object.assign(this, kwargs);
|
|
744
|
+
}
|
|
745
|
+
static fromProto(proto) {
|
|
746
|
+
let m = new ListInvoicesResponse();
|
|
747
|
+
m = Object.assign(m, proto);
|
|
748
|
+
if (proto.invoices) {
|
|
749
|
+
m.invoices = proto.invoices.map(Invoice.fromProto);
|
|
750
|
+
}
|
|
751
|
+
if (proto.pagingMetadata) {
|
|
752
|
+
m.pagingMetadata = PagedResponseMetadata.fromProto(proto.pagingMetadata);
|
|
753
|
+
}
|
|
754
|
+
return m;
|
|
755
|
+
}
|
|
756
|
+
toApiJson() {
|
|
757
|
+
const toReturn = {};
|
|
758
|
+
if (typeof this.invoices !== 'undefined' && this.invoices !== null) {
|
|
759
|
+
toReturn['invoices'] = 'toApiJson' in this.invoices ? this.invoices.toApiJson() : this.invoices;
|
|
760
|
+
}
|
|
761
|
+
if (typeof this.pagingMetadata !== 'undefined' && this.pagingMetadata !== null) {
|
|
762
|
+
toReturn['pagingMetadata'] = 'toApiJson' in this.pagingMetadata ? this.pagingMetadata.toApiJson() : this.pagingMetadata;
|
|
763
|
+
}
|
|
764
|
+
return toReturn;
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
export class PayInvoiceRequest {
|
|
768
|
+
constructor(kwargs) {
|
|
769
|
+
if (!kwargs) {
|
|
770
|
+
return;
|
|
771
|
+
}
|
|
772
|
+
Object.assign(this, kwargs);
|
|
773
|
+
}
|
|
774
|
+
static fromProto(proto) {
|
|
775
|
+
let m = new PayInvoiceRequest();
|
|
776
|
+
m = Object.assign(m, proto);
|
|
777
|
+
return m;
|
|
778
|
+
}
|
|
779
|
+
toApiJson() {
|
|
780
|
+
const toReturn = {};
|
|
781
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
782
|
+
toReturn['merchantId'] = this.merchantId;
|
|
783
|
+
}
|
|
784
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
785
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
786
|
+
}
|
|
787
|
+
return toReturn;
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
export class RemoveBundleRequest {
|
|
791
|
+
constructor(kwargs) {
|
|
792
|
+
if (!kwargs) {
|
|
793
|
+
return;
|
|
794
|
+
}
|
|
795
|
+
Object.assign(this, kwargs);
|
|
796
|
+
}
|
|
797
|
+
static fromProto(proto) {
|
|
798
|
+
let m = new RemoveBundleRequest();
|
|
799
|
+
m = Object.assign(m, proto);
|
|
800
|
+
return m;
|
|
801
|
+
}
|
|
802
|
+
toApiJson() {
|
|
803
|
+
const toReturn = {};
|
|
804
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
805
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
806
|
+
}
|
|
807
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
808
|
+
toReturn['merchantId'] = this.merchantId;
|
|
809
|
+
}
|
|
810
|
+
if (typeof this.bundleId !== 'undefined') {
|
|
811
|
+
toReturn['bundleId'] = this.bundleId;
|
|
812
|
+
}
|
|
813
|
+
if (typeof this.bundleInstanceId !== 'undefined') {
|
|
814
|
+
toReturn['bundleInstanceId'] = this.bundleInstanceId;
|
|
815
|
+
}
|
|
816
|
+
return toReturn;
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
export class RemoveBundleResponse {
|
|
820
|
+
constructor(kwargs) {
|
|
821
|
+
if (!kwargs) {
|
|
822
|
+
return;
|
|
823
|
+
}
|
|
824
|
+
Object.assign(this, kwargs);
|
|
825
|
+
}
|
|
826
|
+
static fromProto(proto) {
|
|
827
|
+
let m = new RemoveBundleResponse();
|
|
828
|
+
m = Object.assign(m, proto);
|
|
829
|
+
if (proto.invoice) {
|
|
830
|
+
m.invoice = Invoice.fromProto(proto.invoice);
|
|
831
|
+
}
|
|
832
|
+
return m;
|
|
833
|
+
}
|
|
834
|
+
toApiJson() {
|
|
835
|
+
const toReturn = {};
|
|
836
|
+
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
837
|
+
toReturn['invoice'] = 'toApiJson' in this.invoice ? this.invoice.toApiJson() : this.invoice;
|
|
838
|
+
}
|
|
839
|
+
return toReturn;
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
export class SendInvoiceRequest {
|
|
843
|
+
constructor(kwargs) {
|
|
844
|
+
if (!kwargs) {
|
|
845
|
+
return;
|
|
846
|
+
}
|
|
847
|
+
Object.assign(this, kwargs);
|
|
848
|
+
}
|
|
849
|
+
static fromProto(proto) {
|
|
850
|
+
let m = new SendInvoiceRequest();
|
|
851
|
+
m = Object.assign(m, proto);
|
|
852
|
+
return m;
|
|
853
|
+
}
|
|
854
|
+
toApiJson() {
|
|
855
|
+
const toReturn = {};
|
|
856
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
857
|
+
toReturn['merchantId'] = this.merchantId;
|
|
858
|
+
}
|
|
859
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
860
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
861
|
+
}
|
|
862
|
+
if (typeof this.emailAddresses !== 'undefined') {
|
|
863
|
+
toReturn['emailAddresses'] = this.emailAddresses;
|
|
864
|
+
}
|
|
865
|
+
if (typeof this.languageCode !== 'undefined') {
|
|
866
|
+
toReturn['languageCode'] = this.languageCode;
|
|
867
|
+
}
|
|
868
|
+
return toReturn;
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
export class UpdateBundleRequest {
|
|
872
|
+
constructor(kwargs) {
|
|
873
|
+
if (!kwargs) {
|
|
874
|
+
return;
|
|
875
|
+
}
|
|
876
|
+
Object.assign(this, kwargs);
|
|
877
|
+
}
|
|
878
|
+
static fromProto(proto) {
|
|
879
|
+
let m = new UpdateBundleRequest();
|
|
880
|
+
m = Object.assign(m, proto);
|
|
881
|
+
return m;
|
|
882
|
+
}
|
|
883
|
+
toApiJson() {
|
|
884
|
+
const toReturn = {};
|
|
885
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
886
|
+
toReturn['merchantId'] = this.merchantId;
|
|
887
|
+
}
|
|
888
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
889
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
890
|
+
}
|
|
891
|
+
if (typeof this.bundleId !== 'undefined') {
|
|
892
|
+
toReturn['bundleId'] = this.bundleId;
|
|
893
|
+
}
|
|
894
|
+
if (typeof this.hideBundleItems !== 'undefined') {
|
|
895
|
+
toReturn['hideBundleItems'] = this.hideBundleItems;
|
|
896
|
+
}
|
|
897
|
+
if (typeof this.bundleInstanceId !== 'undefined') {
|
|
898
|
+
toReturn['bundleInstanceId'] = this.bundleInstanceId;
|
|
899
|
+
}
|
|
900
|
+
return toReturn;
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
export class UpdateBundleResponse {
|
|
904
|
+
constructor(kwargs) {
|
|
905
|
+
if (!kwargs) {
|
|
906
|
+
return;
|
|
907
|
+
}
|
|
908
|
+
Object.assign(this, kwargs);
|
|
909
|
+
}
|
|
910
|
+
static fromProto(proto) {
|
|
911
|
+
let m = new UpdateBundleResponse();
|
|
912
|
+
m = Object.assign(m, proto);
|
|
913
|
+
if (proto.invoice) {
|
|
914
|
+
m.invoice = Invoice.fromProto(proto.invoice);
|
|
915
|
+
}
|
|
916
|
+
return m;
|
|
917
|
+
}
|
|
918
|
+
toApiJson() {
|
|
919
|
+
const toReturn = {};
|
|
920
|
+
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
921
|
+
toReturn['invoice'] = 'toApiJson' in this.invoice ? this.invoice.toApiJson() : this.invoice;
|
|
922
|
+
}
|
|
923
|
+
return toReturn;
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
export class UpdateDefaultTaxRatesRequest {
|
|
927
|
+
constructor(kwargs) {
|
|
928
|
+
if (!kwargs) {
|
|
929
|
+
return;
|
|
930
|
+
}
|
|
931
|
+
Object.assign(this, kwargs);
|
|
932
|
+
}
|
|
933
|
+
static fromProto(proto) {
|
|
934
|
+
let m = new UpdateDefaultTaxRatesRequest();
|
|
935
|
+
m = Object.assign(m, proto);
|
|
936
|
+
return m;
|
|
937
|
+
}
|
|
938
|
+
toApiJson() {
|
|
939
|
+
const toReturn = {};
|
|
940
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
941
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
942
|
+
}
|
|
943
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
944
|
+
toReturn['merchantId'] = this.merchantId;
|
|
945
|
+
}
|
|
946
|
+
if (typeof this.taxRateIds !== 'undefined') {
|
|
947
|
+
toReturn['taxRateIds'] = this.taxRateIds;
|
|
948
|
+
}
|
|
949
|
+
return toReturn;
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
export class UpdateDefaultTaxRatesResponse {
|
|
953
|
+
constructor(kwargs) {
|
|
954
|
+
if (!kwargs) {
|
|
955
|
+
return;
|
|
956
|
+
}
|
|
957
|
+
Object.assign(this, kwargs);
|
|
958
|
+
}
|
|
959
|
+
static fromProto(proto) {
|
|
960
|
+
let m = new UpdateDefaultTaxRatesResponse();
|
|
961
|
+
m = Object.assign(m, proto);
|
|
962
|
+
if (proto.invoice) {
|
|
963
|
+
m.invoice = Invoice.fromProto(proto.invoice);
|
|
964
|
+
}
|
|
965
|
+
return m;
|
|
966
|
+
}
|
|
967
|
+
toApiJson() {
|
|
968
|
+
const toReturn = {};
|
|
969
|
+
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
970
|
+
toReturn['invoice'] = 'toApiJson' in this.invoice ? this.invoice.toApiJson() : this.invoice;
|
|
971
|
+
}
|
|
972
|
+
return toReturn;
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
export class UpdateInvoiceRequest {
|
|
976
|
+
constructor(kwargs) {
|
|
977
|
+
if (!kwargs) {
|
|
978
|
+
return;
|
|
979
|
+
}
|
|
980
|
+
Object.assign(this, kwargs);
|
|
981
|
+
}
|
|
982
|
+
static fromProto(proto) {
|
|
983
|
+
let m = new UpdateInvoiceRequest();
|
|
984
|
+
m = Object.assign(m, proto);
|
|
985
|
+
if (proto.invoice) {
|
|
986
|
+
m.invoice = Invoice.fromProto(proto.invoice);
|
|
987
|
+
}
|
|
988
|
+
if (proto.fieldMask) {
|
|
989
|
+
m.fieldMask = FieldMask.fromProto(proto.fieldMask);
|
|
990
|
+
}
|
|
991
|
+
return m;
|
|
992
|
+
}
|
|
993
|
+
toApiJson() {
|
|
994
|
+
const toReturn = {};
|
|
995
|
+
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
996
|
+
toReturn['invoice'] = 'toApiJson' in this.invoice ? this.invoice.toApiJson() : this.invoice;
|
|
997
|
+
}
|
|
998
|
+
if (typeof this.fieldMask !== 'undefined' && this.fieldMask !== null) {
|
|
999
|
+
toReturn['fieldMask'] = 'toApiJson' in this.fieldMask ? this.fieldMask.toApiJson() : this.fieldMask;
|
|
1000
|
+
}
|
|
1001
|
+
return toReturn;
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
export class UpdateInvoiceResponse {
|
|
1005
|
+
constructor(kwargs) {
|
|
1006
|
+
if (!kwargs) {
|
|
1007
|
+
return;
|
|
1008
|
+
}
|
|
1009
|
+
Object.assign(this, kwargs);
|
|
1010
|
+
}
|
|
1011
|
+
static fromProto(proto) {
|
|
1012
|
+
let m = new UpdateInvoiceResponse();
|
|
1013
|
+
m = Object.assign(m, proto);
|
|
1014
|
+
if (proto.invoice) {
|
|
1015
|
+
m.invoice = Invoice.fromProto(proto.invoice);
|
|
1016
|
+
}
|
|
1017
|
+
return m;
|
|
1018
|
+
}
|
|
1019
|
+
toApiJson() {
|
|
1020
|
+
const toReturn = {};
|
|
1021
|
+
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
1022
|
+
toReturn['invoice'] = 'toApiJson' in this.invoice ? this.invoice.toApiJson() : this.invoice;
|
|
1023
|
+
}
|
|
1024
|
+
return toReturn;
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
export class UpdateLineItemRequest {
|
|
1028
|
+
constructor(kwargs) {
|
|
1029
|
+
if (!kwargs) {
|
|
1030
|
+
return;
|
|
1031
|
+
}
|
|
1032
|
+
Object.assign(this, kwargs);
|
|
1033
|
+
}
|
|
1034
|
+
static fromProto(proto) {
|
|
1035
|
+
let m = new UpdateLineItemRequest();
|
|
1036
|
+
m = Object.assign(m, proto);
|
|
1037
|
+
if (proto.amount) {
|
|
1038
|
+
m.amount = parseInt(proto.amount, 10);
|
|
1039
|
+
}
|
|
1040
|
+
return m;
|
|
1041
|
+
}
|
|
1042
|
+
toApiJson() {
|
|
1043
|
+
const toReturn = {};
|
|
1044
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
1045
|
+
toReturn['merchantId'] = this.merchantId;
|
|
1046
|
+
}
|
|
1047
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
1048
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
1049
|
+
}
|
|
1050
|
+
if (typeof this.id !== 'undefined') {
|
|
1051
|
+
toReturn['id'] = this.id;
|
|
1052
|
+
}
|
|
1053
|
+
if (typeof this.sku !== 'undefined') {
|
|
1054
|
+
toReturn['sku'] = this.sku;
|
|
1055
|
+
}
|
|
1056
|
+
if (typeof this.amount !== 'undefined') {
|
|
1057
|
+
toReturn['amount'] = this.amount;
|
|
1058
|
+
}
|
|
1059
|
+
if (typeof this.quantity !== 'undefined') {
|
|
1060
|
+
toReturn['quantity'] = this.quantity;
|
|
1061
|
+
}
|
|
1062
|
+
if (typeof this.description !== 'undefined') {
|
|
1063
|
+
toReturn['description'] = this.description;
|
|
1064
|
+
}
|
|
1065
|
+
if (typeof this.taxRates !== 'undefined') {
|
|
1066
|
+
toReturn['taxRates'] = this.taxRates;
|
|
1067
|
+
}
|
|
1068
|
+
return toReturn;
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
export class UpdateLineItemResponse {
|
|
1072
|
+
constructor(kwargs) {
|
|
1073
|
+
if (!kwargs) {
|
|
1074
|
+
return;
|
|
1075
|
+
}
|
|
1076
|
+
Object.assign(this, kwargs);
|
|
1077
|
+
}
|
|
1078
|
+
static fromProto(proto) {
|
|
1079
|
+
let m = new UpdateLineItemResponse();
|
|
1080
|
+
m = Object.assign(m, proto);
|
|
1081
|
+
if (proto.invoice) {
|
|
1082
|
+
m.invoice = Invoice.fromProto(proto.invoice);
|
|
1083
|
+
}
|
|
1084
|
+
return m;
|
|
1085
|
+
}
|
|
1086
|
+
toApiJson() {
|
|
1087
|
+
const toReturn = {};
|
|
1088
|
+
if (typeof this.invoice !== 'undefined' && this.invoice !== null) {
|
|
1089
|
+
toReturn['invoice'] = 'toApiJson' in this.invoice ? this.invoice.toApiJson() : this.invoice;
|
|
1090
|
+
}
|
|
1091
|
+
return toReturn;
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
|
+
export class VoidInvoiceRequest {
|
|
1095
|
+
constructor(kwargs) {
|
|
1096
|
+
if (!kwargs) {
|
|
1097
|
+
return;
|
|
1098
|
+
}
|
|
1099
|
+
Object.assign(this, kwargs);
|
|
1100
|
+
}
|
|
1101
|
+
static fromProto(proto) {
|
|
1102
|
+
let m = new VoidInvoiceRequest();
|
|
1103
|
+
m = Object.assign(m, proto);
|
|
1104
|
+
return m;
|
|
1105
|
+
}
|
|
1106
|
+
toApiJson() {
|
|
1107
|
+
const toReturn = {};
|
|
1108
|
+
if (typeof this.merchantId !== 'undefined') {
|
|
1109
|
+
toReturn['merchantId'] = this.merchantId;
|
|
1110
|
+
}
|
|
1111
|
+
if (typeof this.invoiceId !== 'undefined') {
|
|
1112
|
+
toReturn['invoiceId'] = this.invoiceId;
|
|
1113
|
+
}
|
|
1114
|
+
return toReturn;
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2JpbGxpbmdfc2RrL3NyYy9saWIvX2ludGVybmFsL29iamVjdHMvaW52b2ljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sS0FBSyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTlCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBSSxPQUFZLEVBQUUsS0FBYTtJQUM5RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFXekIsWUFBWSxNQUFvQztRQUM1QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVhELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFD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QUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsTUFBYyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDbkssSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsR0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQUM7UUFDakosSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsT0FBZSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDekssSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsT0FBZSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDekssSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBRSxJQUFJLENB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LENBQUM7SUFDYixDQUFDO0lBU0QsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNwRixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBcHBsaWVkQnVuZGxlIH0gZnJvbSAnLi9hcHBsaWVkLWJ1bmRsZSc7XG5pbXBvcnQgeyBBcHBsaWVkRGlzY291bnQgfSBmcm9tICcuL2FwcGxpZWQtZGlzY291bnQnO1xuaW1wb3J0IHsgQXBwbGllZFRheFJhdGUgfSBmcm9tICcuL2FwcGxpZWQtdGF4LXJhdGUnO1xuaW1wb3J0IHsgRmllbGRNYXNrIH0gZnJvbSAnLi9maWVsZC1tYXNrJztcbmltcG9ydCB7IFBhZ2VkUmVxdWVzdE9wdGlvbnMsIFBhZ2VkUmVzcG9uc2VNZXRhZGF0YSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IFRheFJhdGUgfSBmcm9tICcuL3RheC1yYXRlJztcbmltcG9ydCAqIGFzIGUgZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW51bVN0cmluZ1RvVmFsdWU8RT4oZW51bVJlZjogYW55LCB2YWx1ZTogc3RyaW5nKTogRSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBlbnVtUmVmW3ZhbHVlXTtcbn1cblxuZXhwb3J0IGNsYXNzIEFkZEJ1bmRsZVJlcXVlc3QgaW1wbGVtZW50cyBpLkFkZEJ1bmRsZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBidW5kbGVJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQWRkQnVuZGxlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEFkZEJ1bmRsZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkFkZEJ1bmRsZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1bmRsZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidW5kbGVJZCddID0gdGhpcy5idW5kbGVJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRCdW5kbGVSZXNwb25zZSBpbXBsZW1lbnRzIGkuQWRkQnVuZGxlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGludm9pY2U6IEludm9pY2U7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBBZGRCdW5kbGVSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEFkZEJ1bmRsZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmludm9pY2UpIHttLmludm9pY2UgPSBJbnZvaWNlLmZyb21Qcm90byhwcm90by5pbnZvaWNlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQWRkQnVuZGxlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmludm9pY2UgIT09IG51bGwpIHt0b1JldHVyblsnaW52b2ljZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5pbnZvaWNlID8gKHRoaXMuaW52b2ljZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5pbnZvaWNlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZExpbmVJdGVtUmVxdWVzdCBpbXBsZW1lbnRzIGkuQWRkTGluZUl0ZW1SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgc2t1OiBzdHJpbmc7XG4gICAgYW1vdW50OiBudW1iZXI7XG4gICAgcXVhbnRpdHk6IG51bWJlcjtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIHRheFJhdGVzOiBzdHJpbmdbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFkZExpbmVJdGVtUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEFkZExpbmVJdGVtUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hbW91bnQpIHttLmFtb3VudCA9IHBhcnNlSW50KHByb3RvLmFtb3VudCwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5BZGRMaW5lSXRlbVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrdSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc2t1J10gPSB0aGlzLnNrdTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbW91bnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Ftb3VudCddID0gdGhpcy5hbW91bnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucXVhbnRpdHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3F1YW50aXR5J10gPSB0aGlzLnF1YW50aXR5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZXNjcmlwdGlvbiddID0gdGhpcy5kZXNjcmlwdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50YXhSYXRlcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsndGF4UmF0ZXMnXSA9IHRoaXMudGF4UmF0ZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWRkTGluZUl0ZW1SZXNwb25zZSBpbXBsZW1lbnRzIGkuQWRkTGluZUl0ZW1SZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEFkZExpbmVJdGVtUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBBZGRMaW5lSXRlbVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmludm9pY2UpIHttLmludm9pY2UgPSBJbnZvaWNlLmZyb21Qcm90byhwcm90by5pbnZvaWNlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQWRkTGluZUl0ZW1SZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hhcmdlSW52b2ljZVJlcXVlc3QgaW1wbGVtZW50cyBpLkNoYXJnZUludm9pY2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgY3VzdG9tZXJJZDogc3RyaW5nO1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuICAgIHBheW1lbnRNZXRob2RJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ2hhcmdlSW52b2ljZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDaGFyZ2VJbnZvaWNlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ2hhcmdlSW52b2ljZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VzdG9tZXJJZCddID0gdGhpcy5jdXN0b21lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXltZW50TWV0aG9kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BheW1lbnRNZXRob2RJZCddID0gdGhpcy5wYXltZW50TWV0aG9kSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlSW52b2ljZVJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZUludm9pY2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgY3VzdG9tZXJJZDogc3RyaW5nO1xuICAgIGN1cnJlbmN5Q29kZTogc3RyaW5nO1xuICAgIG9yZGVySWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZUludm9pY2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlSW52b2ljZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZUludm9pY2VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1c3RvbWVySWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1c3RvbWVySWQnXSA9IHRoaXMuY3VzdG9tZXJJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJyZW5jeUNvZGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnJlbmN5Q29kZSddID0gdGhpcy5jdXJyZW5jeUNvZGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JkZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JkZXJJZCddID0gdGhpcy5vcmRlcklkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZUludm9pY2VSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlSW52b2ljZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZUludm9pY2VSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZUludm9pY2VSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlSW52b2ljZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludm9pY2VDdXN0b21lckFkZHJlc3MgaW1wbGVtZW50cyBpLkludm9pY2VDdXN0b21lckFkZHJlc3NJbnRlcmZhY2Uge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBjaXR5OiBzdHJpbmc7XG4gICAgc3RhdGU6IHN0cmluZztcbiAgICB6aXA6IHN0cmluZztcbiAgICBjb3VudHJ5OiBzdHJpbmc7XG4gICAgYWRkcmVzczI6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEludm9pY2VDdXN0b21lckFkZHJlc3Mge1xuICAgICAgICBsZXQgbSA9IG5ldyBJbnZvaWNlQ3VzdG9tZXJBZGRyZXNzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5JbnZvaWNlQ3VzdG9tZXJBZGRyZXNzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWRkcmVzcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWRkcmVzcyddID0gdGhpcy5hZGRyZXNzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNpdHkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NpdHknXSA9IHRoaXMuY2l0eTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdGUnXSA9IHRoaXMuc3RhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuemlwICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd6aXAnXSA9IHRoaXMuemlwO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvdW50cnkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvdW50cnknXSA9IHRoaXMuY291bnRyeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRyZXNzMiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWRkcmVzczInXSA9IHRoaXMuYWRkcmVzczI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNEYXRlRmlsdGVyIGltcGxlbWVudHMgaS5MaXN0SW52b2ljZXNSZXF1ZXN0RmlsdGVyc0RhdGVGaWx0ZXJJbnRlcmZhY2Uge1xuICAgIGRhdGVGaWVsZDogZS5MaXN0SW52b2ljZXNSZXF1ZXN0RmlsdGVyc0RhdGVGaWx0ZXJEYXRlRmllbGQ7XG4gICAgZGF0ZUx0ZTogRGF0ZTtcbiAgICBkYXRlR3RlOiBEYXRlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNEYXRlRmlsdGVyIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNEYXRlRmlsdGVyKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmRhdGVGaWVsZCkge20uZGF0ZUZpZWxkID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5MaXN0SW52b2ljZXNSZXF1ZXN0RmlsdGVyc0RhdGVGaWx0ZXJEYXRlRmllbGQ+KGUuTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNEYXRlRmlsdGVyRGF0ZUZpZWxkLCBwcm90by5kYXRlRmllbGQpO31cbiAgICAgICAgaWYgKHByb3RvLmRhdGVMdGUpIHttLmRhdGVMdGUgPSBuZXcgRGF0ZShwcm90by5kYXRlTHRlKTt9XG4gICAgICAgIGlmIChwcm90by5kYXRlR3RlKSB7bS5kYXRlR3RlID0gbmV3IERhdGUocHJvdG8uZGF0ZUd0ZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzRGF0ZUZpbHRlckludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGVGaWVsZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZGF0ZUZpZWxkJ10gPSB0aGlzLmRhdGVGaWVsZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRlTHRlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRhdGVMdGUgIT09IG51bGwpIHt0b1JldHVyblsnZGF0ZUx0ZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kYXRlTHRlID8gKHRoaXMuZGF0ZUx0ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kYXRlTHRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGVHdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZGF0ZUd0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWydkYXRlR3RlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRhdGVHdGUgPyAodGhpcy5kYXRlR3RlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRhdGVHdGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZXRlSW52b2ljZVJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZUludm9pY2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVJbnZvaWNlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZUludm9pY2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVsZXRlTGluZUl0ZW1SZXF1ZXN0IGltcGxlbWVudHMgaS5EZWxldGVMaW5lSXRlbVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlTGluZUl0ZW1SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRGVsZXRlTGluZUl0ZW1SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVMaW5lSXRlbVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVMaW5lSXRlbVJlc3BvbnNlIGltcGxlbWVudHMgaS5EZWxldGVMaW5lSXRlbVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZvaWNlOiBJbnZvaWNlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVsZXRlTGluZUl0ZW1SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IERlbGV0ZUxpbmVJdGVtUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5EZWxldGVMaW5lSXRlbVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pbnZvaWNlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ludm9pY2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaW52b2ljZSA/ICh0aGlzLmludm9pY2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaW52b2ljZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEdXBsaWNhdGVJbnZvaWNlUmVxdWVzdCBpbXBsZW1lbnRzIGkuRHVwbGljYXRlSW52b2ljZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IER1cGxpY2F0ZUludm9pY2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgRHVwbGljYXRlSW52b2ljZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkR1cGxpY2F0ZUludm9pY2VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEdXBsaWNhdGVJbnZvaWNlUmVzcG9uc2UgaW1wbGVtZW50cyBpLkR1cGxpY2F0ZUludm9pY2VSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEdXBsaWNhdGVJbnZvaWNlUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBEdXBsaWNhdGVJbnZvaWNlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkR1cGxpY2F0ZUludm9pY2VSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0SW52b2ljZXNSZXF1ZXN0RmlsdGVycyBpbXBsZW1lbnRzIGkuTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBjdXN0b21lcklkOiBzdHJpbmc7XG4gICAgc3RhdHVzZXM6IGUuSW52b2ljZVN0YXR1c1tdO1xuICAgIHBhc3REdWU6IGJvb2xlYW47XG4gICAgbnVtYmVyOiBzdHJpbmc7XG4gICAgZGF0ZUZpbHRlcjogTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNEYXRlRmlsdGVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnMge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0SW52b2ljZXNSZXF1ZXN0RmlsdGVycygpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5zdGF0dXNlcykge20uc3RhdHVzZXMgPSBwcm90by5zdGF0dXNlcy5tYXAoKHY6IHN0cmluZykgPT4gZW51bVN0cmluZ1RvVmFsdWU8ZS5JbnZvaWNlU3RhdHVzPihlLkludm9pY2VTdGF0dXMsIHYpKTt9XG4gICAgICAgIGlmIChwcm90by5kYXRlRmlsdGVyKSB7bS5kYXRlRmlsdGVyID0gTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNEYXRlRmlsdGVyLmZyb21Qcm90byhwcm90by5kYXRlRmlsdGVyKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdEludm9pY2VzUmVxdWVzdEZpbHRlcnNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VzdG9tZXJJZCddID0gdGhpcy5jdXN0b21lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1c2VzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0dXNlcyddID0gdGhpcy5zdGF0dXNlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXN0RHVlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwYXN0RHVlJ10gPSB0aGlzLnBhc3REdWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubnVtYmVyICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydudW1iZXInXSA9IHRoaXMubnVtYmVyO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGVGaWx0ZXIgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZGF0ZUZpbHRlciAhPT0gbnVsbCkge3RvUmV0dXJuWydkYXRlRmlsdGVyJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRhdGVGaWx0ZXIgPyAodGhpcy5kYXRlRmlsdGVyIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRhdGVGaWx0ZXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0SW52b2ljZVJlcXVlc3QgaW1wbGVtZW50cyBpLkdldEludm9pY2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRJbnZvaWNlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldEludm9pY2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0SW52b2ljZVJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRJbnZvaWNlUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGludm9pY2U6IEludm9pY2U7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRJbnZvaWNlUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRJbnZvaWNlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRJbnZvaWNlUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmludm9pY2UgIT09IG51bGwpIHt0b1JldHVyblsnaW52b2ljZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5pbnZvaWNlID8gKHRoaXMuaW52b2ljZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5pbnZvaWNlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludm9pY2UgaW1wbGVtZW50cyBpLkludm9pY2VJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIG51bWJlcjogc3RyaW5nO1xuICAgIGN1c3RvbWVySWQ6IHN0cmluZztcbiAgICBzdGF0dXM6IGUuSW52b2ljZVN0YXR1cztcbiAgICBzdWJ0b3RhbDogbnVtYmVyO1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgYW1vdW50UGFpZDogbnVtYmVyO1xuICAgIGlzc3VlZDogRGF0ZTtcbiAgICBkdWU6IERhdGU7XG4gICAgY3JlYXRlZDogRGF0ZTtcbiAgICB1cGRhdGVkOiBEYXRlO1xuICAgIGl0ZW1zOiBJbnZvaWNlSXRlbVtdO1xuICAgIGN1cnJlbmN5OiBlLkN1cnJlbmN5O1xuICAgIHBhaWQ6IERhdGU7XG4gICAgb3JkZXJJZDogc3RyaW5nO1xuICAgIGFtb3VudFRheDogbnVtYmVyO1xuICAgIGFwcGxpZWRUYXhlczogQXBwbGllZFRheFJhdGVbXTtcbiAgICBkZWZhdWx0VGF4UmF0ZXM6IFRheFJhdGVbXTtcbiAgICBhcHBsaWVkQnVuZGxlczogQXBwbGllZEJ1bmRsZVtdO1xuICAgIGFtb3VudERpc2NvdW50OiBudW1iZXI7XG4gICAgY3VzdG9tZXJOYW1lOiBzdHJpbmc7XG4gICAgb3JpZ2luOiBzdHJpbmc7XG4gICAgY29sbGVjdGlvbk1ldGhvZDogc3RyaW5nO1xuICAgIGNvbnRhY3RJZDogc3RyaW5nO1xuICAgIG1lbW86IHN0cmluZztcbiAgICB2b2lkZWQ6IERhdGU7XG4gICAgZGVmYXVsdFBheW1lbnRNZXRob2Q6IHN0cmluZztcbiAgICBjdXN0b21lckFkZHJlc3M6IEludm9pY2VDdXN0b21lckFkZHJlc3M7XG4gICAgZXh0ZXJuYWxDdXN0b21lcklkZW50aWZpZXI6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEludm9pY2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBJbnZvaWNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnN0YXR1cykge20uc3RhdHVzID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5JbnZvaWNlU3RhdHVzPihlLkludm9pY2VTdGF0dXMsIHByb3RvLnN0YXR1cyk7fVxuICAgICAgICBpZiAocHJvdG8uc3VidG90YWwpIHttLnN1YnRvdGFsID0gcGFyc2VJbnQocHJvdG8uc3VidG90YWwsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by50b3RhbCkge20udG90YWwgPSBwYXJzZUludChwcm90by50b3RhbCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLmFtb3VudFBhaWQpIHttLmFtb3VudFBhaWQgPSBwYXJzZUludChwcm90by5hbW91bnRQYWlkLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uaXNzdWVkKSB7bS5pc3N1ZWQgPSBuZXcgRGF0ZShwcm90by5pc3N1ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLmR1ZSkge20uZHVlID0gbmV3IERhdGUocHJvdG8uZHVlKTt9XG4gICAgICAgIGlmIChwcm90by5jcmVhdGVkKSB7bS5jcmVhdGVkID0gbmV3IERhdGUocHJvdG8uY3JlYXRlZCk7fVxuICAgICAgICBpZiAocHJvdG8udXBkYXRlZCkge20udXBkYXRlZCA9IG5ldyBEYXRlKHByb3RvLnVwZGF0ZWQpO31cbiAgICAgICAgaWYgKHByb3RvLml0ZW1zKSB7bS5pdGVtcyA9IHByb3RvLml0ZW1zLm1hcChJbnZvaWNlSXRlbS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLmN1cnJlbmN5KSB7bS5jdXJyZW5jeSA9IGVudW1TdHJpbmdUb1ZhbHVlPGUuQ3VycmVuY3k+KGUuQ3VycmVuY3ksIHByb3RvLmN1cnJlbmN5KTt9XG4gICAgICAgIGlmIChwcm90by5wYWlkKSB7bS5wYWlkID0gbmV3IERhdGUocHJvdG8ucGFpZCk7fVxuICAgICAgICBpZiAocHJvdG8uYW1vdW50VGF4KSB7bS5hbW91bnRUYXggPSBwYXJzZUludChwcm90by5hbW91bnRUYXgsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5hcHBsaWVkVGF4ZXMpIHttLmFwcGxpZWRUYXhlcyA9IHByb3RvLmFwcGxpZWRUYXhlcy5tYXAoQXBwbGllZFRheFJhdGUuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5kZWZhdWx0VGF4UmF0ZXMpIHttLmRlZmF1bHRUYXhSYXRlcyA9IHByb3RvLmRlZmF1bHRUYXhSYXRlcy5tYXAoVGF4UmF0ZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLmFwcGxpZWRCdW5kbGVzKSB7bS5hcHBsaWVkQnVuZGxlcyA9IHByb3RvLmFwcGxpZWRCdW5kbGVzLm1hcChBcHBsaWVkQnVuZGxlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uYW1vdW50RGlzY291bnQpIHttLmFtb3VudERpc2NvdW50ID0gcGFyc2VJbnQocHJvdG8uYW1vdW50RGlzY291bnQsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by52b2lkZWQpIHttLnZvaWRlZCA9IG5ldyBEYXRlKHByb3RvLnZvaWRlZCk7fVxuICAgICAgICBpZiAocHJvdG8uY3VzdG9tZXJBZGRyZXNzKSB7bS5jdXN0b21lckFkZHJlc3MgPSBJbnZvaWNlQ3VzdG9tZXJBZGRyZXNzLmZyb21Qcm90byhwcm90by5jdXN0b21lckFkZHJlc3MpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5JbnZvaWNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpZCddID0gdGhpcy5pZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5udW1iZXIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ251bWJlciddID0gdGhpcy5udW1iZXI7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VzdG9tZXJJZCddID0gdGhpcy5jdXN0b21lcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3RhdHVzJ10gPSB0aGlzLnN0YXR1czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWJ0b3RhbCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3VidG90YWwnXSA9IHRoaXMuc3VidG90YWw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudG90YWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RvdGFsJ10gPSB0aGlzLnRvdGFsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFtb3VudFBhaWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Ftb3VudFBhaWQnXSA9IHRoaXMuYW1vdW50UGFpZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc3N1ZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaXNzdWVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ2lzc3VlZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5pc3N1ZWQgPyAodGhpcy5pc3N1ZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaXNzdWVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmR1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kdWUgIT09IG51bGwpIHt0b1JldHVyblsnZHVlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmR1ZSA/ICh0aGlzLmR1ZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kdWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3JlYXRlZCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jcmVhdGVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NyZWF0ZWQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuY3JlYXRlZCA/ICh0aGlzLmNyZWF0ZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY3JlYXRlZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy51cGRhdGVkICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnVwZGF0ZWQgIT09IG51bGwpIHt0b1JldHVyblsndXBkYXRlZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy51cGRhdGVkID8gKHRoaXMudXBkYXRlZCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy51cGRhdGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLml0ZW1zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLml0ZW1zICE9PSBudWxsKSB7dG9SZXR1cm5bJ2l0ZW1zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLml0ZW1zID8gKHRoaXMuaXRlbXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaXRlbXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVuY3kgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2N1cnJlbmN5J10gPSB0aGlzLmN1cnJlbmN5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhaWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFpZCAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWlkJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhaWQgPyAodGhpcy5wYWlkIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3JkZXJJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JkZXJJZCddID0gdGhpcy5vcmRlcklkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFtb3VudFRheCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYW1vdW50VGF4J10gPSB0aGlzLmFtb3VudFRheDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBsaWVkVGF4ZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXBwbGllZFRheGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FwcGxpZWRUYXhlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5hcHBsaWVkVGF4ZXMgPyAodGhpcy5hcHBsaWVkVGF4ZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYXBwbGllZFRheGVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlZmF1bHRUYXhSYXRlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kZWZhdWx0VGF4UmF0ZXMgIT09IG51bGwpIHt0b1JldHVyblsnZGVmYXVsdFRheFJhdGVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRlZmF1bHRUYXhSYXRlcyA/ICh0aGlzLmRlZmF1bHRUYXhSYXRlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kZWZhdWx0VGF4UmF0ZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXBwbGllZEJ1bmRsZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXBwbGllZEJ1bmRsZXMgIT09IG51bGwpIHt0b1JldHVyblsnYXBwbGllZEJ1bmRsZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYXBwbGllZEJ1bmRsZXMgPyAodGhpcy5hcHBsaWVkQnVuZGxlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5hcHBsaWVkQnVuZGxlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbW91bnREaXNjb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYW1vdW50RGlzY291bnQnXSA9IHRoaXMuYW1vdW50RGlzY291bnQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VzdG9tZXJOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXN0b21lck5hbWUnXSA9IHRoaXMuY3VzdG9tZXJOYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9yaWdpbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3JpZ2luJ10gPSB0aGlzLm9yaWdpbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb2xsZWN0aW9uTWV0aG9kICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb2xsZWN0aW9uTWV0aG9kJ10gPSB0aGlzLmNvbGxlY3Rpb25NZXRob2Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udGFjdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb250YWN0SWQnXSA9IHRoaXMuY29udGFjdElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lbW8gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lbW8nXSA9IHRoaXMubWVtbzt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy52b2lkZWQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMudm9pZGVkICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZvaWRlZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy52b2lkZWQgPyAodGhpcy52b2lkZWQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudm9pZGVkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlZmF1bHRQYXltZW50TWV0aG9kICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkZWZhdWx0UGF5bWVudE1ldGhvZCddID0gdGhpcy5kZWZhdWx0UGF5bWVudE1ldGhvZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXN0b21lckFkZHJlc3MgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY3VzdG9tZXJBZGRyZXNzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2N1c3RvbWVyQWRkcmVzcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jdXN0b21lckFkZHJlc3MgPyAodGhpcy5jdXN0b21lckFkZHJlc3MgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY3VzdG9tZXJBZGRyZXNzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmV4dGVybmFsQ3VzdG9tZXJJZGVudGlmaWVyICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydleHRlcm5hbEN1c3RvbWVySWRlbnRpZmllciddID0gdGhpcy5leHRlcm5hbEN1c3RvbWVySWRlbnRpZmllcjt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZvaWNlSXRlbSBpbXBsZW1lbnRzIGkuSW52b2ljZUl0ZW1JbnRlcmZhY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc2t1OiBzdHJpbmc7XG4gICAgYW1vdW50OiBudW1iZXI7XG4gICAgcXVhbnRpdHk6IG51bWJlcjtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgYXBwbGllZFRheGVzOiBBcHBsaWVkVGF4UmF0ZVtdO1xuICAgIHRheFJhdGVzOiBUYXhSYXRlW107XG4gICAgYnVuZGxlSWQ6IHN0cmluZztcbiAgICBkaXNjb3VudHM6IEFwcGxpZWREaXNjb3VudFtdO1xuICAgIHN1YnRvdGFsOiBudW1iZXI7XG4gICAgYnVuZGxlSW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogSW52b2ljZUl0ZW0ge1xuICAgICAgICBsZXQgbSA9IG5ldyBJbnZvaWNlSXRlbSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hbW91bnQpIHttLmFtb3VudCA9IHBhcnNlSW50KHByb3RvLmFtb3VudCwgMTApO31cbiAgICAgICAgaWYgKHByb3RvLnRvdGFsKSB7bS50b3RhbCA9IHBhcnNlSW50KHByb3RvLnRvdGFsLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uYXBwbGllZFRheGVzKSB7bS5hcHBsaWVkVGF4ZXMgPSBwcm90by5hcHBsaWVkVGF4ZXMubWFwKEFwcGxpZWRUYXhSYXRlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8udGF4UmF0ZXMpIHttLnRheFJhdGVzID0gcHJvdG8udGF4UmF0ZXMubWFwKFRheFJhdGUuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by5kaXNjb3VudHMpIHttLmRpc2NvdW50cyA9IHByb3RvLmRpc2NvdW50cy5tYXAoQXBwbGllZERpc2NvdW50LmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uc3VidG90YWwpIHttLnN1YnRvdGFsID0gcGFyc2VJbnQocHJvdG8uc3VidG90YWwsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuSW52b2ljZUl0ZW1JbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFtb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYW1vdW50J10gPSB0aGlzLmFtb3VudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5xdWFudGl0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncXVhbnRpdHknXSA9IHRoaXMucXVhbnRpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvdGFsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0b3RhbCddID0gdGhpcy50b3RhbDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hcHBsaWVkVGF4ZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXBwbGllZFRheGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2FwcGxpZWRUYXhlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5hcHBsaWVkVGF4ZXMgPyAodGhpcy5hcHBsaWVkVGF4ZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYXBwbGllZFRheGVzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRheFJhdGVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnRheFJhdGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3RheFJhdGVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRheFJhdGVzID8gKHRoaXMudGF4UmF0ZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGF4UmF0ZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVuZGxlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1bmRsZUlkJ10gPSB0aGlzLmJ1bmRsZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRpc2NvdW50cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kaXNjb3VudHMgIT09IG51bGwpIHt0b1JldHVyblsnZGlzY291bnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRpc2NvdW50cyA/ICh0aGlzLmRpc2NvdW50cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kaXNjb3VudHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VidG90YWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N1YnRvdGFsJ10gPSB0aGlzLnN1YnRvdGFsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1bmRsZUluc3RhbmNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2J1bmRsZUluc3RhbmNlSWQnXSA9IHRoaXMuYnVuZGxlSW5zdGFuY2VJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0SW52b2ljZXNSZXF1ZXN0IGltcGxlbWVudHMgaS5MaXN0SW52b2ljZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBmaWx0ZXJzOiBMaXN0SW52b2ljZXNSZXF1ZXN0RmlsdGVycztcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdEludm9pY2VzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RJbnZvaWNlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZmlsdGVycykge20uZmlsdGVycyA9IExpc3RJbnZvaWNlc1JlcXVlc3RGaWx0ZXJzLmZyb21Qcm90byhwcm90by5maWx0ZXJzKTt9XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdPcHRpb25zKSB7bS5wYWdpbmdPcHRpb25zID0gUGFnZWRSZXF1ZXN0T3B0aW9ucy5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nT3B0aW9ucyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RJbnZvaWNlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5maWx0ZXJzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpbHRlcnMgIT09IG51bGwpIHt0b1JldHVyblsnZmlsdGVycyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5maWx0ZXJzID8gKHRoaXMuZmlsdGVycyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5maWx0ZXJzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ09wdGlvbnMgPyAodGhpcy5wYWdpbmdPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ09wdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdEludm9pY2VzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RJbnZvaWNlc1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZvaWNlczogSW52b2ljZVtdO1xuICAgIHBhZ2luZ01ldGFkYXRhOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0SW52b2ljZXNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RJbnZvaWNlc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmludm9pY2VzKSB7bS5pbnZvaWNlcyA9IHByb3RvLmludm9pY2VzLm1hcChJbnZvaWNlLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nTWV0YWRhdGEpIHttLnBhZ2luZ01ldGFkYXRhID0gUGFnZWRSZXNwb25zZU1ldGFkYXRhLmZyb21Qcm90byhwcm90by5wYWdpbmdNZXRhZGF0YSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RJbnZvaWNlc1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZXMgIT09IG51bGwpIHt0b1JldHVyblsnaW52b2ljZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaW52b2ljZXMgPyAodGhpcy5pbnZvaWNlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5pbnZvaWNlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdNZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdNZXRhZGF0YSA/ICh0aGlzLnBhZ2luZ01ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ01ldGFkYXRhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBheUludm9pY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5QYXlJbnZvaWNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogUGF5SW52b2ljZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBQYXlJbnZvaWNlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUGF5SW52b2ljZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUJ1bmRsZVJlcXVlc3QgaW1wbGVtZW50cyBpLlJlbW92ZUJ1bmRsZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBidW5kbGVJZDogc3RyaW5nO1xuICAgIGJ1bmRsZUluc3RhbmNlSWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlbW92ZUJ1bmRsZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBSZW1vdmVCdW5kbGVSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZW1vdmVCdW5kbGVSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5idW5kbGVJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVuZGxlSWQnXSA9IHRoaXMuYnVuZGxlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVuZGxlSW5zdGFuY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVuZGxlSW5zdGFuY2VJZCddID0gdGhpcy5idW5kbGVJbnN0YW5jZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbW92ZUJ1bmRsZVJlc3BvbnNlIGltcGxlbWVudHMgaS5SZW1vdmVCdW5kbGVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFJlbW92ZUJ1bmRsZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUmVtb3ZlQnVuZGxlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5SZW1vdmVCdW5kbGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VuZEludm9pY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5TZW5kSW52b2ljZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcbiAgICBlbWFpbEFkZHJlc3Nlczogc3RyaW5nW107XG4gICAgbGFuZ3VhZ2VDb2RlOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZW5kSW52b2ljZVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZW5kSW52b2ljZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNlbmRJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1haWxBZGRyZXNzZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2VtYWlsQWRkcmVzc2VzJ10gPSB0aGlzLmVtYWlsQWRkcmVzc2VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxhbmd1YWdlQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbGFuZ3VhZ2VDb2RlJ10gPSB0aGlzLmxhbmd1YWdlQ29kZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVCdW5kbGVSZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVCdW5kbGVSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgYnVuZGxlSWQ6IHN0cmluZztcbiAgICBoaWRlQnVuZGxlSXRlbXM6IGJvb2xlYW47XG4gICAgYnVuZGxlSW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlQnVuZGxlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUJ1bmRsZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUJ1bmRsZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJ1bmRsZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydidW5kbGVJZCddID0gdGhpcy5idW5kbGVJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oaWRlQnVuZGxlSXRlbXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hpZGVCdW5kbGVJdGVtcyddID0gdGhpcy5oaWRlQnVuZGxlSXRlbXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnVuZGxlSW5zdGFuY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnVuZGxlSW5zdGFuY2VJZCddID0gdGhpcy5idW5kbGVJbnN0YW5jZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUJ1bmRsZVJlc3BvbnNlIGltcGxlbWVudHMgaS5VcGRhdGVCdW5kbGVSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUJ1bmRsZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlQnVuZGxlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVCdW5kbGVSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIHRheFJhdGVJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZURlZmF1bHRUYXhSYXRlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZURlZmF1bHRUYXhSYXRlc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2ludm9pY2VJZCddID0gdGhpcy5pbnZvaWNlSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRheFJhdGVJZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3RheFJhdGVJZHMnXSA9IHRoaXMudGF4UmF0ZUlkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVEZWZhdWx0VGF4UmF0ZXNSZXNwb25zZSBpbXBsZW1lbnRzIGkuVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGludm9pY2U6IEludm9pY2U7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVEZWZhdWx0VGF4UmF0ZXNSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZURlZmF1bHRUYXhSYXRlc1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmludm9pY2UpIHttLmludm9pY2UgPSBJbnZvaWNlLmZyb21Qcm90byhwcm90by5pbnZvaWNlKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlRGVmYXVsdFRheFJhdGVzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnZvaWNlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmludm9pY2UgIT09IG51bGwpIHt0b1JldHVyblsnaW52b2ljZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5pbnZvaWNlID8gKHRoaXMuaW52b2ljZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5pbnZvaWNlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUludm9pY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVJbnZvaWNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcbiAgICBmaWVsZE1hc2s6IEZpZWxkTWFzaztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUludm9pY2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlSW52b2ljZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgaWYgKHByb3RvLmZpZWxkTWFzaykge20uZmllbGRNYXNrID0gRmllbGRNYXNrLmZyb21Qcm90byhwcm90by5maWVsZE1hc2spO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVJbnZvaWNlUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZmllbGRNYXNrICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmZpZWxkTWFzayAhPT0gbnVsbCkge3RvUmV0dXJuWydmaWVsZE1hc2snXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZmllbGRNYXNrID8gKHRoaXMuZmllbGRNYXNrIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmZpZWxkTWFzazt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVJbnZvaWNlUmVzcG9uc2UgaW1wbGVtZW50cyBpLlVwZGF0ZUludm9pY2VSZXNwb25zZUludGVyZmFjZSB7XG4gICAgaW52b2ljZTogSW52b2ljZTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZUludm9pY2VSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUludm9pY2VSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5pbnZvaWNlKSB7bS5pbnZvaWNlID0gSW52b2ljZS5mcm9tUHJvdG8ocHJvdG8uaW52b2ljZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZUludm9pY2VSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2UgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuaW52b2ljZSAhPT0gbnVsbCkge3RvUmV0dXJuWydpbnZvaWNlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmludm9pY2UgPyAodGhpcy5pbnZvaWNlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmludm9pY2U7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlTGluZUl0ZW1SZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVMaW5lSXRlbVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbnZvaWNlSWQ6IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHNrdTogc3RyaW5nO1xuICAgIGFtb3VudDogbnVtYmVyO1xuICAgIHF1YW50aXR5OiBudW1iZXI7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICB0YXhSYXRlczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcGRhdGVMaW5lSXRlbVJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVMaW5lSXRlbVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uYW1vdW50KSB7bS5hbW91bnQgPSBwYXJzZUludChwcm90by5hbW91bnQsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBkYXRlTGluZUl0ZW1SZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaWQnXSA9IHRoaXMuaWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2t1ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydza3UnXSA9IHRoaXMuc2t1O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFtb3VudCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYW1vdW50J10gPSB0aGlzLmFtb3VudDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5xdWFudGl0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncXVhbnRpdHknXSA9IHRoaXMucXVhbnRpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Rlc2NyaXB0aW9uJ10gPSB0aGlzLmRlc2NyaXB0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRheFJhdGVzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd0YXhSYXRlcyddID0gdGhpcy50YXhSYXRlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVMaW5lSXRlbVJlc3BvbnNlIGltcGxlbWVudHMgaS5VcGRhdGVMaW5lSXRlbVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBpbnZvaWNlOiBJbnZvaWNlO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlTGluZUl0ZW1SZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZUxpbmVJdGVtUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZSkge20uaW52b2ljZSA9IEludm9pY2UuZnJvbVByb3RvKHByb3RvLmludm9pY2UpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVMaW5lSXRlbVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pbnZvaWNlICE9PSBudWxsKSB7dG9SZXR1cm5bJ2ludm9pY2UnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaW52b2ljZSA/ICh0aGlzLmludm9pY2UgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaW52b2ljZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWb2lkSW52b2ljZVJlcXVlc3QgaW1wbGVtZW50cyBpLlZvaWRJbnZvaWNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGludm9pY2VJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVm9pZEludm9pY2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVm9pZEludm9pY2VSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5Wb2lkSW52b2ljZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZUlkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbnZvaWNlSWQnXSA9IHRoaXMuaW52b2ljZUlkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuIl19
|