@impartner/design-components 1.2.0 → 2.0.0

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 (291) hide show
  1. package/README.md +5 -4
  2. package/constants/fontawesome-icons.d.ts +2 -2
  3. package/{esm2020 → esm2022}/constants/fontawesome-icons.mjs +1 -1
  4. package/{esm2020 → esm2022}/lib/alert/alert.component.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/alert/alert.module.mjs +5 -5
  6. package/{esm2020 → esm2022}/lib/avatar/avatar.component.mjs +4 -4
  7. package/{esm2020 → esm2022}/lib/avatar/avatar.module.mjs +5 -5
  8. package/{esm2020 → esm2022}/lib/avatar-group/avatar-group.component.mjs +4 -4
  9. package/{esm2020 → esm2022}/lib/avatar-group/avatar-group.module.mjs +5 -5
  10. package/esm2022/lib/backdrop/backdrop.component.mjs +52 -0
  11. package/{esm2020 → esm2022}/lib/backdrop/backdrop.module.mjs +6 -6
  12. package/esm2022/lib/badge/badge.component.mjs +105 -0
  13. package/{esm2020 → esm2022}/lib/badge/badge.module.mjs +6 -6
  14. package/{esm2020 → esm2022}/lib/badge/types/badge-size.mjs +1 -1
  15. package/{esm2020 → esm2022}/lib/branding/branded.directive.mjs +4 -4
  16. package/{esm2020 → esm2022}/lib/branding/branding.module.mjs +6 -6
  17. package/{esm2020 → esm2022}/lib/breadcrumb/breadcrumb-item.component.mjs +6 -6
  18. package/{esm2020 → esm2022}/lib/breadcrumb/breadcrumb.component.mjs +5 -5
  19. package/{esm2020 → esm2022}/lib/breadcrumb/breadcrumb.module.mjs +5 -5
  20. package/{esm2020 → esm2022}/lib/button/button.component.mjs +4 -4
  21. package/{esm2020 → esm2022}/lib/button/button.module.mjs +6 -6
  22. package/{esm2020 → esm2022}/lib/button-group/button-group.component.mjs +4 -4
  23. package/{esm2020 → esm2022}/lib/button-group/button-group.module.mjs +6 -6
  24. package/{esm2020 → esm2022}/lib/card-heading/card-heading.component.mjs +5 -5
  25. package/{esm2020 → esm2022}/lib/card-heading/card-heading.module.mjs +6 -6
  26. package/esm2022/lib/data-card/data-card.component.mjs +123 -0
  27. package/esm2022/lib/data-card/data-card.module.mjs +21 -0
  28. package/{esm2020 → esm2022}/lib/design-components.module.mjs +61 -61
  29. package/{esm2020 → esm2022}/lib/dropdown/components/dropdown-item/dropdown-item.component.mjs +4 -4
  30. package/esm2022/lib/dropdown/dropdown.component.mjs +143 -0
  31. package/{esm2020 → esm2022}/lib/dropdown/dropdown.module.mjs +6 -6
  32. package/{esm2020 → esm2022}/lib/file-upload/directives/file-drop.directive.mjs +4 -4
  33. package/{esm2020 → esm2022}/lib/file-upload/file-upload.component.mjs +30 -30
  34. package/{esm2020 → esm2022}/lib/file-upload/file-upload.module.mjs +8 -8
  35. package/{esm2020 → esm2022}/lib/file-upload/pipes/human-readable-byte-size.pipe.mjs +4 -4
  36. package/{esm2020 → esm2022}/lib/form-field/controls/checkbox/checkbox.component.mjs +49 -49
  37. package/{esm2020 → esm2022}/lib/form-field/controls/checkbox/checkbox.module.mjs +5 -5
  38. package/esm2022/lib/form-field/controls/input/input.directive.mjs +233 -0
  39. package/esm2022/lib/form-field/controls/radio/radio-button/radio-button.component.mjs +260 -0
  40. package/esm2022/lib/form-field/controls/radio/radio-group/radio-group.directive.mjs +289 -0
  41. package/{esm2020 → esm2022}/lib/form-field/controls/radio/radio.module.mjs +5 -5
  42. package/esm2022/lib/form-field/controls/select/option/select-option.component.mjs +139 -0
  43. package/esm2022/lib/form-field/controls/select/select-model.mjs +150 -0
  44. package/esm2022/lib/form-field/controls/select/select.component.mjs +522 -0
  45. package/{esm2020 → esm2022}/lib/form-field/controls/select/select.module.mjs +9 -9
  46. package/{esm2020 → esm2022}/lib/form-field/controls/shared/toggle/components/toggle-input/toggle-input.component.mjs +4 -4
  47. package/esm2022/lib/form-field/controls/shared/toggle/toggle.component.mjs +96 -0
  48. package/{esm2020 → esm2022}/lib/form-field/controls/shared/toggle/toggle.module.mjs +6 -6
  49. package/{esm2020 → esm2022}/lib/form-field/directives/corner-hint.directive.mjs +4 -4
  50. package/{esm2020 → esm2022}/lib/form-field/directives/error.directive.mjs +4 -4
  51. package/esm2022/lib/form-field/directives/form-root.directive.mjs +91 -0
  52. package/{esm2020 → esm2022}/lib/form-field/directives/hint.directive.mjs +4 -4
  53. package/{esm2020 → esm2022}/lib/form-field/directives/label.directive.mjs +4 -4
  54. package/{esm2020 → esm2022}/lib/form-field/directives/prefix.directive.mjs +4 -4
  55. package/{esm2020 → esm2022}/lib/form-field/directives/suffix.directive.mjs +4 -4
  56. package/{esm2020 → esm2022}/lib/form-field/form-field.component.mjs +11 -11
  57. package/{esm2020 → esm2022}/lib/form-field/impdc-forms.module.mjs +28 -28
  58. package/{esm2020 → esm2022}/lib/form-field/services/error-state-matcher.service.mjs +7 -7
  59. package/{esm2020 → esm2022}/lib/form-field/services/unique-selection-dispatcher.service.mjs +4 -4
  60. package/{esm2020 → esm2022}/lib/form-field/shared/disabled.mixin.mjs +5 -5
  61. package/esm2022/lib/form-field/shared/error-state.mixin.mjs +24 -0
  62. package/{esm2020 → esm2022}/lib/form-field/shared/form-field-control.mjs +4 -4
  63. package/{esm2020 → esm2022}/lib/form-field/shared/tab-index.mixin.mjs +6 -6
  64. package/{esm2020 → esm2022}/lib/icon/icon.component.mjs +5 -5
  65. package/{esm2020 → esm2022}/lib/icon/icon.module.mjs +6 -6
  66. package/esm2022/lib/modal/modal.component.mjs +260 -0
  67. package/{esm2020 → esm2022}/lib/modal/modal.module.mjs +14 -14
  68. package/{esm2020 → esm2022}/lib/modal/types/modal-component-sizes.mjs +1 -1
  69. package/{esm2020 → esm2022}/lib/modal/types/modal-theme.mjs +1 -1
  70. package/esm2022/lib/pagination/pagination.component.mjs +176 -0
  71. package/{esm2020 → esm2022}/lib/pagination/pagination.module.mjs +16 -16
  72. package/{esm2020 → esm2022}/lib/progress-bar/progress-bar.component.mjs +5 -5
  73. package/{esm2020 → esm2022}/lib/progress-bar/progress-bar.module.mjs +5 -5
  74. package/esm2022/lib/scrollable/scrollable.component.mjs +186 -0
  75. package/{esm2020 → esm2022}/lib/scrollable/scrollable.module.mjs +6 -6
  76. package/esm2022/lib/select-icon/select-icon.component.mjs +308 -0
  77. package/{esm2020 → esm2022}/lib/select-icon/select-icon.module.mjs +13 -13
  78. package/{esm2020 → esm2022}/lib/size-detection/directive/size-detector.directive.mjs +5 -5
  79. package/{esm2020 → esm2022}/lib/size-detection/size-detection.module.mjs +5 -5
  80. package/{esm2020 → esm2022}/lib/spinner/spinner.component.mjs +4 -4
  81. package/{esm2020 → esm2022}/lib/spinner/spinner.module.mjs +5 -5
  82. package/{esm2020 → esm2022}/lib/table/components/bulk-actions/bulk-actions.component.mjs +4 -4
  83. package/{esm2020 → esm2022}/lib/table/components/column-heading/column-heading.component.mjs +4 -4
  84. package/{esm2020 → esm2022}/lib/table/components/index.mjs +2 -1
  85. package/esm2022/lib/table/components/row-actions/row-actions.component.mjs +61 -0
  86. package/esm2022/lib/table/containers/table.component.mjs +403 -0
  87. package/esm2022/lib/table/directives/table-inject-component.directive.mjs +46 -0
  88. package/{esm2020 → esm2022}/lib/table/directives/table.directive.mjs +4 -4
  89. package/{esm2020 → esm2022}/lib/table/enumerations/table-column-type.mjs +2 -1
  90. package/{esm2020 → esm2022}/lib/table/helpers/table-theme.helper.mjs +3 -3
  91. package/esm2022/lib/table/interfaces/index.mjs +11 -0
  92. package/esm2022/lib/table/interfaces/table-column-defs.type.mjs +2 -0
  93. package/esm2022/lib/table/interfaces/table-row-action-payload.interface.mjs +2 -0
  94. package/esm2022/lib/table/interfaces/table-row-action.interface.mjs +2 -0
  95. package/esm2022/lib/table/table.module.mjs +96 -0
  96. package/{esm2020 → esm2022}/lib/text-highlight/text-highlight.component.mjs +6 -6
  97. package/{esm2020 → esm2022}/lib/text-highlight/text-highlight.module.mjs +6 -6
  98. package/{esm2020 → esm2022}/services/index.mjs +1 -1
  99. package/esm2022/services/interaction.service.mjs +88 -0
  100. package/{esm2020 → esm2022}/types/component-theme.mjs +1 -1
  101. package/{fesm2020 → fesm2022}/impartner-design-components.mjs +1197 -1032
  102. package/fesm2022/impartner-design-components.mjs.map +1 -0
  103. package/lib/alert/alert.component.d.ts +1 -1
  104. package/lib/alert/theme/alert-theme.d.ts +1 -1
  105. package/lib/avatar/avatar.component.d.ts +1 -1
  106. package/lib/avatar-group/avatar-group.component.d.ts +1 -1
  107. package/lib/backdrop/backdrop.component.d.ts +9 -6
  108. package/lib/badge/badge.component.d.ts +3 -2
  109. package/lib/badge/types/badge-icon.d.ts +1 -1
  110. package/lib/badge/types/badge-size.d.ts +1 -1
  111. package/lib/branding/branded.directive.d.ts +1 -1
  112. package/lib/breadcrumb/breadcrumb-item.component.d.ts +1 -1
  113. package/lib/breadcrumb/breadcrumb.component.d.ts +1 -1
  114. package/lib/button/button.component.d.ts +1 -1
  115. package/lib/button/themes/button-theme.d.ts +1 -1
  116. package/lib/button-group/button-group.component.d.ts +1 -1
  117. package/lib/card-heading/card-heading.component.d.ts +1 -1
  118. package/lib/data-card/data-card.component.d.ts +14 -18
  119. package/lib/data-card/data-card.module.d.ts +2 -1
  120. package/lib/dropdown/components/dropdown-item/dropdown-item.component.d.ts +1 -1
  121. package/lib/dropdown/dropdown.component.d.ts +6 -5
  122. package/lib/dropdown/types/dropdown-position.d.ts +1 -1
  123. package/lib/file-upload/directives/file-drop.directive.d.ts +1 -1
  124. package/lib/file-upload/file-upload.component.d.ts +1 -1
  125. package/lib/form-field/controls/checkbox/checkbox.component.d.ts +1 -1
  126. package/lib/form-field/controls/input/input.directive.d.ts +1 -1
  127. package/lib/form-field/controls/radio/radio-button/radio-button.component.d.ts +1 -1
  128. package/lib/form-field/controls/radio/radio-group/radio-group.directive.d.ts +1 -1
  129. package/lib/form-field/controls/select/option/select-option.component.d.ts +4 -4
  130. package/lib/form-field/controls/select/select.component.d.ts +1 -1
  131. package/lib/form-field/controls/shared/toggle/components/toggle-input/toggle-input.component.d.ts +1 -1
  132. package/lib/form-field/controls/shared/toggle/toggle.component.d.ts +1 -1
  133. package/lib/form-field/directives/corner-hint.directive.d.ts +1 -1
  134. package/lib/form-field/directives/error.directive.d.ts +1 -1
  135. package/lib/form-field/directives/form-root.directive.d.ts +2 -2
  136. package/lib/form-field/directives/hint.directive.d.ts +1 -1
  137. package/lib/form-field/directives/label.directive.d.ts +1 -1
  138. package/lib/form-field/directives/prefix.directive.d.ts +1 -1
  139. package/lib/form-field/directives/suffix.directive.d.ts +1 -1
  140. package/lib/form-field/form-field.component.d.ts +1 -1
  141. package/lib/form-field/services/unique-selection-dispatcher.service.d.ts +1 -1
  142. package/lib/form-field/shared/constructors.type.d.ts +2 -2
  143. package/lib/form-field/shared/disabled.mixin.d.ts +1 -1
  144. package/lib/form-field/shared/error-state.mixin.d.ts +1 -1
  145. package/lib/form-field/shared/form-field-control.d.ts +1 -1
  146. package/lib/form-field/shared/tab-index.mixin.d.ts +1 -1
  147. package/lib/icon/icon.component.d.ts +1 -1
  148. package/lib/modal/modal.component.d.ts +17 -10
  149. package/lib/modal/types/modal-component-sizes.d.ts +1 -1
  150. package/lib/modal/types/modal-theme.d.ts +1 -1
  151. package/lib/pagination/pagination.component.d.ts +1 -1
  152. package/lib/progress-bar/progress-bar.component.d.ts +1 -1
  153. package/lib/scrollable/scrollable.component.d.ts +1 -1
  154. package/lib/select-icon/select-icon.component.d.ts +1 -1
  155. package/lib/size-detection/directive/size-detector.directive.d.ts +1 -1
  156. package/lib/spinner/spinner.component.d.ts +1 -1
  157. package/lib/table/components/bulk-actions/bulk-actions.component.d.ts +1 -1
  158. package/lib/table/components/column-heading/column-heading.component.d.ts +1 -1
  159. package/lib/table/components/index.d.ts +1 -0
  160. package/lib/table/components/row-actions/row-actions.component.d.ts +21 -0
  161. package/lib/table/containers/table.component.d.ts +12 -6
  162. package/lib/table/directives/table-inject-component.directive.d.ts +3 -3
  163. package/lib/table/directives/table.directive.d.ts +1 -1
  164. package/lib/table/enumerations/table-column-type.d.ts +2 -1
  165. package/lib/table/helpers/table-theme.helper.d.ts +4 -4
  166. package/lib/table/interfaces/custom-cell-renderer-components.type.d.ts +1 -1
  167. package/lib/table/interfaces/index.d.ts +3 -1
  168. package/lib/table/interfaces/{table-column-def.interface.d.ts → table-column-defs.type.d.ts} +8 -1
  169. package/lib/table/interfaces/table-row-action-payload.interface.d.ts +6 -0
  170. package/lib/table/interfaces/table-row-action.interface.d.ts +9 -0
  171. package/lib/table/interfaces/table-row-item.interface.d.ts +3 -3
  172. package/lib/table/table.module.d.ts +12 -10
  173. package/lib/text-highlight/text-highlight.component.d.ts +1 -1
  174. package/package.json +16 -22
  175. package/services/index.d.ts +1 -1
  176. package/services/interaction.service.d.ts +20 -10
  177. package/types/component-size.d.ts +2 -2
  178. package/types/component-theme.d.ts +1 -1
  179. package/utilities/boolean-props.d.ts +1 -1
  180. package/utilities/number-props.d.ts +1 -1
  181. package/esm2020/lib/backdrop/backdrop.component.mjs +0 -40
  182. package/esm2020/lib/badge/badge.component.mjs +0 -99
  183. package/esm2020/lib/data-card/data-card.component.mjs +0 -128
  184. package/esm2020/lib/data-card/data-card.module.mjs +0 -20
  185. package/esm2020/lib/dropdown/dropdown.component.mjs +0 -142
  186. package/esm2020/lib/form-field/controls/input/input.directive.mjs +0 -233
  187. package/esm2020/lib/form-field/controls/radio/radio-button/radio-button.component.mjs +0 -260
  188. package/esm2020/lib/form-field/controls/radio/radio-group/radio-group.directive.mjs +0 -289
  189. package/esm2020/lib/form-field/controls/select/option/select-option.component.mjs +0 -139
  190. package/esm2020/lib/form-field/controls/select/select-model.mjs +0 -150
  191. package/esm2020/lib/form-field/controls/select/select.component.mjs +0 -522
  192. package/esm2020/lib/form-field/controls/shared/toggle/toggle.component.mjs +0 -96
  193. package/esm2020/lib/form-field/directives/form-root.directive.mjs +0 -91
  194. package/esm2020/lib/form-field/shared/error-state.mixin.mjs +0 -24
  195. package/esm2020/lib/modal/modal.component.mjs +0 -187
  196. package/esm2020/lib/pagination/pagination.component.mjs +0 -176
  197. package/esm2020/lib/scrollable/scrollable.component.mjs +0 -186
  198. package/esm2020/lib/select-icon/select-icon.component.mjs +0 -308
  199. package/esm2020/lib/table/containers/table.component.mjs +0 -386
  200. package/esm2020/lib/table/directives/table-inject-component.directive.mjs +0 -46
  201. package/esm2020/lib/table/interfaces/index.mjs +0 -9
  202. package/esm2020/lib/table/interfaces/table-column-def.interface.mjs +0 -2
  203. package/esm2020/lib/table/table.module.mjs +0 -88
  204. package/esm2020/services/interaction.service.mjs +0 -81
  205. package/fesm2015/impartner-design-components.mjs +0 -9214
  206. package/fesm2015/impartner-design-components.mjs.map +0 -1
  207. package/fesm2020/impartner-design-components.mjs.map +0 -1
  208. /package/{esm2020 → esm2022}/constants/index.mjs +0 -0
  209. /package/{esm2020 → esm2022}/impartner-design-components.mjs +0 -0
  210. /package/{esm2020 → esm2022}/lib/alert/index.mjs +0 -0
  211. /package/{esm2020 → esm2022}/lib/alert/theme/alert-theme.mjs +0 -0
  212. /package/{esm2020 → esm2022}/lib/alert/theme/index.mjs +0 -0
  213. /package/{esm2020 → esm2022}/lib/avatar/index.mjs +0 -0
  214. /package/{esm2020 → esm2022}/lib/avatar-group/index.mjs +0 -0
  215. /package/{esm2020 → esm2022}/lib/backdrop/index.mjs +0 -0
  216. /package/{esm2020 → esm2022}/lib/badge/index.mjs +0 -0
  217. /package/{esm2020 → esm2022}/lib/badge/types/badge-icon.mjs +0 -0
  218. /package/{esm2020 → esm2022}/lib/badge/types/index.mjs +0 -0
  219. /package/{esm2020 → esm2022}/lib/branding/index.mjs +0 -0
  220. /package/{esm2020 → esm2022}/lib/breadcrumb/index.mjs +0 -0
  221. /package/{esm2020 → esm2022}/lib/button/index.mjs +0 -0
  222. /package/{esm2020 → esm2022}/lib/button/themes/button-theme.mjs +0 -0
  223. /package/{esm2020 → esm2022}/lib/button/themes/index.mjs +0 -0
  224. /package/{esm2020 → esm2022}/lib/button-group/index.mjs +0 -0
  225. /package/{esm2020 → esm2022}/lib/card-heading/index.mjs +0 -0
  226. /package/{esm2020 → esm2022}/lib/data-card/index.mjs +0 -0
  227. /package/{esm2020 → esm2022}/lib/dropdown/components/index.mjs +0 -0
  228. /package/{esm2020 → esm2022}/lib/dropdown/index.mjs +0 -0
  229. /package/{esm2020 → esm2022}/lib/dropdown/types/dropdown-position.mjs +0 -0
  230. /package/{esm2020 → esm2022}/lib/dropdown/types/index.mjs +0 -0
  231. /package/{esm2020 → esm2022}/lib/file-upload/directives/index.mjs +0 -0
  232. /package/{esm2020 → esm2022}/lib/file-upload/index.mjs +0 -0
  233. /package/{esm2020 → esm2022}/lib/file-upload/pipes/index.mjs +0 -0
  234. /package/{esm2020 → esm2022}/lib/form-field/controls/checkbox/index.mjs +0 -0
  235. /package/{esm2020 → esm2022}/lib/form-field/controls/index.mjs +0 -0
  236. /package/{esm2020 → esm2022}/lib/form-field/controls/input/index.mjs +0 -0
  237. /package/{esm2020 → esm2022}/lib/form-field/controls/radio/index.mjs +0 -0
  238. /package/{esm2020 → esm2022}/lib/form-field/controls/radio/injection-tokens.mjs +0 -0
  239. /package/{esm2020 → esm2022}/lib/form-field/controls/radio/interfaces/index.mjs +0 -0
  240. /package/{esm2020 → esm2022}/lib/form-field/controls/radio/interfaces/radio-button.interface.mjs +0 -0
  241. /package/{esm2020 → esm2022}/lib/form-field/controls/radio/interfaces/radio-change-event.interface.mjs +0 -0
  242. /package/{esm2020 → esm2022}/lib/form-field/controls/radio/interfaces/radio-group.interface.mjs +0 -0
  243. /package/{esm2020 → esm2022}/lib/form-field/controls/select/index.mjs +0 -0
  244. /package/{esm2020 → esm2022}/lib/form-field/controls/select/option/index.mjs +0 -0
  245. /package/{esm2020 → esm2022}/lib/form-field/controls/select/option-parent.mjs +0 -0
  246. /package/{esm2020 → esm2022}/lib/form-field/controls/shared/index.mjs +0 -0
  247. /package/{esm2020 → esm2022}/lib/form-field/controls/shared/toggle/components/index.mjs +0 -0
  248. /package/{esm2020 → esm2022}/lib/form-field/controls/shared/toggle/index.mjs +0 -0
  249. /package/{esm2020 → esm2022}/lib/form-field/directives/index.mjs +0 -0
  250. /package/{esm2020 → esm2022}/lib/form-field/form-field-errors.mjs +0 -0
  251. /package/{esm2020 → esm2022}/lib/form-field/impdc-forms.mjs +0 -0
  252. /package/{esm2020 → esm2022}/lib/form-field/index.mjs +0 -0
  253. /package/{esm2020 → esm2022}/lib/form-field/services/index.mjs +0 -0
  254. /package/{esm2020 → esm2022}/lib/form-field/shared/constructors.type.mjs +0 -0
  255. /package/{esm2020 → esm2022}/lib/form-field/shared/index.mjs +0 -0
  256. /package/{esm2020 → esm2022}/lib/icon/index.mjs +0 -0
  257. /package/{esm2020 → esm2022}/lib/index.mjs +0 -0
  258. /package/{esm2020 → esm2022}/lib/modal/index.mjs +0 -0
  259. /package/{esm2020 → esm2022}/lib/modal/types/index.mjs +0 -0
  260. /package/{esm2020 → esm2022}/lib/pagination/index.mjs +0 -0
  261. /package/{esm2020 → esm2022}/lib/progress-bar/index.mjs +0 -0
  262. /package/{esm2020 → esm2022}/lib/scrollable/index.mjs +0 -0
  263. /package/{esm2020 → esm2022}/lib/select-icon/index.mjs +0 -0
  264. /package/{esm2020 → esm2022}/lib/size-detection/directive/element-size.interface.mjs +0 -0
  265. /package/{esm2020 → esm2022}/lib/size-detection/directive/index.mjs +0 -0
  266. /package/{esm2020 → esm2022}/lib/size-detection/index.mjs +0 -0
  267. /package/{esm2020 → esm2022}/lib/spinner/index.mjs +0 -0
  268. /package/{esm2020 → esm2022}/lib/table/constants/index.mjs +0 -0
  269. /package/{esm2020 → esm2022}/lib/table/constants/public-table.constants.mjs +0 -0
  270. /package/{esm2020 → esm2022}/lib/table/constants/table.constants.mjs +0 -0
  271. /package/{esm2020 → esm2022}/lib/table/containers/index.mjs +0 -0
  272. /package/{esm2020 → esm2022}/lib/table/directives/index.mjs +0 -0
  273. /package/{esm2020 → esm2022}/lib/table/enumerations/index.mjs +0 -0
  274. /package/{esm2020 → esm2022}/lib/table/helpers/index.mjs +0 -0
  275. /package/{esm2020 → esm2022}/lib/table/index.mjs +0 -0
  276. /package/{esm2020 → esm2022}/lib/table/interfaces/cell-renderer.interface.mjs +0 -0
  277. /package/{esm2020 → esm2022}/lib/table/interfaces/custom-cell-renderer-components.type.mjs +0 -0
  278. /package/{esm2020 → esm2022}/lib/table/interfaces/sort-by-payload.interface.mjs +0 -0
  279. /package/{esm2020 → esm2022}/lib/table/interfaces/table-cell-option.interface.mjs +0 -0
  280. /package/{esm2020 → esm2022}/lib/table/interfaces/table-event-payload.interface.mjs +0 -0
  281. /package/{esm2020 → esm2022}/lib/table/interfaces/table-row-item.interface.mjs +0 -0
  282. /package/{esm2020 → esm2022}/lib/text-highlight/index.mjs +0 -0
  283. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  284. /package/{esm2020 → esm2022}/types/component-size.mjs +0 -0
  285. /package/{esm2020 → esm2022}/types/index.mjs +0 -0
  286. /package/{esm2020 → esm2022}/utilities/boolean-props.mjs +0 -0
  287. /package/{esm2020 → esm2022}/utilities/dc.mjs +0 -0
  288. /package/{esm2020 → esm2022}/utilities/index.mjs +0 -0
  289. /package/{esm2020 → esm2022}/utilities/lc.mjs +0 -0
  290. /package/{esm2020 → esm2022}/utilities/number-props.mjs +0 -0
  291. /package/{esm2020 → esm2022}/utilities/sanitize.mjs +0 -0
