@senior-agronegocio/angular-components 0.0.49

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 (391) hide show
  1. package/agro-angular-components.module.d.ts +9 -0
  2. package/bundles/senior-agronegocio-angular-components.umd.js +5855 -0
  3. package/bundles/senior-agronegocio-angular-components.umd.js.map +1 -0
  4. package/bundles/senior-agronegocio-angular-components.umd.min.js +17 -0
  5. package/bundles/senior-agronegocio-angular-components.umd.min.js.map +1 -0
  6. package/common/agro-array-utils.class.d.ts +35 -0
  7. package/common/agro-cookie-utils.class.d.ts +8 -0
  8. package/common/agro-date-utils.class.d.ts +88 -0
  9. package/common/agro-name-utils.class.d.ts +22 -0
  10. package/common/agro-number-utils.class.d.ts +71 -0
  11. package/common/agro-object-utils.class.d.ts +161 -0
  12. package/common/agro-platform-utils.class.d.ts +38 -0
  13. package/common/agro-regex.constant.d.ts +142 -0
  14. package/common/agro-string-utils.class.d.ts +194 -0
  15. package/common/colors.class.d.ts +76 -0
  16. package/common/index.d.ts +10 -0
  17. package/components/event-control-board/common/control-status.d.ts +5 -0
  18. package/components/event-control-board/common/documentsToIssue.d.ts +4 -0
  19. package/components/event-control-board/common/event-control-constants.d.ts +15 -0
  20. package/components/event-control-board/common/event-operation.d.ts +11 -0
  21. package/components/event-control-board/common/event-origin.d.ts +7 -0
  22. package/components/event-control-board/common/event-status.d.ts +7 -0
  23. package/components/event-control-board/common/invoice-status.d.ts +12 -0
  24. package/components/event-control-board/common/invoice-type.d.ts +5 -0
  25. package/components/event-control-board/common/lookup-error-message.constants.d.ts +3 -0
  26. package/components/event-control-board/common/operation.d.ts +5 -0
  27. package/components/event-control-board/common/operationType.d.ts +5 -0
  28. package/components/event-control-board/common/status-entity.d.ts +4 -0
  29. package/components/event-control-board/common/ticket-status.d.ts +7 -0
  30. package/components/event-control-board/event-control-board.component.d.ts +97 -0
  31. package/components/event-control-board/event-control-board.module.d.ts +2 -0
  32. package/components/event-control-board/index.d.ts +20 -0
  33. package/components/event-control-board/service/e001pes/e001pes-dto.d.ts +12 -0
  34. package/components/event-control-board/service/e001pes/e001pes.d.ts +15 -0
  35. package/components/event-control-board/service/e001pes/e001pes.module.d.ts +2 -0
  36. package/components/event-control-board/service/e001pes/e001pes.service.d.ts +13 -0
  37. package/components/event-control-board/service/e001tns/e001tns-dto.d.ts +14 -0
  38. package/components/event-control-board/service/e001tns/e001tns.d.ts +19 -0
  39. package/components/event-control-board/service/e001tns/e001tns.module.d.ts +2 -0
  40. package/components/event-control-board/service/e001tns/e001tns.service.d.ts +11 -0
  41. package/components/event-control-board/service/e012fam/e012fam-dto.d.ts +11 -0
  42. package/components/event-control-board/service/e012fam/e012fam.d.ts +14 -0
  43. package/components/event-control-board/service/e012fam/e012fam.service.d.ts +11 -0
  44. package/components/event-control-board/service/e070emp/e070emp-dto.d.ts +10 -0
  45. package/components/event-control-board/service/e070emp/e070emp.d.ts +13 -0
  46. package/components/event-control-board/service/e070emp/e070emp.module.d.ts +2 -0
  47. package/components/event-control-board/service/e070emp/e070emp.service.d.ts +12 -0
  48. package/components/event-control-board/service/e070fil/e070fil-dto.d.ts +14 -0
  49. package/components/event-control-board/service/e070fil/e070fil.d.ts +17 -0
  50. package/components/event-control-board/service/e070fil/e070fil.module.d.ts +2 -0
  51. package/components/event-control-board/service/e070fil/e070fil.service.d.ts +12 -0
  52. package/components/event-control-board/service/e075der/e075der-dto.d.ts +15 -0
  53. package/components/event-control-board/service/e075der/e075der.d.ts +18 -0
  54. package/components/event-control-board/service/e075der/e075der.module.d.ts +2 -0
  55. package/components/event-control-board/service/e075der/e075der.service.d.ts +12 -0
  56. package/components/event-control-board/service/e113saf/e113saf-dto.d.ts +11 -0
  57. package/components/event-control-board/service/e113saf/e113saf.d.ts +14 -0
  58. package/components/event-control-board/service/e205dep/deposit-dto.d.ts +11 -0
  59. package/components/event-control-board/service/e205dep/e205dep-dto.d.ts +15 -0
  60. package/components/event-control-board/service/e205dep/e205dep.d.ts +16 -0
  61. package/components/event-control-board/service/e205dep/e205dep.service.d.ts +12 -0
  62. package/components/event-control-board/service/entity-service.d.ts +72 -0
  63. package/components/event-control-board/service/event-control/event-control-dto.d.ts +12 -0
  64. package/components/event-control-board/service/event-control/event-control.d.ts +18 -0
  65. package/components/event-control-board/service/event-control/event-control.module.d.ts +2 -0
  66. package/components/event-control-board/service/event-control/event-control.service.d.ts +11 -0
  67. package/components/event-control-board/service/event-control-board.service.d.ts +11 -0
  68. package/components/event-control-board/service/event-control-item/event-control-item-dto.d.ts +17 -0
  69. package/components/event-control-board/service/event-control-item/event-control-item.d.ts +23 -0
  70. package/components/event-control-board/service/event-control-item/event-control-item.module.d.ts +2 -0
  71. package/components/event-control-board/service/event-control-item/event-control-item.service.d.ts +15 -0
  72. package/components/event-control-board/service/external-invoice/external-invoice-dto.d.ts +13 -0
  73. package/components/event-control-board/service/external-invoice/external-invoice.d.ts +13 -0
  74. package/components/event-control-board/service/external-invoice/external-invoice.module.d.ts +2 -0
  75. package/components/event-control-board/service/external-invoice/external-invoice.service.d.ts +11 -0
  76. package/components/event-control-board/service/invoice/invoice-dto.d.ts +15 -0
  77. package/components/event-control-board/service/invoice/invoice.d.ts +21 -0
  78. package/components/event-control-board/service/invoice/invoice.module.d.ts +2 -0
  79. package/components/event-control-board/service/invoice/invoice.service.d.ts +11 -0
  80. package/components/event-control-board/service/origination/operationType.d.ts +5 -0
  81. package/components/event-control-board/service/origination/origination-dto.d.ts +50 -0
  82. package/components/event-control-board/service/origination/origination.d.ts +51 -0
  83. package/components/event-control-board/service/origination/origination.module.d.ts +2 -0
  84. package/components/event-control-board/service/origination/origination.service.d.ts +11 -0
  85. package/components/event-control-board/service/paginator-storage.service.d.ts +8 -0
  86. package/components/event-control-board/service/producer-invoice/producer-invoice-dto.d.ts +26 -0
  87. package/components/event-control-board/service/producer-invoice/producer-invoice.d.ts +27 -0
  88. package/components/event-control-board/service/producer-invoice/producer-invoice.module.d.ts +2 -0
  89. package/components/event-control-board/service/producer-invoice/producer-invoice.service.d.ts +11 -0
  90. package/components/event-control-board/service/rural-estate/rural-estate-dto.d.ts +28 -0
  91. package/components/event-control-board/service/rural-estate/rural-estate.d.ts +34 -0
  92. package/components/event-control-board/service/rural-estate/rural-estate.module.d.ts +2 -0
  93. package/components/event-control-board/service/rural-estate/rural-estate.service.d.ts +11 -0
  94. package/components/event-control-board/service/ticket/ticket-dto.d.ts +17 -0
  95. package/components/event-control-board/service/ticket/ticket.d.ts +18 -0
  96. package/components/event-control-board/service/ticket/ticket.module.d.ts +2 -0
  97. package/components/event-control-board/service/ticket/ticket.service.d.ts +45 -0
  98. package/components/event-control-board/shared.module.d.ts +2 -0
  99. package/components/event-steps/event-steps.component.d.ts +35 -0
  100. package/components/event-steps/event-steps.module.d.ts +2 -0
  101. package/components/event-steps/index.d.ts +2 -0
  102. package/components/index.d.ts +2 -0
  103. package/enums/agro-entity-status.enum.d.ts +4 -0
  104. package/enums/agro-numbers.enum.d.ts +1006 -0
  105. package/enums/agro-string-masks.enum.d.ts +10 -0
  106. package/enums/date-comparison-type.enum.d.ts +4 -0
  107. package/enums/http-codes.enum.d.ts +64 -0
  108. package/enums/index.d.ts +6 -0
  109. package/enums/number-comparison-type.enum.d.ts +8 -0
  110. package/esm2015/agro-angular-components.module.js +22 -0
  111. package/esm2015/common/agro-array-utils.class.js +56 -0
  112. package/esm2015/common/agro-cookie-utils.class.js +31 -0
  113. package/esm2015/common/agro-date-utils.class.js +117 -0
  114. package/esm2015/common/agro-name-utils.class.js +59 -0
  115. package/esm2015/common/agro-number-utils.class.js +102 -0
  116. package/esm2015/common/agro-object-utils.class.js +245 -0
  117. package/esm2015/common/agro-platform-utils.class.js +97 -0
  118. package/esm2015/common/agro-regex.constant.js +143 -0
  119. package/esm2015/common/agro-string-utils.class.js +367 -0
  120. package/esm2015/common/colors.class.js +77 -0
  121. package/esm2015/common/index.js +11 -0
  122. package/esm2015/components/event-control-board/common/control-status.js +7 -0
  123. package/esm2015/components/event-control-board/common/documentsToIssue.js +6 -0
  124. package/esm2015/components/event-control-board/common/event-control-constants.js +28 -0
  125. package/esm2015/components/event-control-board/common/event-operation.js +13 -0
  126. package/esm2015/components/event-control-board/common/event-origin.js +9 -0
  127. package/esm2015/components/event-control-board/common/event-status.js +9 -0
  128. package/esm2015/components/event-control-board/common/invoice-status.js +14 -0
  129. package/esm2015/components/event-control-board/common/invoice-type.js +7 -0
  130. package/esm2015/components/event-control-board/common/lookup-error-message.constants.js +11 -0
  131. package/esm2015/components/event-control-board/common/operation.js +7 -0
  132. package/esm2015/components/event-control-board/common/operationType.js +7 -0
  133. package/esm2015/components/event-control-board/common/status-entity.js +6 -0
  134. package/esm2015/components/event-control-board/common/ticket-status.js +9 -0
  135. package/esm2015/components/event-control-board/event-control-board.component.js +503 -0
  136. package/esm2015/components/event-control-board/event-control-board.module.js +62 -0
  137. package/esm2015/components/event-control-board/index.js +21 -0
  138. package/esm2015/components/event-control-board/service/e001pes/e001pes-dto.js +1 -0
  139. package/esm2015/components/event-control-board/service/e001pes/e001pes.js +20 -0
  140. package/esm2015/components/event-control-board/service/e001pes/e001pes.module.js +24 -0
  141. package/esm2015/components/event-control-board/service/e001pes/e001pes.service.js +34 -0
  142. package/esm2015/components/event-control-board/service/e001tns/e001tns-dto.js +1 -0
  143. package/esm2015/components/event-control-board/service/e001tns/e001tns.js +42 -0
  144. package/esm2015/components/event-control-board/service/e001tns/e001tns.module.js +26 -0
  145. package/esm2015/components/event-control-board/service/e001tns/e001tns.service.js +24 -0
  146. package/esm2015/components/event-control-board/service/e012fam/e012fam-dto.js +1 -0
  147. package/esm2015/components/event-control-board/service/e012fam/e012fam.js +20 -0
  148. package/esm2015/components/event-control-board/service/e012fam/e012fam.service.js +24 -0
  149. package/esm2015/components/event-control-board/service/e070emp/e070emp-dto.js +1 -0
  150. package/esm2015/components/event-control-board/service/e070emp/e070emp.js +29 -0
  151. package/esm2015/components/event-control-board/service/e070emp/e070emp.module.js +24 -0
  152. package/esm2015/components/event-control-board/service/e070emp/e070emp.service.js +31 -0
  153. package/esm2015/components/event-control-board/service/e070fil/e070fil-dto.js +1 -0
  154. package/esm2015/components/event-control-board/service/e070fil/e070fil.js +41 -0
  155. package/esm2015/components/event-control-board/service/e070fil/e070fil.module.js +24 -0
  156. package/esm2015/components/event-control-board/service/e070fil/e070fil.service.js +31 -0
  157. package/esm2015/components/event-control-board/service/e075der/e075der-dto.js +1 -0
  158. package/esm2015/components/event-control-board/service/e075der/e075der.js +31 -0
  159. package/esm2015/components/event-control-board/service/e075der/e075der.module.js +24 -0
  160. package/esm2015/components/event-control-board/service/e075der/e075der.service.js +29 -0
  161. package/esm2015/components/event-control-board/service/e113saf/e113saf-dto.js +1 -0
  162. package/esm2015/components/event-control-board/service/e113saf/e113saf.js +20 -0
  163. package/esm2015/components/event-control-board/service/e205dep/deposit-dto.js +1 -0
  164. package/esm2015/components/event-control-board/service/e205dep/e205dep-dto.js +1 -0
  165. package/esm2015/components/event-control-board/service/e205dep/e205dep.js +20 -0
  166. package/esm2015/components/event-control-board/service/e205dep/e205dep.service.js +29 -0
  167. package/esm2015/components/event-control-board/service/entity-service.js +129 -0
  168. package/esm2015/components/event-control-board/service/event-control/event-control-dto.js +1 -0
  169. package/esm2015/components/event-control-board/service/event-control/event-control.js +20 -0
  170. package/esm2015/components/event-control-board/service/event-control/event-control.module.js +26 -0
  171. package/esm2015/components/event-control-board/service/event-control/event-control.service.js +24 -0
  172. package/esm2015/components/event-control-board/service/event-control-board.service.js +33 -0
  173. package/esm2015/components/event-control-board/service/event-control-item/event-control-item-dto.js +1 -0
  174. package/esm2015/components/event-control-board/service/event-control-item/event-control-item.js +34 -0
  175. package/esm2015/components/event-control-board/service/event-control-item/event-control-item.module.js +26 -0
  176. package/esm2015/components/event-control-board/service/event-control-item/event-control-item.service.js +29 -0
  177. package/esm2015/components/event-control-board/service/external-invoice/external-invoice-dto.js +1 -0
  178. package/esm2015/components/event-control-board/service/external-invoice/external-invoice.js +20 -0
  179. package/esm2015/components/event-control-board/service/external-invoice/external-invoice.module.js +26 -0
  180. package/esm2015/components/event-control-board/service/external-invoice/external-invoice.service.js +24 -0
  181. package/esm2015/components/event-control-board/service/invoice/invoice-dto.js +1 -0
  182. package/esm2015/components/event-control-board/service/invoice/invoice.js +43 -0
  183. package/esm2015/components/event-control-board/service/invoice/invoice.module.js +26 -0
  184. package/esm2015/components/event-control-board/service/invoice/invoice.service.js +24 -0
  185. package/esm2015/components/event-control-board/service/origination/operationType.js +7 -0
  186. package/esm2015/components/event-control-board/service/origination/origination-dto.js +1 -0
  187. package/esm2015/components/event-control-board/service/origination/origination.js +59 -0
  188. package/esm2015/components/event-control-board/service/origination/origination.module.js +24 -0
  189. package/esm2015/components/event-control-board/service/origination/origination.service.js +24 -0
  190. package/esm2015/components/event-control-board/service/paginator-storage.service.js +32 -0
  191. package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice-dto.js +1 -0
  192. package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice.js +32 -0
  193. package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice.module.js +26 -0
  194. package/esm2015/components/event-control-board/service/producer-invoice/producer-invoice.service.js +24 -0
  195. package/esm2015/components/event-control-board/service/rural-estate/rural-estate-dto.js +1 -0
  196. package/esm2015/components/event-control-board/service/rural-estate/rural-estate.js +78 -0
  197. package/esm2015/components/event-control-board/service/rural-estate/rural-estate.module.js +26 -0
  198. package/esm2015/components/event-control-board/service/rural-estate/rural-estate.service.js +24 -0
  199. package/esm2015/components/event-control-board/service/ticket/ticket-dto.js +1 -0
  200. package/esm2015/components/event-control-board/service/ticket/ticket.js +39 -0
  201. package/esm2015/components/event-control-board/service/ticket/ticket.module.js +26 -0
  202. package/esm2015/components/event-control-board/service/ticket/ticket.service.js +59 -0
  203. package/esm2015/components/event-control-board/shared.module.js +60 -0
  204. package/esm2015/components/event-steps/event-steps.component.js +103 -0
  205. package/esm2015/components/event-steps/event-steps.module.js +16 -0
  206. package/esm2015/components/event-steps/index.js +3 -0
  207. package/esm2015/components/index.js +3 -0
  208. package/esm2015/enums/agro-entity-status.enum.js +6 -0
  209. package/esm2015/enums/agro-numbers.enum.js +1007 -0
  210. package/esm2015/enums/agro-string-masks.enum.js +12 -0
  211. package/esm2015/enums/date-comparison-type.enum.js +6 -0
  212. package/esm2015/enums/http-codes.enum.js +66 -0
  213. package/esm2015/enums/index.js +7 -0
  214. package/esm2015/enums/number-comparison-type.enum.js +10 -0
  215. package/esm2015/form-validator/agro-form-validator.js +229 -0
  216. package/esm2015/form-validator/index.js +2 -0
  217. package/esm2015/lib-translation.module.js +21 -0
  218. package/esm2015/pipe/index.js +2 -0
  219. package/esm2015/pipe/lib-translate.pipe.js +24 -0
  220. package/esm2015/public-api.js +9 -0
  221. package/esm2015/senior-agronegocio-angular-components.js +6 -0
  222. package/esm2015/services/i18n/en-US.js +195 -0
  223. package/esm2015/services/i18n/es-CO.js +195 -0
  224. package/esm2015/services/i18n/pt-BR.js +195 -0
  225. package/esm2015/services/index.js +3 -0
  226. package/esm2015/services/lib-translation.service.js +54 -0
  227. package/esm2015/services/websocket/async-lock.js +34 -0
  228. package/esm2015/services/websocket/index.js +6 -0
  229. package/esm2015/services/websocket/models/index.js +2 -0
  230. package/esm2015/services/websocket/models/primitive-manager.js +39 -0
  231. package/esm2015/services/websocket/protocols/index.js +1 -0
  232. package/esm2015/services/websocket/protocols/on-event-options.js +1 -0
  233. package/esm2015/services/websocket/protocols/primitive-event.js +1 -0
  234. package/esm2015/services/websocket/user-information.service.js +34 -0
  235. package/esm2015/services/websocket/websocket.module.js +21 -0
  236. package/esm2015/services/websocket/websocket.service.js +339 -0
  237. package/esm5/agro-angular-components.module.js +26 -0
  238. package/esm5/common/agro-array-utils.class.js +72 -0
  239. package/esm5/common/agro-cookie-utils.class.js +38 -0
  240. package/esm5/common/agro-date-utils.class.js +122 -0
  241. package/esm5/common/agro-name-utils.class.js +63 -0
  242. package/esm5/common/agro-number-utils.class.js +109 -0
  243. package/esm5/common/agro-object-utils.class.js +250 -0
  244. package/esm5/common/agro-platform-utils.class.js +101 -0
  245. package/esm5/common/agro-regex.constant.js +143 -0
  246. package/esm5/common/agro-string-utils.class.js +383 -0
  247. package/esm5/common/colors.class.js +81 -0
  248. package/esm5/common/index.js +11 -0
  249. package/esm5/components/event-control-board/common/control-status.js +7 -0
  250. package/esm5/components/event-control-board/common/documentsToIssue.js +6 -0
  251. package/esm5/components/event-control-board/common/event-control-constants.js +28 -0
  252. package/esm5/components/event-control-board/common/event-operation.js +13 -0
  253. package/esm5/components/event-control-board/common/event-origin.js +9 -0
  254. package/esm5/components/event-control-board/common/event-status.js +9 -0
  255. package/esm5/components/event-control-board/common/invoice-status.js +14 -0
  256. package/esm5/components/event-control-board/common/invoice-type.js +7 -0
  257. package/esm5/components/event-control-board/common/lookup-error-message.constants.js +11 -0
  258. package/esm5/components/event-control-board/common/operation.js +7 -0
  259. package/esm5/components/event-control-board/common/operationType.js +7 -0
  260. package/esm5/components/event-control-board/common/status-entity.js +6 -0
  261. package/esm5/components/event-control-board/common/ticket-status.js +9 -0
  262. package/esm5/components/event-control-board/event-control-board.component.js +528 -0
  263. package/esm5/components/event-control-board/event-control-board.module.js +65 -0
  264. package/esm5/components/event-control-board/index.js +21 -0
  265. package/esm5/components/event-control-board/service/e001pes/e001pes-dto.js +1 -0
  266. package/esm5/components/event-control-board/service/e001pes/e001pes.js +25 -0
  267. package/esm5/components/event-control-board/service/e001pes/e001pes.module.js +27 -0
  268. package/esm5/components/event-control-board/service/e001pes/e001pes.service.js +37 -0
  269. package/esm5/components/event-control-board/service/e001tns/e001tns-dto.js +1 -0
  270. package/esm5/components/event-control-board/service/e001tns/e001tns.js +45 -0
  271. package/esm5/components/event-control-board/service/e001tns/e001tns.module.js +29 -0
  272. package/esm5/components/event-control-board/service/e001tns/e001tns.service.js +27 -0
  273. package/esm5/components/event-control-board/service/e012fam/e012fam-dto.js +1 -0
  274. package/esm5/components/event-control-board/service/e012fam/e012fam.js +25 -0
  275. package/esm5/components/event-control-board/service/e012fam/e012fam.service.js +27 -0
  276. package/esm5/components/event-control-board/service/e070emp/e070emp-dto.js +1 -0
  277. package/esm5/components/event-control-board/service/e070emp/e070emp.js +34 -0
  278. package/esm5/components/event-control-board/service/e070emp/e070emp.module.js +27 -0
  279. package/esm5/components/event-control-board/service/e070emp/e070emp.service.js +34 -0
  280. package/esm5/components/event-control-board/service/e070fil/e070fil-dto.js +1 -0
  281. package/esm5/components/event-control-board/service/e070fil/e070fil.js +48 -0
  282. package/esm5/components/event-control-board/service/e070fil/e070fil.module.js +27 -0
  283. package/esm5/components/event-control-board/service/e070fil/e070fil.service.js +34 -0
  284. package/esm5/components/event-control-board/service/e075der/e075der-dto.js +1 -0
  285. package/esm5/components/event-control-board/service/e075der/e075der.js +36 -0
  286. package/esm5/components/event-control-board/service/e075der/e075der.module.js +27 -0
  287. package/esm5/components/event-control-board/service/e075der/e075der.service.js +32 -0
  288. package/esm5/components/event-control-board/service/e113saf/e113saf-dto.js +1 -0
  289. package/esm5/components/event-control-board/service/e113saf/e113saf.js +25 -0
  290. package/esm5/components/event-control-board/service/e205dep/deposit-dto.js +1 -0
  291. package/esm5/components/event-control-board/service/e205dep/e205dep-dto.js +1 -0
  292. package/esm5/components/event-control-board/service/e205dep/e205dep.js +25 -0
  293. package/esm5/components/event-control-board/service/e205dep/e205dep.service.js +32 -0
  294. package/esm5/components/event-control-board/service/entity-service.js +140 -0
  295. package/esm5/components/event-control-board/service/event-control/event-control-dto.js +1 -0
  296. package/esm5/components/event-control-board/service/event-control/event-control.js +25 -0
  297. package/esm5/components/event-control-board/service/event-control/event-control.module.js +29 -0
  298. package/esm5/components/event-control-board/service/event-control/event-control.service.js +27 -0
  299. package/esm5/components/event-control-board/service/event-control-board.service.js +34 -0
  300. package/esm5/components/event-control-board/service/event-control-item/event-control-item-dto.js +1 -0
  301. package/esm5/components/event-control-board/service/event-control-item/event-control-item.js +39 -0
  302. package/esm5/components/event-control-board/service/event-control-item/event-control-item.module.js +29 -0
  303. package/esm5/components/event-control-board/service/event-control-item/event-control-item.service.js +32 -0
  304. package/esm5/components/event-control-board/service/external-invoice/external-invoice-dto.js +1 -0
  305. package/esm5/components/event-control-board/service/external-invoice/external-invoice.js +25 -0
  306. package/esm5/components/event-control-board/service/external-invoice/external-invoice.module.js +29 -0
  307. package/esm5/components/event-control-board/service/external-invoice/external-invoice.service.js +27 -0
  308. package/esm5/components/event-control-board/service/invoice/invoice-dto.js +1 -0
  309. package/esm5/components/event-control-board/service/invoice/invoice.js +48 -0
  310. package/esm5/components/event-control-board/service/invoice/invoice.module.js +29 -0
  311. package/esm5/components/event-control-board/service/invoice/invoice.service.js +27 -0
  312. package/esm5/components/event-control-board/service/origination/operationType.js +7 -0
  313. package/esm5/components/event-control-board/service/origination/origination-dto.js +1 -0
  314. package/esm5/components/event-control-board/service/origination/origination.js +62 -0
  315. package/esm5/components/event-control-board/service/origination/origination.module.js +27 -0
  316. package/esm5/components/event-control-board/service/origination/origination.service.js +27 -0
  317. package/esm5/components/event-control-board/service/paginator-storage.service.js +71 -0
  318. package/esm5/components/event-control-board/service/producer-invoice/producer-invoice-dto.js +1 -0
  319. package/esm5/components/event-control-board/service/producer-invoice/producer-invoice.js +37 -0
  320. package/esm5/components/event-control-board/service/producer-invoice/producer-invoice.module.js +29 -0
  321. package/esm5/components/event-control-board/service/producer-invoice/producer-invoice.service.js +27 -0
  322. package/esm5/components/event-control-board/service/rural-estate/rural-estate-dto.js +1 -0
  323. package/esm5/components/event-control-board/service/rural-estate/rural-estate.js +83 -0
  324. package/esm5/components/event-control-board/service/rural-estate/rural-estate.module.js +29 -0
  325. package/esm5/components/event-control-board/service/rural-estate/rural-estate.service.js +27 -0
  326. package/esm5/components/event-control-board/service/ticket/ticket-dto.js +1 -0
  327. package/esm5/components/event-control-board/service/ticket/ticket.js +44 -0
  328. package/esm5/components/event-control-board/service/ticket/ticket.module.js +29 -0
  329. package/esm5/components/event-control-board/service/ticket/ticket.service.js +62 -0
  330. package/esm5/components/event-control-board/shared.module.js +63 -0
  331. package/esm5/components/event-steps/event-steps.component.js +113 -0
  332. package/esm5/components/event-steps/event-steps.module.js +19 -0
  333. package/esm5/components/event-steps/index.js +3 -0
  334. package/esm5/components/index.js +3 -0
  335. package/esm5/enums/agro-entity-status.enum.js +6 -0
  336. package/esm5/enums/agro-numbers.enum.js +1007 -0
  337. package/esm5/enums/agro-string-masks.enum.js +12 -0
  338. package/esm5/enums/date-comparison-type.enum.js +6 -0
  339. package/esm5/enums/http-codes.enum.js +66 -0
  340. package/esm5/enums/index.js +7 -0
  341. package/esm5/enums/number-comparison-type.enum.js +10 -0
  342. package/esm5/form-validator/agro-form-validator.js +239 -0
  343. package/esm5/form-validator/index.js +2 -0
  344. package/esm5/lib-translation.module.js +24 -0
  345. package/esm5/pipe/index.js +2 -0
  346. package/esm5/pipe/lib-translate.pipe.js +29 -0
  347. package/esm5/public-api.js +9 -0
  348. package/esm5/senior-agronegocio-angular-components.js +6 -0
  349. package/esm5/services/i18n/en-US.js +195 -0
  350. package/esm5/services/i18n/es-CO.js +195 -0
  351. package/esm5/services/i18n/pt-BR.js +195 -0
  352. package/esm5/services/index.js +3 -0
  353. package/esm5/services/lib-translation.service.js +56 -0
  354. package/esm5/services/websocket/async-lock.js +43 -0
  355. package/esm5/services/websocket/index.js +6 -0
  356. package/esm5/services/websocket/models/index.js +2 -0
  357. package/esm5/services/websocket/models/primitive-manager.js +58 -0
  358. package/esm5/services/websocket/protocols/index.js +1 -0
  359. package/esm5/services/websocket/protocols/on-event-options.js +1 -0
  360. package/esm5/services/websocket/protocols/primitive-event.js +1 -0
  361. package/esm5/services/websocket/user-information.service.js +38 -0
  362. package/esm5/services/websocket/websocket.module.js +24 -0
  363. package/esm5/services/websocket/websocket.service.js +411 -0
  364. package/fesm2015/senior-agronegocio-angular-components.js +5279 -0
  365. package/fesm2015/senior-agronegocio-angular-components.js.map +1 -0
  366. package/fesm5/senior-agronegocio-angular-components.js +5638 -0
  367. package/fesm5/senior-agronegocio-angular-components.js.map +1 -0
  368. package/form-validator/agro-form-validator.d.ts +103 -0
  369. package/form-validator/index.d.ts +1 -0
  370. package/lib-translation.module.d.ts +2 -0
  371. package/package.json +82 -0
  372. package/pipe/index.d.ts +1 -0
  373. package/pipe/lib-translate.pipe.d.ts +7 -0
  374. package/public-api.d.ts +8 -0
  375. package/senior-agronegocio-angular-components.d.ts +5 -0
  376. package/senior-agronegocio-angular-components.metadata.json +1 -0
  377. package/services/i18n/en-US.d.ts +194 -0
  378. package/services/i18n/es-CO.d.ts +194 -0
  379. package/services/i18n/pt-BR.d.ts +194 -0
  380. package/services/index.d.ts +2 -0
  381. package/services/lib-translation.service.d.ts +15 -0
  382. package/services/websocket/async-lock.d.ts +6 -0
  383. package/services/websocket/index.d.ts +6 -0
  384. package/services/websocket/models/index.d.ts +1 -0
  385. package/services/websocket/models/primitive-manager.d.ts +19 -0
  386. package/services/websocket/protocols/index.d.ts +2 -0
  387. package/services/websocket/protocols/on-event-options.d.ts +8 -0
  388. package/services/websocket/protocols/primitive-event.d.ts +10 -0
  389. package/services/websocket/user-information.service.d.ts +7 -0
  390. package/services/websocket/websocket.module.d.ts +2 -0
  391. package/services/websocket/websocket.service.d.ts +100 -0
