@vendasta/billing 8.1.0 → 9.1.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.
Files changed (572) hide show
  1. package/esm2020/lib/_generated/host.service.mjs +25 -0
  2. package/esm2020/lib/_generated/index.mjs +2 -0
  3. package/esm2020/lib/_internal/bank-reconciliation.api.service.mjs +46 -0
  4. package/esm2020/lib/_internal/billing.api.service.mjs +216 -0
  5. package/esm2020/lib/_internal/bundle.api.service.mjs +50 -0
  6. package/esm2020/lib/_internal/contract-document.api.service.mjs +45 -0
  7. package/esm2020/lib/_internal/contract.api.service.mjs +55 -0
  8. package/esm2020/lib/_internal/credit.api.service.mjs +45 -0
  9. package/esm2020/lib/_internal/discount.api.service.mjs +53 -0
  10. package/esm2020/lib/_internal/enums/applied-discount.enum.mjs +14 -0
  11. package/esm2020/lib/_internal/enums/card.enum.mjs +17 -0
  12. package/esm2020/lib/_internal/enums/contract.enum.mjs +14 -0
  13. package/esm2020/lib/_internal/enums/currency.enum.mjs +35 -0
  14. package/esm2020/lib/_internal/enums/frequency.enum.mjs +14 -0
  15. package/esm2020/lib/_internal/enums/index.mjs +31 -0
  16. package/esm2020/lib/_internal/enums/invoice.enum.mjs +18 -0
  17. package/esm2020/lib/_internal/enums/merchant-report.enum.mjs +13 -0
  18. package/{esm2015/lib/_internal/enums/merchant.enum.js → esm2020/lib/_internal/enums/merchant.enum.mjs} +1 -1
  19. package/esm2020/lib/_internal/enums/month.enum.mjs +23 -0
  20. package/esm2020/lib/_internal/enums/payment-card.enum.mjs +24 -0
  21. package/esm2020/lib/_internal/enums/payment-processor.enum.mjs +13 -0
  22. package/{esm2015/lib/_internal/enums/payment.enum.js → esm2020/lib/_internal/enums/payment.enum.mjs} +1 -1
  23. package/esm2020/lib/_internal/enums/payout.enum.mjs +22 -0
  24. package/esm2020/lib/_internal/enums/pricing-plan.enum.mjs +22 -0
  25. package/{esm2015/lib/_internal/enums/product-summary.enum.js → esm2020/lib/_internal/enums/product-summary.enum.mjs} +1 -1
  26. package/esm2020/lib/_internal/enums/product.enum.mjs +17 -0
  27. package/esm2020/lib/_internal/enums/purchase.enum.mjs +27 -0
  28. package/esm2020/lib/_internal/enums/recurring-invoice.enum.mjs +29 -0
  29. package/esm2020/lib/_internal/enums/refund.enum.mjs +25 -0
  30. package/esm2020/lib/_internal/enums/sales-credit-note.enum.mjs +14 -0
  31. package/{esm2015/lib/_internal/enums/sales-invoice.enum.js → esm2020/lib/_internal/enums/sales-invoice.enum.mjs} +1 -1
  32. package/esm2020/lib/_internal/enums/sort-direction.enum.mjs +12 -0
  33. package/{esm2015/lib/_internal/enums/subscribe-validation.enum.js → esm2020/lib/_internal/enums/subscribe-validation.enum.mjs} +1 -1
  34. package/esm2020/lib/_internal/enums/subscription.enum.mjs +12 -0
  35. package/esm2020/lib/_internal/index.mjs +33 -0
  36. package/esm2020/lib/_internal/interfaces/api.interface.mjs +2 -0
  37. package/esm2020/lib/_internal/interfaces/applied-bundle.interface.mjs +8 -0
  38. package/esm2020/lib/_internal/interfaces/applied-discount.interface.mjs +8 -0
  39. package/esm2020/lib/_internal/interfaces/applied-tax-rate.interface.mjs +8 -0
  40. package/esm2020/lib/_internal/interfaces/balance.interface.mjs +8 -0
  41. package/esm2020/lib/_internal/interfaces/billable-item.interface.mjs +2 -0
  42. package/esm2020/lib/_internal/interfaces/bundle.interface.mjs +2 -0
  43. package/esm2020/lib/_internal/interfaces/card.interface.mjs +8 -0
  44. package/esm2020/lib/_internal/interfaces/commitment.interface.mjs +8 -0
  45. package/esm2020/lib/_internal/interfaces/common.interface.mjs +8 -0
  46. package/esm2020/lib/_internal/interfaces/contract-document.interface.mjs +2 -0
  47. package/esm2020/lib/_internal/interfaces/contract.interface.mjs +2 -0
  48. package/esm2020/lib/_internal/interfaces/credit.interface.mjs +8 -0
  49. package/esm2020/lib/_internal/interfaces/currency.interface.mjs +8 -0
  50. package/esm2020/lib/_internal/interfaces/customer-summary.interface.mjs +8 -0
  51. package/esm2020/lib/_internal/interfaces/date-range.interface.mjs +8 -0
  52. package/esm2020/lib/_internal/interfaces/discount.interface.mjs +2 -0
  53. package/esm2020/lib/_internal/interfaces/external-account.interface.mjs +8 -0
  54. package/esm2020/lib/_internal/interfaces/field-mask.interface.mjs +8 -0
  55. package/esm2020/lib/_internal/interfaces/frequency.interface.mjs +8 -0
  56. package/esm2020/lib/_internal/interfaces/index.mjs +2 -0
  57. package/esm2020/lib/_internal/interfaces/invoice-template.interface.mjs +2 -0
  58. package/esm2020/lib/_internal/interfaces/invoice.interface.mjs +2 -0
  59. package/esm2020/lib/_internal/interfaces/merchant-report.interface.mjs +2 -0
  60. package/esm2020/lib/_internal/interfaces/merchant.interface.mjs +2 -0
  61. package/esm2020/lib/_internal/interfaces/metered-component.interface.mjs +8 -0
  62. package/esm2020/lib/_internal/interfaces/month.interface.mjs +8 -0
  63. package/esm2020/lib/_internal/interfaces/payment-card.interface.mjs +8 -0
  64. package/esm2020/lib/_internal/interfaces/payment-processor.interface.mjs +8 -0
  65. package/esm2020/lib/_internal/interfaces/payment.interface.mjs +2 -0
  66. package/esm2020/lib/_internal/interfaces/payout.interface.mjs +2 -0
  67. package/esm2020/lib/_internal/interfaces/pricing-plan-product.interface.mjs +2 -0
  68. package/esm2020/lib/_internal/interfaces/pricing-plan.interface.mjs +2 -0
  69. package/esm2020/lib/_internal/interfaces/product-pricing.interface.mjs +2 -0
  70. package/esm2020/lib/_internal/interfaces/product-summary.interface.mjs +2 -0
  71. package/esm2020/lib/_internal/interfaces/product.interface.mjs +2 -0
  72. package/esm2020/lib/_internal/interfaces/purchase.interface.mjs +2 -0
  73. package/esm2020/lib/_internal/interfaces/recurring-invoice.interface.mjs +2 -0
  74. package/esm2020/lib/_internal/interfaces/refund.interface.mjs +8 -0
  75. package/esm2020/lib/_internal/interfaces/retail-customer-configuration.interface.mjs +8 -0
  76. package/esm2020/lib/_internal/interfaces/sales-credit-note.interface.mjs +2 -0
  77. package/esm2020/lib/_internal/interfaces/sales-invoice.interface.mjs +2 -0
  78. package/esm2020/lib/_internal/interfaces/sort-direction.interface.mjs +8 -0
  79. package/esm2020/lib/_internal/interfaces/subscribe-validation.interface.mjs +8 -0
  80. package/esm2020/lib/_internal/interfaces/subscription.interface.mjs +2 -0
  81. package/esm2020/lib/_internal/interfaces/tax-rate.interface.mjs +2 -0
  82. package/esm2020/lib/_internal/invoice-template.api.service.mjs +85 -0
  83. package/esm2020/lib/_internal/invoice.api.service.mjs +116 -0
  84. package/esm2020/lib/_internal/merchant.api.service.mjs +159 -0
  85. package/esm2020/lib/_internal/objects/api.mjs +841 -0
  86. package/esm2020/lib/_internal/objects/applied-bundle.mjs +77 -0
  87. package/esm2020/lib/_internal/objects/applied-discount.mjs +46 -0
  88. package/esm2020/lib/_internal/objects/applied-tax-rate.mjs +39 -0
  89. package/esm2020/lib/_internal/objects/balance.mjs +45 -0
  90. package/esm2020/lib/_internal/objects/billable-item.mjs +562 -0
  91. package/esm2020/lib/_internal/objects/bundle.mjs +390 -0
  92. package/esm2020/lib/_internal/objects/card.mjs +7 -0
  93. package/esm2020/lib/_internal/objects/commitment.mjs +36 -0
  94. package/esm2020/lib/_internal/objects/common.mjs +56 -0
  95. package/esm2020/lib/_internal/objects/contract-document.mjs +141 -0
  96. package/esm2020/lib/_internal/objects/contract.mjs +474 -0
  97. package/esm2020/lib/_internal/objects/credit.mjs +114 -0
  98. package/esm2020/lib/_internal/objects/currency.mjs +7 -0
  99. package/esm2020/lib/_internal/objects/customer-summary.mjs +104 -0
  100. package/esm2020/lib/_internal/objects/date-range.mjs +36 -0
  101. package/esm2020/lib/_internal/objects/discount.mjs +299 -0
  102. package/esm2020/lib/_internal/objects/external-account.mjs +160 -0
  103. package/esm2020/lib/_internal/objects/field-mask.mjs +27 -0
  104. package/esm2020/lib/_internal/objects/frequency.mjs +7 -0
  105. package/esm2020/lib/_internal/objects/index.mjs +46 -0
  106. package/esm2020/lib/_internal/objects/invoice-template.mjs +707 -0
  107. package/esm2020/lib/_internal/objects/invoice.mjs +1117 -0
  108. package/esm2020/lib/_internal/objects/merchant-report.mjs +108 -0
  109. package/esm2020/lib/_internal/objects/merchant.mjs +991 -0
  110. package/esm2020/lib/_internal/objects/metered-component.mjs +97 -0
  111. package/esm2020/lib/_internal/objects/month.mjs +7 -0
  112. package/esm2020/lib/_internal/objects/payment-card.mjs +211 -0
  113. package/esm2020/lib/_internal/objects/payment-processor.mjs +7 -0
  114. package/esm2020/lib/_internal/objects/payment.mjs +1219 -0
  115. package/esm2020/lib/_internal/objects/payout.mjs +258 -0
  116. package/esm2020/lib/_internal/objects/pricing-plan-product.mjs +565 -0
  117. package/esm2020/lib/_internal/objects/pricing-plan.mjs +290 -0
  118. package/esm2020/lib/_internal/objects/product-pricing.mjs +107 -0
  119. package/esm2020/lib/_internal/objects/product-summary.mjs +538 -0
  120. package/esm2020/lib/_internal/objects/product.mjs +302 -0
  121. package/esm2020/lib/_internal/objects/purchase.mjs +524 -0
  122. package/esm2020/lib/_internal/objects/recurring-invoice.mjs +327 -0
  123. package/esm2020/lib/_internal/objects/refund.mjs +181 -0
  124. package/esm2020/lib/_internal/objects/retail-customer-configuration.mjs +159 -0
  125. package/esm2020/lib/_internal/objects/sales-credit-note.mjs +211 -0
  126. package/esm2020/lib/_internal/objects/sales-invoice.mjs +300 -0
  127. package/esm2020/lib/_internal/objects/sort-direction.mjs +7 -0
  128. package/esm2020/lib/_internal/objects/subscribe-validation.mjs +31 -0
  129. package/esm2020/lib/_internal/objects/subscription.mjs +555 -0
  130. package/esm2020/lib/_internal/objects/tax-rate.mjs +342 -0
  131. package/esm2020/lib/_internal/payment-method.api.service.mjs +49 -0
  132. package/esm2020/lib/_internal/payment.api.service.mjs +102 -0
  133. package/esm2020/lib/_internal/pricing.api.service.mjs +76 -0
  134. package/esm2020/lib/_internal/product-summary.api.service.mjs +46 -0
  135. package/esm2020/lib/_internal/product.api.service.mjs +47 -0
  136. package/esm2020/lib/_internal/purchase.api.service.mjs +59 -0
  137. package/esm2020/lib/_internal/recurring-invoice.api.service.mjs +60 -0
  138. package/esm2020/lib/_internal/refund.api.service.mjs +45 -0
  139. package/esm2020/lib/_internal/retail-customer-configuration.api.service.mjs +45 -0
  140. package/esm2020/lib/_internal/sales-credit-note.api.service.mjs +45 -0
  141. package/esm2020/lib/_internal/sales-invoice.api.service.mjs +50 -0
  142. package/esm2020/lib/_internal/tax.api.service.mjs +63 -0
  143. package/esm2020/lib/_internal/vendor.api.service.mjs +46 -0
  144. package/esm2020/lib/index.mjs +3 -0
  145. package/esm2020/public_api.mjs +2 -0
  146. package/esm2020/vendasta-billing.mjs +5 -0
  147. package/fesm2015/{vendasta-billing.js → vendasta-billing.mjs} +1091 -4973
  148. package/fesm2015/vendasta-billing.mjs.map +1 -0
  149. package/fesm2020/vendasta-billing.mjs +14371 -0
  150. package/fesm2020/vendasta-billing.mjs.map +1 -0
  151. package/lib/_generated/host.service.d.ts +5 -9
  152. package/lib/_internal/bank-reconciliation.api.service.d.ts +4 -0
  153. package/lib/_internal/billing.api.service.d.ts +4 -0
  154. package/lib/_internal/bundle.api.service.d.ts +4 -0
  155. package/lib/_internal/contract-document.api.service.d.ts +4 -0
  156. package/lib/_internal/contract.api.service.d.ts +4 -0
  157. package/lib/_internal/credit.api.service.d.ts +4 -0
  158. package/lib/_internal/discount.api.service.d.ts +4 -0
  159. package/lib/_internal/enums/index.d.ts +2 -0
  160. package/lib/_internal/enums/payment-processor.enum.d.ts +5 -0
  161. package/lib/_internal/enums/recurring-invoice.enum.d.ts +19 -0
  162. package/lib/_internal/index.d.ts +1 -0
  163. package/lib/_internal/interfaces/index.d.ts +2 -0
  164. package/lib/_internal/interfaces/payment-processor.interface.d.ts +1 -0
  165. package/lib/_internal/interfaces/recurring-invoice.interface.d.ts +55 -0
  166. package/lib/_internal/invoice-template.api.service.d.ts +4 -0
  167. package/lib/_internal/invoice.api.service.d.ts +4 -0
  168. package/lib/_internal/merchant.api.service.d.ts +4 -0
  169. package/lib/_internal/objects/index.d.ts +2 -0
  170. package/lib/_internal/objects/payment-processor.d.ts +1 -0
  171. package/lib/_internal/objects/recurring-invoice.d.ts +84 -0
  172. package/lib/_internal/payment-method.api.service.d.ts +4 -0
  173. package/lib/_internal/payment.api.service.d.ts +4 -0
  174. package/lib/_internal/pricing.api.service.d.ts +4 -0
  175. package/lib/_internal/product-summary.api.service.d.ts +4 -0
  176. package/lib/_internal/product.api.service.d.ts +4 -0
  177. package/lib/_internal/purchase.api.service.d.ts +4 -0
  178. package/lib/_internal/recurring-invoice.api.service.d.ts +20 -0
  179. package/lib/_internal/refund.api.service.d.ts +4 -0
  180. package/lib/_internal/retail-customer-configuration.api.service.d.ts +4 -0
  181. package/lib/_internal/sales-credit-note.api.service.d.ts +4 -0
  182. package/lib/_internal/sales-invoice.api.service.d.ts +4 -0
  183. package/lib/_internal/tax.api.service.d.ts +4 -0
  184. package/lib/_internal/vendor.api.service.d.ts +4 -0
  185. package/lib/index.d.ts +2 -36
  186. package/package.json +26 -15
  187. package/src/README.md +1 -0
  188. package/vendasta-billing.d.ts +1 -0
  189. package/bundles/vendasta-billing.umd.js +0 -19170
  190. package/bundles/vendasta-billing.umd.js.map +0 -1
  191. package/bundles/vendasta-billing.umd.min.js +0 -16
  192. package/bundles/vendasta-billing.umd.min.js.map +0 -1
  193. package/esm2015/lib/_generated/host.service.js +0 -65
  194. package/esm2015/lib/_generated/index.js +0 -2
  195. package/esm2015/lib/_internal/bank-reconciliation.api.service.js +0 -47
  196. package/esm2015/lib/_internal/billing.api.service.js +0 -217
  197. package/esm2015/lib/_internal/bundle.api.service.js +0 -51
  198. package/esm2015/lib/_internal/contract-document.api.service.js +0 -46
  199. package/esm2015/lib/_internal/contract.api.service.js +0 -56
  200. package/esm2015/lib/_internal/credit.api.service.js +0 -46
  201. package/esm2015/lib/_internal/discount.api.service.js +0 -54
  202. package/esm2015/lib/_internal/enums/applied-discount.enum.js +0 -14
  203. package/esm2015/lib/_internal/enums/card.enum.js +0 -17
  204. package/esm2015/lib/_internal/enums/contract.enum.js +0 -14
  205. package/esm2015/lib/_internal/enums/currency.enum.js +0 -35
  206. package/esm2015/lib/_internal/enums/frequency.enum.js +0 -14
  207. package/esm2015/lib/_internal/enums/index.js +0 -29
  208. package/esm2015/lib/_internal/enums/invoice.enum.js +0 -18
  209. package/esm2015/lib/_internal/enums/merchant-report.enum.js +0 -13
  210. package/esm2015/lib/_internal/enums/month.enum.js +0 -23
  211. package/esm2015/lib/_internal/enums/payment-card.enum.js +0 -24
  212. package/esm2015/lib/_internal/enums/payout.enum.js +0 -22
  213. package/esm2015/lib/_internal/enums/pricing-plan.enum.js +0 -22
  214. package/esm2015/lib/_internal/enums/product.enum.js +0 -17
  215. package/esm2015/lib/_internal/enums/purchase.enum.js +0 -27
  216. package/esm2015/lib/_internal/enums/refund.enum.js +0 -25
  217. package/esm2015/lib/_internal/enums/sales-credit-note.enum.js +0 -14
  218. package/esm2015/lib/_internal/enums/sort-direction.enum.js +0 -12
  219. package/esm2015/lib/_internal/enums/subscription.enum.js +0 -12
  220. package/esm2015/lib/_internal/index.js +0 -32
  221. package/esm2015/lib/_internal/interfaces/api.interface.js +0 -2
  222. package/esm2015/lib/_internal/interfaces/applied-bundle.interface.js +0 -8
  223. package/esm2015/lib/_internal/interfaces/applied-discount.interface.js +0 -8
  224. package/esm2015/lib/_internal/interfaces/applied-tax-rate.interface.js +0 -8
  225. package/esm2015/lib/_internal/interfaces/balance.interface.js +0 -8
  226. package/esm2015/lib/_internal/interfaces/billable-item.interface.js +0 -2
  227. package/esm2015/lib/_internal/interfaces/bundle.interface.js +0 -2
  228. package/esm2015/lib/_internal/interfaces/card.interface.js +0 -8
  229. package/esm2015/lib/_internal/interfaces/commitment.interface.js +0 -8
  230. package/esm2015/lib/_internal/interfaces/common.interface.js +0 -8
  231. package/esm2015/lib/_internal/interfaces/contract-document.interface.js +0 -2
  232. package/esm2015/lib/_internal/interfaces/contract.interface.js +0 -2
  233. package/esm2015/lib/_internal/interfaces/credit.interface.js +0 -8
  234. package/esm2015/lib/_internal/interfaces/currency.interface.js +0 -8
  235. package/esm2015/lib/_internal/interfaces/customer-summary.interface.js +0 -8
  236. package/esm2015/lib/_internal/interfaces/date-range.interface.js +0 -8
  237. package/esm2015/lib/_internal/interfaces/discount.interface.js +0 -2
  238. package/esm2015/lib/_internal/interfaces/external-account.interface.js +0 -8
  239. package/esm2015/lib/_internal/interfaces/field-mask.interface.js +0 -8
  240. package/esm2015/lib/_internal/interfaces/frequency.interface.js +0 -8
  241. package/esm2015/lib/_internal/interfaces/index.js +0 -2
  242. package/esm2015/lib/_internal/interfaces/invoice-template.interface.js +0 -2
  243. package/esm2015/lib/_internal/interfaces/invoice.interface.js +0 -2
  244. package/esm2015/lib/_internal/interfaces/merchant-report.interface.js +0 -2
  245. package/esm2015/lib/_internal/interfaces/merchant.interface.js +0 -2
  246. package/esm2015/lib/_internal/interfaces/metered-component.interface.js +0 -8
  247. package/esm2015/lib/_internal/interfaces/month.interface.js +0 -8
  248. package/esm2015/lib/_internal/interfaces/payment-card.interface.js +0 -8
  249. package/esm2015/lib/_internal/interfaces/payment.interface.js +0 -2
  250. package/esm2015/lib/_internal/interfaces/payout.interface.js +0 -2
  251. package/esm2015/lib/_internal/interfaces/pricing-plan-product.interface.js +0 -2
  252. package/esm2015/lib/_internal/interfaces/pricing-plan.interface.js +0 -2
  253. package/esm2015/lib/_internal/interfaces/product-pricing.interface.js +0 -2
  254. package/esm2015/lib/_internal/interfaces/product-summary.interface.js +0 -2
  255. package/esm2015/lib/_internal/interfaces/product.interface.js +0 -2
  256. package/esm2015/lib/_internal/interfaces/purchase.interface.js +0 -2
  257. package/esm2015/lib/_internal/interfaces/refund.interface.js +0 -8
  258. package/esm2015/lib/_internal/interfaces/retail-customer-configuration.interface.js +0 -8
  259. package/esm2015/lib/_internal/interfaces/sales-credit-note.interface.js +0 -2
  260. package/esm2015/lib/_internal/interfaces/sales-invoice.interface.js +0 -2
  261. package/esm2015/lib/_internal/interfaces/sort-direction.interface.js +0 -8
  262. package/esm2015/lib/_internal/interfaces/subscribe-validation.interface.js +0 -8
  263. package/esm2015/lib/_internal/interfaces/subscription.interface.js +0 -2
  264. package/esm2015/lib/_internal/interfaces/tax-rate.interface.js +0 -2
  265. package/esm2015/lib/_internal/invoice-template.api.service.js +0 -86
  266. package/esm2015/lib/_internal/invoice.api.service.js +0 -117
  267. package/esm2015/lib/_internal/merchant.api.service.js +0 -160
  268. package/esm2015/lib/_internal/objects/api.js +0 -841
  269. package/esm2015/lib/_internal/objects/applied-bundle.js +0 -77
  270. package/esm2015/lib/_internal/objects/applied-discount.js +0 -46
  271. package/esm2015/lib/_internal/objects/applied-tax-rate.js +0 -39
  272. package/esm2015/lib/_internal/objects/balance.js +0 -45
  273. package/esm2015/lib/_internal/objects/billable-item.js +0 -562
  274. package/esm2015/lib/_internal/objects/bundle.js +0 -390
  275. package/esm2015/lib/_internal/objects/card.js +0 -7
  276. package/esm2015/lib/_internal/objects/commitment.js +0 -36
  277. package/esm2015/lib/_internal/objects/common.js +0 -56
  278. package/esm2015/lib/_internal/objects/contract-document.js +0 -141
  279. package/esm2015/lib/_internal/objects/contract.js +0 -474
  280. package/esm2015/lib/_internal/objects/credit.js +0 -114
  281. package/esm2015/lib/_internal/objects/currency.js +0 -7
  282. package/esm2015/lib/_internal/objects/customer-summary.js +0 -104
  283. package/esm2015/lib/_internal/objects/date-range.js +0 -36
  284. package/esm2015/lib/_internal/objects/discount.js +0 -299
  285. package/esm2015/lib/_internal/objects/external-account.js +0 -160
  286. package/esm2015/lib/_internal/objects/field-mask.js +0 -27
  287. package/esm2015/lib/_internal/objects/frequency.js +0 -7
  288. package/esm2015/lib/_internal/objects/index.js +0 -45
  289. package/esm2015/lib/_internal/objects/invoice-template.js +0 -707
  290. package/esm2015/lib/_internal/objects/invoice.js +0 -1117
  291. package/esm2015/lib/_internal/objects/merchant-report.js +0 -108
  292. package/esm2015/lib/_internal/objects/merchant.js +0 -991
  293. package/esm2015/lib/_internal/objects/metered-component.js +0 -97
  294. package/esm2015/lib/_internal/objects/month.js +0 -7
  295. package/esm2015/lib/_internal/objects/payment-card.js +0 -211
  296. package/esm2015/lib/_internal/objects/payment.js +0 -1219
  297. package/esm2015/lib/_internal/objects/payout.js +0 -258
  298. package/esm2015/lib/_internal/objects/pricing-plan-product.js +0 -565
  299. package/esm2015/lib/_internal/objects/pricing-plan.js +0 -290
  300. package/esm2015/lib/_internal/objects/product-pricing.js +0 -107
  301. package/esm2015/lib/_internal/objects/product-summary.js +0 -538
  302. package/esm2015/lib/_internal/objects/product.js +0 -302
  303. package/esm2015/lib/_internal/objects/purchase.js +0 -524
  304. package/esm2015/lib/_internal/objects/refund.js +0 -181
  305. package/esm2015/lib/_internal/objects/retail-customer-configuration.js +0 -159
  306. package/esm2015/lib/_internal/objects/sales-credit-note.js +0 -211
  307. package/esm2015/lib/_internal/objects/sales-invoice.js +0 -300
  308. package/esm2015/lib/_internal/objects/sort-direction.js +0 -7
  309. package/esm2015/lib/_internal/objects/subscribe-validation.js +0 -31
  310. package/esm2015/lib/_internal/objects/subscription.js +0 -555
  311. package/esm2015/lib/_internal/objects/tax-rate.js +0 -342
  312. package/esm2015/lib/_internal/payment-method.api.service.js +0 -50
  313. package/esm2015/lib/_internal/payment.api.service.js +0 -103
  314. package/esm2015/lib/_internal/pricing.api.service.js +0 -77
  315. package/esm2015/lib/_internal/product-summary.api.service.js +0 -47
  316. package/esm2015/lib/_internal/product.api.service.js +0 -48
  317. package/esm2015/lib/_internal/purchase.api.service.js +0 -60
  318. package/esm2015/lib/_internal/refund.api.service.js +0 -46
  319. package/esm2015/lib/_internal/retail-customer-configuration.api.service.js +0 -46
  320. package/esm2015/lib/_internal/sales-credit-note.api.service.js +0 -46
  321. package/esm2015/lib/_internal/sales-invoice.api.service.js +0 -51
  322. package/esm2015/lib/_internal/tax.api.service.js +0 -64
  323. package/esm2015/lib/_internal/vendor.api.service.js +0 -47
  324. package/esm2015/lib/applied_bundle/applied_bundle.js +0 -12
  325. package/esm2015/lib/applied_bundle/index.js +0 -2
  326. package/esm2015/lib/applied_discount/applied_discount.js +0 -48
  327. package/esm2015/lib/applied_discount/index.js +0 -2
  328. package/esm2015/lib/bank_account/bank-account.service.js +0 -38
  329. package/esm2015/lib/bank_account/bank_account.js +0 -13
  330. package/esm2015/lib/bank_account/index.js +0 -3
  331. package/esm2015/lib/bank_reconciliation/bank-reconciliation.service.js +0 -54
  332. package/esm2015/lib/bank_reconciliation/index.js +0 -3
  333. package/esm2015/lib/bank_reconciliation/payout.js +0 -53
  334. package/esm2015/lib/billable-item/billable-item.js +0 -40
  335. package/esm2015/lib/billable-item/billable-item.service.js +0 -31
  336. package/esm2015/lib/billable-item/index.js +0 -2
  337. package/esm2015/lib/billing-host.service.js +0 -41
  338. package/esm2015/lib/billing.service.js +0 -376
  339. package/esm2015/lib/bundle/bundle.js +0 -37
  340. package/esm2015/lib/bundle/bundle.service.js +0 -56
  341. package/esm2015/lib/bundle/index.js +0 -2
  342. package/esm2015/lib/contract/contract.js +0 -21
  343. package/esm2015/lib/contract/contract.service.js +0 -39
  344. package/esm2015/lib/contract/dimension.js +0 -21
  345. package/esm2015/lib/contract/index.js +0 -5
  346. package/esm2015/lib/contract/mutations.js +0 -11
  347. package/esm2015/lib/contract-document/contract-document.js +0 -9
  348. package/esm2015/lib/contract-document/contract-document.service.js +0 -68
  349. package/esm2015/lib/contract-document/index.js +0 -2
  350. package/esm2015/lib/contract-document/list-contract-document.js +0 -2
  351. package/esm2015/lib/core/index.js +0 -3
  352. package/esm2015/lib/core/paged-response.js +0 -8
  353. package/esm2015/lib/core/sort-direction.js +0 -6
  354. package/esm2015/lib/credit/credit.js +0 -8
  355. package/esm2015/lib/credit/credit.service.js +0 -33
  356. package/esm2015/lib/credit/index.js +0 -2
  357. package/esm2015/lib/customer_summary/customer-summary.js +0 -15
  358. package/esm2015/lib/discount/discount.js +0 -18
  359. package/esm2015/lib/discount/discount.service.js +0 -73
  360. package/esm2015/lib/discount/discount_type.js +0 -32
  361. package/esm2015/lib/discount/index.js +0 -3
  362. package/esm2015/lib/discount/list-discount.js +0 -2
  363. package/esm2015/lib/http-shared/error-handlers.js +0 -20
  364. package/esm2015/lib/index.js +0 -37
  365. package/esm2015/lib/invoice/index.js +0 -3
  366. package/esm2015/lib/invoice/invoice.js +0 -198
  367. package/esm2015/lib/invoice/invoice.service.js +0 -254
  368. package/esm2015/lib/invoice/list-invoice.js +0 -2
  369. package/esm2015/lib/invoice-template/index.js +0 -2
  370. package/esm2015/lib/invoice-template/invoice-template.js +0 -38
  371. package/esm2015/lib/invoice-template/invoice-template.service.js +0 -78
  372. package/esm2015/lib/merchant/balance.js +0 -2
  373. package/esm2015/lib/merchant/index.js +0 -5
  374. package/esm2015/lib/merchant/merchant.interface.js +0 -2
  375. package/esm2015/lib/merchant/merchant.js +0 -20
  376. package/esm2015/lib/merchant/merchant.service.js +0 -212
  377. package/esm2015/lib/merchant/payout-summary.js +0 -32
  378. package/esm2015/lib/merchant/retail-configuration.js +0 -57
  379. package/esm2015/lib/merchant-report/index.js +0 -2
  380. package/esm2015/lib/merchant-report/merchant-report-status.js +0 -2
  381. package/esm2015/lib/merchant-report/merchant-report.interfaces.js +0 -2
  382. package/esm2015/lib/merchant-report/merchant-report.js +0 -2
  383. package/esm2015/lib/merchant-report/merchant-report.service.js +0 -38
  384. package/esm2015/lib/payment/dispute.js +0 -92
  385. package/esm2015/lib/payment/index.js +0 -10
  386. package/esm2015/lib/payment/payment-allocation-type.js +0 -18
  387. package/esm2015/lib/payment/payment-source.js +0 -18
  388. package/esm2015/lib/payment/payment-status.js +0 -17
  389. package/esm2015/lib/payment/payment.js +0 -292
  390. package/esm2015/lib/payment/payment.service.js +0 -138
  391. package/esm2015/lib/payment/retail-payment.js +0 -70
  392. package/esm2015/lib/payment/retail-status.js +0 -50
  393. package/esm2015/lib/payment-card/index.js +0 -3
  394. package/esm2015/lib/payment-card/payment-card.js +0 -60
  395. package/esm2015/lib/payment-card/payment-card.service.js +0 -45
  396. package/esm2015/lib/payment-method/index.js +0 -2
  397. package/esm2015/lib/payment-method/payment-method.service.js +0 -43
  398. package/esm2015/lib/pricing/billing-strategy.js +0 -39
  399. package/esm2015/lib/pricing/commitment.js +0 -7
  400. package/esm2015/lib/pricing/currency.js +0 -86
  401. package/esm2015/lib/pricing/frequency.js +0 -42
  402. package/esm2015/lib/pricing/index.js +0 -12
  403. package/esm2015/lib/pricing/list-pricing-plan-product-filter.js +0 -2
  404. package/esm2015/lib/pricing/pricing-plan-product.js +0 -53
  405. package/esm2015/lib/pricing/pricing-plan.js +0 -14
  406. package/esm2015/lib/pricing/pricing-plan.service.js +0 -287
  407. package/esm2015/lib/pricing/product-pricing-rules.js +0 -10
  408. package/esm2015/lib/pricing/product-pricing-type.js +0 -31
  409. package/esm2015/lib/pricing/product-pricing.js +0 -44
  410. package/esm2015/lib/pricing/wholesale-pricing.service.js +0 -61
  411. package/esm2015/lib/product/index.js +0 -3
  412. package/esm2015/lib/product/list-products.js +0 -30
  413. package/esm2015/lib/product/product.js +0 -10
  414. package/esm2015/lib/product-summary/index.js +0 -3
  415. package/esm2015/lib/product-summary/product-summary.service.js +0 -42
  416. package/esm2015/lib/product-summary/subscription-retention.js +0 -19
  417. package/esm2015/lib/purchase/index.js +0 -4
  418. package/esm2015/lib/purchase/list-purchases.js +0 -17
  419. package/esm2015/lib/purchase/purchase.js +0 -79
  420. package/esm2015/lib/purchase/purchase.service.js +0 -31
  421. package/esm2015/lib/purchase/purchase_status.js +0 -26
  422. package/esm2015/lib/refund/index.js +0 -3
  423. package/esm2015/lib/refund/refund.js +0 -81
  424. package/esm2015/lib/refund/refund.service.js +0 -53
  425. package/esm2015/lib/retail-customer-configuration/index.js +0 -3
  426. package/esm2015/lib/retail-customer-configuration/retail-customer-configuration.js +0 -44
  427. package/esm2015/lib/retail-customer-configuration/retail-customer-configuration.service.js +0 -39
  428. package/esm2015/lib/revenue/index.js +0 -2
  429. package/esm2015/lib/revenue/revenue.interfaces.js +0 -2
  430. package/esm2015/lib/revenue/revenue.service.js +0 -34
  431. package/esm2015/lib/sales-credit-note/index.js +0 -3
  432. package/esm2015/lib/sales-credit-note/sales-credit-note.js +0 -53
  433. package/esm2015/lib/sales-credit-note/sales-credit-note.service.js +0 -72
  434. package/esm2015/lib/sales-invoice/index.js +0 -3
  435. package/esm2015/lib/sales-invoice/sales-invoice.js +0 -87
  436. package/esm2015/lib/sales-invoice/sales-invoice.service.js +0 -77
  437. package/esm2015/lib/sku.js +0 -4
  438. package/esm2015/lib/stripe-file/file.js +0 -2
  439. package/esm2015/lib/stripe-file/index.js +0 -3
  440. package/esm2015/lib/stripe-file/purpose.js +0 -13
  441. package/esm2015/lib/stripe-file/stripe-file.service.js +0 -35
  442. package/esm2015/lib/subscription/can-create-subscriptions-item.js +0 -2
  443. package/esm2015/lib/subscription/index.js +0 -2
  444. package/esm2015/lib/tax-rate/index.js +0 -2
  445. package/esm2015/lib/tax-rate/tax-rate.js +0 -13
  446. package/esm2015/lib/tax-rate/tax-rate.service.js +0 -86
  447. package/esm2015/public_api.js +0 -2
  448. package/esm2015/vendasta-billing.js +0 -5
  449. package/fesm2015/vendasta-billing.js.map +0 -1
  450. package/lib/applied_bundle/applied_bundle.d.ts +0 -15
  451. package/lib/applied_bundle/index.d.ts +0 -1
  452. package/lib/applied_discount/applied_discount.d.ts +0 -26
  453. package/lib/applied_discount/index.d.ts +0 -1
  454. package/lib/bank_account/bank-account.service.d.ts +0 -11
  455. package/lib/bank_account/bank_account.d.ts +0 -12
  456. package/lib/bank_account/index.d.ts +0 -3
  457. package/lib/bank_reconciliation/bank-reconciliation.service.d.ts +0 -10
  458. package/lib/bank_reconciliation/index.d.ts +0 -2
  459. package/lib/bank_reconciliation/payout.d.ts +0 -37
  460. package/lib/billable-item/billable-item.d.ts +0 -40
  461. package/lib/billable-item/billable-item.service.d.ts +0 -10
  462. package/lib/billable-item/index.d.ts +0 -2
  463. package/lib/billing-host.service.d.ts +0 -11
  464. package/lib/billing.service.d.ts +0 -88
  465. package/lib/bundle/bundle.d.ts +0 -26
  466. package/lib/bundle/bundle.service.d.ts +0 -14
  467. package/lib/bundle/index.d.ts +0 -2
  468. package/lib/contract/contract.d.ts +0 -20
  469. package/lib/contract/contract.service.d.ts +0 -23
  470. package/lib/contract/dimension.d.ts +0 -11
  471. package/lib/contract/index.d.ts +0 -5
  472. package/lib/contract/mutations.d.ts +0 -11
  473. package/lib/contract-document/contract-document.d.ts +0 -8
  474. package/lib/contract-document/contract-document.service.d.ts +0 -17
  475. package/lib/contract-document/index.d.ts +0 -3
  476. package/lib/contract-document/list-contract-document.d.ts +0 -3
  477. package/lib/core/index.d.ts +0 -2
  478. package/lib/core/paged-response.d.ts +0 -6
  479. package/lib/core/sort-direction.d.ts +0 -4
  480. package/lib/credit/credit.d.ts +0 -7
  481. package/lib/credit/credit.service.d.ts +0 -9
  482. package/lib/credit/index.d.ts +0 -2
  483. package/lib/customer_summary/customer-summary.d.ts +0 -9
  484. package/lib/discount/discount.d.ts +0 -17
  485. package/lib/discount/discount.service.d.ts +0 -15
  486. package/lib/discount/discount_type.d.ts +0 -9
  487. package/lib/discount/index.d.ts +0 -4
  488. package/lib/discount/list-discount.d.ts +0 -5
  489. package/lib/http-shared/error-handlers.d.ts +0 -4
  490. package/lib/invoice/index.d.ts +0 -3
  491. package/lib/invoice/invoice.d.ts +0 -86
  492. package/lib/invoice/invoice.service.d.ts +0 -40
  493. package/lib/invoice/list-invoice.d.ts +0 -15
  494. package/lib/invoice-template/index.d.ts +0 -2
  495. package/lib/invoice-template/invoice-template.d.ts +0 -35
  496. package/lib/invoice-template/invoice-template.service.d.ts +0 -14
  497. package/lib/merchant/balance.d.ts +0 -5
  498. package/lib/merchant/index.d.ts +0 -7
  499. package/lib/merchant/merchant.d.ts +0 -19
  500. package/lib/merchant/merchant.interface.d.ts +0 -3
  501. package/lib/merchant/merchant.service.d.ts +0 -59
  502. package/lib/merchant/payout-summary.d.ts +0 -19
  503. package/lib/merchant/retail-configuration.d.ts +0 -24
  504. package/lib/merchant-report/index.d.ts +0 -4
  505. package/lib/merchant-report/merchant-report-status.d.ts +0 -1
  506. package/lib/merchant-report/merchant-report.d.ts +0 -8
  507. package/lib/merchant-report/merchant-report.interfaces.d.ts +0 -5
  508. package/lib/merchant-report/merchant-report.service.d.ts +0 -12
  509. package/lib/payment/dispute.d.ts +0 -61
  510. package/lib/payment/index.d.ts +0 -9
  511. package/lib/payment/payment-allocation-type.d.ts +0 -7
  512. package/lib/payment/payment-source.d.ts +0 -7
  513. package/lib/payment/payment-status.d.ts +0 -7
  514. package/lib/payment/payment.d.ts +0 -42
  515. package/lib/payment/payment.service.d.ts +0 -24
  516. package/lib/payment/retail-payment.d.ts +0 -33
  517. package/lib/payment/retail-status.d.ts +0 -24
  518. package/lib/payment-card/index.d.ts +0 -2
  519. package/lib/payment-card/payment-card.d.ts +0 -41
  520. package/lib/payment-card/payment-card.service.d.ts +0 -13
  521. package/lib/payment-method/index.d.ts +0 -1
  522. package/lib/payment-method/payment-method.service.d.ts +0 -10
  523. package/lib/pricing/billing-strategy.d.ts +0 -11
  524. package/lib/pricing/commitment.d.ts +0 -6
  525. package/lib/pricing/currency.d.ts +0 -29
  526. package/lib/pricing/frequency.d.ts +0 -10
  527. package/lib/pricing/index.d.ts +0 -11
  528. package/lib/pricing/list-pricing-plan-product-filter.d.ts +0 -4
  529. package/lib/pricing/pricing-plan-product.d.ts +0 -34
  530. package/lib/pricing/pricing-plan.d.ts +0 -13
  531. package/lib/pricing/pricing-plan.service.d.ts +0 -17
  532. package/lib/pricing/product-pricing-rules.d.ts +0 -7
  533. package/lib/pricing/product-pricing-type.d.ts +0 -9
  534. package/lib/pricing/product-pricing.d.ts +0 -37
  535. package/lib/pricing/wholesale-pricing.service.d.ts +0 -19
  536. package/lib/product/index.d.ts +0 -2
  537. package/lib/product/list-products.d.ts +0 -16
  538. package/lib/product/product.d.ts +0 -9
  539. package/lib/product-summary/index.d.ts +0 -2
  540. package/lib/product-summary/product-summary.service.d.ts +0 -10
  541. package/lib/product-summary/subscription-retention.d.ts +0 -20
  542. package/lib/purchase/index.d.ts +0 -4
  543. package/lib/purchase/list-purchases.d.ts +0 -27
  544. package/lib/purchase/purchase.d.ts +0 -56
  545. package/lib/purchase/purchase.service.d.ts +0 -10
  546. package/lib/purchase/purchase_status.d.ts +0 -10
  547. package/lib/refund/index.d.ts +0 -2
  548. package/lib/refund/refund.d.ts +0 -36
  549. package/lib/refund/refund.service.d.ts +0 -11
  550. package/lib/retail-customer-configuration/index.d.ts +0 -2
  551. package/lib/retail-customer-configuration/retail-customer-configuration.d.ts +0 -20
  552. package/lib/retail-customer-configuration/retail-customer-configuration.service.d.ts +0 -9
  553. package/lib/revenue/index.d.ts +0 -2
  554. package/lib/revenue/revenue.interfaces.d.ts +0 -3
  555. package/lib/revenue/revenue.service.d.ts +0 -11
  556. package/lib/sales-credit-note/index.d.ts +0 -2
  557. package/lib/sales-credit-note/sales-credit-note.d.ts +0 -30
  558. package/lib/sales-credit-note/sales-credit-note.service.d.ts +0 -16
  559. package/lib/sales-invoice/index.d.ts +0 -2
  560. package/lib/sales-invoice/sales-invoice.d.ts +0 -42
  561. package/lib/sales-invoice/sales-invoice.service.d.ts +0 -16
  562. package/lib/sku.d.ts +0 -3
  563. package/lib/stripe-file/file.d.ts +0 -6
  564. package/lib/stripe-file/index.d.ts +0 -3
  565. package/lib/stripe-file/purpose.d.ts +0 -11
  566. package/lib/stripe-file/stripe-file.service.d.ts +0 -12
  567. package/lib/subscription/can-create-subscriptions-item.d.ts +0 -6
  568. package/lib/subscription/index.d.ts +0 -1
  569. package/lib/tax-rate/index.d.ts +0 -2
  570. package/lib/tax-rate/tax-rate.d.ts +0 -20
  571. package/lib/tax-rate/tax-rate.service.d.ts +0 -15
  572. package/vendasta-billing.metadata.json +0 -1
