monkey-front-core 0.0.411 → 0.0.413

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 (368) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/components/alerts/alerts.component.mjs +45 -45
  3. package/esm2020/lib/components/alerts/alerts.module.mjs +21 -21
  4. package/esm2020/lib/components/alerts/index.mjs +3 -3
  5. package/esm2020/lib/components/closed-to-maintenance/closed-to-maintenance.component.mjs +29 -29
  6. package/esm2020/lib/components/closed-to-maintenance/closed-to-maintenance.module.mjs +43 -43
  7. package/esm2020/lib/components/closed-to-maintenance/index.mjs +3 -3
  8. package/esm2020/lib/components/currency-config/currency-config.component.mjs +39 -39
  9. package/esm2020/lib/components/currency-config/currency-config.module.mjs +39 -39
  10. package/esm2020/lib/components/currency-config/index.mjs +3 -3
  11. package/esm2020/lib/components/index.mjs +6 -6
  12. package/esm2020/lib/components/progress-bar/index.mjs +4 -4
  13. package/esm2020/lib/components/progress-bar/progress-bar.component.mjs +23 -23
  14. package/esm2020/lib/components/progress-bar/progress-bar.module.mjs +18 -18
  15. package/esm2020/lib/components/progress-bar/progress-bar.service.mjs +50 -50
  16. package/esm2020/lib/components/version-changed/index.mjs +3 -3
  17. package/esm2020/lib/components/version-changed/version-changed.component.mjs +24 -24
  18. package/esm2020/lib/components/version-changed/version-changed.module.mjs +39 -39
  19. package/esm2020/lib/core/decorators/index.mjs +5 -5
  20. package/esm2020/lib/core/decorators/monkeyecx-charts-decorators.mjs +40 -40
  21. package/esm2020/lib/core/decorators/monkeyecx-decorators.mjs +111 -111
  22. package/esm2020/lib/core/decorators/monkeyecx-download-decorators.mjs +26 -26
  23. package/esm2020/lib/core/decorators/monkeyecx-upload-decorators.mjs +26 -26
  24. package/esm2020/lib/core/directives/index.mjs +13 -13
  25. package/esm2020/lib/core/directives/monkeyecx-directives-module.mjs +73 -73
  26. package/esm2020/lib/core/directives/monkeyecx-drag-drop.mjs +57 -57
  27. package/esm2020/lib/core/directives/monkeyecx-feature-by-program-directive.mjs +54 -54
  28. package/esm2020/lib/core/directives/monkeyecx-feature-directive.mjs +68 -68
  29. package/esm2020/lib/core/directives/monkeyecx-format-currency.mjs +44 -44
  30. package/esm2020/lib/core/directives/monkeyecx-format-upper.mjs +67 -67
  31. package/esm2020/lib/core/directives/monkeyecx-only-alpha-numeric-directive.mjs +28 -28
  32. package/esm2020/lib/core/directives/monkeyecx-only-number-directive.mjs +28 -28
  33. package/esm2020/lib/core/directives/monkeyecx-popover-options.directive.mjs +39 -39
  34. package/esm2020/lib/core/directives/monkeyecx-popover.directive.mjs +212 -212
  35. package/esm2020/lib/core/directives/monkeyecx-security-directive.mjs +75 -75
  36. package/esm2020/lib/core/directives/monkeyecx-tooltip-directive.mjs +123 -123
  37. package/esm2020/lib/core/index.mjs +10 -10
  38. package/esm2020/lib/core/interceptors/index.mjs +6 -6
  39. package/esm2020/lib/core/interceptors/monkeyecx-http-config-error.interceptor.mjs +49 -49
  40. package/esm2020/lib/core/interceptors/monkeyecx-http-config-header.interceptor.mjs +59 -59
  41. package/esm2020/lib/core/interceptors/monkeyecx-http-config-interceptor.module.mjs +47 -47
  42. package/esm2020/lib/core/interceptors/monkeyecx-http-config-loading-in-progress.interceptor.mjs +43 -43
  43. package/esm2020/lib/core/interceptors/monkeyecx-http-config-queue.interceptor.mjs +37 -37
  44. package/esm2020/lib/core/interfaces/index.mjs +34 -31
  45. package/esm2020/lib/core/interfaces/monkeyecx-auth-credentials.mjs +2 -2
  46. package/esm2020/lib/core/interfaces/monkeyecx-company-pendencies.mjs +2 -2
  47. package/esm2020/lib/core/interfaces/monkeyecx-company.mjs +2 -2
  48. package/esm2020/lib/core/interfaces/monkeyecx-config-bootstrap.mjs +2 -2
  49. package/esm2020/lib/core/interfaces/monkeyecx-config.mjs +2 -2
  50. package/esm2020/lib/core/interfaces/monkeyecx-country-security.mjs +2 -2
  51. package/esm2020/lib/core/interfaces/monkeyecx-error-response.mjs +2 -2
  52. package/esm2020/lib/core/interfaces/monkeyecx-filter.mjs +2 -2
  53. package/esm2020/lib/core/interfaces/monkeyecx-handled-error-response.mjs +2 -2
  54. package/esm2020/lib/core/interfaces/monkeyecx-header-credentials.mjs +2 -2
  55. package/esm2020/lib/core/interfaces/monkeyecx-intercom-options.mjs +2 -2
  56. package/esm2020/lib/core/interfaces/monkeyecx-interface.mjs +2 -0
  57. package/esm2020/lib/core/interfaces/monkeyecx-me-credentials.mjs +2 -2
  58. package/esm2020/lib/core/interfaces/monkeyecx-navigation.mjs +2 -2
  59. package/esm2020/lib/core/interfaces/monkeyecx-pagination.mjs +2 -0
  60. package/esm2020/lib/core/interfaces/monkeyecx-program.mjs +2 -2
  61. package/esm2020/lib/core/interfaces/monkeyecx-releases.mjs +2 -2
  62. package/esm2020/lib/core/interfaces/monkeyecx-request-in-progress.mjs +2 -2
  63. package/esm2020/lib/core/interfaces/monkeyecx-request-paged.mjs +2 -2
  64. package/esm2020/lib/core/interfaces/monkeyecx-response-links.mjs +2 -2
  65. package/esm2020/lib/core/interfaces/monkeyecx-response-paged.mjs +2 -2
  66. package/esm2020/lib/core/interfaces/monkeyecx-saved-state.mjs +2 -2
  67. package/esm2020/lib/core/interfaces/monkeyecx-scroll-options.mjs +2 -2
  68. package/esm2020/lib/core/interfaces/monkeyecx-service-credentials.mjs +2 -2
  69. package/esm2020/lib/core/interfaces/monkeyecx-storage.mjs +2 -2
  70. package/esm2020/lib/core/interfaces/monkeyecx-store.mjs +2 -0
  71. package/esm2020/lib/core/interfaces/monkeyecx-support-options.mjs +2 -2
  72. package/esm2020/lib/core/interfaces/monkeyecx-token-credentials.mjs +2 -2
  73. package/esm2020/lib/core/interfaces/monkeyecx-translate-options.mjs +2 -2
  74. package/esm2020/lib/core/interfaces/request-download/index.mjs +4 -4
  75. package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-download.mjs +2 -2
  76. package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-downloaded.mjs +2 -2
  77. package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-item-download.mjs +2 -2
  78. package/esm2020/lib/core/interfaces/request-queue/index.mjs +4 -4
  79. package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-item-queue.mjs +2 -2
  80. package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-progress-queue.mjs +2 -2
  81. package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-queue.mjs +2 -2
  82. package/esm2020/lib/core/interfaces/request-upload/index.mjs +3 -3
  83. package/esm2020/lib/core/interfaces/request-upload/monkeyecx-request-item-upload.mjs +2 -2
  84. package/esm2020/lib/core/interfaces/request-upload/monkeyecx-request-upload.mjs +2 -2
  85. package/esm2020/lib/core/interfaces/schedules/index.mjs +2 -2
  86. package/esm2020/lib/core/interfaces/schedules/monkeyecx-request-schedule.mjs +2 -2
  87. package/esm2020/lib/core/model/index.mjs +3 -2
  88. package/esm2020/lib/core/model/monkeyecx-links.model.mjs +8 -0
  89. package/esm2020/lib/core/model/monkeyecx-model.mjs +25 -25
  90. package/esm2020/lib/core/pipes/index.mjs +22 -22
  91. package/esm2020/lib/core/pipes/monkeyecx-blob-secure.mjs +26 -26
  92. package/esm2020/lib/core/pipes/monkeyecx-display-first-name.mjs +19 -19
  93. package/esm2020/lib/core/pipes/monkeyecx-display-initials.mjs +21 -21
  94. package/esm2020/lib/core/pipes/monkeyecx-display-support-phone.mjs +33 -33
  95. package/esm2020/lib/core/pipes/monkeyecx-format-address.mjs +20 -20
  96. package/esm2020/lib/core/pipes/monkeyecx-format-beautify-json.mjs +38 -38
  97. package/esm2020/lib/core/pipes/monkeyecx-format-currency.mjs +27 -27
  98. package/esm2020/lib/core/pipes/monkeyecx-format-date-group.mjs +45 -45
  99. package/esm2020/lib/core/pipes/monkeyecx-format-date-timelapse.mjs +32 -32
  100. package/esm2020/lib/core/pipes/monkeyecx-format-date-unix-timelapse.mjs +36 -36
  101. package/esm2020/lib/core/pipes/monkeyecx-format-document.mjs +20 -20
  102. package/esm2020/lib/core/pipes/monkeyecx-format-number.mjs +20 -20
  103. package/esm2020/lib/core/pipes/monkeyecx-format-phone.mjs +42 -42
  104. package/esm2020/lib/core/pipes/monkeyecx-format-size.mjs +20 -20
  105. package/esm2020/lib/core/pipes/monkeyecx-format-tax.mjs +23 -23
  106. package/esm2020/lib/core/pipes/monkeyecx-format-type-document.mjs +19 -19
  107. package/esm2020/lib/core/pipes/monkeyecx-format-value.mjs +19 -19
  108. package/esm2020/lib/core/pipes/monkeyecx-format-zipcode.mjs +19 -19
  109. package/esm2020/lib/core/pipes/monkeyecx-pipes.module.mjs +117 -117
  110. package/esm2020/lib/core/pipes/monkeyecx-text-truncate.mjs +23 -23
  111. package/esm2020/lib/core/pipes/monkeyecx-truncate-qtd.mjs +16 -16
  112. package/esm2020/lib/core/services/alerts/index.mjs +2 -2
  113. package/esm2020/lib/core/services/alerts/monkeyecx-alerts.service.mjs +42 -42
  114. package/esm2020/lib/core/services/auth/index.mjs +6 -6
  115. package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-company.service.mjs +28 -28
  116. package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-login.service.mjs +27 -27
  117. package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-role.service.mjs +79 -79
  118. package/esm2020/lib/core/services/auth/monkeyecx-auth-guard.service.mjs +26 -26
  119. package/esm2020/lib/core/services/auth/monkeyecx-authentication.service.mjs +79 -79
  120. package/esm2020/lib/core/services/commons/index.mjs +2 -2
  121. package/esm2020/lib/core/services/commons/monkeyecx-commons.service.mjs +361 -361
  122. package/esm2020/lib/core/services/config/monkeyecx-alerts-config.service.mjs +42 -42
  123. package/esm2020/lib/core/services/config/monkeyecx-config.module.mjs +28 -28
  124. package/esm2020/lib/core/services/config/monkeyecx-config.service.mjs +110 -110
  125. package/esm2020/lib/core/services/config/monkeyecx-currency-config.service.mjs +84 -84
  126. package/esm2020/lib/core/services/config/monkeyecx-error-config.service.mjs +85 -85
  127. package/esm2020/lib/core/services/config/monkeyecx-feature-toggle.service.mjs +76 -76
  128. package/esm2020/lib/core/services/config/monkeyecx-gtm-config.service.mjs +51 -51
  129. package/esm2020/lib/core/services/config/monkeyecx-i18n-config.service.mjs +92 -92
  130. package/esm2020/lib/core/services/config/monkeyecx-logs-config.service.mjs +34 -34
  131. package/esm2020/lib/core/services/config/monkeyecx-maintenance-config.service.mjs +37 -37
  132. package/esm2020/lib/core/services/config/monkeyecx-security-console-config.service.mjs +42 -42
  133. package/esm2020/lib/core/services/config/monkeyecx-service-worker-config.service.mjs +53 -53
  134. package/esm2020/lib/core/services/error/index.mjs +5 -5
  135. package/esm2020/lib/core/services/error/monkeyecx-error-handling.module.mjs +27 -27
  136. package/esm2020/lib/core/services/error/monkeyecx-error-handling.service.mjs +37 -37
  137. package/esm2020/lib/core/services/error/monkeyecx-http-error-handling.service.mjs +138 -138
  138. package/esm2020/lib/core/services/error/monkeyecx-others-errors-handling.service.mjs +29 -29
  139. package/esm2020/lib/core/services/index.mjs +26 -25
  140. package/esm2020/lib/core/services/logged/index.mjs +2 -2
  141. package/esm2020/lib/core/services/logged/monkeyecx-logged-handling.service.mjs +40 -40
  142. package/esm2020/lib/core/services/monkeyecx-handling.service.mjs +50 -50
  143. package/esm2020/lib/core/services/monkeyecx-service.service.mjs +104 -104
  144. package/esm2020/lib/core/services/pagination/index.mjs +2 -2
  145. package/esm2020/lib/core/services/pagination/monkeyecx-pagination.service.mjs +29 -29
  146. package/esm2020/lib/core/services/request-download/index.mjs +3 -3
  147. package/esm2020/lib/core/services/request-download/monkeyecx-request-download-handling.service.mjs +93 -93
  148. package/esm2020/lib/core/services/request-download/monkeyecx-request-downloaded-handling.service.mjs +61 -61
  149. package/esm2020/lib/core/services/request-paged/index.mjs +2 -2
  150. package/esm2020/lib/core/services/request-paged/monkeyecx-request-request-paged-handling.mjs +42 -42
  151. package/esm2020/lib/core/services/request-queue/index.mjs +3 -3
  152. package/esm2020/lib/core/services/request-queue/monkeyecx-request-queue-handling.service.mjs +114 -114
  153. package/esm2020/lib/core/services/request-queue/monkeyecx-request-queue-modal-handling.service.mjs +119 -119
  154. package/esm2020/lib/core/services/routes/index.mjs +2 -2
  155. package/esm2020/lib/core/services/routes/monkeyecx-dicovery-params.service.mjs +54 -54
  156. package/esm2020/lib/core/services/schedules/index.mjs +2 -2
  157. package/esm2020/lib/core/services/schedules/monkeyecx-request-schedule.service.mjs +188 -188
  158. package/esm2020/lib/core/services/storage/index.mjs +3 -3
  159. package/esm2020/lib/core/services/storage/monkeyecx-cookie-storage.service.mjs +32 -32
  160. package/esm2020/lib/core/services/storage/monkeyecx-token-storage.service.mjs +236 -236
  161. package/esm2020/lib/core/services/store/index.mjs +2 -0
  162. package/esm2020/lib/core/services/store/monkeyecx-store.service.mjs +190 -0
  163. package/esm2020/lib/core/specification-search/index.mjs +2 -2
  164. package/esm2020/lib/core/specification-search/monkeyecx-specification-search.mjs +108 -108
  165. package/esm2020/lib/core/utils/decorators-utils.mjs +40 -40
  166. package/esm2020/lib/core/utils/index.mjs +8 -8
  167. package/esm2020/lib/core/utils/statics.mjs +45 -45
  168. package/esm2020/lib/core/utils/utils.mjs +251 -251
  169. package/esm2020/lib/core/utils/validate-utils.mjs +205 -205
  170. package/esm2020/lib/core/utils/validators.mjs +226 -226
  171. package/esm2020/lib/monkey-front-core.module.mjs +71 -71
  172. package/esm2020/lib/store/actions/index.mjs +2 -2
  173. package/esm2020/lib/store/actions/monkeyecx-storage.actions.mjs +8 -8
  174. package/esm2020/lib/store/index.mjs +4 -4
  175. package/esm2020/lib/store/reducers/index.mjs +3 -3
  176. package/esm2020/lib/store/reducers/monkeyecx-seeder.reducer.mjs +53 -53
  177. package/esm2020/lib/store/reducers/monkeyecx-storage.reducer.mjs +40 -40
  178. package/esm2020/lib/store/selectors/index.mjs +2 -2
  179. package/esm2020/lib/store/selectors/monkeyecx-storage.selector.mjs +17 -17
  180. package/esm2020/monkey-front-core.mjs +4 -4
  181. package/esm2020/public-api.mjs +8 -8
  182. package/fesm2015/monkey-front-core.mjs +5623 -5425
  183. package/fesm2015/monkey-front-core.mjs.map +1 -1
  184. package/fesm2020/monkey-front-core.mjs +5690 -5498
  185. package/fesm2020/monkey-front-core.mjs.map +1 -1
  186. package/lib/components/alerts/alerts.component.d.ts +22 -22
  187. package/lib/components/alerts/alerts.module.d.ts +10 -10
  188. package/lib/components/alerts/index.d.ts +2 -2
  189. package/lib/components/closed-to-maintenance/closed-to-maintenance.component.d.ts +13 -13
  190. package/lib/components/closed-to-maintenance/closed-to-maintenance.module.d.ts +11 -11
  191. package/lib/components/closed-to-maintenance/index.d.ts +2 -2
  192. package/lib/components/currency-config/currency-config.component.d.ts +17 -17
  193. package/lib/components/currency-config/currency-config.module.d.ts +10 -10
  194. package/lib/components/currency-config/index.d.ts +2 -2
  195. package/lib/components/index.d.ts +5 -5
  196. package/lib/components/progress-bar/index.d.ts +3 -3
  197. package/lib/components/progress-bar/progress-bar.component.d.ts +11 -11
  198. package/lib/components/progress-bar/progress-bar.module.d.ts +8 -8
  199. package/lib/components/progress-bar/progress-bar.service.d.ts +14 -14
  200. package/lib/components/version-changed/index.d.ts +2 -2
  201. package/lib/components/version-changed/version-changed.component.d.ts +9 -9
  202. package/lib/components/version-changed/version-changed.module.d.ts +10 -10
  203. package/lib/core/decorators/index.d.ts +4 -4
  204. package/lib/core/decorators/monkeyecx-charts-decorators.d.ts +1 -1
  205. package/lib/core/decorators/monkeyecx-decorators.d.ts +7 -7
  206. package/lib/core/decorators/monkeyecx-download-decorators.d.ts +2 -2
  207. package/lib/core/decorators/monkeyecx-upload-decorators.d.ts +2 -2
  208. package/lib/core/directives/index.d.ts +12 -12
  209. package/lib/core/directives/monkeyecx-directives-module.d.ts +19 -19
  210. package/lib/core/directives/monkeyecx-drag-drop.d.ts +12 -12
  211. package/lib/core/directives/monkeyecx-feature-by-program-directive.d.ts +16 -16
  212. package/lib/core/directives/monkeyecx-feature-directive.d.ts +17 -17
  213. package/lib/core/directives/monkeyecx-format-currency.d.ts +16 -16
  214. package/lib/core/directives/monkeyecx-format-upper.d.ts +18 -18
  215. package/lib/core/directives/monkeyecx-only-alpha-numeric-directive.d.ts +9 -9
  216. package/lib/core/directives/monkeyecx-only-number-directive.d.ts +9 -9
  217. package/lib/core/directives/monkeyecx-popover-options.directive.d.ts +19 -19
  218. package/lib/core/directives/monkeyecx-popover.directive.d.ts +43 -43
  219. package/lib/core/directives/monkeyecx-security-directive.d.ts +18 -18
  220. package/lib/core/directives/monkeyecx-tooltip-directive.d.ts +23 -23
  221. package/lib/core/index.d.ts +9 -9
  222. package/lib/core/interceptors/index.d.ts +5 -5
  223. package/lib/core/interceptors/monkeyecx-http-config-error.interceptor.d.ts +18 -18
  224. package/lib/core/interceptors/monkeyecx-http-config-header.interceptor.d.ts +16 -16
  225. package/lib/core/interceptors/monkeyecx-http-config-interceptor.module.d.ts +9 -9
  226. package/lib/core/interceptors/monkeyecx-http-config-loading-in-progress.interceptor.d.ts +12 -12
  227. package/lib/core/interceptors/monkeyecx-http-config-queue.interceptor.d.ts +14 -14
  228. package/lib/core/interfaces/index.d.ts +33 -30
  229. package/lib/core/interfaces/monkeyecx-auth-credentials.d.ts +15 -15
  230. package/lib/core/interfaces/monkeyecx-company-pendencies.d.ts +14 -14
  231. package/lib/core/interfaces/monkeyecx-company.d.ts +10 -10
  232. package/lib/core/interfaces/monkeyecx-config-bootstrap.d.ts +14 -14
  233. package/lib/core/interfaces/monkeyecx-config.d.ts +132 -132
  234. package/lib/core/interfaces/monkeyecx-country-security.d.ts +4 -4
  235. package/lib/core/interfaces/monkeyecx-error-response.d.ts +5 -5
  236. package/lib/core/interfaces/monkeyecx-filter.d.ts +42 -42
  237. package/lib/core/interfaces/monkeyecx-handled-error-response.d.ts +10 -10
  238. package/lib/core/interfaces/monkeyecx-header-credentials.d.ts +4 -4
  239. package/lib/core/interfaces/monkeyecx-intercom-options.d.ts +4 -4
  240. package/lib/core/interfaces/monkeyecx-interface.d.ts +9 -0
  241. package/lib/core/interfaces/monkeyecx-me-credentials.d.ts +22 -22
  242. package/lib/core/interfaces/monkeyecx-navigation.d.ts +27 -27
  243. package/lib/core/interfaces/monkeyecx-pagination.d.ts +25 -0
  244. package/lib/core/interfaces/monkeyecx-program.d.ts +10 -10
  245. package/lib/core/interfaces/monkeyecx-releases.d.ts +9 -9
  246. package/lib/core/interfaces/monkeyecx-request-in-progress.d.ts +3 -3
  247. package/lib/core/interfaces/monkeyecx-request-paged.d.ts +23 -23
  248. package/lib/core/interfaces/monkeyecx-response-links.d.ts +11 -11
  249. package/lib/core/interfaces/monkeyecx-response-paged.d.ts +6 -6
  250. package/lib/core/interfaces/monkeyecx-saved-state.d.ts +5 -5
  251. package/lib/core/interfaces/monkeyecx-scroll-options.d.ts +5 -5
  252. package/lib/core/interfaces/monkeyecx-service-credentials.d.ts +12 -12
  253. package/lib/core/interfaces/monkeyecx-storage.d.ts +38 -38
  254. package/lib/core/interfaces/monkeyecx-store.d.ts +31 -0
  255. package/lib/core/interfaces/monkeyecx-support-options.d.ts +4 -4
  256. package/lib/core/interfaces/monkeyecx-token-credentials.d.ts +20 -20
  257. package/lib/core/interfaces/monkeyecx-translate-options.d.ts +4 -4
  258. package/lib/core/interfaces/request-download/index.d.ts +3 -3
  259. package/lib/core/interfaces/request-download/monkeyecx-request-download.d.ts +10 -10
  260. package/lib/core/interfaces/request-download/monkeyecx-request-downloaded.d.ts +7 -7
  261. package/lib/core/interfaces/request-download/monkeyecx-request-item-download.d.ts +7 -7
  262. package/lib/core/interfaces/request-queue/index.d.ts +3 -3
  263. package/lib/core/interfaces/request-queue/monkeyecx-request-item-queue.d.ts +7 -7
  264. package/lib/core/interfaces/request-queue/monkeyecx-request-progress-queue.d.ts +6 -6
  265. package/lib/core/interfaces/request-queue/monkeyecx-request-queue.d.ts +8 -8
  266. package/lib/core/interfaces/request-upload/index.d.ts +2 -2
  267. package/lib/core/interfaces/request-upload/monkeyecx-request-item-upload.d.ts +5 -5
  268. package/lib/core/interfaces/request-upload/monkeyecx-request-upload.d.ts +10 -10
  269. package/lib/core/interfaces/schedules/index.d.ts +1 -1
  270. package/lib/core/interfaces/schedules/monkeyecx-request-schedule.d.ts +13 -13
  271. package/lib/core/model/index.d.ts +2 -1
  272. package/lib/core/model/monkeyecx-links.model.d.ts +4 -0
  273. package/lib/core/model/monkeyecx-model.d.ts +13 -13
  274. package/lib/core/pipes/index.d.ts +21 -21
  275. package/lib/core/pipes/monkeyecx-blob-secure.d.ts +13 -13
  276. package/lib/core/pipes/monkeyecx-display-first-name.d.ts +7 -7
  277. package/lib/core/pipes/monkeyecx-display-initials.d.ts +7 -7
  278. package/lib/core/pipes/monkeyecx-display-support-phone.d.ts +18 -18
  279. package/lib/core/pipes/monkeyecx-format-address.d.ts +14 -14
  280. package/lib/core/pipes/monkeyecx-format-beautify-json.d.ts +8 -8
  281. package/lib/core/pipes/monkeyecx-format-currency.d.ts +11 -11
  282. package/lib/core/pipes/monkeyecx-format-date-group.d.ts +11 -11
  283. package/lib/core/pipes/monkeyecx-format-date-timelapse.d.ts +7 -7
  284. package/lib/core/pipes/monkeyecx-format-date-unix-timelapse.d.ts +7 -7
  285. package/lib/core/pipes/monkeyecx-format-document.d.ts +7 -7
  286. package/lib/core/pipes/monkeyecx-format-number.d.ts +7 -7
  287. package/lib/core/pipes/monkeyecx-format-phone.d.ts +7 -7
  288. package/lib/core/pipes/monkeyecx-format-size.d.ts +7 -7
  289. package/lib/core/pipes/monkeyecx-format-tax.d.ts +7 -7
  290. package/lib/core/pipes/monkeyecx-format-type-document.d.ts +7 -7
  291. package/lib/core/pipes/monkeyecx-format-value.d.ts +7 -7
  292. package/lib/core/pipes/monkeyecx-format-zipcode.d.ts +7 -7
  293. package/lib/core/pipes/monkeyecx-pipes.module.d.ts +26 -26
  294. package/lib/core/pipes/monkeyecx-text-truncate.d.ts +7 -7
  295. package/lib/core/pipes/monkeyecx-truncate-qtd.d.ts +7 -7
  296. package/lib/core/services/alerts/index.d.ts +1 -1
  297. package/lib/core/services/alerts/monkeyecx-alerts.service.d.ts +21 -21
  298. package/lib/core/services/auth/index.d.ts +5 -5
  299. package/lib/core/services/auth/monkeyecx-auth-guard-company.service.d.ts +10 -10
  300. package/lib/core/services/auth/monkeyecx-auth-guard-login.service.d.ts +10 -10
  301. package/lib/core/services/auth/monkeyecx-auth-guard-role.service.d.ts +16 -16
  302. package/lib/core/services/auth/monkeyecx-auth-guard.service.d.ts +10 -10
  303. package/lib/core/services/auth/monkeyecx-authentication.service.d.ts +34 -34
  304. package/lib/core/services/commons/index.d.ts +1 -1
  305. package/lib/core/services/commons/monkeyecx-commons.service.d.ts +119 -119
  306. package/lib/core/services/config/monkeyecx-alerts-config.service.d.ts +11 -11
  307. package/lib/core/services/config/monkeyecx-config.module.d.ts +9 -9
  308. package/lib/core/services/config/monkeyecx-config.service.d.ts +36 -36
  309. package/lib/core/services/config/monkeyecx-currency-config.service.d.ts +15 -15
  310. package/lib/core/services/config/monkeyecx-error-config.service.d.ts +8 -8
  311. package/lib/core/services/config/monkeyecx-feature-toggle.service.d.ts +16 -16
  312. package/lib/core/services/config/monkeyecx-gtm-config.service.d.ts +9 -9
  313. package/lib/core/services/config/monkeyecx-i18n-config.service.d.ts +16 -16
  314. package/lib/core/services/config/monkeyecx-logs-config.service.d.ts +7 -7
  315. package/lib/core/services/config/monkeyecx-maintenance-config.service.d.ts +13 -13
  316. package/lib/core/services/config/monkeyecx-security-console-config.service.d.ts +11 -11
  317. package/lib/core/services/config/monkeyecx-service-worker-config.service.d.ts +16 -16
  318. package/lib/core/services/error/index.d.ts +4 -4
  319. package/lib/core/services/error/monkeyecx-error-handling.module.d.ts +9 -9
  320. package/lib/core/services/error/monkeyecx-error-handling.service.d.ts +9 -9
  321. package/lib/core/services/error/monkeyecx-http-error-handling.service.d.ts +26 -26
  322. package/lib/core/services/error/monkeyecx-others-errors-handling.service.d.ts +9 -9
  323. package/lib/core/services/index.d.ts +25 -24
  324. package/lib/core/services/logged/index.d.ts +1 -1
  325. package/lib/core/services/logged/monkeyecx-logged-handling.service.d.ts +14 -14
  326. package/lib/core/services/monkeyecx-handling.service.d.ts +22 -22
  327. package/lib/core/services/monkeyecx-service.service.d.ts +18 -18
  328. package/lib/core/services/pagination/index.d.ts +1 -1
  329. package/lib/core/services/pagination/monkeyecx-pagination.service.d.ts +9 -9
  330. package/lib/core/services/request-download/index.d.ts +2 -2
  331. package/lib/core/services/request-download/monkeyecx-request-download-handling.service.d.ts +18 -18
  332. package/lib/core/services/request-download/monkeyecx-request-downloaded-handling.service.d.ts +16 -16
  333. package/lib/core/services/request-paged/index.d.ts +1 -1
  334. package/lib/core/services/request-paged/monkeyecx-request-request-paged-handling.d.ts +11 -11
  335. package/lib/core/services/request-queue/index.d.ts +2 -2
  336. package/lib/core/services/request-queue/monkeyecx-request-queue-handling.service.d.ts +21 -21
  337. package/lib/core/services/request-queue/monkeyecx-request-queue-modal-handling.service.d.ts +23 -23
  338. package/lib/core/services/routes/index.d.ts +1 -1
  339. package/lib/core/services/routes/monkeyecx-dicovery-params.service.d.ts +13 -13
  340. package/lib/core/services/schedules/index.d.ts +1 -1
  341. package/lib/core/services/schedules/monkeyecx-request-schedule.service.d.ts +47 -47
  342. package/lib/core/services/storage/index.d.ts +2 -2
  343. package/lib/core/services/storage/monkeyecx-cookie-storage.service.d.ts +11 -11
  344. package/lib/core/services/storage/monkeyecx-token-storage.service.d.ts +30 -30
  345. package/lib/core/services/store/index.d.ts +1 -0
  346. package/lib/core/services/store/monkeyecx-store.service.d.ts +51 -0
  347. package/lib/core/specification-search/index.d.ts +1 -1
  348. package/lib/core/specification-search/monkeyecx-specification-search.d.ts +20 -20
  349. package/lib/core/utils/decorators-utils.d.ts +5 -5
  350. package/lib/core/utils/index.d.ts +6 -6
  351. package/lib/core/utils/statics.d.ts +34 -34
  352. package/lib/core/utils/utils.d.ts +24 -24
  353. package/lib/core/utils/validate-utils.d.ts +66 -66
  354. package/lib/core/utils/validators.d.ts +32 -32
  355. package/lib/monkey-front-core.module.d.ts +19 -19
  356. package/lib/store/actions/index.d.ts +1 -1
  357. package/lib/store/actions/monkeyecx-storage.actions.d.ts +23 -23
  358. package/lib/store/index.d.ts +3 -3
  359. package/lib/store/reducers/index.d.ts +2 -2
  360. package/lib/store/reducers/monkeyecx-seeder.reducer.d.ts +2 -2
  361. package/lib/store/reducers/monkeyecx-storage.reducer.d.ts +13 -13
  362. package/lib/store/selectors/index.d.ts +1 -1
  363. package/lib/store/selectors/monkeyecx-storage.selector.d.ts +8 -8
  364. package/monkey-front-core-0.0.413.tgz +0 -0
  365. package/monkey-front-core.d.ts +5 -5
  366. package/package.json +3 -3
  367. package/public-api.d.ts +4 -4
  368. package/monkey-front-core-0.0.411.tgz +0 -0
