@seniorsistemas/angular-components 18.1.1 → 19.0.0-bugfix-sds-454-01aa136d

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 (513) hide show
  1. package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +1 -1
  2. package/common/deprecated-selector/README.md +74 -0
  3. package/common/deprecated-selector/deprecated-selector.directive.d.ts +15 -0
  4. package/common/deprecated-selector/index.d.ts +5 -0
  5. package/common/deprecated-selector/public-api.d.ts +7 -0
  6. package/content-generator/index.d.ts +5 -0
  7. package/{text-area-ia/lib/text-area-ia/text-area-ia.component.d.ts → content-generator/lib/content-generator/content-generator.component.d.ts} +8 -4
  8. package/content-generator/lib/content-generator/content-generator.module.d.ts +16 -0
  9. package/content-generator/public-api.d.ts +2 -0
  10. package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +9 -8
  11. package/custom-fields/lib/custom-fields/custom-fields.service.d.ts +4 -3
  12. package/custom-fields/lib/custom-fields/models/custom-field-type.d.ts +33 -0
  13. package/custom-fields/lib/custom-fields/models/index.d.ts +1 -0
  14. package/custom-fields/public-api.d.ts +2 -1
  15. package/dynamic-form/{lib/dynamic-form → dynamic-form}/components/field-label/field-label.component.d.ts +3 -3
  16. package/dynamic-form/dynamic-form/components/grid/row/row.component.d.ts +19 -0
  17. package/dynamic-form/{lib/dynamic-form → dynamic-form}/components/lookup/lookup.component.d.ts +20 -35
  18. package/dynamic-form/dynamic-form/components/structure/base-structure-component.d.ts +10 -0
  19. package/dynamic-form/dynamic-form/components/structure/fieldset/fieldset.component.d.ts +12 -0
  20. package/dynamic-form/dynamic-form/components/structure/section/section.component.d.ts +14 -0
  21. package/dynamic-form/dynamic-form/configurations/registry.d.ts +8 -0
  22. package/dynamic-form/dynamic-form/configurations/structure/fieldset.d.ts +11 -0
  23. package/dynamic-form/dynamic-form/configurations/structure/row.d.ts +46 -0
  24. package/dynamic-form/{lib/dynamic-form → dynamic-form}/configurations/structure/section.d.ts +9 -8
  25. package/dynamic-form/dynamic-form/configurations/structure/structure.d.ts +11 -0
  26. package/dynamic-form/dynamic-form/dynamic-form.component.d.ts +30 -0
  27. package/dynamic-form/dynamic-form/dynamic-form.d.ts +35 -0
  28. package/dynamic-form/{lib/dynamic-form → dynamic-form}/dynamic-form.directive.d.ts +7 -13
  29. package/dynamic-form/dynamic-form/dynamic-form.module.d.ts +10 -0
  30. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/addon-config.d.ts +2 -1
  31. package/dynamic-form/dynamic-form/form-field/configurations/field-size.d.ts +14 -0
  32. package/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.d.ts +21 -0
  33. package/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +28 -0
  34. package/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.d.ts +28 -0
  35. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.d.ts +21 -0
  36. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.d.ts +12 -0
  37. package/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.d.ts +16 -0
  38. package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +32 -0
  39. package/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.d.ts +11 -0
  40. package/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.d.ts +18 -0
  41. package/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.d.ts +28 -0
  42. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/configurations/fields/country-phone-picker-field.d.ts +6 -7
  43. package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +15 -0
  44. package/dynamic-form/dynamic-form/form-field/configurations/fields/field.d.ts +16 -0
  45. package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +56 -0
  46. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/configurations/fields/number-field.d.ts +9 -22
  47. package/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.d.ts +30 -0
  48. package/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.d.ts +24 -0
  49. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/configurations/fields/radio-button-field.d.ts +7 -9
  50. package/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.d.ts +32 -0
  51. package/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.d.ts +24 -0
  52. package/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.d.ts +16 -0
  53. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.d.ts +18 -0
  54. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.d.ts +37 -0
  55. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/autocomplete/autocomplete-field.component.d.ts +9 -6
  56. package/dynamic-form/dynamic-form/form-field/fields/base-field-component.d.ts +7 -0
  57. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/bignumber/bignumber-field.component.d.ts +9 -8
  58. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/boolean/boolean-radio-field/boolean-field.component.d.ts +4 -4
  59. package/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.d.ts +10 -0
  60. package/dynamic-form/dynamic-form/form-field/fields/button-field/button-field.component.d.ts +11 -0
  61. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/calendar/calendar-field.component.d.ts +10 -10
  62. package/dynamic-form/dynamic-form/form-field/fields/checkbox/checkbox-field.component.d.ts +10 -0
  63. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/chips/chips-field.component.d.ts +5 -5
  64. package/dynamic-form/dynamic-form/form-field/fields/content-generator/content-generator-field.component.d.ts +10 -0
  65. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/country-phone-picker/country-phone-picker-field.component.d.ts +4 -4
  66. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/currency/currency-field.component.d.ts +10 -6
  67. package/dynamic-form/{lib/dynamic-form/form-field/fields/file-upload/file-upload-field.component.d.ts → dynamic-form/form-field/fields/file-picker/file-picker-field.component.d.ts} +7 -6
  68. package/dynamic-form/dynamic-form/form-field/fields/lookup/lookup-field.component.d.ts +18 -0
  69. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/number/number-field.component.d.ts +8 -9
  70. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/password/password-field.component.d.ts +8 -6
  71. package/dynamic-form/dynamic-form/form-field/fields/profile-picture/profile-picture-field.component.d.ts +10 -0
  72. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/radio-button/radio-button-field.component.d.ts +5 -5
  73. package/dynamic-form/dynamic-form/form-field/fields/select/select-field.component.d.ts +12 -0
  74. package/dynamic-form/dynamic-form/form-field/fields/slider/slider-field.component.d.ts +23 -0
  75. package/dynamic-form/dynamic-form/form-field/fields/star-rating/star-rating-field.component.d.ts +11 -0
  76. package/dynamic-form/{lib/dynamic-form → dynamic-form}/form-field/fields/text/text-field.component.d.ts +8 -8
  77. package/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.d.ts +18 -0
  78. package/dynamic-form/dynamic-form/services/form-field-utils.service.d.ts +15 -0
  79. package/dynamic-form/public-api.d.ts +38 -43
  80. package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +3 -3
  81. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +8 -6
  82. package/esm2022/common/deprecated-selector/deprecated-selector.directive.mjs +28 -0
  83. package/esm2022/common/deprecated-selector/public-api.mjs +8 -0
  84. package/esm2022/common/deprecated-selector/seniorsistemas-angular-components-common-deprecated-selector.mjs +5 -0
  85. package/esm2022/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.mjs +3 -3
  86. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +170 -0
  87. package/esm2022/content-generator/lib/content-generator/content-generator.module.mjs +54 -0
  88. package/esm2022/content-generator/lib/services/IAssist/iassist.service.mjs +77 -0
  89. package/esm2022/content-generator/lib/services/IAssist/models/iassist-input-data.mjs +3 -0
  90. package/esm2022/content-generator/lib/services/IAssist/models/iassist-response.mjs +3 -0
  91. package/esm2022/content-generator/public-api.mjs +3 -0
  92. package/esm2022/content-generator/seniorsistemas-angular-components-content-generator.mjs +5 -0
  93. package/esm2022/control-errors/lib/control-errors/control-errors.component.mjs +4 -4
  94. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +68 -69
  95. package/esm2022/custom-fields/lib/custom-fields/custom-fields.service.mjs +5 -5
  96. package/esm2022/custom-fields/lib/custom-fields/models/custom-field-type.mjs +26 -1
  97. package/esm2022/custom-fields/lib/custom-fields/models/index.mjs +2 -0
  98. package/esm2022/custom-fields/public-api.mjs +3 -2
  99. package/esm2022/dynamic-form/dynamic-form/components/field-label/field-label.component.mjs +21 -0
  100. package/esm2022/dynamic-form/dynamic-form/components/grid/row/row.component.mjs +41 -0
  101. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +689 -0
  102. package/esm2022/dynamic-form/dynamic-form/components/lookup/types/default-filter.mjs +2 -0
  103. package/esm2022/dynamic-form/dynamic-form/components/lookup/types/label-options.mjs +2 -0
  104. package/esm2022/dynamic-form/dynamic-form/components/structure/base-structure-component.mjs +2 -0
  105. package/esm2022/dynamic-form/dynamic-form/components/structure/fieldset/fieldset.component.mjs +18 -0
  106. package/esm2022/dynamic-form/dynamic-form/components/structure/section/section.component.mjs +23 -0
  107. package/esm2022/dynamic-form/dynamic-form/configurations/registry.mjs +12 -0
  108. package/esm2022/dynamic-form/dynamic-form/configurations/structure/fieldset.mjs +2 -0
  109. package/esm2022/dynamic-form/dynamic-form/configurations/structure/row.mjs +2 -0
  110. package/esm2022/dynamic-form/dynamic-form/configurations/structure/section.mjs +2 -0
  111. package/esm2022/dynamic-form/dynamic-form/configurations/structure/structure.mjs +2 -0
  112. package/esm2022/dynamic-form/dynamic-form/dynamic-form.component.mjs +48 -0
  113. package/esm2022/dynamic-form/dynamic-form/dynamic-form.directive.mjs +76 -0
  114. package/esm2022/dynamic-form/dynamic-form/dynamic-form.mjs +77 -0
  115. package/esm2022/dynamic-form/dynamic-form/dynamic-form.module.mjs +20 -0
  116. package/esm2022/dynamic-form/dynamic-form/form-field/addon-config.mjs +2 -0
  117. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/field-size.mjs +34 -0
  118. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +2 -0
  119. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +2 -0
  120. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.mjs +2 -0
  121. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.mjs +2 -0
  122. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +2 -0
  123. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.mjs +2 -0
  124. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +2 -0
  125. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +2 -0
  126. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.mjs +2 -0
  127. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.mjs +2 -0
  128. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +2 -0
  129. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +2 -0
  130. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/field.mjs +3 -0
  131. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +2 -0
  132. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +2 -0
  133. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.mjs +2 -0
  134. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.mjs +2 -0
  135. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +9 -0
  136. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.mjs +2 -0
  137. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.mjs +2 -0
  138. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +2 -0
  139. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.mjs +2 -0
  140. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.mjs +2 -0
  141. package/esm2022/dynamic-form/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.mjs +42 -0
  142. package/esm2022/dynamic-form/dynamic-form/form-field/fields/base-field-component.mjs +2 -0
  143. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +135 -0
  144. package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +22 -0
  145. package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +20 -0
  146. package/esm2022/dynamic-form/dynamic-form/form-field/fields/button-field/button-field.component.mjs +28 -0
  147. package/esm2022/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.mjs +135 -0
  148. package/esm2022/dynamic-form/dynamic-form/form-field/fields/checkbox/checkbox-field.component.mjs +17 -0
  149. package/esm2022/dynamic-form/dynamic-form/form-field/fields/chips/chips-field.component.mjs +55 -0
  150. package/esm2022/dynamic-form/dynamic-form/form-field/fields/content-generator/content-generator-field.component.mjs +18 -0
  151. package/esm2022/dynamic-form/dynamic-form/form-field/fields/country-phone-picker/country-phone-picker-field.component.mjs +25 -0
  152. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +100 -0
  153. package/esm2022/dynamic-form/dynamic-form/form-field/fields/file-picker/file-picker-field.component.mjs +47 -0
  154. package/esm2022/dynamic-form/dynamic-form/form-field/fields/lookup/lookup-field.component.mjs +41 -0
  155. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +129 -0
  156. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +85 -0
  157. package/esm2022/dynamic-form/dynamic-form/form-field/fields/profile-picture/profile-picture-field.component.mjs +18 -0
  158. package/esm2022/dynamic-form/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +57 -0
  159. package/esm2022/dynamic-form/dynamic-form/form-field/fields/select/select-field.component.mjs +20 -0
  160. package/esm2022/dynamic-form/dynamic-form/form-field/fields/slider/slider-field.component.mjs +115 -0
  161. package/esm2022/dynamic-form/dynamic-form/form-field/fields/star-rating/star-rating-field.component.mjs +22 -0
  162. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +93 -0
  163. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +36 -0
  164. package/esm2022/dynamic-form/dynamic-form/services/form-field-utils.service.mjs +39 -0
  165. package/esm2022/dynamic-form/public-api.mjs +62 -44
  166. package/esm2022/dynamic-form/seniorsistemas-angular-components-dynamic-form.mjs +1 -1
  167. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +318 -0
  168. package/esm2022/{file-upload/lib/file-upload/file-upload.module.mjs → file-picker/lib/file-picker/file-picker.module.mjs} +11 -11
  169. package/esm2022/{file-upload/lib/file-upload/file-upload.service.mjs → file-picker/lib/file-picker/file-picker.service.mjs} +5 -5
  170. package/esm2022/{file-upload/lib/file-upload → file-picker/lib/file-picker}/models/file-dto.mjs +1 -1
  171. package/esm2022/{file-upload/lib/file-upload/models/file-upload-permissions.mjs → file-picker/lib/file-picker/models/file-picker-permissions.mjs} +1 -1
  172. package/esm2022/{file-upload/lib/file-upload → file-picker/lib/file-picker}/models/list-blob-metadata.mjs +1 -1
  173. package/esm2022/{file-upload/lib/file-upload → file-picker/lib/file-picker}/models/uploadError.mjs +1 -1
  174. package/esm2022/{file-upload/lib/file-upload → file-picker/lib/file-picker}/models/validate-errors.mjs +1 -1
  175. package/esm2022/file-picker/public-api.mjs +4 -0
  176. package/esm2022/{slide-panel/seniorsistemas-angular-components-slide-panel.mjs → file-picker/seniorsistemas-angular-components-file-picker.mjs} +1 -1
  177. package/esm2022/file-upload/public-api.mjs +14 -3
  178. package/esm2022/ia-insight/public-api.mjs +23 -4
  179. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-content-generator/inline-edit-content-generator.component.mjs +32 -0
  180. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-lookup/inline-edit-lookup.component.mjs +3 -5
  181. package/esm2022/inline-edit/lib/inline-edit/components/index.mjs +2 -2
  182. package/esm2022/inline-edit/lib/inline-edit/fields/index.mjs +2 -2
  183. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-content-generator-field.mjs +7 -0
  184. package/esm2022/inline-edit/lib/inline-edit/inline-edit.component.mjs +4 -4
  185. package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +8 -8
  186. package/esm2022/inline-edit/public-api.mjs +2 -2
  187. package/esm2022/insights/lib/insights/components/insights-card/components/index.mjs +2 -0
  188. package/esm2022/insights/lib/insights/components/insights-card/components/insights-card-loader/insights-card-loader.component.mjs +13 -0
  189. package/esm2022/insights/lib/insights/components/insights-card/insights-card.component.mjs +94 -0
  190. package/esm2022/insights/lib/insights/components/insights-sidebar/insights-sidebar.component.mjs +59 -0
  191. package/esm2022/insights/lib/insights/insights.component.mjs +89 -0
  192. package/esm2022/insights/lib/insights/insights.module.mjs +47 -0
  193. package/esm2022/insights/lib/insights/models/index.mjs +2 -0
  194. package/esm2022/insights/lib/insights/models/insights-item.mjs +2 -0
  195. package/esm2022/insights/lib/insights/models/insights-template-types.mjs +2 -0
  196. package/esm2022/insights/public-api.mjs +4 -0
  197. package/esm2022/insights/seniorsistemas-angular-components-insights.mjs +5 -0
  198. package/esm2022/lib/locale/fallback.mjs +4 -2
  199. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +2 -34
  200. package/esm2022/optional-fields/editor/editor-field/editor-field.component.mjs +18 -0
  201. package/esm2022/optional-fields/editor/editor-field.mjs +17 -0
  202. package/esm2022/optional-fields/editor/public-api.mjs +2 -0
  203. package/esm2022/optional-fields/editor/seniorsistemas-angular-components-optional-fields-editor.mjs +5 -0
  204. package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +7 -8
  205. package/esm2022/product-header/public-api.mjs +23 -3
  206. package/esm2022/select/lib/select/select.component.mjs +3 -3
  207. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.mjs +158 -0
  208. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.module.mjs +20 -0
  209. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.service.mjs +26 -0
  210. package/esm2022/slide-in-bar/public-api.mjs +4 -0
  211. package/esm2022/slide-in-bar/seniorsistemas-angular-components-slide-in-bar.mjs +5 -0
  212. package/esm2022/stepper/lib/stepper/models/index.mjs +2 -0
  213. package/esm2022/stepper/lib/stepper/models/step-selection-event.mjs +2 -0
  214. package/esm2022/stepper/lib/stepper/models/step-state.mjs +7 -0
  215. package/esm2022/stepper/lib/stepper/models/step.mjs +2 -0
  216. package/esm2022/stepper/lib/stepper/stepper.component.mjs +138 -0
  217. package/esm2022/stepper/lib/stepper/stepper.module.mjs +19 -0
  218. package/esm2022/stepper/public-api.mjs +4 -0
  219. package/esm2022/stepper/seniorsistemas-angular-components-stepper.mjs +5 -0
  220. package/esm2022/table/lib/table/table-column/models/dynamic-editable-grid.interface.mjs +1 -1
  221. package/esm2022/text-area-ia/public-api.mjs +23 -3
  222. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +3 -3
  223. package/esm2022/topbar/lib/topbar/topbar.component.mjs +65 -0
  224. package/esm2022/topbar/lib/topbar/topbar.module.mjs +20 -0
  225. package/esm2022/topbar/public-api.mjs +3 -0
  226. package/esm2022/topbar/seniorsistemas-angular-components-topbar.mjs +5 -0
  227. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +2 -2
  228. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
  229. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +7 -5
  230. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
  231. package/fesm2022/seniorsistemas-angular-components-common-deprecated-selector.mjs +42 -0
  232. package/fesm2022/seniorsistemas-angular-components-common-deprecated-selector.mjs.map +1 -0
  233. package/fesm2022/seniorsistemas-angular-components-common.mjs +2 -2
  234. package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
  235. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +299 -0
  236. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -0
  237. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +3 -3
  238. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
  239. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +95 -71
  240. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
  241. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +883 -2554
  242. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  243. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +361 -0
  244. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -0
  245. package/fesm2022/seniorsistemas-angular-components-file-upload.mjs +14 -330
  246. package/fesm2022/seniorsistemas-angular-components-file-upload.mjs.map +1 -1
  247. package/fesm2022/seniorsistemas-angular-components-ia-insight.mjs +23 -260
  248. package/fesm2022/seniorsistemas-angular-components-ia-insight.mjs.map +1 -1
  249. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +20 -21
  250. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  251. package/fesm2022/seniorsistemas-angular-components-insights.mjs +287 -0
  252. package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -0
  253. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +1 -33
  254. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
  255. package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs +39 -0
  256. package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs.map +1 -0
  257. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +6 -7
  258. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
  259. package/fesm2022/seniorsistemas-angular-components-product-header.mjs +23 -61
  260. package/fesm2022/seniorsistemas-angular-components-product-header.mjs.map +1 -1
  261. package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -2
  262. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  263. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +202 -0
  264. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -0
  265. package/fesm2022/seniorsistemas-angular-components-stepper.mjs +166 -0
  266. package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -0
  267. package/fesm2022/seniorsistemas-angular-components-text-area-ia.mjs +23 -268
  268. package/fesm2022/seniorsistemas-angular-components-text-area-ia.mjs.map +1 -1
  269. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +2 -2
  270. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  271. package/fesm2022/seniorsistemas-angular-components-topbar.mjs +88 -0
  272. package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -0
  273. package/fesm2022/seniorsistemas-angular-components.mjs +3 -1
  274. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  275. package/{slide-panel → file-picker}/index.d.ts +1 -1
  276. package/file-picker/lib/file-picker/file-picker.component.d.ts +81 -0
  277. package/{file-upload/lib/file-upload/file-upload.module.d.ts → file-picker/lib/file-picker/file-picker.module.d.ts} +5 -5
  278. package/{file-upload/lib/file-upload/file-upload.service.d.ts → file-picker/lib/file-picker/file-picker.service.d.ts} +3 -3
  279. package/file-picker/lib/file-picker/models/file-picker-permissions.d.ts +2 -0
  280. package/file-picker/public-api.d.ts +7 -0
  281. package/file-upload/README.md +45 -0
  282. package/file-upload/public-api.d.ts +25 -6
  283. package/ia-insight/public-api.d.ts +32 -3
  284. package/inline-edit/lib/inline-edit/components/fields/inline-edit-content-generator/inline-edit-content-generator.component.d.ts +13 -0
  285. package/inline-edit/lib/inline-edit/components/index.d.ts +1 -1
  286. package/inline-edit/lib/inline-edit/fields/index.d.ts +2 -2
  287. package/inline-edit/lib/inline-edit/fields/inline-edit-content-generator-field.d.ts +6 -0
  288. package/inline-edit/lib/inline-edit/inline-edit.module.d.ts +3 -3
  289. package/inline-edit/public-api.d.ts +2 -2
  290. package/insights/index.d.ts +5 -0
  291. package/insights/lib/insights/components/insights-card/components/index.d.ts +1 -0
  292. package/insights/lib/insights/components/insights-card/components/insights-card-loader/insights-card-loader.component.d.ts +5 -0
  293. package/{ia-insight/lib/ia-insight/components/ia-insight-card/ia-insight-card.component.d.ts → insights/lib/insights/components/insights-card/insights-card.component.d.ts} +5 -5
  294. package/insights/lib/insights/components/insights-sidebar/insights-sidebar.component.d.ts +21 -0
  295. package/insights/lib/insights/insights.component.d.ts +30 -0
  296. package/insights/lib/insights/insights.module.d.ts +17 -0
  297. package/insights/lib/insights/models/index.d.ts +2 -0
  298. package/{ia-insight/lib/ia-insight/models/ia-insight-item.d.ts → insights/lib/insights/models/insights-item.d.ts} +1 -1
  299. package/insights/lib/insights/models/insights-template-types.d.ts +1 -0
  300. package/insights/public-api.d.ts +3 -0
  301. package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +0 -15
  302. package/optional-fields/editor/editor-field/editor-field.component.d.ts +10 -0
  303. package/optional-fields/editor/editor-field.d.ts +17 -0
  304. package/optional-fields/editor/index.d.ts +5 -0
  305. package/optional-fields/editor/public-api.d.ts +1 -0
  306. package/package.json +61 -24
  307. package/product-header/public-api.d.ts +21 -2
  308. package/slide-in-bar/index.d.ts +5 -0
  309. package/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.d.ts +33 -0
  310. package/slide-in-bar/lib/slide-in-bar/slide-in-bar.module.d.ts +8 -0
  311. package/{slide-panel/lib/slide-panel/slide-panel.service.d.ts → slide-in-bar/lib/slide-in-bar/slide-in-bar.service.d.ts} +3 -3
  312. package/slide-in-bar/public-api.d.ts +3 -0
  313. package/stepper/index.d.ts +5 -0
  314. package/stepper/lib/stepper/models/index.d.ts +3 -0
  315. package/stepper/lib/stepper/models/step-selection-event.d.ts +6 -0
  316. package/stepper/lib/stepper/models/step-state.d.ts +5 -0
  317. package/stepper/lib/stepper/models/step.d.ts +11 -0
  318. package/stepper/lib/stepper/stepper.component.d.ts +20 -0
  319. package/stepper/lib/stepper/stepper.module.d.ts +9 -0
  320. package/stepper/public-api.d.ts +3 -0
  321. package/styles.css +9 -1
  322. package/table/lib/table/table-column/models/dynamic-editable-grid.interface.d.ts +2 -2
  323. package/text-area-ia/public-api.d.ts +21 -2
  324. package/{steps → topbar}/index.d.ts +1 -1
  325. package/topbar/lib/topbar/topbar.component.d.ts +16 -0
  326. package/topbar/lib/topbar/topbar.module.d.ts +10 -0
  327. package/topbar/public-api.d.ts +2 -0
  328. package/dynamic-form/lib/dynamic-form/components/grid/row/row.component.d.ts +0 -15
  329. package/dynamic-form/lib/dynamic-form/components/structure/base-structure-component.d.ts +0 -8
  330. package/dynamic-form/lib/dynamic-form/components/structure/fieldset/fieldset.component.d.ts +0 -12
  331. package/dynamic-form/lib/dynamic-form/components/structure/section/section.component.d.ts +0 -14
  332. package/dynamic-form/lib/dynamic-form/configurations/dynamic-config.d.ts +0 -3
  333. package/dynamic-form/lib/dynamic-form/configurations/dynamic-type.d.ts +0 -24
  334. package/dynamic-form/lib/dynamic-form/configurations/grid/grid.d.ts +0 -14
  335. package/dynamic-form/lib/dynamic-form/configurations/grid/row.d.ts +0 -8
  336. package/dynamic-form/lib/dynamic-form/configurations/grid-type.d.ts +0 -3
  337. package/dynamic-form/lib/dynamic-form/configurations/structure/fieldset.d.ts +0 -10
  338. package/dynamic-form/lib/dynamic-form/configurations/structure/structure.d.ts +0 -14
  339. package/dynamic-form/lib/dynamic-form/configurations/structure-type.d.ts +0 -4
  340. package/dynamic-form/lib/dynamic-form/dynamic-form.component.d.ts +0 -19
  341. package/dynamic-form/lib/dynamic-form/dynamic-form.d.ts +0 -57
  342. package/dynamic-form/lib/dynamic-form/dynamic-form.module.d.ts +0 -83
  343. package/dynamic-form/lib/dynamic-form/form-field/configurations/field-size.d.ts +0 -7
  344. package/dynamic-form/lib/dynamic-form/form-field/configurations/field-type.d.ts +0 -32
  345. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/autocomplete-field.d.ts +0 -30
  346. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +0 -38
  347. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/blob-field.d.ts +0 -43
  348. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/boolean-field.d.ts +0 -29
  349. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/boolean-switch-field.d.ts +0 -11
  350. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/button-field.d.ts +0 -34
  351. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +0 -45
  352. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/checkbox-field.d.ts +0 -9
  353. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/chips-field.d.ts +0 -24
  354. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/currency-field.d.ts +0 -9
  355. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/decimal-field.d.ts +0 -14
  356. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/editor-field.d.ts +0 -18
  357. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/field.d.ts +0 -96
  358. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +0 -97
  359. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/password-field.d.ts +0 -45
  360. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/profile-picture.d.ts +0 -35
  361. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/select-field.d.ts +0 -41
  362. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/slider-field.d.ts +0 -32
  363. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/star-rating-field.d.ts +0 -17
  364. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-area-field.d.ts +0 -24
  365. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-area-ia-field.d.ts +0 -26
  366. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-field.d.ts +0 -41
  367. package/dynamic-form/lib/dynamic-form/form-field/fields/base-field-component.d.ts +0 -32
  368. package/dynamic-form/lib/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.d.ts +0 -10
  369. package/dynamic-form/lib/dynamic-form/form-field/fields/button-field/button-field.component.d.ts +0 -10
  370. package/dynamic-form/lib/dynamic-form/form-field/fields/checkbox/checkbox-field.component.d.ts +0 -10
  371. package/dynamic-form/lib/dynamic-form/form-field/fields/editor/editor-field.component.d.ts +0 -10
  372. package/dynamic-form/lib/dynamic-form/form-field/fields/lookup/lookup-field.component.d.ts +0 -9
  373. package/dynamic-form/lib/dynamic-form/form-field/fields/profile-picture/profile-picture-field.component.d.ts +0 -9
  374. package/dynamic-form/lib/dynamic-form/form-field/fields/select/select-field.component.d.ts +0 -10
  375. package/dynamic-form/lib/dynamic-form/form-field/fields/slider/slider-field.component.d.ts +0 -25
  376. package/dynamic-form/lib/dynamic-form/form-field/fields/star-rating/star-rating-field.component.d.ts +0 -10
  377. package/dynamic-form/lib/dynamic-form/form-field/fields/text-area/text-area-field.component.d.ts +0 -14
  378. package/dynamic-form/lib/dynamic-form/form-field/fields/text-area-ia/text-area-ia-field.component.d.ts +0 -9
  379. package/dynamic-form/lib/dynamic-form/form-field/form-field.d.ts +0 -192
  380. package/dynamic-form/lib/dynamic-form/services/dynamic-form-cache.d.ts +0 -12
  381. package/esm2022/dynamic-form/lib/dynamic-form/components/field-label/field-label.component.mjs +0 -20
  382. package/esm2022/dynamic-form/lib/dynamic-form/components/grid/row/row.component.mjs +0 -41
  383. package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/lookup.component.mjs +0 -642
  384. package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/types/default-filter.mjs +0 -2
  385. package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/types/label-options.mjs +0 -2
  386. package/esm2022/dynamic-form/lib/dynamic-form/components/structure/base-structure-component.mjs +0 -2
  387. package/esm2022/dynamic-form/lib/dynamic-form/components/structure/fieldset/fieldset.component.mjs +0 -27
  388. package/esm2022/dynamic-form/lib/dynamic-form/components/structure/section/section.component.mjs +0 -33
  389. package/esm2022/dynamic-form/lib/dynamic-form/configurations/dynamic-config.mjs +0 -71
  390. package/esm2022/dynamic-form/lib/dynamic-form/configurations/dynamic-type.mjs +0 -26
  391. package/esm2022/dynamic-form/lib/dynamic-form/configurations/grid/grid.mjs +0 -14
  392. package/esm2022/dynamic-form/lib/dynamic-form/configurations/grid/row.mjs +0 -10
  393. package/esm2022/dynamic-form/lib/dynamic-form/configurations/grid-type.mjs +0 -5
  394. package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure/fieldset.mjs +0 -10
  395. package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure/section.mjs +0 -31
  396. package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure/structure.mjs +0 -9
  397. package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure-type.mjs +0 -6
  398. package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.component.mjs +0 -41
  399. package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.directive.mjs +0 -107
  400. package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.mjs +0 -189
  401. package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.module.mjs +0 -293
  402. package/esm2022/dynamic-form/lib/dynamic-form/form-field/addon-config.mjs +0 -2
  403. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/field-size.mjs +0 -13
  404. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/field-type.mjs +0 -34
  405. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +0 -24
  406. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +0 -37
  407. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/blob-field.mjs +0 -31
  408. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/boolean-field.mjs +0 -30
  409. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +0 -15
  410. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/button-field.mjs +0 -47
  411. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/calendar-field.mjs +0 -56
  412. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +0 -9
  413. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/chips-field.mjs +0 -25
  414. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +0 -15
  415. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/currency-field.mjs +0 -14
  416. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/decimal-field.mjs +0 -16
  417. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/editor-field.mjs +0 -15
  418. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/field.mjs +0 -64
  419. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/lookup-field.mjs +0 -66
  420. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/number-field.mjs +0 -38
  421. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/password-field.mjs +0 -33
  422. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/profile-picture.mjs +0 -35
  423. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +0 -27
  424. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/select-field.mjs +0 -43
  425. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/slider-field.mjs +0 -30
  426. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +0 -17
  427. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-area-field.mjs +0 -30
  428. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-area-ia-field.mjs +0 -32
  429. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-field.mjs +0 -38
  430. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.mjs +0 -37
  431. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/base-field-component.mjs +0 -22
  432. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +0 -124
  433. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +0 -27
  434. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +0 -23
  435. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/button-field/button-field.component.mjs +0 -31
  436. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/calendar/calendar-field.component.mjs +0 -118
  437. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/checkbox/checkbox-field.component.mjs +0 -21
  438. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/chips/chips-field.component.mjs +0 -59
  439. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/country-phone-picker/country-phone-picker-field.component.mjs +0 -29
  440. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/currency/currency-field.component.mjs +0 -100
  441. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/editor/editor-field.component.mjs +0 -23
  442. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/file-upload/file-upload-field.component.mjs +0 -56
  443. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/lookup/lookup-field.component.mjs +0 -23
  444. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/number/number-field.component.mjs +0 -121
  445. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/password/password-field.component.mjs +0 -75
  446. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/profile-picture/profile-picture-field.component.mjs +0 -22
  447. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +0 -52
  448. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/select/select-field.component.mjs +0 -24
  449. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/slider/slider-field.component.mjs +0 -103
  450. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/star-rating/star-rating-field.component.mjs +0 -25
  451. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/text/text-field.component.mjs +0 -88
  452. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +0 -29
  453. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/text-area-ia/text-area-ia-field.component.mjs +0 -22
  454. package/esm2022/dynamic-form/lib/dynamic-form/form-field/form-field.mjs +0 -243
  455. package/esm2022/dynamic-form/lib/dynamic-form/services/dynamic-form-cache.mjs +0 -150
  456. package/esm2022/file-upload/lib/file-upload/file-upload.component.mjs +0 -293
  457. package/esm2022/ia-insight/lib/ia-insight/components/ia-insight-card/components/ia-insight-card-loader/ia-insight-card-loader.component.mjs +0 -13
  458. package/esm2022/ia-insight/lib/ia-insight/components/ia-insight-card/ia-insight-card.component.mjs +0 -94
  459. package/esm2022/ia-insight/lib/ia-insight/components/ia-insight-sidebar/ia-insight-sidebar.component.mjs +0 -59
  460. package/esm2022/ia-insight/lib/ia-insight/ia-insight.component.mjs +0 -68
  461. package/esm2022/ia-insight/lib/ia-insight/ia-insight.module.mjs +0 -47
  462. package/esm2022/ia-insight/lib/ia-insight/models/ia-insight-item.mjs +0 -2
  463. package/esm2022/ia-insight/lib/ia-insight/models/ia-insight-template-types.mjs +0 -2
  464. package/esm2022/ia-insight/lib/ia-insight/models/index.mjs +0 -2
  465. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text-area-ia/inline-edit-text-area-ia.component.mjs +0 -32
  466. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-text-area-ia-field.mjs +0 -7
  467. package/esm2022/product-header/lib/product-header/product-header.component.mjs +0 -44
  468. package/esm2022/product-header/lib/product-header/product-header.module.mjs +0 -20
  469. package/esm2022/slide-panel/lib/slide-panel/slide-panel.component.mjs +0 -137
  470. package/esm2022/slide-panel/lib/slide-panel/slide-panel.module.mjs +0 -20
  471. package/esm2022/slide-panel/lib/slide-panel/slide-panel.service.mjs +0 -26
  472. package/esm2022/slide-panel/public-api.mjs +0 -4
  473. package/esm2022/steps/lib/steps/steps.component.mjs +0 -122
  474. package/esm2022/steps/lib/steps/steps.module.mjs +0 -19
  475. package/esm2022/steps/public-api.mjs +0 -3
  476. package/esm2022/steps/seniorsistemas-angular-components-steps.mjs +0 -5
  477. package/esm2022/text-area-ia/lib/services/IAssist/iassist.service.mjs +0 -77
  478. package/esm2022/text-area-ia/lib/services/IAssist/models/iassist-input-data.mjs +0 -3
  479. package/esm2022/text-area-ia/lib/services/IAssist/models/iassist-response.mjs +0 -3
  480. package/esm2022/text-area-ia/lib/text-area-ia/text-area-ia.component.mjs +0 -150
  481. package/esm2022/text-area-ia/lib/text-area-ia/text-area-ia.module.mjs +0 -50
  482. package/fesm2022/seniorsistemas-angular-components-slide-panel.mjs +0 -182
  483. package/fesm2022/seniorsistemas-angular-components-slide-panel.mjs.map +0 -1
  484. package/fesm2022/seniorsistemas-angular-components-steps.mjs +0 -145
  485. package/fesm2022/seniorsistemas-angular-components-steps.mjs.map +0 -1
  486. package/file-upload/lib/file-upload/file-upload.component.d.ts +0 -80
  487. package/file-upload/lib/file-upload/models/file-upload-permissions.d.ts +0 -2
  488. package/ia-insight/lib/ia-insight/components/ia-insight-card/components/ia-insight-card-loader/ia-insight-card-loader.component.d.ts +0 -5
  489. package/ia-insight/lib/ia-insight/components/ia-insight-sidebar/ia-insight-sidebar.component.d.ts +0 -21
  490. package/ia-insight/lib/ia-insight/ia-insight.component.d.ts +0 -29
  491. package/ia-insight/lib/ia-insight/ia-insight.module.d.ts +0 -17
  492. package/ia-insight/lib/ia-insight/models/ia-insight-template-types.d.ts +0 -1
  493. package/ia-insight/lib/ia-insight/models/index.d.ts +0 -2
  494. package/inline-edit/lib/inline-edit/components/fields/inline-edit-text-area-ia/inline-edit-text-area-ia.component.d.ts +0 -13
  495. package/inline-edit/lib/inline-edit/fields/inline-edit-text-area-ia-field.d.ts +0 -6
  496. package/product-header/lib/product-header/product-header.component.d.ts +0 -15
  497. package/product-header/lib/product-header/product-header.module.d.ts +0 -10
  498. package/slide-panel/lib/slide-panel/slide-panel.component.d.ts +0 -32
  499. package/slide-panel/lib/slide-panel/slide-panel.module.d.ts +0 -8
  500. package/slide-panel/public-api.d.ts +0 -3
  501. package/steps/lib/steps/steps.component.d.ts +0 -36
  502. package/steps/lib/steps/steps.module.d.ts +0 -9
  503. package/steps/public-api.d.ts +0 -2
  504. package/text-area-ia/lib/text-area-ia/text-area-ia.module.d.ts +0 -15
  505. /package/{text-area-ia → content-generator}/lib/services/IAssist/iassist.service.d.ts +0 -0
  506. /package/{text-area-ia → content-generator}/lib/services/IAssist/models/iassist-input-data.d.ts +0 -0
  507. /package/{text-area-ia → content-generator}/lib/services/IAssist/models/iassist-response.d.ts +0 -0
  508. /package/dynamic-form/{lib/dynamic-form → dynamic-form}/components/lookup/types/default-filter.d.ts +0 -0
  509. /package/dynamic-form/{lib/dynamic-form → dynamic-form}/components/lookup/types/label-options.d.ts +0 -0
  510. /package/{file-upload/lib/file-upload → file-picker/lib/file-picker}/models/file-dto.d.ts +0 -0
  511. /package/{file-upload/lib/file-upload → file-picker/lib/file-picker}/models/list-blob-metadata.d.ts +0 -0
  512. /package/{file-upload/lib/file-upload → file-picker/lib/file-picker}/models/uploadError.d.ts +0 -0
  513. /package/{file-upload/lib/file-upload → file-picker/lib/file-picker}/models/validate-errors.d.ts +0 -0