@@ -37,6 +37,44 @@ const _CheckboxComponentMixinBase = mixinTabIndex(mixinErrorState(CheckboxCompon
37
37
  * To use, import `CheckboxModule` or another module that imports and exports that module from `@impartner/design-components`.
38
38
  */
39
39
  export class CheckboxComponent extends _CheckboxComponentMixinBase {
40
+ /**
41
+ * Whether or not the checkbox input is checked.
42
+ */
43
+ get checked() {
44
+ return this.value;
45
+ }
46
+ set checked(value) {
47
+ this.value = value;
48
+ this._cvaOnChange(this.value);
49
+ }
50
+ /**
51
+ * Whether or not the checkbox input is in an `indeterminate` state.
52
+ */
53
+ get indeterminate() {
54
+ return this._indeterminate;
55
+ }
56
+ set indeterminate(value) {
57
+ const coercedValue = coerceBooleanPropertyValue(value);
58
+ const isChange = coercedValue !== this._indeterminate;
59
+ this._indeterminate = coercedValue;
60
+ if (isChange) {
61
+ this.indeterminateChange.emit(this._indeterminate);
62
+ }
63
+ }
64
+ get disabled() {
65
+ return this._disabled;
66
+ }
67
+ set disabled(value) {
68
+ const newDisabledState = coerceBooleanPropertyValue(value);
69
+ if (newDisabledState !== this._disabled) {
70
+ this._disabled = newDisabledState;
71
+ this._changeDetector.markForCheck();
72
+ this.stateChanges.next();
73
+ }
74
+ }
75
+ get inputId() {
76
+ return `${this.id || this._uid}-input`;
77
+ }
40
78
  constructor(_changeDetector, tabIndex, defaultErrorStateMatcher, formRoot, parentForm, parentFormGroup, ngControl) {
41
79
  super(defaultErrorStateMatcher, formRoot, parentForm, parentFormGroup, ngControl);
42
80
  this._changeDetector = _changeDetector;
@@ -86,44 +124,6 @@ export class CheckboxComponent extends _CheckboxComponentMixinBase {
86
124
  });
87
125
  }
88
126
  }
89
- /**
90
- * Whether or not the checkbox input is checked.
91
- */
92
- get checked() {
93
- return this.value;
94
- }
95
- set checked(value) {
96
- this.value = value;
97
- this._cvaOnChange(this.value);
98
- }
99
- /**
100
- * Whether or not the checkbox input is in an `indeterminate` state.
101
- */
102
- get indeterminate() {
103
- return this._indeterminate;
104
- }
105
- set indeterminate(value) {
106
- const coercedValue = coerceBooleanPropertyValue(value);
107
- const isChange = coercedValue !== this._indeterminate;
108
- this._indeterminate = coercedValue;
109
- if (isChange) {
110
- this.indeterminateChange.emit(this._indeterminate);
111
- }
112
- }
113
- get disabled() {
114
- return this._disabled;
115
- }
116
- set disabled(value) {
117
- const newDisabledState = coerceBooleanPropertyValue(value);
118
- if (newDisabledState !== this._disabled) {
119
- this._disabled = newDisabledState;
120
- this._changeDetector.markForCheck();
121
- this.stateChanges.next();
122
- }
123
- }
124
- get inputId() {
125
- return `${this.id || this._uid}-input`;
126
- }
127
127
  /** @ignore */
128
128
  ngDoCheck() {
129
129
  const ngControl = this.ngControl;
@@ -264,15 +264,15 @@ export class CheckboxComponent extends _CheckboxComponentMixinBase {
264
264
  event.stopPropagation();
265
265
  }
266
266
  }
267
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: CheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: 'tabindex', attribute: true }, { token: i1.ErrorStateMatcher }, { token: IMPDC_FORM_ROOT, optional: true }, { token: i2.NgForm, optional: true }, { token: i2.FormGroupDirective, optional: true }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
268
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.1", type: CheckboxComponent, selector: "impdc-checkbox", inputs: { tabIndex: "tabIndex", id: "id", label: "label", description: "description", isSwitch: "isSwitch", switchIcons: "switchIcons", inline: "inline", checked: "checked", indeterminate: "indeterminate", disabled: "disabled", errorStateMatcher: "errorStateMatcher", required: "required" }, outputs: { change: "change", indeterminateChange: "indeterminateChange" }, host: { properties: { "attr.id": "id", "attr.tabindex": "null", "class.impdc-checkbox--required": "required", "class.impdc-checkbox--disabled": "disabled", "class.impdc-checkbox--invalid": "errorState", "class.impdc-checkbox--inline": "inline" }, classAttribute: "impdc-checkbox" }, providers: [
269
+ {
270
+ provide: ImpdcFormFieldControl,
271
+ useExisting: CheckboxComponent
272
+ }
273
+ ], viewQueries: [{ propertyName: "_inputElement", first: true, predicate: ["nativeInput"], descendants: true, read: ElementRef }], exportAs: ["impdcCheckControl"], usesInheritance: true, ngImport: i0, template: "<impdc-toggle\n [label]=\"label\"\n [description]=\"description\"\n [isSwitch]=\"isSwitch\"\n [switchIcons]=\"switchIcons\"\n [inline]=\"inline\"\n (click)=\"_preventBubblingFromLabel($event)\">\n <input\n #nativeInput\n impdc-toggle-input\n type=\"checkbox\"\n class=\"impdc-checkbox__native-control\"\n [class.is-invalid]=\"errorState\"\n [id]=\"inputId\"\n [attr.aria-checked]=\"_getAriaChecked()\"\n [attr.aria-required]=\"required\"\n [attr.tabindex]=\"tabIndex\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [indeterminate]=\"indeterminate\"\n (change)=\"_onInteractionEvent($event)\"\n (click)=\"_handleCheckClick()\"\n (blur)=\"_onBlur()\"\n (focus)=\"_onFocus()\" />\n</impdc-toggle>\n", styles: [":host{display:block;opacity:var(--impartner-hex-input-opacity, 1)}:host.impdc-checkbox--inline{display:inline-block}:host.impdc-checkbox--inline:not(:last-of-type){margin-right:4rem}:host:not(.impdc-checkbox--inline):not(:last-of-type){margin-bottom:1.6rem}:host.impdc-checkbox--disabled{--impartner-hex-input-opacity: .5}:host.impdc-checkbox--invalid ::ng-deep .form-check-label{color:var(--impd-color-red-600)}\n"], dependencies: [{ kind: "component", type: i3.ToggleComponent, selector: "impdc-toggle", inputs: ["isSwitch", "label", "description", "inline", "switchIcons"] }, { kind: "component", type: i4.ToggleInputComponent, selector: "input[impdc-toggle-input]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
267
274
  }
268
- CheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: 'tabindex', attribute: true }, { token: i1.ErrorStateMatcher }, { token: IMPDC_FORM_ROOT, optional: true }, { token: i2.NgForm, optional: true }, { token: i2.FormGroupDirective, optional: true }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
269
- CheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: CheckboxComponent, selector: "impdc-checkbox", inputs: { tabIndex: "tabIndex", id: "id", label: "label", description: "description", isSwitch: "isSwitch", switchIcons: "switchIcons", inline: "inline", checked: "checked", indeterminate: "indeterminate", disabled: "disabled", errorStateMatcher: "errorStateMatcher", required: "required" }, outputs: { change: "change", indeterminateChange: "indeterminateChange" }, host: { properties: { "attr.id": "id", "attr.tabindex": "null", "class.impdc-checkbox--required": "required", "class.impdc-checkbox--disabled": "disabled", "class.impdc-checkbox--invalid": "errorState", "class.impdc-checkbox--inline": "inline" }, classAttribute: "impdc-checkbox" }, providers: [
270
- {
271
- provide: ImpdcFormFieldControl,
272
- useExisting: CheckboxComponent
273
- }
274
- ], viewQueries: [{ propertyName: "_inputElement", first: true, predicate: ["nativeInput"], descendants: true, read: ElementRef }], exportAs: ["impdcCheckControl"], usesInheritance: true, ngImport: i0, template: "<impdc-toggle\n [label]=\"label\"\n [description]=\"description\"\n [isSwitch]=\"isSwitch\"\n [switchIcons]=\"switchIcons\"\n [inline]=\"inline\"\n (click)=\"_preventBubblingFromLabel($event)\">\n <input\n #nativeInput\n impdc-toggle-input\n type=\"checkbox\"\n class=\"impdc-checkbox__native-control\"\n [class.is-invalid]=\"errorState\"\n [id]=\"inputId\"\n [attr.aria-checked]=\"_getAriaChecked()\"\n [attr.aria-required]=\"required\"\n [attr.tabindex]=\"tabIndex\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [indeterminate]=\"indeterminate\"\n (change)=\"_onInteractionEvent($event)\"\n (click)=\"_handleCheckClick()\"\n (blur)=\"_onBlur()\"\n (focus)=\"_onFocus()\" />\n</impdc-toggle>\n", styles: [":host{display:block;opacity:var(--impartner-hex-input-opacity, 1)}:host.impdc-checkbox--inline{display:inline-block}:host.impdc-checkbox--inline:not(:last-of-type){margin-right:4rem}:host:not(.impdc-checkbox--inline):not(:last-of-type){margin-bottom:1.6rem}:host.impdc-checkbox--disabled{--impartner-hex-input-opacity: .5}:host.impdc-checkbox--invalid ::ng-deep .form-check-label{color:var(--impd-color-red-600)}\n"], dependencies: [{ kind: "component", type: i3.ToggleComponent, selector: "impdc-toggle", inputs: ["isSwitch", "label", "description", "inline", "switchIcons"] }, { kind: "component", type: i4.ToggleInputComponent, selector: "input[impdc-toggle-input]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
275
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CheckboxComponent, decorators: [{
275
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: CheckboxComponent, decorators: [{
276
276
  type: Component,
277
277
  args: [{ selector: 'impdc-checkbox', host: {
278
278
  class: 'impdc-checkbox',
@@ -288,7 +288,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
288
288
  useExisting: CheckboxComponent
289
289
  }
290
290
  ], template: "<impdc-toggle\n [label]=\"label\"\n [description]=\"description\"\n [isSwitch]=\"isSwitch\"\n [switchIcons]=\"switchIcons\"\n [inline]=\"inline\"\n (click)=\"_preventBubblingFromLabel($event)\">\n <input\n #nativeInput\n impdc-toggle-input\n type=\"checkbox\"\n class=\"impdc-checkbox__native-control\"\n [class.is-invalid]=\"errorState\"\n [id]=\"inputId\"\n [attr.aria-checked]=\"_getAriaChecked()\"\n [attr.aria-required]=\"required\"\n [attr.tabindex]=\"tabIndex\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [indeterminate]=\"indeterminate\"\n (change)=\"_onInteractionEvent($event)\"\n (click)=\"_handleCheckClick()\"\n (blur)=\"_onBlur()\"\n (focus)=\"_onFocus()\" />\n</impdc-toggle>\n", styles: [":host{display:block;opacity:var(--impartner-hex-input-opacity, 1)}:host.impdc-checkbox--inline{display:inline-block}:host.impdc-checkbox--inline:not(:last-of-type){margin-right:4rem}:host:not(.impdc-checkbox--inline):not(:last-of-type){margin-bottom:1.6rem}:host.impdc-checkbox--disabled{--impartner-hex-input-opacity: .5}:host.impdc-checkbox--invalid ::ng-deep .form-check-label{color:var(--impd-color-red-600)}\n"] }]
291
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
291
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
292
292
  type: Attribute,
293
293
  args: ['tabindex']
294
294
  }] }, { type: i1.ErrorStateMatcher }, { type: undefined, decorators: [{
@@ -304,7 +304,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
304
304
  type: Self
305
305
  }, {
306
306
  type: Optional
307
- }] }]; }, propDecorators: { _inputElement: [{
307
+ }] }], propDecorators: { _inputElement: [{
308
308
  type: ViewChild,
309
309
  args: ['nativeInput', { read: ElementRef }]
310
310
  }], id: [{
@@ -334,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
334
334
  }], required: [{
335
335
  type: Input
336
336
  }] } });
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi9mb3JtLWZpZWxkL2NvbnRyb2xzL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvZm9ybS1maWVsZC9jb250cm9scy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUV2QixTQUFTLEVBRVQsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBT0wsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFFTCwwQkFBMEIsRUFDM0IsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQWlCLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxFLE9BQU8sRUFJTCxxQkFBcUIsRUFDckIsZUFBZSxFQUNmLGFBQWEsRUFDZCxNQUFNLGNBQWMsQ0FBQzs7Ozs7O0FBRXRCLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUI7SUFDRSwwQ0FBMEM7SUFDMUIsTUFBeUI7SUFDekMsc0ZBQXNGO0lBQ3RFLE9BQWdCO1FBRmhCLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBRXpCLFlBQU8sR0FBUCxPQUFPLENBQVM7SUFDL0IsQ0FBQztDQUNMO0FBRUQs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LEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUl2QyxFQUFFO3NCQURSLEtBQUs7Z0JBT0MsS0FBSztzQkFEWCxLQUFLO2dCQU9DLFdBQVc7c0JBRGpCLEtBQUs7Z0JBT0MsUUFBUTtzQkFEZCxLQUFLO2dCQU9DLFdBQVc7c0JBRGpCLEtBQUs7Z0JBT0MsTUFBTTtzQkFEWixLQUFLO2dCQU9LLE9BQU87c0JBRGpCLEtBQUs7Z0JBYUssYUFBYTtzQkFEdkIsS0FBSztnQkFnQkssUUFBUTtzQkFEbEIsS0FBSztnQkFnQlUsaUJBQWlCO3NCQURoQyxLQUFLO2dCQVFVLE1BQU07c0JBRnJCLE1BQU07Z0JBUVMsbUJBQW1CO3NCQURsQyxNQUFNO2dCQTRFSSxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gIE5nQ29udHJvbCxcbiAgTmdGb3JtLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEJvb2xlYW5JbnB1dCxcbiAgY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IEltcGRjRm9ybVJvb3QsIElNUERDX0ZPUk1fUk9PVCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBIYXNUYWJJbmRleCxcbiAgSUNhblVwZGF0ZUVycm9yU3RhdGUsXG4gIElIYXNFcnJvclN0YXRlLFxuICBJbXBkY0Zvcm1GaWVsZENvbnRyb2wsXG4gIG1peGluRXJyb3JTdGF0ZSxcbiAgbWl4aW5UYWJJbmRleFxufSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hDaGFuZ2VFdmVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKiBUaGUgc3BlY2lmaWMgY2hlY2tib3ggdGhhdCBjaGFuZ2VkLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzb3VyY2U6IENoZWNrYm94Q29tcG9uZW50LFxuICAgIC8qKiBXaGV0aGVyIHRoZSBjaGFuZ2VkIGNoZWNrYm94IHdhcyBjaGVja2VkIG9yIHVuY2hlY2tlZCBhdCB0aGUgdGltZSBvZiB0aGUgZXZlbnQuICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNoZWNrZWQ6IGJvb2xlYW5cbiAgKSB7fVxufVxuXG5hYnN0cmFjdCBjbGFzcyBDaGVja2JveENvbXBvbmVudEJhc2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBhYnN0cmFjdCBkaXNhYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgcHVibGljIF9mb3JtUm9vdDogSW1wZGNGb3JtUm9vdCxcbiAgICBwdWJsaWMgX3BhcmVudEZvcm06IE5nRm9ybSxcbiAgICBwdWJsaWMgX3BhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCB8IG51bGxcbiAgKSB7fVxufVxuXG5jb25zdCBfQ2hlY2tib3hDb21wb25lbnRNaXhpbkJhc2UgPSBtaXhpblRhYkluZGV4KFxuICBtaXhpbkVycm9yU3RhdGUoQ2hlY2tib3hDb21wb25lbnRCYXNlKVxuKTtcblxuLyoqXG4gKiBUaGUgYENoZWNrYm94Q29tcG9uZW50YCAoYDxpbXBkYy1jaGVja2JveGApIGlzIGFuIGlucHV0IHdpdGggYSBzaW1wbGUgYm9vbGVhbiB2YWx1ZSBhcyBhIGNoZWNrYm94IG9yIHRvZ2dsZSBzd2l0Y2guXG4gKiBUaGlzIGNvbXBvbmVudCBjYW4gYmUgdXNlZCB3aXRoaW4gYSBgRm9ybUZpZWxkQ29tcG9uZW50YCAoYDxpbXBkYy1mb3JtLWZpZWxkYCkuXG4gKiBUbyB1c2UsIGltcG9ydCBgQ2hlY2tib3hNb2R1bGVgIG9yIGFub3RoZXIgbW9kdWxlIHRoYXQgaW1wb3J0cyBhbmQgZXhwb3J0cyB0aGF0IG1vZHVsZSBmcm9tIGBAaW1wYXJ0bmVyL2Rlc2lnbi1jb21wb25lbnRzYC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaW1wZGMtY2hlY2tib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGVja2JveC5jb21wb25lbnQuc2NzcyddLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnaW1wZGMtY2hlY2tib3gnLFxuICAgICdbYXR0ci5pZF0nOiAnaWQnLFxuICAgICdbYXR0ci50YWJpbmRleF0nOiAnbnVsbCcsXG4gICAgJ1tjbGFzcy5pbXBkYy1jaGVja2JveC0tcmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAnW2NsYXNzLmltcGRjLWNoZWNrYm94LS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbY2xhc3MuaW1wZGMtY2hlY2tib3gtLWludmFsaWRdJzogJ2Vycm9yU3RhdGUnLFxuICAgICdbY2xhc3MuaW1wZGMtY2hlY2tib3gtLWlubGluZV0nOiAnaW5saW5lJ1xuICB9LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICBpbnB1dHM6IFsndGFiSW5kZXgnXSxcbiAgZXhwb3J0QXM6ICdpbXBkY0NoZWNrQ29udHJvbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBJbXBkY0Zvcm1GaWVsZENvbnRyb2wsXG4gICAgICB1c2VFeGlzdGluZzogQ2hlY2tib3hDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hDb21wb25lbnRcbiAgZXh0ZW5kcyBfQ2hlY2tib3hDb21wb25lbnRNaXhpbkJhc2VcbiAgaW1wbGVtZW50c1xuICAgIERvQ2hlY2ssXG4gICAgT25EZXN0cm95LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvcixcbiAgICBIYXNUYWJJbmRleCxcbiAgICBJbXBkY0Zvcm1GaWVsZENvbnRyb2w8Ym9vbGVhbj4sXG4gICAgSUNhblVwZGF0ZUVycm9yU3RhdGUsXG4gICAgSUhhc0Vycm9yU3RhdGVcbntcbiAgcHJpdmF0ZSByZWFkb25seSBfdWlkOiBzdHJpbmcgPSBgaW1wZGMtY2hlY2tib3gtJHtuYW5vaWQoKX1gO1xuICBwcml2YXRlIF9jdmFPbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBfY3ZhT25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgQFZpZXdDaGlsZCgnbmF0aXZlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJvdGVjdGVkIF9pbnB1dEVsZW1lbnQ/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpZDogc3RyaW5nID0gdGhpcy5fdWlkO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBsYWJlbCB0ZXh0IGZvciB0aGUgY2hlY2tib3ggY29udHJvbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsYWJlbCA9ICcnO1xuXG4gIC8qKlxuICAgKiBUZXh0IHRvIHByb3ZpZGUgYWRkaXRpb25hbCBkZXNjcmlwdGlvbiBvciBjb250ZXh0IGZvciB0aGUgY2hlY2tib3ggY29udHJvbC4gRG9lcyBub3QgZGlzcGxheSB3aGVuIGBpbmxpbmVgIGlzIGB0cnVlYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZXNjcmlwdGlvbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgZGlzcGxheXMgYXMgYSB0b2dnbGUgc3dpdGNoLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlzU3dpdGNoID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZW4gYGlzU3dpdGNoYCBpcyBgdHJ1ZWAsIHNldHMgd2hldGhlciBvciBub3QgdGhlIHRvZ2dsZSBzd2l0Y2ggdXNlcyBpY29ucy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzd2l0Y2hJY29ucyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY2hlY2tib3ggZGlzcGxheXMgaW5saW5lLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlubGluZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY2hlY2tib3ggaW5wdXQgaXMgY2hlY2tlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGNoZWNrZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl9jdmFPbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY2hlY2tib3ggaW5wdXQgaXMgaW4gYW4gYGluZGV0ZXJtaW5hdGVgIHN0YXRlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBpbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbmRldGVybWluYXRlO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5kZXRlcm1pbmF0ZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgY29uc3QgY29lcmNlZFZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWUodmFsdWUpO1xuICAgIGNvbnN0IGlzQ2hhbmdlID0gY29lcmNlZFZhbHVlICE9PSB0aGlzLl9pbmRldGVybWluYXRlO1xuICAgIHRoaXMuX2luZGV0ZXJtaW5hdGUgPSBjb2VyY2VkVmFsdWU7XG5cbiAgICBpZiAoaXNDaGFuZ2UpIHtcbiAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZS5lbWl0KHRoaXMuX2luZGV0ZXJtaW5hdGUpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9pbmRldGVybWluYXRlID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgY29uc3QgbmV3RGlzYWJsZWRTdGF0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eVZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChuZXdEaXNhYmxlZFN0YXRlICE9PSB0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSBuZXdEaXNhYmxlZFN0YXRlO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgb3ZlcnJpZGUgZXJyb3JTdGF0ZU1hdGNoZXIhOiBFcnJvclN0YXRlTWF0Y2hlcjtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuZXZlciB0aGUgY2hlY2tlZG5lc3Mgb2YgdGhlIGlucHV0IGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIHB1YmxpYyByZWFkb25seSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxDaGVja2JveENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hlY2tib3hDaGFuZ2VFdmVudD4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuZXZlciB0aGUgY29udHJvbCBlbnRlcnMgb3IgbGVhdmVzIGFuIGBpbmRldGVybWluYXRlYCBzdGF0ZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgaW5kZXRlcm1pbmF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHB1YmxpYyBnZXQgaW5wdXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmlkIHx8IHRoaXMuX3VpZH0taW5wdXRgO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBBdHRyaWJ1dGUoJ3RhYmluZGV4JykgdGFiSW5kZXg6IHN0cmluZyxcbiAgICBkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSU1QRENfRk9STV9ST09UKSBmb3JtUm9vdDogSW1wZGNGb3JtUm9vdCxcbiAgICBAT3B0aW9uYWwoKSBwYXJlbnRGb3JtOiBOZ0Zvcm0sXG4gICAgQE9wdGlvbmFsKCkgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBuZ0NvbnRyb2w6IE5nQ29udHJvbCB8IG51bGxcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgICBmb3JtUm9vdCxcbiAgICAgIHBhcmVudEZvcm0sXG4gICAgICBwYXJlbnRGb3JtR3JvdXAsXG4gICAgICBuZ0NvbnRyb2xcbiAgICApO1xuXG4gICAgdGhpcy50YWJJbmRleCA9IHBhcnNlSW50KHRhYkluZGV4KSB8fCAwO1xuXG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2w/LmFkZFZhbGlkYXRvcnMoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBjb25zdCBuZ0NvbnRyb2wgPSB0aGlzLm5nQ29udHJvbDtcblxuICAgIGlmICghbmdDb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVFcnJvclN0YXRlKCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qIEltcGRjRm9ybUZpZWxkQ29udHJvbCAqL1xuXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWUodmFsdWUpO1xuXG4gICAgaWYgKG5ld1ZhbHVlICE9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF92YWx1ZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBnZXQgZm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9jdXNlZDtcbiAgfVxuICBwcml2YXRlIF9mb2N1c2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IHJlcXVpcmVkbmVzcyBvZiBjb250cm9sIGluIGEgdGVtcGxhdGUtYmFzZWQgbWFubmVyOyBub3QgbmVjZXNzYXJ5IHdoZW4gdXNpbmcgdGhlXG4gICAqIEFuZ3VsYXIgcmVhY3RpdmUgZm9ybXMgQVBJIGFuZCAncmVxdWlyZWQnIG9yIGByZXF1aXJlZFRydWVgIHZhbGlkYXRvcnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9yZXF1aXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdDb250cm9sPy5jb250cm9sO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICBjb25zdCBoYXNSZXF1aXJlZCA9IGNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgY29uc3QgaGFzUmVxdWlyZWRUcnVlID0gY29udHJvbC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xuXG4gICAgICByZXR1cm4gaGFzUmVxdWlyZWQgfHwgaGFzUmVxdWlyZWRUcnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRyb2xUeXBlOiBzdHJpbmcgPSAnaW1wZGMtY2hlY2snO1xuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNBZmZpeGVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyogQ29udHJvbFZhbHVlQWNjZXNzb3IgKi9cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9ICEhdmFsdWU7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9jdmFPbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB7fSk6IHZvaWQge1xuICAgIHRoaXMuX2N2YU9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyogVmFsaWRhdG9yICovXG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIHZhbGlkYXRlKCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5yZXF1aXJlZCAmJiAhdGhpcy52YWx1ZVxuICAgICAgPyB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIC8qIEludGVybmFscyAqL1xuICBwcm90ZWN0ZWQgX2dldEFyaWFDaGVja2VkKCk6ICd0cnVlJyB8ICdmYWxzZScgfCAnbWl4ZWQnIHtcbiAgICBpZiAodGhpcy5jaGVja2VkKSB7XG4gICAgICByZXR1cm4gJ3RydWUnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGUgPyAnbWl4ZWQnIDogJ2ZhbHNlJztcbiAgfVxuXG4gIHByb3RlY3RlZCBfb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZvY3VzZWQgPSBmYWxzZTtcbiAgICAvLyBXaGVuIGEgZm9jdXNlZCBlbGVtZW50IGJlY29tZXMgZGlzYWJsZWQsIHRoZSBicm93c2VyICppbW1lZGlhdGVseSogZmlyZXMgYSBibHVyIGV2ZW50LlxuICAgIC8vIEFuZ3VsYXIgZG9lcyBub3QgZXhwZWN0IGV2ZW50cyB0byBiZSByYWlzZWQgZHVyaW5nIGNoYW5nZSBkZXRlY3Rpb24sIHNvIGFueSBzdGF0ZSBjaGFuZ2VcbiAgICAvLyAoc3VjaCBhcyBhIGZvcm0gY29udHJvbCdzICduZy10b3VjaGVkJykgd2lsbCBjYXVzZSBhIGNoYW5nZWQtYWZ0ZXItY2hlY2tlZCBlcnJvci5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTc3OTMuIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHdlIGRlZmVyXG4gICAgLy8gdGVsbGluZyB0aGUgZm9ybSBjb250cm9sIGl0IGhhcyBiZWVuIHRvdWNoZWQgdW50aWwgdGhlIG5leHQgdGljay5cbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2N2YU9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX29uRm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLl9mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX2hhbmRsZUNoZWNrQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICBpZiAodGhpcy5pbmRldGVybWluYXRlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZS5lbWl0KHRoaXMuX2luZGV0ZXJtaW5hdGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcblxuICAgICAgdGhpcy5fZW1pdENoYW5nZUV2ZW50cygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfb25JbnRlcmFjdGlvbkV2ZW50KGV2ZW50OiBFdmVudCkge1xuICAgIC8vIFdlIGFsd2F5cyBoYXZlIHRvIHN0b3AgcHJvcGFnYXRpb24gb24gdGhlIGNoYW5nZSBldmVudC5cbiAgICAvLyBPdGhlcndpc2UgdGhlIGNoYW5nZSBldmVudCwgZnJvbSB0aGUgaW5wdXQgZWxlbWVudCwgd2lsbCBidWJibGUgdXAgYW5kXG4gICAgLy8gZW1pdCBpdHMgZXZlbnQgb2JqZWN0IHRvIHRoZSBgY2hhbmdlYCBvdXRwdXQuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0Q2hhbmdlRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX2N2YU9uQ2hhbmdlKHRoaXMuY2hlY2tlZCk7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdChuZXcgQ2hlY2tib3hDaGFuZ2VFdmVudCh0aGlzLCB0aGlzLmNoZWNrZWQpKTtcblxuICAgIC8vIEFzc2lnbmluZyB0aGUgdmFsdWUgYWdhaW4gaGVyZSBpcyByZWR1bmRhbnQsIGJ1dCB3ZSBoYXZlIHRvIGRvIGl0IGluIGNhc2UgaXQgd2FzXG4gICAgLy8gY2hhbmdlZCBpbnNpZGUgdGhlIGBjaGFuZ2VgIGxpc3RlbmVyIHdoaWNoIHdpbGwgY2F1c2UgdGhlIGlucHV0IHRvIGJlIG91dCBvZiBzeW5jLlxuICAgIGlmICh0aGlzLl9pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQgPSB0aGlzLmNoZWNrZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBQcmV2ZW50IGNsaWNrIGV2ZW50cyB0aGF0IGNvbWUgZnJvbSB0aGUgYDxsYWJlbC8+YCBlbGVtZW50IGZyb20gYnViYmxpbmcuIFRoaXMgcHJldmVudHMgdGhlXG4gICAqICBjbGljayBoYW5kbGVyIG9uIHRoZSBob3N0IGZyb20gdHJpZ2dlcmluZyB0d2ljZSB3aGVuIGNsaWNraW5nIG9uIHRoZSBgPGxhYmVsLz5gIGVsZW1lbnQuIEFmdGVyXG4gICAqICB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIGA8bGFiZWwvPmAgcHJvcGFnYXRlcywgdGhlIGJyb3dzZXJzIGRpc3BhdGNoZXMgY2xpY2sgb24gdGhlIGFzc29jaWF0ZWRcbiAgICogIGA8aW5wdXQvPmAuIEJ5IHByZXZlbnRpbmcgY2xpY2tzIG9uIHRoZSBsYWJlbCBieSBidWJibGluZywgd2UgZW5zdXJlIG9ubHkgb25lIGNsaWNrIGV2ZW50XG4gICAqICBidWJibGVzIHdoZW4gdGhlIGxhYmVsIGlzIGNsaWNrZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3ByZXZlbnRCdWJibGluZ0Zyb21MYWJlbChldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmIChcbiAgICAgICEhZXZlbnQudGFyZ2V0ICYmXG4gICAgICAhIXRoaXMuX2lucHV0RWxlbWVudCAmJlxuICAgICAgIShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNvbnRhaW5zKHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50KVxuICAgICkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG4iLCI8aW1wZGMtdG9nZ2xlXG4gIFtsYWJlbF09XCJsYWJlbFwiXG4gIFtkZXNjcmlwdGlvbl09XCJkZXNjcmlwdGlvblwiXG4gIFtpc1N3aXRjaF09XCJpc1N3aXRjaFwiXG4gIFtzd2l0Y2hJY29uc109XCJzd2l0Y2hJY29uc1wiXG4gIFtpbmxpbmVdPVwiaW5saW5lXCJcbiAgKGNsaWNrKT1cIl9wcmV2ZW50QnViYmxpbmdGcm9tTGFiZWwoJGV2ZW50KVwiPlxuICA8aW5wdXRcbiAgICAjbmF0aXZlSW5wdXRcbiAgICBpbXBkYy10b2dnbGUtaW5wdXRcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIGNsYXNzPVwiaW1wZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sXCJcbiAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJlcnJvclN0YXRlXCJcbiAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cIl9nZXRBcmlhQ2hlY2tlZCgpXCJcbiAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbYXR0ci50YWJpbmRleF09XCJ0YWJJbmRleFwiXG4gICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFtpbmRldGVybWluYXRlXT1cImluZGV0ZXJtaW5hdGVcIlxuICAgIChjaGFuZ2UpPVwiX29uSW50ZXJhY3Rpb25FdmVudCgkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwiX2hhbmRsZUNoZWNrQ2xpY2soKVwiXG4gICAgKGJsdXIpPVwiX29uQmx1cigpXCJcbiAgICAoZm9jdXMpPVwiX29uRm9jdXMoKVwiIC8+XG48L2ltcGRjLXRvZ2dsZT5cbiJdfQ==
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi9mb3JtLWZpZWxkL2NvbnRyb2xzL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvZm9ybS1maWVsZC9jb250cm9scy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUV2QixTQUFTLEVBRVQsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNKLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBT0wsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFFTCwwQkFBMEIsRUFDM0IsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQWlCLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxFLE9BQU8sRUFJTCxxQkFBcUIsRUFDckIsZUFBZSxFQUNmLGFBQWEsRUFDZCxNQUFNLGNBQWMsQ0FBQzs7Ozs7O0FBRXRCLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUI7SUFDRSwwQ0FBMEM7SUFDMUIsTUFBeUI7SUFDekMsc0ZBQXNGO0lBQ3RFLE9BQWdCO1FBRmhCLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBRXpCLFlBQU8sR0FBUCxPQUFPLENBQVM7SUFDL0IsQ0FBQztDQUNMO0FBRUQs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LEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUl2QyxFQUFFO3NCQURSLEtBQUs7Z0JBT0MsS0FBSztzQkFEWCxLQUFLO2dCQU9DLFdBQVc7c0JBRGpCLEtBQUs7Z0JBT0MsUUFBUTtzQkFEZCxLQUFLO2dCQU9DLFdBQVc7c0JBRGpCLEtBQUs7Z0JBT0MsTUFBTTtzQkFEWixLQUFLO2dCQU9LLE9BQU87c0JBRGpCLEtBQUs7Z0JBYUssYUFBYTtzQkFEdkIsS0FBSztnQkFnQkssUUFBUTtzQkFEbEIsS0FBSztnQkFnQlUsaUJBQWlCO3NCQURoQyxLQUFLO2dCQVFVLE1BQU07c0JBRnJCLE1BQU07Z0JBU1MsbUJBQW1CO3NCQURsQyxNQUFNO2dCQTZFSSxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gIE5nQ29udHJvbCxcbiAgTmdGb3JtLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEJvb2xlYW5JbnB1dCxcbiAgY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IEltcGRjRm9ybVJvb3QsIElNUERDX0ZPUk1fUk9PVCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBIYXNUYWJJbmRleCxcbiAgSUNhblVwZGF0ZUVycm9yU3RhdGUsXG4gIElIYXNFcnJvclN0YXRlLFxuICBJbXBkY0Zvcm1GaWVsZENvbnRyb2wsXG4gIG1peGluRXJyb3JTdGF0ZSxcbiAgbWl4aW5UYWJJbmRleFxufSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hDaGFuZ2VFdmVudCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKiBUaGUgc3BlY2lmaWMgY2hlY2tib3ggdGhhdCBjaGFuZ2VkLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzb3VyY2U6IENoZWNrYm94Q29tcG9uZW50LFxuICAgIC8qKiBXaGV0aGVyIHRoZSBjaGFuZ2VkIGNoZWNrYm94IHdhcyBjaGVja2VkIG9yIHVuY2hlY2tlZCBhdCB0aGUgdGltZSBvZiB0aGUgZXZlbnQuICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNoZWNrZWQ6IGJvb2xlYW5cbiAgKSB7fVxufVxuXG5hYnN0cmFjdCBjbGFzcyBDaGVja2JveENvbXBvbmVudEJhc2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBhYnN0cmFjdCBkaXNhYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgcHVibGljIF9mb3JtUm9vdDogSW1wZGNGb3JtUm9vdCxcbiAgICBwdWJsaWMgX3BhcmVudEZvcm06IE5nRm9ybSxcbiAgICBwdWJsaWMgX3BhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCB8IG51bGxcbiAgKSB7fVxufVxuXG5jb25zdCBfQ2hlY2tib3hDb21wb25lbnRNaXhpbkJhc2UgPSBtaXhpblRhYkluZGV4KFxuICBtaXhpbkVycm9yU3RhdGUoQ2hlY2tib3hDb21wb25lbnRCYXNlKVxuKTtcblxuLyoqXG4gKiBUaGUgYENoZWNrYm94Q29tcG9uZW50YCAoYDxpbXBkYy1jaGVja2JveGApIGlzIGFuIGlucHV0IHdpdGggYSBzaW1wbGUgYm9vbGVhbiB2YWx1ZSBhcyBhIGNoZWNrYm94IG9yIHRvZ2dsZSBzd2l0Y2guXG4gKiBUaGlzIGNvbXBvbmVudCBjYW4gYmUgdXNlZCB3aXRoaW4gYSBgRm9ybUZpZWxkQ29tcG9uZW50YCAoYDxpbXBkYy1mb3JtLWZpZWxkYCkuXG4gKiBUbyB1c2UsIGltcG9ydCBgQ2hlY2tib3hNb2R1bGVgIG9yIGFub3RoZXIgbW9kdWxlIHRoYXQgaW1wb3J0cyBhbmQgZXhwb3J0cyB0aGF0IG1vZHVsZSBmcm9tIGBAaW1wYXJ0bmVyL2Rlc2lnbi1jb21wb25lbnRzYC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaW1wZGMtY2hlY2tib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGVja2JveC5jb21wb25lbnQuc2NzcyddLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnaW1wZGMtY2hlY2tib3gnLFxuICAgICdbYXR0ci5pZF0nOiAnaWQnLFxuICAgICdbYXR0ci50YWJpbmRleF0nOiAnbnVsbCcsXG4gICAgJ1tjbGFzcy5pbXBkYy1jaGVja2JveC0tcmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAnW2NsYXNzLmltcGRjLWNoZWNrYm94LS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbY2xhc3MuaW1wZGMtY2hlY2tib3gtLWludmFsaWRdJzogJ2Vycm9yU3RhdGUnLFxuICAgICdbY2xhc3MuaW1wZGMtY2hlY2tib3gtLWlubGluZV0nOiAnaW5saW5lJ1xuICB9LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICBpbnB1dHM6IFsndGFiSW5kZXgnXSxcbiAgZXhwb3J0QXM6ICdpbXBkY0NoZWNrQ29udHJvbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBJbXBkY0Zvcm1GaWVsZENvbnRyb2wsXG4gICAgICB1c2VFeGlzdGluZzogQ2hlY2tib3hDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tib3hDb21wb25lbnRcbiAgZXh0ZW5kcyBfQ2hlY2tib3hDb21wb25lbnRNaXhpbkJhc2VcbiAgaW1wbGVtZW50c1xuICAgIERvQ2hlY2ssXG4gICAgT25EZXN0cm95LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvcixcbiAgICBIYXNUYWJJbmRleCxcbiAgICBJbXBkY0Zvcm1GaWVsZENvbnRyb2w8Ym9vbGVhbj4sXG4gICAgSUNhblVwZGF0ZUVycm9yU3RhdGUsXG4gICAgSUhhc0Vycm9yU3RhdGVcbntcbiAgcHJpdmF0ZSByZWFkb25seSBfdWlkOiBzdHJpbmcgPSBgaW1wZGMtY2hlY2tib3gtJHtuYW5vaWQoKX1gO1xuICBwcml2YXRlIF9jdmFPbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBfY3ZhT25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgQFZpZXdDaGlsZCgnbmF0aXZlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJvdGVjdGVkIF9pbnB1dEVsZW1lbnQ/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpZDogc3RyaW5nID0gdGhpcy5fdWlkO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBsYWJlbCB0ZXh0IGZvciB0aGUgY2hlY2tib3ggY29udHJvbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsYWJlbCA9ICcnO1xuXG4gIC8qKlxuICAgKiBUZXh0IHRvIHByb3ZpZGUgYWRkaXRpb25hbCBkZXNjcmlwdGlvbiBvciBjb250ZXh0IGZvciB0aGUgY2hlY2tib3ggY29udHJvbC4gRG9lcyBub3QgZGlzcGxheSB3aGVuIGBpbmxpbmVgIGlzIGB0cnVlYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZXNjcmlwdGlvbiA9ICcnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgZGlzcGxheXMgYXMgYSB0b2dnbGUgc3dpdGNoLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlzU3dpdGNoID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZW4gYGlzU3dpdGNoYCBpcyBgdHJ1ZWAsIHNldHMgd2hldGhlciBvciBub3QgdGhlIHRvZ2dsZSBzd2l0Y2ggdXNlcyBpY29ucy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzd2l0Y2hJY29ucyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY2hlY2tib3ggZGlzcGxheXMgaW5saW5lLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlubGluZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY2hlY2tib3ggaW5wdXQgaXMgY2hlY2tlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGNoZWNrZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl9jdmFPbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY2hlY2tib3ggaW5wdXQgaXMgaW4gYW4gYGluZGV0ZXJtaW5hdGVgIHN0YXRlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBpbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbmRldGVybWluYXRlO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5kZXRlcm1pbmF0ZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgY29uc3QgY29lcmNlZFZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWUodmFsdWUpO1xuICAgIGNvbnN0IGlzQ2hhbmdlID0gY29lcmNlZFZhbHVlICE9PSB0aGlzLl9pbmRldGVybWluYXRlO1xuICAgIHRoaXMuX2luZGV0ZXJtaW5hdGUgPSBjb2VyY2VkVmFsdWU7XG5cbiAgICBpZiAoaXNDaGFuZ2UpIHtcbiAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZS5lbWl0KHRoaXMuX2luZGV0ZXJtaW5hdGUpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9pbmRldGVybWluYXRlID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgY29uc3QgbmV3RGlzYWJsZWRTdGF0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eVZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChuZXdEaXNhYmxlZFN0YXRlICE9PSB0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSBuZXdEaXNhYmxlZFN0YXRlO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgb3ZlcnJpZGUgZXJyb3JTdGF0ZU1hdGNoZXIhOiBFcnJvclN0YXRlTWF0Y2hlcjtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuZXZlciB0aGUgY2hlY2tlZG5lc3Mgb2YgdGhlIGlucHV0IGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIHB1YmxpYyByZWFkb25seSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxDaGVja2JveENoYW5nZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxDaGVja2JveENoYW5nZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW5ldmVyIHRoZSBjb250cm9sIGVudGVycyBvciBsZWF2ZXMgYW4gYGluZGV0ZXJtaW5hdGVgIHN0YXRlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBpbmRldGVybWluYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBwdWJsaWMgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5pZCB8fCB0aGlzLl91aWR9LWlucHV0YDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAQXR0cmlidXRlKCd0YWJpbmRleCcpIHRhYkluZGV4OiBzdHJpbmcsXG4gICAgZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KElNUERDX0ZPUk1fUk9PVCkgZm9ybVJvb3Q6IEltcGRjRm9ybVJvb3QsXG4gICAgQE9wdGlvbmFsKCkgcGFyZW50Rm9ybTogTmdGb3JtLFxuICAgIEBPcHRpb25hbCgpIHBhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wgfCBudWxsXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyLFxuICAgICAgZm9ybVJvb3QsXG4gICAgICBwYXJlbnRGb3JtLFxuICAgICAgcGFyZW50Rm9ybUdyb3VwLFxuICAgICAgbmdDb250cm9sXG4gICAgKTtcblxuICAgIHRoaXMudGFiSW5kZXggPSBwYXJzZUludCh0YWJJbmRleCkgfHwgMDtcblxuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sPy5hZGRWYWxpZGF0b3JzKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgY29uc3QgbmdDb250cm9sID0gdGhpcy5uZ0NvbnRyb2w7XG5cbiAgICBpZiAoIW5nQ29udHJvbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKiBJbXBkY0Zvcm1GaWVsZENvbnRyb2wgKi9cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eVZhbHVlKHZhbHVlKTtcblxuICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfdmFsdWUgPSBmYWxzZTtcblxuICBwdWJsaWMgZ2V0IGZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvY3VzZWQ7XG4gIH1cbiAgcHJpdmF0ZSBfZm9jdXNlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHNldCByZXF1aXJlZG5lc3Mgb2YgY29udHJvbCBpbiBhIHRlbXBsYXRlLWJhc2VkIG1hbm5lcjsgbm90IG5lY2Vzc2FyeSB3aGVuIHVzaW5nIHRoZVxuICAgKiBBbmd1bGFyIHJlYWN0aXZlIGZvcm1zIEFQSSBhbmQgJ3JlcXVpcmVkJyBvciBgcmVxdWlyZWRUcnVlYCB2YWxpZGF0b3JzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fcmVxdWlyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5nQ29udHJvbD8uY29udHJvbDtcbiAgICBpZiAoY29udHJvbCkge1xuICAgICAgY29uc3QgaGFzUmVxdWlyZWQgPSBjb250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgIGNvbnN0IGhhc1JlcXVpcmVkVHJ1ZSA9IGNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWRUcnVlKTtcblxuICAgICAgcmV0dXJuIGhhc1JlcXVpcmVkIHx8IGhhc1JlcXVpcmVkVHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHlWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG4gIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyByZWFkb25seSBjb250cm9sVHlwZTogc3RyaW5nID0gJ2ltcGRjLWNoZWNrJztcbiAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRzQWZmaXhlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qIENvbnRyb2xWYWx1ZUFjY2Vzc29yICovXG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSAhIXZhbHVlO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fY3ZhT25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4ge30pOiB2b2lkIHtcbiAgICB0aGlzLl9jdmFPblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qIFZhbGlkYXRvciAqL1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyB2YWxpZGF0ZSgpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuICF0aGlzLmRpc2FibGVkICYmIHRoaXMucmVxdWlyZWQgJiYgIXRoaXMudmFsdWVcbiAgICAgID8geyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgICA6IG51bGw7XG4gIH1cblxuICAvKiBJbnRlcm5hbHMgKi9cbiAgcHJvdGVjdGVkIF9nZXRBcmlhQ2hlY2tlZCgpOiAndHJ1ZScgfCAnZmFsc2UnIHwgJ21peGVkJyB7XG4gICAgaWYgKHRoaXMuY2hlY2tlZCkge1xuICAgICAgcmV0dXJuICd0cnVlJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbmRldGVybWluYXRlID8gJ21peGVkJyA6ICdmYWxzZSc7XG4gIH1cblxuICBwcm90ZWN0ZWQgX29uQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLl9mb2N1c2VkID0gZmFsc2U7XG4gICAgLy8gV2hlbiBhIGZvY3VzZWQgZWxlbWVudCBiZWNvbWVzIGRpc2FibGVkLCB0aGUgYnJvd3NlciAqaW1tZWRpYXRlbHkqIGZpcmVzIGEgYmx1ciBldmVudC5cbiAgICAvLyBBbmd1bGFyIGRvZXMgbm90IGV4cGVjdCBldmVudHMgdG8gYmUgcmFpc2VkIGR1cmluZyBjaGFuZ2UgZGV0ZWN0aW9uLCBzbyBhbnkgc3RhdGUgY2hhbmdlXG4gICAgLy8gKHN1Y2ggYXMgYSBmb3JtIGNvbnRyb2wncyAnbmctdG91Y2hlZCcpIHdpbGwgY2F1c2UgYSBjaGFuZ2VkLWFmdGVyLWNoZWNrZWQgZXJyb3IuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE3NzkzLiBUbyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBkZWZlclxuICAgIC8vIHRlbGxpbmcgdGhlIGZvcm0gY29udHJvbCBpdCBoYXMgYmVlbiB0b3VjaGVkIHVudGlsIHRoZSBuZXh0IHRpY2suXG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jdmFPblRvdWNoZWQoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9vbkZvY3VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fZm9jdXNlZCA9IHRydWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9oYW5kbGVDaGVja0NsaWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHRoaXMuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2UuZW1pdCh0aGlzLl9pbmRldGVybWluYXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hlY2tlZCA9ICF0aGlzLmNoZWNrZWQ7XG5cbiAgICAgIHRoaXMuX2VtaXRDaGFuZ2VFdmVudHMoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX29uSW50ZXJhY3Rpb25FdmVudChldmVudDogRXZlbnQpIHtcbiAgICAvLyBXZSBhbHdheXMgaGF2ZSB0byBzdG9wIHByb3BhZ2F0aW9uIG9uIHRoZSBjaGFuZ2UgZXZlbnQuXG4gICAgLy8gT3RoZXJ3aXNlIHRoZSBjaGFuZ2UgZXZlbnQsIGZyb20gdGhlIGlucHV0IGVsZW1lbnQsIHdpbGwgYnViYmxlIHVwIGFuZFxuICAgIC8vIGVtaXQgaXRzIGV2ZW50IG9iamVjdCB0byB0aGUgYGNoYW5nZWAgb3V0cHV0LlxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZW1pdENoYW5nZUV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9jdmFPbkNoYW5nZSh0aGlzLmNoZWNrZWQpO1xuICAgIHRoaXMuY2hhbmdlLmVtaXQobmV3IENoZWNrYm94Q2hhbmdlRXZlbnQodGhpcywgdGhpcy5jaGVja2VkKSk7XG5cbiAgICAvLyBBc3NpZ25pbmcgdGhlIHZhbHVlIGFnYWluIGhlcmUgaXMgcmVkdW5kYW50LCBidXQgd2UgaGF2ZSB0byBkbyBpdCBpbiBjYXNlIGl0IHdhc1xuICAgIC8vIGNoYW5nZWQgaW5zaWRlIHRoZSBgY2hhbmdlYCBsaXN0ZW5lciB3aGljaCB3aWxsIGNhdXNlIHRoZSBpbnB1dCB0byBiZSBvdXQgb2Ygc3luYy5cbiAgICBpZiAodGhpcy5faW5wdXRFbGVtZW50KSB7XG4gICAgICB0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkID0gdGhpcy5jaGVja2VkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgUHJldmVudCBjbGljayBldmVudHMgdGhhdCBjb21lIGZyb20gdGhlIGA8bGFiZWwvPmAgZWxlbWVudCBmcm9tIGJ1YmJsaW5nLiBUaGlzIHByZXZlbnRzIHRoZVxuICAgKiAgY2xpY2sgaGFuZGxlciBvbiB0aGUgaG9zdCBmcm9tIHRyaWdnZXJpbmcgdHdpY2Ugd2hlbiBjbGlja2luZyBvbiB0aGUgYDxsYWJlbC8+YCBlbGVtZW50LiBBZnRlclxuICAgKiAgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSBgPGxhYmVsLz5gIHByb3BhZ2F0ZXMsIHRoZSBicm93c2VycyBkaXNwYXRjaGVzIGNsaWNrIG9uIHRoZSBhc3NvY2lhdGVkXG4gICAqICBgPGlucHV0Lz5gLiBCeSBwcmV2ZW50aW5nIGNsaWNrcyBvbiB0aGUgbGFiZWwgYnkgYnViYmxpbmcsIHdlIGVuc3VyZSBvbmx5IG9uZSBjbGljayBldmVudFxuICAgKiAgYnViYmxlcyB3aGVuIHRoZSBsYWJlbCBpcyBjbGlja2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9wcmV2ZW50QnViYmxpbmdGcm9tTGFiZWwoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoXG4gICAgICAhIWV2ZW50LnRhcmdldCAmJlxuICAgICAgISF0aGlzLl9pbnB1dEVsZW1lbnQgJiZcbiAgICAgICEoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jb250YWlucyh0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudClcbiAgICApIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxufVxuIiwiPGltcGRjLXRvZ2dsZVxuICBbbGFiZWxdPVwibGFiZWxcIlxuICBbZGVzY3JpcHRpb25dPVwiZGVzY3JpcHRpb25cIlxuICBbaXNTd2l0Y2hdPVwiaXNTd2l0Y2hcIlxuICBbc3dpdGNoSWNvbnNdPVwic3dpdGNoSWNvbnNcIlxuICBbaW5saW5lXT1cImlubGluZVwiXG4gIChjbGljayk9XCJfcHJldmVudEJ1YmJsaW5nRnJvbUxhYmVsKCRldmVudClcIj5cbiAgPGlucHV0XG4gICAgI25hdGl2ZUlucHV0XG4gICAgaW1wZGMtdG9nZ2xlLWlucHV0XG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICBjbGFzcz1cImltcGRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbFwiXG4gICAgW2NsYXNzLmlzLWludmFsaWRdPVwiZXJyb3JTdGF0ZVwiXG4gICAgW2lkXT1cImlucHV0SWRcIlxuICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJfZ2V0QXJpYUNoZWNrZWQoKVwiXG4gICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW2F0dHIudGFiaW5kZXhdPVwidGFiSW5kZXhcIlxuICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbaW5kZXRlcm1pbmF0ZV09XCJpbmRldGVybWluYXRlXCJcbiAgICAoY2hhbmdlKT1cIl9vbkludGVyYWN0aW9uRXZlbnQoJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cIl9oYW5kbGVDaGVja0NsaWNrKClcIlxuICAgIChibHVyKT1cIl9vbkJsdXIoKVwiXG4gICAgKGZvY3VzKT1cIl9vbkZvY3VzKClcIiAvPlxuPC9pbXBkYy10b2dnbGU+XG4iXX0=
@@ -4,11 +4,11 @@ import { ToggleModule } from '../shared';
4
4
  import { CheckboxComponent } from './checkbox.component';
