@koobiq/components 16.0.0-beta.1 → 16.0.0-beta.11

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 (479) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +2 -2
  3. package/autocomplete/_autocomplete-theme.scss +3 -10
  4. package/autocomplete/autocomplete-origin.directive.d.ts +1 -1
  5. package/autocomplete/autocomplete-trigger.directive.d.ts +6 -16
  6. package/autocomplete/autocomplete.component.d.ts +1 -1
  7. package/autocomplete/autocomplete.scss +0 -8
  8. package/badge/README.md +0 -0
  9. package/{core/styles/theming/_badges-theme.scss → badge/_badge-theme.scss} +14 -13
  10. package/badge/badge.component.d.ts +44 -0
  11. package/badge/badge.component.scss +83 -0
  12. package/badge/badge.module.d.ts +10 -0
  13. package/badge/index.d.ts +1 -0
  14. package/badge/public-api.d.ts +2 -0
  15. package/button/_button-base.scss +1 -1
  16. package/button/_button-theme.scss +35 -27
  17. package/button/button.scss +5 -2
  18. package/button-toggle/_button-toggle-theme.scss +26 -45
  19. package/button-toggle/button-toggle.component.d.ts +2 -2
  20. package/button-toggle/button-toggle.scss +40 -87
  21. package/card/_card-theme.scss +1 -1
  22. package/checkbox/README.md +1 -1
  23. package/checkbox/_checkbox-theme.scss +10 -2
  24. package/checkbox/checkbox.d.ts +2 -2
  25. package/code-block/README.md +14 -14
  26. package/code-block/_code-block-theme.scss +49 -10
  27. package/code-block/actionbar.component.scss +34 -6
  28. package/code-block/code-block.component.d.ts +2 -2
  29. package/code-block/code-block.scss +101 -27
  30. package/core/animation/index.d.ts +1 -1
  31. package/core/animation/select-animations.d.ts +1 -1
  32. package/core/common-behaviors/color.d.ts +1 -1
  33. package/core/common-behaviors/common-module.d.ts +1 -1
  34. package/core/formatters/index.d.ts +1 -1
  35. package/core/formatters/number/formatter.d.ts +56 -1
  36. package/core/forms/_forms-theme.scss +4 -4
  37. package/core/forms/_forms.scss +1 -3
  38. package/core/forms/forms.directive.d.ts +2 -2
  39. package/core/locales/en-US.d.ts +19 -1
  40. package/core/locales/es-LA.d.ts +27 -0
  41. package/core/locales/fa-IR.d.ts +28 -0
  42. package/core/locales/locale-service.d.ts +148 -3
  43. package/core/locales/pt-BR.d.ts +27 -0
  44. package/core/locales/ru-RU.d.ts +20 -1
  45. package/core/locales/zh-CN.d.ts +26 -0
  46. package/core/option/_optgroup-theme.scss +1 -1
  47. package/core/option/_option-action-theme.scss +1 -1
  48. package/core/option/_option-theme.scss +37 -14
  49. package/core/option/action.d.ts +1 -1
  50. package/core/option/action.scss +4 -5
  51. package/core/option/optgroup.d.ts +1 -1
  52. package/core/option/option.d.ts +37 -8
  53. package/core/option/option.scss +5 -50
  54. package/core/overlay/overlay-position-map.d.ts +7 -1
  55. package/core/pop-up/constants.d.ts +2 -1
  56. package/core/public-api.d.ts +1 -0
  57. package/core/select/constants.d.ts +2 -2
  58. package/core/services/theme.service.d.ts +23 -0
  59. package/core/styles/_koobiq-theme.scss +12 -1
  60. package/core/styles/_tokens.kbq.import.scss +4 -4
  61. package/core/styles/_tokens.scss +4 -4
  62. package/core/styles/_variables.scss +1 -0
  63. package/core/styles/common/_animation.scss +10 -6
  64. package/core/styles/common/_list.scss +123 -0
  65. package/core/styles/common/_overlay.scss +1 -1
  66. package/core/styles/common/_select.scss +232 -0
  67. package/core/styles/theming/_components-theming.scss +716 -102
  68. package/core/styles/theming/_theming.scss +201 -30
  69. package/core/styles/typography/_typography.scss +176 -5
  70. package/datepicker/_datepicker-theme.scss +43 -57
  71. package/datepicker/calendar-body.component.d.ts +1 -1
  72. package/datepicker/calendar-body.scss +11 -26
  73. package/datepicker/calendar-header.component.d.ts +9 -3
  74. package/datepicker/calendar-header.scss +7 -31
  75. package/datepicker/calendar.component.d.ts +4 -5
  76. package/datepicker/calendar.scss +20 -25
  77. package/datepicker/datepicker-animations.d.ts +2 -2
  78. package/datepicker/datepicker-content.scss +17 -10
  79. package/datepicker/datepicker-input.directive.d.ts +4 -4
  80. package/datepicker/datepicker-input.scss +1 -1
  81. package/datepicker/datepicker-toggle.component.d.ts +3 -3
  82. package/datepicker/datepicker.component.d.ts +2 -2
  83. package/datepicker/month-view.component.d.ts +5 -6
  84. package/dl/_dl-theme.scss +2 -56
  85. package/dl/dl.component.d.ts +1 -2
  86. package/dl/dl.scss +10 -47
  87. package/dropdown/_dropdown-theme.scss +29 -37
  88. package/dropdown/dropdown-animations.d.ts +1 -1
  89. package/dropdown/dropdown-content.directive.d.ts +1 -1
  90. package/dropdown/dropdown-item.component.d.ts +1 -1
  91. package/dropdown/dropdown-item.scss +18 -40
  92. package/dropdown/dropdown-trigger.directive.d.ts +2 -2
  93. package/dropdown/dropdown.component.d.ts +1 -1
  94. package/dropdown/dropdown.scss +16 -39
  95. package/dropdown/dropdown.types.d.ts +1 -1
  96. package/esm2022/alert/alert.component.mjs +3 -3
  97. package/esm2022/autocomplete/autocomplete-origin.directive.mjs +4 -4
  98. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +34 -31
  99. package/esm2022/autocomplete/autocomplete.component.mjs +4 -4
  100. package/esm2022/badge/badge.component.mjs +122 -0
  101. package/esm2022/badge/badge.module.mjs +40 -0
  102. package/esm2022/badge/index.mjs +2 -0
  103. package/esm2022/badge/koobiq-components-badge.mjs +5 -0
  104. package/esm2022/badge/public-api.mjs +3 -0
  105. package/esm2022/button/button.component.mjs +4 -3
  106. package/esm2022/button-toggle/button-toggle.component.mjs +15 -15
  107. package/esm2022/checkbox/checkbox.mjs +4 -4
  108. package/esm2022/code-block/actionbar.component.mjs +3 -3
  109. package/esm2022/code-block/code-block.component.mjs +11 -9
  110. package/esm2022/core/animation/index.mjs +2 -2
  111. package/esm2022/core/animation/select-animations.mjs +4 -4
  112. package/esm2022/core/common-behaviors/color.mjs +1 -1
  113. package/esm2022/core/common-behaviors/common-module.mjs +2 -2
  114. package/esm2022/core/formatters/index.mjs +10 -2
  115. package/esm2022/core/formatters/number/formatter.mjs +224 -3
  116. package/esm2022/core/forms/forms.directive.mjs +5 -5
  117. package/esm2022/core/locales/en-US.mjs +22 -4
  118. package/esm2022/core/locales/es-LA.mjs +31 -2
  119. package/esm2022/core/locales/fa-IR.mjs +30 -2
  120. package/esm2022/core/locales/locale-service.mjs +4 -4
  121. package/esm2022/core/locales/pt-BR.mjs +29 -2
  122. package/esm2022/core/locales/ru-RU.mjs +23 -2
  123. package/esm2022/core/locales/zh-CN.mjs +28 -2
  124. package/esm2022/core/option/action.mjs +8 -7
  125. package/esm2022/core/option/optgroup.mjs +3 -3
  126. package/esm2022/core/option/option.mjs +47 -10
  127. package/esm2022/core/overlay/overlay-position-map.mjs +8 -1
  128. package/esm2022/core/pop-up/constants.mjs +2 -1
  129. package/esm2022/core/pop-up/pop-up-trigger.mjs +12 -3
  130. package/esm2022/core/public-api.mjs +2 -1
  131. package/esm2022/core/select/constants.mjs +3 -3
  132. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +3 -3
  133. package/esm2022/core/services/theme.service.mjs +60 -0
  134. package/esm2022/core/version.mjs +2 -2
  135. package/esm2022/datepicker/calendar-body.component.mjs +7 -5
  136. package/esm2022/datepicker/calendar-header.component.mjs +9 -8
  137. package/esm2022/datepicker/calendar.component.mjs +8 -17
  138. package/esm2022/datepicker/datepicker-animations.mjs +3 -3
  139. package/esm2022/datepicker/datepicker-input.directive.mjs +29 -20
  140. package/esm2022/datepicker/datepicker-toggle.component.mjs +6 -6
  141. package/esm2022/datepicker/datepicker.component.mjs +12 -12
  142. package/esm2022/datepicker/month-view.component.mjs +9 -18
  143. package/esm2022/dl/dl.component.mjs +3 -7
  144. package/esm2022/dropdown/dropdown-animations.mjs +4 -4
  145. package/esm2022/dropdown/dropdown-content.directive.mjs +3 -3
  146. package/esm2022/dropdown/dropdown-errors.mjs +6 -6
  147. package/esm2022/dropdown/dropdown-item.component.mjs +7 -6
  148. package/esm2022/dropdown/dropdown-trigger.directive.mjs +10 -9
  149. package/esm2022/dropdown/dropdown.component.mjs +9 -9
  150. package/esm2022/dropdown/dropdown.types.mjs +1 -1
  151. package/esm2022/file-upload/file-drop.mjs +43 -6
  152. package/esm2022/file-upload/file-upload.mjs +1 -1
  153. package/esm2022/file-upload/multiple-file-upload.component.mjs +13 -9
  154. package/esm2022/file-upload/single-file-upload.component.mjs +16 -13
  155. package/esm2022/form-field/cleaner.mjs +3 -3
  156. package/esm2022/form-field/form-field.mjs +12 -15
  157. package/esm2022/form-field/hint.mjs +16 -6
  158. package/esm2022/form-field/password-hint.mjs +25 -16
  159. package/esm2022/form-field/password-toggle.mjs +29 -12
  160. package/esm2022/form-field/prefix.mjs +3 -3
  161. package/esm2022/form-field/suffix.mjs +3 -3
  162. package/esm2022/form-field/validate.directive.mjs +15 -9
  163. package/esm2022/icon/icon-button.component.mjs +68 -0
  164. package/esm2022/icon/icon-item.component.mjs +27 -0
  165. package/esm2022/icon/icon.component.mjs +5 -90
  166. package/esm2022/icon/icon.module.mjs +4 -2
  167. package/esm2022/icon/public-api.mjs +3 -1
  168. package/esm2022/input/input-errors.mjs +2 -2
  169. package/esm2022/input/input-number.mjs +260 -44
  170. package/esm2022/input/input-password.mjs +5 -5
  171. package/esm2022/input/input.mjs +7 -7
  172. package/esm2022/link/link.component.mjs +14 -13
  173. package/esm2022/list/list-selection.component.mjs +23 -10
  174. package/esm2022/list/list.component.mjs +2 -2
  175. package/esm2022/list/list.module.mjs +8 -4
  176. package/esm2022/loader-overlay/loader-overlay.component.mjs +20 -19
  177. package/esm2022/modal/modal-control.service.mjs +5 -5
  178. package/esm2022/modal/modal-ref.class.mjs +1 -1
  179. package/esm2022/modal/modal.component.mjs +129 -134
  180. package/esm2022/modal/modal.module.mjs +13 -7
  181. package/esm2022/modal/modal.service.mjs +23 -23
  182. package/esm2022/modal/modal.type.mjs +1 -3
  183. package/esm2022/navbar/navbar-item.component.mjs +19 -18
  184. package/esm2022/navbar/navbar.component.mjs +20 -11
  185. package/esm2022/navbar/vertical-navbar.animation.mjs +2 -2
  186. package/esm2022/navbar/vertical-navbar.component.mjs +11 -8
  187. package/esm2022/popover/popover-animations.mjs +2 -2
  188. package/esm2022/popover/popover-confirm.component.mjs +9 -11
  189. package/esm2022/popover/popover.component.mjs +24 -24
  190. package/esm2022/progress-spinner/progress-spinner.component.mjs +3 -3
  191. package/esm2022/radio/radio.component.mjs +11 -8
  192. package/esm2022/risk-level/index.mjs +2 -0
  193. package/esm2022/risk-level/koobiq-components-risk-level.mjs +5 -0
  194. package/esm2022/risk-level/public-api.mjs +3 -0
  195. package/esm2022/risk-level/risk-level.component.mjs +40 -0
  196. package/esm2022/risk-level/risk-level.module.mjs +28 -0
  197. package/esm2022/select/select-option.directive.mjs +15 -3
  198. package/esm2022/select/select.component.mjs +47 -29
  199. package/esm2022/sidebar/sidebar-animations.mjs +2 -2
  200. package/esm2022/sidebar/sidebar.component.mjs +9 -9
  201. package/esm2022/sidepanel/sidepanel-container.component.mjs +3 -3
  202. package/esm2022/sidepanel/sidepanel-directives.mjs +8 -10
  203. package/esm2022/sidepanel/sidepanel.module.mjs +10 -4
  204. package/esm2022/splitter/splitter.component.mjs +3 -3
  205. package/esm2022/table/table.component.mjs +3 -3
  206. package/esm2022/tabs/paginated-tab-header.mjs +11 -2
  207. package/esm2022/tabs/tab-body.component.mjs +7 -7
  208. package/esm2022/tabs/tab-content.directive.mjs +3 -3
  209. package/esm2022/tabs/tab-group.component.mjs +16 -21
  210. package/esm2022/tabs/tab-header.component.mjs +2 -2
  211. package/esm2022/tabs/tab-label-wrapper.directive.mjs +4 -3
  212. package/esm2022/tabs/tab-label.directive.mjs +3 -3
  213. package/esm2022/tabs/tab-nav-bar/tab-nav-bar.mjs +21 -10
  214. package/esm2022/tabs/tab.component.mjs +14 -5
  215. package/esm2022/tabs/tabs-animations.mjs +2 -2
  216. package/esm2022/tabs/tabs.module.mjs +2 -6
  217. package/esm2022/tags/tag-default-options.mjs +1 -1
  218. package/esm2022/tags/tag-input.mjs +17 -15
  219. package/esm2022/tags/tag-list.component.mjs +15 -10
  220. package/esm2022/tags/tag.component.mjs +16 -16
  221. package/esm2022/textarea/textarea.component.mjs +4 -4
  222. package/esm2022/timepicker/timepicker.directive.mjs +10 -10
  223. package/esm2022/timezone/timezone-option.component.mjs +4 -4
  224. package/esm2022/timezone/timezone-select.component.mjs +5 -5
  225. package/esm2022/title/title.directive.mjs +6 -6
  226. package/esm2022/toast/toast-animations.mjs +2 -1
  227. package/esm2022/toast/toast-container.component.mjs +22 -8
  228. package/esm2022/toast/toast.component.mjs +30 -13
  229. package/esm2022/toast/toast.module.mjs +23 -8
  230. package/esm2022/toast/toast.service.mjs +2 -1
  231. package/esm2022/toast/toast.type.mjs +6 -1
  232. package/esm2022/toggle/toggle.component.mjs +4 -4
  233. package/esm2022/tooltip/tooltip.animations.mjs +2 -2
  234. package/esm2022/tooltip/tooltip.component.mjs +31 -30
  235. package/esm2022/tree/control/base-tree-control.mjs +1 -1
  236. package/esm2022/tree/control/flat-tree-control.mjs +4 -4
  237. package/esm2022/tree/control/tree-control.mjs +1 -1
  238. package/esm2022/tree/node.mjs +5 -5
  239. package/esm2022/tree/outlet.mjs +3 -3
  240. package/esm2022/tree/padding.directive.mjs +9 -9
  241. package/esm2022/tree/toggle.mjs +11 -12
  242. package/esm2022/tree/tree-base.mjs +3 -3
  243. package/esm2022/tree/tree-option.component.mjs +12 -10
  244. package/esm2022/tree/tree-selection.component.mjs +8 -6
  245. package/esm2022/tree/tree.mjs +3 -3
  246. package/esm2022/tree/tree.module.mjs +13 -4
  247. package/esm2022/tree-select/tree-select.component.mjs +28 -23
  248. package/fesm2022/koobiq-components-alert.mjs +2 -2
  249. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  250. package/fesm2022/koobiq-components-autocomplete.mjs +40 -37
  251. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  252. package/fesm2022/koobiq-components-badge.mjs +166 -0
  253. package/fesm2022/koobiq-components-badge.mjs.map +1 -0
  254. package/fesm2022/koobiq-components-button-toggle.mjs +14 -14
  255. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  256. package/fesm2022/koobiq-components-button.mjs +3 -2
  257. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  258. package/fesm2022/koobiq-components-checkbox.mjs +3 -3
  259. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  260. package/fesm2022/koobiq-components-code-block.mjs +10 -9
  261. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  262. package/fesm2022/koobiq-components-core.mjs +535 -46
  263. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  264. package/fesm2022/koobiq-components-datepicker.mjs +73 -79
  265. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  266. package/fesm2022/koobiq-components-dl.mjs +2 -6
  267. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  268. package/fesm2022/koobiq-components-dropdown.mjs +33 -31
  269. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  270. package/fesm2022/koobiq-components-file-upload.mjs +65 -21
  271. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  272. package/fesm2022/koobiq-components-form-field.mjs +96 -59
  273. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  274. package/fesm2022/koobiq-components-icon.mjs +10 -8
  275. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  276. package/fesm2022/koobiq-components-input.mjs +269 -55
  277. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  278. package/fesm2022/koobiq-components-link.mjs +13 -12
  279. package/fesm2022/koobiq-components-link.mjs.map +1 -1
  280. package/fesm2022/koobiq-components-list.mjs +31 -14
  281. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  282. package/fesm2022/koobiq-components-loader-overlay.mjs +19 -18
  283. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  284. package/fesm2022/koobiq-components-modal.mjs +164 -167
  285. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  286. package/fesm2022/koobiq-components-navbar.mjs +46 -37
  287. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  288. package/fesm2022/koobiq-components-popover.mjs +32 -33
  289. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  290. package/fesm2022/koobiq-components-progress-spinner.mjs +2 -2
  291. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  292. package/fesm2022/koobiq-components-radio.mjs +10 -7
  293. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  294. package/fesm2022/koobiq-components-risk-level.mjs +72 -0
  295. package/fesm2022/koobiq-components-risk-level.mjs.map +1 -0
  296. package/fesm2022/koobiq-components-select.mjs +60 -30
  297. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  298. package/fesm2022/koobiq-components-sidebar.mjs +8 -8
  299. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  300. package/fesm2022/koobiq-components-sidepanel.mjs +19 -14
  301. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  302. package/fesm2022/koobiq-components-splitter.mjs +2 -2
  303. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  304. package/fesm2022/koobiq-components-table.mjs +2 -2
  305. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  306. package/fesm2022/koobiq-components-tabs.mjs +74 -53
  307. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  308. package/fesm2022/koobiq-components-tags.mjs +45 -38
  309. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  310. package/fesm2022/koobiq-components-textarea.mjs +3 -3
  311. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  312. package/fesm2022/koobiq-components-timepicker.mjs +9 -9
  313. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  314. package/fesm2022/koobiq-components-timezone.mjs +7 -7
  315. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  316. package/fesm2022/koobiq-components-title.mjs +5 -5
  317. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  318. package/fesm2022/koobiq-components-toast.mjs +71 -22
  319. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  320. package/fesm2022/koobiq-components-toggle.mjs +3 -3
  321. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  322. package/fesm2022/koobiq-components-tooltip.mjs +31 -30
  323. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  324. package/fesm2022/koobiq-components-tree-select.mjs +27 -22
  325. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  326. package/fesm2022/koobiq-components-tree.mjs +67 -54
  327. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  328. package/file-upload/_file-upload-theme.scss +54 -40
  329. package/file-upload/file-drop.d.ts +3 -2
  330. package/file-upload/file-upload.d.ts +4 -1
  331. package/file-upload/file-upload.scss +2 -9
  332. package/file-upload/multiple-file-upload.component.d.ts +6 -5
  333. package/file-upload/multiple-file-upload.component.scss +170 -59
  334. package/file-upload/single-file-upload.component.d.ts +6 -5
  335. package/file-upload/single-file-upload.component.scss +42 -22
  336. package/form-field/_form-field-theme.scss +3 -6
  337. package/form-field/_hint-theme.scss +6 -2
  338. package/form-field/cleaner.d.ts +1 -1
  339. package/form-field/form-field.d.ts +3 -4
  340. package/form-field/form-field.scss +2 -2
  341. package/form-field/hint.d.ts +4 -1
  342. package/form-field/hint.scss +9 -1
  343. package/form-field/password-hint.d.ts +7 -3
  344. package/form-field/password-hint.scss +6 -0
  345. package/form-field/password-toggle.d.ts +13 -7
  346. package/form-field/prefix.d.ts +1 -1
  347. package/form-field/suffix.d.ts +1 -1
  348. package/form-field/validate.directive.d.ts +1 -1
  349. package/icon/_icon-button-theme.scss +129 -0
  350. package/icon/_icon-item-theme.scss +41 -0
  351. package/icon/_icon-theme.scss +1 -232
  352. package/icon/icon-button.component.d.ts +22 -0
  353. package/icon/icon-button.scss +33 -0
  354. package/icon/icon-item.component.d.ts +10 -0
  355. package/icon/icon-item.scss +18 -0
  356. package/icon/icon.component.d.ts +1 -25
  357. package/icon/icon.module.d.ts +6 -4
  358. package/icon/icon.scss +0 -41
  359. package/icon/public-api.d.ts +2 -0
  360. package/input/_input-theme.scss +2 -1
  361. package/input/input-number.d.ts +61 -10
  362. package/input/input-password.d.ts +1 -1
  363. package/input/input.d.ts +2 -2
  364. package/input/input.scss +3 -1
  365. package/link/_link-theme.scss +101 -92
  366. package/link/link.component.d.ts +4 -4
  367. package/list/_list-theme.scss +36 -17
  368. package/list/list-selection.component.d.ts +6 -2
  369. package/list/list.module.d.ts +1 -1
  370. package/list/list.scss +6 -19
  371. package/loader-overlay/_loader-overlay-theme.scss +43 -11
  372. package/loader-overlay/loader-overlay.component.d.ts +6 -5
  373. package/loader-overlay/loader-overlay.scss +56 -22
  374. package/markdown/_markdown-theme.scss +2 -2
  375. package/modal/README.md +5 -5
  376. package/modal/_modal-confirm.scss +5 -37
  377. package/modal/_modal-theme.scss +14 -52
  378. package/modal/modal-ref.class.d.ts +2 -2
  379. package/modal/modal.component.d.ts +53 -52
  380. package/modal/modal.module.d.ts +2 -1
  381. package/modal/modal.scss +50 -31
  382. package/modal/modal.type.d.ts +35 -36
  383. package/navbar/_navbar-theme.scss +2 -2
  384. package/navbar/navbar-item.component.d.ts +4 -3
  385. package/navbar/navbar.component.d.ts +5 -2
  386. package/navbar/vertical-navbar.component.d.ts +4 -2
  387. package/package.json +48 -38
  388. package/popover/README.md +14 -14
  389. package/popover/_popover-theme.scss +15 -78
  390. package/popover/popover-animations.d.ts +1 -1
  391. package/popover/popover-confirm.component.d.ts +1 -3
  392. package/popover/popover.component.d.ts +3 -3
  393. package/popover/popover.scss +60 -50
  394. package/prebuilt-themes/dark-theme.css +1 -1
  395. package/prebuilt-themes/light-theme.css +1 -1
  396. package/progress-spinner/progress-spinner.component.d.ts +2 -2
  397. package/progress-spinner/progress-spinner.scss +10 -5
  398. package/radio/_radio-theme.scss +17 -4
  399. package/radio/radio.component.d.ts +2 -2
  400. package/radio/radio.scss +13 -0
  401. package/risk-level/README.md +0 -0
  402. package/risk-level/_risk-level-theme.scss +88 -0
  403. package/risk-level/index.d.ts +1 -0
  404. package/risk-level/public-api.d.ts +2 -0
  405. package/risk-level/risk-level.component.d.ts +18 -0
  406. package/risk-level/risk-level.component.scss +26 -0
  407. package/risk-level/risk-level.module.d.ts +10 -0
  408. package/select/_select-theme.scss +12 -4
  409. package/select/select-option.directive.d.ts +2 -0
  410. package/select/select.component.d.ts +15 -12
  411. package/select/select.scss +6 -190
  412. package/sidebar/sidebar-animations.d.ts +1 -1
  413. package/sidebar/sidebar.component.d.ts +3 -3
  414. package/sidepanel/_sidepanel-theme.scss +11 -41
  415. package/sidepanel/sidepanel-directives.d.ts +0 -2
  416. package/sidepanel/sidepanel.scss +33 -35
  417. package/splitter/_splitter-theme.scss +1 -0
  418. package/splitter/splitter.component.d.ts +1 -1
  419. package/table/_table-theme.scss +1 -1
  420. package/table/table.component.d.ts +1 -1
  421. package/tabs/_tabs-common.scss +28 -147
  422. package/tabs/_tabs-theme.scss +81 -175
  423. package/tabs/paginated-tab-header.d.ts +1 -0
  424. package/tabs/tab-body.component.d.ts +1 -1
  425. package/tabs/tab-content.directive.d.ts +1 -1
  426. package/tabs/tab-group.component.d.ts +5 -8
  427. package/tabs/tab-group.scss +10 -10
  428. package/tabs/tab-header.scss +2 -24
  429. package/tabs/tab-label-wrapper.directive.d.ts +1 -1
  430. package/tabs/tab-label.directive.d.ts +1 -1
  431. package/tabs/tab-nav-bar/tab-nav-bar.d.ts +4 -2
  432. package/tabs/tab-nav-bar/tab-nav-bar.scss +9 -16
  433. package/tabs/tab.component.d.ts +1 -1
  434. package/tabs/tabs-animations.d.ts +1 -1
  435. package/tabs/tabs.module.d.ts +1 -1
  436. package/tags/_tag-theme.scss +1 -25
  437. package/tags/tag-default-options.d.ts +4 -0
  438. package/tags/tag-input.d.ts +2 -2
  439. package/tags/tag-list.component.d.ts +3 -2
  440. package/tags/tag-list.scss +26 -16
  441. package/tags/tag.component.d.ts +6 -6
  442. package/textarea/textarea.component.d.ts +1 -1
  443. package/timepicker/timepicker.directive.d.ts +2 -2
  444. package/timezone/timezone-option.component.d.ts +1 -1
  445. package/timezone/timezone-select.component.d.ts +1 -1
  446. package/title/title.directive.d.ts +1 -1
  447. package/toast/_toast-theme.scss +21 -33
  448. package/toast/toast-animations.d.ts +1 -0
  449. package/toast/toast-container.component.d.ts +7 -3
  450. package/toast/toast-container.component.scss +2 -1
  451. package/toast/toast.component.d.ts +6 -1
  452. package/toast/toast.component.scss +41 -34
  453. package/toast/toast.module.d.ts +1 -1
  454. package/toast/toast.service.d.ts +2 -0
  455. package/toast/toast.type.d.ts +8 -5
  456. package/toggle/_toggle-theme.scss +9 -1
  457. package/toggle/toggle.component.d.ts +1 -1
  458. package/toggle/toggle.scss +5 -2
  459. package/tooltip/tooltip.animations.d.ts +1 -1
  460. package/tooltip/tooltip.component.d.ts +5 -5
  461. package/tree/_tree-theme.scss +46 -34
  462. package/tree/control/base-tree-control.d.ts +1 -1
  463. package/tree/control/tree-control.d.ts +1 -1
  464. package/tree/node.d.ts +1 -1
  465. package/tree/outlet.d.ts +1 -1
  466. package/tree/padding.directive.d.ts +1 -1
  467. package/tree/toggle.d.ts +3 -3
  468. package/tree/tree-base.d.ts +1 -1
  469. package/tree/tree-option.component.d.ts +1 -2
  470. package/tree/tree-option.scss +40 -27
  471. package/tree/tree-selection.component.d.ts +1 -1
  472. package/tree/tree.d.ts +1 -1
  473. package/tree/tree.module.d.ts +2 -1
  474. package/tree-select/_tree-select-theme.scss +13 -3
  475. package/tree-select/tree-select.component.d.ts +6 -4
  476. package/tree-select/tree-select.scss +5 -194
  477. package/core/styles/theming/_badges.scss +0 -57
  478. package/core/styles/theming/prebuilt/light-theme.scss +0 -20
  479. package/list/_list-base.scss +0 -54