@@ -321,27 +321,6 @@ export class NumericMaskDirective {
321
321
  const multiplier = new BigNumber(10).pow(decimalPlaces);
322
322
  return bigNumber.multipliedBy(multiplier).integerValue(BigNumber.ROUND_DOWN).dividedBy(multiplier);
323
323
  }
324
- /**
325
- * Checks if the value has excessive decimal places
326
- * @private
327
- */
328
- hasExcessiveDecimalPlaces(value) {
329
- const parts = value.split(this.decimalSeparator);
330
- if (parts.length > 1) {
331
- const decimalPart = parts[1].replace(/[^0-9]/g, '');
332
- return decimalPart.length > this.maxDecimalPlaces();
333
- }
334
- return false;
335
- }
336
- /**
337
- * Clears the input and notifies the model
338
- * @private
339
- */
340
- clearInput() {
341
- this.renderer.setProperty(this.elementRef.nativeElement, 'value', '');
342
- this.lastModelValue = null;
343
- this.onChange(null);
344
- }
345
324
  /**
346
325
  * Parses a string value to its numeric representation, handling separators and sign
347
326
  * Returns BigNumber to preserve full precision and optional number conversion
@@ -385,18 +364,7 @@ export class NumericMaskDirective {
385
364
  const effectiveDecimalPlaces = decimalPart.replace(/0+$/, '').length;
386
365
  const decimalPlacesToShow = Math.max(this.minDecimalPlaces(), Math.min(effectiveDecimalPlaces, this.maxDecimalPlaces()));
387
366
  decimalPart = decimalPart.substring(0, decimalPlacesToShow).padEnd(decimalPlacesToShow, '0');
388
- return formattedInteger + this.decimalSeparator + decimalPart;
389
- }
390
- /**
391
- * Formats the value according to the locale
392
- * @private
393
- */
394
- formatValue(value) {
395
- if (!value || value.trim() === '') {
396
- return '';
397
- }
398
- const { numeric } = this.parseStringToValue(value);
399
- return this.formatNumeric(numeric);
367
+ return decimalPart ? formattedInteger + this.decimalSeparator + decimalPart : formattedInteger;
400
368
  }
