@seniorsistemas/angular-components 19.9.14-develop-23365630 → 19.9.15-develop-11ab86f5

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 (502) hide show
  1. package/README.md +84 -2
  2. package/accordion/README.md +5 -4
  3. package/accordion/lib/accordion/accordion.module.d.ts +7 -0
  4. package/alert/lib/alert/alert.module.d.ts +7 -0
  5. package/badge/README.md +5 -4
  6. package/badge/lib/badge/badge.module.d.ts +10 -0
  7. package/bignumber-input/README.md +5 -4
  8. package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +16 -39
  9. package/bignumber-input/lib/bignumber-input/bignumber-input.module.d.ts +7 -0
  10. package/breadcrumb/README.md +5 -4
  11. package/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.module.d.ts +5 -1
  12. package/button/lib/button/button.module.d.ts +7 -0
  13. package/calendar-mask/README.md +5 -4
  14. package/calendar-mask/lib/calendar-mask/calendar-mask.module.d.ts +7 -0
  15. package/card/README.md +6 -5
  16. package/card/lib/card/card.module.d.ts +7 -0
  17. package/chat/README.md +11 -8
  18. package/chat/lib/chat/chat.module.d.ts +7 -0
  19. package/checkbox-list/README.md +5 -4
  20. package/checkbox-list/lib/checkbox-list/checkbox-list.module.d.ts +7 -0
  21. package/chips/README.md +5 -4
  22. package/chips/lib/chips/chips.module.d.ts +7 -0
  23. package/code-editor/README.md +5 -4
  24. package/code-editor/lib/code-editor/code-editor.module.d.ts +7 -0
  25. package/collapse-link/README.md +5 -4
  26. package/collapse-link/lib/collapse-link/collapse-link.module.d.ts +7 -0
  27. package/common/lib/angular-components.module.d.ts +9 -0
  28. package/common/lib/provide-angular-components.d.ts +19 -0
  29. package/common/lib/svg-factory/svg-factory.module.d.ts +7 -0
  30. package/common/public-api.d.ts +1 -0
  31. package/content-generator/README.md +2 -2
  32. package/content-generator/lib/content-generator/content-generator.module.d.ts +7 -0
  33. package/control-errors/README.md +2 -2
  34. package/control-errors/lib/control-errors/control-errors.module.d.ts +7 -0
  35. package/country-phone-picker/README.md +2 -2
  36. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.module.d.ts +7 -0
  37. package/currency/README.md +1 -1
  38. package/custom-fields/README.md +14 -3
  39. package/custom-fields/lib/custom-fields/custom-fields.module.d.ts +7 -0
  40. package/custom-fields/lib/custom-fields/models/custom-field-value-parser.d.ts +21 -0
  41. package/custom-fields/lib/custom-fields/models/index.d.ts +1 -0
  42. package/dialog/README.md +1 -1
  43. package/drawer/README.md +8 -4
  44. package/drawer/lib/drawer/drawer.module.d.ts +10 -0
  45. package/dynamic-form/README.md +18 -2
  46. package/dynamic-form/dynamic-form/dynamic-form.module.d.ts +7 -0
  47. package/dynamic-form/dynamic-form/form-field/addon-config.d.ts +10 -1
  48. package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +15 -15
  49. package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +8 -6
  50. package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +5 -2
  51. package/dynamic-form/public-api.d.ts +0 -1
  52. package/editable-overlay/README.md +2 -2
  53. package/editable-overlay/lib/editable-overlay/editable-overlay.module.d.ts +7 -0
  54. package/empty-state/README.md +5 -2
  55. package/empty-state/lib/empty-state/empty-state.module.d.ts +7 -0
  56. package/esm2022/accordion/lib/accordion/accordion.module.mjs +8 -1
  57. package/esm2022/alert/lib/alert/alert.module.mjs +8 -1
  58. package/esm2022/badge/lib/badge/badge.module.mjs +11 -1
  59. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +19 -127
  60. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.module.mjs +8 -1
  61. package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.module.mjs +6 -2
  62. package/esm2022/button/lib/button/button.module.mjs +8 -1
  63. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.module.mjs +8 -1
  64. package/esm2022/card/lib/card/card.module.mjs +8 -1
  65. package/esm2022/chat/lib/chat/chat.module.mjs +8 -1
  66. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.module.mjs +8 -1
  67. package/esm2022/chips/lib/chips/chips.module.mjs +8 -1
  68. package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +10 -1
  69. package/esm2022/code-editor/lib/code-editor/code-editor.module.mjs +9 -15
  70. package/esm2022/collapse-link/lib/collapse-link/collapse-link.module.mjs +8 -1
  71. package/esm2022/common/lib/angular-components.module.mjs +10 -1
  72. package/esm2022/common/lib/provide-angular-components.mjs +22 -0
  73. package/esm2022/common/lib/svg-factory/svg-factory.module.mjs +8 -1
  74. package/esm2022/common/public-api.mjs +2 -1
  75. package/esm2022/content-generator/lib/content-generator/content-generator.module.mjs +8 -1
  76. package/esm2022/control-errors/lib/control-errors/control-errors.module.mjs +8 -1
  77. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.module.mjs +8 -1
  78. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.service.mjs +4 -3
  79. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +17 -13
  80. package/esm2022/custom-fields/lib/custom-fields/custom-fields.module.mjs +8 -1
  81. package/esm2022/custom-fields/lib/custom-fields/custom-fields.service.mjs +4 -3
  82. package/esm2022/custom-fields/lib/custom-fields/models/custom-field-type.mjs +4 -2
  83. package/esm2022/custom-fields/lib/custom-fields/models/custom-field-value-parser.mjs +46 -0
  84. package/esm2022/custom-fields/lib/custom-fields/models/index.mjs +2 -1
  85. package/esm2022/drawer/lib/drawer/drawer.module.mjs +11 -1
  86. package/esm2022/dynamic-form/dynamic-form/dynamic-form.module.mjs +8 -1
  87. package/esm2022/dynamic-form/dynamic-form/form-field/addon-config.mjs +6 -2
  88. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
  89. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
  90. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +33 -10
  91. package/esm2022/dynamic-form/public-api.mjs +2 -7
  92. package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.module.mjs +8 -1
  93. package/esm2022/empty-state/lib/empty-state/empty-state.module.mjs +8 -1
  94. package/esm2022/fieldset/lib/fieldset/fieldset.module.mjs +8 -1
  95. package/esm2022/file-picker/lib/file-picker/file-picker.module.mjs +8 -1
  96. package/esm2022/file-picker/lib/file-picker/file-picker.service.mjs +4 -3
  97. package/esm2022/gantt/lib/gantt/gantt.module.mjs +8 -1
  98. package/esm2022/global-search/lib/global-search/global-search.module.mjs +19 -1
  99. package/esm2022/grid-menu/lib/grid-menu/grid-menu.module.mjs +8 -1
  100. package/esm2022/help-popover/lib/help-popover/help-popover.module.mjs +8 -1
  101. package/esm2022/image-cropper/lib/image-cropper/image-cropper.module.mjs +12 -1
  102. package/esm2022/image-cropper/lib/image-cropper/image-cropper.service.mjs +4 -3
  103. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.module.mjs +8 -1
  104. package/esm2022/info-sign/lib/info-sign/info-sign.module.mjs +8 -1
  105. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +5 -5
  106. package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +8 -1
  107. package/esm2022/input-group/lib/input-group/input-group.module.mjs +8 -1
  108. package/esm2022/input-mask/lib/input-mask/input-mask.module.mjs +8 -1
  109. package/esm2022/input-text/lib/input-text/input-text.module.mjs +8 -1
  110. package/esm2022/insights/lib/insights/insights.module.mjs +11 -1
  111. package/esm2022/kanban/lib/kanban/kanban-event.service.mjs +4 -3
  112. package/esm2022/kanban/lib/kanban/kanban.module.mjs +11 -1
  113. package/esm2022/label-value/lib/label-value/label-value.module.mjs +8 -1
  114. package/esm2022/loading-state/lib/loading-state/loading-state.module.mjs +8 -1
  115. package/esm2022/locale/lib/locale/locale.module.mjs +14 -1
  116. package/esm2022/locale/lib/locale/locale.service.mjs +4 -3
  117. package/esm2022/locale/lib/locale/options/index.mjs +1 -13
  118. package/esm2022/locale/lib/locale/pipes/localized-bignumber-impure.pipe.mjs +1 -1
  119. package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +10 -2
  120. package/esm2022/locale/lib/locale/provide-locale.mjs +42 -0
  121. package/esm2022/locale/public-api.mjs +2 -1
  122. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +5 -1
  123. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.module.mjs +8 -1
  124. package/esm2022/mask/lib/mask/mask-formatter.module.mjs +8 -1
  125. package/esm2022/mouse-events/lib/mouse-events/mouse-events.module.mjs +8 -1
  126. package/esm2022/navigation-button/lib/navigation-button/navigation-button.module.mjs +8 -1
  127. package/esm2022/number-input/lib/number-input/number-input.directive.mjs +2 -2
  128. package/esm2022/number-input/lib/number-input/number-input.module.mjs +9 -2
  129. package/esm2022/numeric/lib/numeric.module.mjs +8 -1
  130. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +178 -15
  131. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.module.mjs +8 -1
  132. package/esm2022/object-card/lib/object-card/object-card.module.mjs +12 -1
  133. package/esm2022/panel/lib/panel/panel.module.mjs +11 -1
  134. package/esm2022/password-strength/lib/password-strength/password-strength.module.mjs +8 -1
  135. package/esm2022/picklist/lib/picklist/picklist.module.mjs +8 -1
  136. package/esm2022/pin-code-field/lib/pin-code-field.module.mjs +8 -1
  137. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +8 -1
  138. package/esm2022/progressbar/lib/progressbar/progressbar.module.mjs +8 -1
  139. package/esm2022/rating-scale/lib/rating-scale/rating-scale.module.mjs +8 -1
  140. package/esm2022/select/lib/select/select.component.mjs +16 -3
  141. package/esm2022/select-button/lib/select-button/select-button.module.mjs +8 -1
  142. package/esm2022/shared/lib/shared/border-button/border-button.module.mjs +8 -1
  143. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.module.mjs +8 -1
  144. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.service.mjs +4 -3
  145. package/esm2022/slider/lib/slider/slider.module.mjs +8 -1
  146. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition.module.mjs +8 -1
  147. package/esm2022/split-button/lib/split-button/split-button.module.mjs +8 -1
  148. package/esm2022/stats-card/lib/stats-card/stats-card.module.mjs +8 -1
  149. package/esm2022/stepper/lib/stepper/stepper.module.mjs +8 -1
  150. package/esm2022/structure/lib/structure/structure.module.mjs +8 -1
  151. package/esm2022/switch/lib/switch/switch.module.mjs +8 -1
  152. package/esm2022/table/lib/table/table.module.mjs +9 -1
  153. package/esm2022/table-header/lib/table-header/table-header-checkox.module.mjs +8 -1
  154. package/esm2022/template/lib/template/template.module.mjs +8 -1
  155. package/esm2022/text-area/lib/text-area.module.mjs +8 -1
  156. package/esm2022/thumbnail/lib/thumbnail/thumbnail.module.mjs +8 -1
  157. package/esm2022/thumbnails/lib/thumbnails/thumbnails.module.mjs +8 -1
  158. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.module.mjs +8 -1
  159. package/esm2022/tile/lib/tile/tile.module.mjs +11 -1
  160. package/esm2022/timeline/lib/timeline/timeline.module.mjs +8 -1
  161. package/esm2022/toast/lib/toast/toast.module.mjs +8 -1
  162. package/esm2022/token-list/lib/token-list/token-list.module.mjs +8 -1
  163. package/esm2022/tooltip/lib/tooltip/tooltip.module.mjs +8 -1
  164. package/esm2022/topbar/lib/topbar/topbar.module.mjs +11 -1
  165. package/esm2022/tree/lib/tree/tree.module.mjs +8 -1
  166. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.module.mjs +8 -1
  167. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +7 -0
  168. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  169. package/fesm2022/seniorsistemas-angular-components-alert.mjs +7 -0
  170. package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
  171. package/fesm2022/seniorsistemas-angular-components-badge.mjs +10 -0
  172. package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
  173. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +25 -126
  174. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
  175. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +5 -1
  176. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  177. package/fesm2022/seniorsistemas-angular-components-button.mjs +7 -0
  178. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  179. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +7 -0
  180. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
  181. package/fesm2022/seniorsistemas-angular-components-card.mjs +7 -0
  182. package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
  183. package/fesm2022/seniorsistemas-angular-components-chat.mjs +7 -0
  184. package/fesm2022/seniorsistemas-angular-components-chat.mjs.map +1 -1
  185. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +7 -0
  186. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  187. package/fesm2022/seniorsistemas-angular-components-chips.mjs +7 -0
  188. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  189. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +164 -160
  190. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  191. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +7 -0
  192. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
  193. package/fesm2022/seniorsistemas-angular-components-common.mjs +38 -2
  194. package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
  195. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +7 -0
  196. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  197. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +7 -0
  198. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
  199. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +10 -2
  200. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  201. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +75 -15
  202. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
  203. package/fesm2022/seniorsistemas-angular-components-drawer.mjs +10 -0
  204. package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
  205. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +52 -208
  206. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  207. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +7 -0
  208. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs.map +1 -1
  209. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +7 -0
  210. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  211. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +7 -0
  212. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  213. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +10 -2
  214. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  215. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +7 -0
  216. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  217. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +18 -0
  218. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  219. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +7 -0
  220. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
  221. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +7 -0
  222. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  223. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +14 -2
  224. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  225. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +7 -0
  226. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
  227. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +7 -0
  228. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  229. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +11 -4
  230. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  231. package/fesm2022/seniorsistemas-angular-components-input-group.mjs +7 -0
  232. package/fesm2022/seniorsistemas-angular-components-input-group.mjs.map +1 -1
  233. package/fesm2022/seniorsistemas-angular-components-input-mask.mjs +7 -0
  234. package/fesm2022/seniorsistemas-angular-components-input-mask.mjs.map +1 -1
  235. package/fesm2022/seniorsistemas-angular-components-input-text.mjs +7 -0
  236. package/fesm2022/seniorsistemas-angular-components-input-text.mjs.map +1 -1
  237. package/fesm2022/seniorsistemas-angular-components-insights.mjs +10 -0
  238. package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
  239. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +13 -2
  240. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  241. package/fesm2022/seniorsistemas-angular-components-label-value.mjs +7 -0
  242. package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
  243. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +7 -0
  244. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
  245. package/fesm2022/seniorsistemas-angular-components-locale.mjs +58 -5
  246. package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
  247. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +11 -0
  248. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
  249. package/fesm2022/seniorsistemas-angular-components-mask.mjs +7 -0
  250. package/fesm2022/seniorsistemas-angular-components-mask.mjs.map +1 -1
  251. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +7 -0
  252. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs.map +1 -1
  253. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +7 -0
  254. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  255. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +9 -2
  256. package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
  257. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +184 -14
  258. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
  259. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +7 -0
  260. package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
  261. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +11 -0
  262. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  263. package/fesm2022/seniorsistemas-angular-components-panel.mjs +10 -0
  264. package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
  265. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +7 -0
  266. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
  267. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +7 -0
  268. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  269. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +7 -0
  270. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
  271. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +7 -0
  272. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  273. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +7 -0
  274. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
  275. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +7 -0
  276. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
  277. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +7 -0
  278. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  279. package/fesm2022/seniorsistemas-angular-components-select.mjs +15 -2
  280. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  281. package/fesm2022/seniorsistemas-angular-components-shared.mjs +7 -0
  282. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  283. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +10 -2
  284. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
  285. package/fesm2022/seniorsistemas-angular-components-slider.mjs +7 -0
  286. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  287. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +7 -0
  288. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
  289. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +7 -0
  290. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  291. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +7 -0
  292. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
  293. package/fesm2022/seniorsistemas-angular-components-stepper.mjs +7 -0
  294. package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
  295. package/fesm2022/seniorsistemas-angular-components-structure.mjs +7 -0
  296. package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
  297. package/fesm2022/seniorsistemas-angular-components-switch.mjs +7 -0
  298. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  299. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +7 -0
  300. package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
  301. package/fesm2022/seniorsistemas-angular-components-table.mjs +8 -0
  302. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  303. package/fesm2022/seniorsistemas-angular-components-template.mjs +7 -0
  304. package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
  305. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +7 -0
  306. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  307. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +7 -0
  308. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  309. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +7 -0
  310. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
  311. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +7 -0
  312. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  313. package/fesm2022/seniorsistemas-angular-components-tile.mjs +10 -0
  314. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  315. package/fesm2022/seniorsistemas-angular-components-timeline.mjs +7 -0
  316. package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
  317. package/fesm2022/seniorsistemas-angular-components-toast.mjs +7 -0
  318. package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
  319. package/fesm2022/seniorsistemas-angular-components-token-list.mjs +7 -0
  320. package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
  321. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +7 -0
  322. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  323. package/fesm2022/seniorsistemas-angular-components-topbar.mjs +10 -0
  324. package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
  325. package/fesm2022/seniorsistemas-angular-components-tree.mjs +7 -0
  326. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  327. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +7 -0
  328. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  329. package/fieldset/README.md +2 -2
  330. package/fieldset/lib/fieldset/fieldset.module.d.ts +7 -0
  331. package/file-picker/README.md +2 -2
  332. package/file-picker/lib/file-picker/file-picker.module.d.ts +7 -0
  333. package/file-upload/README.md +1 -1
  334. package/gantt/README.md +2 -2
  335. package/gantt/lib/gantt/gantt.module.d.ts +7 -0
  336. package/global-search/README.md +5 -2
  337. package/global-search/lib/global-search/global-search.module.d.ts +18 -0
  338. package/grid-menu/README.md +5 -4
  339. package/grid-menu/lib/grid-menu/grid-menu.module.d.ts +7 -0
  340. package/help-popover/README.md +5 -4
  341. package/help-popover/lib/help-popover/help-popover.module.d.ts +7 -0
  342. package/ia-insight/README.md +1 -1
  343. package/image-cropper/README.md +6 -5
  344. package/image-cropper/lib/image-cropper/image-cropper.module.d.ts +11 -0
  345. package/infinite-scroll/README.md +5 -4
  346. package/infinite-scroll/lib/infinite-scroll/infinite-scroll.module.d.ts +7 -0
  347. package/info-sign/README.md +5 -4
  348. package/info-sign/lib/info-sign/info-sign.module.d.ts +7 -0
  349. package/inline-edit/README.md +5 -4
  350. package/inline-edit/lib/inline-edit/inline-edit.module.d.ts +7 -0
  351. package/input-group/lib/input-group/input-group.module.d.ts +7 -0
  352. package/input-mask/lib/input-mask/input-mask.module.d.ts +7 -0
  353. package/input-text/lib/input-text/input-text.module.d.ts +7 -0
  354. package/insights/README.md +6 -4
  355. package/insights/lib/insights/insights.module.d.ts +10 -0
  356. package/kanban/README.md +6 -4
  357. package/kanban/lib/kanban/kanban.module.d.ts +10 -0
  358. package/label-value/README.md +5 -4
  359. package/label-value/lib/label-value/label-value.module.d.ts +7 -0
  360. package/loading-state/README.md +9 -5
  361. package/loading-state/lib/loading-state/loading-state.module.d.ts +7 -0
  362. package/locale/lib/locale/locale.module.d.ts +13 -0
  363. package/locale/lib/locale/pipes/localized-bignumber-impure.pipe.d.ts +2 -2
  364. package/locale/lib/locale/pipes/localized-bignumber.pipe.d.ts +20 -1
  365. package/locale/lib/locale/provide-locale.d.ts +18 -0
  366. package/locale/public-api.d.ts +1 -0
  367. package/localized-number-input/README.md +32 -8
  368. package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +4 -0
  369. package/localized-number-input/lib/localized-number-input/localized-number-input.module.d.ts +7 -0
  370. package/mask/lib/mask/mask-formatter.module.d.ts +7 -0
  371. package/mouse-events/README.md +5 -4
  372. package/mouse-events/lib/mouse-events/mouse-events.module.d.ts +7 -0
  373. package/navigation-button/README.md +5 -4
  374. package/navigation-button/lib/navigation-button/navigation-button.module.d.ts +7 -0
  375. package/number-input/lib/number-input/number-input.directive.d.ts +1 -1
  376. package/number-input/lib/number-input/number-input.module.d.ts +8 -1
  377. package/numeric/README.md +6 -5
  378. package/numeric/lib/numeric.module.d.ts +7 -0
  379. package/numeric-mask/README.md +44 -1
  380. package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +65 -4
  381. package/numeric-mask/lib/numeric-mask/numeric-mask.module.d.ts +7 -0
  382. package/object-card/README.md +11 -4
  383. package/object-card/lib/object-card/object-card.module.d.ts +11 -0
  384. package/package.json +1 -1
  385. package/panel/README.md +8 -4
  386. package/panel/lib/panel/panel.module.d.ts +10 -0
  387. package/password-strength/README.md +6 -3
  388. package/password-strength/lib/password-strength/password-strength.module.d.ts +7 -0
  389. package/picklist/README.md +8 -5
  390. package/picklist/lib/picklist/picklist.module.d.ts +7 -0
  391. package/pin-code-field/lib/pin-code-field.module.d.ts +7 -0
  392. package/product-header/README.md +2 -2
  393. package/profile-picture-picker/README.md +6 -3
  394. package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.d.ts +7 -0
  395. package/progressbar/README.md +6 -3
  396. package/progressbar/lib/progressbar/progressbar.module.d.ts +7 -0
  397. package/rating-scale/README.md +6 -3
  398. package/rating-scale/lib/rating-scale/rating-scale.module.d.ts +7 -0
  399. package/schematics/collection.json +40 -0
  400. package/schematics/migrations/migrate-app-to-standalone/index.d.ts +32 -0
  401. package/schematics/migrations/migrate-app-to-standalone/index.js +98 -0
  402. package/schematics/migrations/migrate-app-to-standalone/index.js.map +1 -0
  403. package/schematics/migrations/migrate-deprecated-apis/index.d.ts +49 -0
  404. package/schematics/migrations/migrate-deprecated-apis/index.js +660 -0
  405. package/schematics/migrations/migrate-deprecated-apis/index.js.map +1 -0
  406. package/schematics/migrations/migrate-deprecated-datepicker/index.d.ts +31 -0
  407. package/schematics/migrations/migrate-deprecated-datepicker/index.js +115 -0
  408. package/schematics/migrations/migrate-deprecated-datepicker/index.js.map +1 -0
  409. package/schematics/migrations/migrate-deprecated-dynamic-form/index.d.ts +52 -0
  410. package/schematics/migrations/migrate-deprecated-dynamic-form/index.js +661 -0
  411. package/schematics/migrations/migrate-deprecated-dynamic-form/index.js.map +1 -0
  412. package/schematics/migrations/migrate-deprecated-imports/index.d.ts +23 -0
  413. package/schematics/migrations/migrate-deprecated-imports/index.js +335 -0
  414. package/schematics/migrations/migrate-deprecated-imports/index.js.map +1 -0
  415. package/schematics/migrations/migrate-deprecated-selectors/index.d.ts +15 -0
  416. package/schematics/migrations/migrate-deprecated-selectors/index.js +76 -0
  417. package/schematics/migrations/migrate-deprecated-selectors/index.js.map +1 -0
  418. package/schematics/migrations/migrate-modules-to-standalone/index.d.ts +51 -0
  419. package/schematics/migrations/migrate-modules-to-standalone/index.js +632 -0
  420. package/schematics/migrations/migrate-modules-to-standalone/index.js.map +1 -0
  421. package/schematics/migrations/migrate-modules-to-standalone/modules-map.json +1656 -0
  422. package/schematics/migrations/migrate-v20/index.d.ts +9 -0
  423. package/schematics/migrations/migrate-v20/index.js +90 -0
  424. package/schematics/migrations/migrate-v20/index.js.map +1 -0
  425. package/schematics/migrations/migrate-v20/items.d.ts +7 -0
  426. package/schematics/migrations/migrate-v20/items.js +54 -0
  427. package/schematics/migrations/migrate-v20/items.js.map +1 -0
  428. package/schematics/migrations/migrate-v20/plan.d.ts +32 -0
  429. package/schematics/migrations/migrate-v20/plan.js +29 -0
  430. package/schematics/migrations/migrate-v20/plan.js.map +1 -0
  431. package/schematics/migrations.json +5 -1
  432. package/schematics/schema/app-standalone.schema.json +21 -0
  433. package/schematics/schema/migrate-v20.schema.json +33 -0
  434. package/schematics/schema/scope.schema.json +17 -0
  435. package/schematics/utils/ast-utils.js +16 -0
  436. package/schematics/utils/ast-utils.js.map +1 -1
  437. package/schematics/utils/eol.d.ts +5 -0
  438. package/schematics/utils/eol.js +17 -0
  439. package/schematics/utils/eol.js.map +1 -0
  440. package/schematics/utils/prompt-utils.d.ts +62 -0
  441. package/schematics/utils/prompt-utils.js +166 -0
  442. package/schematics/utils/prompt-utils.js.map +1 -0
  443. package/schematics/utils/report.d.ts +27 -0
  444. package/schematics/utils/report.js +70 -0
  445. package/schematics/utils/report.js.map +1 -0
  446. package/schematics/utils/scope.d.ts +17 -0
  447. package/schematics/utils/scope.js +55 -0
  448. package/schematics/utils/scope.js.map +1 -0
  449. package/schematics/utils/selection.d.ts +21 -0
  450. package/schematics/utils/selection.js +60 -0
  451. package/schematics/utils/selection.js.map +1 -0
  452. package/schematics/utils/symbol-utils.d.ts +31 -0
  453. package/schematics/utils/symbol-utils.js +202 -0
  454. package/schematics/utils/symbol-utils.js.map +1 -0
  455. package/schematics/utils/template-utils.d.ts +62 -0
  456. package/schematics/utils/template-utils.js +165 -0
  457. package/schematics/utils/template-utils.js.map +1 -0
  458. package/schematics/utils/tsconfig-paths.d.ts +5 -0
  459. package/schematics/utils/tsconfig-paths.js +73 -0
  460. package/schematics/utils/tsconfig-paths.js.map +1 -0
  461. package/select/lib/select/select.component.d.ts +8 -0
  462. package/select-button/README.md +6 -3
  463. package/select-button/lib/select-button/select-button.module.d.ts +7 -0
  464. package/shared/lib/shared/border-button/border-button.module.d.ts +7 -0
  465. package/sidebar/README.md +2 -2
  466. package/slide-in-bar/README.md +5 -5
  467. package/slide-in-bar/lib/slide-in-bar/slide-in-bar.module.d.ts +7 -0
  468. package/slider/README.md +6 -3
  469. package/slider/lib/slider/slider.module.d.ts +7 -0
  470. package/speech-recognition/README.md +6 -3
  471. package/speech-recognition/lib/speech-recognition/speech-recognition.module.d.ts +7 -0
  472. package/split-button/README.md +6 -3
  473. package/split-button/lib/split-button/split-button.module.d.ts +7 -0
  474. package/stats-card/README.md +6 -3
  475. package/stats-card/lib/stats-card/stats-card.module.d.ts +7 -0
  476. package/stepper/README.md +6 -3
  477. package/stepper/lib/stepper/stepper.module.d.ts +7 -0
  478. package/structure/lib/structure/structure.module.d.ts +7 -0
  479. package/switch/README.md +6 -3
  480. package/switch/lib/switch/switch.module.d.ts +7 -0
  481. package/table/README.md +12 -4
  482. package/table/lib/table/table.module.d.ts +8 -0
  483. package/table-header/lib/table-header/table-header-checkox.module.d.ts +7 -0
  484. package/template/README.md +0 -11
  485. package/template/lib/template/template.module.d.ts +7 -0
  486. package/text-area/lib/text-area.module.d.ts +7 -0
  487. package/text-area-ia/README.md +1 -1
  488. package/thumbnail/lib/thumbnail/thumbnail.module.d.ts +7 -0
  489. package/thumbnails/lib/thumbnails/thumbnails.module.d.ts +7 -0
  490. package/tiered-menu/lib/tiered-menu/tiered-menu.module.d.ts +7 -0
  491. package/tile/lib/tile/tile.module.d.ts +10 -0
  492. package/timeline/lib/timeline/timeline.module.d.ts +7 -0
  493. package/toast/lib/toast/toast.module.d.ts +7 -0
  494. package/token-list/lib/token-list/token-list.module.d.ts +7 -0
  495. package/tooltip/lib/tooltip/tooltip.module.d.ts +7 -0
  496. package/topbar/lib/topbar/topbar.module.d.ts +10 -0
  497. package/tree/lib/tree/tree.module.d.ts +7 -0
  498. package/workspace-switch/lib/workspace-switch/workspace-switch.module.d.ts +7 -0
  499. package/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.d.ts +0 -664
  500. package/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.d.ts +0 -29
  501. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +0 -96
  502. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +0 -124