@@ -0,0 +1,991 @@
1
+ import { Balance } from './balance';
2
+ import { PagedRequestOptions, PagedResponseMetadata } from './common';
3
+ import { RetailPayout } from './payout';
4
+ import * as e from '../enums';
5
+ export function enumStringToValue(enumRef, value) {
6
+ if (typeof value === 'number') {
7
+ return value;
8
+ }
9
+ return enumRef[value];
10
+ }
11
+ export class ChargeSalesInvoiceRequest {
12
+ constructor(kwargs) {
13
+ if (!kwargs) {
14
+ return;
15
+ }
16
+ Object.assign(this, kwargs);
17
+ }
18
+ static fromProto(proto) {
19
+ let m = new ChargeSalesInvoiceRequest();
20
+ m = Object.assign(m, proto);
21
+ if (proto.amount) {
22
+ m.amount = parseInt(proto.amount, 10);
23
+ }
24
+ return m;
25
+ }
26
+ toApiJson() {
27
+ const toReturn = {};
28
+ if (typeof this.merchantId !== 'undefined') {
29
+ toReturn['merchantId'] = this.merchantId;
30
+ }
31
+ if (typeof this.invoiceId !== 'undefined') {
32
+ toReturn['invoiceId'] = this.invoiceId;
33
+ }
34
+ if (typeof this.amount !== 'undefined') {
35
+ toReturn['amount'] = this.amount;
36
+ }
37
+ return toReturn;
38
+ }
39
+ }
40
+ export class ConnectStripeAccountRequest {
41
+ constructor(kwargs) {
42
+ if (!kwargs) {
43
+ return;
44
+ }
45
+ Object.assign(this, kwargs);
46
+ }
47
+ static fromProto(proto) {
48
+ let m = new ConnectStripeAccountRequest();
49
+ m = Object.assign(m, proto);
50
+ return m;
51
+ }
52
+ toApiJson() {
53
+ const toReturn = {};
54
+ if (typeof this.countryCode !== 'undefined') {
55
+ toReturn['countryCode'] = this.countryCode;
56
+ }
57
+ if (typeof this.failureUrl !== 'undefined') {
58
+ toReturn['failureUrl'] = this.failureUrl;
59
+ }
60
+ if (typeof this.successUrl !== 'undefined') {
61
+ toReturn['successUrl'] = this.successUrl;
62
+ }
63
+ if (typeof this.merchantId !== 'undefined') {
64
+ toReturn['merchantId'] = this.merchantId;
65
+ }
66
+ return toReturn;
67
+ }
68
+ }
69
+ export class ConnectStripeAccountResponse {
70
+ constructor(kwargs) {
71
+ if (!kwargs) {
72
+ return;
73
+ }
74
+ Object.assign(this, kwargs);
75
+ }
76
+ static fromProto(proto) {
77
+ let m = new ConnectStripeAccountResponse();
78
+ m = Object.assign(m, proto);
79
+ return m;
80
+ }
81
+ toApiJson() {
82
+ const toReturn = {};
83
+ if (typeof this.stripeUrl !== 'undefined') {
84
+ toReturn['stripeUrl'] = this.stripeUrl;
85
+ }
86
+ if (typeof this.error !== 'undefined') {
87
+ toReturn['error'] = this.error;
88
+ }
89
+ return toReturn;
90
+ }
91
+ }
92
+ export class CreateMerchantRequest {
93
+ constructor(kwargs) {
94
+ if (!kwargs) {
95
+ return;
96
+ }
97
+ Object.assign(this, kwargs);
98
+ }
99
+ static fromProto(proto) {
100
+ let m = new CreateMerchantRequest();
101
+ m = Object.assign(m, proto);
102
+ if (proto.includeInFinancialRecords) {
103
+ m.includeInFinancialRecords = CreateMerchantRequestIncludeInFinancialRecords.fromProto(proto.includeInFinancialRecords);
104
+ }
105
+ return m;
106
+ }
107
+ toApiJson() {
108
+ const toReturn = {};
109
+ if (typeof this.merchantId !== 'undefined') {
110
+ toReturn['merchantId'] = this.merchantId;
111
+ }
112
+ if (typeof this.address !== 'undefined') {
113
+ toReturn['address'] = this.address;
114
+ }
115
+ if (typeof this.city !== 'undefined') {
116
+ toReturn['city'] = this.city;
117
+ }
118
+ if (typeof this.state !== 'undefined') {
119
+ toReturn['state'] = this.state;
120
+ }
121
+ if (typeof this.country !== 'undefined') {
122
+ toReturn['country'] = this.country;
123
+ }
124
+ if (typeof this.zipCode !== 'undefined') {
125
+ toReturn['zipCode'] = this.zipCode;
126
+ }
127
+ if (typeof this.emailAddress !== 'undefined') {
128
+ toReturn['emailAddress'] = this.emailAddress;
129
+ }
130
+ if (typeof this.phoneNumber !== 'undefined') {
131
+ toReturn['phoneNumber'] = this.phoneNumber;
132
+ }
133
+ if (typeof this.contactName !== 'undefined') {
134
+ toReturn['contactName'] = this.contactName;
135
+ }
136
+ if (typeof this.companyName !== 'undefined') {
137
+ toReturn['companyName'] = this.companyName;
138
+ }
139
+ if (typeof this.additionalEmailAddresses !== 'undefined') {
140
+ toReturn['additionalEmailAddresses'] = this.additionalEmailAddresses;
141
+ }
142
+ if (typeof this.includeInFinancialRecords !== 'undefined' && this.includeInFinancialRecords !== null) {
143
+ toReturn['includeInFinancialRecords'] = 'toApiJson' in this.includeInFinancialRecords ? this.includeInFinancialRecords.toApiJson() : this.includeInFinancialRecords;
144
+ }
145
+ if (typeof this.hasAlternativePaymentMethod !== 'undefined') {
146
+ toReturn['hasAlternativePaymentMethod'] = this.hasAlternativePaymentMethod;
147
+ }
148
+ return toReturn;
149
+ }
150
+ }
151
+ export class DefaultCustomerConfiguration {
152
+ constructor(kwargs) {
153
+ if (!kwargs) {
154
+ return;
155
+ }
156
+ Object.assign(this, kwargs);
157
+ }
158
+ static fromProto(proto) {
159
+ let m = new DefaultCustomerConfiguration();
160
+ m = Object.assign(m, proto);
161
+ if (proto.invoiceDay) {
162
+ m.invoiceDay = parseInt(proto.invoiceDay, 10);
163
+ }
164
+ return m;
165
+ }
166
+ toApiJson() {
167
+ const toReturn = {};
168
+ if (typeof this.generateMethod !== 'undefined') {
169
+ toReturn['generateMethod'] = this.generateMethod;
170
+ }
171
+ if (typeof this.collectionMethod !== 'undefined') {
172
+ toReturn['collectionMethod'] = this.collectionMethod;
173
+ }
174
+ if (typeof this.invoiceDay !== 'undefined') {
175
+ toReturn['invoiceDay'] = this.invoiceDay;
176
+ }
177
+ return toReturn;
178
+ }
179
+ }
180
+ export class GetMerchantRequest {
181
+ constructor(kwargs) {
182
+ if (!kwargs) {
183
+ return;
184
+ }
185
+ Object.assign(this, kwargs);
186
+ }
187
+ static fromProto(proto) {
188
+ let m = new GetMerchantRequest();
189
+ m = Object.assign(m, proto);
190
+ return m;
191
+ }
192
+ toApiJson() {
193
+ const toReturn = {};
194
+ if (typeof this.merchantId !== 'undefined') {
195
+ toReturn['merchantId'] = this.merchantId;
196
+ }
197
+ return toReturn;
198
+ }
199
+ }
200
+ export class GetMerchantResponse {
201
+ constructor(kwargs) {
202
+ if (!kwargs) {
203
+ return;
204
+ }
205
+ Object.assign(this, kwargs);
206
+ }
207
+ static fromProto(proto) {
208
+ let m = new GetMerchantResponse();
209
+ m = Object.assign(m, proto);
210
+ if (proto.merchant) {
211
+ m.merchant = Merchant.fromProto(proto.merchant);
212
+ }
213
+ return m;
214
+ }
215
+ toApiJson() {
216
+ const toReturn = {};
217
+ if (typeof this.merchant !== 'undefined' && this.merchant !== null) {
218
+ toReturn['merchant'] = 'toApiJson' in this.merchant ? this.merchant.toApiJson() : this.merchant;
219
+ }
220
+ return toReturn;
221
+ }
222
+ }
223
+ export class GetMultiRetailConfigurationsRequest {
224
+ constructor(kwargs) {
225
+ if (!kwargs) {
226
+ return;
227
+ }
228
+ Object.assign(this, kwargs);
229
+ }
230
+ static fromProto(proto) {
231
+ let m = new GetMultiRetailConfigurationsRequest();
232
+ m = Object.assign(m, proto);
233
+ return m;
234
+ }
235
+ toApiJson() {
236
+ const toReturn = {};
237
+ if (typeof this.merchantId !== 'undefined') {
238
+ toReturn['merchantId'] = this.merchantId;
239
+ }
240
+ if (typeof this.retailGroupIds !== 'undefined') {
241
+ toReturn['retailGroupIds'] = this.retailGroupIds;
242
+ }
243
+ return toReturn;
244
+ }
245
+ }
246
+ export class GetMultiRetailConfigurationsResponse {
247
+ constructor(kwargs) {
248
+ if (!kwargs) {
249
+ return;
250
+ }
251
+ Object.assign(this, kwargs);
252
+ }
253
+ static fromProto(proto) {
254
+ let m = new GetMultiRetailConfigurationsResponse();
255
+ m = Object.assign(m, proto);
256
+ if (proto.retailConfigurations) {
257
+ m.retailConfigurations = Object.keys(proto.retailConfigurations).reduce((obj, k) => { obj[k] = RetailConfiguration.fromProto(proto.retailConfigurations[k]); return obj; }, {});
258
+ }
259
+ return m;
260
+ }
261
+ toApiJson() {
262
+ const toReturn = {};
263
+ if (typeof this.retailConfigurations !== 'undefined' && this.retailConfigurations !== null) {
264
+ toReturn['retailConfigurations'] = 'toApiJson' in this.retailConfigurations ? this.retailConfigurations.toApiJson() : this.retailConfigurations;
265
+ }
266
+ return toReturn;
267
+ }
268
+ }
269
+ export class GetOutstandingBalanceRequest {
270
+ constructor(kwargs) {
271
+ if (!kwargs) {
272
+ return;
273
+ }
274
+ Object.assign(this, kwargs);
275
+ }
276
+ static fromProto(proto) {
277
+ let m = new GetOutstandingBalanceRequest();
278
+ m = Object.assign(m, proto);
279
+ return m;
280
+ }
281
+ toApiJson() {
282
+ const toReturn = {};
283
+ if (typeof this.merchantId !== 'undefined') {
284
+ toReturn['merchantId'] = this.merchantId;
285
+ }
286
+ return toReturn;
287
+ }
288
+ }
289
+ export class GetOutstandingBalanceResponse {
290
+ constructor(kwargs) {
291
+ if (!kwargs) {
292
+ return;
293
+ }
294
+ Object.assign(this, kwargs);
295
+ }
296
+ static fromProto(proto) {
297
+ let m = new GetOutstandingBalanceResponse();
298
+ m = Object.assign(m, proto);
299
+ if (proto.outstandingBalance) {
300
+ m.outstandingBalance = parseInt(proto.outstandingBalance, 10);
301
+ }
302
+ if (proto.currency) {
303
+ m.currency = enumStringToValue(e.Currency, proto.currency);
304
+ }
305
+ return m;
306
+ }
307
+ toApiJson() {
308
+ const toReturn = {};
309
+ if (typeof this.outstandingBalance !== 'undefined') {
310
+ toReturn['outstandingBalance'] = this.outstandingBalance;
311
+ }
312
+ if (typeof this.currency !== 'undefined') {
313
+ toReturn['currency'] = this.currency;
314
+ }
315
+ return toReturn;
316
+ }
317
+ }
318
+ export class GetPayoutSummaryRequest {
319
+ constructor(kwargs) {
320
+ if (!kwargs) {
321
+ return;
322
+ }
323
+ Object.assign(this, kwargs);
324
+ }
325
+ static fromProto(proto) {
326
+ let m = new GetPayoutSummaryRequest();
327
+ m = Object.assign(m, proto);
328
+ return m;
329
+ }
330
+ toApiJson() {
331
+ const toReturn = {};
332
+ if (typeof this.merchantId !== 'undefined') {
333
+ toReturn['merchantId'] = this.merchantId;
334
+ }
335
+ return toReturn;
336
+ }
337
+ }
338
+ export class GetPayoutSummaryResponse {
339
+ constructor(kwargs) {
340
+ if (!kwargs) {
341
+ return;
342
+ }
343
+ Object.assign(this, kwargs);
344
+ }
345
+ static fromProto(proto) {
346
+ let m = new GetPayoutSummaryResponse();
347
+ m = Object.assign(m, proto);
348
+ if (proto.balances) {
349
+ m.balances = proto.balances.map(Balance.fromProto);
350
+ }
351
+ if (proto.nextInTransitPayoutExpectedDate) {
352
+ m.nextInTransitPayoutExpectedDate = new Date(proto.nextInTransitPayoutExpectedDate);
353
+ }
354
+ if (proto.payoutDelayDays) {
355
+ m.payoutDelayDays = parseInt(proto.payoutDelayDays, 10);
356
+ }
357
+ return m;
358
+ }
359
+ toApiJson() {
360
+ const toReturn = {};
361
+ if (typeof this.balances !== 'undefined' && this.balances !== null) {
362
+ toReturn['balances'] = 'toApiJson' in this.balances ? this.balances.toApiJson() : this.balances;
363
+ }
364
+ if (typeof this.nextInTransitPayoutExpectedDate !== 'undefined' && this.nextInTransitPayoutExpectedDate !== null) {
365
+ toReturn['nextInTransitPayoutExpectedDate'] = 'toApiJson' in this.nextInTransitPayoutExpectedDate ? this.nextInTransitPayoutExpectedDate.toApiJson() : this.nextInTransitPayoutExpectedDate;
366
+ }
367
+ if (typeof this.payoutInterval !== 'undefined') {
368
+ toReturn['payoutInterval'] = this.payoutInterval;
369
+ }
370
+ if (typeof this.payoutDelayDays !== 'undefined') {
371
+ toReturn['payoutDelayDays'] = this.payoutDelayDays;
372
+ }
373
+ return toReturn;
374
+ }
375
+ }
376
+ export class GetRetailBalanceRequest {
377
+ constructor(kwargs) {
378
+ if (!kwargs) {
379
+ return;
380
+ }
381
+ Object.assign(this, kwargs);
382
+ }
383
+ static fromProto(proto) {
384
+ let m = new GetRetailBalanceRequest();
385
+ m = Object.assign(m, proto);
386
+ return m;
387
+ }
388
+ toApiJson() {
389
+ const toReturn = {};
390
+ if (typeof this.merchantId !== 'undefined') {
391
+ toReturn['merchantId'] = this.merchantId;
392
+ }
393
+ return toReturn;
394
+ }
395
+ }
396
+ export class GetRetailBalanceResponse {
397
+ constructor(kwargs) {
398
+ if (!kwargs) {
399
+ return;
400
+ }
401
+ Object.assign(this, kwargs);
402
+ }
403
+ static fromProto(proto) {
404
+ let m = new GetRetailBalanceResponse();
405
+ m = Object.assign(m, proto);
406
+ if (proto.balances) {
407
+ m.balances = proto.balances.map(Balance.fromProto);
408
+ }
409
+ return m;
410
+ }
411
+ toApiJson() {
412
+ const toReturn = {};
413
+ if (typeof this.balances !== 'undefined' && this.balances !== null) {
414
+ toReturn['balances'] = 'toApiJson' in this.balances ? this.balances.toApiJson() : this.balances;
415
+ }
416
+ return toReturn;
417
+ }
418
+ }
419
+ export class GetRetailPayoutRequest {
420
+ constructor(kwargs) {
421
+ if (!kwargs) {
422
+ return;
423
+ }
424
+ Object.assign(this, kwargs);
425
+ }
426
+ static fromProto(proto) {
427
+ let m = new GetRetailPayoutRequest();
428
+ m = Object.assign(m, proto);
429
+ return m;
430
+ }
431
+ toApiJson() {
432
+ const toReturn = {};
433
+ if (typeof this.merchantId !== 'undefined') {
434
+ toReturn['merchantId'] = this.merchantId;
435
+ }
436
+ if (typeof this.payoutId !== 'undefined') {
437
+ toReturn['payoutId'] = this.payoutId;
438
+ }
439
+ return toReturn;
440
+ }
441
+ }
442
+ export class GetRetailPayoutResponse {
443
+ constructor(kwargs) {
444
+ if (!kwargs) {
445
+ return;
446
+ }
447
+ Object.assign(this, kwargs);
448
+ }
449
+ static fromProto(proto) {
450
+ let m = new GetRetailPayoutResponse();
451
+ m = Object.assign(m, proto);
452
+ if (proto.payout) {
453
+ m.payout = RetailPayout.fromProto(proto.payout);
454
+ }
455
+ return m;
456
+ }
457
+ toApiJson() {
458
+ const toReturn = {};
459
+ if (typeof this.payout !== 'undefined' && this.payout !== null) {
460
+ toReturn['payout'] = 'toApiJson' in this.payout ? this.payout.toApiJson() : this.payout;
461
+ }
462
+ return toReturn;
463
+ }
464
+ }
465
+ export class UpdateMerchantRequestIncludeInFinancialRecords {
466
+ constructor(kwargs) {
467
+ if (!kwargs) {
468
+ return;
469
+ }
470
+ Object.assign(this, kwargs);
471
+ }
472
+ static fromProto(proto) {
473
+ let m = new UpdateMerchantRequestIncludeInFinancialRecords();
474
+ m = Object.assign(m, proto);
475
+ return m;
476
+ }
477
+ toApiJson() {
478
+ const toReturn = {};
479
+ if (typeof this.includeInFinancialRecords !== 'undefined') {
480
+ toReturn['includeInFinancialRecords'] = this.includeInFinancialRecords;
481
+ }
482
+ return toReturn;
483
+ }
484
+ }
485
+ export class CreateMerchantRequestIncludeInFinancialRecords {
486
+ constructor(kwargs) {
487
+ if (!kwargs) {
488
+ return;
489
+ }
490
+ Object.assign(this, kwargs);
491
+ }
492
+ static fromProto(proto) {
493
+ let m = new CreateMerchantRequestIncludeInFinancialRecords();
494
+ m = Object.assign(m, proto);
495
+ return m;
496
+ }
497
+ toApiJson() {
498
+ const toReturn = {};
499
+ if (typeof this.includeInFinancialRecords !== 'undefined') {
500
+ toReturn['includeInFinancialRecords'] = this.includeInFinancialRecords;
501
+ }
502
+ return toReturn;
503
+ }
504
+ }
505
+ export class ListRetailPayoutsRequest {
506
+ constructor(kwargs) {
507
+ if (!kwargs) {
508
+ return;
509
+ }
510
+ Object.assign(this, kwargs);
511
+ }
512
+ static fromProto(proto) {
513
+ let m = new ListRetailPayoutsRequest();
514
+ m = Object.assign(m, proto);
515
+ if (proto.pagingOptions) {
516
+ m.pagingOptions = PagedRequestOptions.fromProto(proto.pagingOptions);
517
+ }
518
+ return m;
519
+ }
520
+ toApiJson() {
521
+ const toReturn = {};
522
+ if (typeof this.merchantId !== 'undefined') {
523
+ toReturn['merchantId'] = this.merchantId;
524
+ }
525
+ if (typeof this.pagingOptions !== 'undefined' && this.pagingOptions !== null) {
526
+ toReturn['pagingOptions'] = 'toApiJson' in this.pagingOptions ? this.pagingOptions.toApiJson() : this.pagingOptions;
527
+ }
528
+ return toReturn;
529
+ }
530
+ }
531
+ export class ListRetailPayoutsResponse {
532
+ constructor(kwargs) {
533
+ if (!kwargs) {
534
+ return;
535
+ }
536
+ Object.assign(this, kwargs);
537
+ }
538
+ static fromProto(proto) {
539
+ let m = new ListRetailPayoutsResponse();
540
+ m = Object.assign(m, proto);
541
+ if (proto.payouts) {
542
+ m.payouts = proto.payouts.map(RetailPayout.fromProto);
543
+ }
544
+ if (proto.pagingMetadata) {
545
+ m.pagingMetadata = PagedResponseMetadata.fromProto(proto.pagingMetadata);
546
+ }
547
+ return m;
548
+ }
549
+ toApiJson() {
550
+ const toReturn = {};
551
+ if (typeof this.payouts !== 'undefined' && this.payouts !== null) {
552
+ toReturn['payouts'] = 'toApiJson' in this.payouts ? this.payouts.toApiJson() : this.payouts;
553
+ }
554
+ if (typeof this.pagingMetadata !== 'undefined' && this.pagingMetadata !== null) {
555
+ toReturn['pagingMetadata'] = 'toApiJson' in this.pagingMetadata ? this.pagingMetadata.toApiJson() : this.pagingMetadata;
556
+ }
557
+ return toReturn;
558
+ }
559
+ }
560
+ export class Merchant {
561
+ constructor(kwargs) {
562
+ if (!kwargs) {
563
+ return;
564
+ }
565
+ Object.assign(this, kwargs);
566
+ }
567
+ static fromProto(proto) {
568
+ let m = new Merchant();
569
+ m = Object.assign(m, proto);
570
+ return m;
571
+ }
572
+ toApiJson() {
573
+ const toReturn = {};
574
+ if (typeof this.merchantId !== 'undefined') {
575
+ toReturn['merchantId'] = this.merchantId;
576
+ }
577
+ if (typeof this.address !== 'undefined') {
578
+ toReturn['address'] = this.address;
579
+ }
580
+ if (typeof this.city !== 'undefined') {
581
+ toReturn['city'] = this.city;
582
+ }
583
+ if (typeof this.state !== 'undefined') {
584
+ toReturn['state'] = this.state;
585
+ }
586
+ if (typeof this.country !== 'undefined') {
587
+ toReturn['country'] = this.country;
588
+ }
589
+ if (typeof this.zipCode !== 'undefined') {
590
+ toReturn['zipCode'] = this.zipCode;
591
+ }
592
+ if (typeof this.emailAddress !== 'undefined') {
593
+ toReturn['emailAddress'] = this.emailAddress;
594
+ }
595
+ if (typeof this.phoneNumber !== 'undefined') {
596
+ toReturn['phoneNumber'] = this.phoneNumber;
597
+ }
598
+ if (typeof this.contactName !== 'undefined') {
599
+ toReturn['contactName'] = this.contactName;
600
+ }
601
+ if (typeof this.companyName !== 'undefined') {
602
+ toReturn['companyName'] = this.companyName;
603
+ }
604
+ if (typeof this.autoPostInvoices !== 'undefined') {
605
+ toReturn['autoPostInvoices'] = this.autoPostInvoices;
606
+ }
607
+ if (typeof this.autoChargeInvoices !== 'undefined') {
608
+ toReturn['autoChargeInvoices'] = this.autoChargeInvoices;
609
+ }
610
+ if (typeof this.includeInFinancialRecords !== 'undefined') {
611
+ toReturn['includeInFinancialRecords'] = this.includeInFinancialRecords;
612
+ }
613
+ if (typeof this.additionalEmailAddresses !== 'undefined') {
614
+ toReturn['additionalEmailAddresses'] = this.additionalEmailAddresses;
615
+ }
616
+ if (typeof this.hasAlternativePaymentMethod !== 'undefined') {
617
+ toReturn['hasAlternativePaymentMethod'] = this.hasAlternativePaymentMethod;
618
+ }
619
+ if (typeof this.stripeAccountId !== 'undefined') {
620
+ toReturn['stripeAccountId'] = this.stripeAccountId;
621
+ }
622
+ return toReturn;
623
+ }
624
+ }
625
+ export class RetailConfiguration {
626
+ constructor(kwargs) {
627
+ if (!kwargs) {
628
+ return;
629
+ }
630
+ Object.assign(this, kwargs);
631
+ }
632
+ static fromProto(proto) {
633
+ let m = new RetailConfiguration();
634
+ m = Object.assign(m, proto);
635
+ if (proto.defaultCustomerConfiguration) {
636
+ m.defaultCustomerConfiguration = DefaultCustomerConfiguration.fromProto(proto.defaultCustomerConfiguration);
637
+ }
638
+ if (proto.currencyConversionRate) {
639
+ m.currencyConversionRate = parseInt(proto.currencyConversionRate, 10);
640
+ }
641
+ return m;
642
+ }
643
+ toApiJson() {
644
+ const toReturn = {};
645
+ if (typeof this.merchantId !== 'undefined') {
646
+ toReturn['merchantId'] = this.merchantId;
647
+ }
648
+ if (typeof this.retailGroupId !== 'undefined') {
649
+ toReturn['retailGroupId'] = this.retailGroupId;
650
+ }
651
+ if (typeof this.currencyCode !== 'undefined') {
652
+ toReturn['currencyCode'] = this.currencyCode;
653
+ }
654
+ if (typeof this.defaultCustomerConfiguration !== 'undefined' && this.defaultCustomerConfiguration !== null) {
655
+ toReturn['defaultCustomerConfiguration'] = 'toApiJson' in this.defaultCustomerConfiguration ? this.defaultCustomerConfiguration.toApiJson() : this.defaultCustomerConfiguration;
656
+ }
657
+ if (typeof this.currencyConversionRate !== 'undefined') {
658
+ toReturn['currencyConversionRate'] = this.currencyConversionRate;
659
+ }
660
+ return toReturn;
661
+ }
662
+ }
663
+ export class GetMultiRetailConfigurationsResponseRetailConfigurationsEntry {
664
+ constructor(kwargs) {
665
+ if (!kwargs) {
666
+ return;
667
+ }
668
+ Object.assign(this, kwargs);
669
+ }
670
+ static fromProto(proto) {
671
+ let m = new GetMultiRetailConfigurationsResponseRetailConfigurationsEntry();
672
+ m = Object.assign(m, proto);
673
+ if (proto.value) {
674
+ m.value = RetailConfiguration.fromProto(proto.value);
675
+ }
676
+ return m;
677
+ }
678
+ toApiJson() {
679
+ const toReturn = {};
680
+ if (typeof this.key !== 'undefined') {
681
+ toReturn['key'] = this.key;
682
+ }
683
+ if (typeof this.value !== 'undefined' && this.value !== null) {
684
+ toReturn['value'] = 'toApiJson' in this.value ? this.value.toApiJson() : this.value;
685
+ }
686
+ return toReturn;
687
+ }
688
+ }
689
+ export class SearchMerchantsRequest {
690
+ constructor(kwargs) {
691
+ if (!kwargs) {
692
+ return;
693
+ }
694
+ Object.assign(this, kwargs);
695
+ }
696
+ static fromProto(proto) {
697
+ let m = new SearchMerchantsRequest();
698
+ m = Object.assign(m, proto);
699
+ if (proto.sortBy) {
700
+ m.sortBy = enumStringToValue(e.SearchMerchantsRequestSortBy, proto.sortBy);
701
+ }
702
+ if (proto.sortDirection) {
703
+ m.sortDirection = enumStringToValue(e.SortDirection, proto.sortDirection);
704
+ }
705
+ if (proto.pagingOptions) {
706
+ m.pagingOptions = PagedRequestOptions.fromProto(proto.pagingOptions);
707
+ }
708
+ return m;
709
+ }
710
+ toApiJson() {
711
+ const toReturn = {};
712
+ if (typeof this.searchTerm !== 'undefined') {
713
+ toReturn['searchTerm'] = this.searchTerm;
714
+ }
715
+ if (typeof this.sortBy !== 'undefined') {
716
+ toReturn['sortBy'] = this.sortBy;
717
+ }
718
+ if (typeof this.sortDirection !== 'undefined') {
719
+ toReturn['sortDirection'] = this.sortDirection;
720
+ }
721
+ if (typeof this.pagingOptions !== 'undefined' && this.pagingOptions !== null) {
722
+ toReturn['pagingOptions'] = 'toApiJson' in this.pagingOptions ? this.pagingOptions.toApiJson() : this.pagingOptions;
723
+ }
724
+ return toReturn;
725
+ }
726
+ }
727
+ export class SearchMerchantsResponse {
728
+ constructor(kwargs) {
729
+ if (!kwargs) {
730
+ return;
731
+ }
732
+ Object.assign(this, kwargs);
733
+ }
734
+ static fromProto(proto) {
735
+ let m = new SearchMerchantsResponse();
736
+ m = Object.assign(m, proto);
737
+ if (proto.merchants) {
738
+ m.merchants = proto.merchants.map(Merchant.fromProto);
739
+ }
740
+ if (proto.pagingMetadata) {
741
+ m.pagingMetadata = PagedResponseMetadata.fromProto(proto.pagingMetadata);
742
+ }
743
+ return m;
744
+ }
745
+ toApiJson() {
746
+ const toReturn = {};
747
+ if (typeof this.merchants !== 'undefined' && this.merchants !== null) {
748
+ toReturn['merchants'] = 'toApiJson' in this.merchants ? this.merchants.toApiJson() : this.merchants;
749
+ }
750
+ if (typeof this.pagingMetadata !== 'undefined' && this.pagingMetadata !== null) {
751
+ toReturn['pagingMetadata'] = 'toApiJson' in this.pagingMetadata ? this.pagingMetadata.toApiJson() : this.pagingMetadata;
752
+ }
753
+ return toReturn;
754
+ }
755
+ }
756
+ export class SetAutoChargeInvoicesRequest {
757
+ constructor(kwargs) {
758
+ if (!kwargs) {
759
+ return;
760
+ }
761
+ Object.assign(this, kwargs);
762
+ }
763
+ static fromProto(proto) {
764
+ let m = new SetAutoChargeInvoicesRequest();
765
+ m = Object.assign(m, proto);
766
+ return m;
767
+ }
768
+ toApiJson() {
769
+ const toReturn = {};
770
+ if (typeof this.merchantId !== 'undefined') {
771
+ toReturn['merchantId'] = this.merchantId;
772
+ }
773
+ if (typeof this.autoChargeInvoices !== 'undefined') {
774
+ toReturn['autoChargeInvoices'] = this.autoChargeInvoices;
775
+ }
776
+ return toReturn;
777
+ }
778
+ }
779
+ export class SetAutoPostInvoicesRequest {
780
+ constructor(kwargs) {
781
+ if (!kwargs) {
782
+ return;
783
+ }
784
+ Object.assign(this, kwargs);
785
+ }
786
+ static fromProto(proto) {
787
+ let m = new SetAutoPostInvoicesRequest();
788
+ m = Object.assign(m, proto);
789
+ return m;
790
+ }
791
+ toApiJson() {
792
+ const toReturn = {};
793
+ if (typeof this.merchantId !== 'undefined') {
794
+ toReturn['merchantId'] = this.merchantId;
795
+ }
796
+ if (typeof this.shouldAutoPostInvoices !== 'undefined') {
797
+ toReturn['shouldAutoPostInvoices'] = this.shouldAutoPostInvoices;
798
+ }
799
+ return toReturn;
800
+ }
801
+ }
802
+ export class SetDefaultPaymentCardRequest {
803
+ constructor(kwargs) {
804
+ if (!kwargs) {
805
+ return;
806
+ }
807
+ Object.assign(this, kwargs);
808
+ }
809
+ static fromProto(proto) {
810
+ let m = new SetDefaultPaymentCardRequest();
811
+ m = Object.assign(m, proto);
812
+ return m;
813
+ }
814
+ toApiJson() {
815
+ const toReturn = {};
816
+ if (typeof this.merchantId !== 'undefined') {
817
+ toReturn['merchantId'] = this.merchantId;
818
+ }
819
+ if (typeof this.cardId !== 'undefined') {
820
+ toReturn['cardId'] = this.cardId;
821
+ }
822
+ return toReturn;
823
+ }
824
+ }
825
+ export class SetHasAlternativePaymentMethodRequest {
826
+ constructor(kwargs) {
827
+ if (!kwargs) {
828
+ return;
829
+ }
830
+ Object.assign(this, kwargs);
831
+ }
832
+ static fromProto(proto) {
833
+ let m = new SetHasAlternativePaymentMethodRequest();
834
+ m = Object.assign(m, proto);
835
+ return m;
836
+ }
837
+ toApiJson() {
838
+ const toReturn = {};
839
+ if (typeof this.merchantId !== 'undefined') {
840
+ toReturn['merchantId'] = this.merchantId;
841
+ }
842
+ if (typeof this.hasAlternativePaymentMethod !== 'undefined') {
843
+ toReturn['hasAlternativePaymentMethod'] = this.hasAlternativePaymentMethod;
844
+ }
845
+ return toReturn;
846
+ }
847
+ }
848
+ export class SetIncludeInFinancialRecordsRequest {
849
+ constructor(kwargs) {
850
+ if (!kwargs) {
851
+ return;
852
+ }
853
+ Object.assign(this, kwargs);
854
+ }
855
+ static fromProto(proto) {
856
+ let m = new SetIncludeInFinancialRecordsRequest();
857
+ m = Object.assign(m, proto);
858
+ return m;
859
+ }
860
+ toApiJson() {
861
+ const toReturn = {};
862
+ if (typeof this.merchantId !== 'undefined') {
863
+ toReturn['merchantId'] = this.merchantId;
864
+ }
865
+ if (typeof this.includeInFinancialRecords !== 'undefined') {
866
+ toReturn['includeInFinancialRecords'] = this.includeInFinancialRecords;
867
+ }
868
+ return toReturn;
869
+ }
870
+ }
871
+ export class UpdateMerchantRequest {
872
+ constructor(kwargs) {
873
+ if (!kwargs) {
874
+ return;
875
+ }
876
+ Object.assign(this, kwargs);
877
+ }
878
+ static fromProto(proto) {
879
+ let m = new UpdateMerchantRequest();
880
+ m = Object.assign(m, proto);
881
+ if (proto.includeInFinancialRecords) {
882
+ m.includeInFinancialRecords = UpdateMerchantRequestIncludeInFinancialRecords.fromProto(proto.includeInFinancialRecords);
883
+ }
884
+ return m;
885
+ }
886
+ toApiJson() {
887
+ const toReturn = {};
888
+ if (typeof this.merchantId !== 'undefined') {
889
+ toReturn['merchantId'] = this.merchantId;
890
+ }
891
+ if (typeof this.address !== 'undefined') {
892
+ toReturn['address'] = this.address;
893
+ }
894
+ if (typeof this.city !== 'undefined') {
895
+ toReturn['city'] = this.city;
896
+ }
897
+ if (typeof this.state !== 'undefined') {
898
+ toReturn['state'] = this.state;
899
+ }
900
+ if (typeof this.country !== 'undefined') {
901
+ toReturn['country'] = this.country;
902
+ }
903
+ if (typeof this.zipCode !== 'undefined') {
904
+ toReturn['zipCode'] = this.zipCode;
905
+ }
906
+ if (typeof this.emailAddress !== 'undefined') {
907
+ toReturn['emailAddress'] = this.emailAddress;
908
+ }
909
+ if (typeof this.phoneNumber !== 'undefined') {
910
+ toReturn['phoneNumber'] = this.phoneNumber;
911
+ }
912
+ if (typeof this.contactName !== 'undefined') {
913
+ toReturn['contactName'] = this.contactName;
914
+ }
915
+ if (typeof this.companyName !== 'undefined') {
916
+ toReturn['companyName'] = this.companyName;
917
+ }
918
+ if (typeof this.additionalEmailAddresses !== 'undefined') {
919
+ toReturn['additionalEmailAddresses'] = this.additionalEmailAddresses;
920
+ }
921
+ if (typeof this.includeInFinancialRecords !== 'undefined' && this.includeInFinancialRecords !== null) {
922
+ toReturn['includeInFinancialRecords'] = 'toApiJson' in this.includeInFinancialRecords ? this.includeInFinancialRecords.toApiJson() : this.includeInFinancialRecords;
923
+ }
924
+ if (typeof this.hasAlternativePaymentMethod !== 'undefined') {
925
+ toReturn['hasAlternativePaymentMethod'] = this.hasAlternativePaymentMethod;
926
+ }
927
+ return toReturn;
928
+ }
929
+ }
930
+ export class UpsertDefaultRetailCustomerConfigurationRequest {
931
+ constructor(kwargs) {
932
+ if (!kwargs) {
933
+ return;
934
+ }
935
+ Object.assign(this, kwargs);
936
+ }
937
+ static fromProto(proto) {
938
+ let m = new UpsertDefaultRetailCustomerConfigurationRequest();
939
+ m = Object.assign(m, proto);
940
+ if (proto.defaultCustomerConfiguration) {
941
+ m.defaultCustomerConfiguration = DefaultCustomerConfiguration.fromProto(proto.defaultCustomerConfiguration);
942
+ }
943
+ return m;
944
+ }
945
+ toApiJson() {
946
+ const toReturn = {};
947
+ if (typeof this.merchantId !== 'undefined') {
948
+ toReturn['merchantId'] = this.merchantId;
949
+ }
950
+ if (typeof this.retailGroupId !== 'undefined') {
951
+ toReturn['retailGroupId'] = this.retailGroupId;
952
+ }
953
+ if (typeof this.defaultCustomerConfiguration !== 'undefined' && this.defaultCustomerConfiguration !== null) {
954
+ toReturn['defaultCustomerConfiguration'] = 'toApiJson' in this.defaultCustomerConfiguration ? this.defaultCustomerConfiguration.toApiJson() : this.defaultCustomerConfiguration;
955
+ }
956
+ return toReturn;
957
+ }
958
+ }
959
+ export class UpsertRetailConfigurationRequest {
960
+ constructor(kwargs) {
961
+ if (!kwargs) {
962
+ return;
963
+ }
964
+ Object.assign(this, kwargs);
965
+ }
966
+ static fromProto(proto) {
967
+ let m = new UpsertRetailConfigurationRequest();
968
+ m = Object.assign(m, proto);
969
+ if (proto.currencyConversionRate) {
970
+ m.currencyConversionRate = parseInt(proto.currencyConversionRate, 10);
971
+ }
972
+ return m;
973
+ }
974
+ toApiJson() {
975
+ const toReturn = {};
976
+ if (typeof this.merchantId !== 'undefined') {
977
+ toReturn['merchantId'] = this.merchantId;
978
+ }
979
+ if (typeof this.retailGroupId !== 'undefined') {
980
+ toReturn['retailGroupId'] = this.retailGroupId;
981
+ }
982
+ if (typeof this.currencyCode !== 'undefined') {
983
+ toReturn['currencyCode'] = this.currencyCode;
984
+ }
985
+ if (typeof this.currencyConversionRate !== 'undefined') {
986
+ toReturn['currencyConversionRate'] = this.currencyConversionRate;
987
+ }
988
+ return toReturn;
989
+ }
990
+ }
991
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyY2hhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9iaWxsaW5nX3Nkay9zcmMvbGliL19pbnRlcm5hbC9vYmplY3RzL21lcmNoYW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxLQUFLLENBQUMsTUFBTSxVQUFVLENBQUM7QUFFOUIsTUFBTSxVQUFVLGlCQUFpQixDQUFJLE9BQVksRUFBRSxLQUFhO0lBQzlELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxPQUFPLHlCQUF5QjtJQVlsQyxZQUFZLE1BQTZDO1FBQ3JELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBWkQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztRQUN4QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztTQUFDO1FBQzFELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQVNELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDcEYsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sMkJBQTJCO0lBWXBDLFlBQVksTUFBK0M7UUFDdkQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFYRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO1FBQzFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FBQztRQUMxRixJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sNEJBQTRCO0lBVXJDLFlBQVksTUFBZ0Q7UUFDeEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFYRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO1FBQzNDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FBQztRQUNwRixJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUFDO1FBQ3hFLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxxQkFBcUI7SUFzQjlCLFlBQVksTUFBeUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFaRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQ3BDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyx5QkFBeUIsRUFBRTtZQUFDLENBQUMsQ0FBQyx5QkFBeUIsR0FBRyw4Q0FBOEMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FBQztRQUMvSixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQUM7UUFDckUsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FBQztRQUN4RSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7U0FBQztRQUM3RixJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUFDO1FBQzFGLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQUM7UUFDMUYsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FBQztRQUMxRixJQUFJLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztTQUFDO1FBQ2pJLElBQUksT0FBTyxJQUFJLENBQUMseUJBQXlCLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMseUJBQWlDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztTQUFDO1FBQ3JSLElBQUksT0FBTyxJQUFJLENBQUMsMkJBQTJCLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1NBQUM7UUFDMUksT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDRCQUE0QjtJQVlyQyxZQUFZLE1BQWdEO1FBQ3hELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBWkQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztRQUMzQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUFDO1FBQ3RFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQVNELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQUM7UUFDbkcsSUFBSSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FBQztRQUN6RyxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFTM0IsWUFBWSxNQUFzQztRQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVhELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDakMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQVNELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxtQkFBbUI7SUFVNUIsWUFBWSxNQUF1QztRQUMvQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVpELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDbEMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FBQztRQUN0RSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsUUFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQy9LLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxtQ0FBbUM7SUFVNUMsWUFBWSxNQUF1RDtRQUMvRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVhELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLG1DQUFtQyxFQUFFLENBQUM7UUFDbEQsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQVNELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7U0FBQztRQUNuRyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sb0NBQW9DO0lBVTdDLFlBQVksTUFBd0Q7UUFDaEUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFaRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxvQ0FBb0MsRUFBRSxDQUFDO1FBQ25ELENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxvQkFBb0IsRUFBRTtZQUFDLENBQUMsQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUFDO1FBQ3ZOLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQVNELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLG9CQUE0QixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7U0FBQztRQUN2UCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sNEJBQTRCO0lBU3JDLFlBQVksTUFBZ0Q7UUFDeEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFYRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO1FBQzNDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sNkJBQTZCO0lBWXRDLFlBQVksTUFBaUQ7UUFDekQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFiRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSw2QkFBNkIsRUFBRSxDQUFDO1FBQzVDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtZQUFDLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQUM7UUFDOUYsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBYSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUFDO1FBQzdGLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQVNELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUFDO1FBQy9HLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDakYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHVCQUF1QjtJQVNoQyxZQUFZLE1BQTJDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBWEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUN0QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBU0QsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHdCQUF3QjtJQWVqQyxZQUFZLE1BQTRDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBZEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUN2QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUN6RSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsRUFBRTtZQUFDLENBQUMsQ0FBQywrQkFBK0IsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztTQUFDO1FBQ2pJLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRTtZQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FBQztRQUNyRixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsUUFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQy9LLElBQUksT0FBTyxJQUFJLENBQUMsK0JBQStCLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQywrQkFBK0IsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsaUNBQWlDLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsK0JBQXVDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQztTQUFDO1FBQ3pULElBQUksT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7U0FBQztRQUNuRyxJQUFJLE9BQU8sSUFBSSxDQUFDLGVBQWUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQUM7UUFDdEcsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHVCQUF1QjtJQVNoQyxZQUFZLE1BQTJDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBWEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUN0QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBU0QsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHdCQUF3QjtJQVVqQyxZQUFZLE1BQTRDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBWkQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUN2QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUN6RSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsUUFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUFDO1FBQy9LLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxzQkFBc0I7SUFVL0IsWUFBWSxNQUEwQztRQUNsRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVhELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDckMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQVNELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQUM7UUFDakYsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHVCQUF1QjtJQVVoQyxZQUFZLE1BQTJDO1FBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBWkQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUN0QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUFDO1FBQ3BFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQVNELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxNQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUNuSyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sOENBQThDO0lBU3ZELFlBQVksTUFBa0U7UUFDMUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFYRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSw4Q0FBOEMsRUFBRSxDQUFDO1FBQzdELENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyx5QkFBeUIsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7U0FBQztRQUNwSSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sOENBQThDO0lBU3ZELFlBQVksTUFBa0U7UUFDMUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFYRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSw4Q0FBOEMsRUFBRSxDQUFDO1FBQzdELENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyx5QkFBeUIsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7U0FBQztRQUNwSSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sd0JBQXdCO0lBV2pDLFlBQVksTUFBNEM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFaRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFBQyxDQUFDLENBQUMsYUFBYSxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7U0FBQztRQUNoRyxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxhQUFxQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1NBQUM7UUFDN00sT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHlCQUF5QjtJQVlsQyxZQUFZLE1BQTZDO1FBQ3JELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBYkQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztRQUN4QyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7U0FBQztRQUMzRSxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7WUFBQyxDQUFDLENBQUMsY0FBYyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7U0FBQztRQUNyRyxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsT0FBZSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDekssSUFBSSxPQUFPLElBQUksQ0FBQyxjQUFjLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxjQUFzQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQUM7UUFDbk4sT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLFFBQVE7SUF3QmpCLFlBQVksTUFBNEI7UUFDcEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFYRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN2QixDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBU0QsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUFDO1FBQ3JFLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQUM7UUFDeEUsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FBQztRQUM5RSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQUM7UUFDN0YsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FBQztRQUMxRixJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUFDO1FBQzFGLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQUM7UUFDMUYsSUFBSSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FBQztRQUN6RyxJQUFJLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUFDO1FBQy9HLElBQUksT0FBTyxJQUFJLENBQUMseUJBQXlCLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1NBQUM7UUFDcEksSUFBSSxPQUFPLElBQUksQ0FBQyx3QkFBd0IsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUM7U0FBQztRQUNqSSxJQUFJLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQztTQUFDO1FBQzFJLElBQUksT0FBTyxJQUFJLENBQUMsZUFBZSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7U0FBQztRQUN0RyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sbUJBQW1CO0lBZTVCLFlBQVksTUFBdUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFiRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQ2xDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyw0QkFBNEIsRUFBRTtZQUFDLENBQUMsQ0FBQyw0QkFBNEIsR0FBRyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7U0FBQztRQUN0SixJQUFJLEtBQUssQ0FBQyxzQkFBc0IsRUFBRTtZQUFDLENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQUM7UUFDMUcsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBU0QsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7U0FBQztRQUNoRyxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUFDO1FBQzdGLElBQUksT0FBTyxJQUFJLENBQUMsNEJBQTRCLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyw0QkFBNEIsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsOEJBQThCLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsNEJBQW9DLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztTQUFDO1FBQ3ZTLElBQUksT0FBTyxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1NBQUM7UUFDM0gsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDZEQUE2RDtJQVd0RSxZQUFZLE1BQWlGO1FBQ3pGLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBWkQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksNkRBQTZELEVBQUUsQ0FBQztRQUM1RSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQUM7UUFDeEUsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBU0QsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQUM7UUFDbEUsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsS0FBYSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQUM7UUFDN0osT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHNCQUFzQjtJQWUvQixZQUFZLE1BQTBDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBZEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztRQUNyQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBaUMsQ0FBQyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUFDO1FBQy9ILElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQWtCLENBQUMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQUM7UUFDdEgsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQUM7UUFDaEcsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBU0QsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUMzRSxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUFDO1FBQ2hHLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRTtZQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLGFBQXFCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7U0FBQztRQUM3TSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sdUJBQXVCO0lBWWhDLFlBQVksTUFBMkM7UUFDbkQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFiRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ3RDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUFDO1FBQzdFLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUFDO1FBQ3JHLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQVNELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxTQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQUM7UUFDckwsSUFBSSxPQUFPLElBQUksQ0FBQyxjQUFjLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxjQUFzQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQUM7UUFDbk4sT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDRCQUE0QjtJQVVyQyxZQUFZLE1BQWdEO1FBQ3hELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBWEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksNEJBQTRCLEVBQUUsQ0FBQztRQUMzQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBU0QsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7U0FBQztRQUMvRyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sMEJBQTBCO0lBVW5DLFlBQVksTUFBOEM7UUFDdEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFYRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO1FBQ3pDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztTQUFDO1FBQzNILE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyw0QkFBNEI7SUFVckMsWUFBWSxNQUFnRDtRQUN4RCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQVhELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLDRCQUE0QixFQUFFLENBQUM7UUFDM0MsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQVNELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUFDO1FBQ3ZGLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQUM7UUFDM0UsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLHFDQUFxQztJQVU5QyxZQUFZLE1BQXlEO1FBQ2pFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBWEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUkscUNBQXFDLEVBQUUsQ0FBQztRQUNwRCxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBU0QsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQywyQkFBMkIsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUM7U0FBQztRQUMxSSxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sbUNBQW1DO0lBVTVDLFlBQVksTUFBdUQ7UUFDL0QsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFYRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxtQ0FBbUMsRUFBRSxDQUFDO1FBQ2xELENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztTQUFDO1FBQ3BJLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxxQkFBcUI7SUFzQjlCLFlBQVksTUFBeUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFaRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQ3BDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyx5QkFBeUIsRUFBRTtZQUFDLENBQUMsQ0FBQyx5QkFBeUIsR0FBRyw4Q0FBOEMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FBQztRQUMvSixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFTRCxTQUFTO1FBQ0wsTUFBTSxRQUFRLEdBRVYsRUFBRSxDQUFDO1FBRVAsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7U0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQUM7UUFDckUsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FBQztRQUN4RSxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUFDO1FBQzlFLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQUM7UUFDOUUsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7U0FBQztRQUM3RixJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUFDO1FBQzFGLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQUM7UUFDMUYsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FBQztRQUMxRixJQUFJLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztTQUFDO1FBQ2pJLElBQUksT0FBTyxJQUFJLENBQUMseUJBQXlCLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsR0FBRyxXQUFXLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMseUJBQWlDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztTQUFDO1FBQ3JSLElBQUksT0FBTyxJQUFJLENBQUMsMkJBQTJCLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1NBQUM7UUFDMUksT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLCtDQUErQztJQVl4RCxZQUFZLE1BQW1FO1FBQzNFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBWkQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLElBQUksK0NBQStDLEVBQUUsQ0FBQztRQUM5RCxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsNEJBQTRCLEVBQUU7WUFBQyxDQUFDLENBQUMsNEJBQTRCLEdBQUcsNEJBQTRCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1NBQUM7UUFDdEosT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBU0QsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7U0FBQztRQUNoRyxJQUFJLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEtBQUssSUFBSSxFQUFFO1lBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLDRCQUFvQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUM7U0FBQztRQUN2UyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sZ0NBQWdDO0lBYXpDLFlBQVksTUFBb0Q7UUFDNUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFaRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEdBQUcsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1FBQy9DLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLEtBQUssQ0FBQyxzQkFBc0IsRUFBRTtZQUFDLENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQUM7UUFDMUcsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBU0QsU0FBUztRQUNMLE1BQU0sUUFBUSxHQUVWLEVBQUUsQ0FBQztRQUVQLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQUM7UUFDdkYsSUFBSSxPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7U0FBQztRQUNoRyxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxXQUFXLEVBQUU7WUFBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUFDO1FBQzdGLElBQUksT0FBTyxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxFQUFFO1lBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1NBQUM7UUFDM0gsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBDb2RlIGdlbmVyYXRlZCBieSBzZGtnZW5cbi8vIERPIE5PVCBFRElUIS5cbi8vXG4vLyBPYmplY3RzLlxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5pbXBvcnQgKiBhcyBpIGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQmFsYW5jZSB9IGZyb20gJy4vYmFsYW5jZSc7XG5pbXBvcnQgeyBQYWdlZFJlcXVlc3RPcHRpb25zLCBQYWdlZFJlc3BvbnNlTWV0YWRhdGEgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBSZXRhaWxQYXlvdXQgfSBmcm9tICcuL3BheW91dCc7XG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBDaGFyZ2VTYWxlc0ludm9pY2VSZXF1ZXN0IGltcGxlbWVudHMgaS5DaGFyZ2VTYWxlc0ludm9pY2VSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgaW52b2ljZUlkOiBzdHJpbmc7XG4gICAgYW1vdW50OiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDaGFyZ2VTYWxlc0ludm9pY2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ2hhcmdlU2FsZXNJbnZvaWNlUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5hbW91bnQpIHttLmFtb3VudCA9IHBhcnNlSW50KHByb3RvLmFtb3VudCwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DaGFyZ2VTYWxlc0ludm9pY2VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmludm9pY2VJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZUlkJ10gPSB0aGlzLmludm9pY2VJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbW91bnQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Ftb3VudCddID0gdGhpcy5hbW91bnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29ubmVjdFN0cmlwZUFjY291bnRSZXF1ZXN0IGltcGxlbWVudHMgaS5Db25uZWN0U3RyaXBlQWNjb3VudFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGNvdW50cnlDb2RlOiBzdHJpbmc7XG4gICAgZmFpbHVyZVVybDogc3RyaW5nO1xuICAgIHN1Y2Nlc3NVcmw6IHN0cmluZztcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDb25uZWN0U3RyaXBlQWNjb3VudFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDb25uZWN0U3RyaXBlQWNjb3VudFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNvbm5lY3RTdHJpcGVBY2NvdW50UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvdW50cnlDb2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb3VudHJ5Q29kZSddID0gdGhpcy5jb3VudHJ5Q29kZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mYWlsdXJlVXJsICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydmYWlsdXJlVXJsJ10gPSB0aGlzLmZhaWx1cmVVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VjY2Vzc1VybCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc3VjY2Vzc1VybCddID0gdGhpcy5zdWNjZXNzVXJsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25uZWN0U3RyaXBlQWNjb3VudFJlc3BvbnNlIGltcGxlbWVudHMgaS5Db25uZWN0U3RyaXBlQWNjb3VudFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBzdHJpcGVVcmw6IHN0cmluZztcbiAgICBlcnJvcjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ29ubmVjdFN0cmlwZUFjY291bnRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENvbm5lY3RTdHJpcGVBY2NvdW50UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNvbm5lY3RTdHJpcGVBY2NvdW50UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdHJpcGVVcmwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0cmlwZVVybCddID0gdGhpcy5zdHJpcGVVcmw7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZXJyb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2Vycm9yJ10gPSB0aGlzLmVycm9yO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZU1lcmNoYW50UmVxdWVzdCBpbXBsZW1lbnRzIGkuQ3JlYXRlTWVyY2hhbnRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIGNpdHk6IHN0cmluZztcbiAgICBzdGF0ZTogc3RyaW5nO1xuICAgIGNvdW50cnk6IHN0cmluZztcbiAgICB6aXBDb2RlOiBzdHJpbmc7XG4gICAgZW1haWxBZGRyZXNzOiBzdHJpbmc7XG4gICAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgICBjb250YWN0TmFtZTogc3RyaW5nO1xuICAgIGNvbXBhbnlOYW1lOiBzdHJpbmc7XG4gICAgYWRkaXRpb25hbEVtYWlsQWRkcmVzc2VzOiBzdHJpbmdbXTtcbiAgICBpbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzOiBDcmVhdGVNZXJjaGFudFJlcXVlc3RJbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzO1xuICAgIGhhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZU1lcmNoYW50UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZU1lcmNoYW50UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzKSB7bS5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzID0gQ3JlYXRlTWVyY2hhbnRSZXF1ZXN0SW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkcy5mcm9tUHJvdG8ocHJvdG8uaW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkcyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkNyZWF0ZU1lcmNoYW50UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRyZXNzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRyZXNzJ10gPSB0aGlzLmFkZHJlc3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2l0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2l0eSddID0gdGhpcy5jaXR5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXRlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0ZSddID0gdGhpcy5zdGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb3VudHJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb3VudHJ5J10gPSB0aGlzLmNvdW50cnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuemlwQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnemlwQ29kZSddID0gdGhpcy56aXBDb2RlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtYWlsQWRkcmVzcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW1haWxBZGRyZXNzJ10gPSB0aGlzLmVtYWlsQWRkcmVzczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5waG9uZU51bWJlciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGhvbmVOdW1iZXInXSA9IHRoaXMucGhvbmVOdW1iZXI7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udGFjdE5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnRhY3ROYW1lJ10gPSB0aGlzLmNvbnRhY3ROYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBhbnlOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb21wYW55TmFtZSddID0gdGhpcy5jb21wYW55TmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRpdGlvbmFsRW1haWxBZGRyZXNzZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZGl0aW9uYWxFbWFpbEFkZHJlc3NlcyddID0gdGhpcy5hZGRpdGlvbmFsRW1haWxBZGRyZXNzZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2luY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyA/ICh0aGlzLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2QgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZCddID0gdGhpcy5oYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2Q7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbiBpbXBsZW1lbnRzIGkuRGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbkludGVyZmFjZSB7XG4gICAgZ2VuZXJhdGVNZXRob2Q6IHN0cmluZztcbiAgICBjb2xsZWN0aW9uTWV0aG9kOiBzdHJpbmc7XG4gICAgaW52b2ljZURheTogbnVtYmVyO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogRGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbiB7XG4gICAgICAgIGxldCBtID0gbmV3IERlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uaW52b2ljZURheSkge20uaW52b2ljZURheSA9IHBhcnNlSW50KHByb3RvLmludm9pY2VEYXksIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuRGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbkludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdlbmVyYXRlTWV0aG9kICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydnZW5lcmF0ZU1ldGhvZCddID0gdGhpcy5nZW5lcmF0ZU1ldGhvZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb2xsZWN0aW9uTWV0aG9kICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb2xsZWN0aW9uTWV0aG9kJ10gPSB0aGlzLmNvbGxlY3Rpb25NZXRob2Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW52b2ljZURheSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW52b2ljZURheSddID0gdGhpcy5pbnZvaWNlRGF5O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE1lcmNoYW50UmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TWVyY2hhbnRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNZXJjaGFudFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNZXJjaGFudFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE1lcmNoYW50UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNZXJjaGFudFJlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNZXJjaGFudFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudDogTWVyY2hhbnQ7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNZXJjaGFudFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0TWVyY2hhbnRSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5tZXJjaGFudCkge20ubWVyY2hhbnQgPSBNZXJjaGFudC5mcm9tUHJvdG8ocHJvdG8ubWVyY2hhbnQpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNZXJjaGFudFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWVyY2hhbnQgIT09IG51bGwpIHt0b1JldHVyblsnbWVyY2hhbnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVyY2hhbnQgPyAodGhpcy5tZXJjaGFudCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXJjaGFudDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRNdWx0aVJldGFpbENvbmZpZ3VyYXRpb25zUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0TXVsdGlSZXRhaWxDb25maWd1cmF0aW9uc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICByZXRhaWxHcm91cElkczogc3RyaW5nW107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aVJldGFpbENvbmZpZ3VyYXRpb25zUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpUmV0YWlsQ29uZmlndXJhdGlvbnNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVJldGFpbENvbmZpZ3VyYXRpb25zUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXRhaWxHcm91cElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmV0YWlsR3JvdXBJZHMnXSA9IHRoaXMucmV0YWlsR3JvdXBJZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0TXVsdGlSZXRhaWxDb25maWd1cmF0aW9uc1Jlc3BvbnNlIGltcGxlbWVudHMgaS5HZXRNdWx0aVJldGFpbENvbmZpZ3VyYXRpb25zUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHJldGFpbENvbmZpZ3VyYXRpb25zOiB7W2tleTogc3RyaW5nXTogUmV0YWlsQ29uZmlndXJhdGlvbn07XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRNdWx0aVJldGFpbENvbmZpZ3VyYXRpb25zUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXRNdWx0aVJldGFpbENvbmZpZ3VyYXRpb25zUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucmV0YWlsQ29uZmlndXJhdGlvbnMpIHttLnJldGFpbENvbmZpZ3VyYXRpb25zID0gT2JqZWN0LmtleXMocHJvdG8ucmV0YWlsQ29uZmlndXJhdGlvbnMpLnJlZHVjZTxhbnk+KChvYmosIGspID0+IHsgb2JqW2tdID0gUmV0YWlsQ29uZmlndXJhdGlvbi5mcm9tUHJvdG8ocHJvdG8ucmV0YWlsQ29uZmlndXJhdGlvbnNba10pOyByZXR1cm4gb2JqOyB9LCB7fSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE11bHRpUmV0YWlsQ29uZmlndXJhdGlvbnNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJldGFpbENvbmZpZ3VyYXRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJldGFpbENvbmZpZ3VyYXRpb25zICE9PSBudWxsKSB7dG9SZXR1cm5bJ3JldGFpbENvbmZpZ3VyYXRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnJldGFpbENvbmZpZ3VyYXRpb25zID8gKHRoaXMucmV0YWlsQ29uZmlndXJhdGlvbnMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucmV0YWlsQ29uZmlndXJhdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0T3V0c3RhbmRpbmdCYWxhbmNlUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0T3V0c3RhbmRpbmdCYWxhbmNlUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0T3V0c3RhbmRpbmdCYWxhbmNlUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE91dHN0YW5kaW5nQmFsYW5jZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE91dHN0YW5kaW5nQmFsYW5jZVJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0T3V0c3RhbmRpbmdCYWxhbmNlUmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldE91dHN0YW5kaW5nQmFsYW5jZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBvdXRzdGFuZGluZ0JhbGFuY2U6IG51bWJlcjtcbiAgICBjdXJyZW5jeTogZS5DdXJyZW5jeTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldE91dHN0YW5kaW5nQmFsYW5jZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0T3V0c3RhbmRpbmdCYWxhbmNlUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ub3V0c3RhbmRpbmdCYWxhbmNlKSB7bS5vdXRzdGFuZGluZ0JhbGFuY2UgPSBwYXJzZUludChwcm90by5vdXRzdGFuZGluZ0JhbGFuY2UsIDEwKTt9XG4gICAgICAgIGlmIChwcm90by5jdXJyZW5jeSkge20uY3VycmVuY3kgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkN1cnJlbmN5PihlLkN1cnJlbmN5LCBwcm90by5jdXJyZW5jeSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldE91dHN0YW5kaW5nQmFsYW5jZVJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3V0c3RhbmRpbmdCYWxhbmNlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydvdXRzdGFuZGluZ0JhbGFuY2UnXSA9IHRoaXMub3V0c3RhbmRpbmdCYWxhbmNlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnJlbmN5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJyZW5jeSddID0gdGhpcy5jdXJyZW5jeTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRQYXlvdXRTdW1tYXJ5UmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0UGF5b3V0U3VtbWFyeVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFBheW91dFN1bW1hcnlSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UGF5b3V0U3VtbWFyeVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFBheW91dFN1bW1hcnlSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFBheW91dFN1bW1hcnlSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0UGF5b3V0U3VtbWFyeVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBiYWxhbmNlczogQmFsYW5jZVtdO1xuICAgIG5leHRJblRyYW5zaXRQYXlvdXRFeHBlY3RlZERhdGU6IERhdGU7XG4gICAgcGF5b3V0SW50ZXJ2YWw6IHN0cmluZztcbiAgICBwYXlvdXREZWxheURheXM6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFBheW91dFN1bW1hcnlSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldFBheW91dFN1bW1hcnlSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5iYWxhbmNlcykge20uYmFsYW5jZXMgPSBwcm90by5iYWxhbmNlcy5tYXAoQmFsYW5jZS5mcm9tUHJvdG8pO31cbiAgICAgICAgaWYgKHByb3RvLm5leHRJblRyYW5zaXRQYXlvdXRFeHBlY3RlZERhdGUpIHttLm5leHRJblRyYW5zaXRQYXlvdXRFeHBlY3RlZERhdGUgPSBuZXcgRGF0ZShwcm90by5uZXh0SW5UcmFuc2l0UGF5b3V0RXhwZWN0ZWREYXRlKTt9XG4gICAgICAgIGlmIChwcm90by5wYXlvdXREZWxheURheXMpIHttLnBheW91dERlbGF5RGF5cyA9IHBhcnNlSW50KHByb3RvLnBheW91dERlbGF5RGF5cywgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRQYXlvdXRTdW1tYXJ5UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5iYWxhbmNlcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5iYWxhbmNlcyAhPT0gbnVsbCkge3RvUmV0dXJuWydiYWxhbmNlcyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5iYWxhbmNlcyA/ICh0aGlzLmJhbGFuY2VzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmJhbGFuY2VzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRJblRyYW5zaXRQYXlvdXRFeHBlY3RlZERhdGUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubmV4dEluVHJhbnNpdFBheW91dEV4cGVjdGVkRGF0ZSAhPT0gbnVsbCkge3RvUmV0dXJuWyduZXh0SW5UcmFuc2l0UGF5b3V0RXhwZWN0ZWREYXRlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm5leHRJblRyYW5zaXRQYXlvdXRFeHBlY3RlZERhdGUgPyAodGhpcy5uZXh0SW5UcmFuc2l0UGF5b3V0RXhwZWN0ZWREYXRlIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm5leHRJblRyYW5zaXRQYXlvdXRFeHBlY3RlZERhdGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGF5b3V0SW50ZXJ2YWwgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3BheW91dEludGVydmFsJ10gPSB0aGlzLnBheW91dEludGVydmFsO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBheW91dERlbGF5RGF5cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGF5b3V0RGVsYXlEYXlzJ10gPSB0aGlzLnBheW91dERlbGF5RGF5czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRSZXRhaWxCYWxhbmNlUmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0UmV0YWlsQmFsYW5jZVJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFJldGFpbEJhbGFuY2VSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UmV0YWlsQmFsYW5jZVJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFJldGFpbEJhbGFuY2VSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldFJldGFpbEJhbGFuY2VSZXNwb25zZSBpbXBsZW1lbnRzIGkuR2V0UmV0YWlsQmFsYW5jZVJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBiYWxhbmNlczogQmFsYW5jZVtdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0UmV0YWlsQmFsYW5jZVJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UmV0YWlsQmFsYW5jZVJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmJhbGFuY2VzKSB7bS5iYWxhbmNlcyA9IHByb3RvLmJhbGFuY2VzLm1hcChCYWxhbmNlLmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFJldGFpbEJhbGFuY2VSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJhbGFuY2VzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmJhbGFuY2VzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2JhbGFuY2VzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmJhbGFuY2VzID8gKHRoaXMuYmFsYW5jZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYmFsYW5jZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UmV0YWlsUGF5b3V0UmVxdWVzdCBpbXBsZW1lbnRzIGkuR2V0UmV0YWlsUGF5b3V0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIHBheW91dElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBHZXRSZXRhaWxQYXlvdXRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UmV0YWlsUGF5b3V0UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuR2V0UmV0YWlsUGF5b3V0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXlvdXRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGF5b3V0SWQnXSA9IHRoaXMucGF5b3V0SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UmV0YWlsUGF5b3V0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldFJldGFpbFBheW91dFJlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBwYXlvdXQ6IFJldGFpbFBheW91dDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldFJldGFpbFBheW91dFJlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0UmV0YWlsUGF5b3V0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ucGF5b3V0KSB7bS5wYXlvdXQgPSBSZXRhaWxQYXlvdXQuZnJvbVByb3RvKHByb3RvLnBheW91dCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldFJldGFpbFBheW91dFJlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGF5b3V0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBheW91dCAhPT0gbnVsbCkge3RvUmV0dXJuWydwYXlvdXQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMucGF5b3V0ID8gKHRoaXMucGF5b3V0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBheW91dDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVNZXJjaGFudFJlcXVlc3RJbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzIGltcGxlbWVudHMgaS5VcGRhdGVNZXJjaGFudFJlcXVlc3RJbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzSW50ZXJmYWNlIHtcbiAgICBpbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlTWVyY2hhbnRSZXF1ZXN0SW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZU1lcmNoYW50UmVxdWVzdEluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZU1lcmNoYW50UmVxdWVzdEluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHNJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydpbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzJ10gPSB0aGlzLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlTWVyY2hhbnRSZXF1ZXN0SW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyBpbXBsZW1lbnRzIGkuQ3JlYXRlTWVyY2hhbnRSZXF1ZXN0SW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkc0ludGVyZmFjZSB7XG4gICAgaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkczogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZU1lcmNoYW50UmVxdWVzdEluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVNZXJjaGFudFJlcXVlc3RJbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVNZXJjaGFudFJlcXVlc3RJbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyddID0gdGhpcy5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RSZXRhaWxQYXlvdXRzUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdFJldGFpbFBheW91dHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgcGFnaW5nT3B0aW9uczogUGFnZWRSZXF1ZXN0T3B0aW9ucztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3RSZXRhaWxQYXlvdXRzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3RSZXRhaWxQYXlvdXRzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYWdpbmdPcHRpb25zKSB7bS5wYWdpbmdPcHRpb25zID0gUGFnZWRSZXF1ZXN0T3B0aW9ucy5mcm9tUHJvdG8ocHJvdG8ucGFnaW5nT3B0aW9ucyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RSZXRhaWxQYXlvdXRzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09IG51bGwpIHt0b1JldHVyblsncGFnaW5nT3B0aW9ucyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdPcHRpb25zID8gKHRoaXMucGFnaW5nT3B0aW9ucyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYWdpbmdPcHRpb25zO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3RSZXRhaWxQYXlvdXRzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkxpc3RSZXRhaWxQYXlvdXRzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIHBheW91dHM6IFJldGFpbFBheW91dFtdO1xuICAgIHBhZ2luZ01ldGFkYXRhOiBQYWdlZFJlc3BvbnNlTWV0YWRhdGE7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0UmV0YWlsUGF5b3V0c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdFJldGFpbFBheW91dHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYXlvdXRzKSB7bS5wYXlvdXRzID0gcHJvdG8ucGF5b3V0cy5tYXAoUmV0YWlsUGF5b3V0LmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nTWV0YWRhdGEpIHttLnBhZ2luZ01ldGFkYXRhID0gUGFnZWRSZXNwb25zZU1ldGFkYXRhLmZyb21Qcm90byhwcm90by5wYWdpbmdNZXRhZGF0YSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3RSZXRhaWxQYXlvdXRzUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYXlvdXRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBheW91dHMgIT09IG51bGwpIHt0b1JldHVyblsncGF5b3V0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYXlvdXRzID8gKHRoaXMucGF5b3V0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wYXlvdXRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnBhZ2luZ01ldGFkYXRhICE9PSBudWxsKSB7dG9SZXR1cm5bJ3BhZ2luZ01ldGFkYXRhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ01ldGFkYXRhID8gKHRoaXMucGFnaW5nTWV0YWRhdGEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucGFnaW5nTWV0YWRhdGE7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWVyY2hhbnQgaW1wbGVtZW50cyBpLk1lcmNoYW50SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIGNpdHk6IHN0cmluZztcbiAgICBzdGF0ZTogc3RyaW5nO1xuICAgIGNvdW50cnk6IHN0cmluZztcbiAgICB6aXBDb2RlOiBzdHJpbmc7XG4gICAgZW1haWxBZGRyZXNzOiBzdHJpbmc7XG4gICAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgICBjb250YWN0TmFtZTogc3RyaW5nO1xuICAgIGNvbXBhbnlOYW1lOiBzdHJpbmc7XG4gICAgYXV0b1Bvc3RJbnZvaWNlczogYm9vbGVhbjtcbiAgICBhdXRvQ2hhcmdlSW52b2ljZXM6IGJvb2xlYW47XG4gICAgaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkczogYm9vbGVhbjtcbiAgICBhZGRpdGlvbmFsRW1haWxBZGRyZXNzZXM6IHN0cmluZ1tdO1xuICAgIGhhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZDogYm9vbGVhbjtcbiAgICBzdHJpcGVBY2NvdW50SWQ6IHN0cmluZztcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IE1lcmNoYW50IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTWVyY2hhbnQoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk1lcmNoYW50SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZHJlc3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZHJlc3MnXSA9IHRoaXMuYWRkcmVzczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jaXR5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjaXR5J10gPSB0aGlzLmNpdHk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3N0YXRlJ10gPSB0aGlzLnN0YXRlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvdW50cnkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvdW50cnknXSA9IHRoaXMuY291bnRyeTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy56aXBDb2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWyd6aXBDb2RlJ10gPSB0aGlzLnppcENvZGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZW1haWxBZGRyZXNzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydlbWFpbEFkZHJlc3MnXSA9IHRoaXMuZW1haWxBZGRyZXNzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBob25lTnVtYmVyICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydwaG9uZU51bWJlciddID0gdGhpcy5waG9uZU51bWJlcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb250YWN0TmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY29udGFjdE5hbWUnXSA9IHRoaXMuY29udGFjdE5hbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29tcGFueU5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbXBhbnlOYW1lJ10gPSB0aGlzLmNvbXBhbnlOYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmF1dG9Qb3N0SW52b2ljZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2F1dG9Qb3N0SW52b2ljZXMnXSA9IHRoaXMuYXV0b1Bvc3RJbnZvaWNlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hdXRvQ2hhcmdlSW52b2ljZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2F1dG9DaGFyZ2VJbnZvaWNlcyddID0gdGhpcy5hdXRvQ2hhcmdlSW52b2ljZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyddID0gdGhpcy5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFkZGl0aW9uYWxFbWFpbEFkZHJlc3NlcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWRkaXRpb25hbEVtYWlsQWRkcmVzc2VzJ10gPSB0aGlzLmFkZGl0aW9uYWxFbWFpbEFkZHJlc3Nlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2QgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZCddID0gdGhpcy5oYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2Q7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RyaXBlQWNjb3VudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdHJpcGVBY2NvdW50SWQnXSA9IHRoaXMuc3RyaXBlQWNjb3VudElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJldGFpbENvbmZpZ3VyYXRpb24gaW1wbGVtZW50cyBpLlJldGFpbENvbmZpZ3VyYXRpb25JbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICByZXRhaWxHcm91cElkOiBzdHJpbmc7XG4gICAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gICAgZGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbjogRGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbjtcbiAgICBjdXJyZW5jeUNvbnZlcnNpb25SYXRlOiBudW1iZXI7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBSZXRhaWxDb25maWd1cmF0aW9uIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgUmV0YWlsQ29uZmlndXJhdGlvbigpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uKSB7bS5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uID0gRGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbi5mcm9tUHJvdG8ocHJvdG8uZGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8uY3VycmVuY3lDb252ZXJzaW9uUmF0ZSkge20uY3VycmVuY3lDb252ZXJzaW9uUmF0ZSA9IHBhcnNlSW50KHByb3RvLmN1cnJlbmN5Q29udmVyc2lvblJhdGUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuUmV0YWlsQ29uZmlndXJhdGlvbkludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXRhaWxHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydyZXRhaWxHcm91cElkJ10gPSB0aGlzLnJldGFpbEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVuY3lDb2RlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJyZW5jeUNvZGUnXSA9IHRoaXMuY3VycmVuY3lDb2RlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydkZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24gPyAodGhpcy5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY3VycmVuY3lDb252ZXJzaW9uUmF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VycmVuY3lDb252ZXJzaW9uUmF0ZSddID0gdGhpcy5jdXJyZW5jeUNvbnZlcnNpb25SYXRlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE11bHRpUmV0YWlsQ29uZmlndXJhdGlvbnNSZXNwb25zZVJldGFpbENvbmZpZ3VyYXRpb25zRW50cnkgaW1wbGVtZW50cyBpLkdldE11bHRpUmV0YWlsQ29uZmlndXJhdGlvbnNSZXNwb25zZVJldGFpbENvbmZpZ3VyYXRpb25zRW50cnlJbnRlcmZhY2Uge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBSZXRhaWxDb25maWd1cmF0aW9uO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0TXVsdGlSZXRhaWxDb25maWd1cmF0aW9uc1Jlc3BvbnNlUmV0YWlsQ29uZmlndXJhdGlvbnNFbnRyeSB7XG4gICAgICAgIGxldCBtID0gbmV3IEdldE11bHRpUmV0YWlsQ29uZmlndXJhdGlvbnNSZXNwb25zZVJldGFpbENvbmZpZ3VyYXRpb25zRW50cnkoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8udmFsdWUpIHttLnZhbHVlID0gUmV0YWlsQ29uZmlndXJhdGlvbi5mcm9tUHJvdG8ocHJvdG8udmFsdWUpO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXRNdWx0aVJldGFpbENvbmZpZ3VyYXRpb25zUmVzcG9uc2VSZXRhaWxDb25maWd1cmF0aW9uc0VudHJ5SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMua2V5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydrZXknXSA9IHRoaXMua2V5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnZhbHVlICE9PSBudWxsKSB7dG9SZXR1cm5bJ3ZhbHVlJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnZhbHVlID8gKHRoaXMudmFsdWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudmFsdWU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VhcmNoTWVyY2hhbnRzUmVxdWVzdCBpbXBsZW1lbnRzIGkuU2VhcmNoTWVyY2hhbnRzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgc2VhcmNoVGVybTogc3RyaW5nO1xuICAgIHNvcnRCeTogZS5TZWFyY2hNZXJjaGFudHNSZXF1ZXN0U29ydEJ5O1xuICAgIHNvcnREaXJlY3Rpb246IGUuU29ydERpcmVjdGlvbjtcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2VhcmNoTWVyY2hhbnRzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFNlYXJjaE1lcmNoYW50c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uc29ydEJ5KSB7bS5zb3J0QnkgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlNlYXJjaE1lcmNoYW50c1JlcXVlc3RTb3J0Qnk+KGUuU2VhcmNoTWVyY2hhbnRzUmVxdWVzdFNvcnRCeSwgcHJvdG8uc29ydEJ5KTt9XG4gICAgICAgIGlmIChwcm90by5zb3J0RGlyZWN0aW9uKSB7bS5zb3J0RGlyZWN0aW9uID0gZW51bVN0cmluZ1RvVmFsdWU8ZS5Tb3J0RGlyZWN0aW9uPihlLlNvcnREaXJlY3Rpb24sIHByb3RvLnNvcnREaXJlY3Rpb24pO31cbiAgICAgICAgaWYgKHByb3RvLnBhZ2luZ09wdGlvbnMpIHttLnBhZ2luZ09wdGlvbnMgPSBQYWdlZFJlcXVlc3RPcHRpb25zLmZyb21Qcm90byhwcm90by5wYWdpbmdPcHRpb25zKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2VhcmNoTWVyY2hhbnRzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlYXJjaFRlcm0gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlYXJjaFRlcm0nXSA9IHRoaXMuc2VhcmNoVGVybTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb3J0QnkgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvcnRCeSddID0gdGhpcy5zb3J0Qnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29ydERpcmVjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29ydERpcmVjdGlvbiddID0gdGhpcy5zb3J0RGlyZWN0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhZ2luZ09wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucGFnaW5nT3B0aW9ucyAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdPcHRpb25zJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBhZ2luZ09wdGlvbnMgPyAodGhpcy5wYWdpbmdPcHRpb25zIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ09wdGlvbnM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VhcmNoTWVyY2hhbnRzUmVzcG9uc2UgaW1wbGVtZW50cyBpLlNlYXJjaE1lcmNoYW50c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudHM6IE1lcmNoYW50W107XG4gICAgcGFnaW5nTWV0YWRhdGE6IFBhZ2VkUmVzcG9uc2VNZXRhZGF0YTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNlYXJjaE1lcmNoYW50c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2VhcmNoTWVyY2hhbnRzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWVyY2hhbnRzKSB7bS5tZXJjaGFudHMgPSBwcm90by5tZXJjaGFudHMubWFwKE1lcmNoYW50LmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8ucGFnaW5nTWV0YWRhdGEpIHttLnBhZ2luZ01ldGFkYXRhID0gUGFnZWRSZXNwb25zZU1ldGFkYXRhLmZyb21Qcm90byhwcm90by5wYWdpbmdNZXRhZGF0YSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNlYXJjaE1lcmNoYW50c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lcmNoYW50cyAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXJjaGFudHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWVyY2hhbnRzID8gKHRoaXMubWVyY2hhbnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1lcmNoYW50czt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wYWdpbmdNZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydwYWdpbmdNZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wYWdpbmdNZXRhZGF0YSA/ICh0aGlzLnBhZ2luZ01ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnBhZ2luZ01ldGFkYXRhO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldEF1dG9DaGFyZ2VJbnZvaWNlc1JlcXVlc3QgaW1wbGVtZW50cyBpLlNldEF1dG9DaGFyZ2VJbnZvaWNlc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBhdXRvQ2hhcmdlSW52b2ljZXM6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZXRBdXRvQ2hhcmdlSW52b2ljZXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2V0QXV0b0NoYXJnZUludm9pY2VzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2V0QXV0b0NoYXJnZUludm9pY2VzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hdXRvQ2hhcmdlSW52b2ljZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2F1dG9DaGFyZ2VJbnZvaWNlcyddID0gdGhpcy5hdXRvQ2hhcmdlSW52b2ljZXM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0QXV0b1Bvc3RJbnZvaWNlc1JlcXVlc3QgaW1wbGVtZW50cyBpLlNldEF1dG9Qb3N0SW52b2ljZXNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgc2hvdWxkQXV0b1Bvc3RJbnZvaWNlczogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNldEF1dG9Qb3N0SW52b2ljZXNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2V0QXV0b1Bvc3RJbnZvaWNlc1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlNldEF1dG9Qb3N0SW52b2ljZXNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNob3VsZEF1dG9Qb3N0SW52b2ljZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Nob3VsZEF1dG9Qb3N0SW52b2ljZXMnXSA9IHRoaXMuc2hvdWxkQXV0b1Bvc3RJbnZvaWNlczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXREZWZhdWx0UGF5bWVudENhcmRSZXF1ZXN0IGltcGxlbWVudHMgaS5TZXREZWZhdWx0UGF5bWVudENhcmRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgY2FyZElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBTZXREZWZhdWx0UGF5bWVudENhcmRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgU2V0RGVmYXVsdFBheW1lbnRDYXJkUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2V0RGVmYXVsdFBheW1lbnRDYXJkUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYXJkSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NhcmRJZCddID0gdGhpcy5jYXJkSWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0SGFzQWx0ZXJuYXRpdmVQYXltZW50TWV0aG9kUmVxdWVzdCBpbXBsZW1lbnRzIGkuU2V0SGFzQWx0ZXJuYXRpdmVQYXltZW50TWV0aG9kUmVxdWVzdEludGVyZmFjZSB7XG4gICAgbWVyY2hhbnRJZDogc3RyaW5nO1xuICAgIGhhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFNldEhhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZXRIYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2RSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5TZXRIYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2RSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWVyY2hhbnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbWVyY2hhbnRJZCddID0gdGhpcy5tZXJjaGFudElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaGFzQWx0ZXJuYXRpdmVQYXltZW50TWV0aG9kJ10gPSB0aGlzLmhhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZDt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRJbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzUmVxdWVzdCBpbXBsZW1lbnRzIGkuU2V0SW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkc1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1lcmNoYW50SWQ6IHN0cmluZztcbiAgICBpbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogU2V0SW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkc1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBTZXRJbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuU2V0SW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkc1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyddID0gdGhpcy5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZU1lcmNoYW50UmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlTWVyY2hhbnRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIGNpdHk6IHN0cmluZztcbiAgICBzdGF0ZTogc3RyaW5nO1xuICAgIGNvdW50cnk6IHN0cmluZztcbiAgICB6aXBDb2RlOiBzdHJpbmc7XG4gICAgZW1haWxBZGRyZXNzOiBzdHJpbmc7XG4gICAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgICBjb250YWN0TmFtZTogc3RyaW5nO1xuICAgIGNvbXBhbnlOYW1lOiBzdHJpbmc7XG4gICAgYWRkaXRpb25hbEVtYWlsQWRkcmVzc2VzOiBzdHJpbmdbXTtcbiAgICBpbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzOiBVcGRhdGVNZXJjaGFudFJlcXVlc3RJbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzO1xuICAgIGhhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZDogYm9vbGVhbjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZU1lcmNoYW50UmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwZGF0ZU1lcmNoYW50UmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzKSB7bS5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzID0gVXBkYXRlTWVyY2hhbnRSZXF1ZXN0SW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkcy5mcm9tUHJvdG8ocHJvdG8uaW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkcyk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZU1lcmNoYW50UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lcmNoYW50SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ21lcmNoYW50SWQnXSA9IHRoaXMubWVyY2hhbnRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRyZXNzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhZGRyZXNzJ10gPSB0aGlzLmFkZHJlc3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2l0eSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY2l0eSddID0gdGhpcy5jaXR5O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0YXRlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzdGF0ZSddID0gdGhpcy5zdGF0ZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jb3VudHJ5ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb3VudHJ5J10gPSB0aGlzLmNvdW50cnk7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuemlwQ29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnemlwQ29kZSddID0gdGhpcy56aXBDb2RlO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtYWlsQWRkcmVzcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZW1haWxBZGRyZXNzJ10gPSB0aGlzLmVtYWlsQWRkcmVzczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5waG9uZU51bWJlciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGhvbmVOdW1iZXInXSA9IHRoaXMucGhvbmVOdW1iZXI7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29udGFjdE5hbWUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2NvbnRhY3ROYW1lJ10gPSB0aGlzLmNvbnRhY3ROYW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBhbnlOYW1lICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjb21wYW55TmFtZSddID0gdGhpcy5jb21wYW55TmFtZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hZGRpdGlvbmFsRW1haWxBZGRyZXNzZXMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FkZGl0aW9uYWxFbWFpbEFkZHJlc3NlcyddID0gdGhpcy5hZGRpdGlvbmFsRW1haWxBZGRyZXNzZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5pbmNsdWRlSW5GaW5hbmNpYWxSZWNvcmRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2luY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3JkcyA/ICh0aGlzLmluY2x1ZGVJbkZpbmFuY2lhbFJlY29yZHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuaW5jbHVkZUluRmluYW5jaWFsUmVjb3Jkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2QgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc0FsdGVybmF0aXZlUGF5bWVudE1ldGhvZCddID0gdGhpcy5oYXNBbHRlcm5hdGl2ZVBheW1lbnRNZXRob2Q7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBzZXJ0RGVmYXVsdFJldGFpbEN1c3RvbWVyQ29uZmlndXJhdGlvblJlcXVlc3QgaW1wbGVtZW50cyBpLlVwc2VydERlZmF1bHRSZXRhaWxDdXN0b21lckNvbmZpZ3VyYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgcmV0YWlsR3JvdXBJZDogc3RyaW5nO1xuICAgIGRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb246IERlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb247XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBVcHNlcnREZWZhdWx0UmV0YWlsQ3VzdG9tZXJDb25maWd1cmF0aW9uUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IFVwc2VydERlZmF1bHRSZXRhaWxDdXN0b21lckNvbmZpZ3VyYXRpb25SZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24pIHttLmRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24gPSBEZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uLmZyb21Qcm90byhwcm90by5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBzZXJ0RGVmYXVsdFJldGFpbEN1c3RvbWVyQ29uZmlndXJhdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmV0YWlsR3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmV0YWlsR3JvdXBJZCddID0gdGhpcy5yZXRhaWxHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZGVmYXVsdEN1c3RvbWVyQ29uZmlndXJhdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydkZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb24gPyAodGhpcy5kZWZhdWx0Q3VzdG9tZXJDb25maWd1cmF0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRlZmF1bHRDdXN0b21lckNvbmZpZ3VyYXRpb247fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBzZXJ0UmV0YWlsQ29uZmlndXJhdGlvblJlcXVlc3QgaW1wbGVtZW50cyBpLlVwc2VydFJldGFpbENvbmZpZ3VyYXRpb25SZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBtZXJjaGFudElkOiBzdHJpbmc7XG4gICAgcmV0YWlsR3JvdXBJZDogc3RyaW5nO1xuICAgIGN1cnJlbmN5Q29kZTogc3RyaW5nO1xuICAgIGN1cnJlbmN5Q29udmVyc2lvblJhdGU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwc2VydFJldGFpbENvbmZpZ3VyYXRpb25SZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBzZXJ0UmV0YWlsQ29uZmlndXJhdGlvblJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uY3VycmVuY3lDb252ZXJzaW9uUmF0ZSkge20uY3VycmVuY3lDb252ZXJzaW9uUmF0ZSA9IHBhcnNlSW50KHByb3RvLmN1cnJlbmN5Q29udmVyc2lvblJhdGUsIDEwKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuVXBzZXJ0UmV0YWlsQ29uZmlndXJhdGlvblJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXJjaGFudElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtZXJjaGFudElkJ10gPSB0aGlzLm1lcmNoYW50SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucmV0YWlsR3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncmV0YWlsR3JvdXBJZCddID0gdGhpcy5yZXRhaWxHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnJlbmN5Q29kZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3VycmVuY3lDb2RlJ10gPSB0aGlzLmN1cnJlbmN5Q29kZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jdXJyZW5jeUNvbnZlcnNpb25SYXRlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydjdXJyZW5jeUNvbnZlcnNpb25SYXRlJ10gPSB0aGlzLmN1cnJlbmN5Q29udmVyc2lvblJhdGU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iXX0=