@@ -1,9 +1,11 @@
1
- import { Attribute, Directive, ElementRef, Input, Optional, Self } from '@angular/core';
2
- import { NgControl } from '@angular/forms';
3
- import { END, C, V, X, A, Z, DELETE, BACKSPACE, TAB, ENTER, ESCAPE, ZERO, NINE, NUMPAD_ZERO, NUMPAD_NINE, NUMPAD_MINUS, DASH, FF_MINUS, LEFT_ARROW, RIGHT_ARROW, HOME, UP_ARROW, DOWN_ARROW, F1, F12 } from '@koobiq/cdk/keycodes';
4
- import { Subject } from 'rxjs';
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { Attribute, Directive, ElementRef, EventEmitter, forwardRef, Inject, Input, Optional, Renderer2 } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { END, C, V, X, A, Z, DELETE, BACKSPACE, TAB, ENTER, ESCAPE, NUMPAD_MINUS, DASH, FF_MINUS, LEFT_ARROW, RIGHT_ARROW, HOME, UP_ARROW, DOWN_ARROW, isFunctionKey, isNumberKey, isNumpadKey } from '@koobiq/cdk/keycodes';
5
+ import { KBQ_LOCALE_SERVICE, KbqLocaleService } from '@koobiq/components/core';
6
+ import { Subject, Subscription } from 'rxjs';
5
7
  import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/forms";