@@ -1,226 +1,226 @@
1
- import * as moment_ from 'moment';
2
- import { MonkeyEcxUtils } from './utils';
3
- const moment = moment_;
4
- const EMAIL_REGEXP = /^[\w-.]+@([\w-]+\.)+[\w-]{1,64}$/;
5
- function isEmptyInputValue(value) {
6
- return value == null || value.length === 0;
7
- }
8
- export function emailValidator(control) {
9
- if (!control.parent || !control || isEmptyInputValue(control.value)) {
10
- return null;
11
- }
12
- const test = EMAIL_REGEXP.test(control.value);
13
- if (test)
14
- return null;
15
- return {
16
- email: true
17
- };
18
- }
19
- export function dateRangeValidator(control) {
20
- if (!control.parent || !control || isEmptyInputValue(control.value)) {
21
- return null;
22
- }
23
- const dates = control?.parent?.get('dates')?.value;
24
- if (dates &&
25
- (!MonkeyEcxUtils.persistNullEmptyUndefined(dates?.startDate) ||
26
- !MonkeyEcxUtils.persistNullEmptyUndefined(dates?.endDate))) {
27
- return {
28
- dateRange: true
29
- };
30
- }
31
- return null;
32
- }
33
- export function registerValidator(control, type) {
34
- if (!control.parent || !control || isEmptyInputValue(control.value)) {
35
- return null;
36
- }
37
- if (control && control.value !== `#MONKEY${type}`.toUpperCase()) {
38
- return {
39
- invalidUnlockRegister: true
40
- };
41
- }
42
- return null;
43
- }
44
- export function dateStartEndValidator(control) {
45
- if (!control.parent || !control) {
46
- return null;
47
- }
48
- const { parent } = control;
49
- const valueStart = parent?.get('dateStart')?.value;
50
- const valueEnd = parent?.get('dateEnd')?.value;
51
- let dateStart = null;
52
- let dateEnd = null;
53
- if (valueStart) {
54
- dateStart = new Date(valueStart);
55
- }
56
- if (valueEnd) {
57
- dateEnd = new Date(valueEnd);
58
- }
59
- if (!dateEnd || !dateStart)
60
- return null;
61
- if (dateStart > dateEnd) {
62
- return {
63
- dateStartMustBeLessThanAnd: true
64
- };
65
- }
66
- return null;
67
- }
68
- export function urlValidator(control) {
69
- if (!control.parent || !control || isEmptyInputValue(control.value))
70
- return null;
71
- if (!MonkeyEcxUtils.isValidUrl(control.value)) {
72
- return {
73
- url: true
74
- };
75
- }
76
- return null;
77
- }
78
- export function passwordConfirmValidator(control) {
79
- if (!control.parent || !control || isEmptyInputValue(control.value))
80
- return null;
81
- const { parent } = control;
82
- const password = parent?.get('password')?.value;
83
- const passwordConfirm = parent?.get('passwordConfirm')?.value;
84
- if (!password || !passwordConfirm)
85
- return null;
86
- if (password === passwordConfirm)
87
- return null;
88
- return {
89
- passwordsNotMatching: true
90
- };
91
- }
92
- export function trueValidator(control) {
93
- if (!control.parent || !control)
94
- return null;
95
- if (control && control.value !== false)
96
- return null;
97
- return {
98
- invalidTrue: true
99
- };
100
- }
101
- export function comboValidator(control) {
102
- if (!control.parent || !control)
103
- return null;
104
- if (control && control.value !== '0')
105
- return null;
106
- return {
107
- invalidCombo: true
108
- };
109
- }
110
- export function zipCodeValidator(control, country) {
111
- if (!control.parent || !control || isEmptyInputValue(control.value))
112
- return null;
113
- if (control && control.value) {
114
- if (!MonkeyEcxUtils.isValidZipCode(control.value, country)) {
115
- return {
116
- invalidZipCode: true
117
- };
118
- }
119
- }
120
- return null;
121
- }
122
- export function documentValidator(control, country) {
123
- if (!control.parent || !control || isEmptyInputValue(control.value))
124
- return null;
125
- if (country === 'BR') {
126
- if (!MonkeyEcxUtils.isCPFCNPJValid(control.value)) {
127
- return {
128
- invalidCpfCnpj: true
129
- };
130
- }
131
- }
132
- else if (country === 'CL') {
133
- if (!MonkeyEcxUtils.isValidRUT(control.value)) {
134
- return {
135
- invalidCpfCnpj: true
136
- };
137
- }
138
- }
139
- return null;
140
- }
141
- export function dateValidator(control) {
142
- if (!control.parent || !control || isEmptyInputValue(control.value))
143
- return null;
144
- const dateFormat = 'MM-DD-YYYY';
145
- if (!moment
146
- .default(moment.default(control.value).format(dateFormat), ['DD/MM/YYYY', 'MM-DD-YYYY', 'YYYY-MM-DD'], true)
147
- .isValid()) {
148
- return {
149
- invalidDate: true
150
- };
151
- }
152
- return null;
153
- }
154
- export function valueGreaterThanZero(control) {
155
- if (!control.parent || !control || isEmptyInputValue(control.value))
156
- return null;
157
- if (control && `${control?.value}` === '0') {
158
- return {
159
- invalidValueGreaterThanZero: true
160
- };
161
- }
162
- return null;
163
- }
164
- export function requiredWithTrimValidator(control) {
165
- if (!control.parent || !control)
166
- return null;
167
- if (control && !`${control?.value}`.trim()) {
168
- return {
169
- required: true
170
- };
171
- }
172
- return null;
173
- }
174
- export class Validators {
175
- static email(control) {
176
- return emailValidator(control);
177
- }
178
- static dateRange(control) {
179
- return dateRangeValidator(control);
180
- }
181
- static unlockSponsorRegister(control) {
182
- return registerValidator(control, 'sponsor');
183
- }
184
- static unlockBuyerRegister(control) {
185
- return registerValidator(control, 'buyer');
186
- }
187
- static dateStartEnd(control) {
188
- return dateStartEndValidator(control);
189
- }
190
- static url(control) {
191
- return urlValidator(control);
192
- }
193
- static passwordConfirm(control) {
194
- return passwordConfirmValidator(control);
195
- }
196
- static true(control) {
197
- return trueValidator(control);
198
- }
199
- static combo(control) {
200
- return comboValidator(control);
201
- }
202
- static zipCode(control) {
203
- return zipCodeValidator(control);
204
- }
205
- static zipCodeByCountry(country) {
206
- return (control) => {
207
- return zipCodeValidator(control, country);
208
- };
209
- }
210
- static documentBR(control) {
211
- return documentValidator(control, 'BR');
212
- }
213
- static documentCL(control) {
214
- return documentValidator(control, 'CL');
215
- }
216
- static date(control) {
217
- return dateValidator(control);
218
- }
219
- static greaterThanZero(control) {
220
- return valueGreaterThanZero(control);
221
- }
222
- static required(control) {
223
- return requiredWithTrimValidator(control);
224
- }
225
- }
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21vbmtleS1mcm9udC1jb3JlL3NyYy9saWIvY29yZS91dGlscy92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFekMsTUFBTSxNQUFNLEdBQVEsT0FBTyxDQUFDO0FBRTVCLE1BQU0sWUFBWSxHQUFHLGtDQUFrQyxDQUFDO0FBRXhELFNBQVMsaUJBQWlCLENBQUMsS0FBVTtJQUNuQyxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsT0FBd0I7SUFDckQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ25FLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN0QixPQUFPO1FBQ0wsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUF3QjtJQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbkUsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFD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QkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUF3QjtRQUN0QyxPQUFPLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE1vbmtleUVjeFV0aWxzIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IG1vbWVudDogYW55ID0gbW9tZW50XztcblxuY29uc3QgRU1BSUxfUkVHRVhQID0gL15bXFx3LS5dK0AoW1xcdy1dK1xcLikrW1xcdy1dezEsNjR9JC87XG5cbmZ1bmN0aW9uIGlzRW1wdHlJbnB1dFZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUubGVuZ3RoID09PSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1haWxWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICBpZiAoIWNvbnRyb2wucGFyZW50IHx8ICFjb250cm9sIHx8IGlzRW1wdHlJbnB1dFZhbHVlKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgdGVzdCA9IEVNQUlMX1JFR0VYUC50ZXN0KGNvbnRyb2wudmFsdWUpO1xuICBpZiAodGVzdCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7XG4gICAgZW1haWw6IHRydWVcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVSYW5nZVZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wgfHwgaXNFbXB0eUlucHV0VmFsdWUoY29udHJvbC52YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGRhdGVzID0gY29udHJvbD8ucGFyZW50Py5nZXQoJ2RhdGVzJyk/LnZhbHVlO1xuICBpZiAoXG4gICAgZGF0ZXMgJiZcbiAgICAoIU1vbmtleUVjeFV0aWxzLnBlcnNpc3ROdWxsRW1wdHlVbmRlZmluZWQoZGF0ZXM/LnN0YXJ0RGF0ZSkgfHxcbiAgICAgICFNb25rZXlFY3hVdGlscy5wZXJzaXN0TnVsbEVtcHR5VW5kZWZpbmVkKGRhdGVzPy5lbmREYXRlKSlcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGVSYW5nZTogdHJ1ZVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgdHlwZTogc3RyaW5nKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICBpZiAoIWNvbnRyb2wucGFyZW50IHx8ICFjb250cm9sIHx8IGlzRW1wdHlJbnB1dFZhbHVlKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29udHJvbCAmJiBjb250cm9sLnZhbHVlICE9PSBgI01PTktFWSR7dHlwZX1gLnRvVXBwZXJDYXNlKCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW52YWxpZFVubG9ja1JlZ2lzdGVyOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZVN0YXJ0RW5kVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBwYXJlbnQgfSA9IGNvbnRyb2w7XG5cbiAgY29uc3QgdmFsdWVTdGFydCA9IHBhcmVudD8uZ2V0KCdkYXRlU3RhcnQnKT8udmFsdWU7XG4gIGNvbnN0IHZhbHVlRW5kID0gcGFyZW50Py5nZXQoJ2RhdGVFbmQnKT8udmFsdWU7XG4gIGxldCBkYXRlU3RhcnQ6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgbGV0IGRhdGVFbmQ6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgaWYgKHZhbHVlU3RhcnQpIHtcbiAgICBkYXRlU3RhcnQgPSBuZXcgRGF0ZSh2YWx1ZVN0YXJ0KTtcbiAgfVxuICBpZiAodmFsdWVFbmQpIHtcbiAgICBkYXRlRW5kID0gbmV3IERhdGUodmFsdWVFbmQpO1xuICB9XG5cbiAgaWYgKCFkYXRlRW5kIHx8ICFkYXRlU3RhcnQpIHJldHVybiBudWxsO1xuICBpZiAoZGF0ZVN0YXJ0ID4gZGF0ZUVuZCkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRlU3RhcnRNdXN0QmVMZXNzVGhhbkFuZDogdHJ1ZVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVybFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wgfHwgaXNFbXB0eUlucHV0VmFsdWUoY29udHJvbC52YWx1ZSkpIHJldHVybiBudWxsO1xuXG4gIGlmICghTW9ua2V5RWN4VXRpbHMuaXNWYWxpZFVybChjb250cm9sLnZhbHVlKSkge1xuICAgIHJldHVybiB7XG4gICAgICB1cmw6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXNzd29yZENvbmZpcm1WYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICBpZiAoIWNvbnRyb2wucGFyZW50IHx8ICFjb250cm9sIHx8IGlzRW1wdHlJbnB1dFZhbHVlKGNvbnRyb2wudmFsdWUpKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCB7IHBhcmVudCB9ID0gY29udHJvbDtcbiAgY29uc3QgcGFzc3dvcmQgPSBwYXJlbnQ/LmdldCgncGFzc3dvcmQnKT8udmFsdWU7XG4gIGNvbnN0IHBhc3N3b3JkQ29uZmlybSA9IHBhcmVudD8uZ2V0KCdwYXNzd29yZENvbmZpcm0nKT8udmFsdWU7XG4gIGlmICghcGFzc3dvcmQgfHwgIXBhc3N3b3JkQ29uZmlybSkgcmV0dXJuIG51bGw7XG4gIGlmIChwYXNzd29yZCA9PT0gcGFzc3dvcmRDb25maXJtKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4ge1xuICAgIHBhc3N3b3Jkc05vdE1hdGNoaW5nOiB0cnVlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnVlVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbCkgcmV0dXJuIG51bGw7XG4gIGlmIChjb250cm9sICYmIGNvbnRyb2wudmFsdWUgIT09IGZhbHNlKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4ge1xuICAgIGludmFsaWRUcnVlOiB0cnVlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21ib1ZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wpIHJldHVybiBudWxsO1xuICBpZiAoY29udHJvbCAmJiBjb250cm9sLnZhbHVlICE9PSAnMCcpIHJldHVybiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgaW52YWxpZENvbWJvOiB0cnVlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB6aXBDb2RlVmFsaWRhdG9yKFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gIGNvdW50cnk/OiBzdHJpbmdcbik6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbCB8fCBpc0VtcHR5SW5wdXRWYWx1ZShjb250cm9sLnZhbHVlKSkgcmV0dXJuIG51bGw7XG4gIGlmIChjb250cm9sICYmIGNvbnRyb2wudmFsdWUpIHtcbiAgICBpZiAoIU1vbmtleUVjeFV0aWxzLmlzVmFsaWRaaXBDb2RlKGNvbnRyb2wudmFsdWUsIGNvdW50cnkpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnZhbGlkWmlwQ29kZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvY3VtZW50VmFsaWRhdG9yKFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gIGNvdW50cnk6IHN0cmluZ1xuKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICBpZiAoIWNvbnRyb2wucGFyZW50IHx8ICFjb250cm9sIHx8IGlzRW1wdHlJbnB1dFZhbHVlKGNvbnRyb2wudmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgaWYgKGNvdW50cnkgPT09ICdCUicpIHtcbiAgICBpZiAoIU1vbmtleUVjeFV0aWxzLmlzQ1BGQ05QSlZhbGlkKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnZhbGlkQ3BmQ25wajogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY291bnRyeSA9PT0gJ0NMJykge1xuICAgIGlmICghTW9ua2V5RWN4VXRpbHMuaXNWYWxpZFJVVChjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW52YWxpZENwZkNucGo6IHRydWVcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbCB8fCBpc0VtcHR5SW5wdXRWYWx1ZShjb250cm9sLnZhbHVlKSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgZGF0ZUZvcm1hdCA9ICdNTS1ERC1ZWVlZJztcbiAgaWYgKFxuICAgICFtb21lbnRcbiAgICAgIC5kZWZhdWx0KFxuICAgICAgICBtb21lbnQuZGVmYXVsdChjb250cm9sLnZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdCksXG4gICAgICAgIFsnREQvTU0vWVlZWScsICdNTS1ERC1ZWVlZJywgJ1lZWVktTU0tREQnXSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKVxuICAgICAgLmlzVmFsaWQoKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW52YWxpZERhdGU6IHRydWVcbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVHcmVhdGVyVGhhblplcm8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICBpZiAoIWNvbnRyb2wucGFyZW50IHx8ICFjb250cm9sIHx8IGlzRW1wdHlJbnB1dFZhbHVlKGNvbnRyb2wudmFsdWUpKSByZXR1cm4gbnVsbDtcblxuICBpZiAoY29udHJvbCAmJiBgJHtjb250cm9sPy52YWx1ZX1gID09PSAnMCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW52YWxpZFZhbHVlR3JlYXRlclRoYW5aZXJvOiB0cnVlXG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVkV2l0aFRyaW1WYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICBpZiAoIWNvbnRyb2wucGFyZW50IHx8ICFjb250cm9sKSByZXR1cm4gbnVsbDtcblxuICBpZiAoY29udHJvbCAmJiAhYCR7Y29udHJvbD8udmFsdWV9YC50cmltKCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9ycyB7XG4gIHN0YXRpYyBlbWFpbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIGVtYWlsVmFsaWRhdG9yKGNvbnRyb2wpO1xuICB9XG5cbiAgc3RhdGljIGRhdGVSYW5nZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIGRhdGVSYW5nZVZhbGlkYXRvcihjb250cm9sKTtcbiAgfVxuXG4gIHN0YXRpYyB1bmxvY2tTcG9uc29yUmVnaXN0ZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiByZWdpc3RlclZhbGlkYXRvcihjb250cm9sLCAnc3BvbnNvcicpO1xuICB9XG5cbiAgc3RhdGljIHVubG9ja0J1eWVyUmVnaXN0ZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiByZWdpc3RlclZhbGlkYXRvcihjb250cm9sLCAnYnV5ZXInKTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlU3RhcnRFbmQoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiBkYXRlU3RhcnRFbmRWYWxpZGF0b3IoY29udHJvbCk7XG4gIH1cblxuICBzdGF0aWMgdXJsKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdXJsVmFsaWRhdG9yKGNvbnRyb2wpO1xuICB9XG5cbiAgc3RhdGljIHBhc3N3b3JkQ29uZmlybShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIHBhc3N3b3JkQ29uZmlybVZhbGlkYXRvcihjb250cm9sKTtcbiAgfVxuXG4gIHN0YXRpYyB0cnVlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdHJ1ZVZhbGlkYXRvcihjb250cm9sKTtcbiAgfVxuXG4gIHN0YXRpYyBjb21ibyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIGNvbWJvVmFsaWRhdG9yKGNvbnRyb2wpO1xuICB9XG5cbiAgc3RhdGljIHppcENvZGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiB6aXBDb2RlVmFsaWRhdG9yKGNvbnRyb2wpO1xuICB9XG5cbiAgc3RhdGljIHppcENvZGVCeUNvdW50cnkoY291bnRyeTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICByZXR1cm4gemlwQ29kZVZhbGlkYXRvcihjb250cm9sLCBjb3VudHJ5KTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRvY3VtZW50QlIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiBkb2N1bWVudFZhbGlkYXRvcihjb250cm9sLCAnQlInKTtcbiAgfVxuXG4gIHN0YXRpYyBkb2N1bWVudENMKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gZG9jdW1lbnRWYWxpZGF0b3IoY29udHJvbCwgJ0NMJyk7XG4gIH1cblxuICBzdGF0aWMgZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIGRhdGVWYWxpZGF0b3IoY29udHJvbCk7XG4gIH1cblxuICBzdGF0aWMgZ3JlYXRlclRoYW5aZXJvKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdmFsdWVHcmVhdGVyVGhhblplcm8oY29udHJvbCk7XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWQoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiByZXF1aXJlZFdpdGhUcmltVmFsaWRhdG9yKGNvbnRyb2wpO1xuICB9XG59XG4iXX0=
1
+ import * as moment_ from 'moment';
2
+ import { MonkeyEcxUtils } from './utils';
3
+ const moment = moment_;
4
+ const EMAIL_REGEXP = /^[\w-.]+@([\w-]+\.)+[\w-]{1,64}$/;
5
+ function isEmptyInputValue(value) {
6
+ return value == null || value.length === 0;
7
+ }
8
+ export function emailValidator(control) {
9
+ if (!control.parent || !control || isEmptyInputValue(control.value)) {
10
+ return null;
11
+ }
12
+ const test = EMAIL_REGEXP.test(control.value);
13
+ if (test)
14
+ return null;
15
+ return {
16
+ email: true
17
+ };
18
+ }
19
+ export function dateRangeValidator(control) {
20
+ if (!control.parent || !control || isEmptyInputValue(control.value)) {
21
+ return null;
22
+ }
23
+ const dates = control?.parent?.get('dates')?.value;
24
+ if (dates &&
25
+ (!MonkeyEcxUtils.persistNullEmptyUndefined(dates?.startDate) ||
26
+ !MonkeyEcxUtils.persistNullEmptyUndefined(dates?.endDate))) {
27
+ return {
28
+ dateRange: true
29
+ };
30
+ }
31
+ return null;
32
+ }
33
+ export function registerValidator(control, type) {
34
+ if (!control.parent || !control || isEmptyInputValue(control.value)) {
35
+ return null;
36
+ }
37
+ if (control && control.value !== `#MONKEY${type}`.toUpperCase()) {
38
+ return {
39
+ invalidUnlockRegister: true
40
+ };
41
+ }
42
+ return null;
43
+ }
44
+ export function dateStartEndValidator(control) {
45
+ if (!control.parent || !control) {
46
+ return null;
47
+ }
48
+ const { parent } = control;
49
+ const valueStart = parent?.get('dateStart')?.value;
50
+ const valueEnd = parent?.get('dateEnd')?.value;
51
+ let dateStart = null;
52
+ let dateEnd = null;
53
+ if (valueStart) {
54
+ dateStart = new Date(valueStart);
55
+ }
56
+ if (valueEnd) {
57
+ dateEnd = new Date(valueEnd);
58
+ }
59
+ if (!dateEnd || !dateStart)
60
+ return null;
61
+ if (dateStart > dateEnd) {
62
+ return {
63
+ dateStartMustBeLessThanAnd: true
64
+ };
65
+ }
66
+ return null;
67
+ }
68
+ export function urlValidator(control) {
69
+ if (!control.parent || !control || isEmptyInputValue(control.value))
70
+ return null;
71
+ if (!MonkeyEcxUtils.isValidUrl(control.value)) {
72
+ return {
73
+ url: true
74
+ };
75
+ }
76
+ return null;
77
+ }
78
+ export function passwordConfirmValidator(control) {
79
+ if (!control.parent || !control || isEmptyInputValue(control.value))
80
+ return null;
81
+ const { parent } = control;
82
+ const password = parent?.get('password')?.value;
83
+ const passwordConfirm = parent?.get('passwordConfirm')?.value;
84
+ if (!password || !passwordConfirm)
85
+ return null;
86
+ if (password === passwordConfirm)
87
+ return null;
88
+ return {
89
+ passwordsNotMatching: true
90
+ };
91
+ }
92
+ export function trueValidator(control) {
93
+ if (!control.parent || !control)
94
+ return null;
95
+ if (control && control.value !== false)
96
+ return null;
97
+ return {
98
+ invalidTrue: true
99
+ };
100
+ }
101
+ export function comboValidator(control) {
102
+ if (!control.parent || !control)
103
+ return null;
104
+ if (control && control.value !== '0')
105
+ return null;
106
+ return {
107
+ invalidCombo: true
108
+ };
109
+ }
110
+ export function zipCodeValidator(control, country) {
111
+ if (!control.parent || !control || isEmptyInputValue(control.value))
112
+ return null;
113
+ if (control && control.value) {
114
+ if (!MonkeyEcxUtils.isValidZipCode(control.value, country)) {
115
+ return {
116
+ invalidZipCode: true
117
+ };
118
+ }
119
+ }
120
+ return null;
121
+ }
122
+ export function documentValidator(control, country) {
123
+ if (!control.parent || !control || isEmptyInputValue(control.value))
124
+ return null;
125
+ if (country === 'BR') {
126
+ if (!MonkeyEcxUtils.isCPFCNPJValid(control.value)) {
127
+ return {
128
+ invalidCpfCnpj: true
129
+ };
130
+ }
131
+ }
132
+ else if (country === 'CL') {
133
+ if (!MonkeyEcxUtils.isValidRUT(control.value)) {
134
+ return {
135
+ invalidCpfCnpj: true
136
+ };
137
+ }
138
+ }
139
+ return null;
140
+ }
141
+ export function dateValidator(control) {
142
+ if (!control.parent || !control || isEmptyInputValue(control.value))
143
+ return null;
144
+ const dateFormat = 'MM-DD-YYYY';
145
+ if (!moment
146
+ .default(moment.default(control.value).format(dateFormat), ['DD/MM/YYYY', 'MM-DD-YYYY', 'YYYY-MM-DD'], true)
147
+ .isValid()) {
148
+ return {
149
+ invalidDate: true
150
+ };
151
+ }
152
+ return null;
153
+ }
154
+ export function valueGreaterThanZero(control) {
155
+ if (!control.parent || !control || isEmptyInputValue(control.value))
156
+ return null;
157
+ if (control && `${control?.value}` === '0') {
158
+ return {
159
+ invalidValueGreaterThanZero: true
160
+ };
161
+ }
162
+ return null;
163
+ }
164
+ export function requiredWithTrimValidator(control) {
165
+ if (!control.parent || !control)
166
+ return null;
167
+ if (control && !`${control?.value}`.trim()) {
168
+ return {
169
+ required: true
170
+ };
171
+ }
172
+ return null;
173
+ }
174
+ export class Validators {
175
+ static email(control) {
176
+ return emailValidator(control);
177
+ }
178
+ static dateRange(control) {
179
+ return dateRangeValidator(control);
180
+ }
181
+ static unlockSponsorRegister(control) {
182
+ return registerValidator(control, 'sponsor');
183
+ }
184
+ static unlockBuyerRegister(control) {
185
+ return registerValidator(control, 'buyer');
186
+ }
187
+ static dateStartEnd(control) {
188
+ return dateStartEndValidator(control);
189
+ }
190
+ static url(control) {
191
+ return urlValidator(control);
192
+ }
193
+ static passwordConfirm(control) {
194
+ return passwordConfirmValidator(control);
195
+ }
196
+ static true(control) {
197
+ return trueValidator(control);
198
+ }
199
+ static combo(control) {
200
+ return comboValidator(control);
201
+ }
202
+ static zipCode(control) {
203
+ return zipCodeValidator(control);
204
+ }
205
+ static zipCodeByCountry(country) {
206
+ return (control) => {
207
+ return zipCodeValidator(control, country);
208
+ };
209
+ }
210
+ static documentBR(control) {
211
+ return documentValidator(control, 'BR');
212
+ }
213
+ static documentCL(control) {
214
+ return documentValidator(control, 'CL');
215
+ }
216
+ static date(control) {
217
+ return dateValidator(control);
218
+ }
219
+ static greaterThanZero(control) {
220
+ return valueGreaterThanZero(control);
221
+ }
222
+ static required(control) {
223
+ return requiredWithTrimValidator(control);
224
+ }
225
+ }
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21vbmtleS1mcm9udC1jb3JlL3NyYy9saWIvY29yZS91dGlscy92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFekMsTUFBTSxNQUFNLEdBQVEsT0FBTyxDQUFDO0FBRTVCLE1BQU0sWUFBWSxHQUFHLGtDQUFrQyxDQUFDO0FBRXhELFNBQVMsaUJBQWlCLENBQUMsS0FBVTtJQUNuQyxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsT0FBd0I7SUFDckQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ25FLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN0QixPQUFPO1FBQ0wsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUF3QjtJQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbkUsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFD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QkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUF3QjtRQUN0QyxPQUFPLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBNb25rZXlFY3hVdGlscyB9IGZyb20gJy4vdXRpbHMnO1xyXG5cclxuY29uc3QgbW9tZW50OiBhbnkgPSBtb21lbnRfO1xyXG5cclxuY29uc3QgRU1BSUxfUkVHRVhQID0gL15bXFx3LS5dK0AoW1xcdy1dK1xcLikrW1xcdy1dezEsNjR9JC87XHJcblxyXG5mdW5jdGlvbiBpc0VtcHR5SW5wdXRWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUubGVuZ3RoID09PSAwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW1haWxWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wgfHwgaXNFbXB0eUlucHV0VmFsdWUoY29udHJvbC52YWx1ZSkpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICBjb25zdCB0ZXN0ID0gRU1BSUxfUkVHRVhQLnRlc3QoY29udHJvbC52YWx1ZSk7XHJcbiAgaWYgKHRlc3QpIHJldHVybiBudWxsO1xyXG4gIHJldHVybiB7XHJcbiAgICBlbWFpbDogdHJ1ZVxyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkYXRlUmFuZ2VWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wgfHwgaXNFbXB0eUlucHV0VmFsdWUoY29udHJvbC52YWx1ZSkpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZGF0ZXMgPSBjb250cm9sPy5wYXJlbnQ/LmdldCgnZGF0ZXMnKT8udmFsdWU7XHJcbiAgaWYgKFxyXG4gICAgZGF0ZXMgJiZcclxuICAgICghTW9ua2V5RWN4VXRpbHMucGVyc2lzdE51bGxFbXB0eVVuZGVmaW5lZChkYXRlcz8uc3RhcnREYXRlKSB8fFxyXG4gICAgICAhTW9ua2V5RWN4VXRpbHMucGVyc2lzdE51bGxFbXB0eVVuZGVmaW5lZChkYXRlcz8uZW5kRGF0ZSkpXHJcbiAgKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkYXRlUmFuZ2U6IHRydWVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgdHlwZTogc3RyaW5nKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wgfHwgaXNFbXB0eUlucHV0VmFsdWUoY29udHJvbC52YWx1ZSkpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAhPT0gYCNNT05LRVkke3R5cGV9YC50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpbnZhbGlkVW5sb2NrUmVnaXN0ZXI6IHRydWVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVTdGFydEVuZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbCkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBjb25zdCB7IHBhcmVudCB9ID0gY29udHJvbDtcclxuXHJcbiAgY29uc3QgdmFsdWVTdGFydCA9IHBhcmVudD8uZ2V0KCdkYXRlU3RhcnQnKT8udmFsdWU7XHJcbiAgY29uc3QgdmFsdWVFbmQgPSBwYXJlbnQ/LmdldCgnZGF0ZUVuZCcpPy52YWx1ZTtcclxuICBsZXQgZGF0ZVN0YXJ0OiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgbGV0IGRhdGVFbmQ6IERhdGUgfCBudWxsID0gbnVsbDtcclxuICBpZiAodmFsdWVTdGFydCkge1xyXG4gICAgZGF0ZVN0YXJ0ID0gbmV3IERhdGUodmFsdWVTdGFydCk7XHJcbiAgfVxyXG4gIGlmICh2YWx1ZUVuZCkge1xyXG4gICAgZGF0ZUVuZCA9IG5ldyBEYXRlKHZhbHVlRW5kKTtcclxuICB9XHJcblxyXG4gIGlmICghZGF0ZUVuZCB8fCAhZGF0ZVN0YXJ0KSByZXR1cm4gbnVsbDtcclxuICBpZiAoZGF0ZVN0YXJ0ID4gZGF0ZUVuZCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGF0ZVN0YXJ0TXVzdEJlTGVzc1RoYW5BbmQ6IHRydWVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVybFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbCB8fCBpc0VtcHR5SW5wdXRWYWx1ZShjb250cm9sLnZhbHVlKSkgcmV0dXJuIG51bGw7XHJcblxyXG4gIGlmICghTW9ua2V5RWN4VXRpbHMuaXNWYWxpZFVybChjb250cm9sLnZhbHVlKSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdXJsOiB0cnVlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXNzd29yZENvbmZpcm1WYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wgfHwgaXNFbXB0eUlucHV0VmFsdWUoY29udHJvbC52YWx1ZSkpIHJldHVybiBudWxsO1xyXG5cclxuICBjb25zdCB7IHBhcmVudCB9ID0gY29udHJvbDtcclxuICBjb25zdCBwYXNzd29yZCA9IHBhcmVudD8uZ2V0KCdwYXNzd29yZCcpPy52YWx1ZTtcclxuICBjb25zdCBwYXNzd29yZENvbmZpcm0gPSBwYXJlbnQ/LmdldCgncGFzc3dvcmRDb25maXJtJyk/LnZhbHVlO1xyXG4gIGlmICghcGFzc3dvcmQgfHwgIXBhc3N3b3JkQ29uZmlybSkgcmV0dXJuIG51bGw7XHJcbiAgaWYgKHBhc3N3b3JkID09PSBwYXNzd29yZENvbmZpcm0pIHJldHVybiBudWxsO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgcGFzc3dvcmRzTm90TWF0Y2hpbmc6IHRydWVcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdHJ1ZVZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbCkgcmV0dXJuIG51bGw7XHJcbiAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAhPT0gZmFsc2UpIHJldHVybiBudWxsO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgaW52YWxpZFRydWU6IHRydWVcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29tYm9WYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wpIHJldHVybiBudWxsO1xyXG4gIGlmIChjb250cm9sICYmIGNvbnRyb2wudmFsdWUgIT09ICcwJykgcmV0dXJuIG51bGw7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBpbnZhbGlkQ29tYm86IHRydWVcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gemlwQ29kZVZhbGlkYXRvcihcclxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXHJcbiAgY291bnRyeT86IHN0cmluZ1xyXG4pOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbCB8fCBpc0VtcHR5SW5wdXRWYWx1ZShjb250cm9sLnZhbHVlKSkgcmV0dXJuIG51bGw7XHJcbiAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSkge1xyXG4gICAgaWYgKCFNb25rZXlFY3hVdGlscy5pc1ZhbGlkWmlwQ29kZShjb250cm9sLnZhbHVlLCBjb3VudHJ5KSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGludmFsaWRaaXBDb2RlOiB0cnVlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRvY3VtZW50VmFsaWRhdG9yKFxyXG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcclxuICBjb3VudHJ5OiBzdHJpbmdcclxuKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wgfHwgaXNFbXB0eUlucHV0VmFsdWUoY29udHJvbC52YWx1ZSkpIHJldHVybiBudWxsO1xyXG4gIGlmIChjb3VudHJ5ID09PSAnQlInKSB7XHJcbiAgICBpZiAoIU1vbmtleUVjeFV0aWxzLmlzQ1BGQ05QSlZhbGlkKGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaW52YWxpZENwZkNucGo6IHRydWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKGNvdW50cnkgPT09ICdDTCcpIHtcclxuICAgIGlmICghTW9ua2V5RWN4VXRpbHMuaXNWYWxpZFJVVChjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGludmFsaWRDcGZDbnBqOiB0cnVlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wgfHwgaXNFbXB0eUlucHV0VmFsdWUoY29udHJvbC52YWx1ZSkpIHJldHVybiBudWxsO1xyXG5cclxuICBjb25zdCBkYXRlRm9ybWF0ID0gJ01NLURELVlZWVknO1xyXG4gIGlmIChcclxuICAgICFtb21lbnRcclxuICAgICAgLmRlZmF1bHQoXHJcbiAgICAgICAgbW9tZW50LmRlZmF1bHQoY29udHJvbC52YWx1ZSkuZm9ybWF0KGRhdGVGb3JtYXQpLFxyXG4gICAgICAgIFsnREQvTU0vWVlZWScsICdNTS1ERC1ZWVlZJywgJ1lZWVktTU0tREQnXSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgIClcclxuICAgICAgLmlzVmFsaWQoKVxyXG4gICkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaW52YWxpZERhdGU6IHRydWVcclxuICAgIH07XHJcbiAgfVxyXG4gIHJldHVybiBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVHcmVhdGVyVGhhblplcm8oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wgfHwgaXNFbXB0eUlucHV0VmFsdWUoY29udHJvbC52YWx1ZSkpIHJldHVybiBudWxsO1xyXG5cclxuICBpZiAoY29udHJvbCAmJiBgJHtjb250cm9sPy52YWx1ZX1gID09PSAnMCcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGludmFsaWRWYWx1ZUdyZWF0ZXJUaGFuWmVybzogdHJ1ZVxyXG4gICAgfTtcclxuICB9XHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZFdpdGhUcmltVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICBpZiAoIWNvbnRyb2wucGFyZW50IHx8ICFjb250cm9sKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgaWYgKGNvbnRyb2wgJiYgIWAke2NvbnRyb2w/LnZhbHVlfWAudHJpbSgpKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfTtcclxuICB9XHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JzIHtcclxuICBzdGF0aWMgZW1haWwoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgcmV0dXJuIGVtYWlsVmFsaWRhdG9yKGNvbnRyb2wpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRhdGVSYW5nZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gZGF0ZVJhbmdlVmFsaWRhdG9yKGNvbnRyb2wpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHVubG9ja1Nwb25zb3JSZWdpc3Rlcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gcmVnaXN0ZXJWYWxpZGF0b3IoY29udHJvbCwgJ3Nwb25zb3InKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB1bmxvY2tCdXllclJlZ2lzdGVyKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIHJldHVybiByZWdpc3RlclZhbGlkYXRvcihjb250cm9sLCAnYnV5ZXInKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkYXRlU3RhcnRFbmQoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgcmV0dXJuIGRhdGVTdGFydEVuZFZhbGlkYXRvcihjb250cm9sKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB1cmwoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHVybFZhbGlkYXRvcihjb250cm9sKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwYXNzd29yZENvbmZpcm0oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHBhc3N3b3JkQ29uZmlybVZhbGlkYXRvcihjb250cm9sKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0cnVlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIHJldHVybiB0cnVlVmFsaWRhdG9yKGNvbnRyb2wpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNvbWJvKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIHJldHVybiBjb21ib1ZhbGlkYXRvcihjb250cm9sKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB6aXBDb2RlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIHJldHVybiB6aXBDb2RlVmFsaWRhdG9yKGNvbnRyb2wpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHppcENvZGVCeUNvdW50cnkoY291bnRyeTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgcmV0dXJuIHppcENvZGVWYWxpZGF0b3IoY29udHJvbCwgY291bnRyeSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRvY3VtZW50QlIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50VmFsaWRhdG9yKGNvbnRyb2wsICdCUicpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRvY3VtZW50Q0woY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgcmV0dXJuIGRvY3VtZW50VmFsaWRhdG9yKGNvbnRyb2wsICdDTCcpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgcmV0dXJuIGRhdGVWYWxpZGF0b3IoY29udHJvbCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ3JlYXRlclRoYW5aZXJvKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIHJldHVybiB2YWx1ZUdyZWF0ZXJUaGFuWmVybyhjb250cm9sKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyByZXF1aXJlZChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gcmVxdWlyZWRXaXRoVHJpbVZhbGlkYXRvcihjb250cm9sKTtcclxuICB9XHJcbn1cclxuIl19