401
369
  /**
402
370
  * Converts the formatted value to the model format (international standard string)
@@ -572,4 +540,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
572
540
  ],
573
541
  }]
574
542
  }], ctorParameters: () => [] });
575
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpYy1tYXNrLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9udW1lcmljLW1hc2svc3JjL2xpYi9udW1lcmljLW1hc2svbnVtZXJpYy1tYXNrLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFHSCxhQUFhLEVBQ2IsaUJBQWlCLEdBR3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sU0FBUyxNQUFNLGNBQWMsQ0FBQzs7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUEwQkgsTUFBTSxPQUFPLG9CQUFvQjtJQUM3Qjs7O09BR0c7SUFDSSxNQUFNLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUVyRDs7O09BR0c7SUFDSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbkM7OztPQUdHO0lBQ0ksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXBDOzs7T0FHRztJQUNJLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFcEM7OztPQUdHO0lBQ0ksdUJBQXVCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdDOztPQUVHO0lBQ0ksR0FBRyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxDQUFDLENBQUM7SUFFbEQ7O09BRUc7SUFDSSxHQUFHLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUVqQyxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUEsVUFB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QWJsQjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7Z0JBQ25ELEtBQUssRUFBRSxJQUFJO2FBQ2Q7WUFDRDtnQkFDSSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDbkQsS0FBSyxFQUFFLElBQUk7YUFDZDtTQUNKOzs0RkFFUSxvQkFBb0I7a0JBekJoQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0YsU0FBUyxFQUFFLGlCQUFpQjt3QkFDNUIsU0FBUyxFQUFFLFdBQVc7d0JBQ3RCLFFBQVEsRUFBRSxVQUFVO3dCQUNwQixTQUFTLEVBQUUsaUJBQWlCO3dCQUM1QixXQUFXLEVBQUUsbUJBQW1CO3dCQUNoQyxZQUFZLEVBQUUsb0JBQW9CO3dCQUNsQyxvQkFBb0IsRUFBRSxTQUFTO3FCQUNsQztvQkFDRCxTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUM7NEJBQ25ELEtBQUssRUFBRSxJQUFJO3lCQUNkO3dCQUNEOzRCQUNJLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGVmZmVjdCwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgaW5qZWN0LCBpbnB1dCwgT25Jbml0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIE5HX1ZBTElEQVRPUlMsXG4gICAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgVmFsaWRhdGlvbkVycm9ycyxcbiAgICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvbG9jYWxlJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcblxuLyoqXG4gKiBOdW1lcmljIG1hc2sgZGlyZWN0aXZlIHdpdGggaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydC5cbiAqXG4gKiBGb3JtYXRzIG51bWVyaWMgdmFsdWVzIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGxvY2FsZSwgYXBwbHlpbmdcbiAqIGFwcHJvcHJpYXRlIHRob3VzYW5kIGFuZCBkZWNpbWFsIHNlcGFyYXRvcnMsIHdpdGggc3VwcG9ydCBmb3IgbmVnYXRpdmUgdmFsdWVzLFxuICogbWluL21heCBkZWNpbWFsIHBsYWNlcyBjb250cm9sLCBhbmQgc2NpZW50aWZpYyBub3RhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlucHV0XG4gKiAgIHR5cGU9XCJ0ZXh0XCJcbiAqICAgc051bWVyaWNNYXNrXG4gKiAgIFtsb2NhbGVdPVwiJ3B0LUJSJ1wiXG4gKiAgIFttaW5EZWNpbWFsUGxhY2VzXT1cIjJcIlxuICogICBbbWF4RGVjaW1hbFBsYWNlc109XCIyXCJcbiAqICAgW2FsbG93TmVnYXRpdmVdPVwidHJ1ZVwiXG4gKiAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICogLz5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tzTnVtZXJpY01hc2tdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhpbnB1dCknOiAnb25JbnB1dCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1cyknOiAnb25Gb2N1cygpJyxcbiAgICAgICAgJyhibHVyKSc6ICdvbkJsdXIoKScsXG4gICAgICAgICcocGFzdGUpJzogJ29uUGFzdGUoJGV2ZW50KScsXG4gICAgICAgICcoa2V5ZG93biknOiAnb25LZXlEb3duKCRldmVudCknLFxuICAgICAgICAnKGtleXByZXNzKSc6ICdvbktleVByZXNzKCRldmVudCknLFxuICAgICAgICAnW3N0eWxlLnRleHQtYWxpZ25dJzogJ1wicmlnaHRcIicsXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOdW1lcmljTWFza0RpcmVjdGl2ZSksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE51bWVyaWNNYXNrRGlyZWN0aXZlKSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE51bWVyaWNNYXNrRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgICAvKipcbiAgICAgKiBMb2NhbGUgZm9yIGZvcm1hdHRpbmcgKGUuZy4gJ3B0LUJSJywgJ2VuLVVTJywgJ2RlLURFJylcbiAgICAgKiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgdGhlIGxvY2FsZSBmcm9tIExvY2FsZVNlcnZpY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9jYWxlID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gICAgLyoqXG4gICAgICogTWluaW11bSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gZGlzcGxheVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBwdWJsaWMgbWluRGVjaW1hbFBsYWNlcyA9IGlucHV0KDApO1xuXG4gICAgLyoqXG4gICAgICogTWF4aW11bSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgYWxsb3dlZFxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgcHVibGljIG1heERlY2ltYWxQbGFjZXMgPSBpbnB1dCgxMCk7XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgbmVnYXRpdmUgdmFsdWVzXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgYWxsb3dOZWdhdGl2ZSA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgc2NpZW50aWZpYyBub3RhdGlvbiBzdXBwb3J0XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBhbGxvd1NjaWVudGlmaWNOb3RhdGlvbiA9IGlucHV0KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogTWluaW11bSB2YWx1ZSBhbGxvd2VkXG4gICAgICovXG4gICAgcHVibGljIG1pbiA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIC8qKlxuICAgICAqIE1heGltdW0gdmFsdWUgYWxsb3dlZFxuICAgICAqL1xuICAgIHB1YmxpYyBtYXggPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pik7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxlU2VydmljZSA9IGluamVjdChMb2NhbGVTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkID0gKCkgPT4ge307XG4gICAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIGRlY2ltYWxTZXBhcmF0b3IgPSAnLCc7XG4gICAgcHJpdmF0ZSB0aG91c2FuZFNlcGFyYXRvciA9ICcuJztcbiAgICBwcml2YXRlIGN1cnJlbnRMb2NhbGUgPSAncHQtQlInO1xuICAgIHByaXZhdGUgbGFzdE1vZGVsVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dExvY2FsZSA9IHRoaXMubG9jYWxlKCk7XG5cbiAgICAgICAgICAgIGlmIChpbnB1dExvY2FsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2FsZSA9IGlucHV0TG9jYWxlO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VwYXJhdG9ycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1pbkRlY2ltYWxQbGFjZXMoKSA+IHRoaXMubWF4RGVjaW1hbFBsYWNlcygpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYE51bWVyaWNNYXNrRGlyZWN0aXZlOiBtaW5EZWNpbWFsUGxhY2VzICgke3RoaXMubWluRGVjaW1hbFBsYWNlcygpfSkgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBtYXhEZWNpbWFsUGxhY2VzICgke3RoaXMubWF4RGVjaW1hbFBsYWNlcygpfSlgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubG9jYWxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2FsZSA9IHRoaXMubG9jYWxlKCkhO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZXBhcmF0b3JzKCk7XG4gICAgICAgICAgICB0aGlzLnNldElucHV0TW9kZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxlU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlLmdldCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TG9jYWxlID0gdGhpcy5sb2NhbGVTZXJ2aWNlIS5nZXRMb2NhbGVPcHRpb25zKCk/LmxvY2FsZSB8fCAncHQtQlInO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VwYXJhdG9ycygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRNb2RlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VwYXJhdG9ycygpO1xuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dE1vZGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3RlbmVyIGZvciBpbnB1dCBldmVudHMgKHR5cGluZylcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgbGV0IHZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICAgIHZhbHVlID0gdGhpcy5ub3JtYWxpemVTZXBhcmF0b3JzKHZhbHVlKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzSW5wdXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGlzdGVuZXIgZm9yIGZvY3VzIGV2ZW50cyAoZ2FpbmluZyBmb2N1cylcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gaW5wdXQudmFsdWU7XG5cbiAgICAgICAgaWYgKCFjdXJyZW50VmFsdWUgfHwgY3VycmVudFZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxhc3RNb2RlbFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSB0aGlzLmxhc3RNb2RlbFZhbHVlLnJlcGxhY2UoJy4nLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShpbnB1dCwgJ3ZhbHVlJywgZGlzcGxheVZhbHVlKTtcbiAgICAgICAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9kZWxWYWx1ZSA9IHRoaXMudG9Nb2RlbFZhbHVlKGN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgaWYgKCFtb2RlbFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSBtb2RlbFZhbHVlLnJlcGxhY2UoJy4nLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGlucHV0LCAndmFsdWUnLCBkaXNwbGF5VmFsdWUpO1xuICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0ZW5lciBmb3IgYmx1ciBldmVudHMgKGZvY3VzIGxvc3MpXG4gICAgICovXG4gICAgcHVibGljIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcblxuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZTtcblxuICAgICAgICBpZiAoIWN1cnJlbnRWYWx1ZSB8fCBjdXJyZW50VmFsdWUudHJpbSgpID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMubGFzdE1vZGVsVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9kZWxWYWx1ZSA9IHRoaXMudG9Nb2RlbFZhbHVlKGN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgaWYgKCFtb2RlbFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy5sYXN0TW9kZWxWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhc3RNb2RlbFZhbHVlID0gbW9kZWxWYWx1ZTtcbiAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gdGhpcy5mcm9tTW9kZWxWYWx1ZShtb2RlbFZhbHVlKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgZGlzcGxheVZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShtb2RlbFZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0ZW5lciBmb3IgcGFzdGUgZXZlbnRzIChjbGlwYm9hcmQpXG4gICAgICovXG4gICAgcHVibGljIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSB8fCAnJztcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wYXJzZUNsaXBib2FyZFZhbHVlKHBhc3RlZFRleHQpO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0lucHV0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3RlbmVyIGZvciBzcGVjaWFsIGtleXMgKCsgYW5kIC0pXG4gICAgICovXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJy0nIHx8IGtleSA9PT0gJysnKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQgfHwgMDtcblxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJy0nICYmIHRoaXMuYWxsb3dTY2llbnRpZmljTm90YXRpb24oKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJCZWZvcmVDdXJzb3IgPSB2YWx1ZVtjdXJzb3JQb3NpdGlvbiAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChjaGFyQmVmb3JlQ3Vyc29yID09PSAnZScgfHwgY2hhckJlZm9yZUN1cnNvciA9PT0gJ0UnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dOZWdhdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVNpZ24odmFsdWUsIGtleSA9PT0gJy0nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3RlbmVyIGZvciBrZXlwcmVzcyB0byBibG9jayBpbnZhbGlkIGNoYXJhY3RlcnNcbiAgICAgKi9cbiAgICBwdWJsaWMgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQgfHwgMDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dC52YWx1ZTtcblxuICAgICAgICBpZiAoKGtleSA9PT0gJy0nIHx8IGtleSA9PT0gJysnKSAmJiB0aGlzLmFsbG93U2NpZW50aWZpY05vdGF0aW9uKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXJCZWZvcmVDdXJzb3IgPSB2YWx1ZVtjdXJzb3JQb3NpdGlvbiAtIDFdO1xuICAgICAgICAgICAgaWYgKGNoYXJCZWZvcmVDdXJzb3IgPT09ICdlJyB8fCBjaGFyQmVmb3JlQ3Vyc29yID09PSAnRScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnKycgfHwga2V5ID09PSAnLScpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0RpZ2l0ID0gL15bMC05XSQvLnRlc3Qoa2V5KTtcbiAgICAgICAgY29uc3QgaXNMb2NhbGVEZWNpbWFsU2VwYXJhdG9yID0ga2V5ID09PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3I7XG4gICAgICAgIGNvbnN0IGlzT3RoZXJTZXBhcmF0b3IgPSAoa2V5ID09PSAnLCcgfHwga2V5ID09PSAnLicpICYmIGtleSAhPT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xuICAgICAgICBjb25zdCBpc1NjaWVudGlmaWNOb3RhdGlvbiA9IChrZXkgPT09ICdlJyB8fCBrZXkgPT09ICdFJykgJiYgdGhpcy5hbGxvd1NjaWVudGlmaWNOb3RhdGlvbigpO1xuICAgICAgICBjb25zdCBpc0NvbnRyb2xLZXkgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5O1xuICAgICAgICBjb25zdCBpc1NwZWNpYWxLZXkgPSBbXG4gICAgICAgICAgICAnQmFja3NwYWNlJyxcbiAgICAgICAgICAgICdUYWInLFxuICAgICAgICAgICAgJ0VudGVyJyxcbiAgICAgICAgICAgICdFc2NhcGUnLFxuICAgICAgICAgICAgJ0Fycm93TGVmdCcsXG4gICAgICAgICAgICAnQXJyb3dSaWdodCcsXG4gICAgICAgICAgICAnRGVsZXRlJyxcbiAgICAgICAgICAgICdIb21lJyxcbiAgICAgICAgICAgICdFbmQnLFxuICAgICAgICBdLmluY2x1ZGVzKGtleSk7XG5cbiAgICAgICAgaWYgKGlzT3RoZXJTZXBhcmF0b3IpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNTY2llbnRpZmljTm90YXRpb24pIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnZScpIHx8IHZhbHVlLmluY2x1ZGVzKCdFJykpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2hhckJlZm9yZUN1cnNvciA9IHZhbHVlW2N1cnNvclBvc2l0aW9uIC0gMV07XG4gICAgICAgICAgICBpZiAoIWNoYXJCZWZvcmVDdXJzb3IgfHwgIS9eWzAtOV0kLy50ZXN0KGNoYXJCZWZvcmVDdXJzb3IpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzRGlnaXQgJiYgIWlzTG9jYWxlRGVjaW1hbFNlcGFyYXRvciAmJiAhaXNTY2llbnRpZmljTm90YXRpb24gJiYgIWlzQ29udHJvbEtleSAmJiAhaXNTcGVjaWFsS2V5KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBzZXBhcmF0b3JzIGFjY29yZGluZyB0byB0aGUgbG9jYWxlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVNlcGFyYXRvcnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1cnJlbnRMb2NhbGUpLmZvcm1hdCgxMjM0LjUpO1xuXG4gICAgICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IgPSBmb3JtYXR0ZWRbMV07XG4gICAgICAgIHRoaXMuZGVjaW1hbFNlcGFyYXRvciA9IGZvcm1hdHRlZFs1XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzZXMgaW5wdXQgdmFsdWUgYW5kIHVwZGF0ZXMgdGhlIGlucHV0IGFuZCBtb2RlbFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcm9jZXNzSW5wdXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kZWNpbWFsU2VwYXJhdG9yIHx8ICF0aGlzLnRob3VzYW5kU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcGFyYXRvcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcblxuICAgICAgICBjb25zdCBtb2RlbFZhbHVlID0gdGhpcy50b01vZGVsVmFsdWUodmFsdWUpO1xuXG4gICAgICAgIC8vIER1cmluZyB0eXBpbmcsIGNsZWFyIHRoZSBzdG9yZWQgbW9kZWwgdmFsdWUgc28gb25Gb2N1cyB3aWxsIHJlY2FsY3VsYXRlXG4gICAgICAgIHRoaXMubGFzdE1vZGVsVmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2UobW9kZWxWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBpbnB1dG1vZGUgZm9yIG51bWVyaWMga2V5Ym9hcmQgb24gbW9iaWxlIGRldmljZXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0SW5wdXRNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2lucHV0bW9kZScsICdkZWNpbWFsJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnYXV0b2NvbXBsZXRlJywgJ29mZicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgc2VwYXJhdG9ycyBmcm9tIGEgZm9ybWF0dGVkIHZhbHVlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZVNlcGFyYXRvcnModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHRob3VzYW5kUmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcJHt0aGlzLmVzY2FwZVJlZ2V4KHRoaXMudGhvdXNhbmRTZXBhcmF0b3IpfWAsICdnJyk7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHRob3VzYW5kUmVnZXgsICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdHJpcHMgdW5uZWNlc3NhcnkgdHJhaWxpbmcgemVyb3MgZnJvbSBkZWNpbWFsIHBhcnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgc3RyaXBUcmFpbGluZ1plcm9zKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbHVlLnNwbGl0KHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxQYXJ0ID0gcGFydHNbMV0ucmVwbGFjZSgvMCskLywgJycpO1xuICAgICAgICAgICAgcmV0dXJuIGRlY2ltYWxQYXJ0Lmxlbmd0aCA+IDAgPyBwYXJ0c1swXSArIHRoaXMuZGVjaW1hbFNlcGFyYXRvciArIGRlY2ltYWxQYXJ0IDogcGFydHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vcm1hbGl6ZXMgc2VwYXJhdG9ycyBkdXJpbmcgdHlwaW5nXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIG5vcm1hbGl6ZVNlcGFyYXRvcnModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5yZW1vdmVTZXBhcmF0b3JzKHZhbHVlKTtcblxuICAgICAgICBpZiAodGhpcy5kZWNpbWFsU2VwYXJhdG9yID09PSAnLCcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXFwuL2csICcsJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kZWNpbWFsU2VwYXJhdG9yID09PSAnLicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvLC9nLCAnLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdCh0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJ0c1swXSArIHRoaXMuZGVjaW1hbFNlcGFyYXRvciArIHBhcnRzLnNsaWNlKDEpLmpvaW4oJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGZvciB1c2UgaW4gcmVnZXhcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZXNjYXBlUmVnZXgoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJ1bmNhdGVzIGEgbnVtYmVyIHRvIHRoZSBzcGVjaWZpZWQgZGVjaW1hbCBwbGFjZXMgKG5ldmVyIHJvdW5kcylcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgdHJ1bmNhdGVUb0RlY2ltYWxQbGFjZXMoYmlnTnVtYmVyOiBCaWdOdW1iZXIsIGRlY2ltYWxQbGFjZXM6IG51bWJlcik6IEJpZ051bWJlciB7XG4gICAgICAgIGlmIChkZWNpbWFsUGxhY2VzIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIGJpZ051bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtdWx0aXBsaWVyID0gbmV3IEJpZ051bWJlcigxMCkucG93KGRlY2ltYWxQbGFjZXMpO1xuICAgICAgICByZXR1cm4gYmlnTnVtYmVyLm11bHRpcGxpZWRCeShtdWx0aXBsaWVyKS5pbnRlZ2VyVmFsdWUoQmlnTnVtYmVyLlJPVU5EX0RPV04pLmRpdmlkZWRCeShtdWx0aXBsaWVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIHZhbHVlIGhhcyBleGNlc3NpdmUgZGVjaW1hbCBwbGFjZXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgaGFzRXhjZXNzaXZlRGVjaW1hbFBsYWNlcyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQodGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcblxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgZGVjaW1hbFBhcnQgPSBwYXJ0c1sxXS5yZXBsYWNlKC9bXjAtOV0vZywgJycpO1xuICAgICAgICAgICAgcmV0dXJuIGRlY2ltYWxQYXJ0Lmxlbmd0aCA+IHRoaXMubWF4RGVjaW1hbFBsYWNlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgaW5wdXQgYW5kIG5vdGlmaWVzIHRoZSBtb2RlbFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjbGVhcklucHV0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCAnJyk7XG4gICAgICAgIHRoaXMubGFzdE1vZGVsVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIHN0cmluZyB2YWx1ZSB0byBpdHMgbnVtZXJpYyByZXByZXNlbnRhdGlvbiwgaGFuZGxpbmcgc2VwYXJhdG9ycyBhbmQgc2lnblxuICAgICAqIFJldHVybnMgQmlnTnVtYmVyIHRvIHByZXNlcnZlIGZ1bGwgcHJlY2lzaW9uIGFuZCBvcHRpb25hbCBudW1iZXIgY29udmVyc2lvblxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZVN0cmluZ1RvVmFsdWUodmFsdWU6IHN0cmluZyk6IHsgYmlnTnVtYmVyOiBCaWdOdW1iZXI7IG51bWVyaWM6IG51bWJlcjsgaXNOZWdhdGl2ZTogYm9vbGVhbiB9IHtcbiAgICAgICAgY29uc3QgaXNOZWdhdGl2ZSA9IHZhbHVlLnN0YXJ0c1dpdGgoJy0nKTtcbiAgICAgICAgbGV0IG51bWVyaWNTdHIgPSB2YWx1ZVxuICAgICAgICAgICAgLnJlcGxhY2UoL14tLywgJycpXG4gICAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxcJHt0aGlzLnRob3VzYW5kU2VwYXJhdG9yfWAsICdnJyksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXCR7dGhpcy5kZWNpbWFsU2VwYXJhdG9yfWAsICdnJyksICcuJyk7XG5cbiAgICAgICAgaWYgKG51bWVyaWNTdHIgPT09ICcuJyB8fCBudW1lcmljU3RyID09PSAnJykge1xuICAgICAgICAgICAgbnVtZXJpY1N0ciA9ICcwJztcbiAgICAgICAgfSBlbHNlIGlmIChudW1lcmljU3RyLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICAgICAgbnVtZXJpY1N0ciA9ICcwJyArIG51bWVyaWNTdHI7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYmlnTnVtYmVyID0gbmV3IEJpZ051bWJlcihudW1lcmljU3RyKTtcbiAgICAgICAgaWYgKGJpZ051bWJlci5pc05hTigpKSB7XG4gICAgICAgICAgICBiaWdOdW1iZXIgPSBuZXcgQmlnTnVtYmVyKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmVnYXRpdmUgJiYgdGhpcy5hbGxvd05lZ2F0aXZlKCkpIHtcbiAgICAgICAgICAgIGJpZ051bWJlciA9IGJpZ051bWJlci5uZWdhdGVkKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBiaWdOdW1iZXIsIG51bWVyaWM6IGJpZ051bWJlci50b051bWJlcigpLCBpc05lZ2F0aXZlIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9ybWF0cyBhIG51bWVyaWMgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbGVcbiAgICAgKiBUcnVuY2F0ZXMgKG5ldmVyIHJvdW5kcykgdG8gbWF4RGVjaW1hbFBsYWNlcyBhbmQgcGFkcyB3aXRoIHplcm9zIHRvIG1pbkRlY2ltYWxQbGFjZXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZm9ybWF0TnVtZXJpYyhudW1lcmljOiBudW1iZXIgfCBCaWdOdW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBsZXQgYmlnTnVtZXJpYyA9IG51bWVyaWMgaW5zdGFuY2VvZiBCaWdOdW1iZXIgPyBudW1lcmljIDogbmV3IEJpZ051bWJlcihudW1lcmljKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHRydW5jYXRlZFZhbHVlID0gdGhpcy50cnVuY2F0ZVRvRGVjaW1hbFBsYWNlcyhiaWdOdW1lcmljLCB0aGlzLm1heERlY2ltYWxQbGFjZXMoKSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCB2YWx1ZVN0ciA9IHRydW5jYXRlZFZhbHVlLnRvRml4ZWQoTWF0aC5tYXgodGhpcy5taW5EZWNpbWFsUGxhY2VzKCksIHRoaXMubWF4RGVjaW1hbFBsYWNlcygpKSk7XG4gICAgICAgIFxuICAgICAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSB2YWx1ZVN0ci5yZXBsYWNlKCcuJywgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVkVmFsdWUuc3BsaXQodGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgICAgICAgY29uc3QgaW50ZWdlclBhcnQgPSBwYXJ0c1swXTtcbiAgICAgICAgbGV0IGRlY2ltYWxQYXJ0ID0gcGFydHNbMV0gfHwgJyc7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBmb3JtYXR0ZWRJbnRlZ2VyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMuY3VycmVudExvY2FsZSkuZm9ybWF0KFxuICAgICAgICAgICAgcGFyc2VJbnQoaW50ZWdlclBhcnQsIDEwKSB8fCAwXG4gICAgICAgICkuc3BsaXQodGhpcy5kZWNpbWFsU2VwYXJhdG9yKVswXTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZURlY2ltYWxQbGFjZXMgPSBkZWNpbWFsUGFydC5yZXBsYWNlKC8wKyQvLCAnJykubGVuZ3RoO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZGVjaW1hbFBsYWNlc1RvU2hvdyA9IE1hdGgubWF4KFxuICAgICAgICAgICAgdGhpcy5taW5EZWNpbWFsUGxhY2VzKCksXG4gICAgICAgICAgICBNYXRoLm1pbihlZmZlY3RpdmVEZWNpbWFsUGxhY2VzLCB0aGlzLm1heERlY2ltYWxQbGFjZXMoKSlcbiAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgIGRlY2ltYWxQYXJ0ID0gZGVjaW1hbFBhcnQuc3Vic3RyaW5nKDAsIGRlY2ltYWxQbGFjZXNUb1Nob3cpLnBhZEVuZChkZWNpbWFsUGxhY2VzVG9TaG93LCAnMCcpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZEludGVnZXIgKyB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgKyBkZWNpbWFsUGFydDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3JtYXRzIHRoZSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGxvY2FsZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBmb3JtYXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBudW1lcmljIH0gPSB0aGlzLnBhcnNlU3RyaW5nVG9WYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdE51bWVyaWMobnVtZXJpYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGZvcm1hdHRlZCB2YWx1ZSB0byB0aGUgbW9kZWwgZm9ybWF0IChpbnRlcm5hdGlvbmFsIHN0YW5kYXJkIHN0cmluZylcbiAgICAgKiBBbHdheXMgcmV0dXJucyBkZWNpbWFsIG5vdGF0aW9uLCBuZXZlciBzY2llbnRpZmljIG5vdGF0aW9uXG4gICAgICogU3RvcmVzIHRoZSBmdWxsIHByZWNpc2lvbiB2YWx1ZSB3aXRob3V0IHRydW5jYXRpb25cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgdG9Nb2RlbFZhbHVlKGZvcm1hdHRlZFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWRWYWx1ZSB8fCBmb3JtYXR0ZWRWYWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGJpZ051bWJlciB9ID0gdGhpcy5wYXJzZVN0cmluZ1RvVmFsdWUoZm9ybWF0dGVkVmFsdWUpO1xuICAgICAgICByZXR1cm4gYmlnTnVtYmVyLnRvRml4ZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgbW9kZWwgdmFsdWUgdG8gZGlzcGxheSBmb3JtYXRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZnJvbU1vZGVsVmFsdWUobW9kZWxWYWx1ZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChtb2RlbFZhbHVlID09PSBudWxsIHx8IG1vZGVsVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBtb2RlbFZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpZ051bWJlciA9IG5ldyBCaWdOdW1iZXIobW9kZWxWYWx1ZSk7XG4gICAgICAgIGlmIChiaWdOdW1iZXIuaXNOYU4oKSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdE51bWVyaWMoYmlnTnVtYmVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzZXMgcGFzdGVkIHZhbHVlIGZyb20gY2xpcGJvYXJkXG4gICAgICogQ29udmVydHMgc2NpZW50aWZpYyBub3RhdGlvbiB0byBkZWNpbWFsIHVzaW5nIEJpZ051bWJlclxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZUNsaXBib2FyZFZhbHVlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93U2NpZW50aWZpY05vdGF0aW9uKCkgJiYgL1tlRV0vLnRlc3QodGV4dCkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmlnTnVtZXJpYyA9IG5ldyBCaWdOdW1iZXIodGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKCFiaWdOdW1lcmljLmlzTmFOKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGJpZ051bWVyaWMudG9GaXhlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIHZvaWQgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVTZXBhcmF0b3JzKHRleHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHNpZ24gKC0gb3IgKykgb2YgYSB2YWx1ZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b2dnbGVTaWduKHZhbHVlOiBzdHJpbmcsIG1ha2VOZWdhdGl2ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAobWFrZU5lZ2F0aXZlICYmICFuZXdWYWx1ZS5zdGFydHNXaXRoKCctJykpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJy0nICsgbmV3VmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoIW1ha2VOZWdhdGl2ZSAmJiBuZXdWYWx1ZS5zdGFydHNXaXRoKCctJykpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShpbnB1dCwgJ3ZhbHVlJywgbmV3VmFsdWUpO1xuICAgICAgICBjb25zdCBtb2RlbFZhbHVlID0gdGhpcy50b01vZGVsVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB0aGlzLmxhc3RNb2RlbFZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShtb2RlbFZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGVjaW1hbFNlcGFyYXRvciB8fCAhdGhpcy50aG91c2FuZFNlcGFyYXRvcikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZXBhcmF0b3JzKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGhhc0ZvY3VzKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuZnJvbU1vZGVsVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgcmF3VmFsdWUgPSB0aGlzLnN0cmlwVHJhaWxpbmdaZXJvcyh0aGlzLnJlbW92ZVNlcGFyYXRvcnMoZm9ybWF0dGVkVmFsdWUpKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHJhd1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy5mcm9tTW9kZWxWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCBmb3JtYXR0ZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNhYmxlZCcsIGlzRGlzYWJsZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcblxuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuXG4gICAgICAgIGlmIChpc05hTihudW1lcmljVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5hbGxvd05lZ2F0aXZlKCkgJiYgbnVtZXJpY1ZhbHVlIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbmVnYXRpdmVOb3RBbGxvd2VkOiB0cnVlIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtaW5WYWx1ZSA9IHRoaXMubWluKCk7XG4gICAgICAgIGlmIChtaW5WYWx1ZSAhPT0gdW5kZWZpbmVkICYmIG51bWVyaWNWYWx1ZSA8IG1pblZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1pbjoge1xuICAgICAgICAgICAgICAgICAgICBtaW46IG1pblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IG51bWVyaWNWYWx1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5tYXgoKTtcbiAgICAgICAgaWYgKG1heFZhbHVlICE9PSB1bmRlZmluZWQgJiYgbnVtZXJpY1ZhbHVlID4gbWF4VmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWF4OiB7XG4gICAgICAgICAgICAgICAgICAgIG1heDogbWF4VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbDogbnVtZXJpY1ZhbHVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVjaW1hbFBhcnQgPSB2YWx1ZS5zcGxpdCgnLicpWzFdO1xuXG4gICAgICAgIGlmIChkZWNpbWFsUGFydCAmJiBkZWNpbWFsUGFydC5sZW5ndGggPiB0aGlzLm1heERlY2ltYWxQbGFjZXMoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBleGNlc3NpdmVEZWNpbWFsUGxhY2VzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1heDogdGhpcy5tYXhEZWNpbWFsUGxhY2VzKCksXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbDogZGVjaW1hbFBhcnQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG4iXX0=
543
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpYy1tYXNrLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9udW1lcmljLW1hc2svc3JjL2xpYi9udW1lcmljLW1hc2svbnVtZXJpYy1tYXNrLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFHSCxhQUFhLEVBQ2IsaUJBQWlCLEdBR3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sU0FBUyxNQUFNLGNBQWMsQ0FBQzs7QUFFckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUEwQkgsTUFBTSxPQUFPLG9CQUFvQjtJQUM3Qjs7O09BR0c7SUFDSSxNQUFNLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUVyRDs7O09BR0c7SUFDSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbkM7OztPQUdHO0lBQ0ksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXBDOzs7T0FHRztJQUNJLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFcEM7OztPQUdHO0lBQ0ksdUJBQXVCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdDOztPQUVHO0lBQ0ksR0FBRyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxDQUFDLENBQUM7SUFFbEQ7O09BRUc7SUFDSSxHQUFHLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUVqQyxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUEsVUFB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bnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIGluamVjdCwgaW5wdXQsIE9uSW5pdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEFic3RyYWN0Q29udHJvbCxcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBOR19WQUxJREFUT1JTLFxuICAgIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIFZhbGlkYXRpb25FcnJvcnMsXG4gICAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2xvY2FsZSc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbi8qKlxuICogTnVtZXJpYyBtYXNrIGRpcmVjdGl2ZSB3aXRoIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQuXG4gKlxuICogRm9ybWF0cyBudW1lcmljIHZhbHVlcyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBsb2NhbGUsIGFwcGx5aW5nXG4gKiBhcHByb3ByaWF0ZSB0aG91c2FuZCBhbmQgZGVjaW1hbCBzZXBhcmF0b3JzLCB3aXRoIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIHZhbHVlcyxcbiAqIG1pbi9tYXggZGVjaW1hbCBwbGFjZXMgY29udHJvbCwgYW5kIHNjaWVudGlmaWMgbm90YXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpbnB1dFxuICogICB0eXBlPVwidGV4dFwiXG4gKiAgIHNOdW1lcmljTWFza1xuICogICBbbG9jYWxlXT1cIidwdC1CUidcIlxuICogICBbbWluRGVjaW1hbFBsYWNlc109XCIyXCJcbiAqICAgW21heERlY2ltYWxQbGFjZXNdPVwiMlwiXG4gKiAgIFthbGxvd05lZ2F0aXZlXT1cInRydWVcIlxuICogICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcbiAqIC8+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbc051bWVyaWNNYXNrXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoaW5wdXQpJzogJ29uSW5wdXQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXMpJzogJ29uRm9jdXMoKScsXG4gICAgICAgICcoYmx1ciknOiAnb25CbHVyKCknLFxuICAgICAgICAnKHBhc3RlKSc6ICdvblBhc3RlKCRldmVudCknLFxuICAgICAgICAnKGtleWRvd24pJzogJ29uS2V5RG93bigkZXZlbnQpJyxcbiAgICAgICAgJyhrZXlwcmVzcyknOiAnb25LZXlQcmVzcygkZXZlbnQpJyxcbiAgICAgICAgJ1tzdHlsZS50ZXh0LWFsaWduXSc6ICdcInJpZ2h0XCInLFxuICAgIH0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTnVtZXJpY01hc2tEaXJlY3RpdmUpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOdW1lcmljTWFza0RpcmVjdGl2ZSksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOdW1lcmljTWFza0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XG4gICAgLyoqXG4gICAgICogTG9jYWxlIGZvciBmb3JtYXR0aW5nIChlLmcuICdwdC1CUicsICdlbi1VUycsICdkZS1ERScpXG4gICAgICogSWYgbm90IHByb3ZpZGVkLCB1c2VzIHRoZSBsb2NhbGUgZnJvbSBMb2NhbGVTZXJ2aWNlXG4gICAgICovXG4gICAgcHVibGljIGxvY2FsZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIC8qKlxuICAgICAqIE1pbmltdW0gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIGRpc3BsYXlcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgcHVibGljIG1pbkRlY2ltYWxQbGFjZXMgPSBpbnB1dCgwKTtcblxuICAgIC8qKlxuICAgICAqIE1heGltdW0gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGFsbG93ZWRcbiAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAqL1xuICAgIHB1YmxpYyBtYXhEZWNpbWFsUGxhY2VzID0gaW5wdXQoMTApO1xuXG4gICAgLyoqXG4gICAgICogQWxsb3dzIG5lZ2F0aXZlIHZhbHVlc1xuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGFsbG93TmVnYXRpdmUgPSBpbnB1dChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHNjaWVudGlmaWMgbm90YXRpb24gc3VwcG9ydFxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgYWxsb3dTY2llbnRpZmljTm90YXRpb24gPSBpbnB1dCh0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIE1pbmltdW0gdmFsdWUgYWxsb3dlZFxuICAgICAqL1xuICAgIHB1YmxpYyBtaW4gPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIHZhbHVlIGFsbG93ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4ID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2UgPSBpbmplY3QoTG9jYWxlU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG4gICAgcHJpdmF0ZSBkZWNpbWFsU2VwYXJhdG9yID0gJywnO1xuICAgIHByaXZhdGUgdGhvdXNhbmRTZXBhcmF0b3IgPSAnLic7XG4gICAgcHJpdmF0ZSBjdXJyZW50TG9jYWxlID0gJ3B0LUJSJztcbiAgICBwcml2YXRlIGxhc3RNb2RlbFZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRMb2NhbGUgPSB0aGlzLmxvY2FsZSgpO1xuXG4gICAgICAgICAgICBpZiAoaW5wdXRMb2NhbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2NhbGUgPSBpbnB1dExvY2FsZTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcGFyYXRvcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5taW5EZWNpbWFsUGxhY2VzKCkgPiB0aGlzLm1heERlY2ltYWxQbGFjZXMoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBOdW1lcmljTWFza0RpcmVjdGl2ZTogbWluRGVjaW1hbFBsYWNlcyAoJHt0aGlzLm1pbkRlY2ltYWxQbGFjZXMoKX0pIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4RGVjaW1hbFBsYWNlcyAoJHt0aGlzLm1heERlY2ltYWxQbGFjZXMoKX0pYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2NhbGUgPSB0aGlzLmxvY2FsZSgpITtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VwYXJhdG9ycygpO1xuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dE1vZGUoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxlU2VydmljZS5nZXQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2FsZSA9IHRoaXMubG9jYWxlU2VydmljZSEuZ2V0TG9jYWxlT3B0aW9ucygpPy5sb2NhbGUgfHwgJ3B0LUJSJztcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcGFyYXRvcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldElucHV0TW9kZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcGFyYXRvcnMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRNb2RlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0ZW5lciBmb3IgaW5wdXQgZXZlbnRzICh0eXBpbmcpXG4gICAgICovXG4gICAgcHVibGljIG9uSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGxldCB2YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICB2YWx1ZSA9IHRoaXMubm9ybWFsaXplU2VwYXJhdG9ycyh2YWx1ZSk7XG4gICAgICAgIHRoaXMucHJvY2Vzc0lucHV0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3RlbmVyIGZvciBmb2N1cyBldmVudHMgKGdhaW5pbmcgZm9jdXMpXG4gICAgICovXG4gICAgcHVibGljIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGlucHV0LnZhbHVlO1xuXG4gICAgICAgIGlmICghY3VycmVudFZhbHVlIHx8IGN1cnJlbnRWYWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXN0TW9kZWxWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gdGhpcy5sYXN0TW9kZWxWYWx1ZS5yZXBsYWNlKCcuJywgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoaW5wdXQsICd2YWx1ZScsIGRpc3BsYXlWYWx1ZSk7XG4gICAgICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB0aGlzLnRvTW9kZWxWYWx1ZShjdXJyZW50VmFsdWUpO1xuXG4gICAgICAgIGlmICghbW9kZWxWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gbW9kZWxWYWx1ZS5yZXBsYWNlKCcuJywgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShpbnB1dCwgJ3ZhbHVlJywgZGlzcGxheVZhbHVlKTtcbiAgICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGlzdGVuZXIgZm9yIGJsdXIgZXZlbnRzIChmb2N1cyBsb3NzKVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG5cbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG5cbiAgICAgICAgaWYgKCFjdXJyZW50VmFsdWUgfHwgY3VycmVudFZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmxhc3RNb2RlbFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB0aGlzLnRvTW9kZWxWYWx1ZShjdXJyZW50VmFsdWUpO1xuXG4gICAgICAgIGlmICghbW9kZWxWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMubGFzdE1vZGVsVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXN0TW9kZWxWYWx1ZSA9IG1vZGVsVmFsdWU7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IHRoaXMuZnJvbU1vZGVsVmFsdWUobW9kZWxWYWx1ZSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIGRpc3BsYXlWYWx1ZSk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UobW9kZWxWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGlzdGVuZXIgZm9yIHBhc3RlIGV2ZW50cyAoY2xpcGJvYXJkKVxuICAgICAqL1xuICAgIHB1YmxpYyBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgfHwgJyc7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMucGFyc2VDbGlwYm9hcmRWYWx1ZShwYXN0ZWRUZXh0KTtcblxuICAgICAgICB0aGlzLnByb2Nlc3NJbnB1dFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0ZW5lciBmb3Igc3BlY2lhbCBrZXlzICgrIGFuZCAtKVxuICAgICAqL1xuICAgIHB1YmxpYyBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgICAgIGlmIChrZXkgPT09ICctJyB8fCBrZXkgPT09ICcrJykge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGlucHV0LnNlbGVjdGlvblN0YXJ0IHx8IDA7XG5cbiAgICAgICAgICAgIGlmIChrZXkgPT09ICctJyAmJiB0aGlzLmFsbG93U2NpZW50aWZpY05vdGF0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFyQmVmb3JlQ3Vyc29yID0gdmFsdWVbY3Vyc29yUG9zaXRpb24gLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAoY2hhckJlZm9yZUN1cnNvciA9PT0gJ2UnIHx8IGNoYXJCZWZvcmVDdXJzb3IgPT09ICdFJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFsbG93TmVnYXRpdmUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50b2dnbGVTaWduKHZhbHVlLCBrZXkgPT09ICctJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0ZW5lciBmb3Iga2V5cHJlc3MgdG8gYmxvY2sgaW52YWxpZCBjaGFyYWN0ZXJzXG4gICAgICovXG4gICAgcHVibGljIG9uS2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGlucHV0LnNlbGVjdGlvblN0YXJ0IHx8IDA7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXQudmFsdWU7XG5cbiAgICAgICAgaWYgKChrZXkgPT09ICctJyB8fCBrZXkgPT09ICcrJykgJiYgdGhpcy5hbGxvd1NjaWVudGlmaWNOb3RhdGlvbigpKSB7XG4gICAgICAgICAgICBjb25zdCBjaGFyQmVmb3JlQ3Vyc29yID0gdmFsdWVbY3Vyc29yUG9zaXRpb24gLSAxXTtcbiAgICAgICAgICAgIGlmIChjaGFyQmVmb3JlQ3Vyc29yID09PSAnZScgfHwgY2hhckJlZm9yZUN1cnNvciA9PT0gJ0UnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJysnIHx8IGtleSA9PT0gJy0nKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNEaWdpdCA9IC9eWzAtOV0kLy50ZXN0KGtleSk7XG4gICAgICAgIGNvbnN0IGlzTG9jYWxlRGVjaW1hbFNlcGFyYXRvciA9IGtleSA9PT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yO1xuICAgICAgICBjb25zdCBpc090aGVyU2VwYXJhdG9yID0gKGtleSA9PT0gJywnIHx8IGtleSA9PT0gJy4nKSAmJiBrZXkgIT09IHRoaXMuZGVjaW1hbFNlcGFyYXRvcjtcbiAgICAgICAgY29uc3QgaXNTY2llbnRpZmljTm90YXRpb24gPSAoa2V5ID09PSAnZScgfHwga2V5ID09PSAnRScpICYmIHRoaXMuYWxsb3dTY2llbnRpZmljTm90YXRpb24oKTtcbiAgICAgICAgY29uc3QgaXNDb250cm9sS2V5ID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmFsdEtleTtcbiAgICAgICAgY29uc3QgaXNTcGVjaWFsS2V5ID0gW1xuICAgICAgICAgICAgJ0JhY2tzcGFjZScsXG4gICAgICAgICAgICAnVGFiJyxcbiAgICAgICAgICAgICdFbnRlcicsXG4gICAgICAgICAgICAnRXNjYXBlJyxcbiAgICAgICAgICAgICdBcnJvd0xlZnQnLFxuICAgICAgICAgICAgJ0Fycm93UmlnaHQnLFxuICAgICAgICAgICAgJ0RlbGV0ZScsXG4gICAgICAgICAgICAnSG9tZScsXG4gICAgICAgICAgICAnRW5kJyxcbiAgICAgICAgXS5pbmNsdWRlcyhrZXkpO1xuXG4gICAgICAgIGlmIChpc090aGVyU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzU2NpZW50aWZpY05vdGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoJ2UnKSB8fCB2YWx1ZS5pbmNsdWRlcygnRScpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoYXJCZWZvcmVDdXJzb3IgPSB2YWx1ZVtjdXJzb3JQb3NpdGlvbiAtIDFdO1xuICAgICAgICAgICAgaWYgKCFjaGFyQmVmb3JlQ3Vyc29yIHx8ICEvXlswLTldJC8udGVzdChjaGFyQmVmb3JlQ3Vyc29yKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0RpZ2l0ICYmICFpc0xvY2FsZURlY2ltYWxTZXBhcmF0b3IgJiYgIWlzU2NpZW50aWZpY05vdGF0aW9uICYmICFpc0NvbnRyb2xLZXkgJiYgIWlzU3BlY2lhbEtleSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgc2VwYXJhdG9ycyBhY2NvcmRpbmcgdG8gdGhlIGxvY2FsZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVTZXBhcmF0b3JzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdXJyZW50TG9jYWxlKS5mb3JtYXQoMTIzNC41KTtcblxuICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yID0gZm9ybWF0dGVkWzFdO1xuICAgICAgICB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgPSBmb3JtYXR0ZWRbNV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGlucHV0IHZhbHVlIGFuZCB1cGRhdGVzIHRoZSBpbnB1dCBhbmQgbW9kZWxcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcHJvY2Vzc0lucHV0VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGVjaW1hbFNlcGFyYXRvciB8fCAhdGhpcy50aG91c2FuZFNlcGFyYXRvcikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZXBhcmF0b3JzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCB2YWx1ZSk7XG5cbiAgICAgICAgY29uc3QgbW9kZWxWYWx1ZSA9IHRoaXMudG9Nb2RlbFZhbHVlKHZhbHVlKTtcblxuICAgICAgICAvLyBEdXJpbmcgdHlwaW5nLCBjbGVhciB0aGUgc3RvcmVkIG1vZGVsIHZhbHVlIHNvIG9uRm9jdXMgd2lsbCByZWNhbGN1bGF0ZVxuICAgICAgICB0aGlzLmxhc3RNb2RlbFZhbHVlID0gbnVsbDtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG1vZGVsVmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgaW5wdXRtb2RlIGZvciBudW1lcmljIGtleWJvYXJkIG9uIG1vYmlsZSBkZXZpY2VzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldElucHV0TW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdpbnB1dG1vZGUnLCAnZGVjaW1hbCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2F1dG9jb21wbGV0ZScsICdvZmYnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHNlcGFyYXRvcnMgZnJvbSBhIGZvcm1hdHRlZCB2YWx1ZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVTZXBhcmF0b3JzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB0aG91c2FuZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXCR7dGhpcy5lc2NhcGVSZWdleCh0aGlzLnRob3VzYW5kU2VwYXJhdG9yKX1gLCAnZycpO1xuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSh0aG91c2FuZFJlZ2V4LCAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RyaXBzIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHplcm9zIGZyb20gZGVjaW1hbCBwYXJ0XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHN0cmlwVHJhaWxpbmdaZXJvcyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdCh0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBkZWNpbWFsUGFydCA9IHBhcnRzWzFdLnJlcGxhY2UoLzArJC8sICcnKTtcbiAgICAgICAgICAgIHJldHVybiBkZWNpbWFsUGFydC5sZW5ndGggPiAwID8gcGFydHNbMF0gKyB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgKyBkZWNpbWFsUGFydCA6IHBhcnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemVzIHNlcGFyYXRvcnMgZHVyaW5nIHR5cGluZ1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBub3JtYWxpemVTZXBhcmF0b3JzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICB2YWx1ZSA9IHRoaXMucmVtb3ZlU2VwYXJhdG9ycyh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGVjaW1hbFNlcGFyYXRvciA9PT0gJywnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1xcLi9nLCAnLCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGVjaW1hbFNlcGFyYXRvciA9PT0gJy4nKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLywvZywgJy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQodGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcGFydHNbMF0gKyB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgKyBwYXJ0cy5zbGljZSgxKS5qb2luKCcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc2NhcGVzIHNwZWNpYWwgY2hhcmFjdGVycyBmb3IgdXNlIGluIHJlZ2V4XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGVzY2FwZVJlZ2V4KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRydW5jYXRlcyBhIG51bWJlciB0byB0aGUgc3BlY2lmaWVkIGRlY2ltYWwgcGxhY2VzIChuZXZlciByb3VuZHMpXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHRydW5jYXRlVG9EZWNpbWFsUGxhY2VzKGJpZ051bWJlcjogQmlnTnVtYmVyLCBkZWNpbWFsUGxhY2VzOiBudW1iZXIpOiBCaWdOdW1iZXIge1xuICAgICAgICBpZiAoZGVjaW1hbFBsYWNlcyA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBiaWdOdW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlwbGllciA9IG5ldyBCaWdOdW1iZXIoMTApLnBvdyhkZWNpbWFsUGxhY2VzKTtcbiAgICAgICAgcmV0dXJuIGJpZ051bWJlci5tdWx0aXBsaWVkQnkobXVsdGlwbGllcikuaW50ZWdlclZhbHVlKEJpZ051bWJlci5ST1VORF9ET1dOKS5kaXZpZGVkQnkobXVsdGlwbGllcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIHZhbHVlIHRvIGl0cyBudW1lcmljIHJlcHJlc2VudGF0aW9uLCBoYW5kbGluZyBzZXBhcmF0b3JzIGFuZCBzaWduXG4gICAgICogUmV0dXJucyBCaWdOdW1iZXIgdG8gcHJlc2VydmUgZnVsbCBwcmVjaXNpb24gYW5kIG9wdGlvbmFsIG51bWJlciBjb252ZXJzaW9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlU3RyaW5nVG9WYWx1ZSh2YWx1ZTogc3RyaW5nKTogeyBiaWdOdW1iZXI6IEJpZ051bWJlcjsgbnVtZXJpYzogbnVtYmVyOyBpc05lZ2F0aXZlOiBib29sZWFuIH0ge1xuICAgICAgICBjb25zdCBpc05lZ2F0aXZlID0gdmFsdWUuc3RhcnRzV2l0aCgnLScpO1xuICAgICAgICBsZXQgbnVtZXJpY1N0ciA9IHZhbHVlXG4gICAgICAgICAgICAucmVwbGFjZSgvXi0vLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYFxcXFwke3RoaXMudGhvdXNhbmRTZXBhcmF0b3J9YCwgJ2cnKSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxcJHt0aGlzLmRlY2ltYWxTZXBhcmF0b3J9YCwgJ2cnKSwgJy4nKTtcblxuICAgICAgICBpZiAobnVtZXJpY1N0ciA9PT0gJy4nIHx8IG51bWVyaWNTdHIgPT09ICcnKSB7XG4gICAgICAgICAgICBudW1lcmljU3RyID0gJzAnO1xuICAgICAgICB9IGVsc2UgaWYgKG51bWVyaWNTdHIuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgICBudW1lcmljU3RyID0gJzAnICsgbnVtZXJpY1N0cjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBiaWdOdW1iZXIgPSBuZXcgQmlnTnVtYmVyKG51bWVyaWNTdHIpO1xuICAgICAgICBpZiAoYmlnTnVtYmVyLmlzTmFOKCkpIHtcbiAgICAgICAgICAgIGJpZ051bWJlciA9IG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNOZWdhdGl2ZSAmJiB0aGlzLmFsbG93TmVnYXRpdmUoKSkge1xuICAgICAgICAgICAgYmlnTnVtYmVyID0gYmlnTnVtYmVyLm5lZ2F0ZWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGJpZ051bWJlciwgbnVtZXJpYzogYmlnTnVtYmVyLnRvTnVtYmVyKCksIGlzTmVnYXRpdmUgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3JtYXRzIGEgbnVtZXJpYyB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGxvY2FsZVxuICAgICAqIFRydW5jYXRlcyAobmV2ZXIgcm91bmRzKSB0byBtYXhEZWNpbWFsUGxhY2VzIGFuZCBwYWRzIHdpdGggemVyb3MgdG8gbWluRGVjaW1hbFBsYWNlc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBmb3JtYXROdW1lcmljKG51bWVyaWM6IG51bWJlciB8IEJpZ051bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCBiaWdOdW1lcmljID0gbnVtZXJpYyBpbnN0YW5jZW9mIEJpZ051bWJlciA/IG51bWVyaWMgOiBuZXcgQmlnTnVtYmVyKG51bWVyaWMpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgdHJ1bmNhdGVkVmFsdWUgPSB0aGlzLnRydW5jYXRlVG9EZWNpbWFsUGxhY2VzKGJpZ051bWVyaWMsIHRoaXMubWF4RGVjaW1hbFBsYWNlcygpKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHZhbHVlU3RyID0gdHJ1bmNhdGVkVmFsdWUudG9GaXhlZChNYXRoLm1heCh0aGlzLm1pbkRlY2ltYWxQbGFjZXMoKSwgdGhpcy5tYXhEZWNpbWFsUGxhY2VzKCkpKTtcbiAgICAgICAgXG4gICAgICAgIGxldCBmb3JtYXR0ZWRWYWx1ZSA9IHZhbHVlU3RyLnJlcGxhY2UoJy4nLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgcGFydHMgPSBmb3JtYXR0ZWRWYWx1ZS5zcGxpdCh0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCBpbnRlZ2VyUGFydCA9IHBhcnRzWzBdO1xuICAgICAgICBsZXQgZGVjaW1hbFBhcnQgPSBwYXJ0c1sxXSB8fCAnJztcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZEludGVnZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdXJyZW50TG9jYWxlKS5mb3JtYXQoXG4gICAgICAgICAgICBwYXJzZUludChpbnRlZ2VyUGFydCwgMTApIHx8IDBcbiAgICAgICAgKS5zcGxpdCh0aGlzLmRlY2ltYWxTZXBhcmF0b3IpWzBdO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlRGVjaW1hbFBsYWNlcyA9IGRlY2ltYWxQYXJ0LnJlcGxhY2UoLzArJC8sICcnKS5sZW5ndGg7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBkZWNpbWFsUGxhY2VzVG9TaG93ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICB0aGlzLm1pbkRlY2ltYWxQbGFjZXMoKSxcbiAgICAgICAgICAgIE1hdGgubWluKGVmZmVjdGl2ZURlY2ltYWxQbGFjZXMsIHRoaXMubWF4RGVjaW1hbFBsYWNlcygpKVxuICAgICAgICApO1xuICAgICAgICBcbiAgICAgICAgZGVjaW1hbFBhcnQgPSBkZWNpbWFsUGFydC5zdWJzdHJpbmcoMCwgZGVjaW1hbFBsYWNlc1RvU2hvdykucGFkRW5kKGRlY2ltYWxQbGFjZXNUb1Nob3csICcwJyk7XG5cbiAgICAgICAgcmV0dXJuIGRlY2ltYWxQYXJ0ID8gZm9ybWF0dGVkSW50ZWdlciArIHRoaXMuZGVjaW1hbFNlcGFyYXRvciArIGRlY2ltYWxQYXJ0IDogZm9ybWF0dGVkSW50ZWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZm9ybWF0dGVkIHZhbHVlIHRvIHRoZSBtb2RlbCBmb3JtYXQgKGludGVybmF0aW9uYWwgc3RhbmRhcmQgc3RyaW5nKVxuICAgICAqIEFsd2F5cyByZXR1cm5zIGRlY2ltYWwgbm90YXRpb24sIG5ldmVyIHNjaWVudGlmaWMgbm90YXRpb25cbiAgICAgKiBTdG9yZXMgdGhlIGZ1bGwgcHJlY2lzaW9uIHZhbHVlIHdpdGhvdXQgdHJ1bmNhdGlvblxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b01vZGVsVmFsdWUoZm9ybWF0dGVkVmFsdWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAoIWZvcm1hdHRlZFZhbHVlIHx8IGZvcm1hdHRlZFZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgYmlnTnVtYmVyIH0gPSB0aGlzLnBhcnNlU3RyaW5nVG9WYWx1ZShmb3JtYXR0ZWRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBiaWdOdW1iZXIudG9GaXhlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBtb2RlbCB2YWx1ZSB0byBkaXNwbGF5IGZvcm1hdFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBmcm9tTW9kZWxWYWx1ZShtb2RlbFZhbHVlOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKG1vZGVsVmFsdWUgPT09IG51bGwgfHwgbW9kZWxWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IG1vZGVsVmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmlnTnVtYmVyID0gbmV3IEJpZ051bWJlcihtb2RlbFZhbHVlKTtcbiAgICAgICAgaWYgKGJpZ051bWJlci5pc05hTigpKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0TnVtZXJpYyhiaWdOdW1iZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3NlcyBwYXN0ZWQgdmFsdWUgZnJvbSBjbGlwYm9hcmRcbiAgICAgKiBDb252ZXJ0cyBzY2llbnRpZmljIG5vdGF0aW9uIHRvIGRlY2ltYWwgdXNpbmcgQmlnTnVtYmVyXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlQ2xpcGJvYXJkVmFsdWUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dTY2llbnRpZmljTm90YXRpb24oKSAmJiAvW2VFXS8udGVzdCh0ZXh0KSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiaWdOdW1lcmljID0gbmV3IEJpZ051bWJlcih0ZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAoIWJpZ051bWVyaWMuaXNOYU4oKSkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gYmlnTnVtZXJpYy50b0ZpeGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgdm9pZCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZVNlcGFyYXRvcnModGV4dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgc2lnbiAoLSBvciArKSBvZiBhIHZhbHVlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvZ2dsZVNpZ24odmFsdWU6IHN0cmluZywgbWFrZU5lZ2F0aXZlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCBuZXdWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChtYWtlTmVnYXRpdmUgJiYgIW5ld1ZhbHVlLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnLScgKyBuZXdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICghbWFrZU5lZ2F0aXZlICYmIG5ld1ZhbHVlLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGlucHV0LCAndmFsdWUnLCBuZXdWYWx1ZSk7XG4gICAgICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB0aGlzLnRvTW9kZWxWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMubGFzdE1vZGVsVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKG1vZGVsVmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kZWNpbWFsU2VwYXJhdG9yIHx8ICF0aGlzLnRob3VzYW5kU2VwYXJhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcGFyYXRvcnMoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoaGFzRm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy5mcm9tTW9kZWxWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHRoaXMuc3RyaXBUcmFpbGluZ1plcm9zKHRoaXMucmVtb3ZlU2VwYXJhdG9ycyhmb3JtYXR0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgcmF3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmZyb21Nb2RlbFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIGZvcm1hdHRlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc2FibGVkJywgaXNEaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuXG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbnVtZXJpY1ZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGlzTmFOKG51bWVyaWNWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmFsbG93TmVnYXRpdmUoKSAmJiBudW1lcmljVmFsdWUgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4geyBuZWdhdGl2ZU5vdEFsbG93ZWQ6IHRydWUgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5taW4oKTtcbiAgICAgICAgaWYgKG1pblZhbHVlICE9PSB1bmRlZmluZWQgJiYgbnVtZXJpY1ZhbHVlIDwgbWluVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWluOiB7XG4gICAgICAgICAgICAgICAgICAgIG1pbjogbWluVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbDogbnVtZXJpY1ZhbHVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF4VmFsdWUgPSB0aGlzLm1heCgpO1xuICAgICAgICBpZiAobWF4VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBudW1lcmljVmFsdWUgPiBtYXhWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtYXg6IHtcbiAgICAgICAgICAgICAgICAgICAgbWF4OiBtYXhWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBudW1lcmljVmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWNpbWFsUGFydCA9IHZhbHVlLnNwbGl0KCcuJylbMV07XG5cbiAgICAgICAgaWYgKGRlY2ltYWxQYXJ0ICYmIGRlY2ltYWxQYXJ0Lmxlbmd0aCA+IHRoaXMubWF4RGVjaW1hbFBsYWNlcygpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGV4Y2Vzc2l2ZURlY2ltYWxQbGFjZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgbWF4OiB0aGlzLm1heERlY2ltYWxQbGFjZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBkZWNpbWFsUGFydC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbiJdfQ==
@@ -0,0 +1,18 @@
1
+ import { Component, input } from '@angular/core';
2
+ import { ReactiveFormsModule } from '@angular/forms';
3
+ import { FieldLabelComponent } from '@seniorsistemas/angular-components/dynamic-form';
4
+ import { EditorModule } from 'primeng/editor';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "primeng/editor";
7
+ import * as i2 from "@angular/forms";
8
+ export class EditorFieldComponent {
9
+ field = input.required();
10
+ formControl = input.required();
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditorFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: EditorFieldComponent, isStandalone: true, selector: "ng-component", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, formControl: { classPropertyName: "formControl", publicName: "formControl", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let _field = field();\n<s-field-label [field]=\"_field\"></s-field-label>\n\n<p-editor\n [formControl]=\"formControl()\"\n [formats]=\"_field.formats\"\n [readonly]=\"_field.readonly ? _field.readonly : false\"\n [modules]=\"_field.modules\"\n [style]=\"_field.style\"\n>\n</p-editor>\n\n", dependencies: [{ kind: "ngmodule", type: EditorModule }, { kind: "component", type: i1.Editor, selector: "p-editor", inputs: ["style", "styleClass", "placeholder", "formats", "modules", "bounds", "scrollingContainer", "debug", "readonly"], outputs: ["onInit", "onTextChange", "onSelectionChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: FieldLabelComponent, selector: "s-field-label", inputs: ["field", "fieldContainerRef"] }] });
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditorFieldComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ standalone: true, imports: [EditorModule, ReactiveFormsModule, FieldLabelComponent], template: "@let _field = field();\n<s-field-label [field]=\"_field\"></s-field-label>\n\n<p-editor\n [formControl]=\"formControl()\"\n [formats]=\"_field.formats\"\n [readonly]=\"_field.readonly ? _field.readonly : false\"\n [modules]=\"_field.modules\"\n [style]=\"_field.style\"\n>\n</p-editor>\n\n" }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9vcHRpb25hbC1maWVsZHMvZWRpdG9yL2VkaXRvci1maWVsZC9lZGl0b3ItZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL29wdGlvbmFsLWZpZWxkcy9lZGl0b3IvZWRpdG9yLWZpZWxkL2VkaXRvci1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQWUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQTRCLG1CQUFtQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDaEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBTzlDLE1BQU0sT0FBTyxvQkFBb0I7SUFDN0IsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXFCLENBQUM7SUFDNUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWUsQ0FBQzt3R0FGbkMsb0JBQW9COzRGQUFwQixvQkFBb0Isb1ZDVmpDLGtUQVlBLDJDRExjLFlBQVksaVJBQUUsbUJBQW1CLDBUQUFFLG1CQUFtQjs7NEZBR3ZELG9CQUFvQjtrQkFMaEMsU0FBUztpQ0FDTSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VGaWVsZENvbXBvbmVudENvbmZpZywgRmllbGRMYWJlbENvbXBvbmVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvZHluYW1pYy1mb3JtJztcbmltcG9ydCB7IEVkaXRvck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZWRpdG9yJztcbmltcG9ydCB7IEVkaXRvckZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vZWRpdG9yLWZpZWxkJztcbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0VkaXRvck1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRmllbGRMYWJlbENvbXBvbmVudF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci1maWVsZC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRvckZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgQmFzZUZpZWxkQ29tcG9uZW50Q29uZmlnIHtcbiAgICBmaWVsZCA9IGlucHV0LnJlcXVpcmVkPEVkaXRvckZpZWxkQ29uZmlnPigpO1xuICAgIGZvcm1Db250cm9sID0gaW5wdXQucmVxdWlyZWQ8Rm9ybUNvbnRyb2w+KCk7XG59XG5cbiIsIkBsZXQgX2ZpZWxkID0gZmllbGQoKTtcbjxzLWZpZWxkLWxhYmVsIFtmaWVsZF09XCJfZmllbGRcIj48L3MtZmllbGQtbGFiZWw+XG5cbjxwLWVkaXRvclxuICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbCgpXCJcbiAgICBbZm9ybWF0c109XCJfZmllbGQuZm9ybWF0c1wiXG4gICAgW3JlYWRvbmx5XT1cIl9maWVsZC5yZWFkb25seSA/IF9maWVsZC5yZWFkb25seSA6IGZhbHNlXCJcbiAgICBbbW9kdWxlc109XCJfZmllbGQubW9kdWxlc1wiXG4gICAgW3N0eWxlXT1cIl9maWVsZC5zdHlsZVwiXG4+XG48L3AtZWRpdG9yPlxuXG4iXX0=
@@ -0,0 +1,17 @@
1
+ import { APP_INITIALIZER, makeEnvironmentProviders } from '@angular/core';
2
+ import { DynamicFormRegistry } from '@seniorsistemas/angular-components/dynamic-form';
3
+ import { EditorFieldComponent } from './editor-field/editor-field.component';
4
+ export function provideEditorField() {
5
+ return makeEnvironmentProviders([
6
+ {
7
+ provide: APP_INITIALIZER,
8
+ useFactory: () => {
9
+ return () => {
10
+ DynamicFormRegistry.registerField(EditorFieldComponent, 'editor');
11
+ };
12
+ },
13
+ multi: true,
14
+ },
15
+ ]);
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL29wdGlvbmFsLWZpZWxkcy9lZGl0b3IvZWRpdG9yLWZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQXdCLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBZSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBZ0I3RSxNQUFNLFVBQVUsa0JBQWtCO0lBQzlCLE9BQU8sd0JBQXdCLENBQUM7UUFDNUI7WUFDSSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsR0FBRyxFQUFFO2dCQUNiLE9BQU8sR0FBRyxFQUFFO29CQUNSLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDdEUsQ0FBQyxDQUFDO1lBQ04sQ0FBQztZQUNELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBFbnZpcm9ubWVudFByb3ZpZGVycywgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZENvbmZpZywgRHluYW1pY0Zvcm1SZWdpc3RyeSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvZHluYW1pYy1mb3JtJztcbmltcG9ydCB7IEVkaXRvckZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9lZGl0b3ItZmllbGQvZWRpdG9yLWZpZWxkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yRmllbGRDb25maWcgZXh0ZW5kcyBGaWVsZENvbmZpZyB7XG4gICAgdHlwZTogJ2VkaXRvcic7XG4gICAgZm9ybWF0cz86IHN0cmluZ1tdO1xuICAgIHJlYWRvbmx5PzogYm9vbGVhbjtcbiAgICBtb2R1bGVzPzogYW55O1xuICAgIHN0eWxlPzogeyBba2xhc3M6IHN0cmluZ106IHVua25vd24gfTtcbn1cblxuZGVjbGFyZSBtb2R1bGUgJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvZHluYW1pYy1mb3JtJyB7XG4gICAgZXhwb3J0IGludGVyZmFjZSBGaWVsZFR5cGVNYXAge1xuICAgICAgICBlZGl0b3I6IEVkaXRvckZpZWxkQ29uZmlnO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVFZGl0b3JGaWVsZCgpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gICAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBEeW5hbWljRm9ybVJlZ2lzdHJ5LnJlZ2lzdGVyRmllbGQoRWRpdG9yRmllbGRDb21wb25lbnQsICdlZGl0b3InKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0pO1xufVxuXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export { provideEditorField } from './editor-field';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9vcHRpb25hbC1maWVsZHMvZWRpdG9yL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBwcm92aWRlRWRpdG9yRmllbGQgfSBmcm9tICcuL2VkaXRvci1maWVsZCc7XG5cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuaW9yc2lzdGVtYXMtYW5ndWxhci1jb21wb25lbnRzLW9wdGlvbmFsLWZpZWxkcy1lZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvb3B0aW9uYWwtZmllbGRzL2VkaXRvci9zZW5pb3JzaXN0ZW1hcy1hbmd1bGFyLWNvbXBvbmVudHMtb3B0aW9uYWwtZmllbGRzLWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -1,8 +1,10 @@
1
1
  import { Component, forwardRef, viewChildren, ElementRef, signal, input, output, effect, computed, model, inject, DestroyRef, } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { TranslateModule } from '@ngx-translate/core';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@angular/common";
7
+ import * as i2 from "@ngx-translate/core";
6
8
  /**
7
9
  * Pin Code Field Component
8
10
  *
@@ -255,10 +257,7 @@ export class PinCodeFieldComponent {
255
257
  if (validChars.length === 0) {
256
258
  return;
257
259
  }
258
- const filledInputs = [
259
- ...validChars,
260
- ...Array(this.length() - validChars.length).fill(''),
261
- ];
260
+ const filledInputs = [...validChars, ...Array(this.length() - validChars.length).fill('')];
262
261
  this.inputs.set(filledInputs);
263
262
  this.updateValue();
264
263
  // Focus on the first empty input or the last filled input if all are filled
@@ -445,16 +444,16 @@ export class PinCodeFieldComponent {
445
444
  useExisting: forwardRef(() => PinCodeFieldComponent),
446
445
  multi: true,
447
446
  },
448
- ], viewQueries: [{ propertyName: "pinInputs", predicate: ["pinInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"gap-xsmall flex flex-col\">\n <div\n class=\"flex gap-2\"\n role=\"group\"\n aria-label=\"PIN code input\"\n [attr.aria-labelledby]=\"helpText() ? 'pin-help-text' : null\"\n >\n @for (input of inputs(); let i = $index; track i) {\n <input\n #pinInput\n type=\"text\"\n class=\"h-12 w-12 rounded-xbig border text-center text-lg font-medium transition-all duration-200\"\n [ngClass]=\"{\n 'border-criticality-red focus:ring-criticality-red': hasError(),\n 'border-grayscale-30 focus:border-primary focus:ring-primary': !hasError(),\n 'cursor-not-allowed bg-grayscale-10 text-grayscale-60': disabled(),\n 'bg-grayscale-0 text-grayscale-100 focus:outline-none': !disabled(),\n }\"\n [value]=\"input\"\n [disabled]=\"disabled()\"\n [attr.maxlength]=\"1\"\n [attr.inputmode]=\"alphanumeric() ? 'text' : 'numeric'\"\n [attr.aria-label]=\"'PIN code character ' + (i + 1) + ' of ' + length()\"\n [attr.aria-describedby]=\"helpText() ? 'pin-help-text' : null\"\n [attr.aria-required]=\"true\"\n autocomplete=\"off\"\n (input)=\"onInput(i, $event)\"\n (keydown)=\"onKeyDown(i, $event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onFocus(i)\"\n (blur)=\"onBlur(i)\"\n />\n }\n </div>\n\n @if (helpText()) {\n <div\n id=\"pin-help-text\"\n class=\"mt-small text-sm text-grayscale-60\"\n >\n {{ helpText() }}\n </div>\n }\n</div>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
447
+ ], viewQueries: [{ propertyName: "pinInputs", predicate: ["pinInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"gap-xsmall flex flex-col\">\n <div\n class=\"flex gap-2\"\n role=\"group\"\n aria-label=\"PIN code input\"\n [attr.aria-labelledby]=\"helpText() ? 'pin-help-text' : null\"\n >\n @for (input of inputs(); let i = $index; track i) {\n <input\n #pinInput\n type=\"text\"\n class=\"h-12 w-12 rounded-xbig border text-center text-lg font-medium transition-all duration-200\"\n [ngClass]=\"{\n 'border-criticality-red focus:ring-criticality-red': hasError(),\n 'border-grayscale-30 focus:border-primary focus:ring-primary': !hasError(),\n 'cursor-not-allowed bg-grayscale-10 text-grayscale-60': disabled(),\n 'bg-grayscale-0 text-grayscale-100 focus:outline-none': !disabled(),\n }\"\n [value]=\"input\"\n [disabled]=\"disabled()\"\n [attr.maxlength]=\"1\"\n [attr.inputmode]=\"alphanumeric() ? 'text' : 'numeric'\"\n [attr.aria-label]=\"\n alphanumeric()\n ? ('platform.angular_components.pin_code_character_index_of_total'\n | translate: { index: i + 1, length: length() })\n : ('platform.angular_components.pin_code_digit_index_of_total'\n | translate: { index: i + 1, length: length() })\n \"\n [attr.aria-describedby]=\"helpText() ? 'pin-help-text' : null\"\n [attr.aria-required]=\"true\"\n autocomplete=\"off\"\n (input)=\"onInput(i, $event)\"\n (keydown)=\"onKeyDown(i, $event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onFocus(i)\"\n (blur)=\"onBlur(i)\"\n />\n }\n </div>\n\n @if (helpText()) {\n <div\n id=\"pin-help-text\"\n class=\"mt-small text-sm text-grayscale-60\"\n >\n {{ helpText() }}\n </div>\n }\n</div>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
449
448
  }
450
449
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PinCodeFieldComponent, decorators: [{
451
450
  type: Component,
452
- args: [{ selector: 's-pin-code-field', standalone: true, imports: [CommonModule], providers: [
451
+ args: [{ selector: 's-pin-code-field', standalone: true, imports: [CommonModule, TranslateModule], providers: [
453
452
  {
454
453
  provide: NG_VALUE_ACCESSOR,
455
454
  useExisting: forwardRef(() => PinCodeFieldComponent),
456
455
  multi: true,
457
456
  },
458
- ], template: "<div class=\"gap-xsmall flex flex-col\">\n <div\n class=\"flex gap-2\"\n role=\"group\"\n aria-label=\"PIN code input\"\n [attr.aria-labelledby]=\"helpText() ? 'pin-help-text' : null\"\n >\n @for (input of inputs(); let i = $index; track i) {\n <input\n #pinInput\n type=\"text\"\n class=\"h-12 w-12 rounded-xbig border text-center text-lg font-medium transition-all duration-200\"\n [ngClass]=\"{\n 'border-criticality-red focus:ring-criticality-red': hasError(),\n 'border-grayscale-30 focus:border-primary focus:ring-primary': !hasError(),\n 'cursor-not-allowed bg-grayscale-10 text-grayscale-60': disabled(),\n 'bg-grayscale-0 text-grayscale-100 focus:outline-none': !disabled(),\n }\"\n [value]=\"input\"\n [disabled]=\"disabled()\"\n [attr.maxlength]=\"1\"\n [attr.inputmode]=\"alphanumeric() ? 'text' : 'numeric'\"\n [attr.aria-label]=\"'PIN code character ' + (i + 1) + ' of ' + length()\"\n [attr.aria-describedby]=\"helpText() ? 'pin-help-text' : null\"\n [attr.aria-required]=\"true\"\n autocomplete=\"off\"\n (input)=\"onInput(i, $event)\"\n (keydown)=\"onKeyDown(i, $event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onFocus(i)\"\n (blur)=\"onBlur(i)\"\n />\n }\n </div>\n\n @if (helpText()) {\n <div\n id=\"pin-help-text\"\n class=\"mt-small text-sm text-grayscale-60\"\n >\n {{ helpText() }}\n </div>\n }\n</div>\n\n" }]
457
+ ], template: "<div class=\"gap-xsmall flex flex-col\">\n <div\n class=\"flex gap-2\"\n role=\"group\"\n aria-label=\"PIN code input\"\n [attr.aria-labelledby]=\"helpText() ? 'pin-help-text' : null\"\n >\n @for (input of inputs(); let i = $index; track i) {\n <input\n #pinInput\n type=\"text\"\n class=\"h-12 w-12 rounded-xbig border text-center text-lg font-medium transition-all duration-200\"\n [ngClass]=\"{\n 'border-criticality-red focus:ring-criticality-red': hasError(),\n 'border-grayscale-30 focus:border-primary focus:ring-primary': !hasError(),\n 'cursor-not-allowed bg-grayscale-10 text-grayscale-60': disabled(),\n 'bg-grayscale-0 text-grayscale-100 focus:outline-none': !disabled(),\n }\"\n [value]=\"input\"\n [disabled]=\"disabled()\"\n [attr.maxlength]=\"1\"\n [attr.inputmode]=\"alphanumeric() ? 'text' : 'numeric'\"\n [attr.aria-label]=\"\n alphanumeric()\n ? ('platform.angular_components.pin_code_character_index_of_total'\n | translate: { index: i + 1, length: length() })\n : ('platform.angular_components.pin_code_digit_index_of_total'\n | translate: { index: i + 1, length: length() })\n \"\n [attr.aria-describedby]=\"helpText() ? 'pin-help-text' : null\"\n [attr.aria-required]=\"true\"\n autocomplete=\"off\"\n (input)=\"onInput(i, $event)\"\n (keydown)=\"onKeyDown(i, $event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onFocus(i)\"\n (blur)=\"onBlur(i)\"\n />\n }\n </div>\n\n @if (helpText()) {\n <div\n id=\"pin-help-text\"\n class=\"mt-small text-sm text-grayscale-60\"\n >\n {{ helpText() }}\n </div>\n }\n</div>\n\n" }]
459
458
  }], ctorParameters: () => [] });
460
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUV6RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFjSCxNQUFNLE9BQU8scUJBQXFCO0lBQ3RCLE1BQU0sQ0FBVSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDdEMsTUFBTSxDQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFFekM7Ozs7O09BS0c7SUFDSSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXpCOzs7OztPQUtHO0lBQ0ksWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuQzs7OztPQUlHO0lBQ0ksUUFBUSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUU1Qjs7Ozs7Ozs7OztPQVVHO0lBQ0ksT0FB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgZm9yd2FyZFJlZixcbiAgICB2aWV3Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBzaWduYWwsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxuICAgIGVmZmVjdCxcbiAgICBjb21wdXRlZCxcbiAgICBtb2RlbCxcbiAgICBpbmplY3QsXG4gICAgRGVzdHJveVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKipcbiAqIFBpbiBDb2RlIEZpZWxkIENvbXBvbmVudFxuICpcbiAqIEEgZmxleGlibGUsIGFjY2Vzc2libGUgUElOIGNvZGUgaW5wdXQgY29tcG9uZW50IHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgQ29udHJvbFZhbHVlQWNjZXNzb3J9XG4gKiBmb3Igc2VhbWxlc3MgaW50ZWdyYXRpb24gd2l0aCBBbmd1bGFyIFJlYWN0aXZlIEZvcm1zIGFuZCBUZW1wbGF0ZS1kcml2ZW4gRm9ybXMuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIE11bHRpcGxlIGlucHV0IGZpZWxkcyBmb3IgUElOL09UUCBjb2RlIGVudHJ5XG4gKiAtIENvbmZpZ3VyYWJsZSBjb2RlIGxlbmd0aCBhbmQgY2hhcmFjdGVyIHZhbGlkYXRpb25cbiAqIC0gS2V5Ym9hcmQgbmF2aWdhdGlvbiAoYXJyb3cga2V5cywgYmFja3NwYWNlKVxuICogLSBQYXN0ZSBzdXBwb3J0IHdpdGggYXV0b21hdGljIHRydW5jYXRpb25cbiAqIC0gRXJyb3Igc3RhdGUgZGlzcGxheSB2aWEgdGhlIGBpbnZhbGlkYCBpbnB1dFxuICogLSBGdWxsIGFjY2Vzc2liaWxpdHkgc3VwcG9ydCAoQVJJQSBsYWJlbHMsIHNlbWFudGljIHJvbGVzKVxuICogLSBTaWduYWwtYmFzZWQgc3RhdGUgbWFuYWdlbWVudFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAqICAgPHMtcGluLWNvZGUtZmllbGRcbiAqICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb2RlXCJcbiAqICAgICBbbGVuZ3RoXT1cIjZcIlxuICogICAgIFthbHBoYW51bWVyaWNdPVwiZmFsc2VcIlxuICogICAgIFtpbnZhbGlkXT1cIihmb3JtLmdldCgnY29kZScpPy5pbnZhbGlkICYmIGZvcm0uZ2V0KCdjb2RlJyk/LmRpcnR5KSB8fCBmYWxzZVwiXG4gKiAgICAgaGVscFRleHQ9XCJFbnRlciB5b3VyIDYtZGlnaXQgY29kZVwiXG4gKiAgICAgKGNvZGVGaWxsZWQpPVwib25Db2RlRmlsbGVkKCRldmVudClcIj5cbiAqICAgPC9zLXBpbi1jb2RlLWZpZWxkPlxuICogPC9mb3JtPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAqICAgY29kZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzLXBpbi1jb2RlLWZpZWxkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGluLWNvZGUtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUGluQ29kZUZpZWxkQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBpbkNvZGVGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMQVNUX0lOREVYX09GRlNFVCA9IDE7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRU1QVFlfVkFMVUUgPSAnJztcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBpbnB1dCBmaWVsZHMgKFBJTiBjb2RlIGxlbmd0aCkuXG4gICAgICogTXVzdCBiZSBhdCBsZWFzdCAxLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgNlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGggPSBpbnB1dCg2KTtcblxuICAgIC8qKlxuICAgICAqIEFsbG93cyBhbHBoYW51bWVyaWMgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyBpbnB1dC5cbiAgICAgKiBXaGVuIGZhbHNlLCBvbmx5IG51bWVyaWMgaW5wdXQgKDAtOSkgaXMgYWNjZXB0ZWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHB1YmxpYyBhbHBoYW51bWVyaWMgPSBpbnB1dChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBIZWxwIHRleHQgZGlzcGxheWVkIGJlbG93IHRoZSBpbnB1dCBmaWVsZHMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyBoZWxwVGV4dCA9IGlucHV0KCcnKTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHRoZSBlcnJvciBzdGF0ZSB2aXN1YWxpemF0aW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogV2hlbiB0cnVlLCBkaXNwbGF5cyByZWQgYm9yZGVyIG9uIGlucHV0IGZpZWxkcy5cbiAgICAgKiBUeXBpY2FsbHkgYm91bmQgdG8gRm9ybUNvbnRyb2wncyBpbnZhbGlkIGFuZCBkaXJ0eSBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIFtpbnZhbGlkXT1cIihjb250cm9sPy5pbnZhbGlkICYmIGNvbnRyb2w/LmRpcnR5KSB8fCBmYWxzZVwiXG4gICAgICogYGBgXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgaW52YWxpZCA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFR3by13YXkgYmluZGluZyBmb3IgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogRGlzYWJsZXMgYWxsIGlucHV0IGZpZWxkcyBhbmQgcHJldmVudHMgdXNlciBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGRpc2FibGVkID0gbW9kZWwoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGFsbCBQSU4gY29kZSBmaWVsZHMgYXJlIGZpbGxlZC5cbiAgICAgKiBFbWl0cyB0aGUgY29tcGxldGUgUElOIGNvZGUgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAoY29kZUZpbGxlZCk9XCJvbkNvZGVGaWxsZWQoJGV2ZW50KVwiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvZGVGaWxsZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIGVhY2ggaW5wdXQgZmllbGQuXG4gICAgICogQXJyYXkgbGVuZ3RoIG1hdGNoZXMgdGhlIGBsZW5ndGhgIGlucHV0IHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnB1dHMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqIFNpZ25hbCB0cmFja2luZyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdG91Y2hlZCBieSB0aGUgdXNlci5cbiAgICAgKiBTZXQgdG8gdHJ1ZSB3aGVuIHRoZSBsYXN0IGlucHV0IGZpZWxkIGxvc2VzIGZvY3VzIChibHVyIGV2ZW50KS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG91Y2hlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlZCBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIGFsbCBQSU4gY29kZSBmaWVsZHMgYXJlIGZpbGxlZC5cbiAgICAgKiBUcnVlIG9ubHkgd2hlbiBldmVyeSBmaWVsZCBjb250YWlucyBhIG5vbi1lbXB0eSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDb21wbGV0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW5wdXRzKCkuZXZlcnkoKGlucHV0KSA9PiBpbnB1dCAhPT0gJycpKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVkIHNpZ25hbCBjb250YWluaW5nIHRoZSBjb21wbGV0ZSBQSU4gY29kZSBhcyBhIGpvaW5lZCBzdHJpbmcuXG4gICAgICogUmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgbm8gaW5wdXRzIGFyZSBmaWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIGN1cnJlbnRWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW5wdXRzKCkuam9pbignJykpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIHRyYWNraW5nIGlmIHRoZSBjb21wb25lbnQgaG9zdCBoYXMgdGhlIG5nLWludmFsaWQgY2xhc3MgZnJvbSBGb3JtQ29udHJvbCB2YWxpZGF0b3JzLlxuICAgICAqIFVwZGF0ZWQgcmVhY3RpdmVseSB3aGVuZXZlciB0aGUgaW52YWxpZCBzdGF0ZSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgaGFzTmdJbnZhbGlkQ2xhc3MgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIHRyYWNraW5nIGlmIHRoZSBGb3JtQ29udHJvbCBpcyBkaXJ0eS5cbiAgICAgKiBVcGRhdGVkIHJlYWN0aXZlbHkgd2hlbmV2ZXIgdGhlIGRpcnR5IHN0YXRlIGNoYW5nZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0NvbnRyb2xEaXJ0eSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlZCBzaWduYWwgaW5kaWNhdGluZyBpZiB0aGUgY29tcG9uZW50IHNob3VsZCBzaG93IGVycm9yIHN0YXRlLlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZjpcbiAgICAgKiAtIFRoZSBgaW52YWxpZGAgaW5wdXQgaXMgdHJ1ZSwgT1JcbiAgICAgKiAtIFRoZSBjb21wb25lbnQgaGFzIHRoZSBgbmctaW52YWxpZGAgY2xhc3MgQU5EIHRoZSBGb3JtQ29udHJvbCBpcyBkaXJ0eSAodG91Y2hlZC9tb2RpZmllZClcbiAgICAgKiBUaGlzIGVuc3VyZXMgZXJyb3JzIGFyZSBvbmx5IHNob3duIHRvIHRoZSB1c2VyIGFmdGVyIHRoZXkndmUgaW50ZXJhY3RlZCB3aXRoIHRoZSBmaWVsZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzRXJyb3IgPSBjb21wdXRlZCgoKSA9PlxuICAgICAgICB0aGlzLmludmFsaWQoKSB8fCAodGhpcy5oYXNOZ0ludmFsaWRDbGFzcygpICYmIHRoaXMuaXNDb250cm9sRGlydHkoKSlcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogVmlld0NoaWxkcmVuIHJlZmVyZW5jZSB0byBhbGwgaW5wdXQgRE9NIGVsZW1lbnRzLlxuICAgICAqIFVzZWQgZm9yIERPTSBtYW5pcHVsYXRpb24gKGZvY3VzLCBzZWxlY3Rpb24pLlxuICAgICAqL1xuICAgIHB1YmxpYyBwaW5JbnB1dHMgPSB2aWV3Q2hpbGRyZW48RWxlbWVudFJlZj4oJ3BpbklucHV0Jyk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdMZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdMZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUElOIGNvZGUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgMScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0cygpLmxlbmd0aCAhPT0gbmV3TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRzLnNldChBcnJheS5mcm9tKHsgbGVuZ3RoOiBuZXdMZW5ndGggfSwgKCkgPT4gJycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1vbml0b3IgbmctaW52YWxpZCBhbmQgbmctZGlydHkgY2xhc3NlcyBvbiB0aGUgaG9zdCBlbGVtZW50IGZvciByZWFjdGl2ZSBlcnJvciBzdGF0ZVxuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQWNjZXNzIGlucHV0cyB0byBjcmVhdGUgZGVwZW5kZW5jeSBvbiBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludmFsaWQoKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byBkZWZlciB0aGUgY2hlY2sgdG8gbmV4dCB0aWNrIHRvIGVuc3VyZSBBbmd1bGFyIGhhcyB1cGRhdGVkIERPTSBjbGFzc2VzXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBob3N0RWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNOZ0ludmFsaWQgPSBob3N0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWludmFsaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNEaXJ0eSA9IGhvc3RFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctZGlydHknKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzTmdJbnZhbGlkQ2xhc3Muc2V0KGhhc05nSW52YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb250cm9sRGlydHkuc2V0KGlzRGlydHkpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2xlYW51cCB0aW1lb3V0IG9uIGNvbXBvbmVudCBkZXN0cm95XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGlucHV0IGV2ZW50IG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBWYWxpZGF0ZXMgY2hhcmFjdGVyIGlucHV0LCBwcmV2ZW50cyBtdWx0aXBsZSBjaGFyYWN0ZXJzIHBlciBmaWVsZCxcbiAgICAgKiBhdXRvLWFkdmFuY2VzIHRvIG5leHQgZmllbGQgd2hlbiBjaGFyYWN0ZXIgaXMgZW50ZXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgaW5wdXQgZXZlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JbnB1dChpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMSB8fCAodmFsdWUgJiYgIXRoaXMuaXNWYWxpZENoYXJhY3Rlcih2YWx1ZSkpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFySW5wdXQodGFyZ2V0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4LCB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHZhbHVlICYmIGluZGV4IDwgdGhpcy5sZW5ndGgoKSAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCArIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGVGaWxsZWQuZW1pdCh0aGlzLmN1cnJlbnRWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBTdXBwb3J0cyBhcnJvdyBuYXZpZ2F0aW9uIChsZWZ0L3JpZ2h0KSBhbmQgYmFja3NwYWNlIGtleS5cbiAgICAgKlxuICAgICAqIEtleWJvYXJkIGJlaGF2aW9yOlxuICAgICAqIC0gQXJyb3dSaWdodDogTW92ZSBmb2N1cyB0byBuZXh0IGZpZWxkXG4gICAgICogLSBBcnJvd0xlZnQ6IE1vdmUgZm9jdXMgdG8gcHJldmlvdXMgZmllbGRcbiAgICAgKiAtIEJhY2tzcGFjZTogQ2xlYXIgY3VycmVudCBvciBwcmV2aW91cyBmaWVsZCBhbmQgYWRqdXN0IGZvY3VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGtleWJvYXJkIGV2ZW50XG4gICAgICovXG4gICAgcHVibGljIG9uS2V5RG93bihpbmRleDogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmxlbmd0aCgpIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzQW5kU2VsZWN0SW5wdXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGluZGV4IC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQmFja3NwYWNlJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFja3NwYWNlKGluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgcGFzdGUgKGNsaXBib2FyZCkgZXZlbnRzIG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBFeHRyYWN0cyB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gcGFzdGVkIGNvbnRlbnQsIGZpbHRlcnMgYnkgY2hhcmFjdGVyIHR5cGUsXG4gICAgICogYW5kIGF1dG9tYXRpY2FsbHkgdHJ1bmNhdGVzIHRvIG1hdGNoIGZpZWxkIGxlbmd0aC5cbiAgICAgKlxuICAgICAqIEJlaGF2aW9yOlxuICAgICAqIC0gRmlsdGVycyBjaGFyYWN0ZXJzIGJhc2VkIG9uIGBhbHBoYW51bWVyaWNgIHNldHRpbmdcbiAgICAgKiAtIFRydW5jYXRlcyB0byBtYXhpbXVtIGZpZWxkIGNvdW50XG4gICAgICogLSBGaWxscyBhdmFpbGFibGUgZmllbGRzIHdpdGggcGFzdGVkIGNvbnRlbnRcbiAgICAgKiAtIEVtaXRzIGNvZGVGaWxsZWQgZXZlbnQgaWYgYWxsIGZpZWxkcyBhcmUgZmlsbGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgY2xpcGJvYXJkIGV2ZW50XG4gICAgICovXG4gICAgcHVibGljIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkQ2hhcnMgPSB0aGlzLmV4dHJhY3RWYWxpZENoYXJhY3RlcnNGcm9tUGFzdGUoZXZlbnQpO1xuXG4gICAgICAgIGlmICh2YWxpZENoYXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsbGVkSW5wdXRzID0gW1xuICAgICAgICAgICAgLi4udmFsaWRDaGFycyxcbiAgICAgICAgICAgIC4uLkFycmF5KHRoaXMubGVuZ3RoKCkgLSB2YWxpZENoYXJzLmxlbmd0aCkuZmlsbCgnJyksXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5pbnB1dHMuc2V0KGZpbGxlZElucHV0cyk7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcblxuICAgICAgICAvLyBGb2N1cyBvbiB0aGUgZmlyc3QgZW1wdHkgaW5wdXQgb3IgdGhlIGxhc3QgZmlsbGVkIGlucHV0IGlmIGFsbCBhcmUgZmlsbGVkXG4gICAgICAgIGNvbnN0IGZpcnN0RW1wdHlJbmRleCA9IHZhbGlkQ2hhcnMubGVuZ3RoIDwgdGhpcy5sZW5ndGgoKSA/IHZhbGlkQ2hhcnMubGVuZ3RoIDogdmFsaWRDaGFycy5sZW5ndGggLSAxO1xuICAgICAgICB0aGlzLmZvY3VzQW5kU2VsZWN0SW5wdXQoZmlyc3RFbXB0eUluZGV4KTtcblxuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZUZpbGxlZC5lbWl0KHRoaXMuY3VycmVudFZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBmb2N1cyBldmVudCBvbiBQSU4gY29kZSBmaWVsZHMuXG4gICAgICogU2VsZWN0cyBhbGwgdGV4dCBpbiB0aGUgaW5wdXQgZmllbGQgd2hlbiBmb2N1c2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZvY3VzKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnBpbklucHV0cygpW2luZGV4XTtcbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICBpbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBibHVyIGV2ZW50IG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBNYXJrcyB0aGUgY29tcG9uZW50IGFzIHRvdWNoZWQgd2hlbiB0aGUgbGFzdCBpbnB1dCBmaWVsZCBsb3NlcyBmb2N1cy5cbiAgICAgKiBBbHNvIG5vdGlmaWVzIHRoZSByZWdpc3RlcmVkIG9uVG91Y2hlZCBjYWxsYmFjayBmb3IgRm9ybUNvbnRyb2wgaW50ZWdyYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICovXG4gICAgcHVibGljIG9uQmx1cihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIE9ubHkgbWFyayBhcyB0b3VjaGVkIHdoZW4gdGhlIExBU1QgaW5wdXQgbG9zZXMgZm9jdXNcbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmxlbmd0aCgpIC0gUGluQ29kZUZpZWxkQ29tcG9uZW50LkxBU1RfSU5ERVhfT0ZGU0VUKSB7XG4gICAgICAgICAgICB0aGlzLnRvdWNoZWQuc2V0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgaW5wdXQgdmFsdWUgYXQgc3BlY2lmaWVkIGluZGV4IGFuZCBhZGp1c3RzIGZvY3VzIGFjY29yZGluZ2x5LlxuICAgICAqIElmIGN1cnJlbnQgZmllbGQgaXMgZW1wdHksIG1vdmVzIHRvIHByZXZpb3VzIGZpZWxkIGFuZCBjbGVhcnMgaXQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZUJhY2tzcGFjZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbnB1dHMgPSB0aGlzLmlucHV0cygpO1xuICAgICAgICBcbiAgICAgICAgLy8gSWYgY3VycmVudCBpbnB1dCBoYXMgdmFsdWUsIGNsZWFyIGl0XG4gICAgICAgIGlmIChjdXJyZW50SW5wdXRzW2luZGV4XSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dEF0SW5kZXgoaW5kZXgsIFBpbkNvZGVGaWVsZENvbXBvbmVudC5FTVBUWV9WQUxVRSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2UsIGNsZWFyIHByZXZpb3VzIGlucHV0IGFuZCBmb2N1cyBpdFxuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldElucHV0QXRJbmRleChpbmRleCAtIDEsIFBpbkNvZGVGaWVsZENvbXBvbmVudC5FTVBUWV9WQUxVRSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQW5kU2VsZWN0SW5wdXQoaW5kZXggLSAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlIGF0IGEgc3BlY2lmaWMgaW5wdXQgZmllbGQgaW5kZXggYW5kIHVwZGF0ZXMgdGhlIGZvcm0gdmFsdWUuXG4gICAgICogVXBkYXRlcyB0aGUgc2lnbmFsIGFuZCB0cmlnZ2VycyB0aGUgY2hhbmdlIGRldGVjdGlvbiB2aWEgb25DaGFuZ2UgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IGluIHRoZSBmaWVsZFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0SW5wdXRBdEluZGV4KGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudElucHV0cyA9IHRoaXMuaW5wdXRzKCk7XG4gICAgICAgIGN1cnJlbnRJbnB1dHNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5wdXRzLnNldChbLi4uY3VycmVudElucHV0c10pO1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9jdXNlcyBvbiBhbmQgc2VsZWN0cyB0ZXh0IGluIHRoZSBpbnB1dCBmaWVsZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LlxuICAgICAqIFVzZXMgcXVldWVNaWNyb3Rhc2sgdG8gZW5zdXJlIERPTSBpcyB1cGRhdGVkIGJlZm9yZSBmb2N1c2luZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxuICAgICAqL1xuICAgIHByaXZhdGUgZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5waW5JbnB1dHMoKVtpbmRleF07XG4gICAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSB2YWx1ZSBvZiBhbiBpbnB1dCBlbGVtZW50LlxuICAgICAqIFVzZWQgZm9yIGlucHV0IHZhbGlkYXRpb24gdG8gcmVqZWN0IGludmFsaWQgY2hhcmFjdGVycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHRhcmdldCAtIFRoZSBIVE1MIGlucHV0IGVsZW1lbnQgdG8gY2xlYXJcbiAgICAgKi9cbiAgICBwcml2YXRlIGNsZWFySW5wdXQodGFyZ2V0OiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIHRhcmdldC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3RzIHZhbGlkIGNoYXJhY3RlcnMgZnJvbSBwYXN0ZWQgY29udGVudC5cbiAgICAgKiBGaWx0ZXJzIGJhc2VkIG9uIGFscGhhbnVtZXJpYyBzZXR0aW5nIGFuZCBsaW1pdHMgdG8gY29tcG9uZW50J3MgbGVuZ3RoLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgY2xpcGJvYXJkIGV2ZW50XG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWQgY2hhcmFjdGVycyBmcm9tIHRoZSBwYXN0ZWQgY29udGVudFxuICAgICAqL1xuICAgIHByaXZhdGUgZXh0cmFjdFZhbGlkQ2hhcmFjdGVyc0Zyb21QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSAoZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpIHx8ICcnKS50cmltKCk7XG4gICAgICAgIHJldHVybiBwYXN0ZWRUZXh0XG4gICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAuZmlsdGVyKChjaGFyKSA9PiB0aGlzLmlzVmFsaWRDaGFyYWN0ZXIoY2hhcikpXG4gICAgICAgICAgICAuc2xpY2UoMCwgdGhpcy5sZW5ndGgoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIGlmIGEgY2hhcmFjdGVyIGlzIGFjY2VwdGFibGUgYmFzZWQgb24gY29tcG9uZW50IGNvbmZpZ3VyYXRpb24uXG4gICAgICogRm9yIG51bWVyaWMgbW9kZSwgYWNjZXB0cyBvbmx5IGRpZ2l0cyAwLTkuXG4gICAgICogRm9yIGFscGhhbnVtZXJpYyBtb2RlLCBhY2NlcHRzIGFueSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBjaGFyIC0gVGhlIGNoYXJhY3RlciB0byB2YWxpZGF0ZVxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgY2hhcmFjdGVyIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2VcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmFsaWRDaGFyYWN0ZXIoY2hhcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmFscGhhbnVtZXJpYygpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hhci50cmltKCkubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gL15bMC05XSQvLnRlc3QoY2hhcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgZm9ybSB2YWx1ZSBieSBjYWxsaW5nIHRoZSBvbkNoYW5nZSBjYWxsYmFjayByZWdpc3RlcmVkIGJ5IEZvcm1Db250cm9sLlxuICAgICAqIFRoaXMgZW5zdXJlcyB0aGUgcmVhY3RpdmUgZm9ybSBzdGF5cyBzeW5jaHJvbml6ZWQgd2l0aCBjb21wb25lbnQgc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlVmFsdWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5jdXJyZW50VmFsdWUoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UuXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBGb3JtQ29udHJvbCB0byB3cml0ZSBhIHZhbHVlIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICogT25seSBhY2NlcHRzIHN0cmluZyB2YWx1ZXMgd2l0aCBsZW5ndGggbWF0Y2hpbmcgdGhlIGNvbXBvbmVudCdzIGxlbmd0aCBzZXR0aW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHdyaXRlICh0eXBpY2FsbHkgZnJvbSB0aGUgRm9ybUNvbnRyb2wpXG4gICAgICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChzdHJpbmdWYWx1ZS5sZW5ndGggPT09IHRoaXMubGVuZ3RoKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0cy5zZXQoc3RyaW5nVmFsdWUuc3BsaXQoJycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxuICAgICAqIENhbGxlZCBieSB0aGUgRm9ybUNvbnRyb2wgd2hlbiB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqIFJlZ2lzdGVycyB0aGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCB2YWx1ZSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZuIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gY29tcG9uZW50IHZhbHVlIGNoYW5nZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxuICAgICAqIENhbGxlZCBieSB0aGUgRm9ybUNvbnRyb2wgdG8gcmVnaXN0ZXIgdGhlIHRvdWNoZWQgY2FsbGJhY2suXG4gICAgICogVGhlIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlbiB0aGUgbGFzdCBpbnB1dCBmaWVsZCBsb3NlcyBmb2N1cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmbiAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGNvbXBvbmVudCBpcyB0b3VjaGVkXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UuXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBGb3JtQ29udHJvbCB0byBzZXQgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogVXBkYXRlcyB0aGUgZGlzYWJsZWQgbW9kZWwgdG8gcmVmbGVjdCB0aGUgZm9ybSdzIGRpc2FibGVkIHN0YXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlzRGlzYWJsZWQgLSBXaGV0aGVyIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIGRpc2FibGVkXG4gICAgICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkLnNldChpc0Rpc2FibGVkKTtcbiAgICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJnYXAteHNtYWxsIGZsZXggZmxleC1jb2xcIj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmxleCBnYXAtMlwiXG4gICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJQSU4gY29kZSBpbnB1dFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJoZWxwVGV4dCgpID8gJ3Bpbi1oZWxwLXRleHQnIDogbnVsbFwiXG4gICAgPlxuICAgICAgICBAZm9yIChpbnB1dCBvZiBpbnB1dHMoKTsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGkpIHtcbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICNwaW5JbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImgtMTIgdy0xMiByb3VuZGVkLXhiaWcgYm9yZGVyIHRleHQtY2VudGVyIHRleHQtbGcgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdib3JkZXItY3JpdGljYWxpdHktcmVkIGZvY3VzOnJpbmctY3JpdGljYWxpdHktcmVkJzogaGFzRXJyb3IoKSxcbiAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1ncmF5c2NhbGUtMzAgZm9jdXM6Ym9yZGVyLXByaW1hcnkgZm9jdXM6cmluZy1wcmltYXJ5JzogIWhhc0Vycm9yKCksXG4gICAgICAgICAgICAgICAgICAgICdjdXJzb3Itbm90LWFsbG93ZWQgYmctZ3JheXNjYWxlLTEwIHRleHQtZ3JheXNjYWxlLTYwJzogZGlzYWJsZWQoKSxcbiAgICAgICAgICAgICAgICAgICAgJ2JnLWdyYXlzY2FsZS0wIHRleHQtZ3JheXNjYWxlLTEwMCBmb2N1czpvdXRsaW5lLW5vbmUnOiAhZGlzYWJsZWQoKSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaW5wdXRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwiMVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuaW5wdXRtb2RlXT1cImFscGhhbnVtZXJpYygpID8gJ3RleHQnIDogJ251bWVyaWMnXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidQSU4gY29kZSBjaGFyYWN0ZXIgJyArIChpICsgMSkgKyAnIG9mICcgKyBsZW5ndGgoKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJoZWxwVGV4dCgpID8gJ3Bpbi1oZWxwLXRleHQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0KGksICRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bihpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cyhpKVwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKGkpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoaGVscFRleHQoKSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBpZD1cInBpbi1oZWxwLXRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJtdC1zbWFsbCB0ZXh0LXNtIHRleHQtZ3JheXNjYWxlLTYwXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgaGVscFRleHQoKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L2Rpdj5cblxuIl19
459
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBRXREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DRztBQWNILE1BQU0sT0FBTyxxQkFBcUI7SUFDdEIsTUFBTSxDQUFVLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLENBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUV6Qzs7Ozs7T0FLRztJQUNJLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekI7Ozs7O09BS0c7SUFDSSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRW5DOzs7O09BSUc7SUFDSSxRQUFRLEdBQUcsS0FBSyxDQUFD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VUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIHZpZXdDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIHNpZ25hbCxcbiAgICBpbnB1dCxcbiAgICBvdXRwdXQsXG4gICAgZWZmZWN0LFxuICAgIGNvbXB1dGVkLFxuICAgIG1vZGVsLFxuICAgIGluamVjdCxcbiAgICBEZXN0cm95UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuLyoqXG4gKiBQaW4gQ29kZSBGaWVsZCBDb21wb25lbnRcbiAqXG4gKiBBIGZsZXhpYmxlLCBhY2Nlc3NpYmxlIFBJTiBjb2RlIGlucHV0IGNvbXBvbmVudCB0aGF0IGltcGxlbWVudHMge0BsaW5rIENvbnRyb2xWYWx1ZUFjY2Vzc29yfVxuICogZm9yIHNlYW1sZXNzIGludGVncmF0aW9uIHdpdGggQW5ndWxhciBSZWFjdGl2ZSBGb3JtcyBhbmQgVGVtcGxhdGUtZHJpdmVuIEZvcm1zLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBNdWx0aXBsZSBpbnB1dCBmaWVsZHMgZm9yIFBJTi9PVFAgY29kZSBlbnRyeVxuICogLSBDb25maWd1cmFibGUgY29kZSBsZW5ndGggYW5kIGNoYXJhY3RlciB2YWxpZGF0aW9uXG4gKiAtIEtleWJvYXJkIG5hdmlnYXRpb24gKGFycm93IGtleXMsIGJhY2tzcGFjZSlcbiAqIC0gUGFzdGUgc3VwcG9ydCB3aXRoIGF1dG9tYXRpYyB0cnVuY2F0aW9uXG4gKiAtIEVycm9yIHN0YXRlIGRpc3BsYXkgdmlhIHRoZSBgaW52YWxpZGAgaW5wdXRcbiAqIC0gRnVsbCBhY2Nlc3NpYmlsaXR5IHN1cHBvcnQgKEFSSUEgbGFiZWxzLCBzZW1hbnRpYyByb2xlcylcbiAqIC0gU2lnbmFsLWJhc2VkIHN0YXRlIG1hbmFnZW1lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gKiAgIDxzLXBpbi1jb2RlLWZpZWxkXG4gKiAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29kZVwiXG4gKiAgICAgW2xlbmd0aF09XCI2XCJcbiAqICAgICBbYWxwaGFudW1lcmljXT1cImZhbHNlXCJcbiAqICAgICBbaW52YWxpZF09XCIoZm9ybS5nZXQoJ2NvZGUnKT8uaW52YWxpZCAmJiBmb3JtLmdldCgnY29kZScpPy5kaXJ0eSkgfHwgZmFsc2VcIlxuICogICAgIGhlbHBUZXh0PVwiRW50ZXIgeW91ciA2LWRpZ2l0IGNvZGVcIlxuICogICAgIChjb2RlRmlsbGVkKT1cIm9uQ29kZUZpbGxlZCgkZXZlbnQpXCI+XG4gKiAgIDwvcy1waW4tY29kZS1maWVsZD5cbiAqIDwvZm9ybT5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBmb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gKiAgIGNvZGU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1waW4tY29kZS1maWVsZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZV0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUGluQ29kZUZpZWxkQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBpbkNvZGVGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMQVNUX0lOREVYX09GRlNFVCA9IDE7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRU1QVFlfVkFMVUUgPSAnJztcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBpbnB1dCBmaWVsZHMgKFBJTiBjb2RlIGxlbmd0aCkuXG4gICAgICogTXVzdCBiZSBhdCBsZWFzdCAxLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgNlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGggPSBpbnB1dCg2KTtcblxuICAgIC8qKlxuICAgICAqIEFsbG93cyBhbHBoYW51bWVyaWMgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyBpbnB1dC5cbiAgICAgKiBXaGVuIGZhbHNlLCBvbmx5IG51bWVyaWMgaW5wdXQgKDAtOSkgaXMgYWNjZXB0ZWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHB1YmxpYyBhbHBoYW51bWVyaWMgPSBpbnB1dChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBIZWxwIHRleHQgZGlzcGxheWVkIGJlbG93IHRoZSBpbnB1dCBmaWVsZHMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyBoZWxwVGV4dCA9IGlucHV0KCcnKTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHRoZSBlcnJvciBzdGF0ZSB2aXN1YWxpemF0aW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogV2hlbiB0cnVlLCBkaXNwbGF5cyByZWQgYm9yZGVyIG9uIGlucHV0IGZpZWxkcy5cbiAgICAgKiBUeXBpY2FsbHkgYm91bmQgdG8gRm9ybUNvbnRyb2wncyBpbnZhbGlkIGFuZCBkaXJ0eSBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIFtpbnZhbGlkXT1cIihjb250cm9sPy5pbnZhbGlkICYmIGNvbnRyb2w/LmRpcnR5KSB8fCBmYWxzZVwiXG4gICAgICogYGBgXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgaW52YWxpZCA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFR3by13YXkgYmluZGluZyBmb3IgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogRGlzYWJsZXMgYWxsIGlucHV0IGZpZWxkcyBhbmQgcHJldmVudHMgdXNlciBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGRpc2FibGVkID0gbW9kZWwoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGFsbCBQSU4gY29kZSBmaWVsZHMgYXJlIGZpbGxlZC5cbiAgICAgKiBFbWl0cyB0aGUgY29tcGxldGUgUElOIGNvZGUgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAoY29kZUZpbGxlZCk9XCJvbkNvZGVGaWxsZWQoJGV2ZW50KVwiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvZGVGaWxsZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIGVhY2ggaW5wdXQgZmllbGQuXG4gICAgICogQXJyYXkgbGVuZ3RoIG1hdGNoZXMgdGhlIGBsZW5ndGhgIGlucHV0IHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnB1dHMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqIFNpZ25hbCB0cmFja2luZyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdG91Y2hlZCBieSB0aGUgdXNlci5cbiAgICAgKiBTZXQgdG8gdHJ1ZSB3aGVuIHRoZSBsYXN0IGlucHV0IGZpZWxkIGxvc2VzIGZvY3VzIChibHVyIGV2ZW50KS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG91Y2hlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlZCBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIGFsbCBQSU4gY29kZSBmaWVsZHMgYXJlIGZpbGxlZC5cbiAgICAgKiBUcnVlIG9ubHkgd2hlbiBldmVyeSBmaWVsZCBjb250YWlucyBhIG5vbi1lbXB0eSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDb21wbGV0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW5wdXRzKCkuZXZlcnkoKGlucHV0KSA9PiBpbnB1dCAhPT0gJycpKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVkIHNpZ25hbCBjb250YWluaW5nIHRoZSBjb21wbGV0ZSBQSU4gY29kZSBhcyBhIGpvaW5lZCBzdHJpbmcuXG4gICAgICogUmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgbm8gaW5wdXRzIGFyZSBmaWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIGN1cnJlbnRWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW5wdXRzKCkuam9pbignJykpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIHRyYWNraW5nIGlmIHRoZSBjb21wb25lbnQgaG9zdCBoYXMgdGhlIG5nLWludmFsaWQgY2xhc3MgZnJvbSBGb3JtQ29udHJvbCB2YWxpZGF0b3JzLlxuICAgICAqIFVwZGF0ZWQgcmVhY3RpdmVseSB3aGVuZXZlciB0aGUgaW52YWxpZCBzdGF0ZSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgaGFzTmdJbnZhbGlkQ2xhc3MgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIHRyYWNraW5nIGlmIHRoZSBGb3JtQ29udHJvbCBpcyBkaXJ0eS5cbiAgICAgKiBVcGRhdGVkIHJlYWN0aXZlbHkgd2hlbmV2ZXIgdGhlIGRpcnR5IHN0YXRlIGNoYW5nZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0NvbnRyb2xEaXJ0eSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlZCBzaWduYWwgaW5kaWNhdGluZyBpZiB0aGUgY29tcG9uZW50IHNob3VsZCBzaG93IGVycm9yIHN0YXRlLlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZjpcbiAgICAgKiAtIFRoZSBgaW52YWxpZGAgaW5wdXQgaXMgdHJ1ZSwgT1JcbiAgICAgKiAtIFRoZSBjb21wb25lbnQgaGFzIHRoZSBgbmctaW52YWxpZGAgY2xhc3MgQU5EIHRoZSBGb3JtQ29udHJvbCBpcyBkaXJ0eSAodG91Y2hlZC9tb2RpZmllZClcbiAgICAgKiBUaGlzIGVuc3VyZXMgZXJyb3JzIGFyZSBvbmx5IHNob3duIHRvIHRoZSB1c2VyIGFmdGVyIHRoZXkndmUgaW50ZXJhY3RlZCB3aXRoIHRoZSBmaWVsZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzRXJyb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmludmFsaWQoKSB8fCAodGhpcy5oYXNOZ0ludmFsaWRDbGFzcygpICYmIHRoaXMuaXNDb250cm9sRGlydHkoKSkpO1xuXG4gICAgLyoqXG4gICAgICogVmlld0NoaWxkcmVuIHJlZmVyZW5jZSB0byBhbGwgaW5wdXQgRE9NIGVsZW1lbnRzLlxuICAgICAqIFVzZWQgZm9yIERPTSBtYW5pcHVsYXRpb24gKGZvY3VzLCBzZWxlY3Rpb24pLlxuICAgICAqL1xuICAgIHB1YmxpYyBwaW5JbnB1dHMgPSB2aWV3Q2hpbGRyZW48RWxlbWVudFJlZj4oJ3BpbklucHV0Jyk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdMZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdMZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUElOIGNvZGUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgMScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0cygpLmxlbmd0aCAhPT0gbmV3TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRzLnNldChBcnJheS5mcm9tKHsgbGVuZ3RoOiBuZXdMZW5ndGggfSwgKCkgPT4gJycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1vbml0b3IgbmctaW52YWxpZCBhbmQgbmctZGlydHkgY2xhc3NlcyBvbiB0aGUgaG9zdCBlbGVtZW50IGZvciByZWFjdGl2ZSBlcnJvciBzdGF0ZVxuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQWNjZXNzIGlucHV0cyB0byBjcmVhdGUgZGVwZW5kZW5jeSBvbiBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludmFsaWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGRlZmVyIHRoZSBjaGVjayB0byBuZXh0IHRpY2sgdG8gZW5zdXJlIEFuZ3VsYXIgaGFzIHVwZGF0ZWQgRE9NIGNsYXNzZXNcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc05nSW52YWxpZCA9IGhvc3RFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0RpcnR5ID0gaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1kaXJ0eScpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzTmdJbnZhbGlkQ2xhc3Muc2V0KGhhc05nSW52YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb250cm9sRGlydHkuc2V0KGlzRGlydHkpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2xlYW51cCB0aW1lb3V0IG9uIGNvbXBvbmVudCBkZXN0cm95XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGlucHV0IGV2ZW50IG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBWYWxpZGF0ZXMgY2hhcmFjdGVyIGlucHV0LCBwcmV2ZW50cyBtdWx0aXBsZSBjaGFyYWN0ZXJzIHBlciBmaWVsZCxcbiAgICAgKiBhdXRvLWFkdmFuY2VzIHRvIG5leHQgZmllbGQgd2hlbiBjaGFyYWN0ZXIgaXMgZW50ZXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgaW5wdXQgZXZlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JbnB1dChpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMSB8fCAodmFsdWUgJiYgIXRoaXMuaXNWYWxpZENoYXJhY3Rlcih2YWx1ZSkpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFySW5wdXQodGFyZ2V0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4LCB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHZhbHVlICYmIGluZGV4IDwgdGhpcy5sZW5ndGgoKSAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCArIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGVGaWxsZWQuZW1pdCh0aGlzLmN1cnJlbnRWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBTdXBwb3J0cyBhcnJvdyBuYXZpZ2F0aW9uIChsZWZ0L3JpZ2h0KSBhbmQgYmFja3NwYWNlIGtleS5cbiAgICAgKlxuICAgICAqIEtleWJvYXJkIGJlaGF2aW9yOlxuICAgICAqIC0gQXJyb3dSaWdodDogTW92ZSBmb2N1cyB0byBuZXh0IGZpZWxkXG4gICAgICogLSBBcnJvd0xlZnQ6IE1vdmUgZm9jdXMgdG8gcHJldmlvdXMgZmllbGRcbiAgICAgKiAtIEJhY2tzcGFjZTogQ2xlYXIgY3VycmVudCBvciBwcmV2aW91cyBmaWVsZCBhbmQgYWRqdXN0IGZvY3VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGtleWJvYXJkIGV2ZW50XG4gICAgICovXG4gICAgcHVibGljIG9uS2V5RG93bihpbmRleDogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmxlbmd0aCgpIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzQW5kU2VsZWN0SW5wdXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGluZGV4IC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQmFja3NwYWNlJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFja3NwYWNlKGluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgcGFzdGUgKGNsaXBib2FyZCkgZXZlbnRzIG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBFeHRyYWN0cyB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gcGFzdGVkIGNvbnRlbnQsIGZpbHRlcnMgYnkgY2hhcmFjdGVyIHR5cGUsXG4gICAgICogYW5kIGF1dG9tYXRpY2FsbHkgdHJ1bmNhdGVzIHRvIG1hdGNoIGZpZWxkIGxlbmd0aC5cbiAgICAgKlxuICAgICAqIEJlaGF2aW9yOlxuICAgICAqIC0gRmlsdGVycyBjaGFyYWN0ZXJzIGJhc2VkIG9uIGBhbHBoYW51bWVyaWNgIHNldHRpbmdcbiAgICAgKiAtIFRydW5jYXRlcyB0byBtYXhpbXVtIGZpZWxkIGNvdW50XG4gICAgICogLSBGaWxscyBhdmFpbGFibGUgZmllbGRzIHdpdGggcGFzdGVkIGNvbnRlbnRcbiAgICAgKiAtIEVtaXRzIGNvZGVGaWxsZWQgZXZlbnQgaWYgYWxsIGZpZWxkcyBhcmUgZmlsbGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgY2xpcGJvYXJkIGV2ZW50XG4gICAgICovXG4gICAgcHVibGljIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkQ2hhcnMgPSB0aGlzLmV4dHJhY3RWYWxpZENoYXJhY3RlcnNGcm9tUGFzdGUoZXZlbnQpO1xuXG4gICAgICAgIGlmICh2YWxpZENoYXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsbGVkSW5wdXRzID0gWy4uLnZhbGlkQ2hhcnMsIC4uLkFycmF5KHRoaXMubGVuZ3RoKCkgLSB2YWxpZENoYXJzLmxlbmd0aCkuZmlsbCgnJyldO1xuXG4gICAgICAgIHRoaXMuaW5wdXRzLnNldChmaWxsZWRJbnB1dHMpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XG5cbiAgICAgICAgLy8gRm9jdXMgb24gdGhlIGZpcnN0IGVtcHR5IGlucHV0IG9yIHRoZSBsYXN0IGZpbGxlZCBpbnB1dCBpZiBhbGwgYXJlIGZpbGxlZFxuICAgICAgICBjb25zdCBmaXJzdEVtcHR5SW5kZXggPSB2YWxpZENoYXJzLmxlbmd0aCA8IHRoaXMubGVuZ3RoKCkgPyB2YWxpZENoYXJzLmxlbmd0aCA6IHZhbGlkQ2hhcnMubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGZpcnN0RW1wdHlJbmRleCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGVGaWxsZWQuZW1pdCh0aGlzLmN1cnJlbnRWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgZm9jdXMgZXZlbnQgb24gUElOIGNvZGUgZmllbGRzLlxuICAgICAqIFNlbGVjdHMgYWxsIHRleHQgaW4gdGhlIGlucHV0IGZpZWxkIHdoZW4gZm9jdXNlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Gb2N1cyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5waW5JbnB1dHMoKVtpbmRleF07XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgYmx1ciBldmVudCBvbiBQSU4gY29kZSBmaWVsZHMuXG4gICAgICogTWFya3MgdGhlIGNvbXBvbmVudCBhcyB0b3VjaGVkIHdoZW4gdGhlIGxhc3QgaW5wdXQgZmllbGQgbG9zZXMgZm9jdXMuXG4gICAgICogQWxzbyBub3RpZmllcyB0aGUgcmVnaXN0ZXJlZCBvblRvdWNoZWQgY2FsbGJhY2sgZm9yIEZvcm1Db250cm9sIGludGVncmF0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkJsdXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBPbmx5IG1hcmsgYXMgdG91Y2hlZCB3aGVuIHRoZSBMQVNUIGlucHV0IGxvc2VzIGZvY3VzXG4gICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5sZW5ndGgoKSAtIFBpbkNvZGVGaWVsZENvbXBvbmVudC5MQVNUX0lOREVYX09GRlNFVCkge1xuICAgICAgICAgICAgdGhpcy50b3VjaGVkLnNldCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGlucHV0IHZhbHVlIGF0IHNwZWNpZmllZCBpbmRleCBhbmQgYWRqdXN0cyBmb2N1cyBhY2NvcmRpbmdseS5cbiAgICAgKiBJZiBjdXJyZW50IGZpZWxkIGlzIGVtcHR5LCBtb3ZlcyB0byBwcmV2aW91cyBmaWVsZCBhbmQgY2xlYXJzIGl0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVCYWNrc3BhY2UoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5wdXRzID0gdGhpcy5pbnB1dHMoKTtcblxuICAgICAgICAvLyBJZiBjdXJyZW50IGlucHV0IGhhcyB2YWx1ZSwgY2xlYXIgaXRcbiAgICAgICAgaWYgKGN1cnJlbnRJbnB1dHNbaW5kZXhdKSB7XG4gICAgICAgICAgICB0aGlzLnNldElucHV0QXRJbmRleChpbmRleCwgUGluQ29kZUZpZWxkQ29tcG9uZW50LkVNUFRZX1ZBTFVFKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgY2xlYXIgcHJldmlvdXMgaW5wdXQgYW5kIGZvY3VzIGl0XG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4IC0gMSwgUGluQ29kZUZpZWxkQ29tcG9uZW50LkVNUFRZX1ZBTFVFKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgYXQgYSBzcGVjaWZpYyBpbnB1dCBmaWVsZCBpbmRleCBhbmQgdXBkYXRlcyB0aGUgZm9ybSB2YWx1ZS5cbiAgICAgKiBVcGRhdGVzIHRoZSBzaWduYWwgYW5kIHRyaWdnZXJzIHRoZSBjaGFuZ2UgZGV0ZWN0aW9uIHZpYSBvbkNoYW5nZSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQgaW4gdGhlIGZpZWxkXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRJbnB1dEF0SW5kZXgoaW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5wdXRzID0gdGhpcy5pbnB1dHMoKTtcbiAgICAgICAgY3VycmVudElucHV0c1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbnB1dHMuc2V0KFsuLi5jdXJyZW50SW5wdXRzXSk7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIG9uIGFuZCBzZWxlY3RzIHRleHQgaW4gdGhlIGlucHV0IGZpZWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguXG4gICAgICogVXNlcyBxdWV1ZU1pY3JvdGFzayB0byBlbnN1cmUgRE9NIGlzIHVwZGF0ZWQgYmVmb3JlIGZvY3VzaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICovXG4gICAgcHJpdmF0ZSBmb2N1c0FuZFNlbGVjdElucHV0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnBpbklucHV0cygpW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBpbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIHZhbHVlIG9mIGFuIGlucHV0IGVsZW1lbnQuXG4gICAgICogVXNlZCBmb3IgaW5wdXQgdmFsaWRhdGlvbiB0byByZWplY3QgaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIEhUTUwgaW5wdXQgZWxlbWVudCB0byBjbGVhclxuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYXJJbnB1dCh0YXJnZXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgdmFsaWQgY2hhcmFjdGVycyBmcm9tIHBhc3RlZCBjb250ZW50LlxuICAgICAqIEZpbHRlcnMgYmFzZWQgb24gYWxwaGFudW1lcmljIHNldHRpbmcgYW5kIGxpbWl0cyB0byBjb21wb25lbnQncyBsZW5ndGguXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBjbGlwYm9hcmQgZXZlbnRcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gdGhlIHBhc3RlZCBjb250ZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBleHRyYWN0VmFsaWRDaGFyYWN0ZXJzRnJvbVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IChldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIHBhc3RlZFRleHRcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5maWx0ZXIoKGNoYXIpID0+IHRoaXMuaXNWYWxpZENoYXJhY3RlcihjaGFyKSlcbiAgICAgICAgICAgIC5zbGljZSgwLCB0aGlzLmxlbmd0aCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgaWYgYSBjaGFyYWN0ZXIgaXMgYWNjZXB0YWJsZSBiYXNlZCBvbiBjb21wb25lbnQgY29uZmlndXJhdGlvbi5cbiAgICAgKiBGb3IgbnVtZXJpYyBtb2RlLCBhY2NlcHRzIG9ubHkgZGlnaXRzIDAtOS5cbiAgICAgKiBGb3IgYWxwaGFudW1lcmljIG1vZGUsIGFjY2VwdHMgYW55IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIGNoYXIgLSBUaGUgY2hhcmFjdGVyIHRvIHZhbGlkYXRlXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBjaGFyYWN0ZXIgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHByaXZhdGUgaXNWYWxpZENoYXJhY3RlcihjaGFyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuYWxwaGFudW1lcmljKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFyLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAvXlswLTldJC8udGVzdChjaGFyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBmb3JtIHZhbHVlIGJ5IGNhbGxpbmcgdGhlIG9uQ2hhbmdlIGNhbGxiYWNrIHJlZ2lzdGVyZWQgYnkgRm9ybUNvbnRyb2wuXG4gICAgICogVGhpcyBlbnN1cmVzIHRoZSByZWFjdGl2ZSBmb3JtIHN0YXlzIHN5bmNocm9uaXplZCB3aXRoIGNvbXBvbmVudCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmN1cnJlbnRWYWx1ZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cbiAgICAgKiBDYWxsZWQgYnkgdGhlIEZvcm1Db250cm9sIHRvIHdyaXRlIGEgdmFsdWUgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKiBPbmx5IGFjY2VwdHMgc3RyaW5nIHZhbHVlcyB3aXRoIGxlbmd0aCBtYXRjaGluZyB0aGUgY29tcG9uZW50J3MgbGVuZ3RoIHNldHRpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUgKHR5cGljYWxseSBmcm9tIHRoZSBGb3JtQ29udHJvbClcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHN0cmluZ1ZhbHVlLmxlbmd0aCA9PT0gdGhpcy5sZW5ndGgoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRzLnNldChzdHJpbmdWYWx1ZS5zcGxpdCgnJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UuXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBGb3JtQ29udHJvbCB3aGVuIHZhbHVlIGNoYW5nZXMuXG4gICAgICogUmVnaXN0ZXJzIHRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IHZhbHVlIGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm4gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBjb21wb25lbnQgdmFsdWUgY2hhbmdlc1xuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UuXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBGb3JtQ29udHJvbCB0byByZWdpc3RlciB0aGUgdG91Y2hlZCBjYWxsYmFjay5cbiAgICAgKiBUaGUgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIHRoZSBsYXN0IGlucHV0IGZpZWxkIGxvc2VzIGZvY3VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZuIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gY29tcG9uZW50IGlzIHRvdWNoZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cbiAgICAgKiBDYWxsZWQgYnkgdGhlIEZvcm1Db250cm9sIHRvIHNldCB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBVcGRhdGVzIHRoZSBkaXNhYmxlZCBtb2RlbCB0byByZWZsZWN0IHRoZSBmb3JtJ3MgZGlzYWJsZWQgc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNEaXNhYmxlZCAtIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgZGlzYWJsZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQuc2V0KGlzRGlzYWJsZWQpO1xuICAgIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImdhcC14c21hbGwgZmxleCBmbGV4LWNvbFwiPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmbGV4IGdhcC0yXCJcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIlBJTiBjb2RlIGlucHV0XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImhlbHBUZXh0KCkgPyAncGluLWhlbHAtdGV4dCcgOiBudWxsXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGlucHV0IG9mIGlucHV0cygpOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI3BpbklucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0xMiB3LTEyIHJvdW5kZWQteGJpZyBib3JkZXIgdGV4dC1jZW50ZXIgdGV4dC1sZyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1jcml0aWNhbGl0eS1yZWQgZm9jdXM6cmluZy1jcml0aWNhbGl0eS1yZWQnOiBoYXNFcnJvcigpLFxuICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWdyYXlzY2FsZS0zMCBmb2N1czpib3JkZXItcHJpbWFyeSBmb2N1czpyaW5nLXByaW1hcnknOiAhaGFzRXJyb3IoKSxcbiAgICAgICAgICAgICAgICAgICAgJ2N1cnNvci1ub3QtYWxsb3dlZCBiZy1ncmF5c2NhbGUtMTAgdGV4dC1ncmF5c2NhbGUtNjAnOiBkaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgICAgICAnYmctZ3JheXNjYWxlLTAgdGV4dC1ncmF5c2NhbGUtMTAwIGZvY3VzOm91dGxpbmUtbm9uZSc6ICFkaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpbnB1dFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLm1heGxlbmd0aF09XCIxXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pbnB1dG1vZGVdPVwiYWxwaGFudW1lcmljKCkgPyAndGV4dCcgOiAnbnVtZXJpYydcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgIGFscGhhbnVtZXJpYygpXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpbl9jb2RlX2NoYXJhY3Rlcl9pbmRleF9vZl90b3RhbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgaW5kZXg6IGkgKyAxLCBsZW5ndGg6IGxlbmd0aCgpIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpbl9jb2RlX2RpZ2l0X2luZGV4X29mX3RvdGFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBpbmRleDogaSArIDEsIGxlbmd0aDogbGVuZ3RoKCkgfSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGVscFRleHQoKSA/ICdwaW4taGVscC10ZXh0JyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dChpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoaSlcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cihpKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGhlbHBUZXh0KCkpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9XCJwaW4taGVscC10ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwibXQtc21hbGwgdGV4dC1zbSB0ZXh0LWdyYXlzY2FsZS02MFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IGhlbHBUZXh0KCkgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG5cbiJdfQ==
@@ -1,3 +1,23 @@
1
- export { ProductHeaderModule } from "./lib/product-header/product-header.module";
2
- export { ProductHeaderComponent } from "./lib/product-header/product-header.component";
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9wcm9kdWN0LWhlYWRlci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFByb2R1Y3RIZWFkZXJNb2R1bGUgfSBmcm9tIFwiLi9saWIvcHJvZHVjdC1oZWFkZXIvcHJvZHVjdC1oZWFkZXIubW9kdWxlXCI7XG5leHBvcnQgeyBQcm9kdWN0SGVhZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vbGliL3Byb2R1Y3QtaGVhZGVyL3Byb2R1Y3QtaGVhZGVyLmNvbXBvbmVudFwiO1xuIl19
1
+ import { TopbarComponent as TopbarComponentOriginal, TopbarModule as TopbarModuleOriginal } from '@seniorsistemas/angular-components/topbar';
2
+ /**
3
+ * @deprecated Use TopbarComponent from '@seniorsistemas/angular-components/topbar'.
4
+ * O pacote product-header será removido na versão 20.0.0.
5
+ */
6
+ export const TopbarComponent = TopbarComponentOriginal;
7
+ /**
8
+ * @deprecated Use TopbarModule from '@seniorsistemas/angular-components/topbar'.
9
+ * O pacote product-header será removido na versão 20.0.0.
10
+ */
11
+ export const TopbarModule = TopbarModuleOriginal;
12
+ // Aliases com os nomes antigos para manter compatibilidade
13
+ /**
14
+ * @deprecated Use TopbarComponent from '@seniorsistemas/angular-components/topbar'.
15
+ * O pacote product-header será removido na versão 20.0.0.
16
+ */
17
+ export const ProductHeaderComponent = TopbarComponentOriginal;
18
+ /**
19
+ * @deprecated Use TopbarModule from '@seniorsistemas/angular-components/topbar'.
20
+ * O pacote product-header será removido na versão 20.0.0.
21
+ */
22
+ export const ProductHeaderModule = TopbarModuleOriginal;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9wcm9kdWN0LWhlYWRlci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsZUFBZSxJQUFJLHVCQUF1QixFQUMxQyxZQUFZLElBQUksb0JBQW9CLEVBQ3ZDLE1BQU0sMkNBQTJDLENBQUM7QUFFbkQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFDO0FBRXZEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQztBQUVqRCwyREFBMkQ7QUFDM0Q7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsdUJBQXVCLENBQUM7QUFFOUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFRvcGJhckNvbXBvbmVudCBhcyBUb3BiYXJDb21wb25lbnRPcmlnaW5hbCxcbiAgICBUb3BiYXJNb2R1bGUgYXMgVG9wYmFyTW9kdWxlT3JpZ2luYWxcbn0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90b3BiYXInO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBUb3BiYXJDb21wb25lbnQgZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90b3BiYXInLlxuICogTyBwYWNvdGUgcHJvZHVjdC1oZWFkZXIgc2Vyw6EgcmVtb3ZpZG8gbmEgdmVyc8OjbyAyMC4wLjAuXG4gKi9cbmV4cG9ydCBjb25zdCBUb3BiYXJDb21wb25lbnQgPSBUb3BiYXJDb21wb25lbnRPcmlnaW5hbDtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgVG9wYmFyTW9kdWxlIGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdG9wYmFyJy5cbiAqIE8gcGFjb3RlIHByb2R1Y3QtaGVhZGVyIHNlcsOhIHJlbW92aWRvIG5hIHZlcnPDo28gMjAuMC4wLlxuICovXG5leHBvcnQgY29uc3QgVG9wYmFyTW9kdWxlID0gVG9wYmFyTW9kdWxlT3JpZ2luYWw7XG5cbi8vIEFsaWFzZXMgY29tIG9zIG5vbWVzIGFudGlnb3MgcGFyYSBtYW50ZXIgY29tcGF0aWJpbGlkYWRlXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBUb3BiYXJDb21wb25lbnQgZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90b3BiYXInLlxuICogTyBwYWNvdGUgcHJvZHVjdC1oZWFkZXIgc2Vyw6EgcmVtb3ZpZG8gbmEgdmVyc8OjbyAyMC4wLjAuXG4gKi9cbmV4cG9ydCBjb25zdCBQcm9kdWN0SGVhZGVyQ29tcG9uZW50ID0gVG9wYmFyQ29tcG9uZW50T3JpZ2luYWw7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIFRvcGJhck1vZHVsZSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3RvcGJhcicuXG4gKiBPIHBhY290ZSBwcm9kdWN0LWhlYWRlciBzZXLDoSByZW1vdmlkbyBuYSB2ZXJzw6NvIDIwLjAuMC5cbiAqL1xuZXhwb3J0IGNvbnN0IFByb2R1Y3RIZWFkZXJNb2R1bGUgPSBUb3BiYXJNb2R1bGVPcmlnaW5hbDtcbiJdfQ==