8
+ import * as i1 from "@koobiq/components/core";
7
9
  export const BIG_STEP = 10;
8
10
  export const SMALL_STEP = 1;
9
11
  export function normalizeSplitter(value) {
@@ -29,19 +31,76 @@ export function add(value1, value2) {
29
31
  const precision = Math.max(getPrecision(value1), getPrecision(value2));
30
32
  return (value1 * precision + value2 * precision) / precision;
31
33
  }
34
+ export const KBQ_NUMBER_INPUT_VALUE_ACCESSOR = {
35
+ provide: NG_VALUE_ACCESSOR,
36
+ useExisting: forwardRef(() => KbqNumberInput),
37
+ multi: true
38
+ };
32
39
  export class KbqNumberInput {
40
+ get value() {
41
+ return this._value;
42
+ }
43
+ set value(value) {
44
+ const oldValue = this.value;
45
+ this._value = value;
46
+ if (oldValue !== value) {
47
+ this.setViewValue(this.formatNumber(value));
48
+ this.valueChange.emit(value);
49
+ }
50
+ }
51
+ get disabled() {
52
+ return this._disabled;
53
+ }
54
+ set disabled(value) {
55
+ const newValue = coerceBooleanProperty(value);
56
+ const element = this.nativeElement;
57
+ if (this._disabled !== newValue) {
58
+ this._disabled = newValue;
59
+ this.disabledChange.emit(newValue);
60
+ }
61
+ // We need to null check the `blur` method, because it's undefined during SSR.
62
+ if (newValue && element.blur) {
63
+ // Normally, native input elements automatically blur if they turn disabled. This behavior
64
+ // is problematic, because it would mean that it triggers another change detection cycle,
65
+ // which then causes a changed after checked error if the input element was focused before.
66
+ element.blur();
67
+ }
68
+ }
33
69
  get nativeElement() {
34
70
  return this.elementRef.nativeElement;
35
71
  }
36
- constructor(elementRef, ngControl, step, bigStep, min, max) {
72
+ get viewValue() {
73
+ return this.nativeElement.value;
74
+ }
75
+ get ngControl() {
76
+ return this.control;
77
+ }
78
+ constructor(elementRef, renderer, step, bigStep, min, max, localeService) {
37
79
  this.elementRef = elementRef;
38
- this.ngControl = ngControl;
39
- this.focused = false;
80
+ this.renderer = renderer;
81
+ this.localeService = localeService;
82
+ /** Emits when the value changes (either due to user input or programmatic change). */
83
+ this.valueChange = new EventEmitter();
84
+ /** Emits when the disabled state has changed */
85
+ this.disabledChange = new EventEmitter();
40
86
  this.stateChanges = new Subject();
87
+ this.withThousandSeparator = true;
88
+ this._disabled = false;
89
+ this.focused = false;
90
+ this.localeSubscription = Subscription.EMPTY;
91
+ // tslint:disable-next-line:no-empty
92
+ this.onTouched = () => { };
93
+ // tslint:disable-next-line:no-empty
94
+ this.cvaOnChange = () => { };
95
+ this.updateLocaleParams = (id) => {
96
+ this.numberLocaleConfig = this.localeService.locales[id].input.number;
97
+ this.setViewValue(this.formatNumber(this.value));
98
+ };
41
99
  this.step = isDigit(step) ? parseFloat(step) : SMALL_STEP;
42
100
  this.bigStep = isDigit(bigStep) ? parseFloat(bigStep) : BIG_STEP;
43
101
  this.min = isDigit(min) ? parseFloat(min) : -Infinity;
44
102
  this.max = isDigit(max) ? parseFloat(max) : Infinity;
103
+ setTimeout(() => this.nativeElement.type = 'text', 0);
45
104
  if ('valueAsNumber' in this.nativeElement) {
46
105
  Object.defineProperty(Object.getPrototypeOf(this.nativeElement), 'valueAsNumber', {
47
106
  // tslint:disable-next-line:no-reserved-keywords
@@ -51,6 +110,38 @@ export class KbqNumberInput {
51
110
  }
52
111
  });
53
112
  }
113
+ this.allNumberLocaleConfigs = this.localeService.locales.items
114
+ .map((localeItem) => {
115
+ return { id: localeItem.id, config: this.localeService.locales[localeItem.id].input.number };
116
+ });
117
+ this.localeSubscription = this.localeService.changes.subscribe(this.updateLocaleParams);
118
+ }
119
+ ngOnDestroy() {
120
+ this.localeSubscription.unsubscribe();
121
+ this.valueChange.complete();
122
+ this.disabledChange.complete();
123
+ }
124
+ onContainerClick() {
125
+ this.focus();
126
+ }
127
+ focus() {
128
+ this.nativeElement.focus();
129
+ }
130
+ // Implemented as part of ControlValueAccessor.
131
+ writeValue(value) {
132
+ this.value = value;
133
+ }
134
+ // Implemented as part of ControlValueAccessor.
135
+ registerOnChange(fn) {
136
+ this.cvaOnChange = fn;
137
+ }
138
+ // Implemented as part of ControlValueAccessor.
139
+ registerOnTouched(fn) {
140
+ this.onTouched = fn;
141
+ }
142
+ // Implemented as part of ControlValueAccessor.
143
+ setDisabledState(isDisabled) {
144
+ this.disabled = isDisabled;
54
145
  }
55
146
  focusChanged(isFocused) {
56
147
  if (isFocused !== this.focused) {
@@ -66,32 +157,39 @@ export class KbqNumberInput {
66
157
  const isCtrlV = (e) => e.keyCode === V && (e.ctrlKey || e.metaKey);
67
158
  const isCtrlX = (e) => e.keyCode === X && (e.ctrlKey || e.metaKey);
68
159
  const isCtrlZ = (e) => e.keyCode === Z && (e.ctrlKey || e.metaKey);
69
- const isFKey = (e) => e.keyCode >= F1 && e.keyCode <= F12;
70
- const isNumber = (e) => (e.keyCode >= ZERO && e.keyCode <= NINE) ||
71
- (e.keyCode >= NUMPAD_ZERO && e.keyCode <= NUMPAD_NINE);
72
- const isPeriod = (e) => e.key === '.' || e.key === ',';
160
+ const isPeriod = (e) => this.numberLocaleConfig.groupSeparator.includes(e.key)
161
+ || [this.numberLocaleConfig.fractionSeparator, '.'].includes(e.key);
73
162
  const minuses = [NUMPAD_MINUS, DASH, FF_MINUS];
74
163
  const serviceKeys = [DELETE, BACKSPACE, TAB, ESCAPE, ENTER];
75
164
  const arrows = [LEFT_ARROW, RIGHT_ARROW];
76
165
  const allowedKeys = [HOME, END].concat(arrows).concat(serviceKeys).concat(minuses);
77
166
  if (minuses.includes(keyCode) &&
78
- (this.nativeElement.valueAsNumber || this.min >= 0 || this.nativeElement.validity?.badInput)) {
167
+ (this.viewValue.includes(event.key) || this.min >= 0)) {
79
168
  event.preventDefault();
80
169
  return;
81
170
  }
171
+ if (isPeriod(event)) {
172
+ if (event.key === this.numberLocaleConfig.fractionSeparator &&
173
+ this.viewValue.indexOf(this.numberLocaleConfig.fractionSeparator) !== -1) {
174
+ event.preventDefault();
175
+ return;
176
+ }
177
+ }
82
178
  if (allowedKeys.indexOf(keyCode) !== -1 ||
83
- isCtrlA(event) ||
84
- isCtrlC(event) ||
85
- isCtrlV(event) ||
86
- isCtrlX(event) ||
87
- isCtrlZ(event) ||
88
- isFKey(event) ||
89
- isPeriod(event)) {
179
+ [
180
+ isCtrlA,
181
+ isCtrlC,
182
+ isCtrlV,
183
+ isCtrlX,
184
+ isCtrlZ,
185
+ isFunctionKey,
186
+ isPeriod
187
+ ].some((fn) => fn(event))) {
90
188
  // let it happen, don't do anything
91
189
  return;
92
190
  }
93
191
  // Ensure that it is not a number and stop the keypress
94
- if (event.shiftKey || !isNumber(event)) {
192
+ if (event.shiftKey || !isNumberKey(event) && !isNumpadKey(event)) {
95
193
  event.preventDefault();
96
194
  // process steps
97
195
  const step = event.shiftKey ? this.bigStep : this.step;
@@ -103,48 +201,153 @@ export class KbqNumberInput {
103
201
  }
104
202
  }
105
203
  }
204
+ onInput(event) {
205
+ const currentValueLength = this.formatNumber(this.value)?.length || 0;
206
+ setTimeout(() => {
207
+ const fromPaste = event.inputType === 'insertFromPaste';
208
+ let formattedValue;
209
+ if (fromPaste) {
210
+ formattedValue = this.formatNumber(this.valueFromPaste);
211
+ }
212
+ else {
213
+ /*this.viewValue is raw and should be reformatted to localized number */
214
+ formattedValue = this.formatViewValue();
215
+ const offsetWhenSeparatorAdded = 2;
216
+ Promise.resolve().then(() => {
217
+ if (Math.abs(this.viewValue.length - currentValueLength) === offsetWhenSeparatorAdded) {
218
+ const cursorPosition = Math.max(0, (this.nativeElement.selectionStart || 0) + Math.sign(this.viewValue.length - currentValueLength));
219
+ this.renderer.setProperty(this.nativeElement, 'selectionStart', cursorPosition);
220
+ this.renderer.setProperty(this.nativeElement, 'selectionEnd', cursorPosition);
221
+ }
222
+ });
223
+ }
224
+ this.setViewValue(formattedValue, !fromPaste);
225
+ this.viewToModelUpdate(formattedValue);
226
+ });
227
+ }
106
228
  onPaste(event) {
107
- if (!isDigit(normalizeSplitter(event.clipboardData.getData('text')))) {
229
+ this.valueFromPaste = this.checkAndNormalizeLocalizedNumber(event.clipboardData?.getData('text'));
230
+ if (this.valueFromPaste === null) {
108
231
  event.preventDefault();
109
232
  }
110
233
  }
111
234
  stepUp(step) {
112
- this.elementRef.nativeElement.focus();
113
- const res = Math.max(Math.min(add(this.nativeElement.valueAsNumber || 0, step), this.max), this.min);
114
- this.nativeElement.value = res.toString();
115
- this.viewToModelUpdate(this.nativeElement.valueAsNumber);
235
+ this.nativeElement.focus();
236
+ const res = Math.max(Math.min(add(this.value || 0, step), this.max), this.min);
237
+ this.setViewValue(this.formatNumber(res));
238
+ this._value = res;
239
+ this.cvaOnChange(res);
240
+ this.valueChange.emit(res);
116
241
  }
117
242
  stepDown(step) {
118
- this.elementRef.nativeElement.focus();
119
- const res = Math.min(Math.max(add(this.nativeElement.valueAsNumber || 0, -step), this.min), this.max);
120
- this.nativeElement.value = res.toString();
121
- this.viewToModelUpdate(this.nativeElement.valueAsNumber);
243
+ this.nativeElement.focus();
244
+ const res = Math.min(Math.max(add(this.value || 0, -step), this.min), this.max);
245
+ this.setViewValue(this.formatNumber(res));
246
+ this._value = res;
247
+ this.cvaOnChange(res);
248
+ this.valueChange.emit(res);
122
249
  }
123
- viewToModelUpdate(value) {
124
- if (this.ngControl) {
125
- this.ngControl.control.setValue(value);
250
+ setViewValue(value, savePosition = false) {
251
+ const cursorPosition = this.nativeElement.selectionStart;
252
+ this.renderer.setProperty(this.nativeElement, 'value', value);
253
+ if (savePosition) {
254
+ this.renderer.setProperty(this.nativeElement, 'selectionStart', cursorPosition);
255
+ this.renderer.setProperty(this.nativeElement, 'selectionEnd', cursorPosition);
126
256
  }
127
257
  }
128
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: KbqNumberInput, deps: [{ token: i0.ElementRef }, { token: i1.NgControl, optional: true, self: true }, { token: 'step', attribute: true }, { token: 'big-step', attribute: true }, { token: 'min', attribute: true }, { token: 'max', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); }
129
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.5", type: KbqNumberInput, selector: "input[mcInput][type=\"number\"]", inputs: { bigStep: "bigStep", step: "step", min: "min", max: "max" }, host: { listeners: { "blur": "focusChanged(false)", "focus": "focusChanged(true)", "paste": "onPaste($event)", "keydown": "onKeyDown($event)" } }, exportAs: ["mcNumericalInput"], ngImport: i0 }); }
258
+ viewToModelUpdate(newValue) {
259
+ const normalizedValue = newValue === null ? null : +this.normalizeNumber(newValue);
260
+ if (normalizedValue !== this.value) {
261
+ this._value = normalizedValue;
262
+ this.cvaOnChange(normalizedValue);
263
+ this.valueChange.emit(normalizedValue);
264
+ }
265
+ this.ngControl?.updateValueAndValidity({ emitEvent: false });
266
+ }
267
+ formatViewValue() {
268
+ if (this.viewValue === null || this.viewValue === '' || Number.isNaN(+this.normalizeNumber(this.viewValue))) {
269
+ return null;
270
+ }
271
+ const separator = this.numberLocaleConfig.groupSeparator.includes(' ')
272
+ && this.numberLocaleConfig.fractionSeparator === ','
273
+ ? /[,.]/
274
+ : this.numberLocaleConfig.fractionSeparator;
275
+ const [intPart, fractionPart] = this.viewValue.split(separator)
276
+ .map((valuePart) => this.normalizeNumber(valuePart));
277
+ return this.createLocalizedNumberFromParts(+intPart, fractionPart);
278
+ }
279
+ formatNumber(value) {
280
+ if (value === null || value === undefined) {
281
+ return null;
282
+ }
283
+ const [intPart, fractionPart] = value.toString().split('.');
284
+ return this.createLocalizedNumberFromParts(+intPart, fractionPart);
285
+ }
286
+ createLocalizedNumberFromParts(intPart, fractionPart) {
287
+ const formatOptions = {
288
+ useGrouping: this.withThousandSeparator,
289
+ maximumFractionDigits: 20
290
+ };
291
+ if (this.withThousandSeparator && this.numberLocaleConfig.startFormattingFrom) {
292
+ formatOptions.useGrouping = intPart >= Math.pow(
293
+ // tslint:disable-next-line:no-magic-numbers
294
+ 10, this.numberLocaleConfig.startFormattingFrom);
295
+ }
296
+ const localeId = this.localeService.id === 'es-LA' ? 'ru-RU' : this.localeService.id;
297
+ const formatter = new Intl.NumberFormat(localeId, formatOptions);
298
+ const formattedFractionPart = fractionPart?.split('')
299
+ .map((numChar) => formatter.format(+numChar)).join('');
300
+ return formattedFractionPart === undefined
301
+ ? formatter.format(intPart)
302
+ : `${formatter.format(intPart)}${this.numberLocaleConfig.fractionSeparator}${formattedFractionPart}`;
303
+ }
304
+ /**
305
+ * Method that returns a string representation of a number without localized separators
306
+ */
307
+ normalizeNumber(value, customConfig) {
308
+ if (value === null || value === undefined) {
309
+ return '';
310
+ }
311
+ const { groupSeparator, fractionSeparator } = customConfig || this.numberLocaleConfig;
312
+ const groupSeparatorRegexp = new RegExp(`[${groupSeparator.join('')}]`, 'g');
313
+ const fractionSeparatorRegexp = new RegExp(`\\${fractionSeparator}`, 'g');
314
+ return value.toString()
315
+ .replace(groupSeparatorRegexp, '')
316
+ .replace(fractionSeparatorRegexp, '.');
317
+ }
318
+ checkAndNormalizeLocalizedNumber(num) {
319
+ if (num === null || num === undefined) {
320
+ return null;
321
+ }
322
+ /* if some locale input config satisfies pasted number, try to normalise with selected locale config */
323
+ let numberOutput = null;
324
+ for (const { config } of this.allNumberLocaleConfigs) {
325
+ const normalized = +this.normalizeNumber(num, config);
326
+ if (!Number.isNaN(normalized)) {
327
+ numberOutput = normalized;
328
+ break;
329
+ }
330
+ }
331
+ return numberOutput;
332
+ }
333
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: KbqNumberInput, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: 'step', attribute: true }, { token: 'big-step', attribute: true }, { token: 'min', attribute: true }, { token: 'max', attribute: true }, { token: KBQ_LOCALE_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
334
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.5", type: KbqNumberInput, selector: "input[kbqInput][type=\"number\"]", inputs: { bigStep: "bigStep", step: "step", min: "min", max: "max", withThousandSeparator: "withThousandSeparator", startFormattingFrom: "startFormattingFrom", value: "value", disabled: "disabled" }, host: { listeners: { "blur": "focusChanged(false)", "focus": "focusChanged(true)", "paste": "onPaste($event)", "keydown": "onKeyDown($event)", "input": "onInput($event)" } }, providers: [KBQ_NUMBER_INPUT_VALUE_ACCESSOR], exportAs: ["kbqNumericalInput"], ngImport: i0 }); }
130
335
  }
131
336
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: KbqNumberInput, decorators: [{
132
337
  type: Directive,
133
338
  args: [{
134
- selector: `input[mcInput][type="number"]`,
135
- exportAs: 'mcNumericalInput',
339
+ selector: `input[kbqInput][type="number"]`,
340
+ exportAs: 'kbqNumericalInput',
341
+ providers: [KBQ_NUMBER_INPUT_VALUE_ACCESSOR],
136
342
  host: {
137
343
  '(blur)': 'focusChanged(false)',
138
344
  '(focus)': 'focusChanged(true)',
139
345
  '(paste)': 'onPaste($event)',
140
- '(keydown)': 'onKeyDown($event)'
346
+ '(keydown)': 'onKeyDown($event)',
347
+ '(input)': 'onInput($event)'
141
348
  }
142
349
  }]
143
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
144
- type: Optional
145
- }, {
146
- type: Self
147
- }] }, { type: undefined, decorators: [{
350
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
148
351
  type: Attribute,
149
352
  args: ['step']
150
353
  }] }, { type: undefined, decorators: [{
@@ -156,6 +359,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
156
359
  }] }, { type: undefined, decorators: [{
157
360
  type: Attribute,
158
361
  args: ['max']
362
+ }] }, { type: i1.KbqLocaleService, decorators: [{
363
+ type: Optional
364
+ }, {
365
+ type: Inject,
366
+ args: [KBQ_LOCALE_SERVICE]
159
367
  }] }]; }, propDecorators: { bigStep: [{
160
368
  type: Input
161
369
  }], step: [{
@@ -164,5 +372,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
164
372
  type: Input
165
373
  }], max: [{
166
374
  type: Input
375
+ }], withThousandSeparator: [{
376
+ type: Input
377
+ }], startFormattingFrom: [{
378
+ type: Input
379
+ }], value: [{
380
+ type: Input
381
+ }], disabled: [{
382
+ type: Input
167
383
  }] } });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbnVtYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9pbnB1dC9pbnB1dC1udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxRQUFRLEVBQ1IsSUFBSSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUNqRCxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQ2hFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQ3pFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBRy9CLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDM0IsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQztBQUU1QixNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBYTtJQUMzQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFhO0lBQ2pDLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMs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QUFFLHFCQUFxQjt3QkFDL0IsU0FBUyxFQUFFLG9CQUFvQjt3QkFDL0IsU0FBUyxFQUFFLGlCQUFpQjt3QkFDNUIsV0FBVyxFQUFFLG1CQUFtQjtxQkFDbkM7aUJBQ0o7OzBCQTBCUSxRQUFROzswQkFBSSxJQUFJOzswQkFDaEIsU0FBUzsyQkFBQyxNQUFNOzswQkFDaEIsU0FBUzsyQkFBQyxVQUFVOzswQkFDcEIsU0FBUzsyQkFBQyxLQUFLOzswQkFDZixTQUFTOzJCQUFDLEtBQUs7NENBM0JwQixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLEdBQUc7c0JBREYsS0FBSztnQkFJTixHQUFHO3NCQURGLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEF0dHJpYnV0ZSxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBFTkQsIEMsIFYsIFgsIEEsIFosIERFTEVURSwgQkFDS1NQQUNFLCBUQUIsIEVOVEVSLFxuICAgIEVTQ0FQRSwgWkVSTywgTklORSwgTlVNUEFEX1pFUk8sIE5VTVBBRF9OSU5FLCBOVU1QQURfTUlOVVMsIERBU0gsXG4gICAgRkZfTUlOVVMsIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBIT01FLCBVUF9BUlJPVywgRE9XTl9BUlJPVywgRjEsIEYxMlxufSBmcm9tICdAa29vYmlxL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cblxuZXhwb3J0IGNvbnN0IEJJR19TVEVQID0gMTA7XG5leHBvcnQgY29uc3QgU01BTExfU1RFUCA9IDE7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTcGxpdHRlcih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS5yZXBsYWNlKC8sL2csICcuJykgOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmxvYXQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXi0/XFxkK1xcLlxcZCskLy50ZXN0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50KHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14tP1xcZCskLy50ZXN0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlnaXQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0Zsb2F0KHZhbHVlKSB8fCBpc0ludCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmVjaXNpb24odmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYXJyID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuXG4gICAgcmV0dXJuIGFyci5sZW5ndGggPT09IDFcbiAgICAgICAgPyAxXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1tYWdpYy1udW1iZXJzXG4gICAgICAgIDogIE1hdGgucG93KDEwLCBhcnJbMV0ubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZCh2YWx1ZTE6IG51bWJlciwgdmFsdWUyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHByZWNpc2lvbiA9IE1hdGgubWF4KGdldFByZWNpc2lvbih2YWx1ZTEpLCBnZXRQcmVjaXNpb24odmFsdWUyKSk7XG5cbiAgICByZXR1cm4gKHZhbHVlMSAqIHByZWNpc2lvbiArIHZhbHVlMiAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247XG59XG5cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6IGBpbnB1dFttY0lucHV0XVt0eXBlPVwibnVtYmVyXCJdYCxcbiAgICBleHBvcnRBczogJ21jTnVtZXJpY2FsSW5wdXQnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhibHVyKSc6ICdmb2N1c0NoYW5nZWQoZmFsc2UpJyxcbiAgICAgICAgJyhmb2N1cyknOiAnZm9jdXNDaGFuZ2VkKHRydWUpJyxcbiAgICAgICAgJyhwYXN0ZSknOiAnb25QYXN0ZSgkZXZlbnQpJyxcbiAgICAgICAgJyhrZXlkb3duKSc6ICdvbktleURvd24oJGV2ZW50KSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEticU51bWJlcklucHV0IHtcbiAgICBASW5wdXQoKVxuICAgIGJpZ1N0ZXA6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgc3RlcDogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBtaW46IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgbWF4OiBudW1iZXI7XG5cbiAgICB2YWx1ZTogYW55O1xuXG4gICAgZm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwcml2YXRlIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBAQXR0cmlidXRlKCdzdGVwJykgc3RlcDogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdiaWctc3RlcCcpIGJpZ1N0ZXA6IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbWluJykgbWluOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ21heCcpIG1heDogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc3RlcCA9IGlzRGlnaXQoc3RlcCkgPyBwYXJzZUZsb2F0KHN0ZXApIDogU01BTExfU1RFUDtcbiAgICAgICAgdGhpcy5iaWdTdGVwID0gaXNEaWdpdChiaWdTdGVwKSA/IHBhcnNlRmxvYXQoYmlnU3RlcCkgOiBCSUdfU1RFUDtcbiAgICAgICAgdGhpcy5taW4gPSBpc0RpZ2l0KG1pbikgPyBwYXJzZUZsb2F0KG1pbikgOiAtSW5maW5pdHk7XG4gICAgICAgIHRoaXMubWF4ID0gaXNEaWdpdChtYXgpID8gcGFyc2VGbG9hdChtYXgpIDogSW5maW5pdHk7XG5cbiAgICAgICAgaWYgKCd2YWx1ZUFzTnVtYmVyJyBpbiB0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5uYXRpdmVFbGVtZW50KSwgJ3ZhbHVlQXNOdW1iZXInLCB7XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXJlc2VydmVkLWtleXdvcmRzXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBwYXJzZUZsb2F0KG5vcm1hbGl6ZVNwbGl0dGVyKHRoaXMudmFsdWUpKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNOYU4ocmVzKSA/IG51bGwgOiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb2N1c0NoYW5nZWQoaXNGb2N1c2VkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpc0ZvY3VzZWQgIT09IHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gaXNGb2N1c2VkO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgICAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcblxuICAgICAgICBjb25zdCBpc0N0cmxBID0gKGUpID0+IGUua2V5Q29kZSA9PT0gQSAmJiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSk7XG4gICAgICAgIGNvbnN0IGlzQ3RybEMgPSAoZSkgPT4gZS5rZXlDb2RlID09PSBDICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KTtcbiAgICAgICAgY29uc3QgaXNDdHJsViA9IChlKSA9PiBlLmtleUNvZGUgPT09IFYgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpO1xuICAgICAgICBjb25zdCBpc0N0cmxYID0gKGUpID0+IGUua2V5Q29kZSA9PT0gWCAmJiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSk7XG4gICAgICAgIGNvbnN0IGlzQ3RybFogPSAoZSkgPT4gZS5rZXlDb2RlID09PSBaICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KTtcblxuICAgICAgICBjb25zdCBpc0ZLZXkgPSAoZSkgPT4gZS5rZXlDb2RlID49IEYxICYmIGUua2V5Q29kZSA8PSBGMTI7XG5cbiAgICAgICAgY29uc3QgaXNOdW1iZXIgPSAoZSkgPT4gKGUua2V5Q29kZSA+PSBaRVJPICYmIGUua2V5Q29kZSA8PSBOSU5FKSB8fFxuICAgICAgICAgICAgKGUua2V5Q29kZSA+PSBOVU1QQURfWkVSTyAmJiBlLmtleUNvZGUgPD0gTlVNUEFEX05JTkUpO1xuXG4gICAgICAgIGNvbnN0IGlzUGVyaW9kID0gKGUpID0+IGUua2V5ID09PSAnLicgfHwgZS5rZXkgPT09ICcsJztcblxuICAgICAgICBjb25zdCBtaW51c2VzID0gW05VTVBBRF9NSU5VUywgREFTSCwgRkZfTUlOVVNdO1xuICAgICAgICBjb25zdCBzZXJ2aWNlS2V5cyA9IFtERUxFVEUsIEJBQ0tTUEFDRSwgVEFCLCBFU0NBUEUsIEVOVEVSXTtcbiAgICAgICAgY29uc3QgYXJyb3dzID0gW0xFRlRfQVJST1csIFJJR0hUX0FSUk9XXTtcbiAgICAgICAgY29uc3QgYWxsb3dlZEtleXMgPSAgW0hPTUUsIEVORF0uY29uY2F0KGFycm93cykuY29uY2F0KHNlcnZpY2VLZXlzKS5jb25jYXQobWludXNlcyk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbWludXNlcy5pbmNsdWRlcyhrZXlDb2RlKSAmJlxuICAgICAgICAgICAgKHRoaXMubmF0aXZlRWxlbWVudC52YWx1ZUFzTnVtYmVyIHx8IHRoaXMubWluID49IDAgfHwgdGhpcy5uYXRpdmVFbGVtZW50LnZhbGlkaXR5Py5iYWRJbnB1dClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxsb3dlZEtleXMuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTEgfHxcbiAgICAgICAgICAgIGlzQ3RybEEoZXZlbnQpIHx8XG4gICAgICAgICAgICBpc0N0cmxDKGV2ZW50KSB8fFxuICAgICAgICAgICAgaXNDdHJsVihldmVudCkgfHxcbiAgICAgICAgICAgIGlzQ3RybFgoZXZlbnQpIHx8XG4gICAgICAgICAgICBpc0N0cmxaKGV2ZW50KSB8fFxuICAgICAgICAgICAgaXNGS2V5KGV2ZW50KSB8fFxuICAgICAgICAgICAgaXNQZXJpb2QoZXZlbnQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gbGV0IGl0IGhhcHBlbiwgZG9uJ3QgZG8gYW55dGhpbmdcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgdGhhdCBpdCBpcyBub3QgYSBudW1iZXIgYW5kIHN0b3AgdGhlIGtleXByZXNzXG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSB8fCAhaXNOdW1iZXIoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAvLyBwcm9jZXNzIHN0ZXBzXG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZXZlbnQuc2hpZnRLZXkgPyB0aGlzLmJpZ1N0ZXAgOiB0aGlzLnN0ZXA7XG5cbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBVUF9BUlJPVykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcFVwKHN0ZXApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0gRE9XTl9BUlJPVykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcERvd24oc3RlcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblBhc3RlKGV2ZW50KSB7XG4gICAgICAgIGlmICghaXNEaWdpdChub3JtYWxpemVTcGxpdHRlcihldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKSkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RlcFVwKHN0ZXA6IG51bWJlcikge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IE1hdGgubWF4KE1hdGgubWluKGFkZCh0aGlzLm5hdGl2ZUVsZW1lbnQudmFsdWVBc051bWJlciB8fCAwLCBzdGVwKSwgdGhpcy5tYXgpLCB0aGlzLm1pbik7XG5cbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnZhbHVlID0gcmVzLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgdGhpcy52aWV3VG9Nb2RlbFVwZGF0ZSh0aGlzLm5hdGl2ZUVsZW1lbnQudmFsdWVBc051bWJlcik7XG4gICAgfVxuXG4gICAgc3RlcERvd24oc3RlcDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gTWF0aC5taW4oTWF0aC5tYXgoYWRkKHRoaXMubmF0aXZlRWxlbWVudC52YWx1ZUFzTnVtYmVyIHx8IDAsIC1zdGVwKSwgdGhpcy5taW4pLCB0aGlzLm1heCk7XG5cbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnZhbHVlID0gcmVzLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgdGhpcy52aWV3VG9Nb2RlbFVwZGF0ZSh0aGlzLm5hdGl2ZUVsZW1lbnQudmFsdWVBc051bWJlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2aWV3VG9Nb2RlbFVwZGF0ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbCEuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbnVtYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9pbnB1dC9pbnB1dC1udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUNILFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUM1QyxLQUFLLEVBQWEsUUFBUSxFQUMxQixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF5QyxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFDSCxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQ2pELE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUMxQixRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQzVFLFdBQVcsRUFBRSxXQUFXLEVBQzNCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFL0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUc3QyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFFNUIsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWE7SUFDM0MsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFF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QkFDMUMsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsU0FBUyxFQUFFLENBQUMsK0JBQStCLENBQUM7b0JBQzVDLElBQUksRUFBRTt3QkFDRixRQUFRLEVBQUUscUJBQXFCO3dCQUMvQixTQUFTLEVBQUUsb0JBQW9CO3dCQUMvQixTQUFTLEVBQUUsaUJBQWlCO3dCQUM1QixXQUFXLEVBQUUsbUJBQW1CO3dCQUNoQyxTQUFTLEVBQUUsaUJBQWlCO3FCQUMvQjtpQkFDSjs7MEJBaUhRLFNBQVM7MkJBQUMsTUFBTTs7MEJBQ2hCLFNBQVM7MkJBQUMsVUFBVTs7MEJBQ3BCLFNBQVM7MkJBQUMsS0FBSzs7MEJBQ2YsU0FBUzsyQkFBQyxLQUFLOzswQkFDZixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjs0Q0E5RjFDLE9BQU87c0JBRE4sS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sR0FBRztzQkFERixLQUFLO2dCQUlOLEdBQUc7c0JBREYsS0FBSztnQkFJTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBT04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUlGLEtBQUs7c0JBRFIsS0FBSztnQkFtQkYsUUFBUTtzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gICAgQXR0cmlidXRlLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdCxcbiAgICBJbnB1dCwgT25EZXN0cm95LCBPcHRpb25hbCxcbiAgICBSZW5kZXJlcjJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgRU5ELCBDLCBWLCBYLCBBLCBaLCBERUxFVEUsIEJBQ0tTUEFDRSwgVEFCLCBFTlRFUixcbiAgICBFU0NBUEUsIE5VTVBBRF9NSU5VUywgREFTSCxcbiAgICBGRl9NSU5VUywgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIEhPTUUsIFVQX0FSUk9XLCBET1dOX0FSUk9XLCBpc0Z1bmN0aW9uS2V5LFxuICAgIGlzTnVtYmVyS2V5LCBpc051bXBhZEtleVxufSBmcm9tICdAa29vYmlxL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBLQlFfTE9DQUxFX1NFUlZJQ0UsIEticUxvY2FsZVNlcnZpY2UgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBLYnFGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cblxuZXhwb3J0IGNvbnN0IEJJR19TVEVQID0gMTA7XG5leHBvcnQgY29uc3QgU01BTExfU1RFUCA9IDE7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTcGxpdHRlcih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS5yZXBsYWNlKC8sL2csICcuJykgOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmxvYXQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXi0/XFxkK1xcLlxcZCskLy50ZXN0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50KHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14tP1xcZCskLy50ZXN0KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlnaXQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0Zsb2F0KHZhbHVlKSB8fCBpc0ludCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmVjaXNpb24odmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYXJyID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuXG4gICAgcmV0dXJuIGFyci5sZW5ndGggPT09IDFcbiAgICAgICAgPyAxXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1tYWdpYy1udW1iZXJzXG4gICAgICAgIDogIE1hdGgucG93KDEwLCBhcnJbMV0ubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZCh2YWx1ZTE6IG51bWJlciwgdmFsdWUyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHByZWNpc2lvbiA9IE1hdGgubWF4KGdldFByZWNpc2lvbih2YWx1ZTEpLCBnZXRQcmVjaXNpb24odmFsdWUyKSk7XG5cbiAgICByZXR1cm4gKHZhbHVlMSAqIHByZWNpc2lvbiArIHZhbHVlMiAqIHByZWNpc2lvbikgLyBwcmVjaXNpb247XG59XG5cbmV4cG9ydCBjb25zdCBLQlFfTlVNQkVSX0lOUFVUX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gS2JxTnVtYmVySW5wdXQpLFxuICAgIG11bHRpOiB0cnVlXG59O1xuXG5pbnRlcmZhY2UgTnVtYmVyTG9jYWxlQ29uZmlnIHtcbiAgICBncm91cFNlcGFyYXRvcjogc3RyaW5nW107XG4gICAgZnJhY3Rpb25TZXBhcmF0b3I6IHN0cmluZztcbiAgICBzdGFydEZvcm1hdHRpbmdGcm9tPzogbnVtYmVyO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogYGlucHV0W2ticUlucHV0XVt0eXBlPVwibnVtYmVyXCJdYCxcbiAgICBleHBvcnRBczogJ2ticU51bWVyaWNhbElucHV0JyxcbiAgICBwcm92aWRlcnM6IFtLQlFfTlVNQkVSX0lOUFVUX1ZBTFVFX0FDQ0VTU09SXSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoYmx1ciknOiAnZm9jdXNDaGFuZ2VkKGZhbHNlKScsXG4gICAgICAgICcoZm9jdXMpJzogJ2ZvY3VzQ2hhbmdlZCh0cnVlKScsXG4gICAgICAgICcocGFzdGUpJzogJ29uUGFzdGUoJGV2ZW50KScsXG4gICAgICAgICcoa2V5ZG93biknOiAnb25LZXlEb3duKCRldmVudCknLFxuICAgICAgICAnKGlucHV0KSc6ICdvbklucHV0KCRldmVudCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBLYnFOdW1iZXJJbnB1dCBpbXBsZW1lbnRzIEticUZvcm1GaWVsZENvbnRyb2w8YW55PiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIHZhbHVlIGNoYW5nZXMgKGVpdGhlciBkdWUgdG8gdXNlciBpbnB1dCBvciBwcm9ncmFtbWF0aWMgY2hhbmdlKS4gKi9cbiAgICB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSBkaXNhYmxlZCBzdGF0ZSBoYXMgY2hhbmdlZCAqL1xuICAgIGRpc2FibGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgZW1wdHk6IGJvb2xlYW47XG5cbiAgICByZXF1aXJlZDogYm9vbGVhbjtcblxuICAgIGVycm9yU3RhdGU6IGJvb2xlYW47XG5cbiAgICBjb250cm9sVHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpXG4gICAgYmlnU3RlcDogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBzdGVwOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIG1pbjogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBtYXg6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgd2l0aFRob3VzYW5kU2VwYXJhdG9yOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluY2x1ZGUgdGhvdXNhbmQgc2VwYXJhdG9yIGZyb20gY3VzdG9tIGluZGV4LiBGb3IgZXhhbXBsZSwgaXQgd2lsbCBiZSB1c2VmdWwgaW4gdGFibGVzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRGb3JtYXR0aW5nRnJvbT86IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHZhbHVlKCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAob2xkVmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdE51bWJlcih2YWx1ZSkpO1xuXG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFsdWU6IG51bWJlciB8IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVkICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRDaGFuZ2UuZW1pdChuZXdWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBuZWVkIHRvIG51bGwgY2hlY2sgdGhlIGBibHVyYCBtZXRob2QsIGJlY2F1c2UgaXQncyB1bmRlZmluZWQgZHVyaW5nIFNTUi5cbiAgICAgICAgaWYgKG5ld1ZhbHVlICYmIGVsZW1lbnQuYmx1cikge1xuICAgICAgICAgICAgLy8gTm9ybWFsbHksIG5hdGl2ZSBpbnB1dCBlbGVtZW50cyBhdXRvbWF0aWNhbGx5IGJsdXIgaWYgdGhleSB0dXJuIGRpc2FibGVkLiBUaGlzIGJlaGF2aW9yXG4gICAgICAgICAgICAvLyBpcyBwcm9ibGVtYXRpYywgYmVjYXVzZSBpdCB3b3VsZCBtZWFuIHRoYXQgaXQgdHJpZ2dlcnMgYW5vdGhlciBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlLFxuICAgICAgICAgICAgLy8gd2hpY2ggdGhlbiBjYXVzZXMgYSBjaGFuZ2VkIGFmdGVyIGNoZWNrZWQgZXJyb3IgaWYgdGhlIGlucHV0IGVsZW1lbnQgd2FzIGZvY3VzZWQgYmVmb3JlLlxuICAgICAgICAgICAgZWxlbWVudC5ibHVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgZm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgZ2V0IG5hdGl2ZUVsZW1lbnQoKTogSFRNTElucHV0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXQgdmlld1ZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IG5nQ29udHJvbCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGxOdW1iZXJMb2NhbGVDb25maWdzOiB7IGlkOiBzdHJpbmc7IGNvbmZpZzogTnVtYmVyTG9jYWxlQ29uZmlnIH1bXTtcblxuICAgIHByaXZhdGUgbnVtYmVyTG9jYWxlQ29uZmlnOiBOdW1iZXJMb2NhbGVDb25maWc7XG5cbiAgICBwcml2YXRlIHZhbHVlRnJvbVBhc3RlOiBudW1iZXIgfCBudWxsO1xuXG4gICAgcHJpdmF0ZSBsb2NhbGVTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3N0ZXAnKSBzdGVwOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2JpZy1zdGVwJykgYmlnU3RlcDogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdtaW4nKSBtaW46IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbWF4JykgbWF4OiBzdHJpbmcsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoS0JRX0xPQ0FMRV9TRVJWSUNFKSBwcml2YXRlIGxvY2FsZVNlcnZpY2U6IEticUxvY2FsZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5zdGVwID0gaXNEaWdpdChzdGVwKSA/IHBhcnNlRmxvYXQoc3RlcCkgOiBTTUFMTF9TVEVQO1xuICAgICAgICB0aGlzLmJpZ1N0ZXAgPSBpc0RpZ2l0KGJpZ1N0ZXApID8gcGFyc2VGbG9hdChiaWdTdGVwKSA6IEJJR19TVEVQO1xuICAgICAgICB0aGlzLm1pbiA9IGlzRGlnaXQobWluKSA/IHBhcnNlRmxvYXQobWluKSA6IC1JbmZpbml0eTtcbiAgICAgICAgdGhpcy5tYXggPSBpc0RpZ2l0KG1heCkgPyBwYXJzZUZsb2F0KG1heCkgOiBJbmZpbml0eTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF0aXZlRWxlbWVudC50eXBlID0gJ3RleHQnLCAwKTtcblxuICAgICAgICBpZiAoJ3ZhbHVlQXNOdW1iZXInIGluIHRoaXMubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLm5hdGl2ZUVsZW1lbnQpLCAndmFsdWVBc051bWJlcicsIHtcbiAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tcmVzZXJ2ZWQta2V5d29yZHNcbiAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHBhcnNlRmxvYXQobm9ybWFsaXplU3BsaXR0ZXIodGhpcy52YWx1ZSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc05hTihyZXMpID8gbnVsbCA6IHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWxsTnVtYmVyTG9jYWxlQ29uZmlncyA9IHRoaXMubG9jYWxlU2VydmljZS5sb2NhbGVzLml0ZW1zXG4gICAgICAgICAgICAubWFwKChsb2NhbGVJdGVtOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IGxvY2FsZUl0ZW0uaWQsIGNvbmZpZzogdGhpcy5sb2NhbGVTZXJ2aWNlLmxvY2FsZXNbbG9jYWxlSXRlbS5pZF0uaW5wdXQubnVtYmVyIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmxvY2FsZVN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxlU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLnVwZGF0ZUxvY2FsZVBhcmFtcyk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9jYWxlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlZENoYW5nZS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIG9uQ29udGFpbmVyQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3ZhT25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLy8gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgZm9jdXNDaGFuZ2VkKGlzRm9jdXNlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAoaXNGb2N1c2VkICE9PSB0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IGlzRm9jdXNlZDtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1lbXB0eVxuICAgIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkZXByZWNhdGlvblxuICAgICAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcblxuICAgICAgICBjb25zdCBpc0N0cmxBID0gKGUpID0+IGUua2V5Q29kZSA9PT0gQSAmJiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSk7XG4gICAgICAgIGNvbnN0IGlzQ3RybEMgPSAoZSkgPT4gZS5rZXlDb2RlID09PSBDICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KTtcbiAgICAgICAgY29uc3QgaXNDdHJsViA9IChlKSA9PiBlLmtleUNvZGUgPT09IFYgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpO1xuICAgICAgICBjb25zdCBpc0N0cmxYID0gKGUpID0+IGUua2V5Q29kZSA9PT0gWCAmJiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSk7XG4gICAgICAgIGNvbnN0IGlzQ3RybFogPSAoZSkgPT4gZS5rZXlDb2RlID09PSBaICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KTtcblxuICAgICAgICBjb25zdCBpc1BlcmlvZCA9IChlKSA9PiB0aGlzLm51bWJlckxvY2FsZUNvbmZpZy5ncm91cFNlcGFyYXRvci5pbmNsdWRlcyhlLmtleSlcbiAgICAgICAgICAgIHx8IFt0aGlzLm51bWJlckxvY2FsZUNvbmZpZy5mcmFjdGlvblNlcGFyYXRvciwgJy4nXS5pbmNsdWRlcyhlLmtleSk7XG5cbiAgICAgICAgY29uc3QgbWludXNlcyA9IFtOVU1QQURfTUlOVVMsIERBU0gsIEZGX01JTlVTXTtcbiAgICAgICAgY29uc3Qgc2VydmljZUtleXMgPSBbREVMRVRFLCBCQUNLU1BBQ0UsIFRBQiwgRVNDQVBFLCBFTlRFUl07XG4gICAgICAgIGNvbnN0IGFycm93cyA9IFtMRUZUX0FSUk9XLCBSSUdIVF9BUlJPV107XG4gICAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gIFtIT01FLCBFTkRdLmNvbmNhdChhcnJvd3MpLmNvbmNhdChzZXJ2aWNlS2V5cykuY29uY2F0KG1pbnVzZXMpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1pbnVzZXMuaW5jbHVkZXMoa2V5Q29kZSkgJiZcbiAgICAgICAgICAgICh0aGlzLnZpZXdWYWx1ZS5pbmNsdWRlcyhldmVudC5rZXkpIHx8IHRoaXMubWluID49IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUGVyaW9kKGV2ZW50KSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gdGhpcy5udW1iZXJMb2NhbGVDb25maWcuZnJhY3Rpb25TZXBhcmF0b3IgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdWYWx1ZS5pbmRleE9mKHRoaXMubnVtYmVyTG9jYWxlQ29uZmlnLmZyYWN0aW9uU2VwYXJhdG9yKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFsbG93ZWRLZXlzLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xIHx8XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgaXNDdHJsQSxcbiAgICAgICAgICAgICAgICBpc0N0cmxDLFxuICAgICAgICAgICAgICAgIGlzQ3RybFYsXG4gICAgICAgICAgICAgICAgaXNDdHJsWCxcbiAgICAgICAgICAgICAgICBpc0N0cmxaLFxuICAgICAgICAgICAgICAgIGlzRnVuY3Rpb25LZXksXG4gICAgICAgICAgICAgICAgaXNQZXJpb2RcbiAgICAgICAgICAgIF0uc29tZSgoZm4pID0+IGZuKGV2ZW50KSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBsZXQgaXQgaGFwcGVuLCBkb24ndCBkbyBhbnl0aGluZ1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSB0aGF0IGl0IGlzIG5vdCBhIG51bWJlciBhbmQgc3RvcCB0aGUga2V5cHJlc3NcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5IHx8ICFpc051bWJlcktleShldmVudCkgJiYgIWlzTnVtcGFkS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgLy8gcHJvY2VzcyBzdGVwc1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy5iaWdTdGVwIDogdGhpcy5zdGVwO1xuXG4gICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0gVVBfQVJST1cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBVcChzdGVwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGtleUNvZGUgPT09IERPV05fQVJST1cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBEb3duKHN0ZXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbnB1dChldmVudDogSW5wdXRFdmVudCkge1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVMZW5ndGggPSB0aGlzLmZvcm1hdE51bWJlcih0aGlzLnZhbHVlKT8ubGVuZ3RoIHx8IDA7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcm9tUGFzdGUgPSBldmVudC5pbnB1dFR5cGUgPT09ICdpbnNlcnRGcm9tUGFzdGUnO1xuICAgICAgICAgICAgbGV0IGZvcm1hdHRlZFZhbHVlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgaWYgKGZyb21QYXN0ZSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdGhpcy5mb3JtYXROdW1iZXIodGhpcy52YWx1ZUZyb21QYXN0ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8qdGhpcy52aWV3VmFsdWUgaXMgcmF3IGFuZCBzaG91bGQgYmUgcmVmb3JtYXR0ZWQgdG8gbG9jYWxpemVkIG51bWJlciAqL1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdGhpcy5mb3JtYXRWaWV3VmFsdWUoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldFdoZW5TZXBhcmF0b3JBZGRlZCA9IDI7XG5cbiAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMudmlld1ZhbHVlLmxlbmd0aCAtIGN1cnJlbnRWYWx1ZUxlbmd0aCkgPT09IG9mZnNldFdoZW5TZXBhcmF0b3JBZGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yUG9zaXRpb24gPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgfHwgMCkgKyBNYXRoLnNpZ24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld1ZhbHVlLmxlbmd0aCAtIGN1cnJlbnRWYWx1ZUxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAnc2VsZWN0aW9uU3RhcnQnLCBjdXJzb3JQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMubmF0aXZlRWxlbWVudCwgJ3NlbGVjdGlvbkVuZCcsIGN1cnNvclBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRWaWV3VmFsdWUoZm9ybWF0dGVkVmFsdWUsICFmcm9tUGFzdGUpO1xuICAgICAgICAgICAgdGhpcy52aWV3VG9Nb2RlbFVwZGF0ZShmb3JtYXR0ZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMudmFsdWVGcm9tUGFzdGUgPSB0aGlzLmNoZWNrQW5kTm9ybWFsaXplTG9jYWxpemVkTnVtYmVyKGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSk7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlRnJvbVBhc3RlID09PSBudWxsKSB7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IH1cbiAgICB9XG5cbiAgICBzdGVwVXAoc3RlcDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IE1hdGgubWF4KE1hdGgubWluKGFkZCh0aGlzLnZhbHVlIHx8IDAsIHN0ZXApLCB0aGlzLm1heCksIHRoaXMubWluKTtcblxuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdE51bWJlcihyZXMpKTtcblxuICAgICAgICB0aGlzLl92YWx1ZSA9IHJlcztcbiAgICAgICAgdGhpcy5jdmFPbkNoYW5nZShyZXMpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQocmVzKTtcbiAgICB9XG5cbiAgICBzdGVwRG93bihzdGVwOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gTWF0aC5taW4oTWF0aC5tYXgoYWRkKHRoaXMudmFsdWUgfHwgMCwgLXN0ZXApLCB0aGlzLm1pbiksIHRoaXMubWF4KTtcblxuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdE51bWJlcihyZXMpKTtcblxuICAgICAgICB0aGlzLl92YWx1ZSA9IHJlcztcbiAgICAgICAgdGhpcy5jdmFPbkNoYW5nZShyZXMpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQocmVzKTtcbiAgICB9XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHlcbiAgICBwcml2YXRlIGN2YU9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBzZXRWaWV3VmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwsIHNhdmVQb3NpdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHNhdmVQb3NpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdzZWxlY3Rpb25TdGFydCcsIGN1cnNvclBvc2l0aW9uKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAnc2VsZWN0aW9uRW5kJywgY3Vyc29yUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2aWV3VG9Nb2RlbFVwZGF0ZShuZXdWYWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBuZXdWYWx1ZSA9PT0gbnVsbCA/IG51bGwgOiArdGhpcy5ub3JtYWxpemVOdW1iZXIobmV3VmFsdWUpO1xuXG4gICAgICAgIGlmIChub3JtYWxpemVkVmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbm9ybWFsaXplZFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jdmFPbkNoYW5nZShub3JtYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5nQ29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRWaWV3VmFsdWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdWYWx1ZSA9PT0gbnVsbCB8fCB0aGlzLnZpZXdWYWx1ZSA9PT0gJycgfHwgTnVtYmVyLmlzTmFOKCt0aGlzLm5vcm1hbGl6ZU51bWJlcih0aGlzLnZpZXdWYWx1ZSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMubnVtYmVyTG9jYWxlQ29uZmlnLmdyb3VwU2VwYXJhdG9yLmluY2x1ZGVzKCcgJylcbiAgICAgICAgJiYgdGhpcy5udW1iZXJMb2NhbGVDb25maWcuZnJhY3Rpb25TZXBhcmF0b3IgPT09ICcsJ1xuICAgICAgICAgICAgPyAvWywuXS9cbiAgICAgICAgICAgIDogdGhpcy5udW1iZXJMb2NhbGVDb25maWcuZnJhY3Rpb25TZXBhcmF0b3I7XG5cbiAgICAgICAgY29uc3QgW2ludFBhcnQsIGZyYWN0aW9uUGFydF0gPSB0aGlzLnZpZXdWYWx1ZS5zcGxpdChzZXBhcmF0b3IpXG4gICAgICAgICAgICAubWFwKCh2YWx1ZVBhcnQpID0+IHRoaXMubm9ybWFsaXplTnVtYmVyKHZhbHVlUGFydCkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvY2FsaXplZE51bWJlckZyb21QYXJ0cygraW50UGFydCwgZnJhY3Rpb25QYXJ0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdE51bWJlcih2YWx1ZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAgIGNvbnN0IFtpbnRQYXJ0LCBmcmFjdGlvblBhcnRdID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvY2FsaXplZE51bWJlckZyb21QYXJ0cygraW50UGFydCwgZnJhY3Rpb25QYXJ0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUxvY2FsaXplZE51bWJlckZyb21QYXJ0cyhpbnRQYXJ0OiBudW1iZXIsIGZyYWN0aW9uUGFydD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB1c2VHcm91cGluZzogdGhpcy53aXRoVGhvdXNhbmRTZXBhcmF0b3IsXG4gICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIwXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMud2l0aFRob3VzYW5kU2VwYXJhdG9yICYmIHRoaXMubnVtYmVyTG9jYWxlQ29uZmlnLnN0YXJ0Rm9ybWF0dGluZ0Zyb20pIHtcbiAgICAgICAgICAgIGZvcm1hdE9wdGlvbnMudXNlR3JvdXBpbmcgPSBpbnRQYXJ0ID49IE1hdGgucG93KFxuICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICAgICAgMTAsIHRoaXMubnVtYmVyTG9jYWxlQ29uZmlnLnN0YXJ0Rm9ybWF0dGluZ0Zyb21cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhbGVJZCA9IHRoaXMubG9jYWxlU2VydmljZS5pZCA9PT0gJ2VzLUxBJyA/ICdydS1SVScgOiB0aGlzLmxvY2FsZVNlcnZpY2UuaWQ7XG5cbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZUlkLCBmb3JtYXRPcHRpb25zKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRnJhY3Rpb25QYXJ0ID0gZnJhY3Rpb25QYXJ0Py5zcGxpdCgnJylcbiAgICAgICAgICAgIC5tYXAoKG51bUNoYXIpID0+IGZvcm1hdHRlci5mb3JtYXQoK251bUNoYXIpKS5qb2luKCcnKTtcblxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkRnJhY3Rpb25QYXJ0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZm9ybWF0dGVyLmZvcm1hdChpbnRQYXJ0KVxuICAgICAgICAgICAgOiBgJHsgZm9ybWF0dGVyLmZvcm1hdChpbnRQYXJ0KSB9JHsgdGhpcy5udW1iZXJMb2NhbGVDb25maWcuZnJhY3Rpb25TZXBhcmF0b3IgfSR7IGZvcm1hdHRlZEZyYWN0aW9uUGFydCB9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbnVtYmVyIHdpdGhvdXQgbG9jYWxpemVkIHNlcGFyYXRvcnNcbiAgICAgKi9cbiAgICBwcml2YXRlIG5vcm1hbGl6ZU51bWJlcih2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgY3VzdG9tQ29uZmlnPzogTnVtYmVyTG9jYWxlQ29uZmlnKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHsgcmV0dXJuICcnOyB9XG5cbiAgICAgICAgY29uc3QgeyBncm91cFNlcGFyYXRvciwgZnJhY3Rpb25TZXBhcmF0b3IgfSA9IGN1c3RvbUNvbmZpZyB8fCB0aGlzLm51bWJlckxvY2FsZUNvbmZpZztcbiAgICAgICAgY29uc3QgZ3JvdXBTZXBhcmF0b3JSZWdleHAgPSBuZXcgUmVnRXhwKGBbJHtncm91cFNlcGFyYXRvci5qb2luKCcnKX1dYCwgJ2cnKTtcbiAgICAgICAgY29uc3QgZnJhY3Rpb25TZXBhcmF0b3JSZWdleHAgPSBuZXcgUmVnRXhwKGBcXFxcJHtmcmFjdGlvblNlcGFyYXRvcn1gLCAnZycpO1xuXG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAucmVwbGFjZShncm91cFNlcGFyYXRvclJlZ2V4cCwgJycpXG4gICAgICAgICAgICAucmVwbGFjZShmcmFjdGlvblNlcGFyYXRvclJlZ2V4cCwgJy4nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxvY2FsZVBhcmFtcyA9IChpZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubnVtYmVyTG9jYWxlQ29uZmlnID0gdGhpcy5sb2NhbGVTZXJ2aWNlLmxvY2FsZXNbaWRdLmlucHV0Lm51bWJlcjtcblxuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdE51bWJlcih0aGlzLnZhbHVlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0FuZE5vcm1hbGl6ZUxvY2FsaXplZE51bWJlcihudW06IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgaWYgKG51bSA9PT0gbnVsbCB8fCBudW0gPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAgIC8qIGlmIHNvbWUgbG9jYWxlIGlucHV0IGNvbmZpZyBzYXRpc2ZpZXMgcGFzdGVkIG51bWJlciwgdHJ5IHRvIG5vcm1hbGlzZSB3aXRoIHNlbGVjdGVkIGxvY2FsZSBjb25maWcgKi9cbiAgICAgICAgbGV0IG51bWJlck91dHB1dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgeyBjb25maWcgfSBvZiB0aGlzLmFsbE51bWJlckxvY2FsZUNvbmZpZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSArdGhpcy5ub3JtYWxpemVOdW1iZXIobnVtLCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obm9ybWFsaXplZCkpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJPdXRwdXQgPSBub3JtYWxpemVkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bWJlck91dHB1dDtcbiAgICB9XG59XG4iXX0=