@@ -3,14 +3,13 @@ import { Component, Input, inject, } from '@angular/core';
3
3
  import { ControlContainer, FormArray, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, } from '@angular/forms';
4
4
  import { DomSanitizer } from '@angular/platform-browser';
5
5
  import { TranslateService } from '@ngx-translate/core';
6
- import BigNumber from 'bignumber.js';
7
6
  import { forkJoin, of, Subject, throwError } from 'rxjs';
8
7
  import { catchError, finalize, takeUntil } from 'rxjs/operators';
9
8
  import { dynamicTypeToDynamicStructure, } from '@seniorsistemas/angular-components/dynamic-form';
10
9
  import { LocaleService, } from '@seniorsistemas/angular-components/locale';
11
10
  import moment from 'moment';
12
11
  import { CustomFieldsService } from './custom-fields.service';
13
- import { apiTypesToDynamicFormType, CustomFieldType, } from './models';
12
+ import { apiTypesToDynamicFormType, CustomFieldType, isNumericFieldType, parseNumericValueFromApi, parseNumericValueToApi, } from './models';
14
13
  import { DynamicFormComponent as DynamicFormComponent_1 } from '@seniorsistemas/angular-components/dynamic-form';
15
14
  import * as i0 from "@angular/core";
16
15
  /**
@@ -268,6 +267,10 @@ export class CustomFieldsComponent {
268
267
  }
269
268
  }
270
269
  }
270
+ if (isNumericFieldType(type)) {
271
+ parsedValues[name] = parseNumericValueFromApi(value);
272
+ return;
273
+ }
271
274
  if (!value) {
272
275
  return;
273
276
  }
@@ -312,13 +315,12 @@ export class CustomFieldsComponent {
312
315
  const { type } = field;
313
316
  const name = field.name;
314
317
  let value = this.formGroup.get(name)?.value;
318
+ if (isNumericFieldType(type)) {
319
+ parsedValues[name] = parseNumericValueToApi(value);
320
+ return;
321
+ }
315
322
  if (value) {
316
323
  switch (type) {
317
- case 'number':
318
- const { mask, scale } = field;
319
- if (mask)
320
- value = new BigNumber(value).toFixed(scale).toString();
321
- break;
322
324
  case 'date':
323
325
  value = moment(value).format('YYYY-MM-DD');
324
326
  break;
@@ -335,7 +337,7 @@ export class CustomFieldsComponent {
335
337
  break;
336
338
  }
337
339
  }
338
- if ((value === null || value === undefined) && (type === 'number' || type === 'enum')) {
340
+ if ((value === null || value === undefined) && type === 'enum') {
339
341
  const isMultiple = field.multiple;
340
342
  parsedValues[name] = isMultiple ? [] : null;
341
343
  }
@@ -364,9 +366,10 @@ export class CustomFieldsComponent {
364
366
  break;
365
367
  case CustomFieldType.Money:
366
368
  parameters = {
367
- type: 'legacyNumber',
369
+ type: 'money',
368
370
  precision: 15,
369
371
  scale: 2,
372
+ allowNegative: true,
370
373
  leftAddon: {
371
374
  label: localeOptions?.number?.currencySymbol ?? 'R$',
372
375
  },
@@ -374,17 +377,18 @@ export class CustomFieldsComponent {
374
377
  break;
375
378
  case CustomFieldType.Double:
376
379
  parameters = {
377
- type: 'legacyNumber',
380
+ type: 'double',
378
381
  precision: 15,
379
382
  scale: 2,
380
- localizedNumber: true,
383
+ allowNegative: true,
381
384
  };
382
385
  break;
383
386
  case CustomFieldType.Integer:
384
387
  parameters = {
385
- type: 'legacyNumber',
388
+ type: 'integer',
386
389
  precision: 15,
387
390
  scale: 0,
391
+ allowNegative: true,
388
392
  };
389
393
  break;
390
394
  case CustomFieldType.Any:
@@ -704,4 +708,4 @@ function isUploading(file) {
704
708
  function errorOnUpload(file) {
705
709
  return () => (file.error ? { uploadError: true } : null);
706
710
  }
707
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvY3VzdG9tLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFFSCxTQUFTLEVBRVQsS0FBSyxFQUtMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBRWhCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGFBQWEsRUFDYixpQkFBaUIsRUFHakIsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sU0FBUyxNQUFNLGNBQWMsQ0FBQztBQUNyQyxPQUFPLEVBQW1CLFFBQVEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBS0gsNkJBQTZCLEdBS2hDLE1BQU0saURBQWlELENBQUM7QUFFekQsT0FBTyxFQUdILGFBQWEsR0FFaEIsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRCxPQUFPLE1BQU0sTUFBTSxRQUFR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RGxCLEtBQUs7Z0JBS0Msb0JBQW9CO3NCQUQxQixLQUFLO2dCQUtDLG9CQUFvQjtzQkFEMUIsS0FBSztnQkFLQyxxQkFBcUI7c0JBRDNCLEtBQUs7Z0JBS0Msb0JBQW9CO3NCQUQxQixLQUFLO2dCQUtDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFLQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBS0MsTUFBTTtzQkFEWixLQUFLO2dCQUtDLGFBQWE7c0JBRG5CLEtBQUs7O0FBOHBCVixTQUFTLFdBQVcsQ0FBQyxJQUFhO0lBQzlCLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQWE7SUFDaEMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIGluamVjdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIENvbnRyb2xDb250YWluZXIsXHJcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICAgIEZvcm1BcnJheSxcclxuICAgIEZvcm1Db250cm9sLFxyXG4gICAgRm9ybUdyb3VwLFxyXG4gICAgTkdfVkFMSURBVE9SUyxcclxuICAgIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgVmFsaWRhdG9yLFxyXG4gICAgVmFsaWRhdG9yRm4sXHJcbiAgICBWYWxpZGF0b3JzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBCbG9iRmllbGRDb25maWcsXHJcbiAgICBCb29sZWFuRmllbGRDb25maWcsXHJcbiAgICBEeW5hbWljU3RydWN0dXJlLFxyXG4gICAgRHluYW1pY1R5cGUsXHJcbiAgICBkeW5hbWljVHlwZVRvRHluYW1pY1N0cnVjdHVyZSxcclxuICAgIEV4cGFuZGVkRHluYW1pY1R5cGUsXHJcbiAgICBOdW1iZXJGaWVsZENvbmZpZyxcclxuICAgIFNlbGVjdEZpZWxkQ29uZmlnLFxyXG4gICAgU3RydWN0dXJlVHlwZSxcclxufSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2R5bmFtaWMtZm9ybSc7XHJcbmltcG9ydCB7IEZpbGVEdG8gfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2ZpbGUtdXBsb2FkJztcclxuaW1wb3J0IHtcclxuICAgIENhbGVuZGFyTG9jYWxlT3B0aW9ucyxcclxuICAgIExvY2FsZU9wdGlvbnMsXHJcbiAgICBMb2NhbGVTZXJ2aWNlLFxyXG4gICAgTnVtYmVyTG9jYWxlT3B0aW9ucyxcclxufSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2xvY2FsZSc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tRmllbGRzU2VydmljZSB9IGZyb20gJy4vY3VzdG9tLWZpZWxkcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICAgIGFwaVR5cGVzVG9EeW5hbWljRm9ybVR5cGUsXHJcbiAgICBDdXN0b21GaWVsZHNSZXNwb25zZSxcclxuICAgIEN1c3RvbUZpZWxkc1R5cGVBUEksXHJcbiAgICBDdXN0b21GaWVsZFR5cGUsXHJcbiAgICBGaWVsZEZyb21BUEksXHJcbn0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBEeW5hbWljRm9ybUNvbXBvbmVudCBhcyBEeW5hbWljRm9ybUNvbXBvbmVudF8xIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9keW5hbWljLWZvcm0nO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIHF1ZSBjYXJyZWdhIGUgcmVuZGVyaXphIGNhbXBvcyBjdXN0b21pemFkb3MgZGluYW1pY2FtZW50ZVxyXG4gKiBhIHBhcnRpciBkYSBBUEkgZGUgY3VzdG9taXphw6fDo28gZGUgY2FtcG9zIGRvIFNlbmlvci4gUmVhbGl6YSBjaGFtYWRhcyBIVFRQIHBhcmFcclxuICogb2J0ZXIgYSBjb25maWd1cmHDp8OjbyBkb3MgY2FtcG9zLCBnZXJhIG8gZm9ybXVsw6FyaW8gcmVhdGl2YW1lbnRlIHZpYSB7QGxpbmsgRHluYW1pY0Zvcm1Db21wb25lbnR9XHJcbiAqIGUgaW1wbGVtZW50YSB7QGxpbmsgQ29udHJvbFZhbHVlQWNjZXNzb3J9IGUge0BsaW5rIFZhbGlkYXRvcn0gcGFyYSBpbnRlZ3Jhw6fDo28gY29tcGxldGFcclxuICogY29tIGZvcm11bMOhcmlvcyBBbmd1bGFyLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxzLWN1c3RvbS1maWVsZHNcclxuICogICBmb3JtQ29udHJvbE5hbWU9XCJjYW1wb3NDdXN0b21pemFkb3NcIlxyXG4gKiAgIGRvbWFpbj1cInBsYXRhZm9ybWFcIlxyXG4gKiAgIHNlcnZpY2U9XCJzZXJ2aWNvXCJcclxuICogICBlbnRpdHk9XCJlbnRpZGFkZVwiIC8+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1jdXN0b20tZmllbGRzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tZmllbGRzLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBDdXN0b21GaWVsZHNDb21wb25lbnQsXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ3VzdG9tRmllbGRzQ29tcG9uZW50LFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbRHluYW1pY0Zvcm1Db21wb25lbnRfMV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21GaWVsZHNDb21wb25lbnRcclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdFxyXG57XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbUZpZWxkc1NlcnZpY2UgPSBpbmplY3QoQ3VzdG9tRmllbGRzU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2UgPSBpbmplY3QoTG9jYWxlU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250cm9sQ29udGFpbmVyID0gaW5qZWN0KENvbnRyb2xDb250YWluZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBEb23DrW5pbyB1dGlsaXphZG8gcGFyYSBidXNjYXIgb3MgY2FtcG9zIGN1c3RvbWl6YWRvcyBuYSBBUEkuIENhbXBvIG9icmlnYXTDs3Jpby4gKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBwdWJsaWMgZG9tYWluITogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gTm9tZSBkbyBzZXJ2acOnbyB1dGlsaXphZG8gcGFyYSBpZGVudGlmaWNhciBvcyBjYW1wb3MgY3VzdG9taXphZG9zLiBDYW1wbyBvYnJpZ2F0w7NyaW8uICovXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgcHVibGljIHNlcnZpY2UhOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBOb21lIGRhIGVudGlkYWRlIHBhcmEgYSBxdWFsIG9zIGNhbXBvcyBjdXN0b21pemFkb3Mgc8OjbyBjYXJyZWdhZG9zLiBDYW1wbyBvYnJpZ2F0w7NyaW8uICovXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgcHVibGljIGVudGl0eSE6IHN0cmluZztcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIE1lbnNhZ2VtIGRlIGVycm8gZXhpYmlkYSBxdWFuZG8gYWxndW0gY2FtcG8gY3VzdG9taXphZG8gZXN0w6EgaW52w6FsaWRvLiBAZGVmYXVsdCAnJyAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpbnZhbGlkRXJyb3JMYWJlbCA9ICcnO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gT2JqZXRvIGNvbSBkYWRvcyBwcsOpLWNhcnJlZ2Fkb3MgZGEgZW50aWRhZGUsIGV2aXRhbmRvIGNoYW1hZGFzIGV4dHJhcyDDoCBBUEkuICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGVudGl0eU9iamVjdD86IEN1c3RvbUZpZWxkc1Jlc3BvbnNlO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW5kcG9pbnQgcGFyYSBidXNjYXIgYSBjb25maWd1cmHDp8OjbyBkb3MgY2FtcG9zIGN1c3RvbWl6YWRvcy4gKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY3VzdG9tRmllbGRzRW5kcG9pbnQgPSAncGxhdGZvcm0vZmllbGRfY3VzdG9taXphdGlvbi9xdWVyaWVzL2dldEVudGl0eSc7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbmRwb2ludCBwYXJhIHNvbGljaXRhciBvIHVwbG9hZCBkZSBhcnF1aXZvcyBlbSBjYW1wb3MgZG8gdGlwbyBibG9iLiAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmaWxlTG9jYXRpb25FbmRwb2ludCA9ICdwbGF0Zm9ybS9maWVsZF9jdXN0b21pemF0aW9uL2FjdGlvbnMvcmVxdWVzdFVwbG9hZCc7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbmRwb2ludCBwYXJhIHNvbGljaXRhciBhY2Vzc28gYSBhcnF1aXZvcyBqw6EgZW52aWFkb3MuICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlcXVlc3RBY2Nlc3NFbmRwb2ludCA9ICdwbGF0Zm9ybS9maWVsZF9jdXN0b21pemF0aW9uL2FjdGlvbnMvcmVxdWVzdEFjY2Vzcyc7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBNZW5zYWdlbSBkZSBlcnJvIGV4aWJpZGEgcXVhbmRvIHVtIGNhbXBvIG9icmlnYXTDs3JpbyBuw6NvIGVzdMOhIHByZWVuY2hpZG8uIEBkZWZhdWx0ICcnICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlcXVpcmVkRXJyb3JNZXNzYWdlID0gJyc7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBUZW1wbyBlbSBtcyBhcMOzcyBvIHF1YWwgbyBpbmZvLXNpZ24gZGUgY2FtcG9zIGRvIHRpcG8gZGF0YSDDqSBleGliaWRvLiBAZGVmYXVsdCAwICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc3BsYXlUaW1lSW5mb1NpZ24gPSAwO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRXhpYmUgYSBkYXRhIGRlIHVwbG9hZCBub3MgY2FtcG9zIGRvIHRpcG8gYXJxdWl2by4gQGRlZmF1bHQgZmFsc2UgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd0ZpbGVVcGxvYWREYXRlID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBPYnNlcnZhYmxlIHF1ZSBzaW5hbGl6YSBxdWFuZG8gbyBjb21wb25lbnRlIGRldmUgaW5pY2lhciBvIGNhcnJlZ2FtZW50byBkb3MgY2FtcG9zLiBAZGVmYXVsdCBudWxsICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlYWR5JDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBRdWFuZG8gYHRydWVgLCB0b2RvcyBvcyBjYW1wb3MgY3VzdG9taXphZG9zIHPDo28gZGVzYWJpbGl0YWRvcy4gKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGlzYWJsZUZpZWxkczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgcm93VHlwZTogU3RydWN0dXJlVHlwZSA9ICdyb3cnO1xyXG5cclxuICAgIHB1YmxpYyBmaWVsZHM6IER5bmFtaWNUeXBlW10gPSBbXTtcclxuICAgIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgIHByb3RlY3RlZCBkeW5hbWljU3RydWN0dXJlOiBEeW5hbWljU3RydWN0dXJlW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWR5ID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG9uQ2hhbmdlOiBhbnk7XHJcbiAgICBwcml2YXRlIG9uVG91Y2hlZDogYW55O1xyXG4gICAgcHJpdmF0ZSB2YWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1VzdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgcHJpdmF0ZSB1cGxvYWRDYW5jZWxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICAgIHByaXZhdGUgaGFzQmxvYjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICAgIHByaXZhdGUgaGFzVXBsb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbnZhbGlkRXJyb3JMYWJlbCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuaW52YWxpZF92YWx1ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaGFzQ3VzdG9tRmllbGRzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuZmllbGRzPy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwYXJlbnRGb3JtKCk6IEZvcm1Hcm91cCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbENvbnRhaW5lciEuY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwYXJlbnRDb250cm9sKCk6IEZvcm1Db250cm9sIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRGb3JtLmdldCgnY3VzdG9tJykgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXRzKCk7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuYWRkRGlzcGxheVRpbWVJbmZvU2lnblRvRmllbGRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVuYWJsZU9yRGlzYWJsZUZpZWxkcyghIXRoaXMuZGlzYWJsZUZpZWxkcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkNoYW5nZT8uKHRoaXMucGFyc2VGaWVsZHNWYWx1ZXMoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgX2Rpc2FibGVGaWVsZHMgPSBjaGFuZ2VzWydkaXNhYmxlRmllbGRzJ107XHJcbiAgICAgICAgaWYgKF9kaXNhYmxlRmllbGRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlT3JEaXNhYmxlRmllbGRzKF9kaXNhYmxlRmllbGRzLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLm5nVXN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5uZ1VzdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogRnVuY3Rpb24pIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBGdW5jdGlvbikge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWR5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5wYXJzZVZhbHVlc0ZvckZpZWxkcyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsZXNJZlNldEZvcm1WYWx1ZXNBZnRlckluaXQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlIHx8IHt9KTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEN1c3RvbUZpZWxkcygpOiBPYnNlcnZhYmxlPEN1c3RvbUZpZWxkc1Jlc3BvbnNlPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5T2JqZWN0Py5lbnRpdHlfKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmVudGl0eU9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2UuZ2V0Q3VzdG9tRmllbGRzKFxyXG4gICAgICAgICAgICB0aGlzLmRvbWFpbixcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLFxyXG4gICAgICAgICAgICB0aGlzLmVudGl0eSxcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNFbmRwb2ludCxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBlcnJvcnM6IGFueSA9IHt9O1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IGVycm9yczogY29udHJvbEVycm9ycyB9ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkKSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sRXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvcnNbZmllbGRdID0gY29udHJvbEVycm9ycztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBlcnJvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFuRmllbGRzKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBlbmFibGVPckRpc2FibGVGaWVsZHMoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGRpc2FibGVkID8gdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKT8uZGlzYWJsZSgpIDogdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKT8uZW5hYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ZhbGlkYXRlSW5wdXRzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5kb21haW4pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjdXN0b20tZmllbGRzIGRvbWFpbiEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjdXN0b20tZmllbGRzIHNlcnZpY2UhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjdXN0b20tZmllbGRzIGVudGl0eSEnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlRm9ybSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzID0gW3RoaXMuZ2V0Q3VzdG9tRmllbGRzKCksIHRoaXMubG9jYWxlU2VydmljZS5nZXQoKV07XHJcbiAgICAgICAgZm9ya0pvaW4ob2JzZXJ2YWJsZXMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbD8ubWFya0FzUHJpc3RpbmUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHkkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZHkkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtjdXN0b21GaWVsZHNSZXNwb25zZSwgbG9jYWxlT3B0aW9uc10gPSByZXNwb25zZSBhcyBbQ3VzdG9tRmllbGRzUmVzcG9uc2UsIExvY2FsZU9wdGlvbnNdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdHM6IHsgW2tleSBpbiBzdHJpbmddOiB7IGRlZmF1bHRWYWx1ZT86IGJvb2xlYW47IGRlZmF1bHRNYXNrPzogc3RyaW5nIH0gfSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLlN0cmluZ10gPSB7fTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5Cb29sZWFuXSA9IHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkludGVnZXJdID0ge307XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuRG91YmxlXSA9IHsgZGVmYXVsdE1hc2s6ICcnIH07XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuTW9uZXldID0ge307XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuRGF0ZV0gPSB7fTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5EYXRlVGltZV0gPSB7fTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5Mb2NhbERhdGVUaW1lXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLlRpbWVdID0ge307XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQmxvYl0gPSB7fTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5FbnVtXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkJpbmFyeV0gPSB7fTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5BbnldID0ge307XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXN0b21GaWVsZHNSZXNwb25zZSB8fCAhY3VzdG9tRmllbGRzUmVzcG9uc2UuZW50aXR5Xykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgYWN0aXZlLCBmaWVsZHMgfSA9IGN1c3RvbUZpZWxkc1Jlc3BvbnNlLmVudGl0eV87XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBmaWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChmaWVsZCkgPT4gZmllbGQuY3VzdG9taXphYmxlICYmIGZpZWxkLmN1c3RvbWl6YXRpb24/LmFjdGl2ZSlcclxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHluYW1pY1R5cGUgPSB0aGlzLmdldER5bmFtaWNUeXBlKGZpZWxkLCBsb2NhbGVPcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gQ3VzdG9tRmllbGRUeXBlLkJsb2IgJiYgdGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlW2R5bmFtaWNUeXBlLm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUJsb2JUb0ZpbGVVcGxvYWQoZHluYW1pY1R5cGUgYXMgQmxvYkZpZWxkQ29uZmlnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB2YWxpZGF0aW9uUmVnZXggfSA9IGZpZWxkLmN1c3RvbWl6YXRpb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhc0lzVHlwZXM6IEN1c3RvbUZpZWxkc1R5cGVBUElbXSA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5Cb29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLk1vbmV5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLkRhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuTG9jYWxEYXRlVGltZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5UaW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvblJlZ2V4ICYmICFhc0lzVHlwZXMuaW5jbHVkZXMoZmllbGRUeXBlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybih2YWxpZGF0aW9uUmVnZXgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRUeXBlID09PSBDdXN0b21GaWVsZFR5cGUuSW50ZWdlciAmJiAhKGR5bmFtaWNUeXBlIGFzIE51bWJlckZpZWxkQ29uZmlnKS5tYXNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eXFwtP1xcZCokLykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHluYW1pY1R5cGUucmVxdWlyZWQ/LigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiBkZWZhdWx0c1tmaWVsZFR5cGVdLmRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZm9ybUdyb3VwLmRpc2FibGVkIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbChkeW5hbWljVHlwZS5uYW1lLCBjb250cm9sKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzLnB1c2goZHluYW1pY1R5cGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5keW5hbWljU3RydWN0dXJlID0gZHluYW1pY1R5cGVUb0R5bmFtaWNTdHJ1Y3R1cmUodGhpcy5maWVsZHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRmllbGRDdXN0b21pemF0aW9uKGZpZWxkcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMucGFyc2VWYWx1ZXNGb3JGaWVsZHModGhpcy52YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGFyc2VWYWx1ZXNGb3JGaWVsZHModmFsdWVzOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZXMgPSB7IC4uLnZhbHVlcyB9O1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gZmllbGQudHlwZTtcclxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGZpZWxkLm5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzPy5bbmFtZV07XHJcblxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogVHJhdGFtZW50byBleGNsdXNpdm8gcGFyYSBjYW1wb3MgYm9vbGVhbiBxdWUgdGVtIG8gc3RhdHVzIEVtcHR5XHJcbiAgICAgICAgICAgICAqIEVzc2EgY29uZGljaW9uYWwgbmVjZXNzaXRhIGVzdGFyIGFudGVzIGRvIGlmICghdmFsdWUpIHJldHVybjtcclxuICAgICAgICAgICAgICogUG9pcyBlbGEgdGVtIHVtIHN0YXR1cyBxdWUgdXNhIG51bGwgbm8gdmFsb3IgZG8gY2FtcG8gcmFkaW8gYm9vbGVhblxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm90VmFsaWQgPSAhaXNTdHJpbmcgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XHJcbiAgICAgICAgICAgICAgICBpZiAobm90VmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBDb25kaWNpb25hbCBwYXJhIGNhbXBvcyBxdWUgcmV0b3JuYW0gc3RyaW5nIGRlIGJvb2xlbiBkbyBiYWNrYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IHZhbHVlID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlKS50b0RhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGVUaW1lJzpcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUpLnRvRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnbG9jYWxEYXRlVGltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlLCAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTUycpLnRvRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndGltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlLCAnSEg6bW06c3MnKS50b0RhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsZ3VtYXMgZXF1aXBlcyBzw7Mgc2V0YW0gdmFsb3Igbm8gZm9ybXVsw6FyaW8sIGFww7NzIG8gY2FycmVnYW1lbnRvIGRhIHRlbGFcclxuICAgICAqIENvbW8gw6kgYmVtIHBhZHLDo28gaXNzbywgZm9pIG5lY2Vzc8OhcmlvIGNyaWFyIGVzc2UgbcOpdG9kbyBwYXJhIGdlcmFyIG8gZmlsZVxyXG4gICAgICogYXDDs3Mgc2V0YXIgbyB2YWxvciBubyBmb3JtdWzDoXJpb1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNyZWF0ZUZpbGVzSWZTZXRGb3JtVmFsdWVzQWZ0ZXJJbml0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNVcGxvYWRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpZWxkc1xyXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLnR5cGUgPT09ICdibG9iJylcclxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvYlRvRmlsZVVwbG9hZChmaWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGFyc2VGaWVsZHNWYWx1ZXMoKSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWVzOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyB0eXBlIH0gPSBmaWVsZDtcclxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGZpZWxkLm5hbWU7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChuYW1lKT8udmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbWFzaywgc2NhbGUgfSA9IGZpZWxkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykgdmFsdWUgPSBuZXcgQmlnTnVtYmVyKHZhbHVlKS50b0ZpeGVkKHNjYWxlIGFzIG51bWJlcikudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZVRpbWUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xvY2FsRGF0ZVRpbWUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RpbWUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbTpzcycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpICYmICh0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnZW51bScpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc011bHRpcGxlID0gKGZpZWxkIGFzIFNlbGVjdEZpZWxkQ29uZmlnKS5tdWx0aXBsZTtcclxuICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IGlzTXVsdGlwbGUgPyBbXSA6IG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5oYXNCbG9iKSB7XHJcbiAgICAgICAgICAgIHBhcnNlZFZhbHVlc1snZmllbGRDdXN0b21pemF0aW9uJ10gPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpPy52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldER5bmFtaWNUeXBlKGZpZWxkOiBGaWVsZEZyb21BUEksIGxvY2FsZU9wdGlvbnM6IExvY2FsZU9wdGlvbnMpOiBEeW5hbWljVHlwZSB7XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnM6IFBhcnRpYWw8RHluYW1pY1R5cGU+ID0ge307XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5CbG9iOlxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0QmxvYlBhcmFtZXRlcnMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5Cb29sZWFuOlxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0Qm9vbGVhblBhcmFtZXRlcnMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdFbnVtZXJhdGlvbic6XHJcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkVudW06XHJcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ0VudW0nO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0U2VsZWN0UGFyYW1ldGVycyhmaWVsZCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuTW9uZXk6XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsZWdhY3lOdW1iZXInLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogMTUsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGU6IDIsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdEFkZG9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsb2NhbGVPcHRpb25zPy5udW1iZXI/LmN1cnJlbmN5U3ltYm9sID8/ICdSJCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuRG91YmxlOlxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGVnYWN5TnVtYmVyJyxcclxuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb246IDE1LFxyXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiAyLFxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsaXplZE51bWJlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuSW50ZWdlcjpcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xlZ2FjeU51bWJlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxNSxcclxuICAgICAgICAgICAgICAgICAgICBzY2FsZTogMCxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuQW55OlxyXG4gICAgICAgICAgICAgICAgZmllbGQudHlwZSA9ICdTdHJpbmcnO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGR5bmFtaWNUeXBlOiBEeW5hbWljVHlwZSAmIHtcclxuICAgICAgICAgICAgY2FsZW5kYXJPcHRpb25zOiBDYWxlbmRhckxvY2FsZU9wdGlvbnM7XHJcbiAgICAgICAgICAgIGN1cnJlbmN5T3B0aW9uczogTnVtYmVyTG9jYWxlT3B0aW9ucztcclxuICAgICAgICB9ID0ge1xyXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzLFxyXG4gICAgICAgICAgICBuYW1lOiBmaWVsZC5pZCxcclxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmN1c3RvbWl6YXRpb24ubGFiZWwsXHJcbiAgICAgICAgICAgIHRvb2x0aXA6IGZpZWxkLmN1c3RvbWl6YXRpb24udG9vbHRpcCxcclxuICAgICAgICAgICAgaW5mb1NpZ246IGZpZWxkLmN1c3RvbWl6YXRpb24uaW5mb1NpZ24sXHJcbiAgICAgICAgICAgIHR5cGU6IGFwaVR5cGVzVG9EeW5hbWljRm9ybVR5cGUoZmllbGQudHlwZSksXHJcbiAgICAgICAgICAgIG1hc2s6IGZpZWxkLmN1c3RvbWl6YXRpb24ubWFzayxcclxuICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IGZpZWxkLmN1c3RvbWl6YXRpb24ubWFuZGF0b3J5ID8/IGZhbHNlLFxyXG4gICAgICAgICAgICBjYWxlbmRhck9wdGlvbnM6IGxvY2FsZU9wdGlvbnMuY2FsZW5kYXIsXHJcbiAgICAgICAgICAgIGN1cnJlbmN5T3B0aW9uczogbG9jYWxlT3B0aW9ucy5udW1iZXIsXHJcbiAgICAgICAgfSBhcyBEeW5hbWljVHlwZSAmIHsgY2FsZW5kYXJPcHRpb25zOiBDYWxlbmRhckxvY2FsZU9wdGlvbnM7IGN1cnJlbmN5T3B0aW9uczogTnVtYmVyTG9jYWxlT3B0aW9ucyB9O1xyXG4gICAgICAgIHJldHVybiBkeW5hbWljVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFNlbGVjdFBhcmFtZXRlcnMoZmllbGQ6IGFueSk6IFBhcnRpYWw8U2VsZWN0RmllbGRDb25maWc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOiAnZW51bScsXHJcbiAgICAgICAgICAgIHNob3dDbGVhcjogdHJ1ZSxcclxuICAgICAgICAgICAgbXVsdGlwbGU6IGZpZWxkLmN1c3RvbWl6YXRpb24uY3VzdG9tRW51bWVyYXRpb24ubXVsdGlwbGUsXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IGZpZWxkLmN1c3RvbWl6YXRpb24uY3VzdG9tRW51bWVyYXRpb24udmFsdWVzLm1hcCgoZTogYW55KSA9PiAoeyBsYWJlbDogZS52YWx1ZSwgdmFsdWU6IGUua2V5IH0pKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Qm9vbGVhblBhcmFtZXRlcnMoKTogUGFydGlhbDxCb29sZWFuRmllbGRDb25maWc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXHJcbiAgICAgICAgICAgIG9wdGlvbnNMYWJlbDoge1xyXG4gICAgICAgICAgICAgICAgdHJ1ZTogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgdHJ1ZV9sYWJlbGApLFxyXG4gICAgICAgICAgICAgICAgZmFsc2U6IHRoaXMuZ2V0VHJhbnNsYXRlTGFiZWwoYGZhbHNlX2xhYmVsYCksXHJcbiAgICAgICAgICAgICAgICBlbXB0eTogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgZW1wdHlfbGFiZWxgKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0QmxvYlBhcmFtZXRlcnMoKTogUGFydGlhbDxFeHBhbmRlZER5bmFtaWNUeXBlPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdHlwZTogJ2Jsb2InLFxyXG4gICAgICAgICAgICBzaXplOiB7XHJcbiAgICAgICAgICAgICAgICBzbTogMTIsXHJcbiAgICAgICAgICAgICAgICBtZDogMTIsXHJcbiAgICAgICAgICAgICAgICBsZzogMTIsXHJcbiAgICAgICAgICAgICAgICB4bDogMTIsXHJcbiAgICAgICAgICAgIH0sIC8vIENvbW8gdmFpIHNlciBmaWxobyBkZSBSb3csIGZheiBzZW50aWRvIGhhYmlsaXRhciBvIHRpcG8gZXhwYW5kaWRvLlxyXG4gICAgICAgICAgICBhY2NlcHQ6ICdpbWFnZS8qLCBhcHBsaWNhdGlvbi8qLCB0ZXh0LyonLFxyXG4gICAgICAgICAgICBjaG9vc2VMYWJlbDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgY2hvb3NlX2xhYmVsYCksXHJcbiAgICAgICAgICAgIHJlbW92ZUxhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGByZW1vdmVfbGFiZWxgKSxcclxuICAgICAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMuZ2V0VHJhbnNsYXRlTGFiZWwoYGNhbmNlbF9sYWJlbGApLFxyXG4gICAgICAgICAgICBzdWNjZXNzVG9vbHRpcDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgc3VjY2Vzc190b29sdGlwYCksXHJcbiAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcclxuICAgICAgICAgICAgb25VcGxvYWRGaWxlOiAoZXZlbnQ6IHsgZmlsZXM6IEZpbGVEdG9bXSB9LCBibG9iRmllbGQ6IEJsb2JGaWVsZENvbmZpZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNVcGxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGUoZXZlbnQsIGJsb2JGaWVsZCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uUmVtb3ZlRmlsZTogKGV2ZW50OiBGaWxlRHRvLCBibG9iRmllbGQ6IEJsb2JGaWVsZENvbmZpZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKHsgZmlsZTogZXZlbnQgfSwgYmxvYkZpZWxkKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25DYW5jZWxVcGxvYWQ6IChldmVudDogbnVtYmVyLCBibG9iRmllbGQ6IEJsb2JGaWVsZENvbmZpZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxVcGxvYWQoZXZlbnQsIGJsb2JGaWVsZCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uRG93bmxvYWRGaWxlOiAoZXZlbnQ6IHsgaW5kZXg6IG51bWJlcjsgYW5jaG9yOiBFbGVtZW50UmVmIH0sIGJsb2JGaWVsZDogQmxvYkZpZWxkQ29uZmlnKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkRmlsZShldmVudCwgYmxvYkZpZWxkKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd0ZpbGVVcGxvYWREYXRlOiB0aGlzLnNob3dGaWxlVXBsb2FkRGF0ZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogw4kgbmVjZXNzw6FyaW8gY3JpYXIgbyBmaWVsZEN1c3RvbWl6YXRpb24gcXVhbmRvIGjDoSB1bSBCbG9iIG5hIGVudGlkYWRlIHBhcmEgZ2VyYXIgb1xyXG4gICAgICogY29tIG9zIGZpZWxkcyBpbnNlcmlkb3MgZSBkZWxldGFkb3MuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3JlYXRlRmllbGRDdXN0b21pemF0aW9uKGZpZWxkczogRmllbGRGcm9tQVBJW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhhc0Jsb2IgPSAhIWZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC50eXBlID09PSBDdXN0b21GaWVsZFR5cGUuQmxvYikubGVuZ3RoO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0Jsb2IpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbChcclxuICAgICAgICAgICAgICAgICdmaWVsZEN1c3RvbWl6YXRpb24nLFxyXG4gICAgICAgICAgICAgICAgbmV3IEZvcm1BcnJheShbXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbjogbmV3IEZvcm1Db250cm9sKHRoaXMuZG9tYWluKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZTogbmV3IEZvcm1Db250cm9sKHRoaXMuc2VydmljZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogbmV3IEZvcm1Db250cm9sKHRoaXMuZW50aXR5KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9EZWxldGU6IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB7fSwgZGlzYWJsZWQ6IGZhbHNlIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b0luc2VydDogbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHt9LCBkaXNhYmxlZDogZmFsc2UgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVCbG9iVG9GaWxlVXBsb2FkKGZpZWxkOiBCbG9iRmllbGRDb25maWcpIHtcclxuICAgICAgICBjb25zdCBfbmFtZSA9IGZpZWxkLm5hbWU7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0SWQgPSB0aGlzLnZhbHVlW19uYW1lXSA/IHRoaXMudmFsdWVbX25hbWVdIDogdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8udmFsdWU7XHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBvYmplY3RJZC5zdWJzdHJpbmcob2JqZWN0SWQubGFzdEluZGV4T2YoJy8nKSArIDEpO1xyXG4gICAgICAgIGNvbnN0IGZpbGU6IFBhcnRpYWw8RmlsZUR0bz4gPSB7IG9iamVjdElkLCBuYW1lOiBmaWxlTmFtZSwgc2F2ZWRGaWxlOiB0cnVlIH07XHJcbiAgICAgICAgZmllbGQuZmlsZXMgPSBbZmlsZSBhcyBGaWxlRHRvXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRvd25sb2FkRmlsZShldmVudDogeyBpbmRleDogbnVtYmVyOyBhbmNob3I6IEVsZW1lbnRSZWYgfSwgZmllbGQ6IEJsb2JGaWVsZENvbmZpZykge1xyXG4gICAgICAgIGNvbnN0IHsgaW5kZXgsIGFuY2hvciB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgX2ZpbGVzID0gZmllbGQuZmlsZXMgfHwgW107XHJcbiAgICAgICAgaWYgKCFfZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZpbGUgPSBfZmlsZXNbaW5kZXhdO1xyXG4gICAgICAgIGlmIChjdXJyZW50RmlsZS5vYmplY3RVUkwpIHtcclxuICAgICAgICAgICAgYW5jaG9yLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBfb2JqZWN0SWQgPSBjdXJyZW50RmlsZS5vYmplY3RJZCBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLnJlcXVlc3RBY2Nlc3MoX29iamVjdElkLCB0aGlzLnJlcXVlc3RBY2Nlc3NFbmRwb2ludClcclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbGVOYW1lLCB1cmkgfSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRGaWxlKHVyaSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoYmxvYjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlTmFtZSkgYXMgRmlsZUR0bztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybCh1cmkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdocmVmJywgdXJpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUub2JqZWN0SWQgPSBjdXJyZW50RmlsZS5vYmplY3RJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUuc2F2ZWRGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9maWxlc1tpbmRleF0gPSBuZXdGaWxlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsZXMgPSBbLi4uX2ZpbGVzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvci5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBsb2FkRmlsZShldmVudDogeyBmaWxlczogRmlsZUR0b1tdIH0sIGZvcm1GaWVsZDogQmxvYkZpZWxkQ29uZmlnKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChyZWNvcmQpID0+IHJlY29yZC5uYW1lID09PSBmb3JtRmllbGQubmFtZSkgYXMgQmxvYkZpZWxkQ29uZmlnO1xyXG4gICAgICAgIGlmICghZmllbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2Ugb2NvcnJlciB1bSB1cGxvYWQsIGrDoSBleGlzdGluZG8gdW0gYXJxdWl2byBjb20gdXBsb2FkIGZlaXRvLiDDiSBuZWNlc3PDoXJpbyBleGNsdWlyIG8gbWVzbW8uXHJcbiAgICAgICAgaWYgKGZpZWxkPy5maWxlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZSh7IGZpbGU6IGZpZWxkLmZpbGVzWzBdIH0sIGZpZWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmllbGQuZmlsZXMgPSBmaWxlcztcclxuICAgICAgICBjb25zdCBfbmFtZSA9IGZpZWxkLm5hbWU7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIWZpbGUuc2F2ZWRGaWxlICYmICFmaWxlLnByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlLmlzVXBsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnNldFZhbGlkYXRvcnMoaXNVcGxvYWRpbmcoZmlsZSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldEZpbGVMb2NhdGlvblVybChcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IHRoaXMuc2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU6IHRoaXMuZW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IF9uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlTG9jYXRpb25FbmRwb2ludCxcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHRoaXMuZGVmYWx0Q2F0Y2hFcnJvcihmaWVsZCwgZXJyLCBpKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsb2NhdGlvbiwgdmVyc2lvbiwgb2JqZWN0SWQgfSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUudmVyc2lvbiA9IHZlcnNpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUub2JqZWN0SWQgPSBvYmplY3RJZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS51cGxvYWRTdWJzY3JpYmUgPSB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC51cGxvYWRUZW1wRmlsZShsb2NhdGlvbiwgZmlsZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodGhpcy5kZWZhbHRDYXRjaEVycm9yKGZpZWxkLCBlcnIsIGkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLmlzVXBsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB0eXBlIH0gPSByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkQ2FuY2VsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUucHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKHJlc3BvbnNlLmxvYWRlZCAvIHJlc3BvbnNlLnRvdGFsKSAqIDEwMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLm9iamVjdFVSTCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7IG9iamVjdElkLCBuYW1lOiBmaWxlLm5hbWUsIHZlcnNpb246IGZpbGUudmVyc2lvbiB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9JbnNlcnQgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpPy52YWx1ZVswXS50b0luc2VydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkQ3VzdG9taXphdGlvbiA9IHRoaXMuZm9ybUdyb3VwLmdldCgnZmllbGRDdXN0b21pemF0aW9uJyk/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkQ3VzdG9taXphdGlvbj8udmFsdWU/LlswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkQ3VzdG9taXphdGlvbi52YWx1ZVswXS50b0luc2VydCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udG9JbnNlcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfbmFtZV06IHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy5zZXRWYWx1ZShgJHtmaWxlLm9iamVjdElkfS8ke2ZpbGUubmFtZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsZXMgPSBbZmlsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXBsb2FkQ2FuY2VsZWQgJiYgdHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZENhbmNlbGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmZpbGVzID0gW2ZpbGVdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtb3ZlRmlsZShldmVudDogeyBmaWxlOiBGaWxlRHRvIH0sIGJsb2JGaWVsZDogQmxvYkZpZWxkQ29uZmlnKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyBmaWxlIH0gPSBldmVudDtcclxuXHJcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChyZWNvcmQpID0+IHJlY29yZC5uYW1lID09PSBibG9iRmllbGQubmFtZSkgYXMgQmxvYkZpZWxkQ29uZmlnO1xyXG5cclxuICAgICAgICBmaWVsZCEuZmlsZXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGUub2JqZWN0SWQpIHtcclxuICAgICAgICAgICAgLy8gUXVhbmRvIMOpIHVtIGFycXVpdm8gasOhIHNhbHZvIG8gb2JqZWN0SWQgasOhIMOpIG5vIGZvcm1hdG8gXCJvYmplY3RJZC9uYW1lXCJcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWxlLnNhdmVkRmlsZSA/IGAke2ZpbGUub2JqZWN0SWR9YCA6IGAke2ZpbGUub2JqZWN0SWR9LyR7ZmlsZS5uYW1lfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvRGVsZXRlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWVsZEN1c3RvbWl6YXRpb24nKSEudmFsdWVbMF0udG9EZWxldGU7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpIS52YWx1ZVswXS50b0luc2VydFtmaWVsZCEubmFtZV07XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldCgnZmllbGRDdXN0b21pemF0aW9uJykhLnZhbHVlWzBdLnRvRGVsZXRlID0ge1xyXG4gICAgICAgICAgICAgICAgLi4udG9EZWxldGUsXHJcbiAgICAgICAgICAgICAgICBbZmllbGQhLm5hbWVdOiBbLi4uKHRvRGVsZXRlW2ZpZWxkIS5uYW1lXSB8fCBbXSksIHZhbHVlXSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZCEubmFtZSkhLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZCEubmFtZSkhLnNldFZhbHVlKCcnKTtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQhLm5hbWUpIS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYW5jZWxVcGxvYWQoaW5kZXg6IG51bWJlciwgZm9ybUZpZWxkOiBCbG9iRmllbGRDb25maWcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVwbG9hZENhbmNlbGVkID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkLm5hbWUgPT09IGZvcm1GaWVsZC5uYW1lKSBhcyBCbG9iRmllbGRDb25maWc7XHJcbiAgICAgICAgaWYgKCFmaWVsZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IF9uYW1lID0gZmllbGQubmFtZTtcclxuICAgICAgICBjb25zdCBfZmlsZXMgPSBmaWVsZC5maWxlcyB8fCBbXTtcclxuICAgICAgICBfZmlsZXNbaW5kZXhdPy51cGxvYWRTdWJzY3JpYmU/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgZmllbGQuZmlsZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBmaWVsZEN1c3RvbWl6YXRpb24gPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpPy52YWx1ZVswXTtcclxuICAgICAgICBkZWxldGUgZmllbGRDdXN0b21pemF0aW9uLnRvSW5zZXJ0W19uYW1lXTtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVmYWx0Q2F0Y2hFcnJvcihmaWVsZDogQmxvYkZpZWxkQ29uZmlnLCBlcnI6IEh0dHBFcnJvclJlc3BvbnNlLCBpbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xyXG4gICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IGZpZWxkO1xyXG4gICAgICAgIGlmIChmaWxlcykge1xyXG4gICAgICAgICAgICBmaWxlc1tpbmRleF0uZXJyb3IgPSBlcnI7XHJcbiAgICAgICAgICAgIGZpbGVzW2luZGV4XS5pc1VwbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmaWVsZC5maWxlcyA9IFsuLi5maWxlc107XHJcbiAgICAgICAgICAgIGNvbnN0IF9uYW1lID0gZmllbGQubmFtZTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8uc2V0VmFsaWRhdG9ycyhbZXJyb3JPblVwbG9hZChmaWxlc1tpbmRleF0pXSk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdlcnJvciBpbiB1cGxvYWQgZmlsZS4gRGV0YWlsczogJyArIGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdlcnJvciBpbiB1cGxvYWQgZmlsZS4gRGV0YWlsczogJyArIGVyci5tZXNzYWdlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VHJhbnNsYXRlTGFiZWwobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGAke3RoaXMuZG9tYWlufS4ke3RoaXMuc2VydmljZX0uJHtsYWJlbH1gKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZERpc3BsYXlUaW1lSW5mb1NpZ25Ub0ZpZWxkcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBmaWVsZC5kaXNwbGF5VGltZUluZm9TaWduID0gdGhpcy5kaXNwbGF5VGltZUluZm9TaWduO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1VwbG9hZGluZyhmaWxlOiBGaWxlRHRvKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuICgpID0+IChmaWxlLmlzVXBsb2FkaW5nID8geyBpc1VwbG9hZGluZzogdHJ1ZSB9IDogbnVsbCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVycm9yT25VcGxvYWQoZmlsZTogRmlsZUR0byk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoKSA9PiAoZmlsZS5lcnJvciA/IHsgdXBsb2FkRXJyb3I6IHRydWUgfSA6IG51bGwpO1xyXG59XHJcbiIsIkBsZXQgZXJyb3JNZXNzYWdlcyA9XG4gICAge1xuICAgICAgICBwYXR0ZXJuOiBpbnZhbGlkRXJyb3JMYWJlbCxcbiAgICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkRXJyb3JNZXNzYWdlLFxuICAgIH07XG5cbjxzLWR5bmFtaWMtZm9ybVxuICAgIFtjb25maWdzXT1cImR5bmFtaWNTdHJ1Y3R1cmVcIlxuICAgIFtmb3JtXT1cImZvcm1Hcm91cFwiXG4gICAgW2Vycm9yTWVzc2FnZXNdPVwiZXJyb3JNZXNzYWdlc1wiXG4+XG48L3MtZHluYW1pYy1mb3JtPlxuXG4iXX0=
711
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvY3VzdG9tLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFFSCxTQUFTLEVBRVQsS0FBSyxFQUtMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBRWhCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGFBQWEsRUFDYixpQkFBaUIsRUFHakIsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBbUIsUUFBUSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFNSCw2QkFBNkIsR0FJaEMsTUFBTSxpREFBaUQsQ0FBQztBQUV6RCxPQUFPLEVBR0gsYUFBYSxHQUVoQixNQUFNLDJDQUEyQyxDQUFDO0FBQ25ELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsbUJBQW1CLEVB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c0JBRFosS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBS2xCLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFLQyxZQUFZO3NCQURsQixLQUFLO2dCQUtDLG9CQUFvQjtzQkFEMUIsS0FBSztnQkFLQyxvQkFBb0I7c0JBRDFCLEtBQUs7Z0JBS0MscUJBQXFCO3NCQUQzQixLQUFLO2dCQUtDLG9CQUFvQjtzQkFEMUIsS0FBSztnQkFLQyxtQkFBbUI7c0JBRHpCLEtBQUs7Z0JBS0Msa0JBQWtCO3NCQUR4QixLQUFLO2dCQUtDLE1BQU07c0JBRFosS0FBSztnQkFLQyxhQUFhO3NCQURuQixLQUFLOztBQXNxQlYsU0FBUyxXQUFXLENBQUMsSUFBYTtJQUM5QixPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxJQUFhO0lBQ2hDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBpbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBDb250cm9sQ29udGFpbmVyLFxyXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXHJcbiAgICBGb3JtQXJyYXksXHJcbiAgICBGb3JtQ29udHJvbCxcclxuICAgIEZvcm1Hcm91cCxcclxuICAgIE5HX1ZBTElEQVRPUlMsXHJcbiAgICBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgIFZhbGlkYXRvcixcclxuICAgIFZhbGlkYXRvckZuLFxyXG4gICAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEJpZ251bWJlckZpZWxkQ29uZmlnLFxyXG4gICAgQmxvYkZpZWxkQ29uZmlnLFxyXG4gICAgQm9vbGVhbkZpZWxkQ29uZmlnLFxyXG4gICAgRHluYW1pY1N0cnVjdHVyZSxcclxuICAgIER5bmFtaWNUeXBlLFxyXG4gICAgZHluYW1pY1R5cGVUb0R5bmFtaWNTdHJ1Y3R1cmUsXHJcbiAgICBFeHBhbmRlZER5bmFtaWNUeXBlLFxyXG4gICAgU2VsZWN0RmllbGRDb25maWcsXHJcbiAgICBTdHJ1Y3R1cmVUeXBlLFxyXG59IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvZHluYW1pYy1mb3JtJztcclxuaW1wb3J0IHsgRmlsZUR0byB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvZmlsZS11cGxvYWQnO1xyXG5pbXBvcnQge1xyXG4gICAgQ2FsZW5kYXJMb2NhbGVPcHRpb25zLFxyXG4gICAgTG9jYWxlT3B0aW9ucyxcclxuICAgIExvY2FsZVNlcnZpY2UsXHJcbiAgICBOdW1iZXJMb2NhbGVPcHRpb25zLFxyXG59IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvbG9jYWxlJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21GaWVsZHNTZXJ2aWNlIH0gZnJvbSAnLi9jdXN0b20tZmllbGRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gICAgYXBpVHlwZXNUb0R5bmFtaWNGb3JtVHlwZSxcclxuICAgIEN1c3RvbUZpZWxkc1Jlc3BvbnNlLFxyXG4gICAgQ3VzdG9tRmllbGRzVHlwZUFQSSxcclxuICAgIEN1c3RvbUZpZWxkVHlwZSxcclxuICAgIEZpZWxkRnJvbUFQSSxcclxuICAgIGlzTnVtZXJpY0ZpZWxkVHlwZSxcclxuICAgIHBhcnNlTnVtZXJpY1ZhbHVlRnJvbUFwaSxcclxuICAgIHBhcnNlTnVtZXJpY1ZhbHVlVG9BcGksXHJcbn0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBEeW5hbWljRm9ybUNvbXBvbmVudCBhcyBEeW5hbWljRm9ybUNvbXBvbmVudF8xIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9keW5hbWljLWZvcm0nO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIHF1ZSBjYXJyZWdhIGUgcmVuZGVyaXphIGNhbXBvcyBjdXN0b21pemFkb3MgZGluYW1pY2FtZW50ZVxyXG4gKiBhIHBhcnRpciBkYSBBUEkgZGUgY3VzdG9taXphw6fDo28gZGUgY2FtcG9zIGRvIFNlbmlvci4gUmVhbGl6YSBjaGFtYWRhcyBIVFRQIHBhcmFcclxuICogb2J0ZXIgYSBjb25maWd1cmHDp8OjbyBkb3MgY2FtcG9zLCBnZXJhIG8gZm9ybXVsw6FyaW8gcmVhdGl2YW1lbnRlIHZpYSB7QGxpbmsgRHluYW1pY0Zvcm1Db21wb25lbnR9XHJcbiAqIGUgaW1wbGVtZW50YSB7QGxpbmsgQ29udHJvbFZhbHVlQWNjZXNzb3J9IGUge0BsaW5rIFZhbGlkYXRvcn0gcGFyYSBpbnRlZ3Jhw6fDo28gY29tcGxldGFcclxuICogY29tIGZvcm11bMOhcmlvcyBBbmd1bGFyLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxzLWN1c3RvbS1maWVsZHNcclxuICogICBmb3JtQ29udHJvbE5hbWU9XCJjYW1wb3NDdXN0b21pemFkb3NcIlxyXG4gKiAgIGRvbWFpbj1cInBsYXRhZm9ybWFcIlxyXG4gKiAgIHNlcnZpY2U9XCJzZXJ2aWNvXCJcclxuICogICBlbnRpdHk9XCJlbnRpZGFkZVwiIC8+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1jdXN0b20tZmllbGRzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tZmllbGRzLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBDdXN0b21GaWVsZHNDb21wb25lbnQsXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ3VzdG9tRmllbGRzQ29tcG9uZW50LFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbRHluYW1pY0Zvcm1Db21wb25lbnRfMV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21GaWVsZHNDb21wb25lbnRcclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdFxyXG57XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbUZpZWxkc1NlcnZpY2UgPSBpbmplY3QoQ3VzdG9tRmllbGRzU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2UgPSBpbmplY3QoTG9jYWxlU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250cm9sQ29udGFpbmVyID0gaW5qZWN0KENvbnRyb2xDb250YWluZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBEb23DrW5pbyB1dGlsaXphZG8gcGFyYSBidXNjYXIgb3MgY2FtcG9zIGN1c3RvbWl6YWRvcyBuYSBBUEkuIENhbXBvIG9icmlnYXTDs3Jpby4gKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBwdWJsaWMgZG9tYWluITogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gTm9tZSBkbyBzZXJ2acOnbyB1dGlsaXphZG8gcGFyYSBpZGVudGlmaWNhciBvcyBjYW1wb3MgY3VzdG9taXphZG9zLiBDYW1wbyBvYnJpZ2F0w7NyaW8uICovXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgcHVibGljIHNlcnZpY2UhOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBOb21lIGRhIGVudGlkYWRlIHBhcmEgYSBxdWFsIG9zIGNhbXBvcyBjdXN0b21pemFkb3Mgc8OjbyBjYXJyZWdhZG9zLiBDYW1wbyBvYnJpZ2F0w7NyaW8uICovXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gICAgcHVibGljIGVudGl0eSE6IHN0cmluZztcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIE1lbnNhZ2VtIGRlIGVycm8gZXhpYmlkYSBxdWFuZG8gYWxndW0gY2FtcG8gY3VzdG9taXphZG8gZXN0w6EgaW52w6FsaWRvLiBAZGVmYXVsdCAnJyAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpbnZhbGlkRXJyb3JMYWJlbCA9ICcnO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gT2JqZXRvIGNvbSBkYWRvcyBwcsOpLWNhcnJlZ2Fkb3MgZGEgZW50aWRhZGUsIGV2aXRhbmRvIGNoYW1hZGFzIGV4dHJhcyDDoCBBUEkuICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGVudGl0eU9iamVjdD86IEN1c3RvbUZpZWxkc1Jlc3BvbnNlO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW5kcG9pbnQgcGFyYSBidXNjYXIgYSBjb25maWd1cmHDp8OjbyBkb3MgY2FtcG9zIGN1c3RvbWl6YWRvcy4gKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY3VzdG9tRmllbGRzRW5kcG9pbnQgPSAncGxhdGZvcm0vZmllbGRfY3VzdG9taXphdGlvbi9xdWVyaWVzL2dldEVudGl0eSc7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbmRwb2ludCBwYXJhIHNvbGljaXRhciBvIHVwbG9hZCBkZSBhcnF1aXZvcyBlbSBjYW1wb3MgZG8gdGlwbyBibG9iLiAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmaWxlTG9jYXRpb25FbmRwb2ludCA9ICdwbGF0Zm9ybS9maWVsZF9jdXN0b21pemF0aW9uL2FjdGlvbnMvcmVxdWVzdFVwbG9hZCc7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbmRwb2ludCBwYXJhIHNvbGljaXRhciBhY2Vzc28gYSBhcnF1aXZvcyBqw6EgZW52aWFkb3MuICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlcXVlc3RBY2Nlc3NFbmRwb2ludCA9ICdwbGF0Zm9ybS9maWVsZF9jdXN0b21pemF0aW9uL2FjdGlvbnMvcmVxdWVzdEFjY2Vzcyc7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBNZW5zYWdlbSBkZSBlcnJvIGV4aWJpZGEgcXVhbmRvIHVtIGNhbXBvIG9icmlnYXTDs3JpbyBuw6NvIGVzdMOhIHByZWVuY2hpZG8uIEBkZWZhdWx0ICcnICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlcXVpcmVkRXJyb3JNZXNzYWdlID0gJyc7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBUZW1wbyBlbSBtcyBhcMOzcyBvIHF1YWwgbyBpbmZvLXNpZ24gZGUgY2FtcG9zIGRvIHRpcG8gZGF0YSDDqSBleGliaWRvLiBAZGVmYXVsdCAwICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc3BsYXlUaW1lSW5mb1NpZ24gPSAwO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRXhpYmUgYSBkYXRhIGRlIHVwbG9hZCBub3MgY2FtcG9zIGRvIHRpcG8gYXJxdWl2by4gQGRlZmF1bHQgZmFsc2UgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2hvd0ZpbGVVcGxvYWREYXRlID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBPYnNlcnZhYmxlIHF1ZSBzaW5hbGl6YSBxdWFuZG8gbyBjb21wb25lbnRlIGRldmUgaW5pY2lhciBvIGNhcnJlZ2FtZW50byBkb3MgY2FtcG9zLiBAZGVmYXVsdCBudWxsICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHJlYWR5JDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBRdWFuZG8gYHRydWVgLCB0b2RvcyBvcyBjYW1wb3MgY3VzdG9taXphZG9zIHPDo28gZGVzYWJpbGl0YWRvcy4gKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGlzYWJsZUZpZWxkczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgcm93VHlwZTogU3RydWN0dXJlVHlwZSA9ICdyb3cnO1xyXG5cclxuICAgIHB1YmxpYyBmaWVsZHM6IER5bmFtaWNUeXBlW10gPSBbXTtcclxuICAgIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgIHByb3RlY3RlZCBkeW5hbWljU3RydWN0dXJlOiBEeW5hbWljU3RydWN0dXJlW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWR5ID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG9uQ2hhbmdlOiBhbnk7XHJcbiAgICBwcml2YXRlIG9uVG91Y2hlZDogYW55O1xyXG4gICAgcHJpdmF0ZSB2YWx1ZTogYW55O1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1VzdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgcHJpdmF0ZSB1cGxvYWRDYW5jZWxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICAgIHByaXZhdGUgaGFzQmxvYjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICAgIHByaXZhdGUgaGFzVXBsb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbnZhbGlkRXJyb3JMYWJlbCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuaW52YWxpZF92YWx1ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgaGFzQ3VzdG9tRmllbGRzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuZmllbGRzPy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwYXJlbnRGb3JtKCk6IEZvcm1Hcm91cCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbENvbnRhaW5lciEuY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwYXJlbnRDb250cm9sKCk6IEZvcm1Db250cm9sIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRGb3JtLmdldCgnY3VzdG9tJykgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXRzKCk7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuYWRkRGlzcGxheVRpbWVJbmZvU2lnblRvRmllbGRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVuYWJsZU9yRGlzYWJsZUZpZWxkcyghIXRoaXMuZGlzYWJsZUZpZWxkcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkNoYW5nZT8uKHRoaXMucGFyc2VGaWVsZHNWYWx1ZXMoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgX2Rpc2FibGVGaWVsZHMgPSBjaGFuZ2VzWydkaXNhYmxlRmllbGRzJ107XHJcbiAgICAgICAgaWYgKF9kaXNhYmxlRmllbGRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlT3JEaXNhYmxlRmllbGRzKF9kaXNhYmxlRmllbGRzLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLm5nVXN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5uZ1VzdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogRnVuY3Rpb24pIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBGdW5jdGlvbikge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWR5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5wYXJzZVZhbHVlc0ZvckZpZWxkcyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsZXNJZlNldEZvcm1WYWx1ZXNBZnRlckluaXQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlIHx8IHt9KTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEN1c3RvbUZpZWxkcygpOiBPYnNlcnZhYmxlPEN1c3RvbUZpZWxkc1Jlc3BvbnNlPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5T2JqZWN0Py5lbnRpdHlfKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmVudGl0eU9iamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2UuZ2V0Q3VzdG9tRmllbGRzKFxyXG4gICAgICAgICAgICB0aGlzLmRvbWFpbixcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLFxyXG4gICAgICAgICAgICB0aGlzLmVudGl0eSxcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNFbmRwb2ludCxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBlcnJvcnM6IGFueSA9IHt9O1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IGVycm9yczogY29udHJvbEVycm9ycyB9ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkKSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sRXJyb3JzKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvcnNbZmllbGRdID0gY29udHJvbEVycm9ycztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBlcnJvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFuRmllbGRzKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnJlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBlbmFibGVPckRpc2FibGVGaWVsZHMoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGRpc2FibGVkID8gdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKT8uZGlzYWJsZSgpIDogdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKT8uZW5hYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ZhbGlkYXRlSW5wdXRzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5kb21haW4pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjdXN0b20tZmllbGRzIGRvbWFpbiEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjdXN0b20tZmllbGRzIHNlcnZpY2UhJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5lbnRpdHkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjdXN0b20tZmllbGRzIGVudGl0eSEnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlRm9ybSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzID0gW3RoaXMuZ2V0Q3VzdG9tRmllbGRzKCksIHRoaXMubG9jYWxlU2VydmljZS5nZXQoKV07XHJcbiAgICAgICAgZm9ya0pvaW4ob2JzZXJ2YWJsZXMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbD8ubWFya0FzUHJpc3RpbmUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHkkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZHkkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtjdXN0b21GaWVsZHNSZXNwb25zZSwgbG9jYWxlT3B0aW9uc10gPSByZXNwb25zZSBhcyBbQ3VzdG9tRmllbGRzUmVzcG9uc2UsIExvY2FsZU9wdGlvbnNdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdHM6IHsgW2tleSBpbiBzdHJpbmddOiB7IGRlZmF1bHRWYWx1ZT86IGJvb2xlYW47IGRlZmF1bHRNYXNrPzogc3RyaW5nIH0gfSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLlN0cmluZ10gPSB7fTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5Cb29sZWFuXSA9IHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkludGVnZXJdID0ge307XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuRG91YmxlXSA9IHsgZGVmYXVsdE1hc2s6ICcnIH07XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuTW9uZXldID0ge307XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuRGF0ZV0gPSB7fTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5EYXRlVGltZV0gPSB7fTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5Mb2NhbERhdGVUaW1lXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLlRpbWVdID0ge307XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQmxvYl0gPSB7fTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5FbnVtXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkJpbmFyeV0gPSB7fTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5BbnldID0ge307XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFjdXN0b21GaWVsZHNSZXNwb25zZSB8fCAhY3VzdG9tRmllbGRzUmVzcG9uc2UuZW50aXR5Xykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgYWN0aXZlLCBmaWVsZHMgfSA9IGN1c3RvbUZpZWxkc1Jlc3BvbnNlLmVudGl0eV87XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBmaWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChmaWVsZCkgPT4gZmllbGQuY3VzdG9taXphYmxlICYmIGZpZWxkLmN1c3RvbWl6YXRpb24/LmFjdGl2ZSlcclxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHluYW1pY1R5cGUgPSB0aGlzLmdldER5bmFtaWNUeXBlKGZpZWxkLCBsb2NhbGVPcHRpb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gQ3VzdG9tRmllbGRUeXBlLkJsb2IgJiYgdGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlW2R5bmFtaWNUeXBlLm5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUJsb2JUb0ZpbGVVcGxvYWQoZHluYW1pY1R5cGUgYXMgQmxvYkZpZWxkQ29uZmlnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB2YWxpZGF0aW9uUmVnZXggfSA9IGZpZWxkLmN1c3RvbWl6YXRpb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhc0lzVHlwZXM6IEN1c3RvbUZpZWxkc1R5cGVBUElbXSA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5Cb29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLk1vbmV5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLkRhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuRGF0ZVRpbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuTG9jYWxEYXRlVGltZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5UaW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvblJlZ2V4ICYmICFhc0lzVHlwZXMuaW5jbHVkZXMoZmllbGRUeXBlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybih2YWxpZGF0aW9uUmVnZXgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRUeXBlID09PSBDdXN0b21GaWVsZFR5cGUuSW50ZWdlciAmJiAhKGR5bmFtaWNUeXBlIGFzIEJpZ251bWJlckZpZWxkQ29uZmlnKS5tYXNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eXFwtP1xcZCokLykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHluYW1pY1R5cGUucmVxdWlyZWQ/LigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiBkZWZhdWx0c1tmaWVsZFR5cGVdLmRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZm9ybUdyb3VwLmRpc2FibGVkIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbChkeW5hbWljVHlwZS5uYW1lLCBjb250cm9sKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzLnB1c2goZHluYW1pY1R5cGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5keW5hbWljU3RydWN0dXJlID0gZHluYW1pY1R5cGVUb0R5bmFtaWNTdHJ1Y3R1cmUodGhpcy5maWVsZHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRmllbGRDdXN0b21pemF0aW9uKGZpZWxkcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMucGFyc2VWYWx1ZXNGb3JGaWVsZHModGhpcy52YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGFyc2VWYWx1ZXNGb3JGaWVsZHModmFsdWVzOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZXMgPSB7IC4uLnZhbHVlcyB9O1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gZmllbGQudHlwZTtcclxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGZpZWxkLm5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzPy5bbmFtZV07XHJcblxyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogVHJhdGFtZW50byBleGNsdXNpdm8gcGFyYSBjYW1wb3MgYm9vbGVhbiBxdWUgdGVtIG8gc3RhdHVzIEVtcHR5XHJcbiAgICAgICAgICAgICAqIEVzc2EgY29uZGljaW9uYWwgbmVjZXNzaXRhIGVzdGFyIGFudGVzIGRvIGlmICghdmFsdWUpIHJldHVybjtcclxuICAgICAgICAgICAgICogUG9pcyBlbGEgdGVtIHVtIHN0YXR1cyBxdWUgdXNhIG51bGwgbm8gdmFsb3IgZG8gY2FtcG8gcmFkaW8gYm9vbGVhblxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm90VmFsaWQgPSAhaXNTdHJpbmcgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XHJcbiAgICAgICAgICAgICAgICBpZiAobm90VmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBDb25kaWNpb25hbCBwYXJhIGNhbXBvcyBxdWUgcmV0b3JuYW0gc3RyaW5nIGRlIGJvb2xlbiBkbyBiYWNrYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IHZhbHVlID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNOdW1lcmljRmllbGRUeXBlKHR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBwYXJzZU51bWVyaWNWYWx1ZUZyb21BcGkodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlKS50b0RhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGVUaW1lJzpcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUpLnRvRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnbG9jYWxEYXRlVGltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlLCAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTUycpLnRvRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAndGltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlLCAnSEg6bW06c3MnKS50b0RhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFsZ3VtYXMgZXF1aXBlcyBzw7Mgc2V0YW0gdmFsb3Igbm8gZm9ybXVsw6FyaW8sIGFww7NzIG8gY2FycmVnYW1lbnRvIGRhIHRlbGFcclxuICAgICAqIENvbW8gw6kgYmVtIHBhZHLDo28gaXNzbywgZm9pIG5lY2Vzc8OhcmlvIGNyaWFyIGVzc2UgbcOpdG9kbyBwYXJhIGdlcmFyIG8gZmlsZVxyXG4gICAgICogYXDDs3Mgc2V0YXIgbyB2YWxvciBubyBmb3JtdWzDoXJpb1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNyZWF0ZUZpbGVzSWZTZXRGb3JtVmFsdWVzQWZ0ZXJJbml0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNVcGxvYWRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpZWxkc1xyXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLnR5cGUgPT09ICdibG9iJylcclxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvYlRvRmlsZVVwbG9hZChmaWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGFyc2VGaWVsZHNWYWx1ZXMoKSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWVzOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyB0eXBlIH0gPSBmaWVsZDtcclxuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGZpZWxkLm5hbWU7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChuYW1lKT8udmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNOdW1lcmljRmllbGRUeXBlKHR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBwYXJzZU51bWVyaWNWYWx1ZVRvQXBpKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlVGltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbG9jYWxEYXRlVGltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1MnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ0hIOm1tOnNzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICgodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgJiYgdHlwZSA9PT0gJ2VudW0nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc011bHRpcGxlID0gKGZpZWxkIGFzIFNlbGVjdEZpZWxkQ29uZmlnKS5tdWx0aXBsZTtcclxuICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IGlzTXVsdGlwbGUgPyBbXSA6IG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5oYXNCbG9iKSB7XHJcbiAgICAgICAgICAgIHBhcnNlZFZhbHVlc1snZmllbGRDdXN0b21pemF0aW9uJ10gPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpPy52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldER5bmFtaWNUeXBlKGZpZWxkOiBGaWVsZEZyb21BUEksIGxvY2FsZU9wdGlvbnM6IExvY2FsZU9wdGlvbnMpOiBEeW5hbWljVHlwZSB7XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnM6IFBhcnRpYWw8RHluYW1pY1R5cGU+ID0ge307XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5CbG9iOlxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0QmxvYlBhcmFtZXRlcnMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5Cb29sZWFuOlxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0Qm9vbGVhblBhcmFtZXRlcnMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdFbnVtZXJhdGlvbic6XHJcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkVudW06XHJcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ0VudW0nO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0U2VsZWN0UGFyYW1ldGVycyhmaWVsZCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuTW9uZXk6XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdtb25leScsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxNSxcclxuICAgICAgICAgICAgICAgICAgICBzY2FsZTogMixcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd05lZ2F0aXZlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRBZGRvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbG9jYWxlT3B0aW9ucz8ubnVtYmVyPy5jdXJyZW5jeVN5bWJvbCA/PyAnUiQnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkRvdWJsZTpcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2RvdWJsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxNSxcclxuICAgICAgICAgICAgICAgICAgICBzY2FsZTogMixcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd05lZ2F0aXZlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5JbnRlZ2VyOlxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaW50ZWdlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxNSxcclxuICAgICAgICAgICAgICAgICAgICBzY2FsZTogMCxcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd05lZ2F0aXZlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5Bbnk6XHJcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ1N0cmluZyc7XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZHluYW1pY1R5cGU6IER5bmFtaWNUeXBlICYge1xyXG4gICAgICAgICAgICBjYWxlbmRhck9wdGlvbnM6IENhbGVuZGFyTG9jYWxlT3B0aW9ucztcclxuICAgICAgICAgICAgY3VycmVuY3lPcHRpb25zOiBOdW1iZXJMb2NhbGVPcHRpb25zO1xyXG4gICAgICAgIH0gPSB7XHJcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIG5hbWU6IGZpZWxkLmlkLFxyXG4gICAgICAgICAgICBsYWJlbDogZmllbGQuY3VzdG9taXphdGlvbi5sYWJlbCxcclxuICAgICAgICAgICAgdG9vbHRpcDogZmllbGQuY3VzdG9taXphdGlvbi50b29sdGlwLFxyXG4gICAgICAgICAgICBpbmZvU2lnbjogZmllbGQuY3VzdG9taXphdGlvbi5pbmZvU2lnbixcclxuICAgICAgICAgICAgdHlwZTogYXBpVHlwZXNUb0R5bmFtaWNGb3JtVHlwZShmaWVsZC50eXBlKSxcclxuICAgICAgICAgICAgbWFzazogZmllbGQuY3VzdG9taXphdGlvbi5tYXNrLFxyXG4gICAgICAgICAgICByZXF1aXJlZDogKCkgPT4gZmllbGQuY3VzdG9taXphdGlvbi5tYW5kYXRvcnkgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgIGNhbGVuZGFyT3B0aW9uczogbG9jYWxlT3B0aW9ucy5jYWxlbmRhcixcclxuICAgICAgICAgICAgY3VycmVuY3lPcHRpb25zOiBsb2NhbGVPcHRpb25zLm51bWJlcixcclxuICAgICAgICB9IGFzIER5bmFtaWNUeXBlICYgeyBjYWxlbmRhck9wdGlvbnM6IENhbGVuZGFyTG9jYWxlT3B0aW9uczsgY3VycmVuY3lPcHRpb25zOiBOdW1iZXJMb2NhbGVPcHRpb25zIH07XHJcbiAgICAgICAgcmV0dXJuIGR5bmFtaWNUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U2VsZWN0UGFyYW1ldGVycyhmaWVsZDogYW55KTogUGFydGlhbDxTZWxlY3RGaWVsZENvbmZpZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdlbnVtJyxcclxuICAgICAgICAgICAgc2hvd0NsZWFyOiB0cnVlLFxyXG4gICAgICAgICAgICBtdWx0aXBsZTogZmllbGQuY3VzdG9taXphdGlvbi5jdXN0b21FbnVtZXJhdGlvbi5tdWx0aXBsZSxcclxuICAgICAgICAgICAgb3B0aW9uczogZmllbGQuY3VzdG9taXphdGlvbi5jdXN0b21FbnVtZXJhdGlvbi52YWx1ZXMubWFwKChlOiBhbnkpID0+ICh7IGxhYmVsOiBlLnZhbHVlLCB2YWx1ZTogZS5rZXkgfSkpLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRCb29sZWFuUGFyYW1ldGVycygpOiBQYXJ0aWFsPEJvb2xlYW5GaWVsZENvbmZpZz4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcclxuICAgICAgICAgICAgb3B0aW9uc0xhYmVsOiB7XHJcbiAgICAgICAgICAgICAgICB0cnVlOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGB0cnVlX2xhYmVsYCksXHJcbiAgICAgICAgICAgICAgICBmYWxzZTogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgZmFsc2VfbGFiZWxgKSxcclxuICAgICAgICAgICAgICAgIGVtcHR5OiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBlbXB0eV9sYWJlbGApLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRCbG9iUGFyYW1ldGVycygpOiBQYXJ0aWFsPEV4cGFuZGVkRHluYW1pY1R5cGU+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOiAnYmxvYicsXHJcbiAgICAgICAgICAgIHNpemU6IHtcclxuICAgICAgICAgICAgICAgIHNtOiAxMixcclxuICAgICAgICAgICAgICAgIG1kOiAxMixcclxuICAgICAgICAgICAgICAgIGxnOiAxMixcclxuICAgICAgICAgICAgICAgIHhsOiAxMixcclxuICAgICAgICAgICAgfSwgLy8gQ29tbyB2YWkgc2VyIGZpbGhvIGRlIFJvdywgZmF6IHNlbnRpZG8gaGFiaWxpdGFyIG8gdGlwbyBleHBhbmRpZG8uXHJcbiAgICAgICAgICAgIGFjY2VwdDogJ2ltYWdlLyosIGFwcGxpY2F0aW9uLyosIHRleHQvKicsXHJcbiAgICAgICAgICAgIGNob29zZUxhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBjaG9vc2VfbGFiZWxgKSxcclxuICAgICAgICAgICAgcmVtb3ZlTGFiZWw6IHRoaXMuZ2V0VHJhbnNsYXRlTGFiZWwoYHJlbW92ZV9sYWJlbGApLFxyXG4gICAgICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgY2FuY2VsX2xhYmVsYCksXHJcbiAgICAgICAgICAgIHN1Y2Nlc3NUb29sdGlwOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBzdWNjZXNzX3Rvb2x0aXBgKSxcclxuICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBvblVwbG9hZEZpbGU6IChldmVudDogeyBmaWxlczogRmlsZUR0b1tdIH0sIGJsb2JGaWVsZDogQmxvYkZpZWxkQ29uZmlnKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1VwbG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZShldmVudCwgYmxvYkZpZWxkKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25SZW1vdmVGaWxlOiAoZXZlbnQ6IEZpbGVEdG8sIGJsb2JGaWVsZDogQmxvYkZpZWxkQ29uZmlnKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUoeyBmaWxlOiBldmVudCB9LCBibG9iRmllbGQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkNhbmNlbFVwbG9hZDogKGV2ZW50OiBudW1iZXIsIGJsb2JGaWVsZDogQmxvYkZpZWxkQ29uZmlnKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbFVwbG9hZChldmVudCwgYmxvYkZpZWxkKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25Eb3dubG9hZEZpbGU6IChldmVudDogeyBpbmRleDogbnVtYmVyOyBhbmNob3I6IEVsZW1lbnRSZWYgfSwgYmxvYkZpZWxkOiBCbG9iRmllbGRDb25maWcpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRGaWxlKGV2ZW50LCBibG9iRmllbGQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93RmlsZVVwbG9hZERhdGU6IHRoaXMuc2hvd0ZpbGVVcGxvYWREYXRlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDDiSBuZWNlc3PDoXJpbyBjcmlhciBvIGZpZWxkQ3VzdG9taXphdGlvbiBxdWFuZG8gaMOhIHVtIEJsb2IgbmEgZW50aWRhZGUgcGFyYSBnZXJhciBvXHJcbiAgICAgKiBjb20gb3MgZmllbGRzIGluc2VyaWRvcyBlIGRlbGV0YWRvcy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjcmVhdGVGaWVsZEN1c3RvbWl6YXRpb24oZmllbGRzOiBGaWVsZEZyb21BUElbXSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaGFzQmxvYiA9ICEhZmllbGRzLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLnR5cGUgPT09IEN1c3RvbUZpZWxkVHlwZS5CbG9iKS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQmxvYikge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgICAgICAgICAgJ2ZpZWxkQ3VzdG9taXphdGlvbicsXHJcbiAgICAgICAgICAgICAgICBuZXcgRm9ybUFycmF5KFtcclxuICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5kb21haW4pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5zZXJ2aWNlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbnRpdHkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b0RlbGV0ZTogbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHt9LCBkaXNhYmxlZDogZmFsc2UgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvSW5zZXJ0OiBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZToge30sIGRpc2FibGVkOiBmYWxzZSB9KSxcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZUJsb2JUb0ZpbGVVcGxvYWQoZmllbGQ6IEJsb2JGaWVsZENvbmZpZykge1xyXG4gICAgICAgIGNvbnN0IF9uYW1lID0gZmllbGQubmFtZTtcclxuICAgICAgICBjb25zdCBvYmplY3RJZCA9IHRoaXMudmFsdWVbX25hbWVdID8gdGhpcy52YWx1ZVtfbmFtZV0gOiB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy52YWx1ZTtcclxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IG9iamVjdElkLnN1YnN0cmluZyhvYmplY3RJZC5sYXN0SW5kZXhPZignLycpICsgMSk7XHJcbiAgICAgICAgY29uc3QgZmlsZTogUGFydGlhbDxGaWxlRHRvPiA9IHsgb2JqZWN0SWQsIG5hbWU6IGZpbGVOYW1lLCBzYXZlZEZpbGU6IHRydWUgfTtcclxuICAgICAgICBmaWVsZC5maWxlcyA9IFtmaWxlIGFzIEZpbGVEdG9dO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZG93bmxvYWRGaWxlKGV2ZW50OiB7IGluZGV4OiBudW1iZXI7IGFuY2hvcjogRWxlbWVudFJlZiB9LCBmaWVsZDogQmxvYkZpZWxkQ29uZmlnKSB7XHJcbiAgICAgICAgY29uc3QgeyBpbmRleCwgYW5jaG9yIH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBfZmlsZXMgPSBmaWVsZC5maWxlcyB8fCBbXTtcclxuICAgICAgICBpZiAoIV9maWxlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdXJyZW50RmlsZSA9IF9maWxlc1tpbmRleF07XHJcbiAgICAgICAgaWYgKGN1cnJlbnRGaWxlLm9iamVjdFVSTCkge1xyXG4gICAgICAgICAgICBhbmNob3IubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IF9vYmplY3RJZCA9IGN1cnJlbnRGaWxlLm9iamVjdElkIGFzIHN0cmluZztcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAucmVxdWVzdEFjY2Vzcyhfb2JqZWN0SWQsIHRoaXMucmVxdWVzdEFjY2Vzc0VuZHBvaW50KVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlsZU5hbWUsIHVyaSB9ID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpbGUodXJpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1VzdWJzY3JpYmUpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChibG9iOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGVOYW1lKSBhcyBGaWxlRHRvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZS5vYmplY3RVUkwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKHVyaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZS5vYmplY3RJZCA9IGN1cnJlbnRGaWxlLm9iamVjdElkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZS5zYXZlZEZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZpbGVzW2luZGV4XSA9IG5ld0ZpbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWxlcyA9IFsuLi5fZmlsZXNdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGxvYWRGaWxlKGV2ZW50OiB7IGZpbGVzOiBGaWxlRHRvW10gfSwgZm9ybUZpZWxkOiBCbG9iRmllbGRDb25maWcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IGZpbGVzIH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkLm5hbWUgPT09IGZvcm1GaWVsZC5uYW1lKSBhcyBCbG9iRmllbGRDb25maWc7XHJcbiAgICAgICAgaWYgKCFmaWVsZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZSBvY29ycmVyIHVtIHVwbG9hZCwgasOhIGV4aXN0aW5kbyB1bSBhcnF1aXZvIGNvbSB1cGxvYWQgZmVpdG8uIMOJIG5lY2Vzc8OhcmlvIGV4Y2x1aXIgbyBtZXNtby5cclxuICAgICAgICBpZiAoZmllbGQ/LmZpbGVzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKHsgZmlsZTogZmllbGQuZmlsZXNbMF0gfSwgZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaWVsZC5maWxlcyA9IGZpbGVzO1xyXG4gICAgICAgIGNvbnN0IF9uYW1lID0gZmllbGQubmFtZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gZmlsZXNbaV07XHJcbiAgICAgICAgICAgIGlmICghZmlsZS5zYXZlZEZpbGUgJiYgIWZpbGUucHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIGZpbGUuaXNVcGxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8uc2V0VmFsaWRhdG9ycyhpc1VwbG9hZGluZyhmaWxlKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuZ2V0RmlsZUxvY2F0aW9uVXJsKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW46IHRoaXMuZG9tYWluLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZTogdGhpcy5lbnRpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogX25hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVMb2NhdGlvbkVuZHBvaW50LFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodGhpcy5kZWZhbHRDYXRjaEVycm9yKGZpZWxkLCBlcnIsIGkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxvY2F0aW9uLCB2ZXJzaW9uLCBvYmplY3RJZCB9ID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS52ZXJzaW9uID0gdmVyc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5vYmplY3RJZCA9IG9iamVjdElkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLnVwbG9hZFN1YnNjcmliZSA9IHRoaXMuY3VzdG9tRmllbGRzU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwbG9hZFRlbXBGaWxlKGxvY2F0aW9uLCBmaWxlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih0aGlzLmRlZmFsdENhdGNoRXJyb3IoZmllbGQsIGVyciwgaSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuaXNVcGxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IHJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRDYW5jZWxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IE1hdGgucm91bmQocmVzcG9uc2UubG9hZGVkIC8gcmVzcG9uc2UudG90YWwpICogMTAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHsgb2JqZWN0SWQsIG5hbWU6IGZpbGUubmFtZSwgdmVyc2lvbjogZmlsZS52ZXJzaW9uIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b0luc2VydCA9IHRoaXMuZm9ybUdyb3VwLmdldCgnZmllbGRDdXN0b21pemF0aW9uJyk/LnZhbHVlWzBdLnRvSW5zZXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRDdXN0b21pemF0aW9uID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWVsZEN1c3RvbWl6YXRpb24nKT8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRDdXN0b21pemF0aW9uPy52YWx1ZT8uWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRDdXN0b21pemF0aW9uLnZhbHVlWzBdLnRvSW5zZXJ0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50b0luc2VydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW19uYW1lXTogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnNldFZhbHVlKGAke2ZpbGUub2JqZWN0SWR9LyR7ZmlsZS5uYW1lfWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWxlcyA9IFtmaWxlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51cGxvYWRDYW5jZWxlZCAmJiB0eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkQ2FuY2VsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsZXMgPSBbZmlsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVGaWxlKGV2ZW50OiB7IGZpbGU6IEZpbGVEdG8gfSwgYmxvYkZpZWxkOiBCbG9iRmllbGRDb25maWcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IGZpbGUgfSA9IGV2ZW50O1xyXG5cclxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkLm5hbWUgPT09IGJsb2JGaWVsZC5uYW1lKSBhcyBCbG9iRmllbGRDb25maWc7XHJcblxyXG4gICAgICAgIGZpZWxkIS5maWxlcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoZmlsZS5vYmplY3RJZCkge1xyXG4gICAgICAgICAgICAvLyBRdWFuZG8gw6kgdW0gYXJxdWl2byBqw6Egc2Fsdm8gbyBvYmplY3RJZCBqw6Egw6kgbm8gZm9ybWF0byBcIm9iamVjdElkL25hbWVcIlxyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbGUuc2F2ZWRGaWxlID8gYCR7ZmlsZS5vYmplY3RJZH1gIDogYCR7ZmlsZS5vYmplY3RJZH0vJHtmaWxlLm5hbWV9YDtcclxuICAgICAgICAgICAgY29uc3QgdG9EZWxldGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpIS52YWx1ZVswXS50b0RlbGV0ZTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZm9ybUdyb3VwLmdldCgnZmllbGRDdXN0b21pemF0aW9uJykhLnZhbHVlWzBdLnRvSW5zZXJ0W2ZpZWxkIS5uYW1lXTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWVsZEN1c3RvbWl6YXRpb24nKSEudmFsdWVbMF0udG9EZWxldGUgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi50b0RlbGV0ZSxcclxuICAgICAgICAgICAgICAgIFtmaWVsZCEubmFtZV06IFsuLi4odG9EZWxldGVbZmllbGQhLm5hbWVdIHx8IFtdKSwgdmFsdWVdLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkIS5uYW1lKSEuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkIS5uYW1lKSEuc2V0VmFsdWUoJycpO1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZCEubmFtZSkhLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbmNlbFVwbG9hZChpbmRleDogbnVtYmVyLCBmb3JtRmllbGQ6IEJsb2JGaWVsZENvbmZpZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXBsb2FkQ2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgocmVjb3JkKSA9PiByZWNvcmQubmFtZSA9PT0gZm9ybUZpZWxkLm5hbWUpIGFzIEJsb2JGaWVsZENvbmZpZztcclxuICAgICAgICBpZiAoIWZpZWxkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgX25hbWUgPSBmaWVsZC5uYW1lO1xyXG4gICAgICAgIGNvbnN0IF9maWxlcyA9IGZpZWxkLmZpbGVzIHx8IFtdO1xyXG4gICAgICAgIF9maWxlc1tpbmRleF0/LnVwbG9hZFN1YnNjcmliZT8udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICBmaWVsZC5maWxlcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkQ3VzdG9taXphdGlvbiA9IHRoaXMuZm9ybUdyb3VwLmdldCgnZmllbGRDdXN0b21pemF0aW9uJyk/LnZhbHVlWzBdO1xyXG4gICAgICAgIGRlbGV0ZSBmaWVsZEN1c3RvbWl6YXRpb24udG9JbnNlcnRbX25hbWVdO1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnNldFZhbHVlKCcnKTtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWZhbHRDYXRjaEVycm9yKGZpZWxkOiBCbG9iRmllbGRDb25maWcsIGVycjogSHR0cEVycm9yUmVzcG9uc2UsIGluZGV4OiBudW1iZXIpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XHJcbiAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gZmllbGQ7XHJcbiAgICAgICAgaWYgKGZpbGVzKSB7XHJcbiAgICAgICAgICAgIGZpbGVzW2luZGV4XS5lcnJvciA9IGVycjtcclxuICAgICAgICAgICAgZmlsZXNbaW5kZXhdLmlzVXBsb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZpZWxkLmZpbGVzID0gWy4uLmZpbGVzXTtcclxuICAgICAgICAgICAgY29uc3QgX25hbWUgPSBmaWVsZC5uYW1lO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy5zZXRWYWxpZGF0b3JzKFtlcnJvck9uVXBsb2FkKGZpbGVzW2luZGV4XSldKTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ2Vycm9yIGluIHVwbG9hZCBmaWxlLiBEZXRhaWxzOiAnICsgZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ2Vycm9yIGluIHVwbG9hZCBmaWxlLiBEZXRhaWxzOiAnICsgZXJyLm1lc3NhZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2xhdGVMYWJlbChsYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYCR7dGhpcy5kb21haW59LiR7dGhpcy5zZXJ2aWNlfS4ke2xhYmVsfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkRGlzcGxheVRpbWVJbmZvU2lnblRvRmllbGRzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGZpZWxkLmRpc3BsYXlUaW1lSW5mb1NpZ24gPSB0aGlzLmRpc3BsYXlUaW1lSW5mb1NpZ247XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVXBsb2FkaW5nKGZpbGU6IEZpbGVEdG8pOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKCkgPT4gKGZpbGUuaXNVcGxvYWRpbmcgPyB7IGlzVXBsb2FkaW5nOiB0cnVlIH0gOiBudWxsKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXJyb3JPblVwbG9hZChmaWxlOiBGaWxlRHRvKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuICgpID0+IChmaWxlLmVycm9yID8geyB1cGxvYWRFcnJvcjogdHJ1ZSB9IDogbnVsbCk7XHJcbn1cclxuIiwiQGxldCBlcnJvck1lc3NhZ2VzID1cbiAgICB7XG4gICAgICAgIHBhdHRlcm46IGludmFsaWRFcnJvckxhYmVsLFxuICAgICAgICByZXF1aXJlZDogcmVxdWlyZWRFcnJvck1lc3NhZ2UsXG4gICAgfTtcblxuPHMtZHluYW1pYy1mb3JtXG4gICAgW2NvbmZpZ3NdPVwiZHluYW1pY1N0cnVjdHVyZVwiXG4gICAgW2Zvcm1dPVwiZm9ybUdyb3VwXCJcbiAgICBbZXJyb3JNZXNzYWdlc109XCJlcnJvck1lc3NhZ2VzXCJcbj5cbjwvcy1keW5hbWljLWZvcm0+XG5cbiJdfQ==
@@ -3,6 +3,13 @@ import { CustomFieldsComponent } from './custom-fields.component';
3
3
  import { CustomFieldsService } from './custom-fields.service';
4
4
  import { TranslateService } from '@ngx-translate/core';
5
5
  import * as i0 from "@angular/core";
6
+ /**
7
+ * @deprecated Será removido na v20. Importe diretamente o standalone `CustomFieldsComponent` (de
8
+ * `@seniorsistemas/angular-components/custom-fields`) no lugar deste módulo.
9
+ *
10
+ * Migração automática (também executada pelo `ng update` na v20):
11
+ * `ng generate @seniorsistemas/angular-components:migrate-modules-to-standalone`
12
+ */
6
13
  export class CustomFieldsModule {
7
14
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
15
  static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsModule, imports: [CustomFieldsComponent], exports: [CustomFieldsComponent] });
