@seniorsistemas/angular-components 19.0.5 → 19.0.7

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 (439) hide show
  1. package/accordion/lib/accordion/accordion.component.d.ts +25 -0
  2. package/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.d.ts +60 -0
  3. package/alert/lib/alert/alert.component.d.ts +40 -0
  4. package/autocomplete/lib/autocomplete/autocomplete.component.d.ts +51 -0
  5. package/badge/lib/badge/badge.component.d.ts +20 -0
  6. package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +46 -1
  7. package/breadcrumb/lib/breadcrumb/breadcrumb.component.d.ts +12 -0
  8. package/button/lib/button/button.component.d.ts +101 -0
  9. package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +24 -0
  10. package/card/lib/card/card.component.d.ts +18 -0
  11. package/chat/lib/chat/chat.component.d.ts +20 -2
  12. package/chat/lib/chat/components/chat-message/chat-message.component.d.ts +18 -2
  13. package/checkbox/lib/checkbox/checkbox.component.d.ts +23 -3
  14. package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +20 -0
  15. package/chips/lib/chips/chip-item/chip-item.component.d.ts +15 -0
  16. package/chips/lib/chips/chips/chips.component.d.ts +41 -0
  17. package/code-editor/lib/code-editor/code-editor.component.d.ts +40 -0
  18. package/collapse-link/lib/collapse-link/collapse-link.component.d.ts +18 -0
  19. package/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.d.ts +5 -0
  20. package/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.d.ts +19 -0
  21. package/content-generator/lib/content-generator/content-generator.component.d.ts +30 -0
  22. package/control-errors/lib/control-errors/control-errors.component.d.ts +36 -0
  23. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +36 -0
  24. package/currency/lib/currency.service.d.ts +15 -2
  25. package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +31 -0
  26. package/dialog/lib/src/dialog/dialog.component.d.ts +51 -0
  27. package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -2
  28. package/dialog/lib/src/dialog/services/internal-dialog.service.d.ts +1 -1
  29. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +6 -5
  30. package/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.d.ts +5 -0
  31. package/dynamic-form/dynamic-form/configurations/structure/fieldset.d.ts +14 -0
  32. package/dynamic-form/dynamic-form/configurations/structure/row.d.ts +67 -0
  33. package/dynamic-form/dynamic-form/configurations/structure/section.d.ts +8 -0
  34. package/dynamic-form/dynamic-form/configurations/structure/structure.d.ts +19 -0
  35. package/dynamic-form/dynamic-form/dynamic-form.component.d.ts +21 -1
  36. package/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.d.ts +45 -0
  37. package/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +59 -0
  38. package/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.d.ts +55 -0
  39. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.d.ts +35 -0
  40. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.d.ts +17 -0
  41. package/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.d.ts +23 -0
  42. package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +66 -0
  43. package/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.d.ts +15 -0
  44. package/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.d.ts +30 -0
  45. package/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.d.ts +47 -2
  46. package/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.d.ts +26 -0
  47. package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +18 -1
  48. package/dynamic-form/dynamic-form/form-field/configurations/fields/field.d.ts +44 -0
  49. package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +112 -4
  50. package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +42 -3
  51. package/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.d.ts +48 -0
  52. package/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.d.ts +62 -0
  53. package/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.d.ts +34 -0
  54. package/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.d.ts +63 -0
  55. package/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.d.ts +47 -1
  56. package/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.d.ts +23 -0
  57. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.d.ts +37 -1
  58. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.d.ts +65 -2
  59. package/dynamic-form/public-api.d.ts +1 -0
  60. package/editable-overlay/lib/editable-overlay/editable-overlay.directive.d.ts +16 -0
  61. package/empty-state/lib/empty-state/empty-state.component.d.ts +59 -0
  62. package/esm2022/accordion/lib/accordion/accordion.component.mjs +26 -1
  63. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +61 -1
  64. package/esm2022/alert/lib/alert/alert.component.mjs +41 -1
  65. package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +52 -1
  66. package/esm2022/badge/lib/badge/badge.component.mjs +21 -1
  67. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +47 -2
  68. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +13 -1
  69. package/esm2022/button/lib/button/button.component.mjs +102 -1
  70. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +72 -47
  71. package/esm2022/card/lib/card/card.component.mjs +21 -6
  72. package/esm2022/chat/lib/chat/chat.component.mjs +23 -5
  73. package/esm2022/chat/lib/chat/components/chat-message/chat-message.component.mjs +20 -4
  74. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +24 -4
  75. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +22 -2
  76. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +17 -2
  77. package/esm2022/chips/lib/chips/chips/chips.component.mjs +42 -1
  78. package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +41 -1
  79. package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +19 -1
  80. package/esm2022/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.mjs +6 -1
  81. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +20 -1
  82. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +31 -1
  83. package/esm2022/control-errors/lib/control-errors/control-errors.component.mjs +37 -1
  84. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +37 -1
  85. package/esm2022/currency/lib/currency.service.mjs +21 -8
  86. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +32 -1
  87. package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +66 -11
  88. package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -10
  89. package/esm2022/dialog/lib/src/dialog/services/internal-dialog.service.mjs +3 -3
  90. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +1 -1
  91. package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.mjs +2 -0
  92. package/esm2022/dynamic-form/dynamic-form/configurations/structure/fieldset.mjs +1 -1
  93. package/esm2022/dynamic-form/dynamic-form/configurations/structure/row.mjs +1 -1
  94. package/esm2022/dynamic-form/dynamic-form/configurations/structure/section.mjs +1 -1
  95. package/esm2022/dynamic-form/dynamic-form/configurations/structure/structure.mjs +1 -1
  96. package/esm2022/dynamic-form/dynamic-form/dynamic-form.component.mjs +22 -2
  97. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +1 -1
  98. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +1 -1
  99. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.mjs +1 -1
  100. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.mjs +1 -1
  101. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +1 -1
  102. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.mjs +1 -1
  103. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +1 -1
  104. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +1 -1
  105. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.mjs +1 -1
  106. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.mjs +1 -1
  107. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +1 -1
  108. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
  109. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/field.mjs +1 -2
  110. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
  111. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
  112. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.mjs +1 -1
  113. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.mjs +1 -1
  114. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +6 -1
  115. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.mjs +1 -1
  116. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.mjs +1 -1
  117. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +1 -1
  118. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.mjs +1 -1
  119. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.mjs +1 -1
  120. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +3 -3
  121. package/esm2022/dynamic-form/public-api.mjs +2 -2
  122. package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.directive.mjs +17 -1
  123. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +60 -1
  124. package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +25 -5
  125. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +48 -1
  126. package/esm2022/gantt/lib/gantt/gantt.component.mjs +32 -1
  127. package/esm2022/global-search/lib/global-search/global-search.component.mjs +30 -1
  128. package/esm2022/grid-menu/lib/grid-menu/grid-menu.component.mjs +40 -1
  129. package/esm2022/help-popover/lib/help-popover/help-popover.directive.mjs +83 -27
  130. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +40 -3
  131. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +18 -2
  132. package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +33 -4
  133. package/esm2022/inline-edit/lib/inline-edit/inline-edit.component.mjs +16 -1
  134. package/esm2022/insights/lib/insights/insights.component.mjs +23 -1
  135. package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +21 -1
  136. package/esm2022/kanban/lib/kanban/kanban.component.mjs +35 -17
  137. package/esm2022/label-value/lib/label-value/label-value.component.mjs +14 -1
  138. package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +37 -1
  139. package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +24 -1
  140. package/esm2022/locale/lib/locale/locale.service.mjs +8 -1
  141. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +17 -1
  142. package/esm2022/mask/lib/mask/mask-formatter.pipe.mjs +13 -1
  143. package/esm2022/mouse-events/lib/mouse-events/double-click.directive.mjs +16 -3
  144. package/esm2022/mouse-events/lib/mouse-events/long-press.directive.mjs +24 -10
  145. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +20 -1
  146. package/esm2022/number-input/lib/number-input/number-input.directive.mjs +32 -12
  147. package/esm2022/numeric/lib/numeric.pipe.mjs +16 -1
  148. package/esm2022/numeric/lib/numeric.service.mjs +21 -1
  149. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +9 -6
  150. package/esm2022/object-card/lib/object-card/object-card.component.mjs +24 -1
  151. package/esm2022/optional-fields/editor/editor-field.mjs +1 -1
  152. package/esm2022/paginator/lib/paginator/paginator.component.mjs +20 -1
  153. package/esm2022/panel/lib/panel/panel.component.mjs +44 -23
  154. package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +25 -1
  155. package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +54 -1
  156. package/esm2022/picklist/lib/picklist/picklist.component.mjs +33 -2
  157. package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +29 -34
  158. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +86 -2
  159. package/esm2022/progressbar/lib/progressbar/progressbar.component.mjs +53 -3
  160. package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +28 -1
  161. package/esm2022/radio-button/lib/radio-button-group/radio-button-group.component.mjs +27 -1
  162. package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +39 -7
  163. package/esm2022/select/lib/select/select.component.mjs +35 -1
  164. package/esm2022/select-button/lib/select-button/select-button.component.mjs +35 -1
  165. package/esm2022/shared/lib/shared/border-button/border-button.component.mjs +11 -3
  166. package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +54 -1
  167. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.mjs +76 -36
  168. package/esm2022/slider/lib/slider/slider.component.mjs +90 -9
  169. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +25 -4
  170. package/esm2022/split-button/lib/split-button/split-button.component.mjs +24 -2
  171. package/esm2022/star-rating/star-rating/star-rating.component.mjs +17 -1
  172. package/esm2022/stats-card/lib/stats-card/stats-card.component.mjs +32 -10
  173. package/esm2022/stepper/lib/stepper/stepper.component.mjs +20 -1
  174. package/esm2022/structure/lib/structure/footer.component.mjs +11 -1
  175. package/esm2022/switch/lib/switch/switch.component.mjs +22 -2
  176. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +16 -1
  177. package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +29 -3
  178. package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +33 -2
  179. package/esm2022/tabs/lib/tabs/tabs.component.mjs +35 -3
  180. package/esm2022/template/lib/template/template.directive.mjs +14 -2
  181. package/esm2022/text-area/lib/text-area/text-area.component.mjs +28 -1
  182. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +25 -1
  183. package/esm2022/thumbnails/lib/thumbnails/thumbnails.component.mjs +28 -3
  184. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +30 -1
  185. package/esm2022/tile/lib/tile/tile.component.mjs +26 -1
  186. package/esm2022/timeline/lib/timeline/timeline.component.mjs +26 -3
  187. package/esm2022/toast/lib/toast/toast.component.mjs +24 -4
  188. package/esm2022/token-list/lib/token-list/token-list.component.mjs +22 -1
  189. package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +66 -1
  190. package/esm2022/topbar/lib/topbar/topbar.component.mjs +18 -1
  191. package/esm2022/tree/lib/tree/tree.component.mjs +28 -1
  192. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +47 -1
  193. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +85 -0
  194. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  195. package/fesm2022/seniorsistemas-angular-components-alert.mjs +40 -0
  196. package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
  197. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +51 -0
  198. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
  199. package/fesm2022/seniorsistemas-angular-components-badge.mjs +20 -0
  200. package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
  201. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +46 -1
  202. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
  203. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +12 -0
  204. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  205. package/fesm2022/seniorsistemas-angular-components-button.mjs +101 -0
  206. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  207. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +71 -46
  208. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
  209. package/fesm2022/seniorsistemas-angular-components-card.mjs +19 -4
  210. package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
  211. package/fesm2022/seniorsistemas-angular-components-chat.mjs +39 -5
  212. package/fesm2022/seniorsistemas-angular-components-chat.mjs.map +1 -1
  213. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +21 -1
  214. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  215. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +23 -3
  216. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  217. package/fesm2022/seniorsistemas-angular-components-chips.mjs +57 -1
  218. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  219. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +40 -0
  220. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  221. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +18 -0
  222. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
  223. package/fesm2022/seniorsistemas-angular-components-common.mjs +5 -0
  224. package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
  225. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +19 -0
  226. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
  227. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +30 -0
  228. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  229. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +36 -0
  230. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
  231. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +36 -0
  232. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  233. package/fesm2022/seniorsistemas-angular-components-currency.mjs +19 -6
  234. package/fesm2022/seniorsistemas-angular-components-currency.mjs.map +1 -1
  235. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +31 -0
  236. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
  237. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +74 -16
  238. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  239. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +29 -4
  240. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  241. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +16 -0
  242. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs.map +1 -1
  243. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +59 -0
  244. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  245. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +21 -1
  246. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  247. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +47 -0
  248. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  249. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +31 -0
  250. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  251. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +29 -0
  252. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  253. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +39 -0
  254. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
  255. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +80 -24
  256. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  257. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +38 -1
  258. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  259. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +17 -1
  260. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
  261. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +30 -1
  262. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  263. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +15 -0
  264. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  265. package/fesm2022/seniorsistemas-angular-components-insights.mjs +22 -0
  266. package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
  267. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +20 -0
  268. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
  269. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +29 -11
  270. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  271. package/fesm2022/seniorsistemas-angular-components-label-value.mjs +13 -0
  272. package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
  273. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +59 -0
  274. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
  275. package/fesm2022/seniorsistemas-angular-components-locale.mjs +7 -0
  276. package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
  277. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +16 -0
  278. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
  279. package/fesm2022/seniorsistemas-angular-components-mask.mjs +12 -0
  280. package/fesm2022/seniorsistemas-angular-components-mask.mjs.map +1 -1
  281. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +35 -8
  282. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs.map +1 -1
  283. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +19 -0
  284. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  285. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +31 -11
  286. package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
  287. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +8 -5
  288. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
  289. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +35 -0
  290. package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
  291. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +23 -0
  292. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  293. package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs.map +1 -1
  294. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +19 -0
  295. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  296. package/fesm2022/seniorsistemas-angular-components-panel.mjs +39 -18
  297. package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
  298. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +77 -0
  299. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
  300. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +32 -1
  301. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  302. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +28 -33
  303. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
  304. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +85 -1
  305. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  306. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +52 -2
  307. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
  308. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +53 -0
  309. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
  310. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +36 -4
  311. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
  312. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +34 -0
  313. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  314. package/fesm2022/seniorsistemas-angular-components-select.mjs +34 -0
  315. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  316. package/fesm2022/seniorsistemas-angular-components-shared.mjs +9 -1
  317. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  318. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +53 -0
  319. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
  320. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +71 -31
  321. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
  322. package/fesm2022/seniorsistemas-angular-components-slider.mjs +89 -8
  323. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  324. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +24 -3
  325. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
  326. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +22 -0
  327. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  328. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +16 -0
  329. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  330. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +30 -8
  331. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
  332. package/fesm2022/seniorsistemas-angular-components-stepper.mjs +19 -0
  333. package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
  334. package/fesm2022/seniorsistemas-angular-components-structure.mjs +10 -0
  335. package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
  336. package/fesm2022/seniorsistemas-angular-components-switch.mjs +20 -0
  337. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  338. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +28 -2
  339. package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
  340. package/fesm2022/seniorsistemas-angular-components-table.mjs +15 -0
  341. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  342. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +65 -2
  343. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
  344. package/fesm2022/seniorsistemas-angular-components-template.mjs +13 -1
  345. package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
  346. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +27 -0
  347. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  348. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +24 -0
  349. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  350. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +26 -1
  351. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
  352. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +29 -0
  353. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  354. package/fesm2022/seniorsistemas-angular-components-tile.mjs +25 -0
  355. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  356. package/fesm2022/seniorsistemas-angular-components-timeline.mjs +25 -2
  357. package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
  358. package/fesm2022/seniorsistemas-angular-components-toast.mjs +22 -2
  359. package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
  360. package/fesm2022/seniorsistemas-angular-components-token-list.mjs +21 -0
  361. package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
  362. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +65 -0
  363. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  364. package/fesm2022/seniorsistemas-angular-components-topbar.mjs +17 -0
  365. package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
  366. package/fesm2022/seniorsistemas-angular-components-tree.mjs +27 -0
  367. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  368. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +46 -0
  369. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  370. package/fieldset/lib/fieldset/fieldset.component.d.ts +23 -3
  371. package/file-picker/lib/file-picker/file-picker.component.d.ts +47 -0
  372. package/gantt/lib/gantt/gantt.component.d.ts +31 -0
  373. package/global-search/lib/global-search/global-search.component.d.ts +29 -0
  374. package/grid-menu/lib/grid-menu/grid-menu.component.d.ts +39 -0
  375. package/help-popover/lib/help-popover/help-popover.directive.d.ts +67 -17
  376. package/image-cropper/lib/image-cropper/image-cropper.component.d.ts +38 -0
  377. package/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.d.ts +15 -0
  378. package/info-sign/lib/info-sign/info-sign.directive.d.ts +30 -1
  379. package/inline-edit/lib/inline-edit/inline-edit.component.d.ts +15 -0
  380. package/insights/lib/insights/insights.component.d.ts +22 -0
  381. package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +20 -0
  382. package/kanban/lib/kanban/kanban.component.d.ts +25 -5
  383. package/label-value/lib/label-value/label-value.component.d.ts +13 -0
  384. package/loading-state/lib/loading-state/loading-state.component.d.ts +36 -0
  385. package/loading-state/lib/loading-state/loading-state.directive.d.ts +23 -0
  386. package/locale/lib/locale/locale.service.d.ts +7 -0
  387. package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +16 -0
  388. package/mask/lib/mask/mask-formatter.pipe.d.ts +12 -0
  389. package/mouse-events/lib/mouse-events/double-click.directive.d.ts +13 -0
  390. package/mouse-events/lib/mouse-events/long-press.directive.d.ts +16 -2
  391. package/navigation-button/lib/navigation-button/navigation-button.component.d.ts +19 -0
  392. package/number-input/lib/number-input/number-input.directive.d.ts +19 -1
  393. package/numeric/lib/numeric.pipe.d.ts +15 -0
  394. package/numeric/lib/numeric.service.d.ts +20 -0
  395. package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +5 -4
  396. package/object-card/lib/object-card/object-card.component.d.ts +23 -0
  397. package/optional-fields/editor/editor-field.d.ts +19 -0
  398. package/package.json +18 -18
  399. package/paginator/lib/paginator/paginator.component.d.ts +19 -0
  400. package/panel/lib/panel/panel.component.d.ts +24 -3
  401. package/password-strength/lib/password-strength/password-strength.component.d.ts +24 -0
  402. package/password-strength/lib/password-strength/password-strength.directive.d.ts +53 -0
  403. package/picklist/lib/picklist/picklist.component.d.ts +29 -0
  404. package/pin-code-field/lib/pin-code-field/pin-code-field.component.d.ts +28 -33
  405. package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +85 -1
  406. package/progressbar/lib/progressbar/progressbar.component.d.ts +50 -0
  407. package/radio-button/lib/radio-button/radio-button.component.d.ts +27 -0
  408. package/radio-button/lib/radio-button-group/radio-button-group.component.d.ts +26 -0
  409. package/rating-scale/lib/rating-scale/rating-scale.component.d.ts +30 -2
  410. package/select/lib/select/select.component.d.ts +34 -0
  411. package/select-button/lib/select-button/select-button.component.d.ts +34 -0
  412. package/shared/lib/shared/border-button/border-button.component.d.ts +10 -2
  413. package/sidebar/lib/sidebar/sidebar.component.d.ts +53 -0
  414. package/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.d.ts +53 -2
  415. package/slider/lib/slider/slider.component.d.ts +72 -0
  416. package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +18 -0
  417. package/split-button/lib/split-button/split-button.component.d.ts +22 -0
  418. package/star-rating/star-rating/star-rating.component.d.ts +16 -0
  419. package/stats-card/lib/stats-card/stats-card.component.d.ts +28 -0
  420. package/stepper/lib/stepper/stepper.component.d.ts +19 -0
  421. package/structure/lib/structure/footer.component.d.ts +10 -0
  422. package/switch/lib/switch/switch.component.d.ts +20 -0
  423. package/table/lib/table/table-column/table-columns.component.d.ts +15 -0
  424. package/table-header/lib/table-header/table-header-checkbox.component.d.ts +18 -0
  425. package/tabs/lib/tab-item/tab-item.component.d.ts +31 -0
  426. package/tabs/lib/tabs/tabs.component.d.ts +28 -0
  427. package/template/lib/template/template.directive.d.ts +12 -0
  428. package/text-area/lib/text-area/text-area.component.d.ts +27 -0
  429. package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +24 -0
  430. package/thumbnails/lib/thumbnails/thumbnails.component.d.ts +27 -2
  431. package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +29 -0
  432. package/tile/lib/tile/tile.component.d.ts +25 -0
  433. package/timeline/lib/timeline/timeline.component.d.ts +24 -0
  434. package/toast/lib/toast/toast.component.d.ts +22 -2
  435. package/token-list/lib/token-list/token-list.component.d.ts +21 -0
  436. package/tooltip/lib/tooltip/tooltip.directive.d.ts +65 -0
  437. package/topbar/lib/topbar/topbar.component.d.ts +17 -0
  438. package/tree/lib/tree/tree.component.d.ts +27 -0
  439. package/workspace-switch/lib/workspace-switch/workspace-switch.component.d.ts +46 -0
