@senior-gestao-empresarial/erpx-components 0.0.0-develop-3bab051d

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 (382) hide show
  1. package/bundles/senior-gestao-empresarial-erpx-components.umd.js +37665 -0
  2. package/bundles/senior-gestao-empresarial-erpx-components.umd.js.map +1 -0
  3. package/bundles/senior-gestao-empresarial-erpx-components.umd.min.js +17 -0
  4. package/bundles/senior-gestao-empresarial-erpx-components.umd.min.js.map +1 -0
  5. package/components/breadcrumb/breadcrumb.component.d.ts +21 -0
  6. package/components/breadcrumb/breadcrumb.module.d.ts +2 -0
  7. package/components/breadcrumb/index.d.ts +2 -0
  8. package/components/focus/focus.service.d.ts +4 -0
  9. package/components/lote-serie/erp-lote-serie.component.d.ts +183 -0
  10. package/components/lote-serie/erp-lote-serie.module.d.ts +2 -0
  11. package/components/lote-serie/erp-lote-serie.service.d.ts +137 -0
  12. package/components/lote-serie/index.d.ts +2 -0
  13. package/components/rateio-editor/erp-rateio-editor.component.d.ts +202 -0
  14. package/components/rateio-editor/erp-rateio-editor.converter.d.ts +18 -0
  15. package/components/rateio-editor/erp-rateio-editor.module.d.ts +2 -0
  16. package/components/rateio-editor/erp-rateio-editor.service.d.ts +17 -0
  17. package/components/rateio-editor/erp-rateio-editor.types.d.ts +171 -0
  18. package/components/rateio-editor/index.d.ts +4 -0
  19. package/components/resumo/erp-resumo.component.d.ts +17 -0
  20. package/components/resumo/erp-resumo.module.d.ts +2 -0
  21. package/components/resumo/erp-resumo.service.d.ts +2 -0
  22. package/components/resumo/index.d.ts +2 -0
  23. package/components/tributos/calculators/effective-tax-rate-calculator.d.ts +34 -0
  24. package/components/tributos/calculators/gross-amount-calculator.d.ts +20 -0
  25. package/components/tributos/calculators/tax-amount-calculator.d.ts +54 -0
  26. package/components/tributos/erp-tributos.component.d.ts +215 -0
  27. package/components/tributos/erp-tributos.module.d.ts +2 -0
  28. package/components/tributos/erp-tributos.service.d.ts +10 -0
  29. package/components/tributos/erp-tributos.types.d.ts +286 -0
  30. package/components/tributos/index.d.ts +12 -0
  31. package/components/tributos/mappings/enum-tip-imp-cst-mapping.d.ts +2 -0
  32. package/components/tributos/rules/calculation/registries/calculation-rules-registries/calculation-rules.registry.d.ts +15 -0
  33. package/components/tributos/rules/calculation/registries/calculation-rules-registries/incoming-invoice-calculation-rules.registry.d.ts +28 -0
  34. package/components/tributos/rules/calculation/registries/calculation-rules-registries/outgoing-invoice-calculation-rules.registry.d.ts +30 -0
  35. package/components/tributos/rules/calculation/registries/calculation-rules-registries/purchase-order-calculation-rules.registry.d.ts +22 -0
  36. package/components/tributos/rules/calculation/registries/calculation-rules-registries/sale-order-calculation-rules.registry.d.ts +22 -0
  37. package/components/tributos/rules/calculation/rules/apply-net-value-to-document-calculation-rule.d.ts +5 -0
  38. package/components/tributos/rules/calculation/rules/assessment-period-calculation-rule.d.ts +5 -0
  39. package/components/tributos/rules/calculation/rules/effective-tax-rate-calculation-rule.d.ts +8 -0
  40. package/components/tributos/rules/calculation/rules/gross-amount-calculation-rule.d.ts +8 -0
  41. package/components/tributos/rules/calculation/rules/manual-tax-calculation-rule.d.ts +5 -0
  42. package/components/tributos/rules/calculation/rules/tax-amount-calculation-rule.d.ts +8 -0
  43. package/components/tributos/rules/calculation/rules/tax-calculation-type-calculation-rule.d.ts +5 -0
  44. package/components/tributos/rules/calculation/rules/tax-classification-calculation-rule.d.ts +6 -0
  45. package/components/tributos/rules/calculation/rules/tax-rate-calculation-rule.d.ts +5 -0
  46. package/components/tributos/rules/calculation/rules/tax-situation-calculation-rule.d.ts +5 -0
  47. package/components/tributos/rules/calculation/rules/taxable-base-calculation-rule.d.ts +8 -0
  48. package/components/tributos/rules/rules.service.d.ts +19 -0
  49. package/components/tributos/rules/status/registries/incoming-invoice-status-rules.registry.d.ts +16 -0
  50. package/components/tributos/rules/status/registries/outgoing-invoice-status-rules.registry.d.ts +12 -0
  51. package/components/tributos/rules/status/registries/purchase-order-status-rules.registry.d.ts +12 -0
  52. package/components/tributos/rules/status/registries/sale-order-status-rules.registry.d.ts +8 -0
  53. package/components/tributos/rules/status/registries/status-rules.registry.d.ts +15 -0
  54. package/components/tributos/rules/status/rules/apply-net-value-to-document-status-rule.d.ts +5 -0
  55. package/components/tributos/rules/status/rules/tax-classification-status-rule.d.ts +5 -0
  56. package/components/tributos/rules/status/rules/tax-rate-status-rule.d.ts +5 -0
  57. package/components/tributos/rules/status/rules/taxable-base-status-rule.d.ts +5 -0
  58. package/components/tributos/rules/types/available-fields.d.ts +2 -0
  59. package/components/tributos/rules/types/available-taxes.d.ts +1 -0
  60. package/components/tributos/rules/types/field-calculation-rule-mapping.d.ts +6 -0
  61. package/components/tributos/rules/types/field-rule-mapping.d.ts +6 -0
  62. package/components/tributos/rules/types/field-status-rule-mapping.d.ts +6 -0
  63. package/components/tributos/rules/types/rule-payload.d.ts +9 -0
  64. package/components/tributos/rules/types/schemas/incoming-invoice.schema.d.ts +235 -0
  65. package/components/tributos/rules/types/schemas/outgoing-invoice.schema.d.ts +349 -0
  66. package/components/tributos/rules/types/schemas/purchase-order.schema.d.ts +26 -0
  67. package/components/tributos/rules/types/schemas/sale-order.schema.d.ts +131 -0
  68. package/components/tributos/rules/types/strategies-by-document.d.ts +12 -0
  69. package/components/tributos/rules/types/strategies.d.ts +4 -0
  70. package/components/tributos/rules/types/tax-rule.d.ts +4 -0
  71. package/components/tributos/rules/validation/registries/incoming-invoice-validation-rules.registry.d.ts +20 -0
  72. package/components/tributos/rules/validation/registries/outgoing-invoice-validation-rules.registry.d.ts +22 -0
  73. package/components/tributos/rules/validation/registries/purchase-order-validation-rules.registry.d.ts +14 -0
  74. package/components/tributos/rules/validation/registries/sale-order-validation-rules.registry.d.ts +14 -0
  75. package/components/tributos/rules/validation/registries/validation-rules.registry.d.ts +15 -0
  76. package/components/tributos/rules/validation/rules/required/apply-net-value-to-document-required-validation-rule.d.ts +5 -0
  77. package/components/tributos/rules/validation/rules/required/assessment-period-required-validation-rule.d.ts +5 -0
  78. package/components/tributos/rules/validation/rules/required/tax-amount-required-validation-rule.d.ts +5 -0
  79. package/components/tributos/rules/validation/rules/required/tax-classification-required-validation-rule.d.ts +5 -0
  80. package/components/tributos/rules/validation/rules/required/tax-rate-required-validation-rule.d.ts +6 -0
  81. package/components/tributos/rules/validation/rules/required/tax-situation-required-validation-rule.d.ts +6 -0
  82. package/components/tributos/rules/validation/rules/required/taxable-base-required-validation-rule.d.ts +6 -0
  83. package/components/tributos/services/tax-rounding.service.d.ts +5 -0
  84. package/components/tributos/stores/tax.store.d.ts +10 -0
  85. package/components/tributos/tax-reform-utilities.d.ts +36 -0
  86. package/components/tributos/types/context.d.ts +7 -0
  87. package/components/tributos/types/controllership-incoming-invoice-context.d.ts +5 -0
  88. package/components/tributos/types/controllership-incoming-invoice.d.ts +3 -0
  89. package/components/tributos/types/controllership-outgoing-invoice-context.d.ts +5 -0
  90. package/components/tributos/types/controllership-outgoing-invoice.d.ts +3 -0
  91. package/components/tributos/types/credit-invoice-type.d.ts +1 -0
  92. package/components/tributos/types/debit-invoice-type.d.ts +1 -0
  93. package/components/tributos/types/group.d.ts +6 -0
  94. package/components/tributos/types/incoming-invoice-context.d.ts +5 -0
  95. package/components/tributos/types/incoming-invoice-item.d.ts +4 -0
  96. package/components/tributos/types/incoming-invoice-type.d.ts +1 -0
  97. package/components/tributos/types/incoming-invoice.d.ts +11 -0
  98. package/components/tributos/types/item-type.d.ts +1 -0
  99. package/components/tributos/types/outgoing-Invoice.d.ts +11 -0
  100. package/components/tributos/types/outgoing-invoice-context.d.ts +5 -0
  101. package/components/tributos/types/outgoing-invoice-item.d.ts +4 -0
  102. package/components/tributos/types/outgoing-invoice-type.d.ts +1 -0
  103. package/components/tributos/types/purchase-order-context.d.ts +5 -0
  104. package/components/tributos/types/purchase-order-type.d.ts +1 -0
  105. package/components/tributos/types/purchase-order.d.ts +8 -0
  106. package/components/tributos/types/sale-order-context.d.ts +5 -0
  107. package/components/tributos/types/sale-order-type.d.ts +1 -0
  108. package/components/tributos/types/sale-order.d.ts +8 -0
  109. package/components/tributos/types/tax.d.ts +8 -0
  110. package/components/utils/breakpoints.d.ts +10 -0
  111. package/components/utils/export-utils.d.ts +6 -0
  112. package/components/utils/index.d.ts +3 -0
  113. package/components/utils/loading-context.d.ts +7 -0
  114. package/components/utils/utils.d.ts +4 -0
  115. package/core/entities/entity-service.d.ts +32 -0
  116. package/core/entities/quantidade-disponivel-demanda/quantidade-disponivel-demanda-dto.d.ts +36 -0
  117. package/core/entities/quantidade-disponivel-demanda/quantidade-disponivel-demanda.d.ts +40 -0
  118. package/core/entities/quantidade-disponivel-demanda/quantidade-disponivel-demanda.module.d.ts +2 -0
  119. package/core/entities/quantidade-disponivel-demanda/quantidade-disponivel-demanda.service.d.ts +11 -0
  120. package/core/enums/enum-classificacao-tributaria.d.ts +4 -0
  121. package/core/enums/enum-tipo-calculo-imposto.d.ts +5 -0
  122. package/core/enums/enum-tipo-documento-parametros.d.ts +7 -0
  123. package/core/enums/enum-tipo-documento.d.ts +10 -0
  124. package/core/enums/erpx-com-processo-faturamento-backend/enum-indicativo-padrao.d.ts +5 -0
  125. package/core/enums/erpx-cpl-imp-cadastros-backend/enum-indicativo-padrao.d.ts +8 -0
  126. package/esm2015/components/breadcrumb/breadcrumb.component.js +86 -0
  127. package/esm2015/components/breadcrumb/breadcrumb.module.js +17 -0
  128. package/esm2015/components/breadcrumb/index.js +3 -0
  129. package/esm2015/components/focus/focus.service.js +32 -0
  130. package/esm2015/components/lote-serie/erp-lote-serie.component.js +1772 -0
  131. package/esm2015/components/lote-serie/erp-lote-serie.module.js +47 -0
  132. package/esm2015/components/lote-serie/erp-lote-serie.service.js +94 -0
  133. package/esm2015/components/lote-serie/index.js +3 -0
  134. package/esm2015/components/rateio-editor/erp-rateio-editor.component.js +794 -0
  135. package/esm2015/components/rateio-editor/erp-rateio-editor.converter.js +52 -0
  136. package/esm2015/components/rateio-editor/erp-rateio-editor.module.js +40 -0
  137. package/esm2015/components/rateio-editor/erp-rateio-editor.service.js +49 -0
  138. package/esm2015/components/rateio-editor/erp-rateio-editor.types.js +5 -0
  139. package/esm2015/components/rateio-editor/index.js +4 -0
  140. package/esm2015/components/resumo/erp-resumo.component.js +19 -0
  141. package/esm2015/components/resumo/erp-resumo.module.js +25 -0
  142. package/esm2015/components/resumo/erp-resumo.service.js +13 -0
  143. package/esm2015/components/resumo/index.js +2 -0
  144. package/esm2015/components/tributos/calculators/effective-tax-rate-calculator.js +53 -0
  145. package/esm2015/components/tributos/calculators/gross-amount-calculator.js +37 -0
  146. package/esm2015/components/tributos/calculators/tax-amount-calculator.js +87 -0
  147. package/esm2015/components/tributos/erp-tributos.component.js +5176 -0
  148. package/esm2015/components/tributos/erp-tributos.module.js +33 -0
  149. package/esm2015/components/tributos/erp-tributos.service.js +23 -0
  150. package/esm2015/components/tributos/erp-tributos.types.js +268 -0
  151. package/esm2015/components/tributos/index.js +4 -0
  152. package/esm2015/components/tributos/mappings/enum-tip-imp-cst-mapping.js +33 -0
  153. package/esm2015/components/tributos/rules/calculation/registries/calculation-rules-registries/calculation-rules.registry.js +45 -0
  154. package/esm2015/components/tributos/rules/calculation/registries/calculation-rules-registries/incoming-invoice-calculation-rules.registry.js +3102 -0
  155. package/esm2015/components/tributos/rules/calculation/registries/calculation-rules-registries/outgoing-invoice-calculation-rules.registry.js +4516 -0
  156. package/esm2015/components/tributos/rules/calculation/registries/calculation-rules-registries/purchase-order-calculation-rules.registry.js +294 -0
  157. package/esm2015/components/tributos/rules/calculation/registries/calculation-rules-registries/sale-order-calculation-rules.registry.js +1464 -0
  158. package/esm2015/components/tributos/rules/calculation/rules/apply-net-value-to-document-calculation-rule.js +48 -0
  159. package/esm2015/components/tributos/rules/calculation/rules/assessment-period-calculation-rule.js +55 -0
  160. package/esm2015/components/tributos/rules/calculation/rules/effective-tax-rate-calculation-rule.js +83 -0
  161. package/esm2015/components/tributos/rules/calculation/rules/gross-amount-calculation-rule.js +74 -0
  162. package/esm2015/components/tributos/rules/calculation/rules/manual-tax-calculation-rule.js +72 -0
  163. package/esm2015/components/tributos/rules/calculation/rules/tax-amount-calculation-rule.js +244 -0
  164. package/esm2015/components/tributos/rules/calculation/rules/tax-calculation-type-calculation-rule.js +74 -0
  165. package/esm2015/components/tributos/rules/calculation/rules/tax-classification-calculation-rule.js +170 -0
  166. package/esm2015/components/tributos/rules/calculation/rules/tax-rate-calculation-rule.js +100 -0
  167. package/esm2015/components/tributos/rules/calculation/rules/tax-situation-calculation-rule.js +124 -0
  168. package/esm2015/components/tributos/rules/calculation/rules/taxable-base-calculation-rule.js +292 -0
  169. package/esm2015/components/tributos/rules/rules.service.js +61 -0
  170. package/esm2015/components/tributos/rules/status/registries/incoming-invoice-status-rules.registry.js +1076 -0
  171. package/esm2015/components/tributos/rules/status/registries/outgoing-invoice-status-rules.registry.js +1317 -0
  172. package/esm2015/components/tributos/rules/status/registries/purchase-order-status-rules.registry.js +62 -0
  173. package/esm2015/components/tributos/rules/status/registries/sale-order-status-rules.registry.js +18 -0
  174. package/esm2015/components/tributos/rules/status/registries/status-rules.registry.js +45 -0
  175. package/esm2015/components/tributos/rules/status/rules/apply-net-value-to-document-status-rule.js +39 -0
  176. package/esm2015/components/tributos/rules/status/rules/tax-classification-status-rule.js +94 -0
  177. package/esm2015/components/tributos/rules/status/rules/tax-rate-status-rule.js +61 -0
  178. package/esm2015/components/tributos/rules/status/rules/taxable-base-status-rule.js +65 -0
  179. package/esm2015/components/tributos/rules/types/available-fields.js +1 -0
  180. package/esm2015/components/tributos/rules/types/available-taxes.js +1 -0
  181. package/esm2015/components/tributos/rules/types/field-calculation-rule-mapping.js +1 -0
  182. package/esm2015/components/tributos/rules/types/field-rule-mapping.js +1 -0
  183. package/esm2015/components/tributos/rules/types/field-status-rule-mapping.js +1 -0
  184. package/esm2015/components/tributos/rules/types/rule-payload.js +1 -0
  185. package/esm2015/components/tributos/rules/types/schemas/incoming-invoice.schema.js +1816 -0
  186. package/esm2015/components/tributos/rules/types/schemas/outgoing-invoice.schema.js +2750 -0
  187. package/esm2015/components/tributos/rules/types/schemas/purchase-order.schema.js +150 -0
  188. package/esm2015/components/tributos/rules/types/schemas/sale-order.schema.js +879 -0
  189. package/esm2015/components/tributos/rules/types/strategies-by-document.js +1 -0
  190. package/esm2015/components/tributos/rules/types/strategies.js +1 -0
  191. package/esm2015/components/tributos/rules/types/tax-rule.js +1 -0
  192. package/esm2015/components/tributos/rules/validation/registries/incoming-invoice-validation-rules.registry.js +3606 -0
  193. package/esm2015/components/tributos/rules/validation/registries/outgoing-invoice-validation-rules.registry.js +5452 -0
  194. package/esm2015/components/tributos/rules/validation/registries/purchase-order-validation-rules.registry.js +270 -0
  195. package/esm2015/components/tributos/rules/validation/registries/sale-order-validation-rules.registry.js +1392 -0
  196. package/esm2015/components/tributos/rules/validation/registries/validation-rules.registry.js +45 -0
  197. package/esm2015/components/tributos/rules/validation/rules/required/apply-net-value-to-document-required-validation-rule.js +73 -0
  198. package/esm2015/components/tributos/rules/validation/rules/required/assessment-period-required-validation-rule.js +78 -0
  199. package/esm2015/components/tributos/rules/validation/rules/required/tax-amount-required-validation-rule.js +902 -0
  200. package/esm2015/components/tributos/rules/validation/rules/required/tax-classification-required-validation-rule.js +401 -0
  201. package/esm2015/components/tributos/rules/validation/rules/required/tax-rate-required-validation-rule.js +719 -0
  202. package/esm2015/components/tributos/rules/validation/rules/required/tax-situation-required-validation-rule.js +300 -0
  203. package/esm2015/components/tributos/rules/validation/rules/required/taxable-base-required-validation-rule.js +717 -0
  204. package/esm2015/components/tributos/services/tax-rounding.service.js +18 -0
  205. package/esm2015/components/tributos/stores/tax.store.js +19 -0
  206. package/esm2015/components/tributos/tax-reform-utilities.js +243 -0
  207. package/esm2015/components/tributos/types/context.js +1 -0
  208. package/esm2015/components/tributos/types/controllership-incoming-invoice-context.js +1 -0
  209. package/esm2015/components/tributos/types/controllership-incoming-invoice.js +1 -0
  210. package/esm2015/components/tributos/types/controllership-outgoing-invoice-context.js +1 -0
  211. package/esm2015/components/tributos/types/controllership-outgoing-invoice.js +1 -0
  212. package/esm2015/components/tributos/types/credit-invoice-type.js +1 -0
  213. package/esm2015/components/tributos/types/debit-invoice-type.js +1 -0
  214. package/esm2015/components/tributos/types/group.js +1 -0
  215. package/esm2015/components/tributos/types/incoming-invoice-context.js +1 -0
  216. package/esm2015/components/tributos/types/incoming-invoice-item.js +1 -0
  217. package/esm2015/components/tributos/types/incoming-invoice-type.js +1 -0
  218. package/esm2015/components/tributos/types/incoming-invoice.js +1 -0
  219. package/esm2015/components/tributos/types/item-type.js +1 -0
  220. package/esm2015/components/tributos/types/outgoing-Invoice.js +1 -0
  221. package/esm2015/components/tributos/types/outgoing-invoice-context.js +1 -0
  222. package/esm2015/components/tributos/types/outgoing-invoice-item.js +1 -0
  223. package/esm2015/components/tributos/types/outgoing-invoice-type.js +1 -0
  224. package/esm2015/components/tributos/types/purchase-order-context.js +1 -0
  225. package/esm2015/components/tributos/types/purchase-order-type.js +1 -0
  226. package/esm2015/components/tributos/types/purchase-order.js +1 -0
  227. package/esm2015/components/tributos/types/sale-order-context.js +1 -0
  228. package/esm2015/components/tributos/types/sale-order-type.js +1 -0
  229. package/esm2015/components/tributos/types/sale-order.js +1 -0
  230. package/esm2015/components/tributos/types/tax.js +2 -0
  231. package/esm2015/components/utils/breakpoints.js +11 -0
  232. package/esm2015/components/utils/export-utils.js +71 -0
  233. package/esm2015/components/utils/index.js +4 -0
  234. package/esm2015/components/utils/loading-context.js +20 -0
  235. package/esm2015/components/utils/utils.js +18 -0
  236. package/esm2015/core/entities/entity-service.js +91 -0
  237. package/esm2015/core/entities/quantidade-disponivel-demanda/quantidade-disponivel-demanda-dto.js +1 -0
  238. package/esm2015/core/entities/quantidade-disponivel-demanda/quantidade-disponivel-demanda.js +62 -0
  239. package/esm2015/core/entities/quantidade-disponivel-demanda/quantidade-disponivel-demanda.module.js +24 -0
  240. package/esm2015/core/entities/quantidade-disponivel-demanda/quantidade-disponivel-demanda.service.js +24 -0
  241. package/esm2015/core/enums/enum-classificacao-tributaria.js +6 -0
  242. package/esm2015/core/enums/enum-tipo-calculo-imposto.js +7 -0
  243. package/esm2015/core/enums/enum-tipo-documento-parametros.js +9 -0
  244. package/esm2015/core/enums/enum-tipo-documento.js +12 -0
  245. package/esm2015/core/enums/erpx-com-processo-faturamento-backend/enum-indicativo-padrao.js +7 -0
  246. package/esm2015/core/enums/erpx-cpl-imp-cadastros-backend/enum-indicativo-padrao.js +10 -0
  247. package/esm2015/locale/fallback.js +56 -0
  248. package/esm2015/public-api.js +8 -0
  249. package/esm2015/senior-gestao-empresarial-erpx-components.js +58 -0
  250. package/esm5/components/breadcrumb/breadcrumb.component.js +91 -0
  251. package/esm5/components/breadcrumb/breadcrumb.module.js +20 -0
  252. package/esm5/components/breadcrumb/index.js +3 -0
  253. package/esm5/components/focus/focus.service.js +35 -0
  254. package/esm5/components/lote-serie/erp-lote-serie.component.js +1830 -0
  255. package/esm5/components/lote-serie/erp-lote-serie.module.js +50 -0
  256. package/esm5/components/lote-serie/erp-lote-serie.service.js +96 -0
  257. package/esm5/components/lote-serie/index.js +3 -0
  258. package/esm5/components/rateio-editor/erp-rateio-editor.component.js +861 -0
  259. package/esm5/components/rateio-editor/erp-rateio-editor.converter.js +68 -0
  260. package/esm5/components/rateio-editor/erp-rateio-editor.module.js +43 -0
  261. package/esm5/components/rateio-editor/erp-rateio-editor.service.js +51 -0
  262. package/esm5/components/rateio-editor/erp-rateio-editor.types.js +5 -0
  263. package/esm5/components/rateio-editor/index.js +4 -0
  264. package/esm5/components/resumo/erp-resumo.component.js +22 -0
  265. package/esm5/components/resumo/erp-resumo.module.js +28 -0
  266. package/esm5/components/resumo/erp-resumo.service.js +16 -0
  267. package/esm5/components/resumo/index.js +2 -0
  268. package/esm5/components/tributos/calculators/effective-tax-rate-calculator.js +58 -0
  269. package/esm5/components/tributos/calculators/gross-amount-calculator.js +39 -0
  270. package/esm5/components/tributos/calculators/tax-amount-calculator.js +91 -0
  271. package/esm5/components/tributos/erp-tributos.component.js +5296 -0
  272. package/esm5/components/tributos/erp-tributos.module.js +36 -0
  273. package/esm5/components/tributos/erp-tributos.service.js +24 -0
  274. package/esm5/components/tributos/erp-tributos.types.js +268 -0
  275. package/esm5/components/tributos/index.js +4 -0
  276. package/esm5/components/tributos/mappings/enum-tip-imp-cst-mapping.js +33 -0
  277. package/esm5/components/tributos/rules/calculation/registries/calculation-rules-registries/calculation-rules.registry.js +46 -0
  278. package/esm5/components/tributos/rules/calculation/registries/calculation-rules-registries/incoming-invoice-calculation-rules.registry.js +3104 -0
  279. package/esm5/components/tributos/rules/calculation/registries/calculation-rules-registries/outgoing-invoice-calculation-rules.registry.js +4518 -0
  280. package/esm5/components/tributos/rules/calculation/registries/calculation-rules-registries/purchase-order-calculation-rules.registry.js +296 -0
  281. package/esm5/components/tributos/rules/calculation/registries/calculation-rules-registries/sale-order-calculation-rules.registry.js +1466 -0
  282. package/esm5/components/tributos/rules/calculation/rules/apply-net-value-to-document-calculation-rule.js +60 -0
  283. package/esm5/components/tributos/rules/calculation/rules/assessment-period-calculation-rule.js +77 -0
  284. package/esm5/components/tributos/rules/calculation/rules/effective-tax-rate-calculation-rule.js +92 -0
  285. package/esm5/components/tributos/rules/calculation/rules/gross-amount-calculation-rule.js +83 -0
  286. package/esm5/components/tributos/rules/calculation/rules/manual-tax-calculation-rule.js +87 -0
  287. package/esm5/components/tributos/rules/calculation/rules/tax-amount-calculation-rule.js +286 -0
  288. package/esm5/components/tributos/rules/calculation/rules/tax-calculation-type-calculation-rule.js +89 -0
  289. package/esm5/components/tributos/rules/calculation/rules/tax-classification-calculation-rule.js +241 -0
  290. package/esm5/components/tributos/rules/calculation/rules/tax-rate-calculation-rule.js +118 -0
  291. package/esm5/components/tributos/rules/calculation/rules/tax-situation-calculation-rule.js +200 -0
  292. package/esm5/components/tributos/rules/calculation/rules/taxable-base-calculation-rule.js +330 -0
  293. package/esm5/components/tributos/rules/rules.service.js +139 -0
  294. package/esm5/components/tributos/rules/status/registries/incoming-invoice-status-rules.registry.js +1078 -0
  295. package/esm5/components/tributos/rules/status/registries/outgoing-invoice-status-rules.registry.js +1319 -0
  296. package/esm5/components/tributos/rules/status/registries/purchase-order-status-rules.registry.js +64 -0
  297. package/esm5/components/tributos/rules/status/registries/sale-order-status-rules.registry.js +19 -0
  298. package/esm5/components/tributos/rules/status/registries/status-rules.registry.js +46 -0
  299. package/esm5/components/tributos/rules/status/rules/apply-net-value-to-document-status-rule.js +43 -0
  300. package/esm5/components/tributos/rules/status/rules/tax-classification-status-rule.js +106 -0
  301. package/esm5/components/tributos/rules/status/rules/tax-rate-status-rule.js +68 -0
  302. package/esm5/components/tributos/rules/status/rules/taxable-base-status-rule.js +72 -0
  303. package/esm5/components/tributos/rules/types/available-fields.js +1 -0
  304. package/esm5/components/tributos/rules/types/available-taxes.js +1 -0
  305. package/esm5/components/tributos/rules/types/field-calculation-rule-mapping.js +1 -0
  306. package/esm5/components/tributos/rules/types/field-rule-mapping.js +1 -0
  307. package/esm5/components/tributos/rules/types/field-status-rule-mapping.js +1 -0
  308. package/esm5/components/tributos/rules/types/rule-payload.js +1 -0
  309. package/esm5/components/tributos/rules/types/schemas/incoming-invoice.schema.js +1817 -0
  310. package/esm5/components/tributos/rules/types/schemas/outgoing-invoice.schema.js +2751 -0
  311. package/esm5/components/tributos/rules/types/schemas/purchase-order.schema.js +151 -0
  312. package/esm5/components/tributos/rules/types/schemas/sale-order.schema.js +880 -0
  313. package/esm5/components/tributos/rules/types/strategies-by-document.js +1 -0
  314. package/esm5/components/tributos/rules/types/strategies.js +1 -0
  315. package/esm5/components/tributos/rules/types/tax-rule.js +1 -0
  316. package/esm5/components/tributos/rules/validation/registries/incoming-invoice-validation-rules.registry.js +3608 -0
  317. package/esm5/components/tributos/rules/validation/registries/outgoing-invoice-validation-rules.registry.js +5454 -0
  318. package/esm5/components/tributos/rules/validation/registries/purchase-order-validation-rules.registry.js +272 -0
  319. package/esm5/components/tributos/rules/validation/registries/sale-order-validation-rules.registry.js +1394 -0
  320. package/esm5/components/tributos/rules/validation/registries/validation-rules.registry.js +46 -0
  321. package/esm5/components/tributos/rules/validation/rules/required/apply-net-value-to-document-required-validation-rule.js +77 -0
  322. package/esm5/components/tributos/rules/validation/rules/required/assessment-period-required-validation-rule.js +86 -0
  323. package/esm5/components/tributos/rules/validation/rules/required/tax-amount-required-validation-rule.js +968 -0
  324. package/esm5/components/tributos/rules/validation/rules/required/tax-classification-required-validation-rule.js +433 -0
  325. package/esm5/components/tributos/rules/validation/rules/required/tax-rate-required-validation-rule.js +774 -0
  326. package/esm5/components/tributos/rules/validation/rules/required/tax-situation-required-validation-rule.js +323 -0
  327. package/esm5/components/tributos/rules/validation/rules/required/taxable-base-required-validation-rule.js +772 -0
  328. package/esm5/components/tributos/services/tax-rounding.service.js +23 -0
  329. package/esm5/components/tributos/stores/tax.store.js +26 -0
  330. package/esm5/components/tributos/tax-reform-utilities.js +249 -0
  331. package/esm5/components/tributos/types/context.js +1 -0
  332. package/esm5/components/tributos/types/controllership-incoming-invoice-context.js +1 -0
  333. package/esm5/components/tributos/types/controllership-incoming-invoice.js +1 -0
  334. package/esm5/components/tributos/types/controllership-outgoing-invoice-context.js +1 -0
  335. package/esm5/components/tributos/types/controllership-outgoing-invoice.js +1 -0
  336. package/esm5/components/tributos/types/credit-invoice-type.js +1 -0
  337. package/esm5/components/tributos/types/debit-invoice-type.js +1 -0
  338. package/esm5/components/tributos/types/group.js +1 -0
  339. package/esm5/components/tributos/types/incoming-invoice-context.js +1 -0
  340. package/esm5/components/tributos/types/incoming-invoice-item.js +1 -0
  341. package/esm5/components/tributos/types/incoming-invoice-type.js +1 -0
  342. package/esm5/components/tributos/types/incoming-invoice.js +1 -0
  343. package/esm5/components/tributos/types/item-type.js +1 -0
  344. package/esm5/components/tributos/types/outgoing-Invoice.js +1 -0
  345. package/esm5/components/tributos/types/outgoing-invoice-context.js +1 -0
  346. package/esm5/components/tributos/types/outgoing-invoice-item.js +1 -0
  347. package/esm5/components/tributos/types/outgoing-invoice-type.js +1 -0
  348. package/esm5/components/tributos/types/purchase-order-context.js +1 -0
  349. package/esm5/components/tributos/types/purchase-order-type.js +1 -0
  350. package/esm5/components/tributos/types/purchase-order.js +1 -0
  351. package/esm5/components/tributos/types/sale-order-context.js +1 -0
  352. package/esm5/components/tributos/types/sale-order-type.js +1 -0
  353. package/esm5/components/tributos/types/sale-order.js +1 -0
  354. package/esm5/components/tributos/types/tax.js +2 -0
  355. package/esm5/components/utils/breakpoints.js +11 -0
  356. package/esm5/components/utils/export-utils.js +78 -0
  357. package/esm5/components/utils/index.js +4 -0
  358. package/esm5/components/utils/loading-context.js +22 -0
  359. package/esm5/components/utils/utils.js +20 -0
  360. package/esm5/core/entities/entity-service.js +98 -0
  361. package/esm5/core/entities/quantidade-disponivel-demanda/quantidade-disponivel-demanda-dto.js +1 -0
  362. package/esm5/core/entities/quantidade-disponivel-demanda/quantidade-disponivel-demanda.js +67 -0
  363. package/esm5/core/entities/quantidade-disponivel-demanda/quantidade-disponivel-demanda.module.js +27 -0
  364. package/esm5/core/entities/quantidade-disponivel-demanda/quantidade-disponivel-demanda.service.js +27 -0
  365. package/esm5/core/enums/enum-classificacao-tributaria.js +6 -0
  366. package/esm5/core/enums/enum-tipo-calculo-imposto.js +7 -0
  367. package/esm5/core/enums/enum-tipo-documento-parametros.js +9 -0
  368. package/esm5/core/enums/enum-tipo-documento.js +12 -0
  369. package/esm5/core/enums/erpx-com-processo-faturamento-backend/enum-indicativo-padrao.js +7 -0
  370. package/esm5/core/enums/erpx-cpl-imp-cadastros-backend/enum-indicativo-padrao.js +10 -0
  371. package/esm5/locale/fallback.js +56 -0
  372. package/esm5/public-api.js +8 -0
  373. package/esm5/senior-gestao-empresarial-erpx-components.js +58 -0
  374. package/fesm2015/senior-gestao-empresarial-erpx-components.js +36350 -0
  375. package/fesm2015/senior-gestao-empresarial-erpx-components.js.map +1 -0
  376. package/fesm5/senior-gestao-empresarial-erpx-components.js +37396 -0
  377. package/fesm5/senior-gestao-empresarial-erpx-components.js.map +1 -0
  378. package/locale/fallback.d.ts +55 -0
  379. package/package.json +23 -0
  380. package/public-api.d.ts +7 -0
  381. package/senior-gestao-empresarial-erpx-components.d.ts +57 -0
  382. package/senior-gestao-empresarial-erpx-components.metadata.json +1 -0