@@ -176,15 +176,15 @@ export class KbqInputPassword extends KbqInputMixinBase {
176
176
  return this.elementRef.nativeElement.validity?.badInput;
177
177
  }
178
178
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: KbqInputPassword, deps: [{ token: i0.ElementRef }, { token: i1.NgControl, optional: true, self: true }, { token: i1.NgForm, optional: true }, { token: i1.FormGroupDirective, optional: true }, { token: i2.ErrorStateMatcher }, { token: KBQ_INPUT_VALUE_ACCESSOR, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
179
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.5", type: KbqInputPassword, selector: "input[mcInputPassword]", inputs: { errorStateMatcher: "errorStateMatcher", placeholder: "placeholder", disabled: "disabled", id: "id", required: "required", value: "value" }, host: { listeners: { "blur": "onBlur()", "focus": "focusChanged(true)", "input": "onInput()" }, properties: { "attr.id": "id", "attr.type": "elementType", "attr.placeholder": "placeholder", "attr.disabled": "disabled || null", "required": "required" }, classAttribute: "kbq-input kbq-input-password" }, providers: [{
179
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.5", type: KbqInputPassword, selector: "input[kbqInputPassword]", inputs: { errorStateMatcher: "errorStateMatcher", placeholder: "placeholder", disabled: "disabled", id: "id", required: "required", value: "value" }, host: { listeners: { "blur": "onBlur()", "focus": "focusChanged(true)", "input": "onInput()" }, properties: { "attr.id": "id", "attr.type": "elementType", "attr.placeholder": "placeholder", "attr.disabled": "disabled || null", "required": "required" }, classAttribute: "kbq-input kbq-input-password" }, providers: [{
180
180
  provide: KbqFormFieldControl, useExisting: KbqInputPassword
181
- }], exportAs: ["mcInputPassword"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
181
+ }], exportAs: ["kbqInputPassword"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
182
182
  }