5
5
  import * as i0 from "@angular/core";
6
6
  export class CheckboxModule {
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: CheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.1", ngImport: i0, type: CheckboxModule, declarations: [CheckboxComponent], imports: [CommonModule, ToggleModule], exports: [CheckboxComponent] }); }
9
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: CheckboxModule, imports: [CommonModule, ToggleModule] }); }
7
10
  }
8
- CheckboxModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CheckboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- CheckboxModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: CheckboxModule, declarations: [CheckboxComponent], imports: [CommonModule, ToggleModule], exports: [CheckboxComponent] });
10
- CheckboxModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CheckboxModule, imports: [CommonModule, ToggleModule] });
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CheckboxModule, decorators: [{
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: CheckboxModule, decorators: [{
12
12
  type: NgModule,
13
13
  args: [{
14
14
  declarations: [CheckboxComponent],
@@ -16,4 +16,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
16
16
  exports: [CheckboxComponent]
17
17
  }]
18
18
  }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi9mb3JtLWZpZWxkL2NvbnRyb2xzL2NoZWNrYm94L2NoZWNrYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQU96RCxNQUFNLE9BQU8sY0FBYzs7NEdBQWQsY0FBYzs2R0FBZCxjQUFjLGlCQUpWLGlCQUFpQixhQUN0QixZQUFZLEVBQUUsWUFBWSxhQUMxQixpQkFBaUI7NkdBRWhCLGNBQWMsWUFIZixZQUFZLEVBQUUsWUFBWTs0RkFHekIsY0FBYztrQkFMMUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDakMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQztvQkFDckMsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7aUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2dnbGVNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL2NoZWNrYm94LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0NoZWNrYm94Q29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVG9nZ2xlTW9kdWxlXSxcbiAgZXhwb3J0czogW0NoZWNrYm94Q29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja2JveE1vZHVsZSB7fVxuIl19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi9mb3JtLWZpZWxkL2NvbnRyb2xzL2NoZWNrYm94L2NoZWNrYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQU96RCxNQUFNLE9BQU8sY0FBYzs4R0FBZCxjQUFjOytHQUFkLGNBQWMsaUJBSlYsaUJBQWlCLGFBQ3RCLFlBQVksRUFBRSxZQUFZLGFBQzFCLGlCQUFpQjsrR0FFaEIsY0FBYyxZQUhmLFlBQVksRUFBRSxZQUFZOzsyRkFHekIsY0FBYztrQkFMMUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDakMsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQztvQkFDckMsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7aUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2dnbGVNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuL2NoZWNrYm94LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0NoZWNrYm94Q29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVG9nZ2xlTW9kdWxlXSxcbiAgZXhwb3J0czogW0NoZWNrYm94Q29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja2JveE1vZHVsZSB7fVxuIl19
@@ -0,0 +1,233 @@
1
+ /* eslint-disable @angular-eslint/no-conflicting-lifecycle */
2
+ import { Directive, Inject, Input, Optional, Self } from '@angular/core';
3
+ import { Validators } from '@angular/forms';
4
+ import { nanoid } from 'nanoid';
5
+ import { Subject } from 'rxjs';
6
+ import { coerceBooleanPropertyValue } from '../../../../utilities';
7
+ import { IMPDC_FORM_ROOT } from '../../directives';
8
+ import { mixinErrorState } from '../../shared';
9
+ import { ImpdcFormFieldControl } from '../../shared/form-field-control';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/forms";
12
+ import * as i2 from "../../services";
13
+ const IMPDC_INPUT_INVALID_TYPES = [
14
+ 'button',
15
+ 'checkbox',
16
+ 'file',
17
+ 'hidden',
18
+ 'image',
19
+ 'radio',
20
+ 'range',
21
+ 'reset',
22
+ 'submit'
23
+ ];
24
+ /** @docs-private */
25
+ export function getInputUnsupportedTypeError(type) {
26
+ return Error(`Input type "${type}" isn't supported by impdcInput.`);
27
+ }
28
+ const _InputDirectiveBase = mixinErrorState(class {
29
+ constructor(_defaultErrorStateMatcher, _formRoot, _parentForm, _parentFormGroup, ngControl) {
30
+ this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
31
+ this._formRoot = _formRoot;
32
+ this._parentForm = _parentForm;
33
+ this._parentFormGroup = _parentFormGroup;
34
+ this.ngControl = ngControl;
35
+ this.stateChanges = new Subject();
36
+ }
37
+ });
38
+ /**
39
+ * The `InputDirective` (`<input impdcInput`, `<textarea impdcInput` or `<select impdcInput`) is a directive for text inputs.
40
+ * With this directive, the input, textarea, and select can be used within a `FormFieldComponent` (`<impdc-form-field`).
41
+ * To use, import `ImpdcFormsModule` or another module that imports and exports that module from `@impartner/design-components`.
42
+ */
43
+ export class InputDirective extends _InputDirectiveBase {
44
+ get disabled() {
45
+ return this._disabled;
46
+ }
47
+ set disabled(value) {
48
+ this._disabled = coerceBooleanPropertyValue(value);
49
+ if (this.focused) {
50
+ this.focused = false;
51
+ this.stateChanges.next();
52
+ }
53
+ }
54
+ get id() {
55
+ return this._id;
56
+ }
57
+ set id(value) {
58
+ this._id = value || this._uid;
59
+ }
60
+ /**
61
+ * Supports most standard `<input [type]>` attribute values. Does not support `button`, `checkbox`,
62
+ * `file`, `hidden`, `image`, `radio`, `range`, `reset`, or `button`, and does not apply to
63
+ * `<textarea>` or `<select>` elements.
64
+ *
65
+ * @default text
66
+ */
67
+ get type() {
68
+ return this._type;
69
+ }
70
+ set type(value) {
71
+ if (!this._typeIsValid(value)) {
72
+ throw getInputUnsupportedTypeError(value);
73
+ }
74
+ this._type = value || 'text';
75
+ // Sync with native input element.
76
+ if (!this._isTextarea) {
77
+ this._elementRef.nativeElement.type = this._type;
78
+ }
79
+ }
80
+ /**
81
+ * Used to set requiredness of control in a template-based manner;
82
+ * not necessary when using the Angular reactive forms API and `required` validator.
83
+ */
84
+ get required() {
85
+ return (this._required ??
86
+ this.ngControl?.control?.hasValidator(Validators.required) ??
87
+ false);
88
+ }
89
+ set required(value) {
90
+ this._required = coerceBooleanPropertyValue(value);
91
+ this.stateChanges.next();
92
+ }
93
+ /**
94
+ * Used to put the control in a non-interactive readonly state; only supports `<input>` and
95
+ * `<textarea>` elements.
96
+ *
97
+ * To see the difference between `readonly` and `disabled`, refer to [MDN's documentation](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/readonly).
98
+ */
99
+ get readonly() {
100
+ return this._readonly;
101
+ }
102
+ set readonly(value) {
103
+ this._readonly = coerceBooleanPropertyValue(value);
104
+ }
105
+ get value() {
106
+ return this._inputValueAccessor.value;
107
+ }
108
+ set value(value) {
109
+ if (value !== this.value) {
110
+ this._inputValueAccessor.value = value;
111
+ this.stateChanges.next();
112
+ }
113
+ }
114
+ constructor(_elementRef, ngControl, _formRoot, _parentForm, _parentFormGroup, _defaultErrorStateMatcher) {
115
+ super(_defaultErrorStateMatcher, _formRoot, _parentForm, _parentFormGroup, ngControl);
116
+ this._elementRef = _elementRef;
117
+ this._uid = `impdc-input-${nanoid()}`;
118
+ this.focused = false;
119
+ this.controlType = 'impdc-input';
120
+ this.supportsAffixes = true;
121
+ this._disabled = false;
122
+ this._type = 'text';
123
+ this._readonly = false;
124
+ const { nativeElement } = this._elementRef;
125
+ const nodeName = nativeElement.nodeName.toLowerCase();
126
+ this._inputValueAccessor = nativeElement;
127
+ this.id = this.id;
128
+ this._isSelect = nodeName === 'select';
129
+ this._isTextarea = nodeName === 'textarea';
130
+ if (this._isSelect) {
131
+ this.controlType = nativeElement.multiple
132
+ ? 'impdc-native-select-multiple'
133
+ : 'impdc-native-select';
134
+ }
135
+ }
136
+ /** @ignore */
137
+ ngDoCheck() {
138
+ if (this.ngControl) {
139
+ this.updateErrorState();
140
+ if (this.ngControl.disabled !== null &&
141
+ this.ngControl.disabled !== this.disabled) {
142
+ this.disabled = this.ngControl.disabled;
143
+ this.stateChanges.next();
144
+ }
145
+ }
146
+ }
147
+ /** @ignore */
148
+ ngOnChanges() {
149
+ this.stateChanges.next();
150
+ }
151
+ /** @ignore */
152
+ ngOnDestroy() {
153
+ this.stateChanges.complete();
154
+ }
155
+ _focusChanged(isFocused) {
156
+ if (isFocused !== this.focused) {
157
+ this.focused = isFocused;
158
+ this.stateChanges.next();
159
+ }
160
+ }
161
+ _typeIsValid(inputType) {
162
+ return IMPDC_INPUT_INVALID_TYPES.indexOf(inputType) === -1;
163
+ }
164
+ _onInput() {
165
+ // This is a noop function and is used to let Angular know whenever the value changes.
166
+ // Angular will run a new change detection each time the `input` event has been dispatched.
167
+ // It's necessary that Angular recognizes the value change, because when Angular forms
168
+ // aren't used, the placeholder won't recognize the value changes and will not disappear.
169
+ // Listening to the input event wouldn't be necessary when the input is using the
170
+ // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.
171
+ }
172
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: InputDirective, deps: [{ token: i0.ElementRef }, { token: i1.NgControl, optional: true, self: true }, { token: IMPDC_FORM_ROOT, optional: true }, { token: i1.NgForm, optional: true }, { token: i1.FormGroupDirective, optional: true }, { token: i2.ErrorStateMatcher }], target: i0.ɵɵFactoryTarget.Directive }); }
173
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.1", type: InputDirective, selector: "input[impdcInput], textarea[impdcInput], select[impdcNativeSelect]", inputs: { disabled: "disabled", id: "id", type: "type", required: "required", readonly: "readonly", errorStateMatcher: "errorStateMatcher", value: "value" }, host: { listeners: { "focus": "_focusChanged(true)", "blur": "_focusChanged(false)", "input": "_onInput()" }, properties: { "id": "id", "disabled": "disabled", "required": "required", "attr.id": "id", "attr.readonly": "readonly && !_isSelect || null", "attr.aria-required": "required.toString()", "attr.aria-disabled": "disabled.toString()", "attr.aria-invalid": "errorState", "class.form-control": "!_isSelect", "class.form-control-color": "type === \"color\"", "class.form-select": "_isSelect", "class.impdc-form-field-control": "true", "class.is-invalid": "errorState", "class.impdc-input--invalid": "errorState", "class.impdc-input--disabled": "disabled", "class.impdc-input--required": "required" }, classAttribute: "impdc-input" }, providers: [{ provide: ImpdcFormFieldControl, useExisting: InputDirective }], exportAs: ["impdcInput"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
174
+ }
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: InputDirective, decorators: [{
176
+ type: Directive,
177
+ args: [{
178
+ selector: 'input[impdcInput], textarea[impdcInput], select[impdcNativeSelect]',
179
+ exportAs: 'impdcInput',
180
+ // eslint-disable-next-line @angular-eslint/no-host-metadata-property
181
+ host: {
182
+ class: 'impdc-input',
183
+ '[id]': 'id',
184
+ '[disabled]': 'disabled',
185
+ '[required]': 'required',
186
+ '[attr.id]': 'id',
187
+ '[attr.readonly]': 'readonly && !_isSelect || null',
188
+ '[attr.aria-required]': 'required.toString()',
189
+ '[attr.aria-disabled]': 'disabled.toString()',
190
+ '[attr.aria-invalid]': 'errorState',
191
+ '[class.form-control]': '!_isSelect',
192
+ '[class.form-control-color]': 'type === "color"',
193
+ '[class.form-select]': '_isSelect',
194
+ '[class.impdc-form-field-control]': 'true',
195
+ '[class.is-invalid]': 'errorState',
196
+ '[class.impdc-input--invalid]': 'errorState',
197
+ '[class.impdc-input--disabled]': 'disabled',
198
+ '[class.impdc-input--required]': 'required',
199
+ '(focus)': '_focusChanged(true)',
200
+ '(blur)': '_focusChanged(false)',
201
+ '(input)': '_onInput()'
202
+ },
203
+ providers: [{ provide: ImpdcFormFieldControl, useExisting: InputDirective }]
204
+ }]
205
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
206
+ type: Optional
207
+ }, {
208
+ type: Self
209
+ }] }, { type: undefined, decorators: [{
210
+ type: Optional
211
+ }, {
212
+ type: Inject,
213
+ args: [IMPDC_FORM_ROOT]
214
+ }] }, { type: i1.NgForm, decorators: [{
215
+ type: Optional
216
+ }] }, { type: i1.FormGroupDirective, decorators: [{
217
+ type: Optional
218
+ }] }, { type: i2.ErrorStateMatcher }], propDecorators: { disabled: [{
219
+ type: Input
220
+ }], id: [{
221
+ type: Input
222
+ }], type: [{
223
+ type: Input
224
+ }], required: [{
225
+ type: Input
226
+ }], readonly: [{
227
+ type: Input
228
+ }], errorStateMatcher: [{
229
+ type: Input
230
+ }], value: [{
231
+ type: Input
232
+ }] } });
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi9mb3JtLWZpZWxkL2NvbnRyb2xzL2lucHV0L2lucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2REFBNkQ7QUFDN0QsT0FBTyxFQUNMLFNBQVMsRUFHVCxNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBRUwsMEJBQTBCLEVBQzNCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFpQixlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRSxPQUFPLEVBR0wsZUFBZSxFQUNoQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQUV4RSxNQUFNLHlCQUF5QixHQUFHO0lBQ2hDLFFBQVE7SUFDUixVQUFVO0lBQ1YsTUFBTTtJQUNOLFFBQVE7SUFDUixPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0lBQ1AsUUFBUTtDQUNULENBQUM7QUFFRixvQkFBb0I7QUFDcEIsTUFBTSxVQUFVLDRCQUE0QixDQUFDLElBQVk7SUFDdkQsT0FBTyxLQUFLLENBQUMsZUFBZSxJQUFJLGtDQUFrQyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUN6QztJQUdFLFlBQ1MseUJBQTRDLEVBQzVDLFNBQXdCLEVBQ3hCLFdBQW1CLEVB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LFlBQVksRUFBRSxVQUFVO3dCQUN4QixZQUFZLEVBQUUsVUFBVTt3QkFDeEIsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLGlCQUFpQixFQUFFLGdDQUFnQzt3QkFDbkQsc0JBQXNCLEVBQUUscUJBQXFCO3dCQUM3QyxzQkFBc0IsRUFBRSxxQkFBcUI7d0JBQzdDLHFCQUFxQixFQUFFLFlBQVk7d0JBQ25DLHNCQUFzQixFQUFFLFlBQVk7d0JBQ3BDLDRCQUE0QixFQUFFLGtCQUFrQjt3QkFDaEQscUJBQXFCLEVBQUUsV0FBVzt3QkFDbEMsa0NBQWtDLEVBQUUsTUFBTTt3QkFDMUMsb0JBQW9CLEVBQUUsWUFBWTt3QkFDbEMsOEJBQThCLEVBQUUsWUFBWTt3QkFDNUMsK0JBQStCLEVBQUUsVUFBVTt3QkFDM0MsK0JBQStCLEVBQUUsVUFBVTt3QkFDM0MsU0FBUyxFQUFFLHFCQUFxQjt3QkFDaEMsUUFBUSxFQUFFLHNCQUFzQjt3QkFDaEMsU0FBUyxFQUFFLFlBQVk7cUJBQ3hCO29CQUNELFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFdBQVcsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDN0U7OzBCQXlISSxRQUFROzswQkFBSSxJQUFJOzswQkFDaEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlOzswQkFDbEMsUUFBUTs7MEJBQ1IsUUFBUTt5RUFyR1AsUUFBUTtzQkFEWCxLQUFLO2dCQWVGLEVBQUU7c0JBREwsS0FBSztnQkFpQkYsSUFBSTtzQkFEUCxLQUFLO2dCQXVCSyxRQUFRO3NCQURsQixLQUFLO2dCQXFCSyxRQUFRO3NCQURsQixLQUFLO2dCQVVVLGlCQUFpQjtzQkFEaEMsS0FBSztnQkFJRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlICovXG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgTmdDb250cm9sLFxuICBOZ0Zvcm0sXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEJvb2xlYW5JbnB1dCxcbiAgY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWVcbn0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IEltcGRjRm9ybVJvb3QsIElNUERDX0ZPUk1fUk9PVCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBJQ2FuVXBkYXRlRXJyb3JTdGF0ZSxcbiAgSUhhc0Vycm9yU3RhdGUsXG4gIG1peGluRXJyb3JTdGF0ZVxufSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgSW1wZGNGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0tZmllbGQtY29udHJvbCc7XG5cbmNvbnN0IElNUERDX0lOUFVUX0lOVkFMSURfVFlQRVMgPSBbXG4gICdidXR0b24nLFxuICAnY2hlY2tib3gnLFxuICAnZmlsZScsXG4gICdoaWRkZW4nLFxuICAnaW1hZ2UnLFxuICAncmFkaW8nLFxuICAncmFuZ2UnLFxuICAncmVzZXQnLFxuICAnc3VibWl0J1xuXTtcblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dFVuc3VwcG9ydGVkVHlwZUVycm9yKHR5cGU6IHN0cmluZyk6IEVycm9yIHtcbiAgcmV0dXJuIEVycm9yKGBJbnB1dCB0eXBlIFwiJHt0eXBlfVwiIGlzbid0IHN1cHBvcnRlZCBieSBpbXBkY0lucHV0LmApO1xufVxuXG5jb25zdCBfSW5wdXREaXJlY3RpdmVCYXNlID0gbWl4aW5FcnJvclN0YXRlKFxuICBjbGFzcyB7XG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgIHB1YmxpYyBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcbiAgICAgIHB1YmxpYyBfZm9ybVJvb3Q6IEltcGRjRm9ybVJvb3QsXG4gICAgICBwdWJsaWMgX3BhcmVudEZvcm06IE5nRm9ybSxcbiAgICAgIHB1YmxpYyBfcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgICBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wgfCBudWxsXG4gICAgKSB7fVxuICB9XG4pO1xuXG4vKipcbiAqIFRoZSBgSW5wdXREaXJlY3RpdmVgIChgPGlucHV0IGltcGRjSW5wdXRgLCBgPHRleHRhcmVhIGltcGRjSW5wdXRgIG9yIGA8c2VsZWN0IGltcGRjSW5wdXRgKSBpcyBhIGRpcmVjdGl2ZSBmb3IgdGV4dCBpbnB1dHMuXG4gKiBXaXRoIHRoaXMgZGlyZWN0aXZlLCB0aGUgaW5wdXQsIHRleHRhcmVhLCBhbmQgc2VsZWN0IGNhbiBiZSB1c2VkIHdpdGhpbiBhIGBGb3JtRmllbGRDb21wb25lbnRgIChgPGltcGRjLWZvcm0tZmllbGRgKS5cbiAqIFRvIHVzZSwgaW1wb3J0IGBJbXBkY0Zvcm1zTW9kdWxlYCBvciBhbm90aGVyIG1vZHVsZSB0aGF0IGltcG9ydHMgYW5kIGV4cG9ydHMgdGhhdCBtb2R1bGUgZnJvbSBgQGltcGFydG5lci9kZXNpZ24tY29tcG9uZW50c2AuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjpcbiAgICAnaW5wdXRbaW1wZGNJbnB1dF0sIHRleHRhcmVhW2ltcGRjSW5wdXRdLCBzZWxlY3RbaW1wZGNOYXRpdmVTZWxlY3RdJyxcbiAgZXhwb3J0QXM6ICdpbXBkY0lucHV0JyxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1ob3N0LW1ldGFkYXRhLXByb3BlcnR5XG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2ltcGRjLWlucHV0JyxcbiAgICAnW2lkXSc6ICdpZCcsXG4gICAgJ1tkaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbcmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICAnW2F0dHIucmVhZG9ubHldJzogJ3JlYWRvbmx5ICYmICFfaXNTZWxlY3QgfHwgbnVsbCcsXG4gICAgJ1thdHRyLmFyaWEtcmVxdWlyZWRdJzogJ3JlcXVpcmVkLnRvU3RyaW5nKCknLFxuICAgICdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdkaXNhYmxlZC50b1N0cmluZygpJyxcbiAgICAnW2F0dHIuYXJpYS1pbnZhbGlkXSc6ICdlcnJvclN0YXRlJyxcbiAgICAnW2NsYXNzLmZvcm0tY29udHJvbF0nOiAnIV9pc1NlbGVjdCcsXG4gICAgJ1tjbGFzcy5mb3JtLWNvbnRyb2wtY29sb3JdJzogJ3R5cGUgPT09IFwiY29sb3JcIicsXG4gICAgJ1tjbGFzcy5mb3JtLXNlbGVjdF0nOiAnX2lzU2VsZWN0JyxcbiAgICAnW2NsYXNzLmltcGRjLWZvcm0tZmllbGQtY29udHJvbF0nOiAndHJ1ZScsXG4gICAgJ1tjbGFzcy5pcy1pbnZhbGlkXSc6ICdlcnJvclN0YXRlJyxcbiAgICAnW2NsYXNzLmltcGRjLWlucHV0LS1pbnZhbGlkXSc6ICdlcnJvclN0YXRlJyxcbiAgICAnW2NsYXNzLmltcGRjLWlucHV0LS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbY2xhc3MuaW1wZGMtaW5wdXQtLXJlcXVpcmVkXSc6ICdyZXF1aXJlZCcsXG4gICAgJyhmb2N1cyknOiAnX2ZvY3VzQ2hhbmdlZCh0cnVlKScsXG4gICAgJyhibHVyKSc6ICdfZm9jdXNDaGFuZ2VkKGZhbHNlKScsXG4gICAgJyhpbnB1dCknOiAnX29uSW5wdXQoKSdcbiAgfSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJbXBkY0Zvcm1GaWVsZENvbnRyb2wsIHVzZUV4aXN0aW5nOiBJbnB1dERpcmVjdGl2ZSB9XVxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dERpcmVjdGl2ZVxuICBleHRlbmRzIF9JbnB1dERpcmVjdGl2ZUJhc2VcbiAgaW1wbGVtZW50c1xuICAgIEltcGRjRm9ybUZpZWxkQ29udHJvbDxhbnk+LFxuICAgIElDYW5VcGRhdGVFcnJvclN0YXRlLFxuICAgIElIYXNFcnJvclN0YXRlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgRG9DaGVja1xue1xuICBwcml2YXRlIF9pbnB1dFZhbHVlQWNjZXNzb3I6IHsgdmFsdWU6IGFueSB9O1xuXG4gIHByb3RlY3RlZCBfdWlkID0gYGltcGRjLWlucHV0LSR7bmFub2lkKCl9YDtcbiAgcHJvdGVjdGVkIF9pc1NlbGVjdDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIF9pc1RleHRhcmVhOiBib29sZWFuO1xuXG4gIHB1YmxpYyBmb2N1c2VkID0gZmFsc2U7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRyb2xUeXBlPzogc3RyaW5nID0gJ2ltcGRjLWlucHV0JztcbiAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRzQWZmaXhlczogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5VmFsdWUodmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cbiAgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pZCA9IHZhbHVlIHx8IHRoaXMuX3VpZDtcbiAgfVxuICBwcm90ZWN0ZWQgX2lkITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdXBwb3J0cyBtb3N0IHN0YW5kYXJkIGA8aW5wdXQgW3R5cGVdPmAgYXR0cmlidXRlIHZhbHVlcy4gRG9lcyBub3Qgc3VwcG9ydCBgYnV0dG9uYCwgYGNoZWNrYm94YCxcbiAgICogYGZpbGVgLCBgaGlkZGVuYCwgYGltYWdlYCwgYHJhZGlvYCwgYHJhbmdlYCwgYHJlc2V0YCwgb3IgYGJ1dHRvbmAsIGFuZCBkb2VzIG5vdCBhcHBseSB0b1xuICAgKiBgPHRleHRhcmVhPmAgb3IgYDxzZWxlY3Q+YCBlbGVtZW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGV4dFxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuICBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLl90eXBlSXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIHRocm93IGdldElucHV0VW5zdXBwb3J0ZWRUeXBlRXJyb3IodmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuX3R5cGUgPSB2YWx1ZSB8fCAndGV4dCc7XG5cbiAgICAvLyBTeW5jIHdpdGggbmF0aXZlIGlucHV0IGVsZW1lbnQuXG4gICAgaWYgKCF0aGlzLl9pc1RleHRhcmVhKSB7XG4gICAgICAodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnR5cGUgPSB0aGlzLl90eXBlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgX3R5cGUgPSAndGV4dCc7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IHJlcXVpcmVkbmVzcyBvZiBjb250cm9sIGluIGEgdGVtcGxhdGUtYmFzZWQgbWFubmVyO1xuICAgKiBub3QgbmVjZXNzYXJ5IHdoZW4gdXNpbmcgdGhlIEFuZ3VsYXIgcmVhY3RpdmUgZm9ybXMgQVBJIGFuZCBgcmVxdWlyZWRgIHZhbGlkYXRvci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX3JlcXVpcmVkID8/XG4gICAgICB0aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpID8/XG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHlWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG4gIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIHB1dCB0aGUgY29udHJvbCBpbiBhIG5vbi1pbnRlcmFjdGl2ZSByZWFkb25seSBzdGF0ZTsgb25seSBzdXBwb3J0cyBgPGlucHV0PmAgYW5kXG4gICAqIGA8dGV4dGFyZWE+YCBlbGVtZW50cy5cbiAgICpcbiAgICogVG8gc2VlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYHJlYWRvbmx5YCBhbmQgYGRpc2FibGVkYCwgcmVmZXIgdG8gW01ETidzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQXR0cmlidXRlcy9yZWFkb25seSkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHJlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkb25seTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlYWRvbmx5KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9yZWFkb25seSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eVZhbHVlKHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIF9yZWFkb25seSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvdmVycmlkZSBlcnJvclN0YXRlTWF0Y2hlciE6IEVycm9yU3RhdGVNYXRjaGVyO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxcbiAgICAgIEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTFNlbGVjdEVsZW1lbnRcbiAgICA+LFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChJTVBEQ19GT1JNX1JPT1QpIF9mb3JtUm9vdDogSW1wZGNGb3JtUm9vdCxcbiAgICBAT3B0aW9uYWwoKSBfcGFyZW50Rm9ybTogTmdGb3JtLFxuICAgIEBPcHRpb25hbCgpIF9wYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlclxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgICBfZm9ybVJvb3QsXG4gICAgICBfcGFyZW50Rm9ybSxcbiAgICAgIF9wYXJlbnRGb3JtR3JvdXAsXG4gICAgICBuZ0NvbnRyb2xcbiAgICApO1xuXG4gICAgY29uc3QgeyBuYXRpdmVFbGVtZW50IH0gPSB0aGlzLl9lbGVtZW50UmVmO1xuICAgIGNvbnN0IG5vZGVOYW1lID0gbmF0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgdGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yID0gbmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLmlkID0gdGhpcy5pZDtcbiAgICB0aGlzLl9pc1NlbGVjdCA9IG5vZGVOYW1lID09PSAnc2VsZWN0JztcbiAgICB0aGlzLl9pc1RleHRhcmVhID0gbm9kZU5hbWUgPT09ICd0ZXh0YXJlYSc7XG5cbiAgICBpZiAodGhpcy5faXNTZWxlY3QpIHtcbiAgICAgIHRoaXMuY29udHJvbFR5cGUgPSAobmF0aXZlRWxlbWVudCBhcyBIVE1MU2VsZWN0RWxlbWVudCkubXVsdGlwbGVcbiAgICAgICAgPyAnaW1wZGMtbmF0aXZlLXNlbGVjdC1tdWx0aXBsZSdcbiAgICAgICAgOiAnaW1wZGMtbmF0aXZlLXNlbGVjdCc7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgIHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubmdDb250cm9sLmRpc2FibGVkICE9PSBudWxsICYmXG4gICAgICAgIHRoaXMubmdDb250cm9sLmRpc2FibGVkICE9PSB0aGlzLmRpc2FibGVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMubmdDb250cm9sLmRpc2FibGVkO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9mb2N1c0NoYW5nZWQoaXNGb2N1c2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzRm9jdXNlZCAhPT0gdGhpcy5mb2N1c2VkKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF90eXBlSXNWYWxpZChpbnB1dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBJTVBEQ19JTlBVVF9JTlZBTElEX1RZUEVTLmluZGV4T2YoaW5wdXRUeXBlKSA9PT0gLTE7XG4gIH1cblxuICBwcm90ZWN0ZWQgX29uSW5wdXQoKSB7XG4gICAgLy8gVGhpcyBpcyBhIG5vb3AgZnVuY3Rpb24gYW5kIGlzIHVzZWQgdG8gbGV0IEFuZ3VsYXIga25vdyB3aGVuZXZlciB0aGUgdmFsdWUgY2hhbmdlcy5cbiAgICAvLyBBbmd1bGFyIHdpbGwgcnVuIGEgbmV3IGNoYW5nZSBkZXRlY3Rpb24gZWFjaCB0aW1lIHRoZSBgaW5wdXRgIGV2ZW50IGhhcyBiZWVuIGRpc3BhdGNoZWQuXG4gICAgLy8gSXQncyBuZWNlc3NhcnkgdGhhdCBBbmd1bGFyIHJlY29nbml6ZXMgdGhlIHZhbHVlIGNoYW5nZSwgYmVjYXVzZSB3aGVuIEFuZ3VsYXIgZm9ybXNcbiAgICAvLyBhcmVuJ3QgdXNlZCwgdGhlIHBsYWNlaG9sZGVyIHdvbid0IHJlY29nbml6ZSB0aGUgdmFsdWUgY2hhbmdlcyBhbmQgd2lsbCBub3QgZGlzYXBwZWFyLlxuICAgIC8vIExpc3RlbmluZyB0byB0aGUgaW5wdXQgZXZlbnQgd291bGRuJ3QgYmUgbmVjZXNzYXJ5IHdoZW4gdGhlIGlucHV0IGlzIHVzaW5nIHRoZVxuICAgIC8vIEZvcm1zTW9kdWxlIG9yIFJlYWN0aXZlRm9ybXNNb2R1bGUsIGJlY2F1c2UgQW5ndWxhciBmb3JtcyBhbHNvIGxpc3RlbnMgdG8gaW5wdXQgZXZlbnRzLlxuICB9XG59XG4iXX0=