@@ -0,0 +1,968 @@
1
+ import { __decorate, __read } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { Validators } from '@angular/forms';
4
+ import BigNumber from 'bignumber.js';
5
+ import { combineLatest } from 'rxjs';
6
+ import { auditTime, distinctUntilChanged, map, startWith } from 'rxjs/operators';
7
+ import { EnumCampoTributo, EnumTipoTributo } from '../../../../erp-tributos.types';
8
+ import { getDeferredTaxItemFromGroup, getPresumedCreditTaxItemFromGroup, getRegularTaxationTaxItemFromGroup } from '../../../../tax-reform-utilities';
9
+ import * as i0 from "@angular/core";
10
+ var TaxAmountRequiredValidationRule = /** @class */ (function () {
11
+ function TaxAmountRequiredValidationRule() {
12
+ }
13
+ TaxAmountRequiredValidationRule.prototype.apply = function (_a) {
14
+ var document = _a.context.document, group = _a.group, _b = _a.item, taxType = _b.name, formGroup = _b.formGroup;
15
+ switch (taxType) {
16
+ case EnumTipoTributo.CBS:
17
+ {
18
+ switch (document) {
19
+ case 'Incoming Invoice':
20
+ case 'Outgoing Invoice':
21
+ {
22
+ var deferredTaxFormGroup = getDeferredTaxItemFromGroup({ group: group }).formGroup;
23
+ var presumedCreditFormGroup = getPresumedCreditTaxItemFromGroup({
24
+ group: group
25
+ }).formGroup;
26
+ var regularTaxationTaxFormGroup = getRegularTaxationTaxItemFromGroup({
27
+ group: group
28
+ }).formGroup;
29
+ combineLatest([
30
+ formGroup
31
+ .get('baseCalculo')
32
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
33
+ .value), distinctUntilChanged()),
34
+ formGroup
35
+ .get('aliquota')
36
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged()),
37
+ formGroup
38
+ .get('aliquotaEfetiva')
39
+ .valueChanges.pipe(startWith(formGroup.get('aliquotaEfetiva').value), distinctUntilChanged()),
40
+ formGroup
41
+ .get('situacaoTributaria')
42
+ .valueChanges.pipe(startWith(formGroup.get('situacaoTributaria').value), distinctUntilChanged()),
43
+ formGroup
44
+ .get('classificacaoTributaria')
45
+ .valueChanges.pipe(startWith(formGroup.get('classificacaoTributaria').value), distinctUntilChanged()),
46
+ formGroup
47
+ .get('valor')
48
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged()),
49
+ deferredTaxFormGroup
50
+ .get('aliquota')
51
+ .valueChanges.pipe(startWith(deferredTaxFormGroup.get('aliquota').value), distinctUntilChanged()),
52
+ presumedCreditFormGroup
53
+ .get('aliquota')
54
+ .valueChanges.pipe(startWith(presumedCreditFormGroup.get('aliquota').value), distinctUntilChanged()),
55
+ regularTaxationTaxFormGroup
56
+ .get('aliquota')
57
+ .valueChanges.pipe(startWith(regularTaxationTaxFormGroup.get('aliquota').value), distinctUntilChanged())
58
+ ])
59
+ .pipe(map(function (_a) {
60
+ var _b = __read(_a, 9), taxableBase = _b[0], taxRate = _b[1], effectiveTaxRate = _b[2], taxSituation = _b[3], taxClassication = _b[4], taxAmount = _b[5], deferredTaxRate = _b[6], presumedCreditTaxRate = _b[7], regularTaxationTaxRate = _b[8];
61
+ return [
62
+ new BigNumber(taxableBase),
63
+ new BigNumber(taxRate),
64
+ new BigNumber(effectiveTaxRate),
65
+ taxSituation,
66
+ taxClassication,
67
+ new BigNumber(taxAmount),
68
+ new BigNumber(deferredTaxRate),
69
+ new BigNumber(presumedCreditTaxRate),
70
+ new BigNumber(regularTaxationTaxRate)
71
+ ];
72
+ }))
73
+ .subscribe(function (_a) {
74
+ var _b = __read(_a, 9), taxableBase = _b[0], taxRate = _b[1], effectiveTaxRate = _b[2], taxSituation = _b[3], taxClassication = _b[4], taxAmount = _b[5], deferredTaxRate = _b[6], presumedCreditTaxRate = _b[7], regularTaxationTaxRate = _b[8];
75
+ var validators = [];
76
+ if (taxableBase.isFinite() ||
77
+ taxRate.isFinite() ||
78
+ effectiveTaxRate.isFinite() ||
79
+ taxSituation ||
80
+ taxClassication ||
81
+ taxAmount.isFinite() ||
82
+ deferredTaxRate.isFinite() ||
83
+ presumedCreditTaxRate.isFinite() ||
84
+ regularTaxationTaxRate.isFinite()) {
85
+ validators = [
86
+ Validators.max(9999999999999.99),
87
+ Validators.required
88
+ ];
89
+ }
90
+ else {
91
+ validators = [
92
+ Validators.max(9999999999999.99)
93
+ ];
94
+ }
95
+ formGroup
96
+ .get('valor')
97
+ .setValidators(validators);
98
+ formGroup
99
+ .get('valor')
100
+ .updateValueAndValidity({
101
+ emitEvent: false
102
+ });
103
+ });
104
+ }
105
+ break;
106
+ case 'Purchase Order':
107
+ case 'Sale Order':
108
+ {
109
+ var deferredFormGroup = getDeferredTaxItemFromGroup({ group: group }).formGroup;
110
+ combineLatest([
111
+ formGroup
112
+ .get('baseCalculo')
113
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
114
+ .value), distinctUntilChanged()),
115
+ formGroup
116
+ .get('aliquota')
117
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged()),
118
+ formGroup
119
+ .get('aliquotaEfetiva')
120
+ .valueChanges.pipe(startWith(formGroup.get('aliquotaEfetiva').value), distinctUntilChanged()),
121
+ formGroup
122
+ .get('valor')
123
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged()),
124
+ deferredFormGroup
125
+ .get('aliquota')
126
+ .valueChanges.pipe(startWith(deferredFormGroup.get('aliquota').value), distinctUntilChanged())
127
+ ])
128
+ .pipe(map(function (_a) {
129
+ var _b = __read(_a, 5), taxableBase = _b[0], taxRate = _b[1], effectiveTaxRate = _b[2], taxAmount = _b[3], deferredTaxRate = _b[4];
130
+ return [
131
+ new BigNumber(taxableBase),
132
+ new BigNumber(taxRate),
133
+ new BigNumber(effectiveTaxRate),
134
+ new BigNumber(taxAmount),
135
+ new BigNumber(deferredTaxRate)
136
+ ];
137
+ }))
138
+ .subscribe(function (_a) {
139
+ var _b = __read(_a, 5), taxableBase = _b[0], taxRate = _b[1], effectiveTaxRate = _b[2], taxAmount = _b[3], deferredTaxRate = _b[4];
140
+ var validators = [];
141
+ if (taxableBase.isFinite() ||
142
+ taxRate.isFinite() ||
143
+ effectiveTaxRate.isFinite() ||
144
+ taxAmount.isFinite() ||
145
+ deferredTaxRate.isFinite()) {
146
+ validators = [
147
+ Validators.max(9999999999999.99),
148
+ Validators.required
149
+ ];
150
+ }
151
+ else {
152
+ validators = [
153
+ Validators.max(9999999999999.99)
154
+ ];
155
+ }
156
+ formGroup
157
+ .get('valor')
158
+ .setValidators(validators);
159
+ formGroup
160
+ .get('valor')
161
+ .updateValueAndValidity({
162
+ emitEvent: false
163
+ });
164
+ });
165
+ }
166
+ break;
167
+ default:
168
+ throw new Error("Regra TaxAmountRequiredValidationRule n\u00E3o implementada para o imposto " + taxType + ", documento " + document + ".");
169
+ }
170
+ }
171
+ break;
172
+ case EnumTipoTributo.IBS_ESTADUAL:
173
+ {
174
+ switch (document) {
175
+ case 'Incoming Invoice':
176
+ case 'Outgoing Invoice':
177
+ {
178
+ var deferredTaxFormGroup = getDeferredTaxItemFromGroup({ group: group }).formGroup;
179
+ var regularTaxationTaxFormGroup = getRegularTaxationTaxItemFromGroup({
180
+ group: group
181
+ }).formGroup;
182
+ combineLatest([
183
+ formGroup
184
+ .get('baseCalculo')
185
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
186
+ .value), distinctUntilChanged()),
187
+ formGroup
188
+ .get('aliquota')
189
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged()),
190
+ formGroup
191
+ .get('aliquotaEfetiva')
192
+ .valueChanges.pipe(startWith(formGroup.get('aliquotaEfetiva').value), distinctUntilChanged()),
193
+ formGroup
194
+ .get('situacaoTributaria')
195
+ .valueChanges.pipe(startWith(formGroup.get('situacaoTributaria').value), distinctUntilChanged()),
196
+ formGroup
197
+ .get('classificacaoTributaria')
198
+ .valueChanges.pipe(startWith(formGroup.get('classificacaoTributaria').value), distinctUntilChanged()),
199
+ formGroup
200
+ .get('valor')
201
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged()),
202
+ deferredTaxFormGroup
203
+ .get('aliquota')
204
+ .valueChanges.pipe(startWith(deferredTaxFormGroup.get('aliquota').value), distinctUntilChanged()),
205
+ regularTaxationTaxFormGroup
206
+ .get('aliquota')
207
+ .valueChanges.pipe(startWith(regularTaxationTaxFormGroup.get('aliquota').value), distinctUntilChanged())
208
+ ])
209
+ .pipe(map(function (_a) {
210
+ var _b = __read(_a, 8), taxableBase = _b[0], taxRate = _b[1], effectiveTaxRate = _b[2], taxSituation = _b[3], taxClassication = _b[4], taxAmount = _b[5], deferredTaxRate = _b[6], regularTaxationTaxRate = _b[7];
211
+ return [
212
+ new BigNumber(taxableBase),
213
+ new BigNumber(taxRate),
214
+ new BigNumber(effectiveTaxRate),
215
+ taxSituation,
216
+ taxClassication,
217
+ new BigNumber(taxAmount),
218
+ new BigNumber(deferredTaxRate),
219
+ new BigNumber(regularTaxationTaxRate)
220
+ ];
221
+ }))
222
+ .subscribe(function (_a) {
223
+ var _b = __read(_a, 8), taxableBase = _b[0], taxRate = _b[1], effectiveTaxRate = _b[2], taxSituation = _b[3], taxClassication = _b[4], taxAmount = _b[5], deferredTaxRate = _b[6], regularTaxationTaxRate = _b[7];
224
+ var validators = [];
225
+ if (taxableBase.isFinite() ||
226
+ taxRate.isFinite() ||
227
+ effectiveTaxRate.isFinite() ||
228
+ taxSituation ||
229
+ taxClassication ||
230
+ taxAmount.isFinite() ||
231
+ deferredTaxRate.isFinite() ||
232
+ regularTaxationTaxRate.isFinite()) {
233
+ validators = [
234
+ Validators.max(9999999999999.99),
235
+ Validators.required
236
+ ];
237
+ }
238
+ else {
239
+ validators = [
240
+ Validators.max(9999999999999.99)
241
+ ];
242
+ }
243
+ formGroup
244
+ .get('valor')
245
+ .setValidators(validators);
246
+ formGroup
247
+ .get('valor')
248
+ .updateValueAndValidity({
249
+ emitEvent: false
250
+ });
251
+ });
252
+ }
253
+ break;
254
+ case 'Purchase Order':
255
+ case 'Sale Order':
256
+ {
257
+ var deferredFormGroup = getDeferredTaxItemFromGroup({ group: group }).formGroup;
258
+ combineLatest([
259
+ formGroup
260
+ .get('baseCalculo')
261
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
262
+ .value), distinctUntilChanged()),
263
+ formGroup
264
+ .get('aliquota')
265
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged()),
266
+ formGroup
267
+ .get('aliquotaEfetiva')
268
+ .valueChanges.pipe(startWith(formGroup.get('aliquotaEfetiva').value), distinctUntilChanged()),
269
+ formGroup
270
+ .get('valor')
271
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged()),
272
+ deferredFormGroup
273
+ .get('aliquota')
274
+ .valueChanges.pipe(startWith(deferredFormGroup.get('aliquota').value), distinctUntilChanged())
275
+ ])
276
+ .pipe(map(function (_a) {
277
+ var _b = __read(_a, 5), taxableBase = _b[0], taxRate = _b[1], effectiveTaxRate = _b[2], taxAmount = _b[3], deferredTaxRate = _b[4];
278
+ return [
279
+ new BigNumber(taxableBase),
280
+ new BigNumber(taxRate),
281
+ new BigNumber(effectiveTaxRate),
282
+ new BigNumber(taxAmount),
283
+ new BigNumber(deferredTaxRate)
284
+ ];
285
+ }))
286
+ .subscribe(function (_a) {
287
+ var _b = __read(_a, 5), taxableBase = _b[0], taxRate = _b[1], effectiveTaxRate = _b[2], taxAmount = _b[3], deferredTaxRate = _b[4];
288
+ var validators = [];
289
+ if (taxableBase.isFinite() ||
290
+ taxRate.isFinite() ||
291
+ effectiveTaxRate.isFinite() ||
292
+ taxAmount.isFinite() ||
293
+ deferredTaxRate.isFinite()) {
294
+ validators = [
295
+ Validators.max(9999999999999.99),
296
+ Validators.required
297
+ ];
298
+ }
299
+ else {
300
+ validators = [
301
+ Validators.max(9999999999999.99)
302
+ ];
303
+ }
304
+ formGroup
305
+ .get('valor')
306
+ .setValidators(validators);
307
+ formGroup
308
+ .get('valor')
309
+ .updateValueAndValidity({
310
+ emitEvent: false
311
+ });
312
+ });
313
+ }
314
+ break;
315
+ default:
316
+ throw new Error("Regra TaxAmountRequiredValidationRule n\u00E3o implementada para o imposto " + taxType + ", documento " + document + ".");
317
+ }
318
+ }
319
+ break;
320
+ case EnumTipoTributo.IBS_MUNICIPAL:
321
+ {
322
+ switch (document) {
323
+ case 'Incoming Invoice':
324
+ case 'Outgoing Invoice':
325
+ {
326
+ var deferredTaxFormGroup = getDeferredTaxItemFromGroup({ group: group }).formGroup;
327
+ var regularTaxationTaxFormGroup = getRegularTaxationTaxItemFromGroup({
328
+ group: group
329
+ }).formGroup;
330
+ combineLatest([
331
+ formGroup
332
+ .get('baseCalculo')
333
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
334
+ .value), distinctUntilChanged()),
335
+ formGroup
336
+ .get('aliquota')
337
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged()),
338
+ formGroup
339
+ .get('aliquotaEfetiva')
340
+ .valueChanges.pipe(startWith(formGroup.get('aliquotaEfetiva').value), distinctUntilChanged()),
341
+ formGroup
342
+ .get('situacaoTributaria')
343
+ .valueChanges.pipe(startWith(formGroup.get('situacaoTributaria').value), distinctUntilChanged()),
344
+ formGroup
345
+ .get('classificacaoTributaria')
346
+ .valueChanges.pipe(startWith(formGroup.get('classificacaoTributaria').value), distinctUntilChanged()),
347
+ formGroup
348
+ .get('valor')
349
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged()),
350
+ deferredTaxFormGroup
351
+ .get('aliquota')
352
+ .valueChanges.pipe(startWith(deferredTaxFormGroup.get('aliquota').value), distinctUntilChanged()),
353
+ regularTaxationTaxFormGroup
354
+ .get('aliquota')
355
+ .valueChanges.pipe(startWith(regularTaxationTaxFormGroup.get('aliquota').value), distinctUntilChanged())
356
+ ])
357
+ .pipe(map(function (_a) {
358
+ var _b = __read(_a, 8), taxableBase = _b[0], taxRate = _b[1], effectiveTaxRate = _b[2], taxSituation = _b[3], taxClassication = _b[4], taxAmount = _b[5], deferredTaxRate = _b[6], regularTaxationTaxRate = _b[7];
359
+ return [
360
+ new BigNumber(taxableBase),
361
+ new BigNumber(taxRate),
362
+ new BigNumber(effectiveTaxRate),
363
+ taxSituation,
364
+ taxClassication,
365
+ new BigNumber(taxAmount),
366
+ new BigNumber(deferredTaxRate),
367
+ new BigNumber(regularTaxationTaxRate)
368
+ ];
369
+ }))
370
+ .subscribe(function (_a) {
371
+ var _b = __read(_a, 8), taxableBase = _b[0], taxRate = _b[1], effectiveTaxRate = _b[2], taxSituation = _b[3], taxClassication = _b[4], taxAmount = _b[5], deferredTaxRate = _b[6], regularTaxationTaxRate = _b[7];
372
+ var validators = [];
373
+ if (taxableBase.isFinite() ||
374
+ taxRate.isFinite() ||
375
+ effectiveTaxRate.isFinite() ||
376
+ taxSituation ||
377
+ taxClassication ||
378
+ taxAmount.isFinite() ||
379
+ deferredTaxRate.isFinite() ||
380
+ regularTaxationTaxRate.isFinite()) {
381
+ validators = [
382
+ Validators.max(9999999999999.99),
383
+ Validators.required
384
+ ];
385
+ }
386
+ else {
387
+ validators = [
388
+ Validators.max(9999999999999.99)
389
+ ];
390
+ }
391
+ formGroup
392
+ .get('valor')
393
+ .setValidators(validators);
394
+ formGroup
395
+ .get('valor')
396
+ .updateValueAndValidity({
397
+ emitEvent: false
398
+ });
399
+ });
400
+ }
401
+ break;
402
+ case 'Purchase Order':
403
+ case 'Sale Order':
404
+ {
405
+ var deferredFormGroup = getDeferredTaxItemFromGroup({ group: group }).formGroup;
406
+ combineLatest([
407
+ formGroup
408
+ .get('baseCalculo')
409
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
410
+ .value), distinctUntilChanged()),
411
+ formGroup
412
+ .get('aliquota')
413
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged()),
414
+ formGroup
415
+ .get('aliquotaEfetiva')
416
+ .valueChanges.pipe(startWith(formGroup.get('aliquotaEfetiva').value), distinctUntilChanged()),
417
+ formGroup
418
+ .get('valor')
419
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged()),
420
+ deferredFormGroup
421
+ .get('aliquota')
422
+ .valueChanges.pipe(startWith(deferredFormGroup.get('aliquota').value), distinctUntilChanged())
423
+ ])
424
+ .pipe(map(function (_a) {
425
+ var _b = __read(_a, 5), taxableBase = _b[0], taxRate = _b[1], effectiveTaxRate = _b[2], taxAmount = _b[3], deferredTaxRate = _b[4];
426
+ return [
427
+ new BigNumber(taxableBase),
428
+ new BigNumber(taxRate),
429
+ new BigNumber(effectiveTaxRate),
430
+ new BigNumber(taxAmount),
431
+ new BigNumber(deferredTaxRate)
432
+ ];
433
+ }))
434
+ .subscribe(function (_a) {
435
+ var _b = __read(_a, 5), taxableBase = _b[0], taxRate = _b[1], effectiveTaxRate = _b[2], taxAmount = _b[3], deferredTaxRate = _b[4];
436
+ var validators = [];
437
+ if (taxableBase.isFinite() ||
438
+ taxRate.isFinite() ||
439
+ effectiveTaxRate.isFinite() ||
440
+ taxAmount.isFinite() ||
441
+ deferredTaxRate.isFinite()) {
442
+ validators = [
443
+ Validators.max(9999999999999.99),
444
+ Validators.required
445
+ ];
446
+ }
447
+ else {
448
+ validators = [
449
+ Validators.max(9999999999999.99)
450
+ ];
451
+ }
452
+ formGroup
453
+ .get('valor')
454
+ .setValidators(validators);
455
+ formGroup
456
+ .get('valor')
457
+ .updateValueAndValidity({
458
+ emitEvent: false
459
+ });
460
+ });
461
+ }
462
+ break;
463
+ default:
464
+ throw new Error("Regra TaxAmountRequiredValidationRule n\u00E3o implementada para o imposto " + taxType + ", documento " + document + ".");
465
+ }
466
+ }
467
+ break;
468
+ case EnumTipoTributo.CBS_A_APROPRIAR:
469
+ case EnumTipoTributo.IBS_ESTADUAL_A_APROPRIAR:
470
+ case EnumTipoTributo.IBS_MUNICIPAL_A_APROPRIAR:
471
+ {
472
+ switch (document) {
473
+ case 'Incoming Invoice':
474
+ case 'Purchase Order':
475
+ {
476
+ combineLatest([
477
+ formGroup
478
+ .get('baseCalculo')
479
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
480
+ .value), distinctUntilChanged()),
481
+ formGroup
482
+ .get('aliquota')
483
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged()),
484
+ formGroup
485
+ .get('valor')
486
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged())
487
+ ])
488
+ .pipe(map(function (_a) {
489
+ var _b = __read(_a, 3), taxableBase = _b[0], taxRate = _b[1], taxAmount = _b[2];
490
+ return [
491
+ new BigNumber(taxableBase),
492
+ new BigNumber(taxRate),
493
+ new BigNumber(taxAmount)
494
+ ];
495
+ }))
496
+ .subscribe(function (_a) {
497
+ var _b = __read(_a, 3), taxableBase = _b[0], taxRate = _b[1], taxAmount = _b[2];
498
+ var validators = [];
499
+ if (taxableBase.isFinite() ||
500
+ taxRate.isFinite() ||
501
+ taxAmount.isFinite()) {
502
+ validators = [
503
+ Validators.max(9999999999999.99),
504
+ Validators.required
505
+ ];
506
+ }
507
+ else {
508
+ validators = [
509
+ Validators.max(9999999999999.99)
510
+ ];
511
+ }
512
+ formGroup
513
+ .get('valor')
514
+ .setValidators(validators);
515
+ formGroup
516
+ .get('valor')
517
+ .updateValueAndValidity({
518
+ emitEvent: false
519
+ });
520
+ });
521
+ }
522
+ break;
523
+ default:
524
+ throw new Error("Regra TaxAmountRequiredValidationRule n\u00E3o implementada para o imposto " + taxType + ", documento " + document + ".");
525
+ }
526
+ }
527
+ break;
528
+ case EnumTipoTributo.CBS_DIFERIDO:
529
+ case EnumTipoTributo.IBS_ESTADUAL_DIFERIDO:
530
+ case EnumTipoTributo.IBS_MUNICIPAL_DIFERIDO:
531
+ {
532
+ switch (document) {
533
+ case 'Incoming Invoice':
534
+ case 'Outgoing Invoice':
535
+ case 'Purchase Order':
536
+ case 'Sale Order':
537
+ {
538
+ combineLatest([
539
+ formGroup
540
+ .get('baseCalculo')
541
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
542
+ .value), distinctUntilChanged()),
543
+ formGroup
544
+ .get('aliquota')
545
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged()),
546
+ formGroup
547
+ .get('valor')
548
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged())
549
+ ])
550
+ .pipe(map(function (_a) {
551
+ var _b = __read(_a, 3), taxableBase = _b[0], taxRate = _b[1], taxAmount = _b[2];
552
+ return [
553
+ new BigNumber(taxableBase),
554
+ new BigNumber(taxRate),
555
+ new BigNumber(taxAmount)
556
+ ];
557
+ }))
558
+ .subscribe(function (_a) {
559
+ var _b = __read(_a, 3), taxableBase = _b[0], taxRate = _b[1], taxAmount = _b[2];
560
+ var validators = [];
561
+ if (taxableBase.isFinite() ||
562
+ taxRate.isFinite() ||
563
+ taxAmount.isFinite()) {
564
+ validators = [
565
+ Validators.max(9999999999999.99),
566
+ Validators.required
567
+ ];
568
+ }
569
+ else {
570
+ validators = [
571
+ Validators.max(9999999999999.99)
572
+ ];
573
+ }
574
+ formGroup
575
+ .get('valor')
576
+ .setValidators(validators);
577
+ formGroup
578
+ .get('valor')
579
+ .updateValueAndValidity({
580
+ emitEvent: false
581
+ });
582
+ });
583
+ }
584
+ break;
585
+ }
586
+ }
587
+ break;
588
+ case EnumTipoTributo.CBS_CREDITO_PRESUMIDO:
589
+ {
590
+ switch (document) {
591
+ case 'Incoming Invoice':
592
+ case 'Outgoing Invoice':
593
+ {
594
+ combineLatest([
595
+ formGroup
596
+ .get('baseCalculo')
597
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
598
+ .value), distinctUntilChanged()),
599
+ formGroup
600
+ .get('aliquota')
601
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged()),
602
+ formGroup
603
+ .get('classificacaoTributaria')
604
+ .valueChanges.pipe(startWith(formGroup.get('classificacaoTributaria').value), distinctUntilChanged())
605
+ ])
606
+ .pipe(map(function (_a) {
607
+ var _b = __read(_a, 3), taxableBase = _b[0], taxRate = _b[1], taxClassication = _b[2];
608
+ return [
609
+ new BigNumber(taxableBase),
610
+ new BigNumber(taxRate),
611
+ taxClassication
612
+ ];
613
+ }))
614
+ .subscribe(function (_a) {
615
+ var _b = __read(_a, 3), taxableBase = _b[0], taxRate = _b[1], taxClassication = _b[2];
616
+ var validators = [];
617
+ if (taxableBase.isFinite() ||
618
+ taxRate.isFinite() ||
619
+ taxClassication) {
620
+ validators = [
621
+ Validators.required
622
+ ];
623
+ }
624
+ else {
625
+ validators = [];
626
+ }
627
+ formGroup
628
+ .get('valor')
629
+ .setValidators(validators);
630
+ formGroup
631
+ .get('valor')
632
+ .updateValueAndValidity({
633
+ emitEvent: false
634
+ });
635
+ });
636
+ }
637
+ break;
638
+ case 'Purchase Order':
639
+ case 'Sale Order':
640
+ {
641
+ combineLatest([
642
+ formGroup
643
+ .get('baseCalculo')
644
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
645
+ .value), distinctUntilChanged()),
646
+ formGroup
647
+ .get('aliquota')
648
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged())
649
+ ])
650
+ .pipe(map(function (_a) {
651
+ var _b = __read(_a, 2), taxableBase = _b[0], taxRate = _b[1];
652
+ return [
653
+ new BigNumber(taxableBase),
654
+ new BigNumber(taxRate)
655
+ ];
656
+ }))
657
+ .subscribe(function (_a) {
658
+ var _b = __read(_a, 2), taxableBase = _b[0], taxRate = _b[1];
659
+ var validators = [];
660
+ if (taxableBase.isFinite() ||
661
+ taxRate.isFinite()) {
662
+ validators = [Validators.required];
663
+ }
664
+ else {
665
+ validators = [];
666
+ }
667
+ formGroup
668
+ .get('valor')
669
+ .setValidators(validators);
670
+ formGroup
671
+ .get('valor')
672
+ .updateValueAndValidity({
673
+ emitEvent: false
674
+ });
675
+ });
676
+ }
677
+ break;
678
+ default:
679
+ throw new Error("Regra TaxAmountRequiredValidationRule n\u00E3o implementada para o imposto " + taxType + ", documento " + document + ".");
680
+ }
681
+ }
682
+ break;
683
+ case EnumTipoTributo.CBS_TRIBUTACAO_REGULAR:
684
+ case EnumTipoTributo.IBS_ESTADUAL_TRIBUTACAO_REGULAR:
685
+ case EnumTipoTributo.IBS_MUNICIPAL_TRIBUTACAO_REGULAR:
686
+ {
687
+ switch (document) {
688
+ case 'Incoming Invoice':
689
+ case 'Outgoing Invoice':
690
+ {
691
+ combineLatest([
692
+ formGroup
693
+ .get('baseCalculo')
694
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
695
+ .value), distinctUntilChanged()),
696
+ formGroup
697
+ .get('aliquota')
698
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged()),
699
+ formGroup
700
+ .get('valor')
701
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged()),
702
+ formGroup
703
+ .get('situacaoTributaria')
704
+ .valueChanges.pipe(startWith(formGroup.get('situacaoTributaria').value), distinctUntilChanged()),
705
+ formGroup
706
+ .get('classificacaoTributaria')
707
+ .valueChanges.pipe(startWith(formGroup.get('classificacaoTributaria').value), distinctUntilChanged())
708
+ ])
709
+ .pipe(auditTime(0), map(function (_a) {
710
+ var _b = __read(_a, 5), taxableBase = _b[0], taxRate = _b[1], taxAmount = _b[2], taxSituation = _b[3], taxClassication = _b[4];
711
+ return [
712
+ new BigNumber(taxableBase),
713
+ new BigNumber(taxRate),
714
+ new BigNumber(taxAmount),
715
+ taxSituation,
716
+ taxClassication
717
+ ];
718
+ }), map(function (_a) {
719
+ var _b = __read(_a, 5), taxableBase = _b[0], taxRate = _b[1], taxAmount = _b[2], taxSituation = _b[3], taxClassication = _b[4];
720
+ return taxableBase.isFinite() ||
721
+ taxRate.isFinite() ||
722
+ taxAmount.isFinite() ||
723
+ taxSituation ||
724
+ taxClassication
725
+ ? [Validators.required]
726
+ : [];
727
+ }))
728
+ .subscribe(function (validators) {
729
+ formGroup
730
+ .get('valor')
731
+ .setValidators(validators);
732
+ formGroup
733
+ .get('valor')
734
+ .updateValueAndValidity({
735
+ emitEvent: false
736
+ });
737
+ });
738
+ }
739
+ break;
740
+ case 'Purchase Order':
741
+ case 'Sale Order':
742
+ {
743
+ combineLatest([
744
+ formGroup
745
+ .get('baseCalculo')
746
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
747
+ .value), distinctUntilChanged()),
748
+ formGroup
749
+ .get('aliquota')
750
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged()),
751
+ formGroup
752
+ .get('valor')
753
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged())
754
+ ])
755
+ .pipe(map(function (_a) {
756
+ var _b = __read(_a, 3), taxableBase = _b[0], taxRate = _b[1], taxAmount = _b[2];
757
+ return [
758
+ new BigNumber(taxableBase),
759
+ new BigNumber(taxRate),
760
+ new BigNumber(taxAmount)
761
+ ];
762
+ }))
763
+ .subscribe(function (_a) {
764
+ var _b = __read(_a, 3), taxableBase = _b[0], taxRate = _b[1], taxAmount = _b[2];
765
+ var validators = [];
766
+ if (taxableBase.isFinite() ||
767
+ taxRate.isFinite() ||
768
+ taxAmount.isFinite()) {
769
+ validators = [
770
+ Validators.required
771
+ ];
772
+ }
773
+ else {
774
+ validators = [];
775
+ }
776
+ formGroup
777
+ .get('valor')
778
+ .setValidators(validators);
779
+ formGroup
780
+ .get('valor')
781
+ .updateValueAndValidity({
782
+ emitEvent: false
783
+ });
784
+ });
785
+ }
786
+ break;
787
+ default:
788
+ throw new Error("Regra TaxAmountRequiredValidationRule n\u00E3o implementada para o imposto " + taxType + ", documento " + document + ".");
789
+ }
790
+ }
791
+ break;
792
+ case EnumTipoTributo.IS:
793
+ {
794
+ switch (document) {
795
+ case 'Incoming Invoice':
796
+ case 'Outgoing Invoice':
797
+ {
798
+ // TODO
799
+ }
800
+ break;
801
+ case 'Purchase Order':
802
+ case 'Sale Order':
803
+ {
804
+ combineLatest([
805
+ formGroup
806
+ .get('baseCalculo')
807
+ .valueChanges.pipe(startWith(formGroup.get('baseCalculo')
808
+ .value), distinctUntilChanged()),
809
+ formGroup
810
+ .get('aliquota')
811
+ .valueChanges.pipe(startWith(formGroup.get('aliquota').value), distinctUntilChanged()),
812
+ formGroup
813
+ .get('valor')
814
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged())
815
+ ])
816
+ .pipe(map(function (_a) {
817
+ var _b = __read(_a, 3), taxableBase = _b[0], taxRate = _b[1], taxAmount = _b[2];
818
+ return [
819
+ new BigNumber(taxableBase),
820
+ new BigNumber(taxRate),
821
+ new BigNumber(taxAmount)
822
+ ];
823
+ }))
824
+ .subscribe(function (_a) {
825
+ var _b = __read(_a, 3), taxableBase = _b[0], taxRate = _b[1], taxAmount = _b[2];
826
+ var validators = [];
827
+ if (taxableBase.isFinite() ||
828
+ taxRate.isFinite() ||
829
+ taxAmount.isFinite()) {
830
+ validators = [
831
+ Validators.max(9999999999999.99),
832
+ Validators.required
833
+ ];
834
+ }
835
+ else {
836
+ validators = [
837
+ Validators.max(9999999999999.99)
838
+ ];
839
+ }
840
+ formGroup
841
+ .get('valor')
842
+ .setValidators(validators);
843
+ formGroup
844
+ .get('valor')
845
+ .updateValueAndValidity({
846
+ emitEvent: false
847
+ });
848
+ });
849
+ }
850
+ break;
851
+ }
852
+ }
853
+ break;
854
+ case EnumTipoTributo.CBS_ESTORNO_CREDITO:
855
+ case EnumTipoTributo.IBS_ESTORNO_CREDITO:
856
+ case EnumTipoTributo.CBS_TRANSFERENCIA_CREDITO:
857
+ case EnumTipoTributo.IBS_TRANSFERENCIA_CREDITO:
858
+ {
859
+ combineLatest([
860
+ formGroup
861
+ .get('situacaoTributaria')
862
+ .valueChanges.pipe(startWith(formGroup.get('situacaoTributaria').value), distinctUntilChanged()),
863
+ formGroup
864
+ .get('classificacaoTributaria')
865
+ .valueChanges.pipe(startWith(formGroup.get('classificacaoTributaria')
866
+ .value), distinctUntilChanged()),
867
+ formGroup
868
+ .get('valor')
869
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged())
870
+ ])
871
+ .pipe(map(function (_a) {
872
+ var _b = __read(_a, 3), taxSituation = _b[0], taxClassification = _b[1], taxAmount = _b[2];
873
+ return [
874
+ taxSituation,
875
+ taxClassification,
876
+ new BigNumber(taxAmount)
877
+ ];
878
+ }))
879
+ .subscribe(function (_a) {
880
+ var _b = __read(_a, 3), taxSituation = _b[0], taxClassification = _b[1], taxAmount = _b[2];
881
+ var validators = [];
882
+ if (taxSituation ||
883
+ taxClassification ||
884
+ taxAmount.isFinite()) {
885
+ validators = [
886
+ Validators.max(9999999999999.99),
887
+ Validators.required
888
+ ];
889
+ }
890
+ else {
891
+ validators = [
892
+ Validators.max(9999999999999.99)
893
+ ];
894
+ }
895
+ formGroup
896
+ .get('valor')
897
+ .setValidators(validators);
898
+ formGroup.get('valor').updateValueAndValidity({
899
+ emitEvent: false
900
+ });
901
+ });
902
+ }
903
+ break;
904
+ case EnumTipoTributo.CBS_AJUSTE:
905
+ case EnumTipoTributo.IBS_AJUSTE:
906
+ {
907
+ combineLatest([
908
+ formGroup
909
+ .get('situacaoTributaria')
910
+ .valueChanges.pipe(startWith(formGroup.get('situacaoTributaria').value), distinctUntilChanged()),
911
+ formGroup
912
+ .get('classificacaoTributaria')
913
+ .valueChanges.pipe(startWith(formGroup.get('classificacaoTributaria')
914
+ .value), distinctUntilChanged()),
915
+ formGroup
916
+ .get(EnumCampoTributo.PeriodoApuracao)
917
+ .valueChanges.pipe(startWith(formGroup.get(EnumCampoTributo.PeriodoApuracao).value), distinctUntilChanged()),
918
+ formGroup
919
+ .get('valor')
920
+ .valueChanges.pipe(startWith(formGroup.get('valor').value), distinctUntilChanged())
921
+ ])
922
+ .pipe(map(function (_a) {
923
+ var _b = __read(_a, 4), taxSituation = _b[0], taxClassification = _b[1], assessmentPeriod = _b[2], taxAmount = _b[3];
924
+ return [
925
+ taxSituation,
926
+ taxClassification,
927
+ assessmentPeriod,
928
+ new BigNumber(taxAmount)
929
+ ];
930
+ }))
931
+ .subscribe(function (_a) {
932
+ var _b = __read(_a, 4), taxSituation = _b[0], taxClassification = _b[1], assessmentPeriod = _b[2], taxAmount = _b[3];
933
+ var validators = [];
934
+ if (taxSituation ||
935
+ taxClassification ||
936
+ assessmentPeriod ||
937
+ taxAmount.isFinite()) {
938
+ validators = [
939
+ Validators.max(9999999999999.99),
940
+ Validators.required
941
+ ];
942
+ }
943
+ else {
944
+ validators = [
945
+ Validators.max(9999999999999.99)
946
+ ];
947
+ }
948
+ formGroup
949
+ .get('valor')
950
+ .setValidators(validators);
951
+ formGroup.get('valor').updateValueAndValidity({
952
+ emitEvent: false
953
+ });
954
+ });
955
+ }
956
+ break;
957
+ default:
958
+ throw new Error("Regra TaxAmountRequiredValidationRule n\u00E3o implementada para o imposto " + taxType + ", documento " + document + ".");
959
+ }
960
+ };
961
+ TaxAmountRequiredValidationRule.ɵprov = i0.ɵɵdefineInjectable({ factory: function TaxAmountRequiredValidationRule_Factory() { return new TaxAmountRequiredValidationRule(); }, token: TaxAmountRequiredValidationRule, providedIn: "root" });
962
+ TaxAmountRequiredValidationRule = __decorate([
963
+ Injectable({ providedIn: 'root' })
964
+ ], TaxAmountRequiredValidationRule);
965
+ return TaxAmountRequiredValidationRule;
966
+ }());
967
+ export { TaxAmountRequiredValidationRule };
968
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF4LWFtb3VudC1yZXF1aXJlZC12YWxpZGF0aW9uLXJ1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9lcnB4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3RyaWJ1dG9zL3J1bGVzL3ZhbGlkYXRpb24vcnVsZXMvcmVxdWlyZWQvdGF4LWFtb3VudC1yZXF1aXJlZC12YWxpZGF0aW9uLXJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sU0FBUyxNQUFNLGNBQWMsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFDSCxTQUFTLEVBQ1Qsb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxTQUFTLEVBQ1osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDbEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBRUgsMkJBQTJCLEVBQzNCLGlDQUFpQyxFQUNqQyxrQ0FBa0MsRUFDckMsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFLMUM7SUFBQTtLQTZwREM7SUE1cERHLCtDQUFLLEdBQUwsVUFBTSxFQUlRO1lBSEMsOEJBQVEsRUFDbkIsZ0JBQUssRUFDTCxZQUFrQyxFQUExQixpQkFBYSxFQUFFLHdCQUFTO1FBRWhDLFFBQVEsT0FBTyxFQUFFO1lBQ2IsS0FBSyxlQUFlLENBQUMsR0FBRztnQkFDcEI7b0JBQ0ksUUFBUSxRQUFRLEVBQUU7d0JBQ2QsS0FBSyxrQkFBa0IsQ0FBQzt3QkFDeEIsS0FBSyxrQkFBa0I7NEJBQ25CO2dDQUNZLElBQUEsOEVBQStCLENBQ0k7Z0NBQ25DLElBQUE7OzRDQUFrQyxDQUduQztnQ0FFSCxJQUFB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QUUsQ0FBQzt3QkFFbkMsSUFDSSxZQUFZOzRCQUNaLGlCQUFpQjs0QkFDakIsZ0JBQWdCOzRCQUNoQixTQUFTLENBQUMsUUFBUSxFQUFFLEVBQ3RCOzRCQUNFLFVBQVUsR0FBRztnQ0FDVCxVQUFVLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO2dDQUNoQyxVQUFVLENBQUMsUUFBUTs2QkFDdEIsQ0FBQzt5QkFDTDs2QkFBTTs0QkFDSCxVQUFVLEdBQUc7Z0NBQ1QsVUFBVSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQzs2QkFDbkMsQ0FBQzt5QkFDTDt3QkFFRCxTQUFTOzZCQUNKLEdBQUcsQ0FBQyxPQUFPLENBQUU7NkJBQ2IsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUUvQixTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBRSxDQUFDLHNCQUFzQixDQUFDOzRCQUMzQyxTQUFTLEVBQUUsS0FBSzt5QkFDbkIsQ0FBQyxDQUFDO29CQUNQLENBQUMsQ0FDSixDQUFDO2lCQUNUO2dCQUNELE1BQU07WUFDVjtnQkFDSSxNQUFNLElBQUksS0FBSyxDQUNYLGdGQUF5RSxPQUFPLG9CQUFlLFFBQVEsTUFBRyxDQUM3RyxDQUFDO1NBQ1Q7SUFDTCxDQUFDOztJQTVwRFEsK0JBQStCO1FBRDNDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztPQUN0QiwrQkFBK0IsQ0E2cEQzQzswQ0FyckREO0NBcXJEQyxBQTdwREQsSUE2cERDO1NBN3BEWSwrQkFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgYXVkaXRUaW1lLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIG1hcCxcbiAgICBzdGFydFdpdGhcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBFbnVtQ2FtcG9UcmlidXRvLFxuICAgIEVudW1UaXBvVHJpYnV0b1xufSBmcm9tICcuLi8uLi8uLi8uLi9lcnAtdHJpYnV0b3MudHlwZXMnO1xuaW1wb3J0IHtcbiAgICBnZXRCYXNlVGF4SXRlbUZyb21Hcm91cCxcbiAgICBnZXREZWZlcnJlZFRheEl0ZW1Gcm9tR3JvdXAsXG4gICAgZ2V0UHJlc3VtZWRDcmVkaXRUYXhJdGVtRnJvbUdyb3VwLFxuICAgIGdldFJlZ3VsYXJUYXhhdGlvblRheEl0ZW1Gcm9tR3JvdXBcbn0gZnJvbSAnLi4vLi4vLi4vLi4vdGF4LXJlZm9ybS11dGlsaXRpZXMnO1xuaW1wb3J0IHsgUnVsZVBheWxvYWQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9ydWxlLXBheWxvYWQnO1xuaW1wb3J0IHsgVGF4UnVsZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3RheC1ydWxlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBUYXhBbW91bnRSZXF1aXJlZFZhbGlkYXRpb25SdWxlIGltcGxlbWVudHMgVGF4UnVsZSB7XG4gICAgYXBwbHkoe1xuICAgICAgICBjb250ZXh0OiB7IGRvY3VtZW50IH0sXG4gICAgICAgIGdyb3VwLFxuICAgICAgICBpdGVtOiB7IG5hbWU6IHRheFR5cGUsIGZvcm1Hcm91cCB9XG4gICAgfTogUnVsZVBheWxvYWQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoICh0YXhUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEVudW1UaXBvVHJpYnV0by5DQlM6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJbmNvbWluZyBJbnZvaWNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ091dGdvaW5nIEludm9pY2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmb3JtR3JvdXA6IGRlZmVycmVkVGF4Rm9ybUdyb3VwIH0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RGVmZXJyZWRUYXhJdGVtRnJvbUdyb3VwKHsgZ3JvdXAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZm9ybUdyb3VwOiBwcmVzdW1lZENyZWRpdEZvcm1Hcm91cCB9ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFByZXN1bWVkQ3JlZGl0VGF4SXRlbUZyb21Hcm91cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6IHJlZ3VsYXJUYXhhdGlvblRheEZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ID0gZ2V0UmVndWxhclRheGF0aW9uVGF4SXRlbUZyb21Hcm91cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2Jhc2VDYWxjdWxvJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdiYXNlQ2FsY3VsbycpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdhbGlxdW90YScpIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhRWZldGl2YScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxpcXVvdGFFZmV0aXZhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdzaXR1YWNhb1RyaWJ1dGFyaWEnKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpdHVhY2FvVHJpYnV0YXJpYSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnY2xhc3NpZmljYWNhb1RyaWJ1dGFyaWEnKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzaWZpY2FjYW9UcmlidXRhcmlhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCd2YWxvcicpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgndmFsb3InKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheEZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheEZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsaXF1b3RhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzdW1lZENyZWRpdEZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzdW1lZENyZWRpdEZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsaXF1b3RhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyVGF4YXRpb25UYXhGb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdhbGlxdW90YScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhclRheGF0aW9uVGF4Rm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxpcXVvdGEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhSYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlVGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheENsYXNzaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkVGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXN1bWVkQ3JlZGl0VGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJUYXhhdGlvblRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheGFibGVCYXNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheFJhdGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDbGFzc2ljYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcih0YXhBbW91bnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkVGF4UmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc3VtZWRDcmVkaXRUYXhSYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyVGF4YXRpb25UYXhSYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSBhcyBjb25zdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4Q2xhc3NpY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhBbW91bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkVGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc3VtZWRDcmVkaXRUYXhSYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyVGF4YXRpb25UYXhSYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLmlzRmluaXRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFJhdGUuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlVGF4UmF0ZS5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhTaXR1YXRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheENsYXNzaWNhdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4QW1vdW50LmlzRmluaXRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkVGF4UmF0ZS5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzdW1lZENyZWRpdFRheFJhdGUuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhclRheGF0aW9uVGF4UmF0ZS5pc0Zpbml0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5OTk5OTk5OTk5OS45OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OTk5OTk5OTk5OTkuOTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCd2YWxvcicpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCd2YWxvcicpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUHVyY2hhc2UgT3JkZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU2FsZSBPcmRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZvcm1Hcm91cDogZGVmZXJyZWRGb3JtR3JvdXAgfSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREZWZlcnJlZFRheEl0ZW1Gcm9tR3JvdXAoeyBncm91cCB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2Jhc2VDYWxjdWxvJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdiYXNlQ2FsY3VsbycpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdhbGlxdW90YScpIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhRWZldGl2YScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxpcXVvdGFFZmV0aXZhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCd2YWxvcicpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgndmFsb3InKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZEZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZEZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsaXF1b3RhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhBbW91bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheGFibGVCYXNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheFJhdGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4QW1vdW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIGFzIGNvbnN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhhYmxlQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlVGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4QW1vdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZS5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVUYXhSYXRlLmlzRmluaXRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudC5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheFJhdGUuaXNGaW5pdGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OTk5OTk5OTk5OTkuOTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTk5OTk5OTk5OTk5Ljk5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgUmVncmEgVGF4QW1vdW50UmVxdWlyZWRWYWxpZGF0aW9uUnVsZSBuw6NvIGltcGxlbWVudGFkYSBwYXJhIG8gaW1wb3N0byAke3RheFR5cGV9LCBkb2N1bWVudG8gJHtkb2N1bWVudH0uYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVudW1UaXBvVHJpYnV0by5JQlNfRVNUQURVQUw6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJbmNvbWluZyBJbnZvaWNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ091dGdvaW5nIEludm9pY2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmb3JtR3JvdXA6IGRlZmVycmVkVGF4Rm9ybUdyb3VwIH0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RGVmZXJyZWRUYXhJdGVtRnJvbUdyb3VwKHsgZ3JvdXAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cDogcmVndWxhclRheGF0aW9uVGF4Rm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPSBnZXRSZWd1bGFyVGF4YXRpb25UYXhJdGVtRnJvbUdyb3VwKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnYmFzZUNhbGN1bG8nKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ2Jhc2VDYWxjdWxvJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnYWxpcXVvdGEnKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ2FsaXF1b3RhJykhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnYWxpcXVvdGFFZmV0aXZhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGlxdW90YUVmZXRpdmEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3NpdHVhY2FvVHJpYnV0YXJpYScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l0dWFjYW9UcmlidXRhcmlhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdjbGFzc2lmaWNhY2FvVHJpYnV0YXJpYScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3NpZmljYWNhb1RyaWJ1dGFyaWEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCd2YWxvcicpIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkVGF4Rm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnYWxpcXVvdGEnKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkVGF4Rm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxpcXVvdGEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJUYXhhdGlvblRheEZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyVGF4YXRpb25UYXhGb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGlxdW90YSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhhYmxlQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVUYXhSYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4U2l0dWF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4Q2xhc3NpY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4QW1vdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRUYXhSYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhclRheGF0aW9uVGF4UmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4YWJsZUJhc2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4UmF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlVGF4UmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4U2l0dWF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheENsYXNzaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheEFtb3VudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRUYXhSYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyVGF4YXRpb25UYXhSYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSBhcyBjb25zdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4Q2xhc3NpY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhBbW91bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkVGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhclRheGF0aW9uVGF4UmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhhYmxlQmFzZS5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhSYXRlLmlzRmluaXRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVRheFJhdGUuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4U2l0dWF0aW9uIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDbGFzc2ljYXRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudC5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheFJhdGUuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhclRheGF0aW9uVGF4UmF0ZS5pc0Zpbml0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5OTk5OTk5OTk5OS45OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OTk5OTk5OTk5OTkuOTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCd2YWxvcicpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCd2YWxvcicpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUHVyY2hhc2UgT3JkZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU2FsZSBPcmRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZvcm1Hcm91cDogZGVmZXJyZWRGb3JtR3JvdXAgfSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREZWZlcnJlZFRheEl0ZW1Gcm9tR3JvdXAoeyBncm91cCB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2Jhc2VDYWxjdWxvJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdiYXNlQ2FsY3VsbycpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdhbGlxdW90YScpIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhRWZldGl2YScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxpcXVvdGFFZmV0aXZhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCd2YWxvcicpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgndmFsb3InKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZEZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZEZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsaXF1b3RhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhBbW91bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheGFibGVCYXNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheFJhdGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4QW1vdW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIGFzIGNvbnN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhhYmxlQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlVGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4QW1vdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZS5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVUYXhSYXRlLmlzRmluaXRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudC5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheFJhdGUuaXNGaW5pdGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OTk5OTk5OTk5OTkuOTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTk5OTk5OTk5OTk5Ljk5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgUmVncmEgVGF4QW1vdW50UmVxdWlyZWRWYWxpZGF0aW9uUnVsZSBuw6NvIGltcGxlbWVudGFkYSBwYXJhIG8gaW1wb3N0byAke3RheFR5cGV9LCBkb2N1bWVudG8gJHtkb2N1bWVudH0uYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVudW1UaXBvVHJpYnV0by5JQlNfTVVOSUNJUEFMOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkb2N1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSW5jb21pbmcgSW52b2ljZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPdXRnb2luZyBJbnZvaWNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZm9ybUdyb3VwOiBkZWZlcnJlZFRheEZvcm1Hcm91cCB9ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERlZmVycmVkVGF4SXRlbUZyb21Hcm91cCh7IGdyb3VwIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6IHJlZ3VsYXJUYXhhdGlvblRheEZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ID0gZ2V0UmVndWxhclRheGF0aW9uVGF4SXRlbUZyb21Hcm91cCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2Jhc2VDYWxjdWxvJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdiYXNlQ2FsY3VsbycpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdhbGlxdW90YScpIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhRWZldGl2YScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxpcXVvdGFFZmV0aXZhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdzaXR1YWNhb1RyaWJ1dGFyaWEnKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpdHVhY2FvVHJpYnV0YXJpYSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnY2xhc3NpZmljYWNhb1RyaWJ1dGFyaWEnKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzaWZpY2FjYW9UcmlidXRhcmlhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCd2YWxvcicpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgndmFsb3InKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheEZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheEZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsaXF1b3RhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyVGF4YXRpb25UYXhGb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdhbGlxdW90YScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhclRheGF0aW9uVGF4Rm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxpcXVvdGEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhSYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlVGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheENsYXNzaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkVGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJUYXhhdGlvblRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheGFibGVCYXNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheFJhdGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDbGFzc2ljYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcih0YXhBbW91bnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkVGF4UmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVndWxhclRheGF0aW9uVGF4UmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gYXMgY29uc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhSYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVUYXhSYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhTaXR1YXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheENsYXNzaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4QW1vdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJUYXhhdGlvblRheFJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZS5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVUYXhSYXRlLmlzRmluaXRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4Q2xhc3NpY2F0aW9uIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhBbW91bnQuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRUYXhSYXRlLmlzRmluaXRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJUYXhhdGlvblRheFJhdGUuaXNGaW5pdGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OTk5OTk5OTk5OTkuOTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTk5OTk5OTk5OTk5Ljk5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1B1cmNoYXNlIE9yZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NhbGUgT3JkZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmb3JtR3JvdXA6IGRlZmVycmVkRm9ybUdyb3VwIH0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RGVmZXJyZWRUYXhJdGVtRnJvbUdyb3VwKHsgZ3JvdXAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdiYXNlQ2FsY3VsbycpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgnYmFzZUNhbGN1bG8nKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdhbGlxdW90YScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgnYWxpcXVvdGEnKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdhbGlxdW90YUVmZXRpdmEnKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsaXF1b3RhRWZldGl2YSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ3ZhbG9yJykhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRGb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdhbGlxdW90YScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRGb3JtR3JvdXAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGlxdW90YSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhhYmxlQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVUYXhSYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4QW1vdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRUYXhSYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcih0YXhhYmxlQmFzZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcih0YXhSYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVUYXhSYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheEFtb3VudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRUYXhSYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSBhcyBjb25zdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRUYXhSYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLmlzRmluaXRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFJhdGUuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlVGF4UmF0ZS5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhBbW91bnQuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRUYXhSYXRlLmlzRmluaXRlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTk5OTk5OTk5OTk5Ljk5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5OTk5OTk5OTk5OS45OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFJlZ3JhIFRheEFtb3VudFJlcXVpcmVkVmFsaWRhdGlvblJ1bGUgbsOjbyBpbXBsZW1lbnRhZGEgcGFyYSBvIGltcG9zdG8gJHt0YXhUeXBlfSwgZG9jdW1lbnRvICR7ZG9jdW1lbnR9LmBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnVtVGlwb1RyaWJ1dG8uQ0JTX0FfQVBST1BSSUFSOlxuICAgICAgICAgICAgY2FzZSBFbnVtVGlwb1RyaWJ1dG8uSUJTX0VTVEFEVUFMX0FfQVBST1BSSUFSOlxuICAgICAgICAgICAgY2FzZSBFbnVtVGlwb1RyaWJ1dG8uSUJTX01VTklDSVBBTF9BX0FQUk9QUklBUjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0luY29taW5nIEludm9pY2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUHVyY2hhc2UgT3JkZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdiYXNlQ2FsY3VsbycpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgnYmFzZUNhbGN1bG8nKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdhbGlxdW90YScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgnYWxpcXVvdGEnKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCd2YWxvcicpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgndmFsb3InKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4YWJsZUJhc2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4UmF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcih0YXhBbW91bnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIGFzIGNvbnN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhhYmxlQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4QW1vdW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLmlzRmluaXRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFJhdGUuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4QW1vdW50LmlzRmluaXRlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTk5OTk5OTk5OTk5Ljk5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5OTk5OTk5OTk5OS45OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFJlZ3JhIFRheEFtb3VudFJlcXVpcmVkVmFsaWRhdGlvblJ1bGUgbsOjbyBpbXBsZW1lbnRhZGEgcGFyYSBvIGltcG9zdG8gJHt0YXhUeXBlfSwgZG9jdW1lbnRvICR7ZG9jdW1lbnR9LmBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnVtVGlwb1RyaWJ1dG8uQ0JTX0RJRkVSSURPOlxuICAgICAgICAgICAgY2FzZSBFbnVtVGlwb1RyaWJ1dG8uSUJTX0VTVEFEVUFMX0RJRkVSSURPOlxuICAgICAgICAgICAgY2FzZSBFbnVtVGlwb1RyaWJ1dG8uSUJTX01VTklDSVBBTF9ESUZFUklETzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0luY29taW5nIEludm9pY2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3V0Z29pbmcgSW52b2ljZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdQdXJjaGFzZSBPcmRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTYWxlIE9yZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnYmFzZUNhbGN1bG8nKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ2Jhc2VDYWxjdWxvJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnYWxpcXVvdGEnKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ2FsaXF1b3RhJykhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ3ZhbG9yJykhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhhYmxlQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhBbW91bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheGFibGVCYXNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheFJhdGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4QW1vdW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSBhcyBjb25zdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFt0YXhhYmxlQmFzZSwgdGF4UmF0ZSwgdGF4QW1vdW50XSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLmlzRmluaXRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFJhdGUuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4QW1vdW50LmlzRmluaXRlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTk5OTk5OTk5OTk5Ljk5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk5OTk5OTk5OTk5OS45OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEVudW1UaXBvVHJpYnV0by5DQlNfQ1JFRElUT19QUkVTVU1JRE86XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJbmNvbWluZyBJbnZvaWNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ091dGdvaW5nIEludm9pY2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdiYXNlQ2FsY3VsbycpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgnYmFzZUNhbGN1bG8nKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdhbGlxdW90YScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgnYWxpcXVvdGEnKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdjbGFzc2lmaWNhY2FvVHJpYnV0YXJpYScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3NpZmljYWNhb1RyaWJ1dGFyaWEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhSYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4Q2xhc3NpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcih0YXhhYmxlQmFzZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcih0YXhSYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDbGFzc2ljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gYXMgY29uc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhSYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDbGFzc2ljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZS5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDbGFzc2ljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdQdXJjaGFzZSBPcmRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTYWxlIE9yZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnYmFzZUNhbGN1bG8nKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ2Jhc2VDYWxjdWxvJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnYWxpcXVvdGEnKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ2FsaXF1b3RhJykhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbdGF4YWJsZUJhc2UsIHRheFJhdGVdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4YWJsZUJhc2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4UmF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gYXMgY29uc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChbdGF4YWJsZUJhc2UsIHRheFJhdGVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhSYXRlLmlzRmluaXRlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFJlZ3JhIFRheEFtb3VudFJlcXVpcmVkVmFsaWRhdGlvblJ1bGUgbsOjbyBpbXBsZW1lbnRhZGEgcGFyYSBvIGltcG9zdG8gJHt0YXhUeXBlfSwgZG9jdW1lbnRvICR7ZG9jdW1lbnR9LmBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnVtVGlwb1RyaWJ1dG8uQ0JTX1RSSUJVVEFDQU9fUkVHVUxBUjpcbiAgICAgICAgICAgIGNhc2UgRW51bVRpcG9UcmlidXRvLklCU19FU1RBRFVBTF9UUklCVVRBQ0FPX1JFR1VMQVI6XG4gICAgICAgICAgICBjYXNlIEVudW1UaXBvVHJpYnV0by5JQlNfTVVOSUNJUEFMX1RSSUJVVEFDQU9fUkVHVUxBUjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0luY29taW5nIEludm9pY2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3V0Z29pbmcgSW52b2ljZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2Jhc2VDYWxjdWxvJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdiYXNlQ2FsY3VsbycpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2FsaXF1b3RhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdhbGlxdW90YScpIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCd2YWxvcicpIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3NpdHVhY2FvVHJpYnV0YXJpYScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l0dWFjYW9UcmlidXRhcmlhJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdjbGFzc2lmaWNhY2FvVHJpYnV0YXJpYScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3NpZmljYWNhb1RyaWJ1dGFyaWEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaXRUaW1lKDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheENsYXNzaWNhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4YWJsZUJhc2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4UmF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcih0YXhBbW91bnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDbGFzc2ljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gYXMgY29uc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheENsYXNzaWNhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZS5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhBbW91bnQuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4U2l0dWF0aW9uIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDbGFzc2ljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWxpZGF0b3JzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdQdXJjaGFzZSBPcmRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTYWxlIE9yZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnYmFzZUNhbGN1bG8nKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ2Jhc2VDYWxjdWxvJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnYWxpcXVvdGEnKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ2FsaXF1b3RhJykhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ3ZhbG9yJykhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhhYmxlQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhBbW91bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheGFibGVCYXNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheFJhdGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4QW1vdW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSBhcyBjb25zdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFt0YXhhYmxlQmFzZSwgdGF4UmF0ZSwgdGF4QW1vdW50XSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLmlzRmluaXRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFJhdGUuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4QW1vdW50LmlzRmluaXRlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3ZhbG9yJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFJlZ3JhIFRheEFtb3VudFJlcXVpcmVkVmFsaWRhdGlvblJ1bGUgbsOjbyBpbXBsZW1lbnRhZGEgcGFyYSBvIGltcG9zdG8gJHt0YXhUeXBlfSwgZG9jdW1lbnRvICR7ZG9jdW1lbnR9LmBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFbnVtVGlwb1RyaWJ1dG8uSVM6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJbmNvbWluZyBJbnZvaWNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ091dGdvaW5nIEludm9pY2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1B1cmNoYXNlIE9yZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NhbGUgT3JkZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdiYXNlQ2FsY3VsbycpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgnYmFzZUNhbGN1bG8nKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdhbGlxdW90YScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgnYWxpcXVvdGEnKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCd2YWxvcicpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgndmFsb3InKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheGFibGVCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4YWJsZUJhc2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4UmF0ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJpZ051bWJlcih0YXhBbW91bnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIGFzIGNvbnN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoW3RheGFibGVCYXNlLCB0YXhSYXRlLCB0YXhBbW91bnRdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4YWJsZUJhc2UuaXNGaW5pdGUoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZS5pc0Zpbml0ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhBbW91bnQuaXNGaW5pdGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OTk5OTk5OTk5OTkuOTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTk5OTk5OTk5OTk5Ljk5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRW51bVRpcG9UcmlidXRvLkNCU19FU1RPUk5PX0NSRURJVE86XG4gICAgICAgICAgICBjYXNlIEVudW1UaXBvVHJpYnV0by5JQlNfRVNUT1JOT19DUkVESVRPOlxuICAgICAgICAgICAgY2FzZSBFbnVtVGlwb1RyaWJ1dG8uQ0JTX1RSQU5TRkVSRU5DSUFfQ1JFRElUTzpcbiAgICAgICAgICAgIGNhc2UgRW51bVRpcG9UcmlidXRvLklCU19UUkFOU0ZFUkVOQ0lBX0NSRURJVE86XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ3NpdHVhY2FvVHJpYnV0YXJpYScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldCgnc2l0dWFjYW9UcmlidXRhcmlhJykhLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnY2xhc3NpZmljYWNhb1RyaWJ1dGFyaWEnKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ2NsYXNzaWZpY2FjYW9UcmlidXRhcmlhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChmb3JtR3JvdXAuZ2V0KCd2YWxvcicpIS52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhTaXR1YXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDbGFzc2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDbGFzc2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQmlnTnVtYmVyKHRheEFtb3VudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gYXMgY29uc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbdGF4U2l0dWF0aW9uLCB0YXhDbGFzc2lmaWNhdGlvbiwgdGF4QW1vdW50XSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4Q2xhc3NpZmljYXRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudC5pc0Zpbml0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heCg5OTk5OTk5OTk5OTk5Ljk5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heCg5OTk5OTk5OTk5OTk5Ljk5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ3ZhbG9yJykhLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRW51bVRpcG9UcmlidXRvLkNCU19BSlVTVEU6XG4gICAgICAgICAgICBjYXNlIEVudW1UaXBvVHJpYnV0by5JQlNfQUpVU1RFOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdzaXR1YWNhb1RyaWJ1dGFyaWEnKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ3NpdHVhY2FvVHJpYnV0YXJpYScpIS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ2NsYXNzaWZpY2FjYW9UcmlidXRhcmlhJykhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KCdjbGFzc2lmaWNhY2FvVHJpYnV0YXJpYScpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoRW51bUNhbXBvVHJpYnV0by5QZXJpb2RvQXB1cmFjYW8pIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtQ2FtcG9UcmlidXRvLlBlcmlvZG9BcHVyYWNhb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSEudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCd2YWxvcicpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKGZvcm1Hcm91cC5nZXQoJ3ZhbG9yJykhLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheENsYXNzaWZpY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXNzbWVudFBlcmlvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDbGFzc2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3Nlc3NtZW50UGVyaW9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCaWdOdW1iZXIodGF4QW1vdW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSBhcyBjb25zdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4U2l0dWF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhDbGFzc2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXNzbWVudFBlcmlvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4QW1vdW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheFNpdHVhdGlvbiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF4Q2xhc3NpZmljYXRpb24gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2Vzc21lbnRQZXJpb2QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheEFtb3VudC5pc0Zpbml0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heCg5OTk5OTk5OTk5OTk5Ljk5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heCg5OTk5OTk5OTk5OTk5Ljk5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgndmFsb3InKSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoJ3ZhbG9yJykhLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgUmVncmEgVGF4QW1vdW50UmVxdWlyZWRWYWxpZGF0aW9uUnVsZSBuw6NvIGltcGxlbWVudGFkYSBwYXJhIG8gaW1wb3N0byAke3RheFR5cGV9LCBkb2N1bWVudG8gJHtkb2N1bWVudH0uYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=