@@ -1,11 +1,27 @@
1
- import { Directive, ElementRef, EventEmitter, HostListener, inject, Input, Output, ViewContainerRef } from '@angular/core';
1
+ import { Directive, ElementRef, EventEmitter, HostListener, inject, Input, Output, ViewContainerRef, } from '@angular/core';
2
2
  import { Subject } from 'rxjs';
3
3
  import { debounceTime, takeUntil } from 'rxjs/operators';
4
4
  import { HelpPopoverComponent } from './help-popover/help-popover.component';
5
- import { getElementLeftoverContentAvailable, getElementPositionInfo, isMousePositionOutsideOfElement } from '@seniorsistemas/angular-components/utils';
5
+ import { getElementLeftoverContentAvailable, getElementPositionInfo, isMousePositionOutsideOfElement, } from '@seniorsistemas/angular-components/utils';
6
6
  import * as i0 from "@angular/core";
7
+ /**
8
+ * @description Diretiva que exibe um popover de ajuda ao clicar no elemento hospedeiro.
9
+ * O popover suporta conteúdo como texto simples ou `TemplateRef`, além de botão de fechar,
10
+ * ícone, cabeçalho, rodapé e posição configurável. Pode ser acionado programaticamente.
11
+ *
12
+ * @example
13
+ * ```html
14
+ * <button [sHelpPopover]="'Informe aqui o seu CPF'" popoverPosition="right">?</button>
15
+ * ```
16
+ *
17
+ * @category Overlay
18
+ */
7
19
  export class HelpPopoverDirective {
8
- MUTATION_OBSERVER_CONFIG = { attributes: true, childList: true, subtree: true };
20
+ MUTATION_OBSERVER_CONFIG = {
21
+ attributes: true,
22
+ childList: true,
23
+ subtree: true,
24
+ };
9
25
  OBSERVER_CALLBACK = () => {
10
26
  if (!this.componentRef) {
11
27
  return;
@@ -15,22 +31,60 @@ export class HelpPopoverDirective {
15
31
  RESIZE_OBSERVER = () => {
16
32
  this.onResize$.next();
17
33
  };
34
+ /**
35
+ * @description Conteúdo do popover. Aceita uma `string` com texto simples ou um `TemplateRef`
36
+ * para renderizar conteúdo Angular customizado dentro do popover.
37
+ */
18
38
  sHelpPopover = null;
39
+ /**
40
+ * @description Quando `true`, exibe o botão de fechar (X) no cabeçalho do popover.
41
+ *
42
+ * @default true
43
+ */
19
44
  closeButton = true;
45
+ /**
46
+ * @description Classe de ícone exibida no cabeçalho do popover (ex: classe de Font Awesome).
47
+ */
20
48
  popoverIcon = '';
49
+ /**
50
+ * @description Texto exibido no cabeçalho do popover.
51
+ */
21
52
  popoverHeader = '';
53
+ /**
54
+ * @description Texto exibido no rodapé do popover.
55
+ */
22
56
  popoverFooter = '';
57
+ /**
58
+ * @description Texto do botão de ação exibido no rodapé do popover.
59
+ * Ao clicar, emite o evento `buttonClicked`.
60
+ */
23
61
  popoverButtonText = '';
62
+ /**
63
+ * @description Alinhamento da seta indicadora em relação ao lado do popover.
64
+ * Valores aceitos: `'beginning'` (padrão), `'middle'`, `'end'`.
65
+ *
66
+ * @default 'beginning'
67
+ */
24
68
  popoverArrowPosition = 'beginning';
25
- _popoverPosition = 'bottom';
26
- get popoverPosition() {
27
- return this._popoverPosition;
28
- }
69
+ /**
70
+ * @description Posição do popover em relação ao elemento hospedeiro.
71
+ * Valores aceitos: `'top'`, `'bottom'` (padrão), `'left'`, `'right'`.
72
+ * O componente tenta reposicionar automaticamente caso não haja espaço.
73
+ *
74
+ * @default 'bottom'
75
+ */
29
76
  set popoverPosition(value) {
30
77
  this._popoverPosition = value;
31
78
  this.internalPosition = value;
32
79
  }
80
+ get popoverPosition() {
81
+ return this._popoverPosition;
82
+ }
83
+ /**
84
+ * @description Emitido quando o usuário clica no botão de ação do rodapé do popover.
85
+ */
33
86
  buttonClicked = new EventEmitter();
87
+ _popoverPosition = 'bottom';
34
88
  onDestroy$ = new Subject();
35
89
  componentRef = null;
36
90
  mutationObserverPopoverElement = null;
@@ -185,7 +239,7 @@ export class HelpPopoverDirective {
185
239
  _horizontalLeft = popoverElementPosition.right - popoverWidth;
186
240
  }
187
241
  else if (this.popoverArrowPosition === 'middle') {
188
- _horizontalLeft = (popoverElementPosition.left + popoverElementPosition.elementWidth / 2) - (popoverWidth / 2);
242
+ _horizontalLeft = popoverElementPosition.left + popoverElementPosition.elementWidth / 2 - popoverWidth / 2;
189
243
  }
190
244
  return _horizontalLeft;
191
245
  }
@@ -202,7 +256,9 @@ export class HelpPopoverDirective {
202
256
  top = `calc(${popoverElementPosition.top}px + ${popoverElementPosition.elementHeight / 2}px - ${distanceArrowFromStart + arrowMiddle}px)`;
203
257
  }
204
258
  else if (this.popoverArrowPosition === 'end') {
205
- const distanceArrowFromEnd = (popoverContentPosition.top + popoverContentPosition.elementHeight) - (arrowElementPosition.top + arrowElementPosition.elementHeight);
259
+ const distanceArrowFromEnd = popoverContentPosition.top +
260
+ popoverContentPosition.elementHeight -
261
+ (arrowElementPosition.top + arrowElementPosition.elementHeight);
206
262
  top = `calc(${popoverElementPosition.top}px - ${popoverContentPosition.elementHeight}px + ${popoverElementPosition.elementHeight / 2}px + ${distanceArrowFromEnd + arrowMiddle}px)`;
207
263
  }
208
264
  return top;
@@ -217,21 +273,21 @@ export class HelpPopoverDirective {
217
273
  return this.componentRef?.instance;
218
274
  }
219
275
  /**
220
- * Given the current position of the popover and the available space around
221
- * the trigger element, this function will return the position that the popover
222
- * will be set at.
223
- *
224
- * If the popover will fit at the given position, it will return the same
225
- * position.
226
- *
227
- * If the popover will not fit at the given position, it will return the position
228
- * that has the most available space (top or bottom).
229
- *
230
- * If there is no position with available space, it will return the given
231
- * position.
232
- *
233
- * @returns The position that the popover will be set at.
234
- */
276
+ * Given the current position of the popover and the available space around
277
+ * the trigger element, this function will return the position that the popover
278
+ * will be set at.
279
+ *
280
+ * If the popover will fit at the given position, it will return the same
281
+ * position.
282
+ *
283
+ * If the popover will not fit at the given position, it will return the position
284
+ * that has the most available space (top or bottom).
285
+ *
286
+ * If there is no position with available space, it will return the given
287
+ * position.
288
+ *
289
+ * @returns The position that the popover will be set at.
290
+ */
235
291
  get validPosition() {
236
292
  const { freeDistanceToBottom, freeDistanceToTop, freeDistanceToLeft, freeDistanceToRight } = this.getLeftoverContentAvailableForPopover();
237
293
  const popoverElementPosition = getElementPositionInfo(this.getPopoverElement);
@@ -268,7 +324,7 @@ export class HelpPopoverDirective {
268
324
  {
269
325
  position: 'top',
270
326
  freeDistance: remainingSpaceTop,
271
- }
327
+ },
272
328
  ].filter((x) => x.freeDistance > 0);
273
329
  if (freePositions.length === 0) {
274
330
  return this.popoverPosition;
@@ -287,7 +343,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
287
343
  type: Directive,
288
344
  args: [{
289
345
  selector: '[sHelpPopover]',
290
- exportAs: 'sHelpPopover'
346
+ exportAs: 'sHelpPopover',
291
347
  }]
292
348
  }], propDecorators: { sHelpPopover: [{
293
349
  type: Input
@@ -311,4 +367,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
311
367
  type: HostListener,
312
368
  args: ['click']
313
369
  }] } });
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC1wb3BvdmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9oZWxwLXBvcG92ZXIvc3JjL2xpYi9oZWxwLXBvcG92ZXIvaGVscC1wb3BvdmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekssT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTdFLE9BQU8sRUFBNEMsa0NBQWtDLEVBQUUsc0JBQXNCLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFPak0sTUFBTSxPQUFPLG9CQUFvQjtJQUNkLHdCQUF3QixHQUF5QixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDdEcsaUJBQWlCLEdBQUcsR0FBRyxFQUFFO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDLENBQUE7SUFDZ0IsZUFBZSxHQUFHLEdBQUcsRUFBRTtRQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUMsQ0FBQTtJQUNRLFlBQVksR0FBcUMsSUFBSSxDQUFDO0lBQ3RELFdBQVcsR0FB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YSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sdUJBQXVCLENBQUMsUUFBUSxDQUFDO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO3dHQTNTVSxvQkFBb0I7NEZBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsY0FBYztpQkFDekI7OEJBWVUsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBTUssZUFBZTtzQkFEekIsS0FBSztnQkFLSSxhQUFhO3NCQUF0QixNQUFNO2dCQW9DUCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSGVscFBvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuL2hlbHAtcG9wb3Zlci9oZWxwLXBvcG92ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEhlbHBQb3BvdmVyQXJyb3dQb3NpdGlvbiwgSGVscFBvcG92ZXJQb3NpdGlvbiB9IGZyb20gJy4vbW9kZWxzL2hlbHAtcG9wb3Zlci5tb2RlbHMnO1xuaW1wb3J0IHsgRWxlbWVudExlZnRvdmVyUG9zaXRpb24sIEVsZW1lbnRQb3NpdGlvbiwgZ2V0RWxlbWVudExlZnRvdmVyQ29udGVudEF2YWlsYWJsZSwgZ2V0RWxlbWVudFBvc2l0aW9uSW5mbywgaXNNb3VzZVBvc2l0aW9uT3V0c2lkZU9mRWxlbWVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzSGVscFBvcG92ZXJdJyxcbiAgZXhwb3J0QXM6ICdzSGVscFBvcG92ZXInXG59KVxuZXhwb3J0IGNsYXNzIEhlbHBQb3BvdmVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IE1VVEFUSU9OX09CU0VSVkVSX0NPTkZJRzogTXV0YXRpb25PYnNlcnZlckluaXQgPSB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9O1xuICBwcml2YXRlIHJlYWRvbmx5IE9CU0VSVkVSX0NBTExCQUNLID0gKCkgPT4ge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hcHBseVBvc2l0aW9uSW50b0VsZW1lbnQoKTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IFJFU0laRV9PQlNFUlZFUiA9ICgpID0+IHtcbiAgICB0aGlzLm9uUmVzaXplJC5uZXh0KCk7XG4gIH1cbiAgQElucHV0KCkgc0hlbHBQb3BvdmVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGNsb3NlQnV0dG9uID0gdHJ1ZTtcbiAgQElucHV0KCkgcG9wb3Zlckljb24gPSAnJztcbiAgQElucHV0KCkgcG9wb3ZlckhlYWRlciA9ICcnO1xuICBASW5wdXQoKSBwb3BvdmVyRm9vdGVyID0gJyc7XG4gIEBJbnB1dCgpIHBvcG92ZXJCdXR0b25UZXh0ID0gJyc7XG4gIEBJbnB1dCgpIHBvcG92ZXJBcnJvd1Bvc2l0aW9uOiBIZWxwUG9wb3ZlckFycm93UG9zaXRpb24gPSAnYmVnaW5uaW5nJztcbiAgcHJpdmF0ZSBfcG9wb3ZlclBvc2l0aW9uOiBIZWxwUG9wb3ZlclBvc2l0aW9uID0gJ2JvdHRvbSc7XG4gIHB1YmxpYyBnZXQgcG9wb3ZlclBvc2l0aW9uKCk6IEhlbHBQb3BvdmVyUG9zaXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wb3BvdmVyUG9zaXRpb247XG4gIH1cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwb3BvdmVyUG9zaXRpb24odmFsdWU6IEhlbHBQb3BvdmVyUG9zaXRpb24pIHtcbiAgICB0aGlzLl9wb3BvdmVyUG9zaXRpb24gPSB2YWx1ZTtcbiAgICB0aGlzLmludGVybmFsUG9zaXRpb24gPSB2YWx1ZTtcbiAgfVxuICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBwcml2YXRlIG9uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPEhlbHBQb3BvdmVyQ29tcG9uZW50PiB8IG51bGwgPSBudWxsXG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlclBvcG92ZXJFbGVtZW50OiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlclBvcG92ZXJDb250ZW50OiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaW50ZXJuYWxQb3NpdGlvbjogSGVscFBvcG92ZXJQb3NpdGlvbiA9ICdib3R0b20nO1xuICBwcml2YXRlIG9uUmVzaXplJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgbWFudWFsVHJpZ2dlciA9IGZhbHNlO1xuICBwcml2YXRlIGxpc3RlbmVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b3RhbEVsZW1lbnRBcmVhID0gdGhpcy5nZXRQb3BvdmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBpZiAoaXNNb3VzZVBvc2l0aW9uT3V0c2lkZU9mRWxlbWVudChldmVudCwgdG90YWxFbGVtZW50QXJlYSkpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgcG9wb3ZlckVsZW1lbnRPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMuT0JTRVJWRVJfQ0FMTEJBQ0spO1xuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJFbGVtZW50ID0gcG9wb3ZlckVsZW1lbnRPYnNlcnZlcjtcbiAgICBwb3BvdmVyRWxlbWVudE9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuTVVUQVRJT05fT0JTRVJWRVJfQ09ORklHKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5SRVNJWkVfT0JTRVJWRVIpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGxlbmQnLCB0aGlzLk9CU0VSVkVSX0NBTExCQUNLKTtcbiAgICB0aGlzLm9uUmVzaXplJC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMTAwKSkuc3Vic2NyaWJlKHRoaXMuT0JTRVJWRVJfQ0FMTEJBQ0spXG4gIH1cblxuICBzaG93KCkge1xuICAgIHRoaXMubWFudWFsVHJpZ2dlciA9IHRydWU7XG4gICAgdGhpcy5fY3JlYXRlQ29tcG9uZW50KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIGRvQ2xpY2soKSB7XG4gICAgaWYgKHRoaXMubWFudWFsVHJpZ2dlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jcmVhdGVDb21wb25lbnQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgaWYgKHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJFbGVtZW50KSB7XG4gICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyRWxlbWVudC5kaXNjb25uZWN0KCk7XG4gICAgfVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLlJFU0laRV9PQlNFUlZFUik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbGVuZCcsIHRoaXMuT0JTRVJWRVJfQ0FMTEJBQ0spO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlQ29tcG9uZW50KCkge1xuICAgIGlmICghdGhpcy5zSGVscFBvcG92ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChIZWxwUG9wb3ZlckNvbXBvbmVudCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSBjb21wb25lbnRSZWY7XG4gICAgaWYgKHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJDb250ZW50KSB7XG4gICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyQ29udGVudC5kaXNjb25uZWN0KCk7XG4gICAgfVxuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJDb250ZW50ID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5PQlNFUlZFUl9DQUxMQkFDSyk7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyUG9wb3ZlckNvbnRlbnQub2JzZXJ2ZShlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wb3BvdmVyLWNvbnRlbnQnKSBhcyBIVE1MRWxlbWVudCwgdGhpcy5NVVRBVElPTl9PQlNFUlZFUl9DT05GSUcpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmxpc3RlbmVyKTtcbiAgICB9KVxuICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICBjb21wb25lbnQucG9wb3ZlckNvbnRlbnQgPSB0aGlzLnNIZWxwUG9wb3ZlcjtcbiAgICBjb21wb25lbnQuY2xvc2VCdXR0b24gPSB0aGlzLmNsb3NlQnV0dG9uO1xuICAgIGNvbXBvbmVudC5pY29uID0gdGhpcy5wb3BvdmVySWNvbjtcbiAgICBjb21wb25lbnQuaGVhZGVyID0gdGhpcy5wb3BvdmVySGVhZGVyO1xuICAgIGNvbXBvbmVudC5mb290ZXIgPSB0aGlzLnBvcG92ZXJGb290ZXI7XG4gICAgY29tcG9uZW50LmJ1dHRvbiA9IHRoaXMucG9wb3ZlckJ1dHRvblRleHQ7XG4gICAgY29tcG9uZW50LnBvc2l0aW9uID0gdGhpcy5pbnRlcm5hbFBvc2l0aW9uO1xuICAgIGNvbXBvbmVudC5hcnJvd1Bvc2l0aW9uID0gdGhpcy5wb3BvdmVyQXJyb3dQb3NpdGlvbjtcbiAgICBjb21wb25lbnQuYnV0dG9uQ2xpY2tlZCA9IHRoaXMuYnV0dG9uQ2xpY2tlZDtcbiAgICBjb21wb25lbnQuY2xvc2VkLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9KVxuICAgIHRoaXMuYXBwbHlQb3NpdGlvbkludG9FbGVtZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3koKSB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmxpc3RlbmVyKTtcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmludGVybmFsUG9zaXRpb24gPSB0aGlzLnBvcG92ZXJQb3NpdGlvbjtcblxuICAgIGlmICh0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyQ29udGVudCkge1xuICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyUG9wb3ZlckNvbnRlbnQuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQb3NpdGlvbkludG9FbGVtZW50KCkge1xuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50UG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb25JbmZvKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMudmFsaWRQb3NpdGlvbjtcbiAgICB0aGlzLmludGVybmFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRJbnN0YW5jZS5wb3NpdGlvbiA9IHRoaXMuaW50ZXJuYWxQb3NpdGlvbjtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHN3aXRjaCAodGhpcy5pbnRlcm5hbFBvc2l0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6IHtcbiAgICAgICAgICB0aGlzLmFwcGx5UG9wb3ZlclBvc2l0aW9uQm90dG9tKHBvcG92ZXJFbGVtZW50UG9zaXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3RvcCc6IHtcbiAgICAgICAgICB0aGlzLmFwcGx5UG9wb3ZlclBvc2l0aW9uVG9wKHBvcG92ZXJFbGVtZW50UG9zaXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2xlZnQnOiB7XG4gICAgICAgICAgdGhpcy5hcHBseVBvcG92ZXJQb3NpdGlvbkxlZnQocG9wb3ZlckVsZW1lbnRQb3NpdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAncmlnaHQnOiB7XG4gICAgICAgICAgdGhpcy5hcHBseVBvcG92ZXJQb3NpdGlvblJpZ2h0KHBvcG92ZXJFbGVtZW50UG9zaXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRJbnN0YW5jZS52aXNpYmxlID0gdHJ1ZTtcbiAgICB9KVxuXG4gIH1cblxuICBwcml2YXRlIGFwcGx5UG9wb3ZlclBvc2l0aW9uQm90dG9tKHBvcG92ZXJFbGVtZW50UG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbikge1xuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50ID0gdGhpcy5nZXRQb3BvdmVyRWxlbWVudDtcbiAgICBjb25zdCBsZWZ0UG9wb3ZlciA9IHRoaXMuZ2V0SG9yaXpvbnRhbExlZnQocG9wb3ZlckVsZW1lbnRQb3NpdGlvbilcbiAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnRQb3BvdmVyfXB4YDtcbiAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS50b3AgPSBgY2FsYygke3BvcG92ZXJFbGVtZW50UG9zaXRpb24udG9wfXB4ICsgJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLmVsZW1lbnRIZWlnaHR9cHgpYFxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVBvcG92ZXJQb3NpdGlvblRvcChwb3BvdmVyRWxlbWVudFBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24pIHtcbiAgICBjb25zdCBwb3BvdmVyRWxlbWVudCA9IHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQ7XG4gICAgY29uc3QgbGVmdFBvcG92ZXIgPSB0aGlzLmdldEhvcml6b250YWxMZWZ0KHBvcG92ZXJFbGVtZW50UG9zaXRpb24pXG4gICAgY29uc3QgcG9wb3ZlckhlaWdodCA9IHBvcG92ZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnRQb3BvdmVyfXB4YDtcbiAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS50b3AgPSBgY2FsYygke3BvcG92ZXJFbGVtZW50UG9zaXRpb24udG9wfXB4IC0gJHtwb3BvdmVySGVpZ2h0fXB4KWA7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5UG9wb3ZlclBvc2l0aW9uTGVmdChwb3BvdmVyRWxlbWVudFBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24pIHtcbiAgICBjb25zdCBwb3BvdmVyRWxlbWVudCA9IHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQ7XG4gICAgY29uc3QgcG9wb3ZlcldpZHRoID0gcG9wb3ZlckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLmxlZnQgPSBgY2FsYygke3BvcG92ZXJFbGVtZW50UG9zaXRpb24ucmlnaHR9cHggLSAke3BvcG92ZXJXaWR0aCArIHBvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudFdpZHRofXB4KWA7XG4gICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUudG9wID0gdGhpcy5nZXRWZXJ0aWNhbFRvcChwb3BvdmVyRWxlbWVudFBvc2l0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQb3BvdmVyUG9zaXRpb25SaWdodChwb3BvdmVyRWxlbWVudFBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24pIHtcbiAgICBjb25zdCBwb3BvdmVyRWxlbWVudCA9IHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQ7XG4gICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLmxlZnQgPSBgY2FsYygke3BvcG92ZXJFbGVtZW50UG9zaXRpb24ucmlnaHR9cHgpYDtcbiAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLmdldFZlcnRpY2FsVG9wKHBvcG92ZXJFbGVtZW50UG9zaXRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRIb3Jpem9udGFsTGVmdChwb3BvdmVyRWxlbWVudFBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24pIHtcbiAgICBjb25zdCBwb3BvdmVyRWxlbWVudCA9IHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQ7XG4gICAgY29uc3QgcG9wb3ZlcldpZHRoID0gcG9wb3ZlckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgbGV0IF9ob3Jpem9udGFsTGVmdCA9IHBvcG92ZXJFbGVtZW50UG9zaXRpb24ubGVmdDtcbiAgICBpZiAodGhpcy5wb3BvdmVyQXJyb3dQb3NpdGlvbiA9PT0gJ2VuZCcpIHtcbiAgICAgIF9ob3Jpem9udGFsTGVmdCA9IHBvcG92ZXJFbGVtZW50UG9zaXRpb24ucmlnaHQgLSBwb3BvdmVyV2lkdGg7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBvcG92ZXJBcnJvd1Bvc2l0aW9uID09PSAnbWlkZGxlJykge1xuICAgICAgX2hvcml6b250YWxMZWZ0ID0gKHBvcG92ZXJFbGVtZW50UG9zaXRpb24ubGVmdCArIHBvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudFdpZHRoIC8gMikgLSAocG9wb3ZlcldpZHRoIC8gMik7XG4gICAgfVxuICAgIHJldHVybiBfaG9yaXpvbnRhbExlZnQ7XG4gIH1cblxuICBwcml2YXRlIGdldFZlcnRpY2FsVG9wKHBvcG92ZXJFbGVtZW50UG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbikge1xuICAgIGNvbnN0IGFycm93RWxlbWVudCA9IHRoaXMucG9wb3ZlckNvbXBvbmVudEluc3RhbmNlLmFycm93RWxlbWVudD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBhcnJvd0VsZW1lbnRQb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbkluZm8oYXJyb3dFbGVtZW50KTtcbiAgICBjb25zdCBwb3BvdmVyQ29udGVudFBvc2l0aW9uID0gZ2V0RWxlbWVudFBvc2l0aW9uSW5mbyh0aGlzLmdldFBvcG92ZXJFbGVtZW50KTtcbiAgICBjb25zdCBwb3BvdmVyRWxlbWVudCA9IHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQ7XG4gICAgY29uc3QgcG9wb3ZlckhlaWdodCA9IHBvcG92ZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICBsZXQgdG9wID0gYGNhbGMoJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLnRvcH1weCAtICR7cG9wb3ZlckhlaWdodCAvIDJ9cHggKyAke3BvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCAvIDJ9cHgpYDtcblxuICAgIGNvbnN0IGFycm93TWlkZGxlID0gYXJyb3dFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCAvIDI7XG4gICAgaWYgKHRoaXMucG9wb3ZlckFycm93UG9zaXRpb24gPT09ICdiZWdpbm5pbmcnKSB7XG4gICAgICBjb25zdCBkaXN0YW5jZUFycm93RnJvbVN0YXJ0ID0gYXJyb3dFbGVtZW50UG9zaXRpb24udG9wIC0gcG9wb3ZlckNvbnRlbnRQb3NpdGlvbi50b3A7XG4gICAgICB0b3AgPSBgY2FsYygke3BvcG92ZXJFbGVtZW50UG9zaXRpb24udG9wfXB4ICsgJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLmVsZW1lbnRIZWlnaHQgLyAyfXB4IC0gJHtkaXN0YW5jZUFycm93RnJvbVN0YXJ0ICsgYXJyb3dNaWRkbGV9cHgpYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMucG9wb3ZlckFycm93UG9zaXRpb24gPT09ICdlbmQnKSB7XG4gICAgICBjb25zdCBkaXN0YW5jZUFycm93RnJvbUVuZCA9IChwb3BvdmVyQ29udGVudFBvc2l0aW9uLnRvcCArIHBvcG92ZXJDb250ZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCkgLSAoYXJyb3dFbGVtZW50UG9zaXRpb24udG9wICsgYXJyb3dFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCk7XG4gICAgICB0b3AgPSBgY2FsYygke3BvcG92ZXJFbGVtZW50UG9zaXRpb24udG9wfXB4IC0gJHtwb3BvdmVyQ29udGVudFBvc2l0aW9uLmVsZW1lbnRIZWlnaHR9cHggKyAke3BvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCAvIDJ9cHggKyAke2Rpc3RhbmNlQXJyb3dGcm9tRW5kICsgYXJyb3dNaWRkbGV9cHgpYDtcbiAgICB9XG4gICAgcmV0dXJuIHRvcDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGVmdG92ZXJDb250ZW50QXZhaWxhYmxlRm9yUG9wb3ZlcigpOiBFbGVtZW50TGVmdG92ZXJQb3NpdGlvbiB7XG4gICAgcmV0dXJuIGdldEVsZW1lbnRMZWZ0b3ZlckNvbnRlbnRBdmFpbGFibGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZ2V0UG9wb3ZlckVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFJlZj8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBvcG92ZXJDb21wb25lbnRJbnN0YW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlIGFzIEhlbHBQb3BvdmVyQ29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gKiBHaXZlbiB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgcG9wb3ZlciBhbmQgdGhlIGF2YWlsYWJsZSBzcGFjZSBhcm91bmRcbiAqIHRoZSB0cmlnZ2VyIGVsZW1lbnQsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHBvc2l0aW9uIHRoYXQgdGhlIHBvcG92ZXJcbiAqIHdpbGwgYmUgc2V0IGF0LlxuICpcbiAqIElmIHRoZSBwb3BvdmVyIHdpbGwgZml0IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiwgaXQgd2lsbCByZXR1cm4gdGhlIHNhbWVcbiAqIHBvc2l0aW9uLlxuICpcbiAqIElmIHRoZSBwb3BvdmVyIHdpbGwgbm90IGZpdCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24sIGl0IHdpbGwgcmV0dXJuIHRoZSBwb3NpdGlvblxuICogdGhhdCBoYXMgdGhlIG1vc3QgYXZhaWxhYmxlIHNwYWNlICh0b3Agb3IgYm90dG9tKS5cbiAqXG4gKiBJZiB0aGVyZSBpcyBubyBwb3NpdGlvbiB3aXRoIGF2YWlsYWJsZSBzcGFjZSwgaXQgd2lsbCByZXR1cm4gdGhlIGdpdmVuXG4gKiBwb3NpdGlvbi5cbiAqXG4gKiBAcmV0dXJucyBUaGUgcG9zaXRpb24gdGhhdCB0aGUgcG9wb3ZlciB3aWxsIGJlIHNldCBhdC5cbiAqL1xuICBwcml2YXRlIGdldCB2YWxpZFBvc2l0aW9uKCk6IEhlbHBQb3BvdmVyUG9zaXRpb24ge1xuICAgIGNvbnN0IHsgZnJlZURpc3RhbmNlVG9Cb3R0b20sIGZyZWVEaXN0YW5jZVRvVG9wLCBmcmVlRGlzdGFuY2VUb0xlZnQsIGZyZWVEaXN0YW5jZVRvUmlnaHQgfSA9IHRoaXMuZ2V0TGVmdG92ZXJDb250ZW50QXZhaWxhYmxlRm9yUG9wb3ZlcigpO1xuXG4gICAgY29uc3QgcG9wb3ZlckVsZW1lbnRQb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbkluZm8odGhpcy5nZXRQb3BvdmVyRWxlbWVudCk7XG4gICAgY29uc3QgcG9wb3ZlckVsZW1lbnRXaWR0aCA9IHBvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudFdpZHRoO1xuICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50SGVpZ2h0ID0gcG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5lbGVtZW50SGVpZ2h0O1xuXG4gICAgY29uc3QgcmVtYWluaW5nU3BhY2VCb3R0b20gPSBmcmVlRGlzdGFuY2VUb0JvdHRvbSAtIHBvcG92ZXJFbGVtZW50SGVpZ2h0O1xuICAgIGNvbnN0IHJlbWFpbmluZ1NwYWNlVG9wID0gZnJlZURpc3RhbmNlVG9Ub3AgLSBwb3BvdmVyRWxlbWVudEhlaWdodDtcbiAgICBjb25zdCByZW1haW5pbmdTcGFjZUxlZnQgPSBmcmVlRGlzdGFuY2VUb0xlZnQgLSBwb3BvdmVyRWxlbWVudFdpZHRoO1xuICAgIGNvbnN0IHJlbWFpbmluZ1NwYWNlUmlnaHQgPSBmcmVlRGlzdGFuY2VUb1JpZ2h0IC0gcG9wb3ZlckVsZW1lbnRXaWR0aDtcblxuICAgIGNvbnN0IGNhblNldEF0Qm90dG9tID0gcmVtYWluaW5nU3BhY2VCb3R0b20gPiAwO1xuICAgIGNvbnN0IGNhblNldEF0VG9wID0gcmVtYWluaW5nU3BhY2VUb3AgPiAwO1xuICAgIGNvbnN0IGNhblNldEF0TGVmdCA9IHJlbWFpbmluZ1NwYWNlTGVmdCA+IDA7XG4gICAgY29uc3QgY2FuU2V0QXRSaWdodCA9IHJlbWFpbmluZ1NwYWNlUmlnaHQgPiAwO1xuXG4gICAgbGV0IHZhbGlkUG9zaXRpb246IEhlbHBQb3BvdmVyUG9zaXRpb24gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGNhblNldEF0Qm90dG9tICYmIHRoaXMucG9wb3ZlclBvc2l0aW9uID09PSAnYm90dG9tJykge1xuICAgICAgdmFsaWRQb3NpdGlvbiA9ICdib3R0b20nO1xuICAgIH0gZWxzZSBpZiAoY2FuU2V0QXRUb3AgJiYgdGhpcy5wb3BvdmVyUG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICB2YWxpZFBvc2l0aW9uID0gJ3RvcCc7XG4gICAgfSBlbHNlIGlmIChjYW5TZXRBdExlZnQgJiYgdGhpcy5wb3BvdmVyUG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgdmFsaWRQb3NpdGlvbiA9ICdsZWZ0JztcbiAgICB9IGVsc2UgaWYgKGNhblNldEF0UmlnaHQgJiYgdGhpcy5wb3BvdmVyUG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgIHZhbGlkUG9zaXRpb24gPSAncmlnaHQnO1xuICAgIH1cblxuICAgIGNvbnN0IG5lZWRVc2VPdGhlclBvc2l0aW9uID0gIXZhbGlkUG9zaXRpb247XG4gICAgaWYgKG5lZWRVc2VPdGhlclBvc2l0aW9uKSB7XG4gICAgICBjb25zdCBmcmVlUG9zaXRpb25zOiB7IHBvc2l0aW9uOiBIZWxwUG9wb3ZlclBvc2l0aW9uLCBmcmVlRGlzdGFuY2U6IG51bWJlciB9W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2JvdHRvbScgYXMgSGVscFBvcG92ZXJQb3NpdGlvbixcbiAgICAgICAgICBmcmVlRGlzdGFuY2U6IHJlbWFpbmluZ1NwYWNlQm90dG9tLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcG9zaXRpb246ICd0b3AnIGFzIEhlbHBQb3BvdmVyUG9zaXRpb24sXG4gICAgICAgICAgZnJlZURpc3RhbmNlOiByZW1haW5pbmdTcGFjZVRvcCxcbiAgICAgICAgfVxuICAgICAgXS5maWx0ZXIoKHgpID0+IHguZnJlZURpc3RhbmNlID4gMCk7XG5cbiAgICAgIGlmIChmcmVlUG9zaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3BvdmVyUG9zaXRpb247XG4gICAgICB9XG4gICAgICBjb25zdCBpdGVtV2l0aE1heEZyZWVEaXN0YW5jZSA9IGZyZWVQb3NpdGlvbnMuc29ydCgoYSwgYikgPT4gYi5mcmVlRGlzdGFuY2UgLSBhLmZyZWVEaXN0YW5jZSlbMF07XG4gICAgICByZXR1cm4gaXRlbVdpdGhNYXhGcmVlRGlzdGFuY2UucG9zaXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnBvcG92ZXJQb3NpdGlvbjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC1wb3BvdmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9oZWxwLXBvcG92ZXIvc3JjL2xpYi9oZWxwLXBvcG92ZXIvaGVscC1wb3BvdmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUVOLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFN0UsT0FBTyxFQUdILGtDQUFrQyxFQUNsQyxzQkFBc0IsRUFDdEIsK0JBQStCLEdBQ2xDLE1BQU0sMENBQTBDLENBQUM7O0FBRWxEOzs7Ozs7Ozs7OztHQVdHO0FBS0gsTUFBTSxPQUFPLG9CQUFvQjtJQUNaLHdCQUF3QixHQUF5QjtRQUM5RCxVQUFVLEVBQUUsSUFBSTtRQUNoQixTQUFTLEVBQUUsSUFBSTtRQUNmLE9BQU8sRUFBRSxJQUFJO0tBQ2hCLENBQUM7SUFDZSxpQkFBaUIsR0FBRyxHQUFHLEVBQUU7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQixPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3BDLENBQUMsQ0FBQztJQUNlLGVBQWUsR0FBRyxHQUFHLEVBQUU7UUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDTSxZ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LElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ2hDLENBQUM7WUFDRCxNQUFNLHVCQUF1QixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRyxPQUFPLHVCQUF1QixDQUFDLFFBQVEsQ0FBQztRQUM1QyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNoQyxDQUFDO0lBQ0wsQ0FBQzt3R0F0V1Esb0JBQW9COzRGQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBSmhDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFLGNBQWM7aUJBQzNCOzhCQXFCWSxZQUFZO3NCQUFwQixLQUFLO2dCQU9HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxhQUFhO3NCQUFyQixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFVSyxlQUFlO3NCQUR6QixLQUFLO2dCQWFJLGFBQWE7c0JBQXRCLE1BQU07Z0JBc0NQLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEhlbHBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi9oZWxwLXBvcG92ZXIvaGVscC1wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIZWxwUG9wb3ZlckFycm93UG9zaXRpb24sIEhlbHBQb3BvdmVyUG9zaXRpb24gfSBmcm9tICcuL21vZGVscy9oZWxwLXBvcG92ZXIubW9kZWxzJztcbmltcG9ydCB7XG4gICAgRWxlbWVudExlZnRvdmVyUG9zaXRpb24sXG4gICAgRWxlbWVudFBvc2l0aW9uLFxuICAgIGdldEVsZW1lbnRMZWZ0b3ZlckNvbnRlbnRBdmFpbGFibGUsXG4gICAgZ2V0RWxlbWVudFBvc2l0aW9uSW5mbyxcbiAgICBpc01vdXNlUG9zaXRpb25PdXRzaWRlT2ZFbGVtZW50LFxufSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3V0aWxzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGlyZXRpdmEgcXVlIGV4aWJlIHVtIHBvcG92ZXIgZGUgYWp1ZGEgYW8gY2xpY2FyIG5vIGVsZW1lbnRvIGhvc3BlZGVpcm8uXG4gKiBPIHBvcG92ZXIgc3Vwb3J0YSBjb250ZcO6ZG8gY29tbyB0ZXh0byBzaW1wbGVzIG91IGBUZW1wbGF0ZVJlZmAsIGFsw6ltIGRlIGJvdMOjbyBkZSBmZWNoYXIsXG4gKiDDrWNvbmUsIGNhYmXDp2FsaG8sIHJvZGFww6kgZSBwb3Npw6fDo28gY29uZmlndXLDoXZlbC4gUG9kZSBzZXIgYWNpb25hZG8gcHJvZ3JhbWF0aWNhbWVudGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxidXR0b24gW3NIZWxwUG9wb3Zlcl09XCInSW5mb3JtZSBhcXVpIG8gc2V1IENQRidcIiBwb3BvdmVyUG9zaXRpb249XCJyaWdodFwiPj88L2J1dHRvbj5cbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBPdmVybGF5XG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3NIZWxwUG9wb3Zlcl0nLFxuICAgIGV4cG9ydEFzOiAnc0hlbHBQb3BvdmVyJyxcbn0pXG5leHBvcnQgY2xhc3MgSGVscFBvcG92ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBNVVRBVElPTl9PQlNFUlZFUl9DT05GSUc6IE11dGF0aW9uT2JzZXJ2ZXJJbml0ID0ge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgfTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE9CU0VSVkVSX0NBTExCQUNLID0gKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBseVBvc2l0aW9uSW50b0VsZW1lbnQoKTtcbiAgICB9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgUkVTSVpFX09CU0VSVkVSID0gKCkgPT4ge1xuICAgICAgICB0aGlzLm9uUmVzaXplJC5uZXh0KCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb250ZcO6ZG8gZG8gcG9wb3Zlci4gQWNlaXRhIHVtYSBgc3RyaW5nYCBjb20gdGV4dG8gc2ltcGxlcyBvdSB1bSBgVGVtcGxhdGVSZWZgXG4gICAgICogcGFyYSByZW5kZXJpemFyIGNvbnRlw7pkbyBBbmd1bGFyIGN1c3RvbWl6YWRvIGRlbnRybyBkbyBwb3BvdmVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNIZWxwUG9wb3Zlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFF1YW5kbyBgdHJ1ZWAsIGV4aWJlIG8gYm90w6NvIGRlIGZlY2hhciAoWCkgbm8gY2FiZcOnYWxobyBkbyBwb3BvdmVyLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGNsb3NlQnV0dG9uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDbGFzc2UgZGUgw61jb25lIGV4aWJpZGEgbm8gY2FiZcOnYWxobyBkbyBwb3BvdmVyIChleDogY2xhc3NlIGRlIEZvbnQgQXdlc29tZSkuXG4gICAgICovXG4gICAgQElucHV0KCkgcG9wb3Zlckljb24gPSAnJztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUZXh0byBleGliaWRvIG5vIGNhYmXDp2FsaG8gZG8gcG9wb3Zlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwb3BvdmVySGVhZGVyID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gZXhpYmlkbyBubyByb2RhcMOpIGRvIHBvcG92ZXIuXG4gICAgICovXG4gICAgQElucHV0KCkgcG9wb3ZlckZvb3RlciA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRleHRvIGRvIGJvdMOjbyBkZSBhw6fDo28gZXhpYmlkbyBubyByb2RhcMOpIGRvIHBvcG92ZXIuXG4gICAgICogQW8gY2xpY2FyLCBlbWl0ZSBvIGV2ZW50byBgYnV0dG9uQ2xpY2tlZGAuXG4gICAgICovXG4gICAgQElucHV0KCkgcG9wb3ZlckJ1dHRvblRleHQgPSAnJztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBbGluaGFtZW50byBkYSBzZXRhIGluZGljYWRvcmEgZW0gcmVsYcOnw6NvIGFvIGxhZG8gZG8gcG9wb3Zlci5cbiAgICAgKiBWYWxvcmVzIGFjZWl0b3M6IGAnYmVnaW5uaW5nJ2AgKHBhZHLDo28pLCBgJ21pZGRsZSdgLCBgJ2VuZCdgLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ2JlZ2lubmluZydcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwb3BvdmVyQXJyb3dQb3NpdGlvbjogSGVscFBvcG92ZXJBcnJvd1Bvc2l0aW9uID0gJ2JlZ2lubmluZyc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUG9zacOnw6NvIGRvIHBvcG92ZXIgZW0gcmVsYcOnw6NvIGFvIGVsZW1lbnRvIGhvc3BlZGVpcm8uXG4gICAgICogVmFsb3JlcyBhY2VpdG9zOiBgJ3RvcCdgLCBgJ2JvdHRvbSdgIChwYWRyw6NvKSwgYCdsZWZ0J2AsIGAncmlnaHQnYC5cbiAgICAgKiBPIGNvbXBvbmVudGUgdGVudGEgcmVwb3NpY2lvbmFyIGF1dG9tYXRpY2FtZW50ZSBjYXNvIG7Do28gaGFqYSBlc3Bhw6dvLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ2JvdHRvbSdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcG9wb3ZlclBvc2l0aW9uKHZhbHVlOiBIZWxwUG9wb3ZlclBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJQb3NpdGlvbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLmludGVybmFsUG9zaXRpb24gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBvcG92ZXJQb3NpdGlvbigpOiBIZWxwUG9wb3ZlclBvc2l0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcG92ZXJQb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyB1c3XDoXJpbyBjbGljYSBubyBib3TDo28gZGUgYcOnw6NvIGRvIHJvZGFww6kgZG8gcG9wb3Zlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHByaXZhdGUgX3BvcG92ZXJQb3NpdGlvbjogSGVscFBvcG92ZXJQb3NpdGlvbiA9ICdib3R0b20nO1xuXG4gICAgcHJpdmF0ZSBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPEhlbHBQb3BvdmVyQ29tcG9uZW50PiB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlclBvcG92ZXJFbGVtZW50OiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyUG9wb3ZlckNvbnRlbnQ6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGludGVybmFsUG9zaXRpb246IEhlbHBQb3BvdmVyUG9zaXRpb24gPSAnYm90dG9tJztcbiAgICBwcml2YXRlIG9uUmVzaXplJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBtYW51YWxUcmlnZ2VyID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBsaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50IHwgTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxFbGVtZW50QXJlYSA9IHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChpc01vdXNlUG9zaXRpb25PdXRzaWRlT2ZFbGVtZW50KGV2ZW50LCB0b3RhbEVsZW1lbnRBcmVhKSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLk9CU0VSVkVSX0NBTExCQUNLKTtcbiAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyUG9wb3ZlckVsZW1lbnQgPSBwb3BvdmVyRWxlbWVudE9ic2VydmVyO1xuICAgICAgICBwb3BvdmVyRWxlbWVudE9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuTVVUQVRJT05fT0JTRVJWRVJfQ09ORklHKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuUkVTSVpFX09CU0VSVkVSKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbGVuZCcsIHRoaXMuT0JTRVJWRVJfQ0FMTEJBQ0spO1xuICAgICAgICB0aGlzLm9uUmVzaXplJC5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMTAwKSkuc3Vic2NyaWJlKHRoaXMuT0JTRVJWRVJfQ0FMTEJBQ0spO1xuICAgIH1cblxuICAgIHNob3coKSB7XG4gICAgICAgIHRoaXMubWFudWFsVHJpZ2dlciA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUNvbXBvbmVudCgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgICBkb0NsaWNrKCkge1xuICAgICAgICBpZiAodGhpcy5tYW51YWxUcmlnZ2VyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3JlYXRlQ29tcG9uZW50KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyRWxlbWVudC5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuUkVTSVpFX09CU0VSVkVSKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbGVuZCcsIHRoaXMuT0JTRVJWRVJfQ0FMTEJBQ0spO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUNvbXBvbmVudCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNIZWxwUG9wb3Zlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChIZWxwUG9wb3ZlckNvbXBvbmVudCk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gY29tcG9uZW50UmVmO1xuICAgICAgICBpZiAodGhpcy5tdXRhdGlvbk9ic2VydmVyUG9wb3ZlckNvbnRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJDb250ZW50LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyQ29udGVudCA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMuT0JTRVJWRVJfQ0FMTEJBQ0spO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRQb3BvdmVyRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyUG9wb3ZlckNvbnRlbnQub2JzZXJ2ZShcbiAgICAgICAgICAgIGVsZW1lbnQucXVlcnlTZWxlY3RvcignLnBvcG92ZXItY29udGVudCcpIGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgdGhpcy5NVVRBVElPTl9PQlNFUlZFUl9DT05GSUcsXG4gICAgICAgICk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5saXN0ZW5lcik7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgICAgIGNvbXBvbmVudC5wb3BvdmVyQ29udGVudCA9IHRoaXMuc0hlbHBQb3BvdmVyO1xuICAgICAgICBjb21wb25lbnQuY2xvc2VCdXR0b24gPSB0aGlzLmNsb3NlQnV0dG9uO1xuICAgICAgICBjb21wb25lbnQuaWNvbiA9IHRoaXMucG9wb3Zlckljb247XG4gICAgICAgIGNvbXBvbmVudC5oZWFkZXIgPSB0aGlzLnBvcG92ZXJIZWFkZXI7XG4gICAgICAgIGNvbXBvbmVudC5mb290ZXIgPSB0aGlzLnBvcG92ZXJGb290ZXI7XG4gICAgICAgIGNvbXBvbmVudC5idXR0b24gPSB0aGlzLnBvcG92ZXJCdXR0b25UZXh0O1xuICAgICAgICBjb21wb25lbnQucG9zaXRpb24gPSB0aGlzLmludGVybmFsUG9zaXRpb247XG4gICAgICAgIGNvbXBvbmVudC5hcnJvd1Bvc2l0aW9uID0gdGhpcy5wb3BvdmVyQXJyb3dQb3NpdGlvbjtcbiAgICAgICAgY29tcG9uZW50LmJ1dHRvbkNsaWNrZWQgPSB0aGlzLmJ1dHRvbkNsaWNrZWQ7XG4gICAgICAgIGNvbXBvbmVudC5jbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcHBseVBvc2l0aW9uSW50b0VsZW1lbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3koKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5saXN0ZW5lcik7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbFBvc2l0aW9uID0gdGhpcy5wb3BvdmVyUG9zaXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMubXV0YXRpb25PYnNlcnZlclBvcG92ZXJDb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJQb3BvdmVyQ29udGVudC5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5UG9zaXRpb25JbnRvRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgcG9wb3ZlckVsZW1lbnRQb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbkluZm8odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMudmFsaWRQb3NpdGlvbjtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFBvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudEluc3RhbmNlLnBvc2l0aW9uID0gdGhpcy5pbnRlcm5hbFBvc2l0aW9uO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5pbnRlcm5hbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYm90dG9tJzoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5UG9wb3ZlclBvc2l0aW9uQm90dG9tKHBvcG92ZXJFbGVtZW50UG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAndG9wJzoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5UG9wb3ZlclBvc2l0aW9uVG9wKHBvcG92ZXJFbGVtZW50UG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbGVmdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVBvcG92ZXJQb3NpdGlvbkxlZnQocG9wb3ZlckVsZW1lbnRQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdyaWdodCc6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVBvcG92ZXJQb3NpdGlvblJpZ2h0KHBvcG92ZXJFbGVtZW50UG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRJbnN0YW5jZS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseVBvcG92ZXJQb3NpdGlvbkJvdHRvbShwb3BvdmVyRWxlbWVudFBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgcG9wb3ZlckVsZW1lbnQgPSB0aGlzLmdldFBvcG92ZXJFbGVtZW50O1xuICAgICAgICBjb25zdCBsZWZ0UG9wb3ZlciA9IHRoaXMuZ2V0SG9yaXpvbnRhbExlZnQocG9wb3ZlckVsZW1lbnRQb3NpdGlvbik7XG4gICAgICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnRQb3BvdmVyfXB4YDtcbiAgICAgICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUudG9wID0gYGNhbGMoJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLnRvcH1weCArICR7cG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5lbGVtZW50SGVpZ2h0fXB4KWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseVBvcG92ZXJQb3NpdGlvblRvcChwb3BvdmVyRWxlbWVudFBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgcG9wb3ZlckVsZW1lbnQgPSB0aGlzLmdldFBvcG92ZXJFbGVtZW50O1xuICAgICAgICBjb25zdCBsZWZ0UG9wb3ZlciA9IHRoaXMuZ2V0SG9yaXpvbnRhbExlZnQocG9wb3ZlckVsZW1lbnRQb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJIZWlnaHQgPSBwb3BvdmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnRQb3BvdmVyfXB4YDtcbiAgICAgICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUudG9wID0gYGNhbGMoJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLnRvcH1weCAtICR7cG9wb3ZlckhlaWdodH1weClgO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlQb3BvdmVyUG9zaXRpb25MZWZ0KHBvcG92ZXJFbGVtZW50UG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBwb3BvdmVyRWxlbWVudCA9IHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJXaWR0aCA9IHBvcG92ZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLmxlZnQgPSBgY2FsYygke3BvcG92ZXJFbGVtZW50UG9zaXRpb24ucmlnaHR9cHggLSAke3BvcG92ZXJXaWR0aCArIHBvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudFdpZHRofXB4KWA7XG4gICAgICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLnRvcCA9IHRoaXMuZ2V0VmVydGljYWxUb3AocG9wb3ZlckVsZW1lbnRQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseVBvcG92ZXJQb3NpdGlvblJpZ2h0KHBvcG92ZXJFbGVtZW50UG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBwb3BvdmVyRWxlbWVudCA9IHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQ7XG4gICAgICAgIHBvcG92ZXJFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgcG9wb3ZlckVsZW1lbnQuc3R5bGUubGVmdCA9IGBjYWxjKCR7cG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5yaWdodH1weClgO1xuICAgICAgICBwb3BvdmVyRWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLmdldFZlcnRpY2FsVG9wKHBvcG92ZXJFbGVtZW50UG9zaXRpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SG9yaXpvbnRhbExlZnQocG9wb3ZlckVsZW1lbnRQb3NpdGlvbjogRWxlbWVudFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50ID0gdGhpcy5nZXRQb3BvdmVyRWxlbWVudDtcbiAgICAgICAgY29uc3QgcG9wb3ZlcldpZHRoID0gcG9wb3ZlckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGxldCBfaG9yaXpvbnRhbExlZnQgPSBwb3BvdmVyRWxlbWVudFBvc2l0aW9uLmxlZnQ7XG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXJBcnJvd1Bvc2l0aW9uID09PSAnZW5kJykge1xuICAgICAgICAgICAgX2hvcml6b250YWxMZWZ0ID0gcG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5yaWdodCAtIHBvcG92ZXJXaWR0aDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBvcG92ZXJBcnJvd1Bvc2l0aW9uID09PSAnbWlkZGxlJykge1xuICAgICAgICAgICAgX2hvcml6b250YWxMZWZ0ID0gcG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5sZWZ0ICsgcG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5lbGVtZW50V2lkdGggLyAyIC0gcG9wb3ZlcldpZHRoIC8gMjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2hvcml6b250YWxMZWZ0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmVydGljYWxUb3AocG9wb3ZlckVsZW1lbnRQb3NpdGlvbjogRWxlbWVudFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFycm93RWxlbWVudCA9IHRoaXMucG9wb3ZlckNvbXBvbmVudEluc3RhbmNlLmFycm93RWxlbWVudD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgYXJyb3dFbGVtZW50UG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb25JbmZvKGFycm93RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJDb250ZW50UG9zaXRpb24gPSBnZXRFbGVtZW50UG9zaXRpb25JbmZvKHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQpO1xuICAgICAgICBjb25zdCBwb3BvdmVyRWxlbWVudCA9IHRoaXMuZ2V0UG9wb3ZlckVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJIZWlnaHQgPSBwb3BvdmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgIGxldCB0b3AgPSBgY2FsYygke3BvcG92ZXJFbGVtZW50UG9zaXRpb24udG9wfXB4IC0gJHtwb3BvdmVySGVpZ2h0IC8gMn1weCArICR7cG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5lbGVtZW50SGVpZ2h0IC8gMn1weClgO1xuXG4gICAgICAgIGNvbnN0IGFycm93TWlkZGxlID0gYXJyb3dFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCAvIDI7XG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXJBcnJvd1Bvc2l0aW9uID09PSAnYmVnaW5uaW5nJykge1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VBcnJvd0Zyb21TdGFydCA9IGFycm93RWxlbWVudFBvc2l0aW9uLnRvcCAtIHBvcG92ZXJDb250ZW50UG9zaXRpb24udG9wO1xuICAgICAgICAgICAgdG9wID0gYGNhbGMoJHtwb3BvdmVyRWxlbWVudFBvc2l0aW9uLnRvcH1weCArICR7cG9wb3ZlckVsZW1lbnRQb3NpdGlvbi5lbGVtZW50SGVpZ2h0IC8gMn1weCAtICR7ZGlzdGFuY2VBcnJvd0Zyb21TdGFydCArIGFycm93TWlkZGxlfXB4KWA7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3BvdmVyQXJyb3dQb3NpdGlvbiA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlQXJyb3dGcm9tRW5kID1cbiAgICAgICAgICAgICAgICBwb3BvdmVyQ29udGVudFBvc2l0aW9uLnRvcCArXG4gICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRQb3NpdGlvbi5lbGVtZW50SGVpZ2h0IC1cbiAgICAgICAgICAgICAgICAoYXJyb3dFbGVtZW50UG9zaXRpb24udG9wICsgYXJyb3dFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCk7XG4gICAgICAgICAgICB0b3AgPSBgY2FsYygke3BvcG92ZXJFbGVtZW50UG9zaXRpb24udG9wfXB4IC0gJHtwb3BvdmVyQ29udGVudFBvc2l0aW9uLmVsZW1lbnRIZWlnaHR9cHggKyAke3BvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodCAvIDJ9cHggKyAke2Rpc3RhbmNlQXJyb3dGcm9tRW5kICsgYXJyb3dNaWRkbGV9cHgpYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9wO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGVmdG92ZXJDb250ZW50QXZhaWxhYmxlRm9yUG9wb3ZlcigpOiBFbGVtZW50TGVmdG92ZXJQb3NpdGlvbiB7XG4gICAgICAgIHJldHVybiBnZXRFbGVtZW50TGVmdG92ZXJDb250ZW50QXZhaWxhYmxlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBnZXRQb3BvdmVyRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFJlZj8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBwb3BvdmVyQ29tcG9uZW50SW5zdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFJlZj8uaW5zdGFuY2UgYXMgSGVscFBvcG92ZXJDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIgYW5kIHRoZSBhdmFpbGFibGUgc3BhY2UgYXJvdW5kXG4gICAgICogdGhlIHRyaWdnZXIgZWxlbWVudCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgcG9zaXRpb24gdGhhdCB0aGUgcG9wb3ZlclxuICAgICAqIHdpbGwgYmUgc2V0IGF0LlxuICAgICAqXG4gICAgICogSWYgdGhlIHBvcG92ZXIgd2lsbCBmaXQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLCBpdCB3aWxsIHJldHVybiB0aGUgc2FtZVxuICAgICAqIHBvc2l0aW9uLlxuICAgICAqXG4gICAgICogSWYgdGhlIHBvcG92ZXIgd2lsbCBub3QgZml0IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiwgaXQgd2lsbCByZXR1cm4gdGhlIHBvc2l0aW9uXG4gICAgICogdGhhdCBoYXMgdGhlIG1vc3QgYXZhaWxhYmxlIHNwYWNlICh0b3Agb3IgYm90dG9tKS5cbiAgICAgKlxuICAgICAqIElmIHRoZXJlIGlzIG5vIHBvc2l0aW9uIHdpdGggYXZhaWxhYmxlIHNwYWNlLCBpdCB3aWxsIHJldHVybiB0aGUgZ2l2ZW5cbiAgICAgKiBwb3NpdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBwb3NpdGlvbiB0aGF0IHRoZSBwb3BvdmVyIHdpbGwgYmUgc2V0IGF0LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0IHZhbGlkUG9zaXRpb24oKTogSGVscFBvcG92ZXJQb3NpdGlvbiB7XG4gICAgICAgIGNvbnN0IHsgZnJlZURpc3RhbmNlVG9Cb3R0b20sIGZyZWVEaXN0YW5jZVRvVG9wLCBmcmVlRGlzdGFuY2VUb0xlZnQsIGZyZWVEaXN0YW5jZVRvUmlnaHQgfSA9XG4gICAgICAgICAgICB0aGlzLmdldExlZnRvdmVyQ29udGVudEF2YWlsYWJsZUZvclBvcG92ZXIoKTtcblxuICAgICAgICBjb25zdCBwb3BvdmVyRWxlbWVudFBvc2l0aW9uID0gZ2V0RWxlbWVudFBvc2l0aW9uSW5mbyh0aGlzLmdldFBvcG92ZXJFbGVtZW50KTtcbiAgICAgICAgY29uc3QgcG9wb3ZlckVsZW1lbnRXaWR0aCA9IHBvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudFdpZHRoO1xuICAgICAgICBjb25zdCBwb3BvdmVyRWxlbWVudEhlaWdodCA9IHBvcG92ZXJFbGVtZW50UG9zaXRpb24uZWxlbWVudEhlaWdodDtcblxuICAgICAgICBjb25zdCByZW1haW5pbmdTcGFjZUJvdHRvbSA9IGZyZWVEaXN0YW5jZVRvQm90dG9tIC0gcG9wb3ZlckVsZW1lbnRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ1NwYWNlVG9wID0gZnJlZURpc3RhbmNlVG9Ub3AgLSBwb3BvdmVyRWxlbWVudEhlaWdodDtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nU3BhY2VMZWZ0ID0gZnJlZURpc3RhbmNlVG9MZWZ0IC0gcG9wb3ZlckVsZW1lbnRXaWR0aDtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nU3BhY2VSaWdodCA9IGZyZWVEaXN0YW5jZVRvUmlnaHQgLSBwb3BvdmVyRWxlbWVudFdpZHRoO1xuXG4gICAgICAgIGNvbnN0IGNhblNldEF0Qm90dG9tID0gcmVtYWluaW5nU3BhY2VCb3R0b20gPiAwO1xuICAgICAgICBjb25zdCBjYW5TZXRBdFRvcCA9IHJlbWFpbmluZ1NwYWNlVG9wID4gMDtcbiAgICAgICAgY29uc3QgY2FuU2V0QXRMZWZ0ID0gcmVtYWluaW5nU3BhY2VMZWZ0ID4gMDtcbiAgICAgICAgY29uc3QgY2FuU2V0QXRSaWdodCA9IHJlbWFpbmluZ1NwYWNlUmlnaHQgPiAwO1xuXG4gICAgICAgIGxldCB2YWxpZFBvc2l0aW9uOiBIZWxwUG9wb3ZlclBvc2l0aW9uIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoY2FuU2V0QXRCb3R0b20gJiYgdGhpcy5wb3BvdmVyUG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICB2YWxpZFBvc2l0aW9uID0gJ2JvdHRvbSc7XG4gICAgICAgIH0gZWxzZSBpZiAoY2FuU2V0QXRUb3AgJiYgdGhpcy5wb3BvdmVyUG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICB2YWxpZFBvc2l0aW9uID0gJ3RvcCc7XG4gICAgICAgIH0gZWxzZSBpZiAoY2FuU2V0QXRMZWZ0ICYmIHRoaXMucG9wb3ZlclBvc2l0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHZhbGlkUG9zaXRpb24gPSAnbGVmdCc7XG4gICAgICAgIH0gZWxzZSBpZiAoY2FuU2V0QXRSaWdodCAmJiB0aGlzLnBvcG92ZXJQb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdmFsaWRQb3NpdGlvbiA9ICdyaWdodCc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZWVkVXNlT3RoZXJQb3NpdGlvbiA9ICF2YWxpZFBvc2l0aW9uO1xuICAgICAgICBpZiAobmVlZFVzZU90aGVyUG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGZyZWVQb3NpdGlvbnM6IHsgcG9zaXRpb246IEhlbHBQb3BvdmVyUG9zaXRpb247IGZyZWVEaXN0YW5jZTogbnVtYmVyIH1bXSA9IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyBhcyBIZWxwUG9wb3ZlclBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICBmcmVlRGlzdGFuY2U6IHJlbWFpbmluZ1NwYWNlQm90dG9tLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3RvcCcgYXMgSGVscFBvcG92ZXJQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgZnJlZURpc3RhbmNlOiByZW1haW5pbmdTcGFjZVRvcCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXS5maWx0ZXIoKHgpID0+IHguZnJlZURpc3RhbmNlID4gMCk7XG5cbiAgICAgICAgICAgIGlmIChmcmVlUG9zaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBvcG92ZXJQb3NpdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1XaXRoTWF4RnJlZURpc3RhbmNlID0gZnJlZVBvc2l0aW9ucy5zb3J0KChhLCBiKSA9PiBiLmZyZWVEaXN0YW5jZSAtIGEuZnJlZURpc3RhbmNlKVswXTtcbiAgICAgICAgICAgIHJldHVybiBpdGVtV2l0aE1heEZyZWVEaXN0YW5jZS5wb3NpdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvcG92ZXJQb3NpdGlvbjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuIl19
@@ -1,4 +1,4 @@
1
- import { Component, ContentChild, EventEmitter, inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
1
+ import { Component, ContentChild, EventEmitter, inject, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
2
2
  import Cropper from 'cropperjs';
3
3
  import { FooterComponent, HeaderComponent } from '@seniorsistemas/angular-components/structure';
4
4
  import { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';
@@ -8,30 +8,68 @@ import * as i1 from "@seniorsistemas/angular-components/button";
8
8
  import * as i2 from "@seniorsistemas/angular-components/empty-state";
9
9
  import * as i3 from "@seniorsistemas/angular-components/dialog";
10
10
  import * as i4 from "@seniorsistemas/angular-components/template";
11
+ /**
12
+ * @description Componente de recorte de imagem que integra a biblioteca `cropperjs`.
13
+ * Exibe um dialog com uma área interativa para selecionar, recortar e remover imagens,
14
+ * suportando razão de aspecto configurável, formato circular e templates de cabeçalho/rodapé.
15
+ *
16
+ * @example
17
+ * ```html
18
+ * <s-image-cropper
19
+ * [(visible)]="dialogAberto"
20
+ * [imageSource]="urlDaImagem"
21
+ * [aspectRatio]="1"
22
+ * (croppedImage)="onCroppedImage($event)" />
23
+ * ```
24
+ *
25
+ * @category Inputs
26
+ */
11
27
  export class ImageCropperComponent {
12
28
  activeDialog = inject(ActiveDialog, { optional: true });
13
29
  static nextId = 0;
30
+ /** @description Identificador único do componente no DOM. Gerado automaticamente se não informado. */
14
31
  id = `s-image-cropper-${ImageCropperComponent.nextId++}`;
32
+ /** @description Controla a visibilidade do dialog de corte. @default false */
15
33
  visible = false;
34
+ /** @description Título exibido no cabeçalho do dialog. @default 'Recortar imagem' */
16
35
  header = 'Recortar imagem';
36
+ /** @description Rótulo do botão de confirmar o corte. @default 'Recortar' */
17
37
  cropLabel = 'Recortar';
38
+ /** @description Rótulo do botão de trocar a imagem. @default 'Trocar' */
18
39
  selectAnotherLabel = 'Trocar';
40
+ /** @description Rótulo do botão de remover a imagem. @default 'Remover' */
19
41
  removeLabel = 'Remover';
42
+ /** @description Rótulo do botão de cancelar. @default 'Cancelar' */
20
43
  cancelLabel = 'Cancelar';
44
+ /** @description Título do empty state quando nenhuma imagem foi selecionada. */
21
45
  emptyStateTitle = 'Selecione uma foto, em seguida você poderá ajustá-la';
46
+ /** @description Rótulo do botão de ação do empty state. @default 'Escolher imagem' */
22
47
  emptyStateActionLabel = 'Escolher imagem';
48
+ /** @description Classe do ícone exibido no empty state. @default 'fa fa-picture-o' */
23
49
  emptyStateIconClass = 'fa fa-picture-o';
50
+ /** @description Razão de aspecto para o recorte (ex.: `1` para quadrado, `16/9`). @default NaN (livre) */
24
51
  aspectRatio = NaN;
52
+ /** @description Quando `true`, exibe a área de recorte no formato circular. @default false */
25
53
  rounded = false;
54
+ /** @description Exibe o botão para trocar a imagem selecionada. @default true */
26
55
  allowSelectAnother = true;
56
+ /** @description Exibe o botão para remover a imagem. @default true */
27
57
  allowRemove = true;
58
+ /** @description Exibe o botão para cancelar o recorte. @default true */
28
59
  allowCancel = true;
60
+ /** @description URL ou base64 da imagem a ser carregada no cropper. */
29
61
  imageSource;
62
+ /** @description Emitido quando o valor de `visible` muda, habilitando two-way binding com `[(visible)]`. */
30
63
  visibleChange = new EventEmitter();
64
+ /** @description Emitido quando o usuário troca a imagem selecionada. */
31
65
  changeImage = new EventEmitter();
66
+ /** @description Emitido com a imagem recortada em formato base64 string. */
32
67
  croppedImage = new EventEmitter();
68
+ /** @description Emitido com o `HTMLCanvasElement` resultante do recorte. */
33
69
  croppedCanvas = new EventEmitter();
70
+ /** @description Emitido quando o usuário confirma a remoção da imagem. */
34
71
  removedImage = new EventEmitter();
72
+ /** @description Emitido quando o usuário cancela o recorte. */
35
73
  cancel = new EventEmitter();
36
74
  image = null;
37
75
  headerSection = null;
@@ -50,7 +88,6 @@ export class ImageCropperComponent {
50
88
  if (isNullOrUndefined(this.image)) {
51
89
  return;
52
90
  }
53
- ;
54
91
  if (this.cropper) {
55
92
  this.cropper.destroy();
56
93
  }
@@ -176,4 +213,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
176
213
  type: ContentChild,
177
214
  args: [FooterComponent, { static: true }]
178
215
  }] } });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY3JvcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvaW1hZ2UtY3JvcHBlci9zcmMvbGliL2ltYWdlLWNyb3BwZXIvaW1hZ2UtY3JvcHBlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvaW1hZ2UtY3JvcHBlci9zcmMvbGliL2ltYWdlLWNyb3BwZXIvaW1hZ2UtY3JvcHBlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLE9BQU8sTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7OztBQVF6RSxNQUFNLE9BQU8scUJBQXFCO0lBQzlCLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFHbEIsRUFBRSxHQUFHLG1CQUFtQixxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO0lBR3pELE9BQU8sR0FBRyxLQUFLLENBQUM7SUFHaEIsTUFBTSxHQUFHLGlCQUFpQixDQUFDO0lBRzNCLFNBQVMsR0FBRyxVQUFVLENBQUM7SUFHdkIsa0JBQWtCLEdBQUcsUUFBUSxDQUFD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QUFPO3NCQURiLEtBQUs7Z0JBSUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQUlDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFJQyxXQUFXO3NCQURqQixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLE1BQU07Z0JBSUEsV0FBVztzQkFEakIsTUFBTTtnQkFJQSxZQUFZO3NCQURsQixNQUFNO2dCQUlBLGFBQWE7c0JBRG5CLE1BQU07Z0JBSUEsWUFBWTtzQkFEbEIsTUFBTTtnQkFLQSxNQUFNO3NCQUZaLE1BQU07Z0JBS0EsS0FBSztzQkFEWCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTdCLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJeEMsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBDcm9wcGVyIGZyb20gJ2Nyb3BwZXJqcyc7XG5pbXBvcnQgeyBGb290ZXJDb21wb25lbnQsIEhlYWRlckNvbXBvbmVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvc3RydWN0dXJlJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5pbXBvcnQgeyBBY3RpdmVEaWFsb2cgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2RpYWxvZyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1pbWFnZS1jcm9wcGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW1hZ2UtY3JvcHBlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW1hZ2UtY3JvcHBlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEltYWdlQ3JvcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICBhY3RpdmVEaWFsb2cgPSBpbmplY3QoQWN0aXZlRGlhbG9nLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAgIHB1YmxpYyBzdGF0aWMgbmV4dElkID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYHMtaW1hZ2UtY3JvcHBlci0ke0ltYWdlQ3JvcHBlckNvbXBvbmVudC5uZXh0SWQrK31gO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGVhZGVyID0gJ1JlY29ydGFyIGltYWdlbSc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjcm9wTGFiZWwgPSAnUmVjb3J0YXInO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0QW5vdGhlckxhYmVsID0gJ1Ryb2Nhcic7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZW1vdmVMYWJlbCA9ICdSZW1vdmVyJztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNhbmNlbExhYmVsID0gJ0NhbmNlbGFyJztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVtcHR5U3RhdGVUaXRsZSA9ICdTZWxlY2lvbmUgdW1hIGZvdG8sIGVtIHNlZ3VpZGEgdm9jw6ogcG9kZXLDoSBhanVzdMOhLWxhJztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVtcHR5U3RhdGVBY3Rpb25MYWJlbCA9ICdFc2NvbGhlciBpbWFnZW0nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW1wdHlTdGF0ZUljb25DbGFzcyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXNwZWN0UmF0aW8gPSBOYU47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByb3VuZGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd1NlbGVjdEFub3RoZXIgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWxsb3dSZW1vdmUgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWxsb3dDYW5jZWwgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW1hZ2VTb3VyY2U/OiBzdHJpbmc7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjaGFuZ2VJbWFnZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjcm9wcGVkSW1hZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjcm9wcGVkQ2FudmFzID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MQ2FudmFzRWxlbWVudD4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZW1vdmVkSW1hZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgICBwdWJsaWMgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQFZpZXdDaGlsZCgnaW1hZ2UnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBpbWFnZTogRWxlbWVudFJlZjxIVE1MSW1hZ2VFbGVtZW50PiB8IG51bGwgPSBudWxsO1xuXG4gICAgQENvbnRlbnRDaGlsZChIZWFkZXJDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGhlYWRlclNlY3Rpb246IEhlYWRlckNvbXBvbmVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgQENvbnRlbnRDaGlsZChGb290ZXJDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGZvb3RlclNlY3Rpb246IEZvb3RlckNvbXBvbmVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIGNyb3BwZXI6IENyb3BwZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VTb3VyY2UpIHRoaXMuaW5pdENyb3BwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1snaW1hZ2VTb3VyY2UnXSAmJiBjaGFuZ2VzWydpbWFnZVNvdXJjZSddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5pbml0Q3JvcHBlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0Q3JvcHBlcigpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuaW1hZ2UpKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuY3JvcHBlcikge1xuICAgICAgICAgICAgdGhpcy5jcm9wcGVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmltYWdlLm5hdGl2ZUVsZW1lbnQuc3JjID0gdGhpcy5pbWFnZVNvdXJjZSBhcyBzdHJpbmc7XG4gICAgICAgIHRoaXMuY3JvcHBlciA9IG5ldyBDcm9wcGVyKHRoaXMuaW1hZ2UubmF0aXZlRWxlbWVudCwge1xuICAgICAgICAgICAgYXNwZWN0UmF0aW86IHRoaXMucm91bmRlZCA/IDEgOiB0aGlzLmFzcGVjdFJhdGlvLFxuICAgICAgICAgICAgZ3VpZGVzOiBmYWxzZSxcbiAgICAgICAgICAgIGRyYWdNb2RlOiAnbW92ZScgYXMgQ3JvcHBlci5EcmFnTW9kZSxcbiAgICAgICAgICAgIG1pbkNyb3BCb3hIZWlnaHQ6IDIsXG4gICAgICAgICAgICBtaW5Dcm9wQm94V2lkdGg6IDIsXG4gICAgICAgICAgICB0b2dnbGVEcmFnTW9kZU9uRGJsY2xpY2s6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Um91bmRlZENhbnZhcyhzb3VyY2VDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KTogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoY29udGV4dCkpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHdpZHRoID0gc291cmNlQ2FudmFzLndpZHRoO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBzb3VyY2VDYW52YXMuaGVpZ2h0O1xuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2Uoc291cmNlQ2FudmFzLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24taW4nO1xuICAgICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgICBjb250ZXh0LmFyYyh3aWR0aCAvIDIsIGhlaWdodCAvIDIsIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiwgMCwgMiAqIE1hdGguUEksIHRydWUpO1xuICAgICAgICBjb250ZXh0LmZpbGwoKTtcblxuICAgICAgICByZXR1cm4gY2FudmFzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNyb3BJbWFnZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmltYWdlU291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmNyb3BwZWRJbWFnZS5lbWl0KCk7XG4gICAgICAgICAgICB0aGlzLmNyb3BwZWRDYW52YXMuZW1pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3JvcHBlckNhbnZhcyA9IHRoaXMuY3JvcHBlcj8uZ2V0Q3JvcHBlZENhbnZhcygpO1xuICAgICAgICAgICAgaWYgKGNyb3BwZXJDYW52YXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnJvdW5kZWQgPyB0aGlzLmdldFJvdW5kZWRDYW52YXMoY3JvcHBlckNhbnZhcykgOiBjcm9wcGVyQ2FudmFzO1xuICAgICAgICAgICAgICAgIGlmIChjYW52YXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcm9wcGVkQ2FudmFzLmVtaXQoY2FudmFzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcm9wcGVkSW1hZ2UuZW1pdChjYW52YXMudG9EYXRhVVJMKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoYW5nZUltYWdlKCkge1xuICAgICAgICB0aGlzLmNoYW5nZUltYWdlLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25SZW1vdmVJbWFnZSgpIHtcbiAgICAgICAgdGhpcy5pbWFnZVNvdXJjZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yZW1vdmVkSW1hZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGFsVmlzaWJsZUNoYW5nZSh2aXNpYmxlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdmlzaWJsZSkgdGhpcy5vbkNhbmNlbCgpO1xuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh2aXNpYmxlKTtcbiAgICB9XG59XG4iLCI8ZGl2IFtpZF09XCJpZFwiPlxuICAgIEBsZXQgcm91bmRlZENsYXNzID0gcm91bmRlZCA/ICdzLWltYWdlLWNyb3BwZXItLXJvdW5kZWQnIDogJyc7XG4gICAgPHMtZGlhbG9nXG4gICAgICAgIHNpemU9XCJsZ1wiXG4gICAgICAgIFtjb250ZW50Q2xhc3NOYW1lXT1cIidzLWltYWdlLWNyb3BwZXIgJyArIHJvdW5kZWRDbGFzc1wiXG4gICAgICAgIFtoZWFkZXJdPVwiaGVhZGVyU2VjdGlvbiA/ICcnIDogaGVhZGVyXCJcbiAgICAgICAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcbiAgICAgICAgKHZpc2libGVDaGFuZ2UpPVwib25Nb2RhbFZpc2libGVDaGFuZ2UoJGV2ZW50ISlcIlxuICAgICAgICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgICA+XG4gICAgICAgIEBpZiAoaGVhZGVyU2VjdGlvbikge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHNUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInMtaGVhZGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFpbWFnZVNvdXJjZSkge1xuICAgICAgICAgICAgPHMtZW1wdHktc3RhdGVcbiAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLWVtcHR5LXN0YXRlJ1wiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImVtcHR5U3RhdGVUaXRsZVwiXG4gICAgICAgICAgICAgICAgW2ljb25DbGFzc109XCJlbXB0eVN0YXRlSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICBbcHJpbWFyeUFjdGlvbkxhYmVsXT1cImVtcHR5U3RhdGVBY3Rpb25MYWJlbFwiXG4gICAgICAgICAgICAgICAgKHByaW1hcnlBY3Rpb24pPVwib25DaGFuZ2VJbWFnZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcy1lbXB0eS1zdGF0ZT5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbYXR0ci5kYXRhLWhpZGRlbl09XCIhaW1hZ2VTb3VyY2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJy1jcm9wcGVyJ1wiXG4gICAgICAgICAgICAgICAgI2ltYWdlXG4gICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZVNvdXJjZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiY3JvcHBlZCBpbWFnZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHNUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgICAgICAgQGlmICghZm9vdGVyU2VjdGlvbikge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoYWxsb3dDYW5jZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJpZCArICctY2FuY2VsLWJ1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5PVwibGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNhbmNlbExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpbWFnZVNvdXJjZSAmJiBhbGxvd1JlbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLXJlbW92ZS1idXR0b24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwib25SZW1vdmVJbWFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaW1hZ2VTb3VyY2UgJiYgYWxsb3dTZWxlY3RBbm90aGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJpZCArICctc2VsZWN0LWFub3RoZXItYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzZWxlY3RBbm90aGVyTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNoYW5nZUltYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJy1jcm9wLWJ1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjcm9wTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cIm9uQ3JvcEltYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGZvb3RlclNlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJzLWZvb3RlclwiPiA8L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9zLWRpYWxvZz5cbjwvZGl2PlxuIl19
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY3JvcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvaW1hZ2UtY3JvcHBlci9zcmMvbGliL2ltYWdlLWNyb3BwZXIvaW1hZ2UtY3JvcHBlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvaW1hZ2UtY3JvcHBlci9zcmMvbGliL2ltYWdlLWNyb3BwZXIvaW1hZ2UtY3JvcHBlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLE9BQU8sTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7OztBQUV6RTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFPSCxNQUFNLE9BQU8scUJBQXFCO0lBQzlCLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFekIsc0dBQXNHO0lBRS9GLEVBQUUsR0FBRyxtQkFBbUIscUJBQXFCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztJQUVoRSw4RUFBOEU7SUFFdkUsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUV2QixxRkFBcUY7SUFFOUUsTUFBTSxHQUFHLGlC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OytCQUNJLGlCQUFpQixpQkFHWixpQkFBaUIsQ0FBQyxJQUFJOzhCQVE5QixFQUFFO3NCQURSLEtBQUs7Z0JBS0MsT0FBTztzQkFEYixLQUFLO2dCQUtDLE1BQU07c0JBRFosS0FBSztnQkFLQyxTQUFTO3NCQURmLEtBQUs7Z0JBS0Msa0JBQWtCO3NCQUR4QixLQUFLO2dCQUtDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBS0MsV0FBVztzQkFEakIsS0FBSztnQkFLQyxlQUFlO3NCQURyQixLQUFLO2dCQUtDLHFCQUFxQjtzQkFEM0IsS0FBSztnQkFLQyxtQkFBbUI7c0JBRHpCLEtBQUs7Z0JBS0MsV0FBVztzQkFEakIsS0FBSztnQkFLQyxPQUFPO3NCQURiLEtBQUs7Z0JBS0Msa0JBQWtCO3NCQUR4QixLQUFLO2dCQUtDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBS0MsV0FBVztzQkFEakIsS0FBSztnQkFLQyxXQUFXO3NCQURqQixLQUFLO2dCQUtDLGFBQWE7c0JBRG5CLE1BQU07Z0JBS0EsV0FBVztzQkFEakIsTUFBTTtnQkFLQSxZQUFZO3NCQURsQixNQUFNO2dCQUtBLGFBQWE7c0JBRG5CLE1BQU07Z0JBS0EsWUFBWTtzQkFEbEIsTUFBTTtnQkFNQSxNQUFNO3NCQUZaLE1BQU07Z0JBS0EsS0FBSztzQkFEWCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTdCLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJeEMsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgQ3JvcHBlciBmcm9tICdjcm9wcGVyanMnO1xuaW1wb3J0IHsgRm9vdGVyQ29tcG9uZW50LCBIZWFkZXJDb21wb25lbnQgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3N0cnVjdHVyZSc7XG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuaW1wb3J0IHsgQWN0aXZlRGlhbG9nIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9kaWFsb2cnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIHJlY29ydGUgZGUgaW1hZ2VtIHF1ZSBpbnRlZ3JhIGEgYmlibGlvdGVjYSBgY3JvcHBlcmpzYC5cbiAqIEV4aWJlIHVtIGRpYWxvZyBjb20gdW1hIMOhcmVhIGludGVyYXRpdmEgcGFyYSBzZWxlY2lvbmFyLCByZWNvcnRhciBlIHJlbW92ZXIgaW1hZ2VucyxcbiAqIHN1cG9ydGFuZG8gcmF6w6NvIGRlIGFzcGVjdG8gY29uZmlndXLDoXZlbCwgZm9ybWF0byBjaXJjdWxhciBlIHRlbXBsYXRlcyBkZSBjYWJlw6dhbGhvL3JvZGFww6kuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxzLWltYWdlLWNyb3BwZXJcbiAqICAgWyh2aXNpYmxlKV09XCJkaWFsb2dBYmVydG9cIlxuICogICBbaW1hZ2VTb3VyY2VdPVwidXJsRGFJbWFnZW1cIlxuICogICBbYXNwZWN0UmF0aW9dPVwiMVwiXG4gKiAgIChjcm9wcGVkSW1hZ2UpPVwib25Dcm9wcGVkSW1hZ2UoJGV2ZW50KVwiIC8+XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1pbWFnZS1jcm9wcGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW1hZ2UtY3JvcHBlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW1hZ2UtY3JvcHBlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEltYWdlQ3JvcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICBhY3RpdmVEaWFsb2cgPSBpbmplY3QoQWN0aXZlRGlhbG9nLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAgIHB1YmxpYyBzdGF0aWMgbmV4dElkID0gMDtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gSWRlbnRpZmljYWRvciDDum5pY28gZG8gY29tcG9uZW50ZSBubyBET00uIEdlcmFkbyBhdXRvbWF0aWNhbWVudGUgc2UgbsOjbyBpbmZvcm1hZG8uICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgcy1pbWFnZS1jcm9wcGVyLSR7SW1hZ2VDcm9wcGVyQ29tcG9uZW50Lm5leHRJZCsrfWA7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIENvbnRyb2xhIGEgdmlzaWJpbGlkYWRlIGRvIGRpYWxvZyBkZSBjb3J0ZS4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2aXNpYmxlID0gZmFsc2U7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFTDrXR1bG8gZXhpYmlkbyBubyBjYWJlw6dhbGhvIGRvIGRpYWxvZy4gQGRlZmF1bHQgJ1JlY29ydGFyIGltYWdlbScgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoZWFkZXIgPSAnUmVjb3J0YXIgaW1hZ2VtJztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgY29uZmlybWFyIG8gY29ydGUuIEBkZWZhdWx0ICdSZWNvcnRhcicgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjcm9wTGFiZWwgPSAnUmVjb3J0YXInO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIGJvdMOjbyBkZSB0cm9jYXIgYSBpbWFnZW0uIEBkZWZhdWx0ICdUcm9jYXInICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0QW5vdGhlckxhYmVsID0gJ1Ryb2Nhcic7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFLDs3R1bG8gZG8gYm90w6NvIGRlIHJlbW92ZXIgYSBpbWFnZW0uIEBkZWZhdWx0ICdSZW1vdmVyJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlbW92ZUxhYmVsID0gJ1JlbW92ZXInO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIGJvdMOjbyBkZSBjYW5jZWxhci4gQGRlZmF1bHQgJ0NhbmNlbGFyJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNhbmNlbExhYmVsID0gJ0NhbmNlbGFyJztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gVMOtdHVsbyBkbyBlbXB0eSBzdGF0ZSBxdWFuZG8gbmVuaHVtYSBpbWFnZW0gZm9pIHNlbGVjaW9uYWRhLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVtcHR5U3RhdGVUaXRsZSA9ICdTZWxlY2lvbmUgdW1hIGZvdG8sIGVtIHNlZ3VpZGEgdm9jw6ogcG9kZXLDoSBhanVzdMOhLWxhJztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgYcOnw6NvIGRvIGVtcHR5IHN0YXRlLiBAZGVmYXVsdCAnRXNjb2xoZXIgaW1hZ2VtJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVtcHR5U3RhdGVBY3Rpb25MYWJlbCA9ICdFc2NvbGhlciBpbWFnZW0nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBDbGFzc2UgZG8gw61jb25lIGV4aWJpZG8gbm8gZW1wdHkgc3RhdGUuIEBkZWZhdWx0ICdmYSBmYS1waWN0dXJlLW8nICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW1wdHlTdGF0ZUljb25DbGFzcyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSYXrDo28gZGUgYXNwZWN0byBwYXJhIG8gcmVjb3J0ZSAoZXguOiBgMWAgcGFyYSBxdWFkcmFkbywgYDE2LzlgKS4gQGRlZmF1bHQgTmFOIChsaXZyZSkgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhc3BlY3RSYXRpbyA9IE5hTjtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUXVhbmRvIGB0cnVlYCwgZXhpYmUgYSDDoXJlYSBkZSByZWNvcnRlIG5vIGZvcm1hdG8gY2lyY3VsYXIuIEBkZWZhdWx0IGZhbHNlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcm91bmRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFeGliZSBvIGJvdMOjbyBwYXJhIHRyb2NhciBhIGltYWdlbSBzZWxlY2lvbmFkYS4gQGRlZmF1bHQgdHJ1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFsbG93U2VsZWN0QW5vdGhlciA9IHRydWU7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIG8gYm90w6NvIHBhcmEgcmVtb3ZlciBhIGltYWdlbS4gQGRlZmF1bHQgdHJ1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFsbG93UmVtb3ZlID0gdHJ1ZTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRXhpYmUgbyBib3TDo28gcGFyYSBjYW5jZWxhciBvIHJlY29ydGUuIEBkZWZhdWx0IHRydWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGxvd0NhbmNlbCA9IHRydWU7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFVSTCBvdSBiYXNlNjQgZGEgaW1hZ2VtIGEgc2VyIGNhcnJlZ2FkYSBubyBjcm9wcGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGltYWdlU291cmNlPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBvIHZhbG9yIGRlIGB2aXNpYmxlYCBtdWRhLCBoYWJpbGl0YW5kbyB0d28td2F5IGJpbmRpbmcgY29tIGBbKHZpc2libGUpXWAuICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gdHJvY2EgYSBpbWFnZW0gc2VsZWNpb25hZGEuICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNoYW5nZUltYWdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIGNvbSBhIGltYWdlbSByZWNvcnRhZGEgZW0gZm9ybWF0byBiYXNlNjQgc3RyaW5nLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjcm9wcGVkSW1hZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBjb20gbyBgSFRNTENhbnZhc0VsZW1lbnRgIHJlc3VsdGFudGUgZG8gcmVjb3J0ZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgY3JvcHBlZENhbnZhcyA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTENhbnZhc0VsZW1lbnQ+KCk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gY29uZmlybWEgYSByZW1vw6fDo28gZGEgaW1hZ2VtLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZW1vdmVkSW1hZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gY2FuY2VsYSBvIHJlY29ydGUuICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gICAgcHVibGljIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2ltYWdlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgaW1hZ2U6IEVsZW1lbnRSZWY8SFRNTEltYWdlRWxlbWVudD4gfCBudWxsID0gbnVsbDtcblxuICAgIEBDb250ZW50Q2hpbGQoSGVhZGVyQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBoZWFkZXJTZWN0aW9uOiBIZWFkZXJDb21wb25lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIEBDb250ZW50Q2hpbGQoRm9vdGVyQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBmb290ZXJTZWN0aW9uOiBGb290ZXJDb21wb25lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBjcm9wcGVyOiBDcm9wcGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlU291cmNlKSB0aGlzLmluaXRDcm9wcGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2ltYWdlU291cmNlJ10gJiYgY2hhbmdlc1snaW1hZ2VTb3VyY2UnXS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdENyb3BwZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENyb3BwZXIoKSB7XG4gICAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLmltYWdlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNyb3BwZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY3JvcHBlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbWFnZS5uYXRpdmVFbGVtZW50LnNyYyA9IHRoaXMuaW1hZ2VTb3VyY2UgYXMgc3RyaW5nO1xuICAgICAgICB0aGlzLmNyb3BwZXIgPSBuZXcgQ3JvcHBlcih0aGlzLmltYWdlLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgIGFzcGVjdFJhdGlvOiB0aGlzLnJvdW5kZWQgPyAxIDogdGhpcy5hc3BlY3RSYXRpbyxcbiAgICAgICAgICAgIGd1aWRlczogZmFsc2UsXG4gICAgICAgICAgICBkcmFnTW9kZTogJ21vdmUnIGFzIENyb3BwZXIuRHJhZ01vZGUsXG4gICAgICAgICAgICBtaW5Dcm9wQm94SGVpZ2h0OiAyLFxuICAgICAgICAgICAgbWluQ3JvcEJveFdpZHRoOiAyLFxuICAgICAgICAgICAgdG9nZ2xlRHJhZ01vZGVPbkRibGNsaWNrOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvdW5kZWRDYW52YXMoc291cmNlQ2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCk6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGNvbnRleHQpKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCB3aWR0aCA9IHNvdXJjZUNhbnZhcy53aWR0aDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gc291cmNlQ2FudmFzLmhlaWdodDtcblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICBjb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHNvdXJjZUNhbnZhcywgMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWluJztcbiAgICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgY29udGV4dC5hcmMod2lkdGggLyAyLCBoZWlnaHQgLyAyLCBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAvIDIsIDAsIDIgKiBNYXRoLlBJLCB0cnVlKTtcbiAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgcmV0dXJuIGNhbnZhcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Dcm9wSW1hZ2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbWFnZVNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5jcm9wcGVkSW1hZ2UuZW1pdCgpO1xuICAgICAgICAgICAgdGhpcy5jcm9wcGVkQ2FudmFzLmVtaXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNyb3BwZXJDYW52YXMgPSB0aGlzLmNyb3BwZXI/LmdldENyb3BwZWRDYW52YXMoKTtcbiAgICAgICAgICAgIGlmIChjcm9wcGVyQ2FudmFzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5yb3VuZGVkID8gdGhpcy5nZXRSb3VuZGVkQ2FudmFzKGNyb3BwZXJDYW52YXMpIDogY3JvcHBlckNhbnZhcztcbiAgICAgICAgICAgICAgICBpZiAoY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JvcHBlZENhbnZhcy5lbWl0KGNhbnZhcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JvcHBlZEltYWdlLmVtaXQoY2FudmFzLnRvRGF0YVVSTCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGFuZ2VJbWFnZSgpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VJbWFnZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlSW1hZ2UoKSB7XG4gICAgICAgIHRoaXMuaW1hZ2VTb3VyY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucmVtb3ZlZEltYWdlLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DYW5jZWwoKSB7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RhbFZpc2libGVDaGFuZ2UodmlzaWJsZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXZpc2libGUpIHRoaXMub25DYW5jZWwoKTtcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodmlzaWJsZSk7XG4gICAgfVxufVxuXG4iLCI8ZGl2IFtpZF09XCJpZFwiPlxuICAgIEBsZXQgcm91bmRlZENsYXNzID0gcm91bmRlZCA/ICdzLWltYWdlLWNyb3BwZXItLXJvdW5kZWQnIDogJyc7XG4gICAgPHMtZGlhbG9nXG4gICAgICAgIHNpemU9XCJsZ1wiXG4gICAgICAgIFtjb250ZW50Q2xhc3NOYW1lXT1cIidzLWltYWdlLWNyb3BwZXIgJyArIHJvdW5kZWRDbGFzc1wiXG4gICAgICAgIFtoZWFkZXJdPVwiaGVhZGVyU2VjdGlvbiA/ICcnIDogaGVhZGVyXCJcbiAgICAgICAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcbiAgICAgICAgKHZpc2libGVDaGFuZ2UpPVwib25Nb2RhbFZpc2libGVDaGFuZ2UoJGV2ZW50ISlcIlxuICAgICAgICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgICA+XG4gICAgICAgIEBpZiAoaGVhZGVyU2VjdGlvbikge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHNUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInMtaGVhZGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFpbWFnZVNvdXJjZSkge1xuICAgICAgICAgICAgPHMtZW1wdHktc3RhdGVcbiAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLWVtcHR5LXN0YXRlJ1wiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImVtcHR5U3RhdGVUaXRsZVwiXG4gICAgICAgICAgICAgICAgW2ljb25DbGFzc109XCJlbXB0eVN0YXRlSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICBbcHJpbWFyeUFjdGlvbkxhYmVsXT1cImVtcHR5U3RhdGVBY3Rpb25MYWJlbFwiXG4gICAgICAgICAgICAgICAgKHByaW1hcnlBY3Rpb24pPVwib25DaGFuZ2VJbWFnZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcy1lbXB0eS1zdGF0ZT5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbYXR0ci5kYXRhLWhpZGRlbl09XCIhaW1hZ2VTb3VyY2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJy1jcm9wcGVyJ1wiXG4gICAgICAgICAgICAgICAgI2ltYWdlXG4gICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZVNvdXJjZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgYWx0PVwiY3JvcHBlZCBpbWFnZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHNUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgICAgICAgQGlmICghZm9vdGVyU2VjdGlvbikge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoYWxsb3dDYW5jZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJpZCArICctY2FuY2VsLWJ1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5PVwibGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNhbmNlbExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpbWFnZVNvdXJjZSAmJiBhbGxvd1JlbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQgKyAnLXJlbW92ZS1idXR0b24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwib25SZW1vdmVJbWFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaW1hZ2VTb3VyY2UgJiYgYWxsb3dTZWxlY3RBbm90aGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJpZCArICctc2VsZWN0LWFub3RoZXItYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzZWxlY3RBbm90aGVyTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNoYW5nZUltYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJy1jcm9wLWJ1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjcm9wTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cIm9uQ3JvcEltYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGZvb3RlclNlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJzLWZvb3RlclwiPiA8L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9zLWRpYWxvZz5cbjwvZGl2PlxuIl19
@@ -1,13 +1,29 @@
1
1
  import { EventEmitter, Directive, HostListener, Output } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