@@ -0,0 +1,503 @@
1
+ import { __awaiter, __decorate } from "tslib";
2
+ import { FormBuilder, FormGroup, Validators } from "@angular/forms";
3
+ import { catchError, map, switchMap, takeUntil } from "rxjs/operators";
4
+ import { forkJoin, Subject } from "rxjs";
5
+ import { BadgeColors, ButtonPriority, FieldType, FormField, StepState } from "@seniorsistemas/angular-components";
6
+ import { registerLocaleData } from "@angular/common";
7
+ import localePt from "@angular/common/locales/pt";
8
+ import { Component, Input, LOCALE_ID } from '@angular/core';
9
+ import { ActivatedRoute } from '@angular/router';
10
+ import { WebsocketService } from "../../services/websocket";
11
+ import { LookupErrorMessages } from "./common/lookup-error-message.constants";
12
+ import { MessageService } from "primeng";
13
+ import { PaginatorStorageService } from "./service/paginator-storage.service";
14
+ import { EventStatus } from "./common/event-status";
15
+ import { eventItem } from "./common/event-control-constants";
16
+ import { EventOrigin } from "./common/event-origin";
17
+ import { EventControlBoardService } from "./service/event-control-board.service";
18
+ const moment = require("moment");
19
+ import { AGRO_NUMBERS } from "../../enums/agro-numbers.enum";
20
+ import { LibTranslationService } from "../../services/lib-translation.service";
21
+ let EventControlBoardComponent = class EventControlBoardComponent {
22
+ constructor(route, translate, formBuilder, websocketService, eventControlBoardService, paginatorStorageService, messageService) {
23
+ this.route = route;
24
+ this.translate = translate;
25
+ this.formBuilder = formBuilder;
26
+ this.websocketService = websocketService;
27
+ this.eventControlBoardService = eventControlBoardService;
28
+ this.paginatorStorageService = paginatorStorageService;
29
+ this.messageService = messageService;
30
+ this.steps = [];
31
+ this.showSidebar = false;
32
+ this.showReprocessButton = false;
33
+ this.gridTotalRecords = AGRO_NUMBERS.ZERO;
34
+ this.gridLoading = false;
35
+ this.displayModal = false;
36
+ this.ButtonPriority = ButtonPriority;
37
+ this.BadgeColors = BadgeColors;
38
+ this.permissions = {};
39
+ this.localeConfig = {};
40
+ this.currentListParams = { page: AGRO_NUMBERS.ZERO, size: AGRO_NUMBERS.TEN, sort: [], filterData: {} };
41
+ this.ngUnsubscribe = new Subject();
42
+ this.eventItem = eventItem;
43
+ registerLocaleData(localePt);
44
+ }
45
+ ngOnInit() {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ this.route.data.pipe(takeUntil(this.ngUnsubscribe)).subscribe((data) => this.onRouteDataChange(data));
48
+ this.gridColumns = this.setGridColumns();
49
+ this.websocketService.onConnect();
50
+ this.callWebsocket();
51
+ });
52
+ }
53
+ ngOnChanges(changes) {
54
+ if (!this.filterFormGroup) {
55
+ this.initializeFormGroup();
56
+ this.setFormFields();
57
+ }
58
+ this.updateCompanyAndBranchFormFields(changes);
59
+ this.updateEventOriginAndTicketFormFields(changes);
60
+ this.updateEventStatusAndCreatedDateFormFields(changes);
61
+ this.onSearch();
62
+ }
63
+ updateCompanyAndBranchFormFields(changes) {
64
+ var _a, _b, _c, _d;
65
+ if (changes.e070emp && changes.e070emp.currentValue !== changes.e070emp.previousValue) {
66
+ (_a = this.filterFormGroup.get('e070emp')) === null || _a === void 0 ? void 0 : _a.setValue((_b = changes.e070emp.currentValue) !== null && _b !== void 0 ? _b : null);
67
+ }
68
+ if (changes.e070fil && changes.e070fil.currentValue !== changes.e070fil.previousValue) {
69
+ (_c = this.filterFormGroup.get('e070fil')) === null || _c === void 0 ? void 0 : _c.setValue((_d = changes.e070fil.currentValue) !== null && _d !== void 0 ? _d : null);
70
+ }
71
+ }
72
+ updateEventOriginAndTicketFormFields(changes) {
73
+ var _a, _b, _c, _d;
74
+ if (changes.eventOrigin && changes.eventOrigin.currentValue !== changes.eventOrigin.previousValue) {
75
+ (_a = this.filterFormGroup.get('eventOrigin')) === null || _a === void 0 ? void 0 : _a.setValue((_b = changes.eventOrigin.currentValue) !== null && _b !== void 0 ? _b : null);
76
+ }
77
+ if (changes.ticket && changes.ticket.currentValue !== changes.ticket.previousValue) {
78
+ (_c = this.filterFormGroup.get('number')) === null || _c === void 0 ? void 0 : _c.setValue((_d = changes.ticket.currentValue) !== null && _d !== void 0 ? _d : null);
79
+ }
80
+ }
81
+ updateEventStatusAndCreatedDateFormFields(changes) {
82
+ var _a, _b, _c, _d;
83
+ if (changes.eventStatus && changes.eventStatus.currentValue !== changes.eventStatus.previousValue) {
84
+ (_a = this.filterFormGroup.get('status')) === null || _a === void 0 ? void 0 : _a.setValue((_b = changes.eventStatus.currentValue) !== null && _b !== void 0 ? _b : null);
85
+ }
86
+ if (changes.createdDate && changes.createdDate.currentValue !== changes.createdDate.previousValue) {
87
+ (_c = this.filterFormGroup.get('createdDate')) === null || _c === void 0 ? void 0 : _c.setValue((_d = changes.createdDate.currentValue) !== null && _d !== void 0 ? _d : null);
88
+ }
89
+ }
90
+ initializeFormGroup() {
91
+ var _a, _b, _c, _d, _e, _f, _g;
92
+ this.filterFormGroup = this.formBuilder.group({
93
+ e070emp: [{ value: (_a = this.e070emp) !== null && _a !== void 0 ? _a : null, disabled: false }, Validators.compose([])],
94
+ e070fil: [{ value: (_b = this.e070fil) !== null && _b !== void 0 ? _b : null, disabled: false }, Validators.compose([])],
95
+ number: [{ value: (_c = this.ticket) !== null && _c !== void 0 ? _c : null, disabled: false }, Validators.compose([])],
96
+ externalId: [{ value: (_d = this.externalId) !== null && _d !== void 0 ? _d : null, disabled: false }, Validators.compose([])],
97
+ eventOrigin: [{ value: (_e = this.eventOrigin) !== null && _e !== void 0 ? _e : null, disabled: false }, Validators.compose([])],
98
+ status: [{ value: (_f = this.eventStatus) !== null && _f !== void 0 ? _f : null, disabled: false }, Validators.compose([])],
99
+ createdDate: [{ value: (_g = this.createdDate) !== null && _g !== void 0 ? _g : null, disabled: false }, Validators.compose([])],
100
+ });
101
+ }
102
+ setFormFields() {
103
+ this.filterFields = [
104
+ new FormField({
105
+ name: "e070emp",
106
+ type: FieldType.Chips,
107
+ }),
108
+ new FormField({
109
+ name: "e070fil",
110
+ type: FieldType.Chips,
111
+ }),
112
+ new FormField({
113
+ name: "number",
114
+ type: FieldType.Chips,
115
+ }),
116
+ new FormField({
117
+ name: "externalId",
118
+ type: FieldType.String,
119
+ }),
120
+ new FormField({
121
+ name: "eventOrigin",
122
+ type: FieldType.Enum,
123
+ }),
124
+ new FormField({
125
+ name: "status",
126
+ type: FieldType.Enum,
127
+ }),
128
+ new FormField({
129
+ name: "createdDate",
130
+ type: FieldType.Date,
131
+ }),
132
+ ];
133
+ }
134
+ setGridColumns() {
135
+ return [
136
+ { field: 'e070emp', header: this.translate.instant("agro.angular_components.company") },
137
+ { field: 'e070fil', header: this.translate.instant("agro.angular_components.label_branch") },
138
+ { field: 'eventOrigin', header: this.translate.instant("agro.angular_components.event_origin_label") },
139
+ { field: 'number', header: this.translate.instant("agro.angular_components.ticket") },
140
+ ];
141
+ }
142
+ ngOnDestroy() {
143
+ this.ngUnsubscribe.next();
144
+ this.ngUnsubscribe.complete();
145
+ this.websocketService.disconnect();
146
+ }
147
+ callWebsocket() {
148
+ this.websocketService
149
+ .onEvent({
150
+ domain: 'agro',
151
+ service: 'agro_events',
152
+ primitive: "processedEvent",
153
+ })
154
+ .pipe(takeUntil(this.ngUnsubscribe))
155
+ .subscribe(() => {
156
+ const filterData = this.filterFormGroup.getRawValue();
157
+ this.updateGrid({ filterData });
158
+ });
159
+ this.websocketService
160
+ .onEvent({
161
+ domain: 'platform',
162
+ service: 'notifications',
163
+ primitive: "userNotified",
164
+ })
165
+ .pipe(takeUntil(this.ngUnsubscribe))
166
+ .subscribe(() => {
167
+ const filterData = this.filterFormGroup.getRawValue();
168
+ this.updateGrid({ filterData });
169
+ });
170
+ }
171
+ onSearch() {
172
+ const filterData = this.filterFormGroup.getRawValue();
173
+ this.gridLoading = true;
174
+ this.resetGrid({ filterData });
175
+ this.updateGrid({ filterData });
176
+ }
177
+ onRouteDataChange(data) {
178
+ this.permissions = data.allPermissions;
179
+ this.localeConfig = data.localeConfig;
180
+ }
181
+ resetGrid(listParams) {
182
+ if (listParams) {
183
+ this.currentListParams = Object.assign(Object.assign({}, this.currentListParams), listParams);
184
+ }
185
+ this.currentListParams.page = AGRO_NUMBERS.ZERO;
186
+ }
187
+ updateGrid(listParams = {}) {
188
+ this.currentListParams = Object.assign(Object.assign({}, this.currentListParams), listParams);
189
+ const { page, size } = this.currentListParams;
190
+ const nSort = this.getSortedFields();
191
+ const filterQuery = this.getFilterQuery();
192
+ const displayFields = [""];
193
+ this.eventControlBoardService.eventControlService
194
+ .list({ sort: nSort, page, size, filterQuery, displayFields })
195
+ .pipe(takeUntil(this.ngUnsubscribe), catchError((err) => {
196
+ this.gridLoading = false;
197
+ throw err;
198
+ }))
199
+ .subscribe((list) => this.handleListResponse(list));
200
+ }
201
+ getSortedFields() {
202
+ var _a;
203
+ let nSort = [];
204
+ if (((_a = this.currentListParams.sort) === null || _a === void 0 ? void 0 : _a.length) > 0) {
205
+ nSort = JSON.parse(JSON.stringify(this.currentListParams.sort));
206
+ nSort.forEach((sortItem) => {
207
+ sortItem.field = this.getFieldNameForSortRequest(sortItem.field);
208
+ });
209
+ }
210
+ else {
211
+ nSort.push({ field: 'lastModifiedDate', order: AGRO_NUMBERS.MINUSONE });
212
+ }
213
+ return nSort;
214
+ }
215
+ getFilterQuery() {
216
+ const { filterData } = this.currentListParams;
217
+ const filterJson = { filter: {} };
218
+ return [...this.filterFields]
219
+ .filter(({ name }) => filterData && filterData[name] !== undefined && filterData[name] !== null && filterData[name].length !== 0)
220
+ .map((formField) => {
221
+ var _a;
222
+ const lookupFieldName = 'id';
223
+ const finalFilterName = (_a = formField.name) !== null && _a !== void 0 ? _a : '';
224
+ filterJson.filter[finalFilterName] = filterData[finalFilterName].id;
225
+ return this.createFilterString(finalFilterName, formField.type, filterData[finalFilterName], lookupFieldName);
226
+ })
227
+ .filter((filter) => filter !== null && filter !== '' && filter !== undefined)
228
+ .join(' and ');
229
+ }
230
+ handleListResponse(list) {
231
+ this.gridData = list.contents;
232
+ this.gridTotalRecords = list.totalElements;
233
+ if (!this.gridData || this.gridData.length <= AGRO_NUMBERS.ZERO) {
234
+ this.gridLoading = false;
235
+ return;
236
+ }
237
+ this.processDetailCalls();
238
+ }
239
+ processDetailCalls() {
240
+ const detailCalls$ = this.gridData.map((item) => this.eventControlBoardService.eventControlItemService.list({
241
+ filterQuery: `eventControl eq '${item.id}'`,
242
+ sort: [{ field: 'sequence', order: AGRO_NUMBERS.ONE }],
243
+ size: AGRO_NUMBERS.ONE_HUNDRED
244
+ })
245
+ .pipe(takeUntil(this.ngUnsubscribe), catchError((err) => {
246
+ this.gridLoading = false;
247
+ throw err;
248
+ }), switchMap(detailsResponse => {
249
+ return this.eventControlBoardService.ticketService.list({
250
+ filterQuery: `id eq '${item.externalId}' or balanceEntryControl.id eq '${item.externalId}'`,
251
+ displayFields: ['number']
252
+ })
253
+ .pipe(map((ticketResponse) => ({ detailsResponse, ticketResponse })), catchError((err) => {
254
+ this.gridLoading = false;
255
+ throw err;
256
+ }));
257
+ })));
258
+ forkJoin(detailCalls$).subscribe((responses) => {
259
+ this.processDetailsResponses(responses);
260
+ });
261
+ }
262
+ processDetailsResponses(detailsResponses) {
263
+ this.gridData.forEach((item, index) => {
264
+ var _a, _b;
265
+ const { detailsResponse, ticketResponse } = detailsResponses[index];
266
+ const tickets = (_a = ticketResponse === null || ticketResponse === void 0 ? void 0 : ticketResponse.contents) !== null && _a !== void 0 ? _a : [];
267
+ item.details = (_b = detailsResponse === null || detailsResponse === void 0 ? void 0 : detailsResponse.contents) !== null && _b !== void 0 ? _b : [];
268
+ item.tickets = tickets.map((ticket) => ticket.number).join(', ');
269
+ const groupedDetails = this.groupByEventGroup(item.details);
270
+ item.groups = Object.keys(groupedDetails).map(eventGroupId => {
271
+ const groupDetails = groupedDetails[eventGroupId];
272
+ const lastActiveIndex = groupDetails.map((detail) => detail.status !== EventStatus.PENDING).lastIndexOf(true);
273
+ let activeIndex = lastActiveIndex;
274
+ if (lastActiveIndex !== -1 && groupDetails[lastActiveIndex].status === EventStatus.SUCCESS) {
275
+ activeIndex = lastActiveIndex + 1;
276
+ }
277
+ const steps = groupDetails.map((detail, detailIndex) => {
278
+ return {
279
+ item: detail,
280
+ ticket: item.tickets,
281
+ eventType: detail.eventControl.eventOrigin,
282
+ label: this.getEventLabel(detail),
283
+ disabled: detail.status === EventStatus.PENDING && detailIndex !== activeIndex,
284
+ tooltip: this.getEventLabel(detail),
285
+ state: this.determineStepState(detail),
286
+ };
287
+ });
288
+ return {
289
+ eventGroupId,
290
+ steps,
291
+ activeIndex
292
+ };
293
+ });
294
+ item.activeIndex = item.groups.length > 0 ? item.groups[0].activeIndex : -1;
295
+ });
296
+ this.gridDataResolved = this.gridData;
297
+ this.gridLoading = false;
298
+ }
299
+ groupByEventGroup(details) {
300
+ return details.reduce((acc, detail) => {
301
+ const eventGroupId = detail.eventGroup;
302
+ if (!acc[eventGroupId]) {
303
+ acc[eventGroupId] = [];
304
+ }
305
+ acc[eventGroupId].push(detail);
306
+ return acc;
307
+ }, {});
308
+ }
309
+ determineStepState(detail) {
310
+ let state;
311
+ if (detail.status === EventStatus.SUCCESS) {
312
+ state = StepState.Success;
313
+ }
314
+ else if (detail.status === EventStatus.FAILED) {
315
+ state = StepState.Warning;
316
+ }
317
+ else {
318
+ state = StepState.Default;
319
+ }
320
+ return state;
321
+ }
322
+ getEventLabel(detail) {
323
+ var _a;
324
+ const eventLabel = (_a = this.eventItem.find(e => e.value === detail.eventOperation)) === null || _a === void 0 ? void 0 : _a.label;
325
+ return eventLabel ? this.translate.instant(eventLabel) : detail.eventOperation;
326
+ }
327
+ getFieldNameForSortRequest(name) {
328
+ switch (name) {
329
+ case 'e070emp':
330
+ return 'e070emp.nomEmp';
331
+ case 'e070fil':
332
+ return 'e070fil.nomFil';
333
+ case 'number':
334
+ return 'createdDate';
335
+ default:
336
+ return name;
337
+ }
338
+ }
339
+ createFilterString(name, type, value, lookupFieldName = 'id') {
340
+ if (name === 'number') {
341
+ const filterParts = [];
342
+ value.forEach(item => {
343
+ filterParts.push(`externalId eq '${item.id}'`);
344
+ if (item.invoice) {
345
+ filterParts.push(`externalId eq '${item.invoice.id}'`);
346
+ }
347
+ if (item.balanceEntryControl) {
348
+ filterParts.push(`externalId eq '${item.balanceEntryControl.id}'`);
349
+ }
350
+ });
351
+ return `(${filterParts.join(' or ')})`;
352
+ }
353
+ return this.createFilterStringFromType(name, type, value, lookupFieldName);
354
+ }
355
+ createFilterStringFromType(name, type, value, lookupFieldName) {
356
+ if (type === FieldType.Chips) {
357
+ return `${name} eq '${value[lookupFieldName]}'`;
358
+ }
359
+ if (type === FieldType.Date) {
360
+ const startOfDay = moment(value).startOf('day').format("YYYY-MM-DDTHH:mm:ss") + 'Z';
361
+ const endOfDay = moment(value).endOf('day').format("YYYY-MM-DDTHH:mm:ss") + 'Z';
362
+ return `${name} ge '${startOfDay}' and ${name} le '${endOfDay}'`;
363
+ }
364
+ return `${name} eq '${value}'`;
365
+ }
366
+ onGridChange(event) {
367
+ const size = event === null || event === void 0 ? void 0 : event.rows;
368
+ const page = (event === null || event === void 0 ? void 0 : event.first) / size;
369
+ const sort = event.multiSortMeta;
370
+ this.gridLoading = true;
371
+ if (size !== AGRO_NUMBERS.TEN || page !== AGRO_NUMBERS.ZERO || (sort && sort.length > AGRO_NUMBERS.ZERO)) {
372
+ this.paginatorStorageService.storePaginator('EventControlBoardPaginator', { page, size, sort });
373
+ }
374
+ return this.updateGrid({ page, size, sort });
375
+ }
376
+ getPageSize() {
377
+ return this.currentListParams.size;
378
+ }
379
+ getRowIndex() {
380
+ return this.currentListParams.page * this.currentListParams.size;
381
+ }
382
+ getSortField() {
383
+ if (!this.currentListParams.sort || this.currentListParams.sort.length <= AGRO_NUMBERS.ZERO) {
384
+ return this.gridColumns[AGRO_NUMBERS.ZERO].field;
385
+ }
386
+ return this.currentListParams.sort[AGRO_NUMBERS.ZERO].field;
387
+ }
388
+ getSortOrder() {
389
+ if (!this.currentListParams.sort || this.currentListParams.sort.length <= AGRO_NUMBERS.ZERO) {
390
+ return AGRO_NUMBERS.ONE;
391
+ }
392
+ return this.currentListParams.sort[AGRO_NUMBERS.ZERO].order;
393
+ }
394
+ getErrorMessages() {
395
+ const translatedErrorMessages = {};
396
+ for (const key in LookupErrorMessages) {
397
+ if (LookupErrorMessages.hasOwnProperty(key)) {
398
+ this.translate.get(LookupErrorMessages[key]).subscribe((res) => {
399
+ translatedErrorMessages[key] = res;
400
+ });
401
+ }
402
+ }
403
+ return translatedErrorMessages;
404
+ }
405
+ stepSelected(event) {
406
+ this.selectedStep = event.step;
407
+ if (this.selectedStep.eventType !== EventOrigin.CHANGE_REQUEST) {
408
+ this.sidebarLoading = true;
409
+ const param = JSON.parse(this.selectedStep.item.input);
410
+ const producerInvoiceId = param.producerInvoiceIds ? param.producerInvoiceIds[0]
411
+ : param.invoice.generalData.transactionalId;
412
+ this.eventControlBoardService.producerInvoiceService.get(producerInvoiceId)
413
+ .pipe(takeUntil(this.ngUnsubscribe))
414
+ .subscribe((result) => {
415
+ this.producerInvoice = result;
416
+ this.sidebarLoading = false;
417
+ }, () => {
418
+ this.sidebarLoading = false;
419
+ });
420
+ }
421
+ this.showReprocessButton = event.step.state === StepState.Warning;
422
+ this.sidebarTitle = this.translate.instant('agro.angular_components.event_sidebar_title', { event: event.step.label });
423
+ this.showSidebar = true;
424
+ }
425
+ reprocessEvent() {
426
+ const reprocessEventObj = {
427
+ eventControlItemId: this.selectedStep.item.id
428
+ };
429
+ this.eventControlBoardService.eventControlItemService.reprocessFailedEvent(reprocessEventObj)
430
+ .pipe(takeUntil(this.ngUnsubscribe))
431
+ .subscribe(() => {
432
+ this.addMessage('info', 'agro.angular_components.reprocessing_event_message_title', 'agro.angular_components.reprocessing_event_message_description');
433
+ }, () => {
434
+ this.addMessage('error', 'agro.angular_components.error_reprocessing_event_message_title', 'agro.angular_components.error_reprocessing_event_message_description');
435
+ });
436
+ }
437
+ addMessage(severity, summary, detail) {
438
+ this.messageService.add({
439
+ severity,
440
+ summary: this.translate.instant(summary),
441
+ detail: this.translate.instant(detail),
442
+ });
443
+ }
444
+ openModal() {
445
+ this.displayModal = true;
446
+ }
447
+ confirmModal() {
448
+ this.reprocessEvent();
449
+ this.displayModal = false;
450
+ this.showSidebar = false;
451
+ }
452
+ cancelModal() {
453
+ this.displayModal = false;
454
+ }
455
+ closeSidebar() {
456
+ this.showSidebar = false;
457
+ }
458
+ };
459
+ EventControlBoardComponent.ctorParameters = () => [
460
+ { type: ActivatedRoute },
461
+ { type: LibTranslationService },
462
+ { type: FormBuilder },
463
+ { type: WebsocketService },
464
+ { type: EventControlBoardService },
465
+ { type: PaginatorStorageService },
466
+ { type: MessageService }
467
+ ];
468
+ __decorate([
469
+ Input()
470
+ ], EventControlBoardComponent.prototype, "e070emp", void 0);
471
+ __decorate([
472
+ Input()
473
+ ], EventControlBoardComponent.prototype, "e070fil", void 0);
474
+ __decorate([
475
+ Input()
476
+ ], EventControlBoardComponent.prototype, "ticket", void 0);
477
+ __decorate([
478
+ Input()
479
+ ], EventControlBoardComponent.prototype, "eventOrigin", void 0);
480
+ __decorate([
481
+ Input()
482
+ ], EventControlBoardComponent.prototype, "eventStatus", void 0);
483
+ __decorate([
484
+ Input()
485
+ ], EventControlBoardComponent.prototype, "externalId", void 0);
486
+ __decorate([
487
+ Input()
488
+ ], EventControlBoardComponent.prototype, "createdDate", void 0);
489
+ __decorate([
490
+ Input()
491
+ ], EventControlBoardComponent.prototype, "standalone", void 0);
492
+ EventControlBoardComponent = __decorate([
493
+ Component({
494
+ selector: 'event-control-board',
495
+ template: "<div class=\"ui-g\" *sLoadingState=\"gridLoading\">\r\n <div class=\"ui-g-12\">\r\n <p-panel>\r\n <p-header>\r\n {{ \"agro.angular_components.event_control_header\" | libTranslate }}\r\n </p-header>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12\">\r\n <s-button\r\n id=\"refresh-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.refresh' | libTranslate\"\r\n (click)=\"onSearch()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12 ui-md-12\" *ngIf=\"!gridData || gridData?.length === 0\">\r\n <s-empty-state\r\n iconClass=\"fa fa-exclamation-triangle\"\r\n title=\"{{ 'agro.angular_components.nothing_found' | libTranslate }}\"\r\n [showPrimaryAction]=\"false\"\r\n description=\"{{ 'agro.angular_components.table_empty_description' | libTranslate }}\"\r\n >\r\n </s-empty-state>\r\n </div>\r\n <ng-container *ngIf=\"gridData?.length > 0\">\r\n <p-table\r\n stylelass=\"custom-table\"\r\n #eventControlTable\r\n [value]=\"gridDataResolved\"\r\n [columns]=\"gridColumns\"\r\n dataKey=\"id\"\r\n [lazy]=\"true\"\r\n [scrollable]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [paginator]=\"!standalone\"\r\n [totalRecords]=\"gridTotalRecords\"\r\n [rows]=\"10\"\r\n [responsive]=\"true\"\r\n (onLazyLoad)=\"onGridChange($event)\"\r\n [sortOrder]=\"getSortOrder()\"\r\n [first]=\"getRowIndex()\"\r\n [lazyLoadOnInit]=\"false\"\r\n sortMode=\"multiple\"\r\n [rows]=\"getPageSize()\"\r\n [rowsPerPageOptions]=\"[10, 20, 50, 100]\"\r\n >\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <th\r\n *ngFor=\"let col of columns\"\r\n class=\"ui-lg-1 ui-md-1\"\r\n [pSortableColumn]=\"col.field\"\r\n scope=\"col\"\r\n >\r\n <div class=\"senior-header\">\r\n <span class=\"senior-header-title\">{{\r\n col.header\r\n }}</span>\r\n <p-sortIcon [field]=\"col.field\"></p-sortIcon>\r\n </div>\r\n </th>\r\n </ng-container>\r\n <th class=\"ui-lg-8 ui-md-7\" scope=\"col\">\r\n {{ \"agro.angular_components.panel_title_events_events\" | libTranslate }}\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData>\r\n <tr>\r\n <ng-container *ngIf=\"!standalone\">\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n {{ rowData.e070emp?.nomEmp }}\r\n </td>\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n {{ rowData.e070fil?.nomFil }}\r\n </td>\r\n <td class=\"ui-lg-1 ui-md-1\">\r\n <ng-container [ngSwitch]=\"rowData.eventOrigin\">\r\n <span *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{\r\n \"agro.angular_components.balance_entry_control_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'TICKET'\">\r\n {{\r\n \"agro.angular_components.ticket_maintenance_header\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'INVOICE'\">\r\n {{\r\n \"agro.angular_components.invoice_creating_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n <span *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{\r\n \"agro.angular_components.change_request_event\"\r\n | libTranslate\r\n }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <td class=\"ui-lg-1 ui ui-md-1\">\r\n {{ rowData.tickets || \"\" }}\r\n </td>\r\n </ng-container>\r\n <td class=\"ui-lg-8 ui-md-7\">\r\n <ng-container *ngFor=\"let group of rowData.groups\">\r\n <s-event-steps\r\n [steps]=\"group.steps || []\"\r\n [activeIndex]=\"group.activeIndex\"\r\n (stepSelected)=\"stepSelected($event)\"\r\n >\r\n </s-event-steps>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template\r\n *ngIf=\"!standalone\"\r\n pTemplate=\"paginatorright\"\r\n class=\"custom-table\"\r\n >\r\n <span>\r\n {{\r\n \"agro.angular_components.registers_found\"\r\n | libTranslate : { total: gridTotalRecords }\r\n }}\r\n </span>\r\n </ng-template>\r\n </p-table>\r\n </ng-container>\r\n </div>\r\n </p-panel>\r\n </div>\r\n</div>\r\n<s-sidebar [visible]=\"showSidebar\" (visibleChange)=\"closeSidebar()\" header=\"{{ 'agro.angular_components.event_details_header' | libTranslate }}\">\r\n <div class=\"ui-fluid\">\r\n <p-fieldset legend=\"{{ sidebarTitle }}\" [toggleable]=\"false\">\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{\r\n \"agro.angular_components.event_origin_label\" | libTranslate\r\n }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.item.eventControl.eventOrigin\">\r\n <p *ngSwitchCase=\"'BALANCE_ENTRY_CONTROL'\">\r\n {{ \"agro.angular_components.balance_entry_control_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'TICKET'\">\r\n {{ \"agro.angular_components.ticket_maintenance_header\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'INVOICE'\">\r\n {{ \"agro.angular_components.invoice_creating_event\" | libTranslate }}\r\n </p>\r\n <p *ngSwitchCase=\"'CHANGE_REQUEST'\">\r\n {{ \"agro.angular_components.change_request_event\" | libTranslate }}\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"producerInvoice?.e001pes.nomPes\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.supplier\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.e001pes.nomPes }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"producerInvoice?.ruralEstate.name\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.rural_estate\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ producerInvoice?.ruralEstate.name }}</p>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.ticket\" | libTranslate }}</strong></span\r\n >\r\n <p>{{ selectedStep?.ticket }}</p>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{ \"agro.angular_components.status_label\" | libTranslate }}</strong></span\r\n >\r\n <ng-container [ngSwitch]=\"selectedStep?.item.status\">\r\n <p *ngSwitchCase=\"'SUCCESS'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Green\"\r\n text=\"{{\r\n 'agro.angular_components.panel_title_events_completed_successfully'\r\n | libTranslate\r\n }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PROCESSING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Orange\"\r\n text=\"{{ 'agro.angular_components.processing' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'FAILED'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Red\"\r\n text=\"{{\r\n 'agro.angular_components.panel_title_events_ended_with_error'\r\n | libTranslate\r\n }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n <p *ngSwitchCase=\"'PENDING'\">\r\n <s-badge\r\n [color]=\"BadgeColors.Gray\"\r\n text=\"{{ 'agro.angular_components.pending' | libTranslate }}\"\r\n [selectable]=\"false\"\r\n >\r\n </s-badge>\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"ui-g-4\">\r\n <span\r\n ><strong>{{\r\n \"agro.angular_components.last_update_date\" | libTranslate\r\n }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.lastModifiedDate | date : \"dd/MM/yyyy HH:mm:ss\" }}</p>\r\n </div>\r\n <div class=\"ui-g-4\" *ngIf=\"selectedStep?.item.status === 'FAILED'\">\r\n <span\r\n ><strong>{{\r\n \"agro.angular_components.event_error_message\" | libTranslate\r\n }}</strong></span\r\n >\r\n <p>{{ selectedStep?.item.message || \"-\" }}</p>\r\n </div>\r\n </div>\r\n </p-fieldset>\r\n </div>\r\n <s-footer>\r\n <div class=\"ui-g\">\r\n <div class=\"ui-g-12 width-fit\">\r\n <s-button\r\n id=\"sidebar-close-button\"\r\n [priority]=\"ButtonPriority.Primary\"\r\n [label]=\"'agro.angular_components.events_close' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"closeSidebar()\"\r\n >\r\n </s-button>\r\n <s-button\r\n *ngIf=\"showReprocessButton\"\r\n id=\"sidebar-reprocess-button\"\r\n [priority]=\"ButtonPriority.Secondary\"\r\n iconClass=\"fa fa-refresh\"\r\n [label]=\"'agro.angular_components.reprocess_event' | libTranslate\"\r\n [auxiliary]=\"false\"\r\n (click)=\"openModal()\"\r\n >\r\n </s-button>\r\n </div>\r\n </div>\r\n </s-footer>\r\n</s-sidebar>\r\n\r\n<p-dialog [header]=\"'agro.angular_components.event_modal_title' | libTranslate\" [(visible)]=\"displayModal\" [modal]=\"true\" class=\"dialog\">\r\n <div class=\"event-modal-text\">{{ \"agro.angular_components.event_modal\" | libTranslate }}</div>\r\n <p-footer>\r\n <div class=\"ui-dialog-buttonpane ui-widget-content ui-helper-clearfix\">\r\n <button\r\n id=\"modal-yes\"\r\n type=\"button\"\r\n pButton\r\n icon=\"fa fa-check\"\r\n (click)=\"confirmModal()\"\r\n label=\"{{ 'agro.angular_components.yes' | libTranslate }}\"\r\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\"\r\n ></button>\r\n <button\r\n id=\"modal-no\"\r\n type=\"button\"\r\n pButton\r\n icon=\"fa fa-close\"\r\n (click)=\"cancelModal()\"\r\n label=\"{{ 'agro.angular_components.no' | libTranslate }}\"\r\n class=\"ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only\"\r\n ></button>\r\n </div>\r\n </p-footer>\r\n</p-dialog>\r\n",
496
+ providers: [
497
+ { provide: LOCALE_ID, useValue: 'pt-BR' }
498
+ ],
499
+ styles: [".frozen{border-left:2px solid #ddd}.dialog{width:\"600px\";height:\"300px\";z-index:100000}"]
500
+ })
501
+ ], EventControlBoardComponent);
502
+ export { EventControlBoardComponent };
503
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtY29udHJvbC1ib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZXZlbnQtY29udHJvbC1ib2FyZC9ldmVudC1jb250cm9sLWJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQVEsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxRQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxF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LFdBQVc7WUFDTixnQkFBZ0I7WUFDUix3QkFBd0I7WUFDekIsdUJBQXVCO1lBQ2hDLGNBQWM7O0FBL0MxQztJQUFSLEtBQUssRUFBRTsyREFBbUI7QUFDbEI7SUFBUixLQUFLLEVBQUU7MkRBQW1CO0FBQ2xCO0lBQVIsS0FBSyxFQUFFOzBEQUFpQjtBQUNoQjtJQUFSLEtBQUssRUFBRTsrREFBMkI7QUFDMUI7SUFBUixLQUFLLEVBQUU7K0RBQTJCO0FBQzFCO0lBQVIsS0FBSyxFQUFFOzhEQUFxQjtBQUNwQjtJQUFSLEtBQUssRUFBRTsrREFBb0I7QUFDbkI7SUFBUixLQUFLLEVBQUU7OERBQXNCO0FBVHJCLDBCQUEwQjtJQVJ0QyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUscUJBQXFCO1FBQy9CLHcwZkFBbUQ7UUFFbkQsU0FBUyxFQUFFO1lBQ1AsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7U0FDNUM7O0tBQ0osQ0FBQztHQUNXLDBCQUEwQixDQW9oQnRDO1NBcGhCWSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgZm9ya0pvaW4sIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBCYWRnZUNvbG9ycywgQnV0dG9uUHJpb3JpdHksIEZpZWxkVHlwZSwgRm9ybUZpZWxkLCBTdGVwLCBTdGVwU3RhdGUgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xyXG5pbXBvcnQgeyByZWdpc3RlckxvY2FsZURhdGEgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCBsb2NhbGVQdCBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvcHRcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgTE9DQUxFX0lELCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgV2Vic29ja2V0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy93ZWJzb2NrZXRcIjtcclxuaW1wb3J0IHsgTG9va3VwRXJyb3JNZXNzYWdlcyB9IGZyb20gXCIuL2NvbW1vbi9sb29rdXAtZXJyb3ItbWVzc2FnZS5jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgUmVwcm9jZXNzRmFpbGVkRXZlbnQgfSBmcm9tIFwiLi9zZXJ2aWNlL2V2ZW50LWNvbnRyb2wtaXRlbS9ldmVudC1jb250cm9sLWl0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gXCJwcmltZW5nXCI7XHJcbmltcG9ydCB7IFBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZS9wYWdpbmF0b3Itc3RvcmFnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEV2ZW50Q29udHJvbEl0ZW0gfSBmcm9tIFwiLi9zZXJ2aWNlL2V2ZW50LWNvbnRyb2wtaXRlbS9ldmVudC1jb250cm9sLWl0ZW1cIjtcclxuaW1wb3J0IHsgRXZlbnRTdGF0dXMgfSBmcm9tIFwiLi9jb21tb24vZXZlbnQtc3RhdHVzXCI7XHJcbmltcG9ydCB7IGV2ZW50SXRlbSB9IGZyb20gXCIuL2NvbW1vbi9ldmVudC1jb250cm9sLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFMDcwRW1wIH0gZnJvbSBcIi4vc2VydmljZS9lMDcwZW1wL2UwNzBlbXBcIjtcclxuaW1wb3J0IHsgRTA3MEZpbCB9IGZyb20gXCIuL3NlcnZpY2UvZTA3MGZpbC9lMDcwZmlsXCI7XHJcbmltcG9ydCB7IEV2ZW50T3JpZ2luIH0gZnJvbSBcIi4vY29tbW9uL2V2ZW50LW9yaWdpblwiO1xyXG5pbXBvcnQgeyBUaWNrZXQgfSBmcm9tIFwiLi9zZXJ2aWNlL3RpY2tldC90aWNrZXRcIjtcclxuaW1wb3J0IHsgRXZlbnRDb250cm9sQm9hcmRTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZS9ldmVudC1jb250cm9sLWJvYXJkLnNlcnZpY2VcIjtcclxuY29uc3QgbW9tZW50ID0gcmVxdWlyZShcIm1vbWVudFwiKTtcclxuaW1wb3J0IHsgUHJvZHVjZXJJbnZvaWNlRHRvIH0gZnJvbSBcIi4vc2VydmljZS9wcm9kdWNlci1pbnZvaWNlL3Byb2R1Y2VyLWludm9pY2UtZHRvXCI7XHJcbmltcG9ydCB7IEFHUk9fTlVNQkVSUyB9IGZyb20gXCIuLi8uLi9lbnVtcy9hZ3JvLW51bWJlcnMuZW51bVwiO1xyXG5pbXBvcnQgeyBMaWJUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbGliLXRyYW5zbGF0aW9uLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdldmVudC1jb250cm9sLWJvYXJkJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9ldmVudC1jb250cm9sLWJvYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2V2ZW50LWNvbnRyb2wtYm9hcmQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogTE9DQUxFX0lELCB1c2VWYWx1ZTogJ3B0LUJSJyB9XHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFdmVudENvbnRyb2xCb2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG5cclxuICAgIEBJbnB1dCgpIGUwNzBlbXAhOiBFMDcwRW1wO1xyXG4gICAgQElucHV0KCkgZTA3MGZpbCE6IEUwNzBGaWw7XHJcbiAgICBASW5wdXQoKSB0aWNrZXQhOiBUaWNrZXQ7XHJcbiAgICBASW5wdXQoKSBldmVudE9yaWdpbiE6IEV2ZW50T3JpZ2luO1xyXG4gICAgQElucHV0KCkgZXZlbnRTdGF0dXMhOiBFdmVudFN0YXR1cztcclxuICAgIEBJbnB1dCgpIGV4dGVybmFsSWQhOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBjcmVhdGVkRGF0ZSE6IERhdGU7XHJcbiAgICBASW5wdXQoKSBzdGFuZGFsb25lITogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgcHJvZHVjZXJJbnZvaWNlITogUHJvZHVjZXJJbnZvaWNlRHRvO1xyXG5cclxuICAgIHB1YmxpYyBzdGVwczogU3RlcFtdID0gW107XHJcbiAgICBwdWJsaWMgc2VsZWN0ZWRTdGVwOiBhbnk7XHJcbiAgICBwdWJsaWMgZXZlbnRJZCE6ICcnO1xyXG4gICAgcHVibGljIHNob3dTaWRlYmFyID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgc2hvd1JlcHJvY2Vzc0J1dHRvbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNpZGViYXJUaXRsZSE6IHN0cmluZztcclxuICAgIHB1YmxpYyBzaWRlYmFyTG9hZGluZyE6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIGZpbHRlckZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICAgIHB1YmxpYyBmaWx0ZXJGaWVsZHMhOiBGb3JtRmllbGRbXTtcclxuXHJcbiAgICBwdWJsaWMgZ3JpZERhdGEhOiBhbnlbXTtcclxuICAgIHB1YmxpYyBncmlkRGF0YVJlc29sdmVkITogYW55W107XHJcbiAgICBwdWJsaWMgZ3JpZENvbHVtbnMhOiBhbnlbXTtcclxuICAgIHB1YmxpYyBncmlkVG90YWxSZWNvcmRzID0gQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICBwdWJsaWMgZ3JpZExvYWRpbmcgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBkaXNwbGF5TW9kYWwgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgQnV0dG9uUHJpb3JpdHkgPSBCdXR0b25Qcmlvcml0eTtcclxuICAgIHB1YmxpYyBCYWRnZUNvbG9ycyA9IEJhZGdlQ29sb3JzO1xyXG5cclxuICAgIHB1YmxpYyBwZXJtaXNzaW9uczogYW55ID0ge307XHJcbiAgICBwdWJsaWMgbG9jYWxlQ29uZmlnOiBhbnkgPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudExpc3RQYXJhbXM6IGFueSA9IHsgcGFnZTogQUdST19OVU1CRVJTLlpFUk8sIHNpemU6IEFHUk9fTlVNQkVSUy5URU4sIHNvcnQ6IFtdLCBmaWx0ZXJEYXRhOiB7fSB9O1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50SXRlbSA9IGV2ZW50SXRlbTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogTGliVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgd2Vic29ja2V0U2VydmljZTogV2Vic29ja2V0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50Q29udHJvbEJvYXJkU2VydmljZTogRXZlbnRDb250cm9sQm9hcmRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnaW5hdG9yU3RvcmFnZVNlcnZpY2U6IFBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgcmVnaXN0ZXJMb2NhbGVEYXRhKGxvY2FsZVB0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLm9uUm91dGVEYXRhQ2hhbmdlKGRhdGEpKTtcclxuICAgICAgICB0aGlzLmdyaWRDb2x1bW5zID0gdGhpcy5zZXRHcmlkQ29sdW1ucygpO1xyXG5cclxuICAgICAgICB0aGlzLndlYnNvY2tldFNlcnZpY2Uub25Db25uZWN0KCk7XHJcbiAgICAgICAgdGhpcy5jYWxsV2Vic29ja2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1Hcm91cCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEZvcm1GaWVsZHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcGFueUFuZEJyYW5jaEZvcm1GaWVsZHMoY2hhbmdlcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVFdmVudE9yaWdpbkFuZFRpY2tldEZvcm1GaWVsZHMoY2hhbmdlcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVFdmVudFN0YXR1c0FuZENyZWF0ZWREYXRlRm9ybUZpZWxkcyhjaGFuZ2VzKTtcclxuICAgICAgICB0aGlzLm9uU2VhcmNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDb21wYW55QW5kQnJhbmNoRm9ybUZpZWxkcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuZTA3MGVtcCAmJiBjaGFuZ2VzLmUwNzBlbXAuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmUwNzBlbXAucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoJ2UwNzBlbXAnKT8uc2V0VmFsdWUoY2hhbmdlcy5lMDcwZW1wLmN1cnJlbnRWYWx1ZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzLmUwNzBmaWwgJiYgY2hhbmdlcy5lMDcwZmlsLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5lMDcwZmlsLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KCdlMDcwZmlsJyk/LnNldFZhbHVlKGNoYW5nZXMuZTA3MGZpbC5jdXJyZW50VmFsdWUgPz8gbnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlRXZlbnRPcmlnaW5BbmRUaWNrZXRGb3JtRmllbGRzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5ldmVudE9yaWdpbiAmJiBjaGFuZ2VzLmV2ZW50T3JpZ2luLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5ldmVudE9yaWdpbi5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnZXZlbnRPcmlnaW4nKT8uc2V0VmFsdWUoY2hhbmdlcy5ldmVudE9yaWdpbi5jdXJyZW50VmFsdWUgPz8gbnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlcy50aWNrZXQgJiYgY2hhbmdlcy50aWNrZXQuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLnRpY2tldC5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnbnVtYmVyJyk/LnNldFZhbHVlKGNoYW5nZXMudGlja2V0LmN1cnJlbnRWYWx1ZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVFdmVudFN0YXR1c0FuZENyZWF0ZWREYXRlRm9ybUZpZWxkcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuZXZlbnRTdGF0dXMgJiYgY2hhbmdlcy5ldmVudFN0YXR1cy5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuZXZlbnRTdGF0dXMucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoJ3N0YXR1cycpPy5zZXRWYWx1ZShjaGFuZ2VzLmV2ZW50U3RhdHVzLmN1cnJlbnRWYWx1ZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzLmNyZWF0ZWREYXRlICYmIGNoYW5nZXMuY3JlYXRlZERhdGUuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmNyZWF0ZWREYXRlLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KCdjcmVhdGVkRGF0ZScpPy5zZXRWYWx1ZShjaGFuZ2VzLmNyZWF0ZWREYXRlLmN1cnJlbnRWYWx1ZSA/PyBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplRm9ybUdyb3VwKCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgIGUwNzBlbXA6IFt7IHZhbHVlOiB0aGlzLmUwNzBlbXAgPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBlMDcwZmlsOiBbeyB2YWx1ZTogdGhpcy5lMDcwZmlsID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgbnVtYmVyOiBbeyB2YWx1ZTogdGhpcy50aWNrZXQgPz8gbnVsbCwgZGlzYWJsZWQ6IGZhbHNlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxyXG4gICAgICAgICAgICBleHRlcm5hbElkOiBbeyB2YWx1ZTogdGhpcy5leHRlcm5hbElkID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgZXZlbnRPcmlnaW46IFt7IHZhbHVlOiB0aGlzLmV2ZW50T3JpZ2luID8/IG51bGwsIGRpc2FibGVkOiBmYWxzZSB9LCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcclxuICAgICAgICAgICAgc3RhdHVzOiBbeyB2YWx1ZTogdGhpcy5ldmVudFN0YXR1cyA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBbeyB2YWx1ZTogdGhpcy5jcmVhdGVkRGF0ZSA/PyBudWxsLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRGb3JtRmllbGRzKCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gW1xyXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiZTA3MGVtcFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkNoaXBzLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImUwNzBmaWxcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5DaGlwcyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJudW1iZXJcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5DaGlwcyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJleHRlcm5hbElkXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImV2ZW50T3JpZ2luXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRW51bSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJzdGF0dXNcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5FbnVtLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNyZWF0ZWREYXRlXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRGF0ZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEdyaWRDb2x1bW5zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHsgZmllbGQ6ICdlMDcwZW1wJywgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuY29tcGFueVwiKSB9LFxyXG4gICAgICAgICAgICB7IGZpZWxkOiAnZTA3MGZpbCcsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLmxhYmVsX2JyYW5jaFwiKSB9LFxyXG4gICAgICAgICAgICB7IGZpZWxkOiAnZXZlbnRPcmlnaW4nLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5ldmVudF9vcmlnaW5fbGFiZWxcIikgfSxcclxuICAgICAgICAgICAgeyBmaWVsZDogJ251bWJlcicsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImFncm8uYW5ndWxhcl9jb21wb25lbnRzLnRpY2tldFwiKSB9LFxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgdGhpcy53ZWJzb2NrZXRTZXJ2aWNlLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FsbFdlYnNvY2tldCgpIHtcclxuICAgICAgICB0aGlzLndlYnNvY2tldFNlcnZpY2VcclxuICAgICAgICAub25FdmVudDxhbnk+KHtcclxuICAgICAgICAgICAgZG9tYWluOiAnYWdybycsXHJcbiAgICAgICAgICAgIHNlcnZpY2U6ICdhZ3JvX2V2ZW50cycsXHJcbiAgICAgICAgICAgIHByaW1pdGl2ZTogXCJwcm9jZXNzZWRFdmVudFwiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLndlYnNvY2tldFNlcnZpY2VcclxuICAgICAgICAub25FdmVudDxhbnk+KHtcclxuICAgICAgICAgICAgZG9tYWluOiAncGxhdGZvcm0nLFxyXG4gICAgICAgICAgICBzZXJ2aWNlOiAnbm90aWZpY2F0aW9ucycsXHJcbiAgICAgICAgICAgIHByaW1pdGl2ZTogXCJ1c2VyTm90aWZpZWRcIixcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJEYXRhID0gdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVHcmlkKHsgZmlsdGVyRGF0YSB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TZWFyY2goKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNldEdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xyXG4gICAgICAgIHRoaXMudXBkYXRlR3JpZCh7IGZpbHRlckRhdGEgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUm91dGVEYXRhQ2hhbmdlKGRhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBkYXRhLmFsbFBlcm1pc3Npb25zO1xyXG4gICAgICAgIHRoaXMubG9jYWxlQ29uZmlnID0gZGF0YS5sb2NhbGVDb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0R3JpZChsaXN0UGFyYW1zPzogYW55KSB7XHJcbiAgICAgICAgaWYgKGxpc3RQYXJhbXMpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcyA9IHsgLi4udGhpcy5jdXJyZW50TGlzdFBhcmFtcywgLi4ubGlzdFBhcmFtcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnBhZ2UgPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUdyaWQobGlzdFBhcmFtczogYW55ID0ge30pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zID0geyAuLi50aGlzLmN1cnJlbnRMaXN0UGFyYW1zLCAuLi5saXN0UGFyYW1zIH07XHJcbiAgICAgICAgY29uc3QgeyBwYWdlLCBzaXplIH0gPSB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zO1xyXG4gICAgICAgIGNvbnN0IG5Tb3J0ID0gdGhpcy5nZXRTb3J0ZWRGaWVsZHMoKTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0RmlsdGVyUXVlcnkoKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IFtcIlwiXTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudENvbnRyb2xCb2FyZFNlcnZpY2UuZXZlbnRDb250cm9sU2VydmljZVxyXG4gICAgICAgICAgICAubGlzdCh7IHNvcnQ6IG5Tb3J0LCBwYWdlLCBzaXplLCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB0aGlzLmhhbmRsZUxpc3RSZXNwb25zZShsaXN0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTb3J0ZWRGaWVsZHMoKTogYW55W10ge1xyXG4gICAgICAgIGxldCBuU29ydDogYW55W10gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG5Tb3J0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQpKTtcclxuICAgICAgICAgICAgblNvcnQuZm9yRWFjaCgoc29ydEl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgc29ydEl0ZW0uZmllbGQgPSB0aGlzLmdldEZpZWxkTmFtZUZvclNvcnRSZXF1ZXN0KHNvcnRJdGVtLmZpZWxkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgblNvcnQucHVzaCh7IGZpZWxkOiAnbGFzdE1vZGlmaWVkRGF0ZScsIG9yZGVyOiBBR1JPX05VTUJFUlMuTUlOVVNPTkUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuU29ydDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEZpbHRlclF1ZXJ5KCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgeyBmaWx0ZXJEYXRhIH0gPSB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlckpzb246IGFueSA9IHsgZmlsdGVyOiB7fSB9O1xyXG4gICAgICAgIHJldHVybiBbLi4udGhpcy5maWx0ZXJGaWVsZHNdXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9OiBhbnkpID0+IGZpbHRlckRhdGEgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT09IG51bGwgJiYgZmlsdGVyRGF0YVtuYW1lXS5sZW5ndGggIT09IDApXHJcbiAgICAgICAgICAgIC5tYXAoKGZvcm1GaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9va3VwRmllbGROYW1lID0gJ2lkJztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsRmlsdGVyTmFtZSA9IGZvcm1GaWVsZC5uYW1lID8/ICcnO1xyXG4gICAgICAgICAgICAgICAgZmlsdGVySnNvbi5maWx0ZXJbZmluYWxGaWx0ZXJOYW1lXSA9IGZpbHRlckRhdGFbZmluYWxGaWx0ZXJOYW1lXS5pZDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZpbHRlclN0cmluZyhmaW5hbEZpbHRlck5hbWUsIGZvcm1GaWVsZC50eXBlIGFzIGFueSwgZmlsdGVyRGF0YVtmaW5hbEZpbHRlck5hbWVdLCBsb29rdXBGaWVsZE5hbWUpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKChmaWx0ZXIpID0+IGZpbHRlciAhPT0gbnVsbCAmJiBmaWx0ZXIgIT09ICcnICYmIGZpbHRlciAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAuam9pbignIGFuZCAnKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZUxpc3RSZXNwb25zZShsaXN0OiBhbnkpIHtcclxuICAgICAgICB0aGlzLmdyaWREYXRhID0gbGlzdC5jb250ZW50cztcclxuICAgICAgICB0aGlzLmdyaWRUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XHJcbiAgICAgICAgaWYgKCF0aGlzLmdyaWREYXRhIHx8IHRoaXMuZ3JpZERhdGEubGVuZ3RoIDw9IEFHUk9fTlVNQkVSUy5aRVJPKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb2Nlc3NEZXRhaWxDYWxscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc0RldGFpbENhbGxzKCkge1xyXG4gICAgICAgIGNvbnN0IGRldGFpbENhbGxzJCA9IHRoaXMuZ3JpZERhdGEubWFwKChpdGVtOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRDb250cm9sQm9hcmRTZXJ2aWNlLmV2ZW50Q29udHJvbEl0ZW1TZXJ2aWNlLmxpc3Qoe1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyUXVlcnk6IGBldmVudENvbnRyb2wgZXEgJyR7aXRlbS5pZH0nYCxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IFt7IGZpZWxkOiAnc2VxdWVuY2UnLCBvcmRlcjogQUdST19OVU1CRVJTLk9ORSB9XSxcclxuICAgICAgICAgICAgICAgIHNpemU6IEFHUk9fTlVNQkVSUy5PTkVfSFVORFJFRFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoZGV0YWlsc1Jlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudENvbnRyb2xCb2FyZFNlcnZpY2UudGlja2V0U2VydmljZS5saXN0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUXVlcnk6IGBpZCBlcSAnJHtpdGVtLmV4dGVybmFsSWR9JyBvciBiYWxhbmNlRW50cnlDb250cm9sLmlkIGVxICcke2l0ZW0uZXh0ZXJuYWxJZH0nYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkczogWydudW1iZXInXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgodGlja2V0UmVzcG9uc2U6IGFueSkgPT4gKHsgZGV0YWlsc1Jlc3BvbnNlLCB0aWNrZXRSZXNwb25zZSB9KSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIGZvcmtKb2luKGRldGFpbENhbGxzJCkuc3Vic2NyaWJlKChyZXNwb25zZXM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RldGFpbHNSZXNwb25zZXMocmVzcG9uc2VzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NEZXRhaWxzUmVzcG9uc2VzKGRldGFpbHNSZXNwb25zZXM6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkRGF0YS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IGRldGFpbHNSZXNwb25zZSwgdGlja2V0UmVzcG9uc2UgfSA9IGRldGFpbHNSZXNwb25zZXNbaW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdGlja2V0cyA9IHRpY2tldFJlc3BvbnNlPy5jb250ZW50cyA/PyBbXTtcclxuICAgICAgICAgICAgaXRlbS5kZXRhaWxzID0gZGV0YWlsc1Jlc3BvbnNlPy5jb250ZW50cyA/PyBbXTtcclxuICAgICAgICAgICAgaXRlbS50aWNrZXRzID0gdGlja2V0cy5tYXAoKHRpY2tldDogeyBudW1iZXI6IGFueTsgfSkgPT4gdGlja2V0Lm51bWJlcikuam9pbignLCAnKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwZWREZXRhaWxzID0gdGhpcy5ncm91cEJ5RXZlbnRHcm91cChpdGVtLmRldGFpbHMpO1xyXG5cclxuICAgICAgICAgICAgaXRlbS5ncm91cHMgPSBPYmplY3Qua2V5cyhncm91cGVkRGV0YWlscykubWFwKGV2ZW50R3JvdXBJZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cERldGFpbHMgPSBncm91cGVkRGV0YWlsc1tldmVudEdyb3VwSWRdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEFjdGl2ZUluZGV4ID0gZ3JvdXBEZXRhaWxzLm1hcCgoZGV0YWlsOiB7IHN0YXR1czogc3RyaW5nOyB9KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGRldGFpbC5zdGF0dXMgIT09IEV2ZW50U3RhdHVzLlBFTkRJTkcpLmxhc3RJbmRleE9mKHRydWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBhY3RpdmVJbmRleCA9IGxhc3RBY3RpdmVJbmRleDtcclxuICAgICAgICAgICAgICAgIGlmIChsYXN0QWN0aXZlSW5kZXggIT09IC0xICYmIGdyb3VwRGV0YWlsc1tsYXN0QWN0aXZlSW5kZXhdLnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuU1VDQ0VTUykge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUluZGV4ID0gbGFzdEFjdGl2ZUluZGV4ICsgMTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGVwcyA9IGdyb3VwRGV0YWlscy5tYXAoKGRldGFpbDogRXZlbnRDb250cm9sSXRlbSwgZGV0YWlsSW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGRldGFpbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0OiBpdGVtLnRpY2tldHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogZGV0YWlsLmV2ZW50Q29udHJvbC5ldmVudE9yaWdpbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0RXZlbnRMYWJlbChkZXRhaWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGV0YWlsLnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuUEVORElORyAmJiBkZXRhaWxJbmRleCAhPT0gYWN0aXZlSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA6IHRoaXMuZ2V0RXZlbnRMYWJlbChkZXRhaWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5kZXRlcm1pbmVTdGVwU3RhdGUoZGV0YWlsKSxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudEdyb3VwSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RlcHMsXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlSW5kZXhcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaXRlbS5hY3RpdmVJbmRleCA9IGl0ZW0uZ3JvdXBzLmxlbmd0aCA+IDAgPyBpdGVtLmdyb3Vwc1swXS5hY3RpdmVJbmRleCA6IC0xO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZ3JpZERhdGFSZXNvbHZlZCA9IHRoaXMuZ3JpZERhdGE7XHJcbiAgICAgICAgdGhpcy5ncmlkTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ3JvdXBCeUV2ZW50R3JvdXAoZGV0YWlsczogYW55W10pIHtcclxuICAgICAgICByZXR1cm4gZGV0YWlscy5yZWR1Y2UoKGFjYywgZGV0YWlsKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50R3JvdXBJZCA9IGRldGFpbC5ldmVudEdyb3VwO1xyXG4gICAgICAgICAgICBpZiAoIWFjY1tldmVudEdyb3VwSWRdKSB7XHJcbiAgICAgICAgICAgICAgICBhY2NbZXZlbnRHcm91cElkXSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFjY1tldmVudEdyb3VwSWRdLnB1c2goZGV0YWlsKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICB9LCB7fSBhcyB7IFtrZXk6IHN0cmluZ106IGFueVtdIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGV0ZXJtaW5lU3RlcFN0YXRlKGRldGFpbDogeyBzdGF0dXM6IEV2ZW50U3RhdHVzIH0pOiBTdGVwU3RhdGUge1xyXG4gICAgICAgIGxldCBzdGF0ZTtcclxuICAgICAgICBpZiAoZGV0YWlsLnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuU1VDQ0VTUykge1xyXG4gICAgICAgICAgICBzdGF0ZSA9IFN0ZXBTdGF0ZS5TdWNjZXNzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGV0YWlsLnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgIHN0YXRlID0gU3RlcFN0YXRlLldhcm5pbmc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RhdGUgPSBTdGVwU3RhdGUuRGVmYXVsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RXZlbnRMYWJlbChkZXRhaWw6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZXZlbnRMYWJlbCA9IHRoaXMuZXZlbnRJdGVtLmZpbmQoZSA9PiBlLnZhbHVlID09PSBkZXRhaWwuZXZlbnRPcGVyYXRpb24pPy5sYWJlbDtcclxuICAgICAgICByZXR1cm4gZXZlbnRMYWJlbCA/IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZXZlbnRMYWJlbCkgOiBkZXRhaWwuZXZlbnRPcGVyYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaWVsZE5hbWVGb3JTb3J0UmVxdWVzdChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAobmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlICdlMDcwZW1wJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZTA3MGVtcC5ub21FbXAnO1xyXG4gICAgICAgICAgICBjYXNlICdlMDcwZmlsJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZTA3MGZpbC5ub21GaWwnO1xyXG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdjcmVhdGVkRGF0ZSc7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVGaWx0ZXJTdHJpbmcobmFtZTogc3RyaW5nLCB0eXBlOiBGaWVsZFR5cGUsIHZhbHVlOiBhbnlbXSwgbG9va3VwRmllbGROYW1lID0gJ2lkJyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKG5hbWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclBhcnRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyUGFydHMucHVzaChgZXh0ZXJuYWxJZCBlcSAnJHtpdGVtLmlkfSdgKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmludm9pY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJ0cy5wdXNoKGBleHRlcm5hbElkIGVxICcke2l0ZW0uaW52b2ljZS5pZH0nYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5iYWxhbmNlRW50cnlDb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFydHMucHVzaChgZXh0ZXJuYWxJZCBlcSAnJHtpdGVtLmJhbGFuY2VFbnRyeUNvbnRyb2wuaWR9J2ApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIGAoJHtmaWx0ZXJQYXJ0cy5qb2luKCcgb3IgJyl9KWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZpbHRlclN0cmluZ0Zyb21UeXBlKG5hbWUsIHR5cGUsIHZhbHVlLCBsb29rdXBGaWVsZE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlRmlsdGVyU3RyaW5nRnJvbVR5cGUobmFtZTogc3RyaW5nLCB0eXBlOiBGaWVsZFR5cGUsIHZhbHVlOiBhbnksIGxvb2t1cEZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkNoaXBzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZVtsb29rdXBGaWVsZE5hbWVdfSdgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkRhdGUpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRPZkRheSA9IG1vbWVudCh2YWx1ZSkuc3RhcnRPZignZGF5JykuZm9ybWF0KFwiWVlZWS1NTS1ERFRISDptbTpzc1wiKSArICdaJztcclxuICAgICAgICAgICAgY29uc3QgZW5kT2ZEYXkgPSBtb21lbnQodmFsdWUpLmVuZE9mKCdkYXknKS5mb3JtYXQoXCJZWVlZLU1NLUREVEhIOm1tOnNzXCIpICsgJ1onO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGdlICcke3N0YXJ0T2ZEYXl9JyBhbmQgJHtuYW1lfSBsZSAnJHtlbmRPZkRheX0nYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkdyaWRDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSBldmVudD8ucm93cztcclxuICAgICAgICBjb25zdCBwYWdlID0gZXZlbnQ/LmZpcnN0IC8gc2l6ZTtcclxuICAgICAgICBjb25zdCBzb3J0ID0gZXZlbnQubXVsdGlTb3J0TWV0YTtcclxuICAgICAgICB0aGlzLmdyaWRMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAoc2l6ZSAhPT0gQUdST19OVU1CRVJTLlRFTiB8fCBwYWdlICE9PSBBR1JPX05VTUJFUlMuWkVSTyB8fCAoc29ydCAmJiBzb3J0Lmxlbmd0aCA+IEFHUk9fTlVNQkVSUy5aRVJPKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlLnN0b3JlUGFnaW5hdG9yKCdFdmVudENvbnRyb2xCb2FyZFBhZ2luYXRvcicsIHsgcGFnZSwgc2l6ZSwgc29ydCB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUdyaWQoeyBwYWdlLCBzaXplLCBzb3J0IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYWdlU2l6ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zaXplO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRSb3dJbmRleCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5wYWdlICogdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zaXplO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTb3J0RmllbGQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQgfHwgdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0Lmxlbmd0aCA8PSBBR1JPX05VTUJFUlMuWkVSTykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkQ29sdW1uc1tBR1JPX05VTUJFUlMuWkVST10uZmllbGQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnRbQUdST19OVU1CRVJTLlpFUk9dLmZpZWxkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTb3J0T3JkZXIoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQgfHwgdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0Lmxlbmd0aCA8PSBBR1JPX05VTUJFUlMuWkVSTykge1xyXG4gICAgICAgICAgICByZXR1cm4gQUdST19OVU1CRVJTLk9ORTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnRbQUdST19OVU1CRVJTLlpFUk9dLm9yZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFcnJvck1lc3NhZ2VzKCkge1xyXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRFcnJvck1lc3NhZ2VzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gTG9va3VwRXJyb3JNZXNzYWdlcykge1xyXG4gICAgICAgICAgICBpZiAoTG9va3VwRXJyb3JNZXNzYWdlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXQoTG9va3VwRXJyb3JNZXNzYWdlc1trZXldKS5zdWJzY3JpYmUoKHJlczogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZEVycm9yTWVzc2FnZXNba2V5XSA9IHJlcztcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkRXJyb3JNZXNzYWdlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RlcFNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU3RlcCA9IGV2ZW50LnN0ZXA7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwLmV2ZW50VHlwZSAhPT0gRXZlbnRPcmlnaW4uQ0hBTkdFX1JFUVVFU1QpIHtcclxuICAgICAgICAgICAgdGhpcy5zaWRlYmFyTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gSlNPTi5wYXJzZSh0aGlzLnNlbGVjdGVkU3RlcC5pdGVtLmlucHV0KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y2VySW52b2ljZUlkID0gcGFyYW0ucHJvZHVjZXJJbnZvaWNlSWRzID8gcGFyYW0ucHJvZHVjZXJJbnZvaWNlSWRzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcGFyYW0uaW52b2ljZS5nZW5lcmFsRGF0YS50cmFuc2FjdGlvbmFsSWQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50Q29udHJvbEJvYXJkU2VydmljZS5wcm9kdWNlckludm9pY2VTZXJ2aWNlLmdldChwcm9kdWNlckludm9pY2VJZClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y2VySW52b2ljZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2lkZWJhckxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaWRlYmFyTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2hvd1JlcHJvY2Vzc0J1dHRvbiA9IGV2ZW50LnN0ZXAuc3RhdGUgPT09IFN0ZXBTdGF0ZS5XYXJuaW5nO1xyXG4gICAgICAgIHRoaXMuc2lkZWJhclRpdGxlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXZlbnRfc2lkZWJhcl90aXRsZScsIHsgZXZlbnQ6IGV2ZW50LnN0ZXAubGFiZWwgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2hvd1NpZGViYXIgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXByb2Nlc3NFdmVudCgpIHtcclxuICAgICAgICBjb25zdCByZXByb2Nlc3NFdmVudE9iajogUmVwcm9jZXNzRmFpbGVkRXZlbnQgPSB7XHJcbiAgICAgICAgICAgIGV2ZW50Q29udHJvbEl0ZW1JZDogdGhpcy5zZWxlY3RlZFN0ZXAuaXRlbS5pZFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5ldmVudENvbnRyb2xCb2FyZFNlcnZpY2UuZXZlbnRDb250cm9sSXRlbVNlcnZpY2UucmVwcm9jZXNzRmFpbGVkRXZlbnQocmVwcm9jZXNzRXZlbnRPYmopXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICdpbmZvJyxcclxuICAgICAgICAgICAgICAgICdhZ3JvLmFuZ3VsYXJfY29tcG9uZW50cy5yZXByb2Nlc3NpbmdfZXZlbnRfbWVzc2FnZV90aXRsZScsXHJcbiAgICAgICAgICAgICAgICAnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMucmVwcm9jZXNzaW5nX2V2ZW50X21lc3NhZ2VfZGVzY3JpcHRpb24nKTtcclxuICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICdlcnJvcicsXHJcbiAgICAgICAgICAgICAgICAnYWdyby5hbmd1bGFyX2NvbXBvbmVudHMuZXJyb3JfcmVwcm9jZXNzaW5nX2V2ZW50X21lc3NhZ2VfdGl0bGUnLFxyXG4gICAgICAgICAgICAgICAgJ2Fncm8uYW5ndWxhcl9jb21wb25lbnRzLmVycm9yX3JlcHJvY2Vzc2luZ19ldmVudF9tZXNzYWdlX2Rlc2NyaXB0aW9uJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRNZXNzYWdlKHNldmVyaXR5OiBzdHJpbmcsIHN1bW1hcnk6IHN0cmluZywgZGV0YWlsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICAgIHNldmVyaXR5LFxyXG4gICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHN1bW1hcnkpLFxyXG4gICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZGV0YWlsKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3Blbk1vZGFsKCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheU1vZGFsID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29uZmlybU1vZGFsKCkge1xyXG4gICAgICAgIHRoaXMucmVwcm9jZXNzRXZlbnQoKTtcclxuICAgICAgICB0aGlzLmRpc3BsYXlNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NpZGViYXIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsTW9kYWwoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5TW9kYWwgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvc2VTaWRlYmFyKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1NpZGViYXIgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iXX0=