@@ -16,4 +23,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
16
23
  providers: [CustomFieldsService, TranslateService],
17
24
  }]
18
25
  }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvY3VzdG9tLWZpZWxkcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFPdkQsTUFBTSxPQUFPLGtCQUFrQjt3R0FBbEIsa0JBQWtCO3lHQUFsQixrQkFBa0IsWUFKakIscUJBQXFCLGFBQ3JCLHFCQUFxQjt5R0FHdEIsa0JBQWtCLGFBRmhCLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsWUFGeEMscUJBQXFCOzs0RkFJdEIsa0JBQWtCO2tCQUw5QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNoQyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDaEMsU0FBUyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUM7aUJBQ3JEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ3VzdG9tRmllbGRzQ29tcG9uZW50IH0gZnJvbSAnLi9jdXN0b20tZmllbGRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUZpZWxkc1NlcnZpY2UgfSBmcm9tICcuL2N1c3RvbS1maWVsZHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbQ3VzdG9tRmllbGRzQ29tcG9uZW50XSxcclxuICAgIGV4cG9ydHM6IFtDdXN0b21GaWVsZHNDb21wb25lbnRdLFxyXG4gICAgcHJvdmlkZXJzOiBbQ3VzdG9tRmllbGRzU2VydmljZSwgVHJhbnNsYXRlU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21GaWVsZHNNb2R1bGUge31cclxuIl19
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvY3VzdG9tLWZpZWxkcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFdkQ7Ozs7OztHQU1HO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjt3R0FBbEIsa0JBQWtCO3lHQUFsQixrQkFBa0IsWUFKakIscUJBQXFCLGFBQ3JCLHFCQUFxQjt5R0FHdEIsa0JBQWtCLGFBRmhCLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsWUFGeEMscUJBQXFCOzs0RkFJdEIsa0JBQWtCO2tCQUw5QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNoQyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDaEMsU0FBUyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUM7aUJBQ3JEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ3VzdG9tRmllbGRzQ29tcG9uZW50IH0gZnJvbSAnLi9jdXN0b20tZmllbGRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEN1c3RvbUZpZWxkc1NlcnZpY2UgfSBmcm9tICcuL2N1c3RvbS1maWVsZHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCBTZXLDoSByZW1vdmlkbyBuYSB2MjAuIEltcG9ydGUgZGlyZXRhbWVudGUgbyBzdGFuZGFsb25lIGBDdXN0b21GaWVsZHNDb21wb25lbnRgIChkZVxyXG4gKiBgQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9jdXN0b20tZmllbGRzYCkgbm8gbHVnYXIgZGVzdGUgbcOzZHVsby5cclxuICpcclxuICogTWlncmHDp8OjbyBhdXRvbcOhdGljYSAodGFtYsOpbSBleGVjdXRhZGEgcGVsbyBgbmcgdXBkYXRlYCBuYSB2MjApOlxyXG4gKiBgbmcgZ2VuZXJhdGUgQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50czptaWdyYXRlLW1vZHVsZXMtdG8tc3RhbmRhbG9uZWBcclxuICovXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbQ3VzdG9tRmllbGRzQ29tcG9uZW50XSxcclxuICAgIGV4cG9ydHM6IFtDdXN0b21GaWVsZHNDb21wb25lbnRdLFxyXG4gICAgcHJvdmlkZXJzOiBbQ3VzdG9tRmllbGRzU2VydmljZSwgVHJhbnNsYXRlU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21GaWVsZHNNb2R1bGUge31cclxuIl19
@@ -24,9 +24,10 @@ export class CustomFieldsService {
24
24
  return this.http.get(permanentUrl, { responseType: 'blob' });
25
25
  }