+ /**
4
+ * @description Diretiva de scroll infinito que detecta quando o usuário chega
5
+ * ao final do elemento e emite o evento `scrolled`. Deve ser aplicada a um
6
+ * elemento com overflow e scroll habilitado.
7
+ *
8
+ * @example
9
+ * ```html
10
+ * <div sInfiniteScroll (scrolled)="carregarMais()" style="overflow-y: auto; height: 400px">
11
+ * <!-- itens -->
12
+ * </div>
13
+ * ```
14
+ *
15
+ * @category Data
16
+ */
3
17
  export class InfiniteScrollDirective {
4
18
  el;
19
+ /** @description Emitido quando o usuário atinge o final do elemento com scroll. */
5
20
  scrolled = new EventEmitter();
6
21
  constructor(el) {
7
22
  this.el = el;
8
23
  }
9
24
  scroll() {
10
- if (this.el.nativeElement.scrollTop > this.el.nativeElement.scrollHeight - this.el.nativeElement.offsetHeight - 2) {
25
+ if (this.el.nativeElement.scrollTop >
26
+ this.el.nativeElement.scrollHeight - this.el.nativeElement.offsetHeight - 2) {
11
27
  this.scrolled.emit();
12
28
  }
13
29
  }
@@ -25,4 +41,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
25
41
  type: HostListener,
26
42
  args: ['scroll']
27
43
  }] } });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdGUtc2Nyb2xsLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9pbmZpbml0ZS1zY3JvbGwvc3JjL2xpYi9pbmZpbml0ZS1zY3JvbGwvaW5maW5pdGUtc2Nyb2xsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUsxRixNQUFNLE9BQU8sdUJBQXVCO0lBSUg7SUFGdEIsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFFN0MsWUFBNkIsRUFBYztRQUFkLE9BQUUsR0FBRixFQUFFLENBQVk7SUFBRyxDQUFDO0lBR3hDLE1BQU07UUFDVCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUM7d0dBWFEsdUJBQXVCOzRGQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtpQkFDaEM7K0VBR1UsUUFBUTtzQkFEZCxNQUFNO2dCQU1BLE1BQU07c0JBRFosWUFBWTt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3NJbmZpbml0ZVNjcm9sbF0nLFxufSlcbmV4cG9ydCBjbGFzcyBJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSB7XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNjcm9sbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgQEhvc3RMaXN0ZW5lcignc2Nyb2xsJylcbiAgICBwdWJsaWMgc2Nyb2xsKCkge1xuICAgICAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA+IHRoaXMuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxlZC5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5maW5pdGUtc2Nyb2xsLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9pbmZpbml0ZS1zY3JvbGwvc3JjL2xpYi9pbmZpbml0ZS1zY3JvbGwvaW5maW5pdGUtc2Nyb2xsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsWUFBWSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUxRjs7Ozs7Ozs7Ozs7OztHQWFHO0FBSUgsTUFBTSxPQUFPLHVCQUF1QjtJQUtIO0lBSjdCLG1GQUFtRjtJQUU1RSxRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUU3QyxZQUE2QixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtJQUFHLENBQUM7SUFHeEMsTUFBTTtRQUNULElBQ0ksSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUztZQUMvQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLENBQUMsRUFDN0UsQ0FBQztZQUNDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUM7d0dBZlEsdUJBQXVCOzRGQUF2Qix1QkFBdUI7OzRGQUF2Qix1QkFBdUI7a0JBSG5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtpQkFDaEM7K0VBSVUsUUFBUTtzQkFEZCxNQUFNO2dCQU1BLE1BQU07c0JBRFosWUFBWTt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERpcmV0aXZhIGRlIHNjcm9sbCBpbmZpbml0byBxdWUgZGV0ZWN0YSBxdWFuZG8gbyB1c3XDoXJpbyBjaGVnYVxuICogYW8gZmluYWwgZG8gZWxlbWVudG8gZSBlbWl0ZSBvIGV2ZW50byBgc2Nyb2xsZWRgLiBEZXZlIHNlciBhcGxpY2FkYSBhIHVtXG4gKiBlbGVtZW50byBjb20gb3ZlcmZsb3cgZSBzY3JvbGwgaGFiaWxpdGFkby5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGRpdiBzSW5maW5pdGVTY3JvbGwgKHNjcm9sbGVkKT1cImNhcnJlZ2FyTWFpcygpXCIgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvOyBoZWlnaHQ6IDQwMHB4XCI+XG4gKiAgIDwhLS0gaXRlbnMgLS0+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBEYXRhXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3NJbmZpbml0ZVNjcm9sbF0nLFxufSlcbmV4cG9ydCBjbGFzcyBJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSB7XG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBvIHVzdcOhcmlvIGF0aW5nZSBvIGZpbmFsIGRvIGVsZW1lbnRvIGNvbSBzY3JvbGwuICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNjcm9sbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgQEhvc3RMaXN0ZW5lcignc2Nyb2xsJylcbiAgICBwdWJsaWMgc2Nyb2xsKCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID5cbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMlxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsZWQuZW1pdCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4iXX0=