183
183
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: KbqInputPassword, decorators: [{
184
184
  type: Directive,
185
185
  args: [{
186
- selector: `input[mcInputPassword]`,
187
- exportAs: 'mcInputPassword',
186
+ selector: `input[kbqInputPassword]`,
187
+ exportAs: 'kbqInputPassword',
188
188
  host: {
189
189
  class: 'kbq-input kbq-input-password',
190
190
  // Native input properties that are overwritten by Angular inputs need to be synced with
@@ -230,4 +230,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
230
230
  }], value: [{
231
231
  type: Input
232
232
  }] } });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcGFzc3dvcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2lucHV0L2lucHV0LXBhc3N3b3JkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDSCxTQUFTLEVBRVQsVUFBVSxFQUVWLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLElBQUksRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUdsRSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUF1QnJCLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUFxQ25EOzs7T0FHRztJQUNILElBQ0ksUUFBUTtRQUNSLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7U0FDbEM7UUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5Qyw2RUFBNkU7UUFD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RSxtQkFBbUIsRUFBRSxXQUFXLGtCQUFrQjt5QkFDOUQsQ0FBQztpQkFDTDs7MEJBOEhRLFFBQVE7OzBCQUFJLElBQUk7OzBCQUNoQixRQUFROzswQkFDUixRQUFROzswQkFFUixRQUFROzswQkFBSSxJQUFJOzswQkFBSSxNQUFNOzJCQUFDLHdCQUF3Qjs0Q0E3SC9DLGlCQUFpQjtzQkFBekIsS0FBSztnQkE0QkcsV0FBVztzQkFBbkIsS0FBSztnQkFVRixRQUFRO3NCQURYLEtBQUs7Z0JBMkJGLEVBQUU7c0JBREwsS0FBSztnQkFnQkYsUUFBUTtzQkFEWCxLQUFLO2dCQWtCRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwRGlyZWN0aXZlLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENhblVwZGF0ZUVycm9yU3RhdGUsIEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgS2JxRm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgS2JxSW5wdXRNaXhpbkJhc2UgfSBmcm9tICcuL2lucHV0JztcbmltcG9ydCB7IEtCUV9JTlBVVF9WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJy4vaW5wdXQtdmFsdWUtYWNjZXNzb3InO1xuXG5cbmxldCBuZXh0VW5pcXVlSWQgPSAwO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogYGlucHV0W21jSW5wdXRQYXNzd29yZF1gLFxuICAgIGV4cG9ydEFzOiAnbWNJbnB1dFBhc3N3b3JkJyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLWlucHV0IGticS1pbnB1dC1wYXNzd29yZCcsXG4gICAgICAgIC8vIE5hdGl2ZSBpbnB1dCBwcm9wZXJ0aWVzIHRoYXQgYXJlIG92ZXJ3cml0dGVuIGJ5IEFuZ3VsYXIgaW5wdXRzIG5lZWQgdG8gYmUgc3luY2VkIHdpdGhcbiAgICAgICAgLy8gdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50LiBPdGhlcndpc2UgcHJvcGVydHkgYmluZGluZ3MgZm9yIHRob3NlIGRvbid0IHdvcmsuXG4gICAgICAgICdbYXR0ci5pZF0nOiAnaWQnLFxuICAgICAgICAnW2F0dHIudHlwZV0nOiAnZWxlbWVudFR5cGUnLFxuICAgICAgICAnW2F0dHIucGxhY2Vob2xkZXJdJzogJ3BsYWNlaG9sZGVyJyxcbiAgICAgICAgJ1thdHRyLmRpc2FibGVkXSc6ICdkaXNhYmxlZCB8fCBudWxsJyxcbiAgICAgICAgJ1tyZXF1aXJlZF0nOiAncmVxdWlyZWQnLFxuXG4gICAgICAgICcoYmx1ciknOiAnb25CbHVyKCknLFxuICAgICAgICAnKGZvY3VzKSc6ICdmb2N1c0NoYW5nZWQodHJ1ZSknLFxuICAgICAgICAnKGlucHV0KSc6ICdvbklucHV0KCknXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFt7XG4gICAgICAgIHByb3ZpZGU6IEticUZvcm1GaWVsZENvbnRyb2wsIHVzZUV4aXN0aW5nOiBLYnFJbnB1dFBhc3N3b3JkXG4gICAgfV1cbn0pXG5leHBvcnQgY2xhc3MgS2JxSW5wdXRQYXNzd29yZCBleHRlbmRzIEticUlucHV0TWl4aW5CYXNlIGltcGxlbWVudHMgS2JxRm9ybUZpZWxkQ29udHJvbDxhbnk+LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgRG9DaGVjayxcbiAgICBDYW5VcGRhdGVFcnJvclN0YXRlLCBPbkNoYW5nZXMge1xuXG4gICAgLyoqIEFuIG9iamVjdCB1c2VkIHRvIGNvbnRyb2wgd2hlbiBlcnJvciBtZXNzYWdlcyBhcmUgc2hvd24uICovXG4gICAgQElucHV0KCkgZXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyO1xuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBLYnFGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIEticUZvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICAgIHJlYWRvbmx5IGNoZWNrUnVsZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIEticUZvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnRyb2xUeXBlOiBzdHJpbmcgPSAnaW5wdXQtcGFzc3dvcmQnO1xuXG4gICAgZWxlbWVudFR5cGU6IHN0cmluZyA9ICdwYXNzd29yZCc7XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIEticUZvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgdWlkID0gYGticS1pbnB1dC0ke25leHRVbmlxdWVJZCsrfWA7XG4gICAgcHJvdGVjdGVkIHByZXZpb3VzTmF0aXZlVmFsdWU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbD8uZGlzYWJsZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5nQ29udHJvbC5kaXNhYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXG4gICAgICAgIC8vIEJyb3dzZXJzIG1heSBub3QgZmlyZSB0aGUgYmx1ciBldmVudCBpZiB0aGUgaW5wdXQgaXMgZGlzYWJsZWQgdG9vIHF1aWNrbHkuXG4gICAgICAgIC8vIFJlc2V0IGZyb20gaGVyZSB0byBlbnN1cmUgdGhhdCB0aGUgZWxlbWVudCBkb2Vzbid0IGJlY29tZSBzdHVjay5cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH1cblxuICAgIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2lkID0gdmFsdWUgfHwgdGhpcy51aWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaWQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgICB9XG5cbiAgICBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvLyB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50eXBlID0gdGhpcy5fdHlwZTtcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZTtcbiAgICB9XG5cbiAgICBzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMudmFsdWUpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQobnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBLYnFGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgJiYgIXRoaXMuaXNCYWRJbnB1dCgpO1xuICAgIH1cblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogb3J0aG9kb3gtZ2V0dGVyLWFuZC1zZXR0ZXJcbiAgICBwcml2YXRlIF9pbnB1dFZhbHVlQWNjZXNzb3I6IHsgdmFsdWU6IGFueSB9O1xuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuYW1pbmctY29udmVudGlvblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcGFyZW50Rm9ybTogTmdGb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSBwYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICAgICAgZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBASW5qZWN0KEtCUV9JTlBVVF9WQUxVRV9BQ0NFU1NPUikgaW5wdXRWYWx1ZUFjY2Vzc29yOiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyLCBwYXJlbnRGb3JtLCBwYXJlbnRGb3JtR3JvdXAsIG5nQ29udHJvbCk7XG5cbiAgICAgICAgLy8gSWYgbm8gaW5wdXQgdmFsdWUgYWNjZXNzb3Igd2FzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCB1c2UgdGhlIGVsZW1lbnQgYXMgdGhlIGlucHV0IHZhbHVlXG4gICAgICAgIC8vIGFjY2Vzc29yLlxuICAgICAgICB0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IgPSBpbnB1dFZhbHVlQWNjZXNzb3IgfHwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5wcmV2aW91c05hdGl2ZVZhbHVlID0gdGhpcy52YWx1ZTtcblxuICAgICAgICAvLyBGb3JjZSBzZXR0ZXIgdG8gYmUgY2FsbGVkIGluIGNhc2UgaWQgd2FzIG5vdCBzcGVjaWZpZWQuXG4gICAgICAgIHRoaXMuaWQgPSB0aGlzLmlkO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KG51bGwpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlLWV2YWx1YXRlIHRoaXMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSwgYmVjYXVzZSB0aGVyZSBhcmUgc29tZVxuICAgICAgICAgICAgLy8gZXJyb3IgdHJpZ2dlcnMgdGhhdCB3ZSBjYW4ndCBzdWJzY3JpYmUgdG8gKGUuZy4gcGFyZW50IGZvcm0gc3VibWlzc2lvbnMpLiBUaGlzIG1lYW5zXG4gICAgICAgICAgICAvLyB0aGF0IHdoYXRldmVyIGxvZ2ljIGlzIGluIGhlcmUgaGFzIHRvIGJlIHN1cGVyIGxlYW4gb3Igd2UgcmlzayBkZXN0cm95aW5nIHRoZSBwZXJmb3JtYW5jZS5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byBkaXJ0eS1jaGVjayB0aGUgbmF0aXZlIGVsZW1lbnQncyB2YWx1ZSwgYmVjYXVzZSB0aGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZVxuICAgICAgICAvLyB3ZSB3b24ndCBiZSBub3RpZmllZCB3aGVuIGl0IGNoYW5nZXMgKGUuZy4gdGhlIGNvbnN1bWVyIGlzbid0IHVzaW5nIGZvcm1zIG9yIHRoZXkncmVcbiAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIHVzaW5nIGBlbWl0RXZlbnQ6IGZhbHNlYCkuXG4gICAgICAgIHRoaXMuZGlydHlDaGVja05hdGl2ZVZhbHVlKCk7XG4gICAgfVxuXG4gICAgY2hlY2tSdWxlcygpIHtcbiAgICAgICAgdGhpcy5jaGVja1J1bGUubmV4dCgpO1xuICAgIH1cblxuICAgIHRvZ2dsZVR5cGUoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFR5cGUgPSB0aGlzLmVsZW1lbnRUeXBlID09PSAncGFzc3dvcmQnID8gJ3RleHQnIDogJ3Bhc3N3b3JkJztcbiAgICB9XG5cbiAgICAvKiogRm9jdXNlcyB0aGUgaW5wdXQuICovXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5nQ29udHJvbC5jb250cm9sO1xuXG4gICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgKGNvbnRyb2wuc3RhdHVzQ2hhbmdlcyBhcyBFdmVudEVtaXR0ZXI8c3RyaW5nPikuZW1pdChjb250cm9sLnN0YXR1cyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzQ2hhbmdlZChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIENhbGxiYWNrIGZvciB0aGUgY2FzZXMgd2hlcmUgdGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIGlucHV0IGNoYW5nZXMuICovXG4gICAgZm9jdXNDaGFuZ2VkKGlzRm9jdXNlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAoaXNGb2N1c2VkID09PSB0aGlzLmZvY3VzZWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdGhpcy5mb2N1c2VkID0gaXNGb2N1c2VkO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHsgZm9jdXNlZDogdGhpcy5mb2N1c2VkIH0pO1xuICAgIH1cblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBub29wIGZ1bmN0aW9uIGFuZCBpcyB1c2VkIHRvIGxldCBBbmd1bGFyIGtub3cgd2hlbmV2ZXIgdGhlIHZhbHVlIGNoYW5nZXMuXG4gICAgICAgIC8vIEFuZ3VsYXIgd2lsbCBydW4gYSBuZXcgY2hhbmdlIGRldGVjdGlvbiBlYWNoIHRpbWUgdGhlIGBpbnB1dGAgZXZlbnQgaGFzIGJlZW4gZGlzcGF0Y2hlZC5cbiAgICAgICAgLy8gSXQncyBuZWNlc3NhcnkgdGhhdCBBbmd1bGFyIHJlY29nbml6ZXMgdGhlIHZhbHVlIGNoYW5nZSwgYmVjYXVzZSB3aGVuIGZsb2F0aW5nTGFiZWxcbiAgICAgICAgLy8gaXMgc2V0IHRvIGZhbHNlIGFuZCBBbmd1bGFyIGZvcm1zIGFyZW4ndCB1c2VkLCB0aGUgcGxhY2Vob2xkZXIgd29uJ3QgcmVjb2duaXplIHRoZVxuICAgICAgICAvLyB2YWx1ZSBjaGFuZ2VzIGFuZCB3aWxsIG5vdCBkaXNhcHBlYXIuXG4gICAgICAgIC8vIExpc3RlbmluZyB0byB0aGUgaW5wdXQgZXZlbnQgd291bGRuJ3QgYmUgbmVjZXNzYXJ5IHdoZW4gdGhlIGlucHV0IGlzIHVzaW5nIHRoZVxuICAgICAgICAvLyBGb3Jtc01vZHVsZSBvciBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBiZWNhdXNlIEFuZ3VsYXIgZm9ybXMgYWxzbyBsaXN0ZW5zIHRvIGlucHV0IGV2ZW50cy5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIEticUZvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIG9uQ29udGFpbmVyQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogRG9lcyBzb21lIG1hbnVhbCBkaXJ0eSBjaGVja2luZyBvbiB0aGUgbmF0aXZlIGlucHV0IGB2YWx1ZWAgcHJvcGVydHkuICovXG4gICAgcHJvdGVjdGVkIGRpcnR5Q2hlY2tOYXRpdmVWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJldmlvdXNOYXRpdmVWYWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c05hdGl2ZVZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGlucHV0IGlzIGludmFsaWQgYmFzZWQgb24gdGhlIG5hdGl2ZSB2YWxpZGF0aW9uLiAqL1xuICAgIHByb3RlY3RlZCBpc0JhZElucHV0KCkge1xuICAgICAgICAvLyBUaGUgYHZhbGlkaXR5YCBwcm9wZXJ0eSB3b24ndCBiZSBwcmVzZW50IG9uIHBsYXRmb3JtLXNlcnZlci5cbiAgICAgICAgcmV0dXJuICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWxpZGl0eT8uYmFkSW5wdXQ7XG4gICAgfVxufVxuIl19
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcGFzc3dvcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2lucHV0L2lucHV0LXBhc3N3b3JkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFDSCxTQUFTLEVBRVQsVUFBVSxFQUVWLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLElBQUksRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUdsRSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUF1QnJCLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUFxQ25EOzs7T0FHRztJQUNILElBQ0ksUUFBUTtRQUNSLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEtBQUssSUFBSSxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7U0FDbEM7UUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5Qyw2RUFBNkU7UUFD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RSxtQkFBbUIsRUFBRSxXQUFXLGtCQUFrQjt5QkFDOUQsQ0FBQztpQkFDTDs7MEJBOEhRLFFBQVE7OzBCQUFJLElBQUk7OzBCQUNoQixRQUFROzswQkFDUixRQUFROzswQkFFUixRQUFROzswQkFBSSxJQUFJOzswQkFBSSxNQUFNOzJCQUFDLHdCQUF3Qjs0Q0E3SC9DLGlCQUFpQjtzQkFBekIsS0FBSztnQkE0QkcsV0FBVztzQkFBbkIsS0FBSztnQkFVRixRQUFRO3NCQURYLEtBQUs7Z0JBMkJGLEVBQUU7c0JBREwsS0FBSztnQkFnQkYsUUFBUTtzQkFEWCxLQUFLO2dCQWtCRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwRGlyZWN0aXZlLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENhblVwZGF0ZUVycm9yU3RhdGUsIEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgS2JxRm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgS2JxSW5wdXRNaXhpbkJhc2UgfSBmcm9tICcuL2lucHV0JztcbmltcG9ydCB7IEtCUV9JTlBVVF9WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJy4vaW5wdXQtdmFsdWUtYWNjZXNzb3InO1xuXG5cbmxldCBuZXh0VW5pcXVlSWQgPSAwO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogYGlucHV0W2ticUlucHV0UGFzc3dvcmRdYCxcbiAgICBleHBvcnRBczogJ2ticUlucHV0UGFzc3dvcmQnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdrYnEtaW5wdXQga2JxLWlucHV0LXBhc3N3b3JkJyxcbiAgICAgICAgLy8gTmF0aXZlIGlucHV0IHByb3BlcnRpZXMgdGhhdCBhcmUgb3ZlcndyaXR0ZW4gYnkgQW5ndWxhciBpbnB1dHMgbmVlZCB0byBiZSBzeW5jZWQgd2l0aFxuICAgICAgICAvLyB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQuIE90aGVyd2lzZSBwcm9wZXJ0eSBiaW5kaW5ncyBmb3IgdGhvc2UgZG9uJ3Qgd29yay5cbiAgICAgICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgICAgICdbYXR0ci50eXBlXSc6ICdlbGVtZW50VHlwZScsXG4gICAgICAgICdbYXR0ci5wbGFjZWhvbGRlcl0nOiAncGxhY2Vob2xkZXInLFxuICAgICAgICAnW2F0dHIuZGlzYWJsZWRdJzogJ2Rpc2FibGVkIHx8IG51bGwnLFxuICAgICAgICAnW3JlcXVpcmVkXSc6ICdyZXF1aXJlZCcsXG5cbiAgICAgICAgJyhibHVyKSc6ICdvbkJsdXIoKScsXG4gICAgICAgICcoZm9jdXMpJzogJ2ZvY3VzQ2hhbmdlZCh0cnVlKScsXG4gICAgICAgICcoaW5wdXQpJzogJ29uSW5wdXQoKSdcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW3tcbiAgICAgICAgcHJvdmlkZTogS2JxRm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IEticUlucHV0UGFzc3dvcmRcbiAgICB9XVxufSlcbmV4cG9ydCBjbGFzcyBLYnFJbnB1dFBhc3N3b3JkIGV4dGVuZHMgS2JxSW5wdXRNaXhpbkJhc2UgaW1wbGVtZW50cyBLYnFGb3JtRmllbGRDb250cm9sPGFueT4sIE9uQ2hhbmdlcywgT25EZXN0cm95LCBEb0NoZWNrLFxuICAgIENhblVwZGF0ZUVycm9yU3RhdGUsIE9uQ2hhbmdlcyB7XG5cbiAgICAvKiogQW4gb2JqZWN0IHVzZWQgdG8gY29udHJvbCB3aGVuIGVycm9yIG1lc3NhZ2VzIGFyZSBzaG93bi4gKi9cbiAgICBASW5wdXQoKSBlcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXI7XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIEticUZvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIGZvY3VzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gICAgcmVhZG9ubHkgY2hlY2tSdWxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgY29udHJvbFR5cGU6IHN0cmluZyA9ICdpbnB1dC1wYXNzd29yZCc7XG5cbiAgICBlbGVtZW50VHlwZTogc3RyaW5nID0gJ3Bhc3N3b3JkJztcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIHByb3RlY3RlZCB1aWQgPSBga2JxLWlucHV0LSR7bmV4dFVuaXF1ZUlkKyt9YDtcbiAgICBwcm90ZWN0ZWQgcHJldmlvdXNOYXRpdmVWYWx1ZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBLYnFGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sPy5kaXNhYmxlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdDb250cm9sLmRpc2FibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gQnJvd3NlcnMgbWF5IG5vdCBmaXJlIHRoZSBibHVyIGV2ZW50IGlmIHRoZSBpbnB1dCBpcyBkaXNhYmxlZCB0b28gcXVpY2tseS5cbiAgICAgICAgLy8gUmVzZXQgZnJvbSBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSBlbGVtZW50IGRvZXNuJ3QgYmVjb21lIHN0dWNrLlxuICAgICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBLYnFGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBpZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5faWQ7XG4gICAgfVxuXG4gICAgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5faWQgPSB2YWx1ZSB8fCB0aGlzLnVpZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pZDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBLYnFGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICAgIH1cblxuICAgIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8vIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnR5cGUgPSB0aGlzLl90eXBlO1xuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBLYnFGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlO1xuICAgIH1cblxuICAgIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy52YWx1ZSkgeyByZXR1cm47IH1cblxuICAgICAgICB0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChudWxsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIEticUZvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSAmJiAhdGhpcy5pc0JhZElucHV0KCk7XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBvcnRob2RveC1nZXR0ZXItYW5kLXNldHRlclxuICAgIHByaXZhdGUgX2lucHV0VmFsdWVBY2Nlc3NvcjogeyB2YWx1ZTogYW55IH07XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5hbWluZy1jb252ZW50aW9uXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBAT3B0aW9uYWwoKSBwYXJlbnRGb3JtOiBOZ0Zvcm0sXG4gICAgICAgIEBPcHRpb25hbCgpIHBhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgICAgICBkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIEBJbmplY3QoS0JRX0lOUFVUX1ZBTFVFX0FDQ0VTU09SKSBpbnB1dFZhbHVlQWNjZXNzb3I6IGFueVxuICAgICkge1xuICAgICAgICBzdXBlcihkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIsIHBhcmVudEZvcm0sIHBhcmVudEZvcm1Hcm91cCwgbmdDb250cm9sKTtcblxuICAgICAgICAvLyBJZiBubyBpbnB1dCB2YWx1ZSBhY2Nlc3NvciB3YXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIHVzZSB0aGUgZWxlbWVudCBhcyB0aGUgaW5wdXQgdmFsdWVcbiAgICAgICAgLy8gYWNjZXNzb3IuXG4gICAgICAgIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3NvciA9IGlucHV0VmFsdWVBY2Nlc3NvciB8fCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgICB0aGlzLnByZXZpb3VzTmF0aXZlVmFsdWUgPSB0aGlzLnZhbHVlO1xuXG4gICAgICAgIC8vIEZvcmNlIHNldHRlciB0byBiZSBjYWxsZWQgaW4gY2FzZSBpZCB3YXMgbm90IHNwZWNpZmllZC5cbiAgICAgICAgdGhpcy5pZCA9IHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQobnVsbCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgdGhpcyBvbiBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlLCBiZWNhdXNlIHRoZXJlIGFyZSBzb21lXG4gICAgICAgICAgICAvLyBlcnJvciB0cmlnZ2VycyB0aGF0IHdlIGNhbid0IHN1YnNjcmliZSB0byAoZS5nLiBwYXJlbnQgZm9ybSBzdWJtaXNzaW9ucykuIFRoaXMgbWVhbnNcbiAgICAgICAgICAgIC8vIHRoYXQgd2hhdGV2ZXIgbG9naWMgaXMgaW4gaGVyZSBoYXMgdG8gYmUgc3VwZXIgbGVhbiBvciB3ZSByaXNrIGRlc3Ryb3lpbmcgdGhlIHBlcmZvcm1hbmNlLlxuICAgICAgICAgICAgdGhpcy51cGRhdGVFcnJvclN0YXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBuZWVkIHRvIGRpcnR5LWNoZWNrIHRoZSBuYXRpdmUgZWxlbWVudCdzIHZhbHVlLCBiZWNhdXNlIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlXG4gICAgICAgIC8vIHdlIHdvbid0IGJlIG5vdGlmaWVkIHdoZW4gaXQgY2hhbmdlcyAoZS5nLiB0aGUgY29uc3VtZXIgaXNuJ3QgdXNpbmcgZm9ybXMgb3IgdGhleSdyZVxuICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgdXNpbmcgYGVtaXRFdmVudDogZmFsc2VgKS5cbiAgICAgICAgdGhpcy5kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKTtcbiAgICB9XG5cbiAgICBjaGVja1J1bGVzKCkge1xuICAgICAgICB0aGlzLmNoZWNrUnVsZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlVHlwZSgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50VHlwZSA9IHRoaXMuZWxlbWVudFR5cGUgPT09ICdwYXNzd29yZCcgPyAndGV4dCcgOiAncGFzc3dvcmQnO1xuICAgIH1cblxuICAgIC8qKiBGb2N1c2VzIHRoZSBpbnB1dC4gKi9cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbD8uY29udHJvbCkge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdDb250cm9sLmNvbnRyb2w7XG5cbiAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAoY29udHJvbC5zdGF0dXNDaGFuZ2VzIGFzIEV2ZW50RW1pdHRlcjxzdHJpbmc+KS5lbWl0KGNvbnRyb2wuc3RhdHVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9jdXNDaGFuZ2VkKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogQ2FsbGJhY2sgZm9yIHRoZSBjYXNlcyB3aGVyZSB0aGUgZm9jdXNlZCBzdGF0ZSBvZiB0aGUgaW5wdXQgY2hhbmdlcy4gKi9cbiAgICBmb2N1c0NoYW5nZWQoaXNGb2N1c2VkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpc0ZvY3VzZWQgPT09IHRoaXMuZm9jdXNlZCkgeyByZXR1cm47IH1cblxuICAgICAgICB0aGlzLmZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoeyBmb2N1c2VkOiB0aGlzLmZvY3VzZWQgfSk7XG4gICAgfVxuXG4gICAgb25JbnB1dCgpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG5vb3AgZnVuY3Rpb24gYW5kIGlzIHVzZWQgdG8gbGV0IEFuZ3VsYXIga25vdyB3aGVuZXZlciB0aGUgdmFsdWUgY2hhbmdlcy5cbiAgICAgICAgLy8gQW5ndWxhciB3aWxsIHJ1biBhIG5ldyBjaGFuZ2UgZGV0ZWN0aW9uIGVhY2ggdGltZSB0aGUgYGlucHV0YCBldmVudCBoYXMgYmVlbiBkaXNwYXRjaGVkLlxuICAgICAgICAvLyBJdCdzIG5lY2Vzc2FyeSB0aGF0IEFuZ3VsYXIgcmVjb2duaXplcyB0aGUgdmFsdWUgY2hhbmdlLCBiZWNhdXNlIHdoZW4gZmxvYXRpbmdMYWJlbFxuICAgICAgICAvLyBpcyBzZXQgdG8gZmFsc2UgYW5kIEFuZ3VsYXIgZm9ybXMgYXJlbid0IHVzZWQsIHRoZSBwbGFjZWhvbGRlciB3b24ndCByZWNvZ25pemUgdGhlXG4gICAgICAgIC8vIHZhbHVlIGNoYW5nZXMgYW5kIHdpbGwgbm90IGRpc2FwcGVhci5cbiAgICAgICAgLy8gTGlzdGVuaW5nIHRvIHRoZSBpbnB1dCBldmVudCB3b3VsZG4ndCBiZSBuZWNlc3Nhcnkgd2hlbiB0aGUgaW5wdXQgaXMgdXNpbmcgdGhlXG4gICAgICAgIC8vIEZvcm1zTW9kdWxlIG9yIFJlYWN0aXZlRm9ybXNNb2R1bGUsIGJlY2F1c2UgQW5ndWxhciBmb3JtcyBhbHNvIGxpc3RlbnMgdG8gaW5wdXQgZXZlbnRzLlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgb25Db250YWluZXJDbGljaygpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBEb2VzIHNvbWUgbWFudWFsIGRpcnR5IGNoZWNraW5nIG9uIHRoZSBuYXRpdmUgaW5wdXQgYHZhbHVlYCBwcm9wZXJ0eS4gKi9cbiAgICBwcm90ZWN0ZWQgZGlydHlDaGVja05hdGl2ZVZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5wcmV2aW91c05hdGl2ZVZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzTmF0aXZlVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgaW5wdXQgaXMgaW52YWxpZCBiYXNlZCBvbiB0aGUgbmF0aXZlIHZhbGlkYXRpb24uICovXG4gICAgcHJvdGVjdGVkIGlzQmFkSW5wdXQoKSB7XG4gICAgICAgIC8vIFRoZSBgdmFsaWRpdHlgIHByb3BlcnR5IHdvbid0IGJlIHByZXNlbnQgb24gcGxhdGZvcm0tc2VydmVyLlxuICAgICAgICByZXR1cm4gKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbGlkaXR5Py5iYWRJbnB1dDtcbiAgICB9XG59XG4iXX0=