26
26
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
27
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsService });
27
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsService, providedIn: 'root' });
28
28
  }
29
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsService, decorators: [{
30
- type: Injectable
30
+ type: Injectable,
31
+ args: [{ providedIn: 'root' }]
31
32
  }] });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2N1c3RvbS1maWVsZHMvc3JjL2xpYi9jdXN0b20tZmllbGRzL2N1c3RvbS1maWVsZHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBS25ELE1BQU0sT0FBTyxtQkFBbUI7SUFDcEIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUczQixlQUFlLENBQ2xCLE1BQWMsRUFDZCxPQUFlLEVBQ2YsTUFBYyxFQUNkLFFBQWdCO1FBRWhCLE1BQU0sU0FBUyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ25GLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQXVCLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRU0sa0JBQWtCLENBQ3JCLEdBTUMsRUFDRCxRQUFnQjtRQUVoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sY0FBYyxDQUFDLFFBQWdCLEVBQUUsSUFBVTtRQUM5QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFDakMsY0FBYyxFQUFFLElBQUk7WUFDcEIsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7U0FDekMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGFBQWEsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sT0FBTyxDQUFDLFlBQW9CO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQzt3R0F6Q1EsbUJBQW1COzRHQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDdXN0b21GaWVsZHNSZXNwb25zZSB9IGZyb20gJy4vbW9kZWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEN1c3RvbUZpZWxkc1NlcnZpY2Uge1xuICAgIHByaXZhdGUgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcblxuXG4gICAgcHVibGljIGdldEN1c3RvbUZpZWxkcyhcbiAgICAgICAgZG9tYWluOiBzdHJpbmcsXG4gICAgICAgIHNlcnZpY2U6IHN0cmluZyxcbiAgICAgICAgZW50aXR5OiBzdHJpbmcsXG4gICAgICAgIGVuZHBvaW50OiBzdHJpbmcsXG4gICAgKTogT2JzZXJ2YWJsZTxDdXN0b21GaWVsZHNSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBlbnRpdHlEdG8gPSB7IGVudGl0eUlkOiB7IGRvbWFpbl86IGRvbWFpbiwgc2VydmljZV86IHNlcnZpY2UsIGlkOiBlbnRpdHkgfSB9O1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q3VzdG9tRmllbGRzUmVzcG9uc2U+KGVuZHBvaW50LCBlbnRpdHlEdG8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWxlTG9jYXRpb25VcmwoXG4gICAgICAgIGR0bzoge1xuICAgICAgICAgICAgZG9tYWluOiBzdHJpbmc7XG4gICAgICAgICAgICBzZXJ2aWNlOiBzdHJpbmc7XG4gICAgICAgICAgICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICBmaWVsZDogc3RyaW5nO1xuICAgICAgICAgICAgZmlsZU5hbWU6IHN0cmluZztcbiAgICAgICAgfSxcbiAgICAgICAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIGR0byk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwbG9hZFRlbXBGaWxlKGxvY2F0aW9uOiBzdHJpbmcsIGZpbGU6IEZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQobG9jYXRpb24sIGZpbGUsIHtcbiAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxuICAgICAgICAgICAgb2JzZXJ2ZTogJ2V2ZW50cycsXG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiBmaWxlLnR5cGUgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlcXVlc3RBY2Nlc3Mob2JqZWN0SWQ6IHN0cmluZywgZW5kcG9pbnQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHsgb2JqZWN0SWQgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpbGUocGVybWFuZW50VXJsOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQocGVybWFuZW50VXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pO1xuICAgIH1cbn1cblxuIl19
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2N1c3RvbS1maWVsZHMvc3JjL2xpYi9jdXN0b20tZmllbGRzL2N1c3RvbS1maWVsZHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBS25ELE1BQU0sT0FBTyxtQkFBbUI7SUFDcEIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUczQixlQUFlLENBQ2xCLE1BQWMsRUFDZCxPQUFlLEVBQ2YsTUFBYyxFQUNkLFFBQWdCO1FBRWhCLE1BQU0sU0FBUyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ25GLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQXVCLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRU0sa0JBQWtCLENBQ3JCLEdBTUMsRUFDRCxRQUFnQjtRQUVoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sY0FBYyxDQUFDLFFBQWdCLEVBQUUsSUFBVTtRQUM5QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFDakMsY0FBYyxFQUFFLElBQUk7WUFDcEIsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7U0FDekMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGFBQWEsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sT0FBTyxDQUFDLFlBQW9CO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQzt3R0F6Q1EsbUJBQW1COzRHQUFuQixtQkFBbUIsY0FETixNQUFNOzs0RkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEN1c3RvbUZpZWxkc1Jlc3BvbnNlIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUZpZWxkc1NlcnZpY2Uge1xuICAgIHByaXZhdGUgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcblxuXG4gICAgcHVibGljIGdldEN1c3RvbUZpZWxkcyhcbiAgICAgICAgZG9tYWluOiBzdHJpbmcsXG4gICAgICAgIHNlcnZpY2U6IHN0cmluZyxcbiAgICAgICAgZW50aXR5OiBzdHJpbmcsXG4gICAgICAgIGVuZHBvaW50OiBzdHJpbmcsXG4gICAgKTogT2JzZXJ2YWJsZTxDdXN0b21GaWVsZHNSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBlbnRpdHlEdG8gPSB7IGVudGl0eUlkOiB7IGRvbWFpbl86IGRvbWFpbiwgc2VydmljZV86IHNlcnZpY2UsIGlkOiBlbnRpdHkgfSB9O1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8Q3VzdG9tRmllbGRzUmVzcG9uc2U+KGVuZHBvaW50LCBlbnRpdHlEdG8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWxlTG9jYXRpb25VcmwoXG4gICAgICAgIGR0bzoge1xuICAgICAgICAgICAgZG9tYWluOiBzdHJpbmc7XG4gICAgICAgICAgICBzZXJ2aWNlOiBzdHJpbmc7XG4gICAgICAgICAgICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICBmaWVsZDogc3RyaW5nO1xuICAgICAgICAgICAgZmlsZU5hbWU6IHN0cmluZztcbiAgICAgICAgfSxcbiAgICAgICAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIGR0byk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwbG9hZFRlbXBGaWxlKGxvY2F0aW9uOiBzdHJpbmcsIGZpbGU6IEZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQobG9jYXRpb24sIGZpbGUsIHtcbiAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxuICAgICAgICAgICAgb2JzZXJ2ZTogJ2V2ZW50cycsXG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiBmaWxlLnR5cGUgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlcXVlc3RBY2Nlc3Mob2JqZWN0SWQ6IHN0cmluZywgZW5kcG9pbnQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoZW5kcG9pbnQsIHsgb2JqZWN0SWQgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpbGUocGVybWFuZW50VXJsOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQocGVybWFuZW50VXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0pO1xuICAgIH1cbn1cblxuIl19
@@ -34,9 +34,11 @@ export const apiTypesToDynamicFormType = (type) => {
34
34
  case 'Boolean':
35
35
  return 'boolean';
36
36
  case 'Money':
37
+ return 'money';
37
38
  case 'Double':
39
+ return 'double';
38
40
  case 'Integer':
39
- return 'legacyNumber';
41
+ return 'integer';
40
42
  }
41
43
  };
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvbW9kZWxzL2N1c3RvbS1maWVsZC10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBTixJQUFZLGVBY1g7QUFkRCxXQUFZLGVBQWU7SUFDdkIsb0NBQWlCLENBQUE7SUFDakIsc0NBQW1CLENBQUE7SUFDbkIsc0NBQW1CLENBQUE7SUFDbkIsb0NBQWlCLENBQUE7SUFDakIsZ0NBQWEsQ0FBQTtJQUNiLHdDQUFxQixDQUFBO0lBQ3JCLGtEQUErQixDQUFBO0lBQy9CLGdDQUFhLENBQUE7SUFDYixrQ0FBZSxDQUFBO0lBQ2YsZ0NBQWEsQ0FBQTtJQUNiLG9DQUFpQixDQUFBO0lBQ2pCLDhCQUFXLENBQUE7SUFDWCxnQ0FBYSxDQUFBO0FBQ2pCLENBQUMsRUFkVyxlQUFlLEtBQWYsZUFBZSxRQWMxQjtBQUlELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsSUFBeUIsRUFBYSxFQUFFO0lBQzlFLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDWCxLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssS0FBSztZQUNOLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLEtBQUssUUFBUTtZQUNULE9BQU8sUUFBUSxDQUFDO1FBQ3BCLEtBQUssTUFBTTtZQUNQLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLEtBQUssVUFBVSxDQUFDO1FBQ2hCLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLGVBQWU7WUFDaEIsT0FBTyxNQUFNLENBQUM7UUFDbEIsS0FBSyxhQUFhLENBQUM7UUFDbkIsS0FBSyxNQUFNO1lBQ1AsT0FBTyxNQUFNLENBQUM7UUFDbEIsS0FBSyxTQUFTO1lBQ1YsT0FBTyxTQUFTLENBQUM7UUFDckIsS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssU0FBUztZQUNWLE9BQU8sY0FBYyxDQUFDO0lBQzlCLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2R5bmFtaWMtZm9ybSc7XG5cbmV4cG9ydCBlbnVtIEN1c3RvbUZpZWxkVHlwZSB7XG4gICAgU3RyaW5nID0gJ1N0cmluZycsXG4gICAgQm9vbGVhbiA9ICdCb29sZWFuJyxcbiAgICBJbnRlZ2VyID0gJ0ludGVnZXInLFxuICAgIERvdWJsZSA9ICdEb3VibGUnLFxuICAgIERhdGUgPSAnRGF0ZScsXG4gICAgRGF0ZVRpbWUgPSAnRGF0ZVRpbWUnLFxuICAgIExvY2FsRGF0ZVRpbWUgPSAnTG9jYWxEYXRlVGltZScsXG4gICAgVGltZSA9ICdUaW1lJyxcbiAgICBNb25leSA9ICdNb25leScsXG4gICAgQmxvYiA9ICdCbG9iJyxcbiAgICBCaW5hcnkgPSAnQmluYXJ5JyxcbiAgICBBbnkgPSAnQW55JyxcbiAgICBFbnVtID0gJ0VudW0nLFxufVxuXG5leHBvcnQgdHlwZSBDdXN0b21GaWVsZHNUeXBlQVBJID0gJ0VudW1lcmF0aW9uJyB8IGtleW9mIHR5cGVvZiBDdXN0b21GaWVsZFR5cGU7XG5cbmV4cG9ydCBjb25zdCBhcGlUeXBlc1RvRHluYW1pY0Zvcm1UeXBlID0gKHR5cGU6IEN1c3RvbUZpZWxkc1R5cGVBUEkpOiBGaWVsZFR5cGUgPT4ge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICBjYXNlICdBbnknOlxuICAgICAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgICBjYXNlICdCaW5hcnknOlxuICAgICAgICAgICAgcmV0dXJuICdiaW5hcnknO1xuICAgICAgICBjYXNlICdCbG9iJzpcbiAgICAgICAgICAgIHJldHVybiAnYmxvYic7XG4gICAgICAgIGNhc2UgJ0RhdGVUaW1lJzpcbiAgICAgICAgY2FzZSAnVGltZSc6XG4gICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICBjYXNlICdMb2NhbERhdGVUaW1lJzpcbiAgICAgICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICAgIGNhc2UgJ0VudW1lcmF0aW9uJzpcbiAgICAgICAgY2FzZSAnRW51bSc6XG4gICAgICAgICAgICByZXR1cm4gJ2VudW0nO1xuICAgICAgICBjYXNlICdCb29sZWFuJzpcbiAgICAgICAgICAgIHJldHVybiAnYm9vbGVhbic7XG4gICAgICAgIGNhc2UgJ01vbmV5JzpcbiAgICAgICAgY2FzZSAnRG91YmxlJzpcbiAgICAgICAgY2FzZSAnSW50ZWdlcic6XG4gICAgICAgICAgICByZXR1cm4gJ2xlZ2FjeU51bWJlcic7XG4gICAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBGaWVsZEZyb21BUEkge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdHlwZTogQ3VzdG9tRmllbGRzVHlwZUFQSTtcbiAgICBjdXN0b21pemFibGU6IGJvb2xlYW47XG4gICAgY3VzdG9taXphdGlvbjogRmllbGRDdXN0b21pemF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkQ3VzdG9taXphdGlvbiB7XG4gICAgYWN0aXZlOiBib29sZWFuO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdG9vbHRpcDogc3RyaW5nO1xuICAgIG1hc2s/OiBzdHJpbmc7XG4gICAgdmFsaWRhdGlvblJlZ2V4Pzogc3RyaW5nO1xuICAgIGN1c3RvbUVudW1lcmF0aW9uPzogQ3VzdG9tRW51bWVyYXRpb247XG4gICAgaW5mb1NpZ24/OiBzdHJpbmc7XG4gICAgbWFuZGF0b3J5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21FbnVtZXJhdGlvbiB7XG4gICAgbXVsdGlwbGU/OiBib29sZWFuO1xuICAgIHZhbHVlczogRW51bVZhbHVlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW51bVZhbHVlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUZpZWxkc1Jlc3BvbnNlIHtcbiAgICBlbnRpdHlfOiB7XG4gICAgICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICAgICAgZmllbGRzOiBGaWVsZEZyb21BUElbXTtcbiAgICB9O1xufVxuXG4iXX0=
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvbW9kZWxzL2N1c3RvbS1maWVsZC10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBTixJQUFZLGVBY1g7QUFkRCxXQUFZLGVBQWU7SUFDdkIsb0NBQWlCLENBQUE7SUFDakIsc0NBQW1CLENBQUE7SUFDbkIsc0NBQW1CLENBQUE7SUFDbkIsb0NBQWlCLENBQUE7SUFDakIsZ0NBQWEsQ0FBQTtJQUNiLHdDQUFxQixDQUFBO0lBQ3JCLGtEQUErQixDQUFBO0lBQy9CLGdDQUFhLENBQUE7SUFDYixrQ0FBZSxDQUFBO0lBQ2YsZ0NBQWEsQ0FBQTtJQUNiLG9DQUFpQixDQUFBO0lBQ2pCLDhCQUFXLENBQUE7SUFDWCxnQ0FBYSxDQUFBO0FBQ2pCLENBQUMsRUFkVyxlQUFlLEtBQWYsZUFBZSxRQWMxQjtBQUlELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsSUFBeUIsRUFBYSxFQUFFO0lBQzlFLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDWCxLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssS0FBSztZQUNOLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLEtBQUssUUFBUTtZQUNULE9BQU8sUUFBUSxDQUFDO1FBQ3BCLEtBQUssTUFBTTtZQUNQLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLEtBQUssVUFBVSxDQUFDO1FBQ2hCLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLGVBQWU7WUFDaEIsT0FBTyxNQUFNLENBQUM7UUFDbEIsS0FBSyxhQUFhLENBQUM7UUFDbkIsS0FBSyxNQUFNO1lBQ1AsT0FBTyxNQUFNLENBQUM7UUFDbEIsS0FBSyxTQUFTO1lBQ1YsT0FBTyxTQUFTLENBQUM7UUFDckIsS0FBSyxPQUFPO1lBQ1IsT0FBTyxPQUFPLENBQUM7UUFDbkIsS0FBSyxRQUFRO1lBQ1QsT0FBTyxRQUFRLENBQUM7UUFDcEIsS0FBSyxTQUFTO1lBQ1YsT0FBTyxTQUFTLENBQUM7SUFDekIsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvZHluYW1pYy1mb3JtJztcblxuZXhwb3J0IGVudW0gQ3VzdG9tRmllbGRUeXBlIHtcbiAgICBTdHJpbmcgPSAnU3RyaW5nJyxcbiAgICBCb29sZWFuID0gJ0Jvb2xlYW4nLFxuICAgIEludGVnZXIgPSAnSW50ZWdlcicsXG4gICAgRG91YmxlID0gJ0RvdWJsZScsXG4gICAgRGF0ZSA9ICdEYXRlJyxcbiAgICBEYXRlVGltZSA9ICdEYXRlVGltZScsXG4gICAgTG9jYWxEYXRlVGltZSA9ICdMb2NhbERhdGVUaW1lJyxcbiAgICBUaW1lID0gJ1RpbWUnLFxuICAgIE1vbmV5ID0gJ01vbmV5JyxcbiAgICBCbG9iID0gJ0Jsb2InLFxuICAgIEJpbmFyeSA9ICdCaW5hcnknLFxuICAgIEFueSA9ICdBbnknLFxuICAgIEVudW0gPSAnRW51bScsXG59XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUZpZWxkc1R5cGVBUEkgPSAnRW51bWVyYXRpb24nIHwga2V5b2YgdHlwZW9mIEN1c3RvbUZpZWxkVHlwZTtcblxuZXhwb3J0IGNvbnN0IGFwaVR5cGVzVG9EeW5hbWljRm9ybVR5cGUgPSAodHlwZTogQ3VzdG9tRmllbGRzVHlwZUFQSSk6IEZpZWxkVHlwZSA9PiB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICAgIGNhc2UgJ0FueSc6XG4gICAgICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgICAgIGNhc2UgJ0JpbmFyeSc6XG4gICAgICAgICAgICByZXR1cm4gJ2JpbmFyeSc7XG4gICAgICAgIGNhc2UgJ0Jsb2InOlxuICAgICAgICAgICAgcmV0dXJuICdibG9iJztcbiAgICAgICAgY2FzZSAnRGF0ZVRpbWUnOlxuICAgICAgICBjYXNlICdUaW1lJzpcbiAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgIGNhc2UgJ0xvY2FsRGF0ZVRpbWUnOlxuICAgICAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgICAgY2FzZSAnRW51bWVyYXRpb24nOlxuICAgICAgICBjYXNlICdFbnVtJzpcbiAgICAgICAgICAgIHJldHVybiAnZW51bSc7XG4gICAgICAgIGNhc2UgJ0Jvb2xlYW4nOlxuICAgICAgICAgICAgcmV0dXJuICdib29sZWFuJztcbiAgICAgICAgY2FzZSAnTW9uZXknOlxuICAgICAgICAgICAgcmV0dXJuICdtb25leSc7XG4gICAgICAgIGNhc2UgJ0RvdWJsZSc6XG4gICAgICAgICAgICByZXR1cm4gJ2RvdWJsZSc7XG4gICAgICAgIGNhc2UgJ0ludGVnZXInOlxuICAgICAgICAgICAgcmV0dXJuICdpbnRlZ2VyJztcbiAgICB9XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkRnJvbUFQSSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0eXBlOiBDdXN0b21GaWVsZHNUeXBlQVBJO1xuICAgIGN1c3RvbWl6YWJsZTogYm9vbGVhbjtcbiAgICBjdXN0b21pemF0aW9uOiBGaWVsZEN1c3RvbWl6YXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRDdXN0b21pemF0aW9uIHtcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICB0b29sdGlwOiBzdHJpbmc7XG4gICAgbWFzaz86IHN0cmluZztcbiAgICB2YWxpZGF0aW9uUmVnZXg/OiBzdHJpbmc7XG4gICAgY3VzdG9tRW51bWVyYXRpb24/OiBDdXN0b21FbnVtZXJhdGlvbjtcbiAgICBpbmZvU2lnbj86IHN0cmluZztcbiAgICBtYW5kYXRvcnk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUVudW1lcmF0aW9uIHtcbiAgICBtdWx0aXBsZT86IGJvb2xlYW47XG4gICAgdmFsdWVzOiBFbnVtVmFsdWVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnVtVmFsdWUge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRmllbGRzUmVzcG9uc2Uge1xuICAgIGVudGl0eV86IHtcbiAgICAgICAgYWN0aXZlOiBib29sZWFuO1xuICAgICAgICBmaWVsZHM6IEZpZWxkRnJvbUFQSVtdO1xuICAgIH07XG59XG5cbiJdfQ==
@@ -0,0 +1,46 @@
1
+ import BigNumber from 'bignumber.js';
2
+ /**
3
+ * Tipos de campo do dynamic-form que representam valores numéricos no custom-fields.
4
+ */
5
+ const NUMERIC_FIELD_TYPES = ['integer', 'double', 'money'];
6
+ /**
7
+ * Verifica se o tipo do campo (já mapeado para o dynamic-form) é numérico.
8
+ */
9
+ export const isNumericFieldType = (type) => NUMERIC_FIELD_TYPES.includes(type);
10
+ /**
11
+ * Converte o valor numérico recebido do backend para o formato aceito pelo campo numérico
12
+ * do dynamic-form (string em formato internacional, ex.: `'1234.50'`).
13
+ *
14
+ * Valores vazios ou inválidos resultam em `null`.
15
+ */
16
+ export const parseNumericValueFromApi = (value) => {
17
+ if (value === null || value === undefined || value === '') {
18
+ return null;
19
+ }
20
+ const bigNumber = new BigNumber(value);
21
+ return bigNumber.isNaN() ? null : bigNumber.toFixed();
22
+ };
23
+ /**
24
+ * Converte o valor do campo numérico (string em formato internacional) para `number`,
25
+ * que é o formato esperado pelo backend do custom-fields.
26
+ *
27
+ * - Valores vazios resultam em `null`.
28
+ * - Valores que não são numéricos (ex.: campos com máscara de texto) são devolvidos como estão.
29
+ * - Valores que não cabem em `number` sem perda de precisão são convertidos mesmo assim,
30
+ * emitindo um aviso no console.
31
+ */
32
+ export const parseNumericValueToApi = (value) => {
33
+ if (value === null || value === undefined || value === '') {
34
+ return null;
35
+ }
36
+ const bigNumber = new BigNumber(value);
37
+ if (bigNumber.isNaN()) {
38
+ return value;
39
+ }
40
+ const numeric = bigNumber.toNumber();
41
+ if (!new BigNumber(numeric).isEqualTo(bigNumber)) {
42
+ console.warn(`[s-custom-fields] O valor ${bigNumber.toFixed()} perde precisão ao ser convertido para number.`);
43
+ }
44
+ return numeric;
45
+ };
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkLXZhbHVlLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9jdXN0b20tZmllbGRzL3NyYy9saWIvY3VzdG9tLWZpZWxkcy9tb2RlbHMvY3VzdG9tLWZpZWxkLXZhbHVlLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFFckM7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQixHQUFzQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFOUU7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQVksRUFBVyxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRWhHOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxLQUFjLEVBQWlCLEVBQUU7SUFDdEUsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxLQUF3QixDQUFDLENBQUM7SUFDMUQsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzFELENBQUMsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFjLEVBQTBCLEVBQUU7SUFDN0UsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxLQUF3QixDQUFDLENBQUM7SUFDMUQsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNwQixPQUFPLEtBQWUsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLDZCQUE2QixTQUFTLENBQUMsT0FBTyxFQUFFLGdEQUFnRCxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcblxuLyoqXG4gKiBUaXBvcyBkZSBjYW1wbyBkbyBkeW5hbWljLWZvcm0gcXVlIHJlcHJlc2VudGFtIHZhbG9yZXMgbnVtw6lyaWNvcyBubyBjdXN0b20tZmllbGRzLlxuICovXG5jb25zdCBOVU1FUklDX0ZJRUxEX1RZUEVTOiByZWFkb25seSBzdHJpbmdbXSA9IFsnaW50ZWdlcicsICdkb3VibGUnLCAnbW9uZXknXTtcblxuLyoqXG4gKiBWZXJpZmljYSBzZSBvIHRpcG8gZG8gY2FtcG8gKGrDoSBtYXBlYWRvIHBhcmEgbyBkeW5hbWljLWZvcm0pIMOpIG51bcOpcmljby5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzTnVtZXJpY0ZpZWxkVHlwZSA9ICh0eXBlOiBzdHJpbmcpOiBib29sZWFuID0+IE5VTUVSSUNfRklFTERfVFlQRVMuaW5jbHVkZXModHlwZSk7XG5cbi8qKlxuICogQ29udmVydGUgbyB2YWxvciBudW3DqXJpY28gcmVjZWJpZG8gZG8gYmFja2VuZCBwYXJhIG8gZm9ybWF0byBhY2VpdG8gcGVsbyBjYW1wbyBudW3DqXJpY29cbiAqIGRvIGR5bmFtaWMtZm9ybSAoc3RyaW5nIGVtIGZvcm1hdG8gaW50ZXJuYWNpb25hbCwgZXguOiBgJzEyMzQuNTAnYCkuXG4gKlxuICogVmFsb3JlcyB2YXppb3Mgb3UgaW52w6FsaWRvcyByZXN1bHRhbSBlbSBgbnVsbGAuXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZU51bWVyaWNWYWx1ZUZyb21BcGkgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgYmlnTnVtYmVyID0gbmV3IEJpZ051bWJlcih2YWx1ZSBhcyBCaWdOdW1iZXIuVmFsdWUpO1xuICAgIHJldHVybiBiaWdOdW1iZXIuaXNOYU4oKSA/IG51bGwgOiBiaWdOdW1iZXIudG9GaXhlZCgpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0ZSBvIHZhbG9yIGRvIGNhbXBvIG51bcOpcmljbyAoc3RyaW5nIGVtIGZvcm1hdG8gaW50ZXJuYWNpb25hbCkgcGFyYSBgbnVtYmVyYCxcbiAqIHF1ZSDDqSBvIGZvcm1hdG8gZXNwZXJhZG8gcGVsbyBiYWNrZW5kIGRvIGN1c3RvbS1maWVsZHMuXG4gKlxuICogLSBWYWxvcmVzIHZhemlvcyByZXN1bHRhbSBlbSBgbnVsbGAuXG4gKiAtIFZhbG9yZXMgcXVlIG7Do28gc8OjbyBudW3DqXJpY29zIChleC46IGNhbXBvcyBjb20gbcOhc2NhcmEgZGUgdGV4dG8pIHPDo28gZGV2b2x2aWRvcyBjb21vIGVzdMOjby5cbiAqIC0gVmFsb3JlcyBxdWUgbsOjbyBjYWJlbSBlbSBgbnVtYmVyYCBzZW0gcGVyZGEgZGUgcHJlY2lzw6NvIHPDo28gY29udmVydGlkb3MgbWVzbW8gYXNzaW0sXG4gKiAgIGVtaXRpbmRvIHVtIGF2aXNvIG5vIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZU51bWVyaWNWYWx1ZVRvQXBpID0gKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGJpZ051bWJlciA9IG5ldyBCaWdOdW1iZXIodmFsdWUgYXMgQmlnTnVtYmVyLlZhbHVlKTtcbiAgICBpZiAoYmlnTnVtYmVyLmlzTmFOKCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICBjb25zdCBudW1lcmljID0gYmlnTnVtYmVyLnRvTnVtYmVyKCk7XG4gICAgaWYgKCFuZXcgQmlnTnVtYmVyKG51bWVyaWMpLmlzRXF1YWxUbyhiaWdOdW1iZXIpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW3MtY3VzdG9tLWZpZWxkc10gTyB2YWxvciAke2JpZ051bWJlci50b0ZpeGVkKCl9IHBlcmRlIHByZWNpc8OjbyBhbyBzZXIgY29udmVydGlkbyBwYXJhIG51bWJlci5gKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bWVyaWM7XG59O1xuIl19
@@ -1,2 +1,3 @@
1
1
  export { apiTypesToDynamicFormType, CustomFieldType, } from './custom-field-type';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx5QkFBeUIsRUFDekIsZUFBZSxHQUlsQixNQUFNLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgICBhcGlUeXBlc1RvRHluYW1pY0Zvcm1UeXBlLFxuICAgIEN1c3RvbUZpZWxkVHlwZSxcbiAgICB0eXBlIEN1c3RvbUZpZWxkc1Jlc3BvbnNlLFxuICAgIHR5cGUgRmllbGRGcm9tQVBJLFxuICAgIHR5cGUgQ3VzdG9tRmllbGRzVHlwZUFQSSxcbn0gZnJvbSAnLi9jdXN0b20tZmllbGQtdHlwZSc7XG5cbiJdfQ==
2
+ export { isNumericFieldType, parseNumericValueFromApi, parseNumericValueToApi, } from './custom-field-value-parser';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx5QkFBeUIsRUFDekIsZUFBZSxHQUlsQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLHNCQUFzQixHQUN6QixNQUFNLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgICBhcGlUeXBlc1RvRHluYW1pY0Zvcm1UeXBlLFxuICAgIEN1c3RvbUZpZWxkVHlwZSxcbiAgICB0eXBlIEN1c3RvbUZpZWxkc1Jlc3BvbnNlLFxuICAgIHR5cGUgRmllbGRGcm9tQVBJLFxuICAgIHR5cGUgQ3VzdG9tRmllbGRzVHlwZUFQSSxcbn0gZnJvbSAnLi9jdXN0b20tZmllbGQtdHlwZSc7XG5leHBvcnQge1xuICAgIGlzTnVtZXJpY0ZpZWxkVHlwZSxcbiAgICBwYXJzZU51bWVyaWNWYWx1ZUZyb21BcGksXG4gICAgcGFyc2VOdW1lcmljVmFsdWVUb0FwaSxcbn0gZnJvbSAnLi9jdXN0b20tZmllbGQtdmFsdWUtcGFyc2VyJztcblxuIl19