desy-angular 14.2.0 → 15.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 (325) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/desy-angular.mjs +1290 -821
  3. package/fesm2022/desy-angular.mjs.map +1 -1
  4. package/index.d.ts +3 -0
  5. package/lib/desy-forms/components/character-count/character-count.component.d.ts +1 -8
  6. package/lib/desy-forms/components/checkboxes/checkboxes-parent.component.d.ts +8 -0
  7. package/lib/desy-forms/components/checkboxes/checkboxes.component.d.ts +26 -0
  8. package/lib/desy-forms/components/date-input/date-input.component.d.ts +13 -7
  9. package/lib/desy-forms/components/datepicker/datepicker.component.d.ts +1 -5
  10. package/lib/desy-forms/components/fieldset/fieldset.component.d.ts +7 -0
  11. package/lib/desy-forms/components/file-upload/file-upload.component.d.ts +5 -0
  12. package/lib/desy-forms/components/input/input.component.d.ts +1 -4
  13. package/lib/desy-forms/components/input-group/input-group.component.d.ts +7 -0
  14. package/lib/desy-forms/components/label/label.component.d.ts +1 -2
  15. package/lib/desy-forms/components/radios/radios-parent.component.d.ts +8 -0
  16. package/lib/desy-forms/components/radios/radios.component.d.ts +26 -0
  17. package/lib/desy-forms/components/search-bar/search-bar.component.d.ts +1 -2
  18. package/lib/desy-forms/components/select/option/option.component.d.ts +1 -2
  19. package/lib/desy-forms/components/textarea/textarea.component.d.ts +1 -3
  20. package/lib/desy-forms/components/tree/tree-item/tree-item.component.d.ts +4 -0
  21. package/lib/desy-forms/components/tree/tree.component.d.ts +62 -2
  22. package/lib/desy-forms/directives/condition.directive.d.ts +5 -0
  23. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.d.ts +7 -0
  24. package/lib/desy-nav/components/menubar/menubar.component.d.ts +7 -0
  25. package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +55 -0
  26. package/lib/desy-tables/directives/cell.directive.d.ts +3 -0
  27. package/lib/desy-tables/directives/row.directive.d.ts +7 -0
  28. package/lib/shared/components/accessibility/accessibility.component.d.ts +3 -0
  29. package/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.d.ts +8 -0
  30. package/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.d.ts +6 -0
  31. package/lib/shared/components/content-base/content-base.component.d.ts +3 -0
  32. package/lib/shared/components/text-or-html-required/text-or-html-required.component.d.ts +4 -0
  33. package/lib/shared/decorators/desy-content-child.decorator.d.ts +11 -0
  34. package/lib/shared/decorators/desy-on-input-change.decorator.d.ts +4 -0
  35. package/lib/shared/directives/content-change.directive.d.ts +4 -0
  36. package/lib/shared/directives/custom-inner-content.directive.d.ts +6 -0
  37. package/lib/shared/pipes/external-href.pipe.d.ts +4 -0
  38. package/lib/shared/utils/search-utils.d.ts +10 -0
  39. package/lib/shared/utils/string-utils.d.ts +7 -0
  40. package/package.json +9 -11
  41. package/esm2022/desy-angular.mjs +0 -2
  42. package/esm2022/lib/desy-angular.module.mjs +0 -76
  43. package/esm2022/lib/desy-buttons/components/button/button.component.mjs +0 -118
  44. package/esm2022/lib/desy-buttons/components/button-loader/button-loader.component.mjs +0 -66
  45. package/esm2022/lib/desy-buttons/components/dropdown/dropdown.component.mjs +0 -159
  46. package/esm2022/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.mjs +0 -39
  47. package/esm2022/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.mjs +0 -14
  48. package/esm2022/lib/desy-buttons/components/listbox/listbox.component.mjs +0 -334
  49. package/esm2022/lib/desy-buttons/components/pill/pill.component.mjs +0 -83
  50. package/esm2022/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.mjs +0 -17
  51. package/esm2022/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.mjs +0 -17
  52. package/esm2022/lib/desy-buttons/components/toggle/toggle.component.mjs +0 -62
  53. package/esm2022/lib/desy-buttons/desy-buttons.module.mjs +0 -70
  54. package/esm2022/lib/desy-buttons/interfaces/listbox-item-data.mjs +0 -2
  55. package/esm2022/lib/desy-buttons/interfaces/listbox-label-data.mjs +0 -2
  56. package/esm2022/lib/desy-commons/components/content/content.component.mjs +0 -14
  57. package/esm2022/lib/desy-commons/components/description/description.component.mjs +0 -19
  58. package/esm2022/lib/desy-commons/components/divider/divider.component.mjs +0 -16
  59. package/esm2022/lib/desy-commons/components/icon/icon.component.mjs +0 -16
  60. package/esm2022/lib/desy-commons/components/title/title.component.mjs +0 -17
  61. package/esm2022/lib/desy-commons/desy-commons.module.mjs +0 -24
  62. package/esm2022/lib/desy-commons/interfaces/content-data.mjs +0 -2
  63. package/esm2022/lib/desy-commons/interfaces/description-data.mjs +0 -2
  64. package/esm2022/lib/desy-commons/interfaces/divider-data.mjs +0 -2
  65. package/esm2022/lib/desy-commons/interfaces/icon-data.mjs +0 -2
  66. package/esm2022/lib/desy-commons/interfaces/index.mjs +0 -6
  67. package/esm2022/lib/desy-commons/interfaces/title-data.mjs +0 -2
  68. package/esm2022/lib/desy-forms/components/character-count/character-count.component.mjs +0 -156
  69. package/esm2022/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.mjs +0 -191
  70. package/esm2022/lib/desy-forms/components/checkboxes/checkboxes-parent.component.mjs +0 -15
  71. package/esm2022/lib/desy-forms/components/checkboxes/checkboxes.component.mjs +0 -275
  72. package/esm2022/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.mjs +0 -55
  73. package/esm2022/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.mjs +0 -19
  74. package/esm2022/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.mjs +0 -42
  75. package/esm2022/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.mjs +0 -55
  76. package/esm2022/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.mjs +0 -51
  77. package/esm2022/lib/desy-forms/components/date-input/date-input.component.mjs +0 -303
  78. package/esm2022/lib/desy-forms/components/datepicker/datepicker.component.mjs +0 -190
  79. package/esm2022/lib/desy-forms/components/datepicker/datepicker.pipe.mjs +0 -34
  80. package/esm2022/lib/desy-forms/components/error-message/error-message.component.mjs +0 -32
  81. package/esm2022/lib/desy-forms/components/fieldset/fieldset.component.mjs +0 -59
  82. package/esm2022/lib/desy-forms/components/fieldset/legend/legend.component.mjs +0 -34
  83. package/esm2022/lib/desy-forms/components/file-upload/file-upload.component.mjs +0 -78
  84. package/esm2022/lib/desy-forms/components/form-field/form-field.component.mjs +0 -127
  85. package/esm2022/lib/desy-forms/components/hint/hint.component.mjs +0 -30
  86. package/esm2022/lib/desy-forms/components/input/input.component.mjs +0 -110
  87. package/esm2022/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.mjs +0 -20
  88. package/esm2022/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.mjs +0 -59
  89. package/esm2022/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.mjs +0 -42
  90. package/esm2022/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.mjs +0 -51
  91. package/esm2022/lib/desy-forms/components/input-group/input-group.component.mjs +0 -232
  92. package/esm2022/lib/desy-forms/components/label/label.component.mjs +0 -39
  93. package/esm2022/lib/desy-forms/components/radios/radio-item/radio-item.component.mjs +0 -138
  94. package/esm2022/lib/desy-forms/components/radios/radios-parent.component.mjs +0 -15
  95. package/esm2022/lib/desy-forms/components/radios/radios.component.mjs +0 -286
  96. package/esm2022/lib/desy-forms/components/search-bar/search-bar.component.mjs +0 -65
  97. package/esm2022/lib/desy-forms/components/select/option/option.component.mjs +0 -22
  98. package/esm2022/lib/desy-forms/components/select/option-group/option-group.component.mjs +0 -18
  99. package/esm2022/lib/desy-forms/components/select/select-item/select-item.component.mjs +0 -14
  100. package/esm2022/lib/desy-forms/components/select/select.component.mjs +0 -94
  101. package/esm2022/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.mjs +0 -12
  102. package/esm2022/lib/desy-forms/components/textarea/textarea.component.mjs +0 -86
  103. package/esm2022/lib/desy-forms/components/tree/interfaces/itree-item.mjs +0 -3
  104. package/esm2022/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.mjs +0 -2
  105. package/esm2022/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.mjs +0 -174
  106. package/esm2022/lib/desy-forms/components/tree/tree-item/tree-item.component.mjs +0 -381
  107. package/esm2022/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.mjs +0 -25
  108. package/esm2022/lib/desy-forms/components/tree/tree-sub/tree-sub.component.mjs +0 -16
  109. package/esm2022/lib/desy-forms/components/tree/tree.component.mjs +0 -362
  110. package/esm2022/lib/desy-forms/desy-forms.module.mjs +0 -223
  111. package/esm2022/lib/desy-forms/directives/condition.directive.mjs +0 -34
  112. package/esm2022/lib/desy-forms/interfaces/error-message-data.mjs +0 -2
  113. package/esm2022/lib/desy-forms/interfaces/fieldset-data.mjs +0 -2
  114. package/esm2022/lib/desy-forms/interfaces/hint-data.mjs +0 -2
  115. package/esm2022/lib/desy-forms/interfaces/index.mjs +0 -13
  116. package/esm2022/lib/desy-forms/interfaces/item-checkbox-data.mjs +0 -2
  117. package/esm2022/lib/desy-forms/interfaces/item-date-input-data.mjs +0 -2
  118. package/esm2022/lib/desy-forms/interfaces/item-divider-date-input-data.mjs +0 -2
  119. package/esm2022/lib/desy-forms/interfaces/item-divider-input-group-data.mjs +0 -2
  120. package/esm2022/lib/desy-forms/interfaces/item-input-group-data.mjs +0 -2
  121. package/esm2022/lib/desy-forms/interfaces/item-radio-data.mjs +0 -2
  122. package/esm2022/lib/desy-forms/interfaces/item-radio-with-template-data.mjs +0 -2
  123. package/esm2022/lib/desy-forms/interfaces/label-data.mjs +0 -2
  124. package/esm2022/lib/desy-forms/interfaces/legend-data.mjs +0 -2
  125. package/esm2022/lib/desy-forms/interfaces/select-item-data.mjs +0 -2
  126. package/esm2022/lib/desy-modals/components/dialog/dialog.component.mjs +0 -155
  127. package/esm2022/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.mjs +0 -25
  128. package/esm2022/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.mjs +0 -23
  129. package/esm2022/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.mjs +0 -23
  130. package/esm2022/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.mjs +0 -23
  131. package/esm2022/lib/desy-modals/components/modal/modal.component.mjs +0 -192
  132. package/esm2022/lib/desy-modals/desy-modals.module.mjs +0 -50
  133. package/esm2022/lib/desy-modals/interfaces/dialog-options.mjs +0 -2
  134. package/esm2022/lib/desy-modals/interfaces/index.mjs +0 -7
  135. package/esm2022/lib/desy-modals/interfaces/modal-button-data.mjs +0 -2
  136. package/esm2022/lib/desy-modals/interfaces/modal-data.mjs +0 -2
  137. package/esm2022/lib/desy-modals/interfaces/modal-icon-data.mjs +0 -2
  138. package/esm2022/lib/desy-modals/interfaces/modal-options.mjs +0 -2
  139. package/esm2022/lib/desy-modals/interfaces/open-dialog-result.mjs +0 -2
  140. package/esm2022/lib/desy-modals/services/dialog.service.mjs +0 -114
  141. package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.mjs +0 -16
  142. package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +0 -53
  143. package/esm2022/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.mjs +0 -19
  144. package/esm2022/lib/desy-nav/components/error-summary/error-summary.component.mjs +0 -67
  145. package/esm2022/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.mjs +0 -25
  146. package/esm2022/lib/desy-nav/components/footer/footer-meta/footer-meta.component.mjs +0 -31
  147. package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.mjs +0 -25
  148. package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.mjs +0 -21
  149. package/esm2022/lib/desy-nav/components/footer/footer.component.mjs +0 -91
  150. package/esm2022/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.mjs +0 -15
  151. package/esm2022/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.mjs +0 -46
  152. package/esm2022/lib/desy-nav/components/header/header-mobileText/header-mobile-text.component.mjs +0 -336
  153. package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.mjs +0 -31
  154. package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation.component.mjs +0 -36
  155. package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.mjs +0 -20
  156. package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.mjs +0 -15
  157. package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.mjs +0 -93
  158. package/esm2022/lib/desy-nav/components/header/header-subnav/header-subnav.component.mjs +0 -41
  159. package/esm2022/lib/desy-nav/components/header/header.component.mjs +0 -119
  160. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-custom-navigation/header-custom-navigation.component.mjs +0 -14
  161. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.mjs +0 -38
  162. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-logo/header-advanced-logo.component.mjs +0 -37
  163. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.mjs +0 -42
  164. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-subtitle/header-advanced-subtitle.component.mjs +0 -14
  165. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.mjs +0 -42
  166. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title/header-advanced-title.component.mjs +0 -19
  167. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title-container/header-advanced-title-container.component.mjs +0 -38
  168. package/esm2022/lib/desy-nav/components/header-advanced/header-advanced.component.mjs +0 -54
  169. package/esm2022/lib/desy-nav/components/header-mini/header-mini.component.mjs +0 -32
  170. package/esm2022/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.mjs +0 -16
  171. package/esm2022/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.mjs +0 -46
  172. package/esm2022/lib/desy-nav/components/links-list/links-list-item-sub/links-list-item-sub.component.mjs +0 -14
  173. package/esm2022/lib/desy-nav/components/links-list/links-list.component.mjs +0 -44
  174. package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.mjs +0 -42
  175. package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +0 -76
  176. package/esm2022/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.mjs +0 -55
  177. package/esm2022/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.mjs +0 -49
  178. package/esm2022/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +0 -858
  179. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.mjs +0 -44
  180. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.mjs +0 -18
  181. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.mjs +0 -34
  182. package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +0 -98
  183. package/esm2022/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.mjs +0 -51
  184. package/esm2022/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.mjs +0 -14
  185. package/esm2022/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.mjs +0 -36
  186. package/esm2022/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.mjs +0 -27
  187. package/esm2022/lib/desy-nav/components/menubar/directives/menubaritem.directive.mjs +0 -47
  188. package/esm2022/lib/desy-nav/components/menubar/menubar.component.mjs +0 -966
  189. package/esm2022/lib/desy-nav/components/nav/nav-item/nav-item.component.mjs +0 -43
  190. package/esm2022/lib/desy-nav/components/nav/nav.component.mjs +0 -115
  191. package/esm2022/lib/desy-nav/components/notification/notification-item/notification-item.component.mjs +0 -25
  192. package/esm2022/lib/desy-nav/components/notification/notification.component.mjs +0 -127
  193. package/esm2022/lib/desy-nav/components/skip-link/skip-link.component.mjs +0 -62
  194. package/esm2022/lib/desy-nav/desy-nav.module.mjs +0 -290
  195. package/esm2022/lib/desy-nav/directives/dynamic-heading.directive.mjs +0 -40
  196. package/esm2022/lib/desy-nav/interfaces/breadcrumbs.data.mjs +0 -2
  197. package/esm2022/lib/desy-nav/interfaces/error-summary-data.mjs +0 -2
  198. package/esm2022/lib/desy-nav/interfaces/footer-data.mjs +0 -2
  199. package/esm2022/lib/desy-nav/interfaces/footer-logo.mjs +0 -10
  200. package/esm2022/lib/desy-nav/interfaces/header-advanced-logo.mjs +0 -7
  201. package/esm2022/lib/desy-nav/interfaces/header-dropdown-data.mjs +0 -2
  202. package/esm2022/lib/desy-nav/interfaces/header-mobile-text-data.mjs +0 -2
  203. package/esm2022/lib/desy-nav/interfaces/header-navigation-data.mjs +0 -2
  204. package/esm2022/lib/desy-nav/interfaces/header-navigation-item-data.mjs +0 -2
  205. package/esm2022/lib/desy-nav/interfaces/header-offcanvas-data.mjs +0 -2
  206. package/esm2022/lib/desy-nav/interfaces/header-skiplink-data.mjs +0 -2
  207. package/esm2022/lib/desy-nav/interfaces/header-subnav-data.mjs +0 -2
  208. package/esm2022/lib/desy-nav/interfaces/index.mjs +0 -21
  209. package/esm2022/lib/desy-nav/interfaces/menu-horizontal-item-data.mjs +0 -2
  210. package/esm2022/lib/desy-nav/interfaces/menu-horizontal-item-event-data.mjs +0 -2
  211. package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.mjs +0 -2
  212. package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item.mjs +0 -2
  213. package/esm2022/lib/desy-nav/interfaces/menu-navigation.mjs +0 -2
  214. package/esm2022/lib/desy-nav/interfaces/menu-vertical-items-data.mjs +0 -2
  215. package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-data.mjs +0 -2
  216. package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-items-data.mjs +0 -2
  217. package/esm2022/lib/desy-nav/interfaces/menubar-item-sub-item-sub-item.mjs +0 -2
  218. package/esm2022/lib/desy-nav/interfaces/menubar-item-sub-item.mjs +0 -2
  219. package/esm2022/lib/desy-nav/interfaces/menubar-item-sub.mjs +0 -2
  220. package/esm2022/lib/desy-nav/interfaces/menubar-item.mjs +0 -2
  221. package/esm2022/lib/desy-nav/interfaces/nav-item-event.data.mjs +0 -2
  222. package/esm2022/lib/desy-nav/interfaces/nav-item.data.mjs +0 -2
  223. package/esm2022/lib/desy-nav/interfaces/notification-items-data.mjs +0 -2
  224. package/esm2022/lib/desy-nav/interfaces/notification-options.mjs +0 -2
  225. package/esm2022/lib/desy-pagination/components/pagination/pagination.component.mjs +0 -242
  226. package/esm2022/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.mjs +0 -19
  227. package/esm2022/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.mjs +0 -17
  228. package/esm2022/lib/desy-pagination/desy-pagination.module.mjs +0 -25
  229. package/esm2022/lib/desy-pagination/interfaces/pagination-item.data.mjs +0 -2
  230. package/esm2022/lib/desy-tables/components/table/components/table-caption.component.mjs +0 -17
  231. package/esm2022/lib/desy-tables/components/table/components/table-cell.component.mjs +0 -23
  232. package/esm2022/lib/desy-tables/components/table/components/table-footer.component.mjs +0 -18
  233. package/esm2022/lib/desy-tables/components/table/components/table-header.component.mjs +0 -18
  234. package/esm2022/lib/desy-tables/components/table/components/table-row.component.mjs +0 -18
  235. package/esm2022/lib/desy-tables/components/table/table.component.mjs +0 -120
  236. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer-cell.component.mjs +0 -23
  237. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer.component.mjs +0 -27
  238. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.mjs +0 -56
  239. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.mjs +0 -18
  240. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.mjs +0 -23
  241. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.mjs +0 -27
  242. package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.mjs +0 -28
  243. package/esm2022/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +0 -516
  244. package/esm2022/lib/desy-tables/desy-tables.module.mjs +0 -100
  245. package/esm2022/lib/desy-tables/directives/cell.directive.mjs +0 -25
  246. package/esm2022/lib/desy-tables/directives/focus-clicked-cell.directive.mjs +0 -89
  247. package/esm2022/lib/desy-tables/directives/row.directive.mjs +0 -22
  248. package/esm2022/lib/desy-tables/interfaces/cell-data.mjs +0 -2
  249. package/esm2022/lib/desy-tables/interfaces/head-cell-data.mjs +0 -7
  250. package/esm2022/lib/desy-tables/interfaces/index.mjs +0 -5
  251. package/esm2022/lib/desy-tables/interfaces/recalculate-table-params.mjs +0 -2
  252. package/esm2022/lib/desy-tables/interfaces/row-data.mjs +0 -2
  253. package/esm2022/lib/desy-tables/interfaces/wrapper-data.mjs +0 -2
  254. package/esm2022/lib/desy-views/components/accordion/accordion-header/accordion-header.component.mjs +0 -17
  255. package/esm2022/lib/desy-views/components/accordion/accordion-item/accordion-item.component.mjs +0 -61
  256. package/esm2022/lib/desy-views/components/accordion/accordion.component.mjs +0 -447
  257. package/esm2022/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.mjs +0 -41
  258. package/esm2022/lib/desy-views/components/accordion-history/accordion-history.component.mjs +0 -20
  259. package/esm2022/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.mjs +0 -17
  260. package/esm2022/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.mjs +0 -17
  261. package/esm2022/lib/desy-views/components/alert/alert.component.mjs +0 -82
  262. package/esm2022/lib/desy-views/components/card/card-sectors/card-left.component.mjs +0 -21
  263. package/esm2022/lib/desy-views/components/card/card-sectors/card-right.component.mjs +0 -21
  264. package/esm2022/lib/desy-views/components/card/card-sectors/card-sub.component.mjs +0 -21
  265. package/esm2022/lib/desy-views/components/card/card-sectors/card-super.component.mjs +0 -21
  266. package/esm2022/lib/desy-views/components/card/card.component.mjs +0 -48
  267. package/esm2022/lib/desy-views/components/collapsible/collapsible.component.mjs +0 -66
  268. package/esm2022/lib/desy-views/components/description-list/definition/definition.component.mjs +0 -19
  269. package/esm2022/lib/desy-views/components/description-list/description-item/description-item.component.mjs +0 -36
  270. package/esm2022/lib/desy-views/components/description-list/description-list.component.mjs +0 -29
  271. package/esm2022/lib/desy-views/components/description-list/term/term.component.mjs +0 -19
  272. package/esm2022/lib/desy-views/components/details/details.component.mjs +0 -43
  273. package/esm2022/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.mjs +0 -17
  274. package/esm2022/lib/desy-views/components/item/item-content-right/item-content-right.component.mjs +0 -15
  275. package/esm2022/lib/desy-views/components/item/item-item/item-item.component.mjs +0 -15
  276. package/esm2022/lib/desy-views/components/item/item.component.mjs +0 -122
  277. package/esm2022/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.mjs +0 -12
  278. package/esm2022/lib/desy-views/components/media-object/media-object.component.mjs +0 -369
  279. package/esm2022/lib/desy-views/components/status/status.component.mjs +0 -366
  280. package/esm2022/lib/desy-views/components/status-item/status-item.component.mjs +0 -401
  281. package/esm2022/lib/desy-views/components/tabs/panel/panel.component.mjs +0 -19
  282. package/esm2022/lib/desy-views/components/tabs/tab-item/tab-item.component.mjs +0 -41
  283. package/esm2022/lib/desy-views/components/tabs/tabs.component.mjs +0 -446
  284. package/esm2022/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.mjs +0 -12
  285. package/esm2022/lib/desy-views/components/tooltip/tooltip.component.mjs +0 -450
  286. package/esm2022/lib/desy-views/desy-views.module.mjs +0 -181
  287. package/esm2022/lib/desy-views/interfaces/accordion-header.data.mjs +0 -2
  288. package/esm2022/lib/desy-views/interfaces/accordion-item.data.mjs +0 -2
  289. package/esm2022/lib/desy-views/interfaces/alert-options.mjs +0 -2
  290. package/esm2022/lib/desy-views/interfaces/description-item.data.mjs +0 -2
  291. package/esm2022/lib/desy-views/interfaces/index.mjs +0 -11
  292. package/esm2022/lib/desy-views/interfaces/open-alert-result.mjs +0 -2
  293. package/esm2022/lib/desy-views/interfaces/status-data.mjs +0 -2
  294. package/esm2022/lib/desy-views/interfaces/status-icon-data.mjs +0 -2
  295. package/esm2022/lib/desy-views/interfaces/status-item-title-data.mjs +0 -2
  296. package/esm2022/lib/desy-views/interfaces/tabs-items-data.mjs +0 -2
  297. package/esm2022/lib/desy-views/interfaces/tabs-panel-data.mjs +0 -2
  298. package/esm2022/lib/desy-views/interfaces/term-definition.data.mjs +0 -2
  299. package/esm2022/lib/desy-views/services/alert.service.mjs +0 -88
  300. package/esm2022/lib/shared/components/accessibility/accessibility-attributes.mjs +0 -78
  301. package/esm2022/lib/shared/components/accessibility/accessibility.component.mjs +0 -164
  302. package/esm2022/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.mjs +0 -168
  303. package/esm2022/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.mjs +0 -165
  304. package/esm2022/lib/shared/components/content-base/content-base.component.mjs +0 -21
  305. package/esm2022/lib/shared/components/index.mjs +0 -7
  306. package/esm2022/lib/shared/components/spinner/spinner.component.mjs +0 -329
  307. package/esm2022/lib/shared/components/text-or-html-required/text-or-html-required.component.mjs +0 -18
  308. package/esm2022/lib/shared/decorators/desy-content-child.decorator.mjs +0 -34
  309. package/esm2022/lib/shared/decorators/desy-on-input-change.decorator.mjs +0 -15
  310. package/esm2022/lib/shared/directives/accessibility-directive.mjs +0 -54
  311. package/esm2022/lib/shared/directives/attribute-change.directive.mjs +0 -50
  312. package/esm2022/lib/shared/directives/click-outside.directive.mjs +0 -40
  313. package/esm2022/lib/shared/directives/content-change.directive.mjs +0 -41
  314. package/esm2022/lib/shared/directives/custom-inner-content.directive.mjs +0 -63
  315. package/esm2022/lib/shared/directives/inner-content.directive.mjs +0 -37
  316. package/esm2022/lib/shared/interfaces/accessibility-data.mjs +0 -2
  317. package/esm2022/lib/shared/pipes/external-href.pipe.mjs +0 -28
  318. package/esm2022/lib/shared/pipes/inner-html.pipe.mjs +0 -21
  319. package/esm2022/lib/shared/pipes/make-html-list.pipe.mjs +0 -20
  320. package/esm2022/lib/shared/shared.module.mjs +0 -86
  321. package/esm2022/lib/shared/sharedExternal.module.mjs +0 -20
  322. package/esm2022/lib/shared/utils/focus-utils.mjs +0 -50
  323. package/esm2022/lib/shared/utils/search-utils.mjs +0 -70
  324. package/esm2022/lib/shared/utils/string-utils.mjs +0 -13
  325. package/esm2022/public-api.mjs +0 -225
@@ -1,858 +0,0 @@
1
- import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Output, QueryList, ViewChild, ViewChildren, } from '@angular/core';
2
- import { AccessibilityComponent } from '../../../shared/components';
3
- import { MenubaritemDirective } from '../menubar/directives/menubaritem.directive';
4
- import { MenuNavigationItemComponent } from './components/menu-navigation-item/menu-navigation-item.component';
5
- import { MenuNavigationSubitemComponent } from './components/menu-navigation-subitem/menu-navigation-subitem.component';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common";
8
- import * as i2 from "@angular/router";
9
- import * as i3 from "../../../shared/directives/attribute-change.directive";
10
- import * as i4 from "../../../shared/directives/custom-inner-content.directive";
11
- import * as i5 from "../../../shared/directives/accessibility-directive";
12
- import * as i6 from "../menubar/directives/menubaritem.directive";
13
- import * as i7 from "../../../shared/pipes/make-html-list.pipe";
14
- export class MenuNavigationComponent extends AccessibilityComponent {
15
- set items(items) {
16
- this._items = items;
17
- this.activeItemIfSubItemIsActive(items);
18
- }
19
- get items() {
20
- return this._items;
21
- }
22
- constructor(changeDetectorRef) {
23
- super();
24
- this.changeDetectorRef = changeDetectorRef;
25
- this.itemsChange = new EventEmitter();
26
- this.activeItemChange = new EventEmitter();
27
- this.activeSubItemChange = new EventEmitter();
28
- this.cfg = true;
29
- this.role = null;
30
- this.ariaLabel = null;
31
- this.ariaDescribedBy = null;
32
- this.ariaLabelledBy = null;
33
- this.ariaHidden = null;
34
- this.ariaDisabled = null;
35
- this.ariaControls = null;
36
- this.ariaCurrent = null;
37
- this.ariaLive = null;
38
- this.ariaExpanded = null;
39
- this.ariaErrorMessage = null;
40
- this.ariaHasPopup = null;
41
- this.ariaModal = null;
42
- this.ariaChecked = null;
43
- this.ariaPressed = null;
44
- this.ariaReadonly = null;
45
- this.ariaRequired = null;
46
- this.ariaSelected = null;
47
- this.ariaValuemin = null;
48
- this.ariaValuemax = null;
49
- this.ariaValuenow = null;
50
- this.ariaValuetext = null;
51
- this.ariaOrientation = null;
52
- this.ariaLevel = null;
53
- this.ariaMultiselectable = null;
54
- this.ariaPlaceholder = null;
55
- this.ariaPosinset = null;
56
- this.ariaSetsize = null;
57
- this.ariaSort = null;
58
- this.ariaBusy = null;
59
- this.ariaDropeffect = null;
60
- this.ariaGrabbed = null;
61
- this.ariaActivedescendant = null;
62
- this.ariaAtomic = null;
63
- this.ariaAutocomplete = null;
64
- this.ariaBraillelabel = null;
65
- this.ariaBrailleroledescription = null;
66
- this.ariaColcount = null;
67
- this.ariaColindex = null;
68
- this.ariaColindextext = null;
69
- this.ariaColspan = null;
70
- this.ariaDescription = null;
71
- this.ariaDetails = null;
72
- this.ariaFlowto = null;
73
- this.ariaInvalid = null;
74
- this.ariaKeyshortcuts = null;
75
- this.ariaOwns = null;
76
- this.ariaRelevant = null;
77
- this.ariaRoledescription = null;
78
- this.ariaRowcount = null;
79
- this.ariaRowindex = null;
80
- this.ariaRowindextext = null;
81
- this.ariaRowspan = null;
82
- this.tabindex = null;
83
- this.title = null;
84
- this.alt = null;
85
- this.lang = null;
86
- this.accesskey = null;
87
- this.autocomplete = null;
88
- this.autofocus = null;
89
- this.contenteditable = null;
90
- this.dir = null;
91
- this.draggable = null;
92
- this.enterkeyhint = null;
93
- this.hidden = null;
94
- this.inputmode = null;
95
- this.spellcheck = null;
96
- this.translate = null;
97
- this.ariaMultiline = null;
98
- this.for = null;
99
- this.form = null;
100
- this.headers = null;
101
- this.placeholder = null;
102
- this.readonly = null;
103
- this.required = null;
104
- this.viewInit = false;
105
- this.currentFocusItemIndex = 0;
106
- }
107
- ngOnChanges(changes) {
108
- if (this.viewInit) {
109
- this.checkChanges();
110
- }
111
- }
112
- ngAfterViewInit() {
113
- this.viewInit = true;
114
- this.checkChanges();
115
- this.itemComponentList.changes.subscribe((items) => this.activeItemIfSubItemIsActive(items.toArray()));
116
- }
117
- checkChanges() {
118
- if (!this.menuItems) {
119
- return;
120
- }
121
- this.menuData = [];
122
- this.getItems().forEach((_, index) => {
123
- const itemData = {
124
- open: false,
125
- currentFocusSubItemIndex: 0,
126
- currentFocusSubSubItemIndex: 0,
127
- menuItem: this.menuItems.toArray()[index],
128
- };
129
- this.menuData.push(itemData);
130
- });
131
- if (this.viewInit) {
132
- this.checkRequired();
133
- }
134
- const lastCurrentFocusItemIndex = this.currentFocusItemIndex;
135
- const items = this.getItems();
136
- if (items) {
137
- while (!this.isItemFocusable(this.currentFocusItemIndex % items.length)) {
138
- this.currentFocusItemIndex = (this.currentFocusItemIndex + items.length + 1) % items.length;
139
- if (this.currentFocusItemIndex === lastCurrentFocusItemIndex) {
140
- break;
141
- }
142
- }
143
- }
144
- }
145
- activeItemIfSubItemIsActive(items) {
146
- items.forEach((item) => {
147
- let subItems = this.getItemSubitems(item);
148
- if (subItems instanceof MenuNavigationItemComponent) {
149
- item.active = subItems.sub.items.filter((subItem) => subItem.active).length > 0;
150
- }
151
- else if (item?.sub?.items) {
152
- item.active = item.sub.items.filter((subItem) => subItem.active).length > 0;
153
- }
154
- });
155
- }
156
- handleMenuFocusIn() {
157
- this.isFocused = true;
158
- this.changeDetectorRef.detectChanges();
159
- }
160
- handleMenuFocusOut(event) {
161
- if (!this.menunavigation.nativeElement.contains(event.relatedTarget)) {
162
- this.closeMenu();
163
- }
164
- this.isFocused = false;
165
- this.changeDetectorRef.detectChanges();
166
- }
167
- handleMenuItemClick(event, itemIndex) {
168
- if (this.hasPopupMenu(itemIndex)) {
169
- event.preventDefault();
170
- const isOpen = this.menuData[itemIndex].open;
171
- this.closeMenu();
172
- if (!isOpen) {
173
- this.openMenu(itemIndex);
174
- }
175
- }
176
- else {
177
- this.activateMenuItem(itemIndex);
178
- }
179
- }
180
- handleMenuItemKeydown(event, itemIndex) {
181
- switch (event.key) {
182
- case 'Enter':
183
- case ' ':
184
- case 'ArrowDown':
185
- if (this.hasPopupMenu(itemIndex)) {
186
- this.openMenu(itemIndex);
187
- setTimeout(() => this.focusFirstSubItem(itemIndex));
188
- event.stopPropagation();
189
- event.preventDefault();
190
- }
191
- break;
192
- case 'Escape':
193
- if (this.hasPopupMenu(itemIndex)) {
194
- this.closeMenu(itemIndex);
195
- }
196
- event.stopPropagation();
197
- event.preventDefault();
198
- break;
199
- case 'ArrowLeft':
200
- this.focusNextAvailableItem(itemIndex, -1);
201
- event.stopPropagation();
202
- event.preventDefault();
203
- break;
204
- case 'ArrowRight':
205
- this.focusNextAvailableItem(itemIndex, +1);
206
- event.stopPropagation();
207
- event.preventDefault();
208
- break;
209
- case 'ArrowUp':
210
- if (this.hasPopupMenu(itemIndex)) {
211
- this.openMenu(itemIndex);
212
- setTimeout(() => this.focusLastSubItem(itemIndex));
213
- }
214
- event.stopPropagation();
215
- event.preventDefault();
216
- break;
217
- case 'Home':
218
- case 'PageUp':
219
- if (this.hasPopupMenu(itemIndex)) {
220
- this.closeMenu();
221
- }
222
- this.focusFirstItem();
223
- event.stopPropagation();
224
- event.preventDefault();
225
- break;
226
- case 'End':
227
- case 'PageDown':
228
- if (this.hasPopupMenu(itemIndex)) {
229
- this.closeMenu();
230
- }
231
- this.focusLastItem();
232
- event.stopPropagation();
233
- event.preventDefault();
234
- break;
235
- default:
236
- if (this.isPrintableChar(event.key)) {
237
- this.focusItemByFirstChar(event.key);
238
- event.stopPropagation();
239
- event.preventDefault();
240
- }
241
- break;
242
- }
243
- }
244
- handleMenuItemMouseOver(itemIndex) {
245
- this.focusItem(itemIndex, true);
246
- }
247
- handlePopupMenuItemClick(itemIndex, subItemIndex, subSubItemIndex) {
248
- this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);
249
- this.focusItem(itemIndex);
250
- this.closeMenu(itemIndex);
251
- }
252
- handlePopupMenuItemKeydown(event, itemIndex, subItemIndex, subSubItemIndex) {
253
- const currentSubIndex = this.menuData[itemIndex].currentFocusSubItemIndex;
254
- const currentSubSubIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;
255
- const items = this.getItems();
256
- switch (event.key) {
257
- case ' ':
258
- this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);
259
- if (this.mustCloseAfterSelectPopupItem(itemIndex, subItemIndex, subSubItemIndex)) {
260
- this.closeMenu(itemIndex);
261
- this.focusItem(itemIndex);
262
- }
263
- event.stopPropagation();
264
- event.preventDefault();
265
- break;
266
- case 'Enter':
267
- this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);
268
- this.closeMenu(itemIndex);
269
- this.focusItem(itemIndex);
270
- event.stopPropagation();
271
- event.preventDefault();
272
- break;
273
- case 'Escape':
274
- this.closeMenu(itemIndex);
275
- this.focusItem(itemIndex);
276
- event.stopPropagation();
277
- event.preventDefault();
278
- break;
279
- case 'ArrowUp':
280
- this.focusNextAvailableSubItem(itemIndex, currentSubIndex, currentSubSubIndex, -1);
281
- event.stopPropagation();
282
- event.preventDefault();
283
- break;
284
- case 'ArrowDown':
285
- this.focusNextAvailableSubItem(itemIndex, currentSubIndex, currentSubSubIndex, +1);
286
- event.stopPropagation();
287
- event.preventDefault();
288
- break;
289
- case 'ArrowLeft':
290
- this.closeMenu(itemIndex);
291
- this.focusItem((itemIndex + items.length - 1) % items.length);
292
- event.stopPropagation();
293
- event.preventDefault();
294
- break;
295
- case 'ArrowRight':
296
- this.closeMenu(itemIndex);
297
- this.focusItem((itemIndex + items.length + 1) % items.length);
298
- event.stopPropagation();
299
- event.preventDefault();
300
- break;
301
- case 'Home':
302
- case 'PageUp':
303
- this.focusFirstSubItem(itemIndex);
304
- event.stopPropagation();
305
- event.preventDefault();
306
- break;
307
- case 'End':
308
- case 'PageDown':
309
- this.focusLastSubItem(itemIndex);
310
- event.stopPropagation();
311
- event.preventDefault();
312
- break;
313
- case 'Tab':
314
- this.closeMenu(itemIndex);
315
- this.focusItem(itemIndex);
316
- break;
317
- default:
318
- if (this.isPrintableChar(event.key)) {
319
- this.focusSubItemByFirstChar(itemIndex, event.key);
320
- event.stopPropagation();
321
- event.preventDefault();
322
- }
323
- break;
324
- }
325
- }
326
- handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subSubItemIndex) {
327
- this.focusSubItem(itemIndex, subItemIndex, subSubItemIndex);
328
- }
329
- checkRequired() {
330
- const items = this.getItems();
331
- }
332
- activateMenuItem(itemIndex) {
333
- const items = this.getItems();
334
- this.activeItemChange.emit(items[itemIndex]);
335
- if (items[itemIndex] instanceof MenuNavigationItemComponent) {
336
- items[itemIndex].selected.emit();
337
- }
338
- }
339
- activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex) {
340
- const items = this.getItems();
341
- const subItems = this.getItemSubitems(items[itemIndex]);
342
- let item = subItems[subItemIndex];
343
- this.itemsChange.emit(items);
344
- this.activeSubItemChange.emit(item);
345
- if (item instanceof MenuNavigationSubitemComponent) {
346
- item.selected.emit();
347
- }
348
- }
349
- mustCloseAfterSelectPopupItem(itemIndex, subItemIndex, subSubItemIndex) {
350
- const items = this.getItems();
351
- const subItems = this.getItemSubitems(items[itemIndex]);
352
- let item = subItems[subItemIndex];
353
- return item.role !== 'menuitemcheckbox' && item.role !== 'menuitemradio';
354
- }
355
- openMenu(itemIndex) {
356
- const wasOpened = this.menuData[itemIndex].open;
357
- this.menuData[itemIndex].open = true;
358
- if (wasOpened) {
359
- this.activateMenuItem(itemIndex);
360
- }
361
- }
362
- closeMenu(itemIndex) {
363
- if (itemIndex !== null && itemIndex !== undefined) {
364
- this.menuData[itemIndex].open = false;
365
- }
366
- else {
367
- this.menuData.forEach((item) => (item.open = false));
368
- }
369
- }
370
- hasPopupMenu(itemIndex) {
371
- const items = this.getItems();
372
- const subItems = this.getItemSubitems(items[itemIndex]);
373
- return items[itemIndex].sub && subItems && subItems.length > 0;
374
- }
375
- isPrintableChar(str) {
376
- return str.length === 1 && !!str.match(/\S/);
377
- }
378
- focusItem(itemIndex, hover) {
379
- const hasFocus = this.menunavigation.nativeElement.contains(document.activeElement);
380
- const isOpen = this.menuData[this.currentFocusItemIndex].open;
381
- if (!hover || hasFocus) {
382
- this.menuData[itemIndex].menuItem.link.nativeElement.focus();
383
- }
384
- this.closeMenu();
385
- if (isOpen && this.hasPopupMenu(itemIndex)) {
386
- this.openMenu(itemIndex);
387
- }
388
- this.currentFocusItemIndex = itemIndex;
389
- }
390
- focusNextAvailableItem(fromItemIndex, step) {
391
- let nextItem = fromItemIndex;
392
- const items = this.getItems();
393
- do {
394
- nextItem = (nextItem + items.length + step) % items.length;
395
- } while (!this.isItemFocusable(nextItem) && nextItem !== fromItemIndex);
396
- if (nextItem !== fromItemIndex) {
397
- this.focusItem(nextItem);
398
- }
399
- }
400
- focusFirstItem() {
401
- if (this.isItemFocusable(0)) {
402
- this.focusItem(0);
403
- }
404
- else {
405
- this.focusNextAvailableItem(0, +1);
406
- }
407
- }
408
- focusLastItem() {
409
- const items = this.getItems();
410
- if (this.isItemFocusable(items.length - 1)) {
411
- this.focusItem(items.length - 1);
412
- }
413
- else {
414
- this.focusNextAvailableItem(items.length - 1, -1);
415
- }
416
- }
417
- isItemFocusable(itemIndex) {
418
- return !this.getItems()[itemIndex].disabled;
419
- }
420
- focusItemByFirstChar(char) {
421
- const itemContents = this.menuItems.map((menuItem) => menuItem.itemContentWrapper.nativeElement.textContent);
422
- let index = this.currentFocusItemIndex;
423
- let foundIndex = -1;
424
- do {
425
- index = (index + itemContents.length + 1) % itemContents.length;
426
- if (itemContents[index] &&
427
- itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase() &&
428
- this.isItemFocusable(index)) {
429
- foundIndex = index;
430
- }
431
- } while (foundIndex === -1 && index !== this.currentFocusItemIndex);
432
- if (foundIndex >= 0) {
433
- this.focusItem(foundIndex);
434
- }
435
- }
436
- focusSubItem(itemIndex, subItemIndex, subSubItemIndex) {
437
- if (this.menuData[itemIndex].menuItem.popupMenuItems.length > 0) {
438
- const menuDataIndex = subItemIndex;
439
- this.menuData[itemIndex].currentFocusSubItemIndex = subItemIndex;
440
- this.menuData[itemIndex].currentFocusSubSubItemIndex = subSubItemIndex;
441
- const elem = this.menuData[itemIndex].menuItem.popupMenuItems.toArray()[menuDataIndex].nativeElement;
442
- if (elem) {
443
- const aElem = elem.querySelector('a');
444
- if (aElem) {
445
- aElem.focus();
446
- }
447
- else {
448
- elem.focus();
449
- }
450
- }
451
- else {
452
- console.error('No subitem to focus');
453
- }
454
- }
455
- else {
456
- console.error('No subitems');
457
- }
458
- }
459
- focusNextAvailableSubItem(itemIndex, fromItemSubIndex, fromItemSubSubIndex, step) {
460
- let nextSubIndex = fromItemSubIndex;
461
- let nextSubSubIndex = fromItemSubSubIndex;
462
- let allSubItemsChecked;
463
- const items = this.getItems();
464
- do {
465
- const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step);
466
- nextSubIndex = nextIndexes.subIndex;
467
- nextSubSubIndex = nextIndexes.subSubIndex;
468
- allSubItemsChecked = fromItemSubIndex === nextSubIndex && fromItemSubSubIndex === nextSubSubIndex;
469
- } while (!this.isSubItemFocusable(itemIndex, nextSubIndex, nextSubSubIndex) && !allSubItemsChecked);
470
- if (!allSubItemsChecked) {
471
- this.focusSubItem(itemIndex, nextSubIndex, nextSubSubIndex);
472
- }
473
- }
474
- focusFirstSubItem(itemIndex) {
475
- let firstSubSubItem = null;
476
- const items = this.getItems();
477
- const subItems = this.getItemSubitems(items[itemIndex]);
478
- if (subItems && subItems.length > 0) {
479
- firstSubSubItem = 0;
480
- }
481
- if (this.isSubItemFocusable(itemIndex, 0, firstSubSubItem)) {
482
- this.focusSubItem(itemIndex, 0, firstSubSubItem);
483
- }
484
- else {
485
- this.focusNextAvailableSubItem(itemIndex, 0, firstSubSubItem, +1);
486
- }
487
- }
488
- focusLastSubItem(itemIndex) {
489
- const items = this.getItems();
490
- const subItems = this.getItemSubitems(items[itemIndex]);
491
- const lastItemIndex = subItems.length - 1;
492
- const lastItem = subItems[lastItemIndex];
493
- let lastSubSubItem = null;
494
- if (this.isSubItemFocusable(itemIndex, lastItemIndex, lastSubSubItem)) {
495
- this.focusSubItem(itemIndex, lastItemIndex, lastSubSubItem);
496
- }
497
- else {
498
- this.focusNextAvailableSubItem(itemIndex, lastItemIndex, lastSubSubItem, -1);
499
- }
500
- }
501
- isSubItemFocusable(itemIndex, subItemIndex, subSubItemIndex) {
502
- const items = this.getItems();
503
- const subItems = this.getItemSubitems(items[itemIndex]);
504
- let item = subItems[subItemIndex];
505
- let isFocusable = false;
506
- if (item.role !== 'separator' && item.role !== 'none') {
507
- isFocusable = true;
508
- }
509
- return isFocusable;
510
- }
511
- focusSubItemByFirstChar(itemIndex, char) {
512
- const itemContents = this.menuItems
513
- .toArray()[itemIndex].popupMenuItems.map((menuItem) => menuItem.nativeElement.textContent);
514
- let subItemIndex = this.menuData[itemIndex].currentFocusSubItemIndex;
515
- let subSubItemIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;
516
- let foundSubIndex = -1;
517
- let foundSubSubIndex = null;
518
- let allSubItemsChecked = false;
519
- const items = this.getItems();
520
- do {
521
- const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, subItemIndex, subSubItemIndex, +1);
522
- subItemIndex = nextIndexes.subIndex;
523
- subSubItemIndex = nextIndexes.subSubIndex;
524
- const index = subItemIndex;
525
- if (itemContents[index] &&
526
- itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase() &&
527
- this.isSubItemFocusable(itemIndex, subItemIndex, subSubItemIndex)) {
528
- foundSubIndex = subItemIndex;
529
- foundSubSubIndex = subSubItemIndex;
530
- }
531
- allSubItemsChecked =
532
- this.menuData[itemIndex].currentFocusSubItemIndex === subItemIndex &&
533
- this.menuData[itemIndex].currentFocusSubSubItemIndex === subSubItemIndex;
534
- } while (foundSubIndex === -1 && !allSubItemsChecked);
535
- if (foundSubIndex >= 0) {
536
- this.focusSubItem(itemIndex, foundSubIndex, foundSubSubIndex);
537
- }
538
- }
539
- getItems() {
540
- let items;
541
- if (this.itemComponentList && this.itemComponentList.length > 0) {
542
- items = this.itemComponentList.toArray();
543
- }
544
- else {
545
- items = this.items;
546
- }
547
- return items;
548
- }
549
- getItemSubitems(item) {
550
- let subItems = [];
551
- if (item instanceof MenuNavigationItemComponent) {
552
- subItems = item.getSubItems();
553
- }
554
- if (!subItems || subItems.length === 0) {
555
- subItems = item.sub ? item.sub.items : [];
556
- }
557
- return subItems;
558
- }
559
- getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step) {
560
- const subItems = this.getItemSubitems(items[itemIndex]);
561
- let checkNextSubItem = true;
562
- if (checkNextSubItem) {
563
- nextSubIndex = (nextSubIndex + step + subItems.length) % subItems.length;
564
- }
565
- return { subIndex: nextSubIndex, subSubIndex: nextSubSubIndex };
566
- }
567
- getIdPrefix() {
568
- return this.idPrefix ? this.idPrefix : this.id + 'menunavigation-item';
569
- }
570
- getItemId(item, index) {
571
- let id;
572
- if (item) {
573
- if (item.id) {
574
- id = item.id;
575
- }
576
- else {
577
- id = `${this.getIdPrefix()}-${++index}`;
578
- }
579
- }
580
- return id;
581
- }
582
- getSubItemId(item, index, parentId) {
583
- let id;
584
- if (item) {
585
- if (item.id) {
586
- id = item.id;
587
- }
588
- else {
589
- id = `sub-${parentId}-${++index}`;
590
- }
591
- }
592
- return id;
593
- }
594
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuNavigationComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
595
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MenuNavigationComponent, selector: "desy-menu-navigation", inputs: { idPrefix: "idPrefix", items: "items", classes: "classes", id: "id" }, outputs: { itemsChange: "itemsChange", activeItemChange: "activeItemChange", activeSubItemChange: "activeSubItemChange" }, host: { properties: { "class": "this.classes", "class.c-menu-navigation": "this.cfg", "attr.id": "this.id", "attr.role": "this.role", "attr.aria-label": "this.ariaLabel", "attr.aria-describedby": "this.ariaDescribedBy", "attr.aria-labelledby": "this.ariaLabelledBy", "attr.aria-hidden": "this.ariaHidden", "attr.aria-disabled": "this.ariaDisabled", "attr.aria-controls": "this.ariaControls", "attr.aria-current": "this.ariaCurrent", "attr.aria-live": "this.ariaLive", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-errormessage": "this.ariaErrorMessage", "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-modal": "this.ariaModal", "attr.aria-checked": "this.ariaChecked", "attr.aria-pressed": "this.ariaPressed", "attr.aria-readonly": "this.ariaReadonly", "attr.aria-required": "this.ariaRequired", "attr.aria-selected": "this.ariaSelected", "attr.aria-valuemin": "this.ariaValuemin", "attr.aria-valuemax": "this.ariaValuemax", "attr.aria-valuenow": "this.ariaValuenow", "attr.aria-valuetext": "this.ariaValuetext", "attr.aria-orientation": "this.ariaOrientation", "attr.aria-level": "this.ariaLevel", "attr.aria-multiselectable": "this.ariaMultiselectable", "attr.aria-placeholder": "this.ariaPlaceholder", "attr.aria-posinset": "this.ariaPosinset", "attr.aria-setsize": "this.ariaSetsize", "attr.aria-sort": "this.ariaSort", "attr.aria-busy": "this.ariaBusy", "attr.aria-dropeffect": "this.ariaDropeffect", "attr.aria-grabbed": "this.ariaGrabbed", "attr.aria-activedescendant": "this.ariaActivedescendant", "attr.aria-atomic": "this.ariaAtomic", "attr.aria-autocomplete": "this.ariaAutocomplete", "attr.aria-braillelabel": "this.ariaBraillelabel", "attr.aria-brailleroledescription": "this.ariaBrailleroledescription", "attr.aria-colcount": "this.ariaColcount", "attr.aria-colindex": "this.ariaColindex", "attr.aria-colindextext": "this.ariaColindextext", "attr.aria-colspan": "this.ariaColspan", "attr.aria-description": "this.ariaDescription", "attr.aria-details": "this.ariaDetails", "attr.aria-flowto": "this.ariaFlowto", "attr.aria-invalid": "this.ariaInvalid", "attr.aria-keyshortcuts": "this.ariaKeyshortcuts", "attr.aria-owns": "this.ariaOwns", "attr.aria-relevant": "this.ariaRelevant", "attr.aria-roledescription": "this.ariaRoledescription", "attr.aria-rowcount": "this.ariaRowcount", "attr.aria-rowindex": "this.ariaRowindex", "attr.aria-rowindextext": "this.ariaRowindextext", "attr.aria-rowspan": "this.ariaRowspan", "attr.tabindex": "this.tabindex", "attr.title": "this.title", "attr.alt": "this.alt", "attr.lang": "this.lang", "attr.accesskey": "this.accesskey", "attr.autocomplete": "this.autocomplete", "attr.autofocus": "this.autofocus", "attr.contenteditable": "this.contenteditable", "attr.dir": "this.dir", "attr.draggable": "this.draggable", "attr.enterkeyhint": "this.enterkeyhint", "attr.hidden": "this.hidden", "attr.inputmode": "this.inputmode", "attr.spellcheck": "this.spellcheck", "attr.translate": "this.translate", "attr.aria-multiline": "this.ariaMultiline", "attr.for": "this.for", "attr.form": "this.form", "attr.headers": "this.headers", "attr.placeholder": "this.placeholder", "attr.readonly": "this.readonly", "attr.required": "this.required" } }, queries: [{ propertyName: "itemComponentList", predicate: MenuNavigationItemComponent }], viewQueries: [{ propertyName: "menunavigation", first: true, predicate: ["menunavigation"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: MenubaritemDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ul\n #menunavigation\n [id]=\"id + '-menu-navigation'\"\n class=\"flex flex-wrap gap-base\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ focus: isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li\n class=\"relative\"\n desyMenubaritem\n (contentChanged)=\"checkChanges()\">\n <a\n *ngIf=\"item.href\"\n #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [href]=\"item.href\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [attr.aria-current]=\"item.disabled ? 'page' : item.ariaCurrent ? item.ariaCurrent : null\"\n [desyAppAccessibility]=\"item\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n </a>\n <a\n *ngIf=\"!item.href && item.routerLink\"\n #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-current]=\"item.disabled ? 'page' : item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n </a>\n <button\n *ngIf=\"!item.href && !item.routerLink\"\n #link\n #itemContentWrapper\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.aria-expanded]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.aria-haspopup]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-controls]=\"item.sub ? (item.ariaControls ? item.ariaControls : id + '-sub-list') : null\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n *ngIf=\"item.active\"\n class=\"sr-only\">\n Item activo:\n </span>\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n <svg\n *ngIf=\"item.sub\"\n class=\"inline-block -mr-2 align-middle -my-px pointer-events-none\"\n viewBox=\"0 0 96 96\"\n aria-hidden=\"true\"\n fill=\"currentColor\"\n focusable=\"false\"\n width=\"1.5em\"\n height=\"1.5em\">\n <g>\n <path\n d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\" />\n </g>\n </svg>\n </button>\n\n <div\n *ngIf=\"item.sub && getItemSubitems(item)\"\n class=\"c-menu-navigation__sub absolute bottom-0 left-0\">\n <ul\n [id]=\"id + '-sub-list'\"\n [style]=\"menuData && menuData[itemIndex].open ? 'display:block' : 'display:none'\"\n #popupMenu\n role=\"menu\"\n tabindex=\"-1\"\n [class]=\"\n item.sub.classes\n ? item.sub.classes\n : 'c-menu-navigation__tooltip w-max max-w-64 border border-neutral-base shadow-md bg-white text-sm'\n \"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : item.sub.ariaLabel ? item.sub.ariaLabel : null\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [desyAppAccessibility]=\"item.sub\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <li\n #popupMenuItem\n tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <a\n *ngIf=\"subItem.href\"\n #itemContentWrapper\n [href]=\"subItem.href\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"\n [\n 'flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black',\n subItem.classes,\n ] | makeHtmlList\n \"\n [ngClass]=\"{ 'pointer-events-none': subItem.disabled }\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong\n class=\"font-bold\"\n *ngIf=\"subItem.active; else noActive\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </ng-template>\n <svg\n *ngIf=\"subItem.disabled\"\n viewBox=\"0 0 140 140\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path\n d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\" />\n </svg>\n </a>\n <a\n *ngIf=\"!subItem.href && subItem.routerLink\"\n #itemContentWrapper\n [routerLink]=\"subItem.routerLink\"\n [routerLinkActive]=\"subItem.routerLinkActiveClasses ? subItem.routerLinkActiveClasses : []\"\n [fragment]=\"subItem.fragment\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"\n [\n 'flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black',\n subItem.classes,\n ] | makeHtmlList\n \"\n [ngClass]=\"{ 'pointer-events-none': subItem.disabled }\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong\n class=\"font-bold\"\n *ngIf=\"subItem.active; else noActive\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </ng-template>\n <svg\n *ngIf=\"subItem.disabled\"\n viewBox=\"0 0 140 140\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path\n d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\" />\n </svg>\n </a>\n </li>\n <li\n *ngIf=\"subItem.divider\"\n class=\"my-sm border-b border-neutral-base\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n </ul>\n </div>\n </li>\n <li\n #popupMenuItem\n *ngIf=\"item.divider\"\n [class]=\"item.divider.classes\"\n role=\"presentation\"\n aria-hidden=\"true\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: item.divider,\n html: item.divider.html,\n text: item.divider.text,\n }\"></ng-container>\n </li>\n </ng-container>\n</ul>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i3.AttributeChangeDirective, selector: "[desyAttributeChange]", inputs: ["attributesToCheck", "desyAttributeChangeEnabled"], outputs: ["desyAttributeChange", "desyAttributeChangeMutation"] }, { kind: "directive", type: i4.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "directive", type: i5.AccessibilityDirective, selector: "[desyAppAccessibility]", inputs: ["desyAppAccessibility"] }, { kind: "directive", type: i6.MenubaritemDirective, selector: "[desyMenubaritem]", outputs: ["contentChanged"] }, { kind: "pipe", type: i7.MakeHtmlListPipe, name: "makeHtmlList" }] }); }
596
- }
597
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuNavigationComponent, decorators: [{
598
- type: Component,
599
- args: [{ selector: 'desy-menu-navigation', template: "<ul\n #menunavigation\n [id]=\"id + '-menu-navigation'\"\n class=\"flex flex-wrap gap-base\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ focus: isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li\n class=\"relative\"\n desyMenubaritem\n (contentChanged)=\"checkChanges()\">\n <a\n *ngIf=\"item.href\"\n #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [href]=\"item.href\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [attr.aria-current]=\"item.disabled ? 'page' : item.ariaCurrent ? item.ariaCurrent : null\"\n [desyAppAccessibility]=\"item\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n </a>\n <a\n *ngIf=\"!item.href && item.routerLink\"\n #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-current]=\"item.disabled ? 'page' : item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n </a>\n <button\n *ngIf=\"!item.href && !item.routerLink\"\n #link\n #itemContentWrapper\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.aria-expanded]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.aria-haspopup]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-controls]=\"item.sub ? (item.ariaControls ? item.ariaControls : id + '-sub-list') : null\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n *ngIf=\"item.active\"\n class=\"sr-only\">\n Item activo:\n </span>\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n <svg\n *ngIf=\"item.sub\"\n class=\"inline-block -mr-2 align-middle -my-px pointer-events-none\"\n viewBox=\"0 0 96 96\"\n aria-hidden=\"true\"\n fill=\"currentColor\"\n focusable=\"false\"\n width=\"1.5em\"\n height=\"1.5em\">\n <g>\n <path\n d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\" />\n </g>\n </svg>\n </button>\n\n <div\n *ngIf=\"item.sub && getItemSubitems(item)\"\n class=\"c-menu-navigation__sub absolute bottom-0 left-0\">\n <ul\n [id]=\"id + '-sub-list'\"\n [style]=\"menuData && menuData[itemIndex].open ? 'display:block' : 'display:none'\"\n #popupMenu\n role=\"menu\"\n tabindex=\"-1\"\n [class]=\"\n item.sub.classes\n ? item.sub.classes\n : 'c-menu-navigation__tooltip w-max max-w-64 border border-neutral-base shadow-md bg-white text-sm'\n \"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : item.sub.ariaLabel ? item.sub.ariaLabel : null\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [desyAppAccessibility]=\"item.sub\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <li\n #popupMenuItem\n tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <a\n *ngIf=\"subItem.href\"\n #itemContentWrapper\n [href]=\"subItem.href\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"\n [\n 'flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black',\n subItem.classes,\n ] | makeHtmlList\n \"\n [ngClass]=\"{ 'pointer-events-none': subItem.disabled }\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong\n class=\"font-bold\"\n *ngIf=\"subItem.active; else noActive\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </ng-template>\n <svg\n *ngIf=\"subItem.disabled\"\n viewBox=\"0 0 140 140\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path\n d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\" />\n </svg>\n </a>\n <a\n *ngIf=\"!subItem.href && subItem.routerLink\"\n #itemContentWrapper\n [routerLink]=\"subItem.routerLink\"\n [routerLinkActive]=\"subItem.routerLinkActiveClasses ? subItem.routerLinkActiveClasses : []\"\n [fragment]=\"subItem.fragment\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"\n [\n 'flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black',\n subItem.classes,\n ] | makeHtmlList\n \"\n [ngClass]=\"{ 'pointer-events-none': subItem.disabled }\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong\n class=\"font-bold\"\n *ngIf=\"subItem.active; else noActive\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </ng-template>\n <svg\n *ngIf=\"subItem.disabled\"\n viewBox=\"0 0 140 140\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path\n d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\" />\n </svg>\n </a>\n </li>\n <li\n *ngIf=\"subItem.divider\"\n class=\"my-sm border-b border-neutral-base\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n </ul>\n </div>\n </li>\n <li\n #popupMenuItem\n *ngIf=\"item.divider\"\n [class]=\"item.divider.classes\"\n role=\"presentation\"\n aria-hidden=\"true\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: item.divider,\n html: item.divider.html,\n text: item.divider.text,\n }\"></ng-container>\n </li>\n </ng-container>\n</ul>\n" }]
600
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { idPrefix: [{
601
- type: Input
602
- }], items: [{
603
- type: Input
604
- }], itemsChange: [{
605
- type: Output
606
- }], activeItemChange: [{
607
- type: Output
608
- }], activeSubItemChange: [{
609
- type: Output
610
- }], menunavigation: [{
611
- type: ViewChild,
612
- args: ['menunavigation', { read: ElementRef }]
613
- }], menuItems: [{
614
- type: ViewChildren,
615
- args: [MenubaritemDirective]
616
- }], itemComponentList: [{
617
- type: ContentChildren,
618
- args: [MenuNavigationItemComponent]
619
- }], classes: [{
620
- type: Input
621
- }, {
622
- type: HostBinding,
623
- args: ['class']
624
- }], cfg: [{
625
- type: HostBinding,
626
- args: ['class.c-menu-navigation']
627
- }], id: [{
628
- type: Input
629
- }, {
630
- type: HostBinding,
631
- args: ['attr.id']
632
- }], role: [{
633
- type: HostBinding,
634
- args: ['attr.role']
635
- }], ariaLabel: [{
636
- type: HostBinding,
637
- args: ['attr.aria-label']
638
- }], ariaDescribedBy: [{
639
- type: HostBinding,
640
- args: ['attr.aria-describedby']
641
- }], ariaLabelledBy: [{
642
- type: HostBinding,
643
- args: ['attr.aria-labelledby']
644
- }], ariaHidden: [{
645
- type: HostBinding,
646
- args: ['attr.aria-hidden']
647
- }], ariaDisabled: [{
648
- type: HostBinding,
649
- args: ['attr.aria-disabled']
650
- }], ariaControls: [{
651
- type: HostBinding,
652
- args: ['attr.aria-controls']
653
- }], ariaCurrent: [{
654
- type: HostBinding,
655
- args: ['attr.aria-current']
656
- }], ariaLive: [{
657
- type: HostBinding,
658
- args: ['attr.aria-live']
659
- }], ariaExpanded: [{
660
- type: HostBinding,
661
- args: ['attr.aria-expanded']
662
- }], ariaErrorMessage: [{
663
- type: HostBinding,
664
- args: ['attr.aria-errormessage']
665
- }], ariaHasPopup: [{
666
- type: HostBinding,
667
- args: ['attr.aria-haspopup']
668
- }], ariaModal: [{
669
- type: HostBinding,
670
- args: ['attr.aria-modal']
671
- }], ariaChecked: [{
672
- type: HostBinding,
673
- args: ['attr.aria-checked']
674
- }], ariaPressed: [{
675
- type: HostBinding,
676
- args: ['attr.aria-pressed']
677
- }], ariaReadonly: [{
678
- type: HostBinding,
679
- args: ['attr.aria-readonly']
680
- }], ariaRequired: [{
681
- type: HostBinding,
682
- args: ['attr.aria-required']
683
- }], ariaSelected: [{
684
- type: HostBinding,
685
- args: ['attr.aria-selected']
686
- }], ariaValuemin: [{
687
- type: HostBinding,
688
- args: ['attr.aria-valuemin']
689
- }], ariaValuemax: [{
690
- type: HostBinding,
691
- args: ['attr.aria-valuemax']
692
- }], ariaValuenow: [{
693
- type: HostBinding,
694
- args: ['attr.aria-valuenow']
695
- }], ariaValuetext: [{
696
- type: HostBinding,
697
- args: ['attr.aria-valuetext']
698
- }], ariaOrientation: [{
699
- type: HostBinding,
700
- args: ['attr.aria-orientation']
701
- }], ariaLevel: [{
702
- type: HostBinding,
703
- args: ['attr.aria-level']
704
- }], ariaMultiselectable: [{
705
- type: HostBinding,
706
- args: ['attr.aria-multiselectable']
707
- }], ariaPlaceholder: [{
708
- type: HostBinding,
709
- args: ['attr.aria-placeholder']
710
- }], ariaPosinset: [{
711
- type: HostBinding,
712
- args: ['attr.aria-posinset']
713
- }], ariaSetsize: [{
714
- type: HostBinding,
715
- args: ['attr.aria-setsize']
716
- }], ariaSort: [{
717
- type: HostBinding,
718
- args: ['attr.aria-sort']
719
- }], ariaBusy: [{
720
- type: HostBinding,
721
- args: ['attr.aria-busy']
722
- }], ariaDropeffect: [{
723
- type: HostBinding,
724
- args: ['attr.aria-dropeffect']
725
- }], ariaGrabbed: [{
726
- type: HostBinding,
727
- args: ['attr.aria-grabbed']
728
- }], ariaActivedescendant: [{
729
- type: HostBinding,
730
- args: ['attr.aria-activedescendant']
731
- }], ariaAtomic: [{
732
- type: HostBinding,
733
- args: ['attr.aria-atomic']
734
- }], ariaAutocomplete: [{
735
- type: HostBinding,
736
- args: ['attr.aria-autocomplete']
737
- }], ariaBraillelabel: [{
738
- type: HostBinding,
739
- args: ['attr.aria-braillelabel']
740
- }], ariaBrailleroledescription: [{
741
- type: HostBinding,
742
- args: ['attr.aria-brailleroledescription']
743
- }], ariaColcount: [{
744
- type: HostBinding,
745
- args: ['attr.aria-colcount']
746
- }], ariaColindex: [{
747
- type: HostBinding,
748
- args: ['attr.aria-colindex']
749
- }], ariaColindextext: [{
750
- type: HostBinding,
751
- args: ['attr.aria-colindextext']
752
- }], ariaColspan: [{
753
- type: HostBinding,
754
- args: ['attr.aria-colspan']
755
- }], ariaDescription: [{
756
- type: HostBinding,
757
- args: ['attr.aria-description']
758
- }], ariaDetails: [{
759
- type: HostBinding,
760
- args: ['attr.aria-details']
761
- }], ariaFlowto: [{
762
- type: HostBinding,
763
- args: ['attr.aria-flowto']
764
- }], ariaInvalid: [{
765
- type: HostBinding,
766
- args: ['attr.aria-invalid']
767
- }], ariaKeyshortcuts: [{
768
- type: HostBinding,
769
- args: ['attr.aria-keyshortcuts']
770
- }], ariaOwns: [{
771
- type: HostBinding,
772
- args: ['attr.aria-owns']
773
- }], ariaRelevant: [{
774
- type: HostBinding,
775
- args: ['attr.aria-relevant']
776
- }], ariaRoledescription: [{
777
- type: HostBinding,
778
- args: ['attr.aria-roledescription']
779
- }], ariaRowcount: [{
780
- type: HostBinding,
781
- args: ['attr.aria-rowcount']
782
- }], ariaRowindex: [{
783
- type: HostBinding,
784
- args: ['attr.aria-rowindex']
785
- }], ariaRowindextext: [{
786
- type: HostBinding,
787
- args: ['attr.aria-rowindextext']
788
- }], ariaRowspan: [{
789
- type: HostBinding,
790
- args: ['attr.aria-rowspan']
791
- }], tabindex: [{
792
- type: HostBinding,
793
- args: ['attr.tabindex']
794
- }], title: [{
795
- type: HostBinding,
796
- args: ['attr.title']
797
- }], alt: [{
798
- type: HostBinding,
799
- args: ['attr.alt']
800
- }], lang: [{
801
- type: HostBinding,
802
- args: ['attr.lang']
803
- }], accesskey: [{
804
- type: HostBinding,
805
- args: ['attr.accesskey']
806
- }], autocomplete: [{
807
- type: HostBinding,
808
- args: ['attr.autocomplete']
809
- }], autofocus: [{
810
- type: HostBinding,
811
- args: ['attr.autofocus']
812
- }], contenteditable: [{
813
- type: HostBinding,
814
- args: ['attr.contenteditable']
815
- }], dir: [{
816
- type: HostBinding,
817
- args: ['attr.dir']
818
- }], draggable: [{
819
- type: HostBinding,
820
- args: ['attr.draggable']
821
- }], enterkeyhint: [{
822
- type: HostBinding,
823
- args: ['attr.enterkeyhint']
824
- }], hidden: [{
825
- type: HostBinding,
826
- args: ['attr.hidden']
827
- }], inputmode: [{
828
- type: HostBinding,
829
- args: ['attr.inputmode']
830
- }], spellcheck: [{
831
- type: HostBinding,
832
- args: ['attr.spellcheck']
833
- }], translate: [{
834
- type: HostBinding,
835
- args: ['attr.translate']
836
- }], ariaMultiline: [{
837
- type: HostBinding,
838
- args: ['attr.aria-multiline']
839
- }], for: [{
840
- type: HostBinding,
841
- args: ['attr.for']
842
- }], form: [{
843
- type: HostBinding,
844
- args: ['attr.form']
845
- }], headers: [{
846
- type: HostBinding,
847
- args: ['attr.headers']
848
- }], placeholder: [{
849
- type: HostBinding,
850
- args: ['attr.placeholder']
851
- }], readonly: [{
852
- type: HostBinding,
853
- args: ['attr.readonly']
854
- }], required: [{
855
- type: HostBinding,
856
- args: ['attr.required']
857
- }] } });
858
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1uYXZpZ2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktbmF2L2NvbXBvbmVudHMvbWVudS1uYXZpZ2F0aW9uL21lbnUtbmF2aWdhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnUtbmF2aWdhdGlvbi9tZW51LW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUVULFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDL0csT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7OztBQU14SCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsc0JBQXNCO0lBR2pFLElBQ0ksS0FBSyxDQUFDLEtBQTJCO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUE4RkQsWUFBb0IsaUJBQW9DO1FB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QVc7dUJBQUMsY0FBYztnQkFDTSxXQUFXO3NCQUEzQyxXQUFXO3VCQUFDLGtCQUFrQjtnQkFDRCxRQUFRO3NCQUFyQyxXQUFXO3VCQUFDLGVBQWU7Z0JBQ0UsUUFBUTtzQkFBckMsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzJztcbmltcG9ydCB7IE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW0sIE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW1TdWJJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZW51TmF2aWdhdGlvbkl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL21lbnUtbmF2aWdhdGlvbic7XG5pbXBvcnQgeyBNZW51YmFyaXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uL21lbnViYXIvZGlyZWN0aXZlcy9tZW51YmFyaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnUtbmF2aWdhdGlvbi1pdGVtL21lbnUtbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZW51TmF2aWdhdGlvblN1Yml0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVudS1uYXZpZ2F0aW9uLXN1Yml0ZW0vbWVudS1uYXZpZ2F0aW9uLXN1Yml0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGVzeS1tZW51LW5hdmlnYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS1uYXZpZ2F0aW9uLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTWVudU5hdmlnYXRpb25Db21wb25lbnQgZXh0ZW5kcyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgaWRQcmVmaXg6IHN0cmluZztcbiAgX2l0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXTtcbiAgQElucHV0KClcbiAgc2V0IGl0ZW1zKGl0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSkge1xuICAgIHRoaXMuX2l0ZW1zID0gaXRlbXM7XG4gICAgdGhpcy5hY3RpdmVJdGVtSWZTdWJJdGVtSXNBY3RpdmUoaXRlbXMpO1xuICB9XG4gIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51TmF2aWdhdGlvbkl0ZW1bXT4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZUl0ZW1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVOYXZpZ2F0aW9uSXRlbT4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZVN1Ykl0ZW1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW0gfCBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtU3ViSXRlbT4oKTtcblxuICBAVmlld0NoaWxkKCdtZW51bmF2aWdhdGlvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBtZW51bmF2aWdhdGlvbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZHJlbihNZW51YmFyaXRlbURpcmVjdGl2ZSkgbWVudUl0ZW1zOiBRdWVyeUxpc3Q8TWVudWJhcml0ZW1EaXJlY3RpdmU+O1xuICBAQ29udGVudENoaWxkcmVuKE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCkgaXRlbUNvbXBvbmVudExpc3Q6IFF1ZXJ5TGlzdDxNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQ+O1xuXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzc2VzOiBhbnk7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYy1tZW51LW5hdmlnYXRpb24nKSBjZmcgPSB0cnVlO1xuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBpZDogYW55O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBhcmlhTGFiZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgYXJpYURlc2NyaWJlZEJ5OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JykgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpIGFyaWFIaWRkZW46IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJykgYXJpYURpc2FibGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb250cm9scycpIGFyaWFDb250cm9sczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY3VycmVudCcpIGFyaWFDdXJyZW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1saXZlJykgYXJpYUxpdmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJykgYXJpYUV4cGFuZGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2UnKSBhcmlhRXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oYXNwb3B1cCcpIGFyaWFIYXNQb3B1cDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbW9kYWwnKSBhcmlhTW9kYWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNoZWNrZWQnKSBhcmlhQ2hlY2tlZDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcHJlc3NlZCcpIGFyaWFQcmVzc2VkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yZWFkb25seScpIGFyaWFSZWFkb25seTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcmVxdWlyZWQnKSBhcmlhUmVxdWlyZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJykgYXJpYVNlbGVjdGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW1pbicpIGFyaWFWYWx1ZW1pbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtYXgnKSBhcmlhVmFsdWVtYXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbm93JykgYXJpYVZhbHVlbm93OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZXRleHQnKSBhcmlhVmFsdWV0ZXh0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vcmllbnRhdGlvbicpIGFyaWFPcmllbnRhdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGV2ZWwnKSBhcmlhTGV2ZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZScpIGFyaWFNdWx0aXNlbGVjdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXBsYWNlaG9sZGVyJykgYXJpYVBsYWNlaG9sZGVyOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1wb3NpbnNldCcpIGFyaWFQb3NpbnNldDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2V0c2l6ZScpIGFyaWFTZXRzaXplOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zb3J0JykgYXJpYVNvcnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWJ1c3knKSBhcmlhQnVzeTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZHJvcGVmZmVjdCcpIGFyaWFEcm9wZWZmZWN0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1ncmFiYmVkJykgYXJpYUdyYWJiZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKSBhcmlhQWN0aXZlZGVzY2VuZGFudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXRvbWljJykgYXJpYUF0b21pYzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXV0b2NvbXBsZXRlJykgYXJpYUF1dG9jb21wbGV0ZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZWxhYmVsJykgYXJpYUJyYWlsbGVsYWJlbDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZXJvbGVkZXNjcmlwdGlvbicpIGFyaWFCcmFpbGxlcm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb2xjb3VudCcpIGFyaWFDb2xjb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY29saW5kZXgnKSBhcmlhQ29saW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbGluZGV4dGV4dCcpIGFyaWFDb2xpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbHNwYW4nKSBhcmlhQ29sc3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpcHRpb24nKSBhcmlhRGVzY3JpcHRpb246IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRldGFpbHMnKSBhcmlhRGV0YWlsczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZmxvd3RvJykgYXJpYUZsb3d0bzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaW52YWxpZCcpIGFyaWFJbnZhbGlkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1rZXlzaG9ydGN1dHMnKSBhcmlhS2V5c2hvcnRjdXRzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vd25zJykgYXJpYU93bnM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJlbGV2YW50JykgYXJpYVJlbGV2YW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb24nKSBhcmlhUm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb3djb3VudCcpIGFyaWFSb3djb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcm93aW5kZXgnKSBhcmlhUm93aW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd2luZGV4dGV4dCcpIGFyaWFSb3dpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd3NwYW4nKSBhcmlhUm93c3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgdGFiaW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50aXRsZScpIHRpdGxlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYWx0JykgYWx0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIubGFuZycpIGxhbmc6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hY2Nlc3NrZXknKSBhY2Nlc3NrZXk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvY29tcGxldGUnKSBhdXRvY29tcGxldGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvZm9jdXMnKSBhdXRvZm9jdXM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5jb250ZW50ZWRpdGFibGUnKSBjb250ZW50ZWRpdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXInKSBkaXI6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kcmFnZ2FibGUnKSBkcmFnZ2FibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5lbnRlcmtleWhpbnQnKSBlbnRlcmtleWhpbnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5oaWRkZW4nKSBoaWRkZW46IGJvb2xlYW4gPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaW5wdXRtb2RlJykgaW5wdXRtb2RlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc3BlbGxjaGVjaycpIHNwZWxsY2hlY2s6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50cmFuc2xhdGUnKSB0cmFuc2xhdGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpbGluZScpIGFyaWFNdWx0aWxpbmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3InKSBmb3I6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3JtJykgZm9ybTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmhlYWRlcnMnKSBoZWFkZXJzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIucGxhY2Vob2xkZXInKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJlYWRvbmx5JykgcmVhZG9ubHk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5yZXF1aXJlZCcpIHJlcXVpcmVkOiBzdHJpbmcgPSBudWxsO1xuXG4gIG1lbnVEYXRhOiBhbnlbXTtcbiAgdmlld0luaXQgPSBmYWxzZTtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM/OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlld0luaXQpIHtcbiAgICAgIHRoaXMuY2hlY2tDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudmlld0luaXQgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tDaGFuZ2VzKCk7XG4gICAgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5jaGFuZ2VzLnN1YnNjcmliZSgoaXRlbXMpID0+IHRoaXMuYWN0aXZlSXRlbUlmU3ViSXRlbUlzQWN0aXZlKGl0ZW1zLnRvQXJyYXkoKSkpO1xuICB9XG5cbiAgY2hlY2tDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tZW51SXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVEYXRhID0gW107XG4gICAgdGhpcy5nZXRJdGVtcygpLmZvckVhY2goKF8sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpdGVtRGF0YSA9IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIGN1cnJlbnRGb2N1c1N1Ykl0ZW1JbmRleDogMCxcbiAgICAgICAgY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4OiAwLFxuICAgICAgICBtZW51SXRlbTogdGhpcy5tZW51SXRlbXMudG9BcnJheSgpW2luZGV4XSxcbiAgICAgIH07XG4gICAgICB0aGlzLm1lbnVEYXRhLnB1c2goaXRlbURhdGEpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMudmlld0luaXQpIHtcbiAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RDdXJyZW50Rm9jdXNJdGVtSW5kZXggPSB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBpZiAoaXRlbXMpIHtcbiAgICAgIHdoaWxlICghdGhpcy5pc0l0ZW1Gb2N1c2FibGUodGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggJSBpdGVtcy5sZW5ndGgpKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID0gKHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoICsgMSkgJSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9PT0gbGFzdEN1cnJlbnRGb2N1c0l0ZW1JbmRleCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWN0aXZlSXRlbUlmU3ViSXRlbUlzQWN0aXZlKGl0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSB8IE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudFtdKSB7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgbGV0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbSk7XG4gICAgICBpZiAoc3ViSXRlbXMgaW5zdGFuY2VvZiBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQpIHtcbiAgICAgICAgaXRlbS5hY3RpdmUgPSBzdWJJdGVtcy5zdWIuaXRlbXMuZmlsdGVyKChzdWJJdGVtKSA9PiBzdWJJdGVtLmFjdGl2ZSkubGVuZ3RoID4gMDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbT8uc3ViPy5pdGVtcykge1xuICAgICAgICBpdGVtLmFjdGl2ZSA9IGl0ZW0uc3ViLml0ZW1zLmZpbHRlcigoc3ViSXRlbSkgPT4gc3ViSXRlbS5hY3RpdmUpLmxlbmd0aCA+IDA7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKlxuICAgKiBFdmVudG9zXG4gICAqL1xuXG4gIGhhbmRsZU1lbnVGb2N1c0luKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGhhbmRsZU1lbnVGb2N1c091dChldmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tZW51bmF2aWdhdGlvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIH1cbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1DbGljayhldmVudCwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuO1xuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c0ZpcnN0U3ViSXRlbShpdGVtSW5kZXgpKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbUluZGV4LCAtMSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShpdGVtSW5kZXgsICsxKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNMYXN0SXRlbSgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmlzUHJpbnRhYmxlQ2hhcihldmVudC5rZXkpKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW1CeUZpcnN0Q2hhcihldmVudC5rZXkpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgsIHRydWUpO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oXG4gICAgZXZlbnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgaXRlbUluZGV4OiBudW1iZXIsXG4gICAgc3ViSXRlbUluZGV4OiBudW1iZXIsXG4gICAgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTdWJJbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXg7XG4gICAgY29uc3QgY3VycmVudFN1YlN1YkluZGV4ID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnICc6XG4gICAgICAgIHRoaXMuYWN0aXZhdGVQb3B1cE1lbnVJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5tdXN0Q2xvc2VBZnRlclNlbGVjdFBvcHVwSXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgY3VycmVudFN1YkluZGV4LCBjdXJyZW50U3ViU3ViSW5kZXgsIC0xKTtcbiAgICAgICAgLy8gdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCAoY3VycmVudFN1YkluZGV4ICsgbGlzdExlbmd0aCAtIDEpICUgbGlzdExlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgY3VycmVudFN1YkluZGV4LCBjdXJyZW50U3ViU3ViSW5kZXgsICsxKTtcbiAgICAgICAgLy8gdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCAoY3VycmVudFN1YkluZGV4ICsgbGlzdExlbmd0aCArIDEpICUgbGlzdExlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKGl0ZW1JbmRleCArIGl0ZW1zLmxlbmd0aCAtIDEpICUgaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKGl0ZW1JbmRleCArIGl0ZW1zLmxlbmd0aCArIDEpICUgaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdFN1Ykl0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICB0aGlzLmZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHRoaXMuaXNQcmludGFibGVDaGFyKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzU3ViSXRlbUJ5Rmlyc3RDaGFyKGl0ZW1JbmRleCwgZXZlbnQua2V5KTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgfVxuXG4gIC8qXG4gICAqIENvbXVuZXNcbiAgICovXG5cbiAgY2hlY2tSZXF1aXJlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgfVxuXG4gIGFjdGl2YXRlTWVudUl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICB0aGlzLmFjdGl2ZUl0ZW1DaGFuZ2UuZW1pdChpdGVtc1tpdGVtSW5kZXhdIGFzIE1lbnVOYXZpZ2F0aW9uSXRlbSk7XG4gICAgaWYgKGl0ZW1zW2l0ZW1JbmRleF0gaW5zdGFuY2VvZiBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQpIHtcbiAgICAgIChpdGVtc1tpdGVtSW5kZXhdIGFzIE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCkuc2VsZWN0ZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGFjdGl2YXRlUG9wdXBNZW51SXRlbShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgbGV0IGl0ZW06IE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW0gfCBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtU3ViSXRlbSA9IHN1Ykl0ZW1zW3N1Ykl0ZW1JbmRleF07XG5cbiAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgIHRoaXMuYWN0aXZlU3ViSXRlbUNoYW5nZS5lbWl0KGl0ZW0gYXMgTWVudU5hdmlnYXRpb25JdGVtKTtcbiAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIE1lbnVOYXZpZ2F0aW9uU3ViaXRlbUNvbXBvbmVudCkge1xuICAgICAgaXRlbS5zZWxlY3RlZC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdENsb3NlQWZ0ZXJTZWxlY3RQb3B1cEl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGxldCBpdGVtOiBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtIHwgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuXG4gICAgcmV0dXJuIGl0ZW0ucm9sZSAhPT0gJ21lbnVpdGVtY2hlY2tib3gnICYmIGl0ZW0ucm9sZSAhPT0gJ21lbnVpdGVtcmFkaW8nO1xuICB9XG5cbiAgb3Blbk1lbnUoaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3YXNPcGVuZWQgPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbjtcbiAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbiA9IHRydWU7XG4gICAgaWYgKHdhc09wZW5lZCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VNZW51KGl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChpdGVtSW5kZXggIT09IG51bGwgJiYgaXRlbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVudURhdGEuZm9yRWFjaCgoaXRlbSkgPT4gKGl0ZW0ub3BlbiA9IGZhbHNlKSk7XG4gICAgfVxuICB9XG5cbiAgaGFzUG9wdXBNZW51KGl0ZW1JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICByZXR1cm4gaXRlbXNbaXRlbUluZGV4XS5zdWIgJiYgc3ViSXRlbXMgJiYgc3ViSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNQcmludGFibGVDaGFyKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ci5sZW5ndGggPT09IDEgJiYgISFzdHIubWF0Y2goL1xcUy8pO1xuICB9XG5cbiAgLypcbiAgICogQ29tdW5lcyAtIGZvY3VzXG4gICAqL1xuXG4gIGZvY3VzSXRlbShpdGVtSW5kZXg6IG51bWJlciwgaG92ZXI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgaGFzRm9jdXMgPSB0aGlzLm1lbnVuYXZpZ2F0aW9uLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgY29uc3QgaXNPcGVuID0gdGhpcy5tZW51RGF0YVt0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleF0ub3BlbjtcblxuICAgIGlmICghaG92ZXIgfHwgaGFzRm9jdXMpIHtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5saW5rLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIGlmIChpc09wZW4gJiYgdGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID0gaXRlbUluZGV4O1xuICB9XG5cbiAgZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShmcm9tSXRlbUluZGV4OiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBuZXh0SXRlbSA9IGZyb21JdGVtSW5kZXg7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgZG8ge1xuICAgICAgbmV4dEl0ZW0gPSAobmV4dEl0ZW0gKyBpdGVtcy5sZW5ndGggKyBzdGVwKSAlIGl0ZW1zLmxlbmd0aDtcbiAgICB9IHdoaWxlICghdGhpcy5pc0l0ZW1Gb2N1c2FibGUobmV4dEl0ZW0pICYmIG5leHRJdGVtICE9PSBmcm9tSXRlbUluZGV4KTtcblxuICAgIGlmIChuZXh0SXRlbSAhPT0gZnJvbUl0ZW1JbmRleCkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dEl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRmlyc3RJdGVtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSXRlbUZvY3VzYWJsZSgwKSkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0oMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbSgwLCArMSk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNMYXN0SXRlbSgpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBpZiAodGhpcy5pc0l0ZW1Gb2N1c2FibGUoaXRlbXMubGVuZ3RoIC0gMSkpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbXMubGVuZ3RoIC0gMSwgLTEpO1xuICAgIH1cbiAgfVxuXG4gIGlzSXRlbUZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5nZXRJdGVtcygpW2l0ZW1JbmRleF0uZGlzYWJsZWQ7XG4gIH1cblxuICBmb2N1c0l0ZW1CeUZpcnN0Q2hhcihjaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQ29udGVudHM6IHN0cmluZ1tdID0gdGhpcy5tZW51SXRlbXMubWFwKFxuICAgICAgKG1lbnVJdGVtKSA9PiBtZW51SXRlbS5pdGVtQ29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudFxuICAgICk7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXg7XG4gICAgbGV0IGZvdW5kSW5kZXggPSAtMTtcbiAgICBkbyB7XG4gICAgICBpbmRleCA9IChpbmRleCArIGl0ZW1Db250ZW50cy5sZW5ndGggKyAxKSAlIGl0ZW1Db250ZW50cy5sZW5ndGg7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1Db250ZW50c1tpbmRleF0gJiZcbiAgICAgICAgaXRlbUNvbnRlbnRzW2luZGV4XS50cmltKCkuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgPT09IGNoYXIudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICB0aGlzLmlzSXRlbUZvY3VzYWJsZShpbmRleClcbiAgICAgICkge1xuICAgICAgICBmb3VuZEluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmRJbmRleCA9PT0gLTEgJiYgaW5kZXggIT09IHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4KTtcblxuICAgIGlmIChmb3VuZEluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGZvdW5kSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzU3ViSXRlbShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW0ucG9wdXBNZW51SXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWVudURhdGFJbmRleCA9IHN1Ykl0ZW1JbmRleDtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4ID0gc3ViU3ViSXRlbUluZGV4O1xuICAgICAgY29uc3QgZWxlbSA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5wb3B1cE1lbnVJdGVtcy50b0FycmF5KClbbWVudURhdGFJbmRleF0ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgIGNvbnN0IGFFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKCdhJyk7XG4gICAgICAgIGlmIChhRWxlbSkge1xuICAgICAgICAgIGFFbGVtLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzdWJpdGVtIHRvIGZvY3VzJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHN1Yml0ZW1zJyk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShcbiAgICBpdGVtSW5kZXg6IG51bWJlcixcbiAgICBmcm9tSXRlbVN1YkluZGV4OiBudW1iZXIsXG4gICAgZnJvbUl0ZW1TdWJTdWJJbmRleDogbnVtYmVyLFxuICAgIHN0ZXA6IG51bWJlclxuICApOiB2b2lkIHtcbiAgICBsZXQgbmV4dFN1YkluZGV4ID0gZnJvbUl0ZW1TdWJJbmRleDtcbiAgICBsZXQgbmV4dFN1YlN1YkluZGV4ID0gZnJvbUl0ZW1TdWJTdWJJbmRleDtcbiAgICBsZXQgYWxsU3ViSXRlbXNDaGVja2VkO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IG5leHRJbmRleGVzID0gdGhpcy5nZXROZXh0U3ViSXRlbUluZGV4ZXMoaXRlbXMsIGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgsIHN0ZXApO1xuICAgICAgbmV4dFN1YkluZGV4ID0gbmV4dEluZGV4ZXMuc3ViSW5kZXg7XG4gICAgICBuZXh0U3ViU3ViSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJTdWJJbmRleDtcbiAgICAgIGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9IGZyb21JdGVtU3ViSW5kZXggPT09IG5leHRTdWJJbmRleCAmJiBmcm9tSXRlbVN1YlN1YkluZGV4ID09PSBuZXh0U3ViU3ViSW5kZXg7XG4gICAgfSB3aGlsZSAoIXRoaXMuaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgpICYmICFhbGxTdWJJdGVtc0NoZWNrZWQpO1xuXG4gICAgaWYgKCFhbGxTdWJJdGVtc0NoZWNrZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRmlyc3RTdWJJdGVtKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGZpcnN0U3ViU3ViSXRlbSA9IG51bGw7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBpZiAoc3ViSXRlbXMgJiYgc3ViSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgZmlyc3RTdWJTdWJJdGVtID0gMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCAwLCBmaXJzdFN1YlN1Ykl0ZW0pKSB7XG4gICAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSwgKzEpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGNvbnN0IGxhc3RJdGVtSW5kZXggPSBzdWJJdGVtcy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RJdGVtID0gc3ViSXRlbXNbbGFzdEl0ZW1JbmRleF07XG4gICAgbGV0IGxhc3RTdWJTdWJJdGVtID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtKSkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBsYXN0SXRlbUluZGV4LCBsYXN0U3ViU3ViSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtLCAtMSk7XG4gICAgfVxuICB9XG5cbiAgaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBsZXQgaXRlbTogTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbSB8IE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW1TdWJJdGVtID0gc3ViSXRlbXNbc3ViSXRlbUluZGV4XTtcblxuICAgIGxldCBpc0ZvY3VzYWJsZSA9IGZhbHNlO1xuICAgIGlmIChpdGVtLnJvbGUgIT09ICdzZXBhcmF0b3InICYmIGl0ZW0ucm9sZSAhPT0gJ25vbmUnKSB7XG4gICAgICBpc0ZvY3VzYWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBpc0ZvY3VzYWJsZTtcbiAgfVxuXG4gIGZvY3VzU3ViSXRlbUJ5Rmlyc3RDaGFyKGl0ZW1JbmRleDogbnVtYmVyLCBjaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQ29udGVudHM6IHN0cmluZ1tdID0gdGhpcy5tZW51SXRlbXNcbiAgICAgIC50b0FycmF5KClcbiAgICAgIFtpdGVtSW5kZXhdLnBvcHVwTWVudUl0ZW1zLm1hcCgobWVudUl0ZW0pID0+IG1lbnVJdGVtLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpO1xuICAgIGxldCBzdWJJdGVtSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4O1xuICAgIGxldCBzdWJTdWJJdGVtSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4O1xuICAgIGxldCBmb3VuZFN1YkluZGV4ID0gLTE7XG4gICAgbGV0IGZvdW5kU3ViU3ViSW5kZXggPSBudWxsO1xuICAgIGxldCBhbGxTdWJJdGVtc0NoZWNrZWQgPSBmYWxzZTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBkbyB7XG4gICAgICBjb25zdCBuZXh0SW5kZXhlcyA9IHRoaXMuZ2V0TmV4dFN1Ykl0ZW1JbmRleGVzKGl0ZW1zLCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4LCArMSk7XG4gICAgICBzdWJJdGVtSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJJbmRleDtcbiAgICAgIHN1YlN1Ykl0ZW1JbmRleCA9IG5leHRJbmRleGVzLnN1YlN1YkluZGV4O1xuICAgICAgY29uc3QgaW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1Db250ZW50c1tpbmRleF0gJiZcbiAgICAgICAgaXRlbUNvbnRlbnRzW2luZGV4XS50cmltKCkuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgPT09IGNoYXIudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICB0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KVxuICAgICAgKSB7XG4gICAgICAgIGZvdW5kU3ViSW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICAgIGZvdW5kU3ViU3ViSW5kZXggPSBzdWJTdWJJdGVtSW5kZXg7XG4gICAgICB9XG4gICAgICBhbGxTdWJJdGVtc0NoZWNrZWQgPVxuICAgICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4ID09PSBzdWJJdGVtSW5kZXggJiZcbiAgICAgICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleCA9PT0gc3ViU3ViSXRlbUluZGV4O1xuICAgIH0gd2hpbGUgKGZvdW5kU3ViSW5kZXggPT09IC0xICYmICFhbGxTdWJJdGVtc0NoZWNrZWQpO1xuXG4gICAgaWYgKGZvdW5kU3ViSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBmb3VuZFN1YkluZGV4LCBmb3VuZFN1YlN1YkluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgKiBNZXRvZG9zIHBhcmEgZmFjaWxpdGFyIGNvbnRlbmlkb1xuICAgKi9cblxuICBnZXRJdGVtcygpOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSB8IE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudFtdIHtcbiAgICBsZXQgaXRlbXM7XG4gICAgaWYgKHRoaXMuaXRlbUNvbXBvbmVudExpc3QgJiYgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbUNvbXBvbmVudExpc3QudG9BcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGdldEl0ZW1TdWJpdGVtcyhcbiAgICBpdGVtOiBNZW51TmF2aWdhdGlvbkl0ZW0gfCBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnRcbiAgKTogTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVtdIHwgTWVudU5hdmlnYXRpb25TdWJpdGVtQ29tcG9uZW50W10ge1xuICAgIGxldCBzdWJJdGVtcyA9IFtdO1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50KSB7XG4gICAgICBzdWJJdGVtcyA9IGl0ZW0uZ2V0U3ViSXRlbXMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXN1Ykl0ZW1zIHx8IHN1Ykl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc3ViSXRlbXMgPSBpdGVtLnN1YiA/IGl0ZW0uc3ViLml0ZW1zIDogW107XG4gICAgfVxuICAgIHJldHVybiBzdWJJdGVtcztcbiAgfVxuXG4gIGdldE5leHRTdWJJdGVtSW5kZXhlcyhcbiAgICBpdGVtcyxcbiAgICBpdGVtSW5kZXgsXG4gICAgbmV4dFN1YkluZGV4LFxuICAgIG5leHRTdWJTdWJJbmRleCxcbiAgICBzdGVwXG4gICk6IHsgc3ViSW5kZXg6IG51bWJlcjsgc3ViU3ViSW5kZXg/OiBudW1iZXIgfSB7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcblxuICAgIGxldCBjaGVja05leHRTdWJJdGVtID0gdHJ1ZTtcbiAgICBpZiAoY2hlY2tOZXh0U3ViSXRlbSkge1xuICAgICAgbmV4dFN1YkluZGV4ID0gKG5leHRTdWJJbmRleCArIHN0ZXAgKyBzdWJJdGVtcy5sZW5ndGgpICUgc3ViSXRlbXMubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWJJbmRleDogbmV4dFN1YkluZGV4LCBzdWJTdWJJbmRleDogbmV4dFN1YlN1YkluZGV4IH07XG4gIH1cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6IHRoaXMuaWQgKyAnbWVudW5hdmlnYXRpb24taXRlbSc7XG4gIH1cblxuICBnZXRJdGVtSWQoaXRlbSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGlkOiBzdHJpbmc7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgIGlkID0gaXRlbS5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkID0gYCR7dGhpcy5nZXRJZFByZWZpeCgpfS0keysraW5kZXh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgZ2V0U3ViSXRlbUlkKGl0ZW0sIGluZGV4OiBudW1iZXIsIHBhcmVudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBpZDogc3RyaW5nO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICBpZCA9IGl0ZW0uaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZCA9IGBzdWItJHtwYXJlbnRJZH0tJHsrK2luZGV4fWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZDtcbiAgfVxufVxuIiwiPHVsXG4gICNtZW51bmF2aWdhdGlvblxuICBbaWRdPVwiaWQgKyAnLW1lbnUtbmF2aWdhdGlvbidcIlxuICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC1iYXNlXCJcbiAgKGZvY3VzaW4pPVwiaGFuZGxlTWVudUZvY3VzSW4oKVwiXG4gIChmb2N1c291dCk9XCJoYW5kbGVNZW51Rm9jdXNPdXQoJGV2ZW50KVwiXG4gIFtuZ0NsYXNzXT1cInsgZm9jdXM6IGlzRm9jdXNlZCB9XCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgPyBhcmlhTGFiZWwgOiBudWxsXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0SXRlbXMoKTsgaW5kZXggYXMgaXRlbUluZGV4XCI+XG4gICAgPGxpXG4gICAgICBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgIGRlc3lNZW51YmFyaXRlbVxuICAgICAgKGNvbnRlbnRDaGFuZ2VkKT1cImNoZWNrQ2hhbmdlcygpXCI+XG4gICAgICA8YVxuICAgICAgICAqbmdJZj1cIml0ZW0uaHJlZlwiXG4gICAgICAgICNsaW5rXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVNZW51SXRlbUNsaWNrKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgIChrZXlkb3duKT1cImhhbmRsZU1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiXG4gICAgICAgIFthdHRyaWJ1dGVzVG9DaGVja109XCInZGlzYWJsZWQnXCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJpdGVtLmRpc2FibGVkID8gbGluayA6IG51bGxcIlxuICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcbiAgICAgICAgW2hyZWZdPVwiaXRlbS5ocmVmXCJcbiAgICAgICAgW2NsYXNzXT1cIlsnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCxcbiAgICAgICAgICAnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbi0tcHJpbWFyeSc6IGl0ZW0uYWN0aXZlLFxuICAgICAgICAgICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1oYXMtc2VsZWN0aW9uJzogaXRlbS5hY3RpdmUsXG4gICAgICAgIH1cIlxuICAgICAgICBbYXR0ci50aXRsZV09XCJpdGVtLnRpdGxlID8gaXRlbS50aXRsZSA6IG51bGxcIlxuICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogaXRlbS5hcmlhRGlzYWJsZWQgPyBpdGVtLmFyaWFEaXNhYmxlZCA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXRlbS5kaXNhYmxlZCA/ICdwYWdlJyA6IGl0ZW0uYXJpYUN1cnJlbnQgPyBpdGVtLmFyaWFDdXJyZW50IDogbnVsbFwiXG4gICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogaXRlbUluZGV4ID09PSBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPyAwIDogLTFcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IHNlbGYtY2VudGVyIG1heC13LXhzIGFsaWduLW1pZGRsZSB0cnVuY2F0ZSBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgICAjaXRlbUNvbnRlbnRXcmFwcGVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbSwgaHRtbDogaXRlbS5odG1sLCB0ZXh0OiBpdGVtLnRleHQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2E+XG4gICAgICA8YVxuICAgICAgICAqbmdJZj1cIiFpdGVtLmhyZWYgJiYgaXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgI2xpbmtcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCJcbiAgICAgICAgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cIml0ZW0uZGlzYWJsZWQgPyBsaW5rIDogbnVsbFwiXG4gICAgICAgIFtpZF09XCJnZXRJdGVtSWQoaXRlbSwgaXRlbUluZGV4KVwiXG4gICAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxuICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxuICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJpdGVtLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzID8gaXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3NlcyA6IFtdXCJcbiAgICAgICAgW2ZyYWdtZW50XT1cIml0ZW0uZnJhZ21lbnRcIlxuICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uJywgaXRlbS5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbi0tZGlzYWJsZWQnOiBpdGVtLmRpc2FibGVkLFxuICAgICAgICAgICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1wcmltYXJ5JzogaXRlbS5hY3RpdmUsXG4gICAgICAgICAgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWhhcy1zZWxlY3Rpb24nOiBpdGVtLmFjdGl2ZSxcbiAgICAgICAgfVwiXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiBpdGVtLmFyaWFEaXNhYmxlZCA/IGl0ZW0uYXJpYURpc2FibGVkIDogbnVsbFwiXG4gICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCJcbiAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uZGlzYWJsZWQgPyAncGFnZScgOiBpdGVtLmFyaWFDdXJyZW50ID8gaXRlbS5hcmlhQ3VycmVudCA6IG51bGxcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiBpdGVtSW5kZXggPT09IGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA/IDAgOiAtMVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggc2VsZi1jZW50ZXIgbWF4LXcteHMgYWxpZ24tbWlkZGxlIHRydW5jYXRlIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuICAgICAgICAgICNpdGVtQ29udGVudFdyYXBwZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBpdGVtLmh0bWwsIHRleHQ6IGl0ZW0udGV4dCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhaXRlbS5ocmVmICYmICFpdGVtLnJvdXRlckxpbmtcIlxuICAgICAgICAjbGlua1xuICAgICAgICAjaXRlbUNvbnRlbnRXcmFwcGVyXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVNZW51SXRlbUNsaWNrKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgIChrZXlkb3duKT1cImhhbmRsZU1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiXG4gICAgICAgIFthdHRyaWJ1dGVzVG9DaGVja109XCInZGlzYWJsZWQnXCJcbiAgICAgICAgW2NsYXNzXT1cIlsnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCxcbiAgICAgICAgICAnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbi0tcHJpbWFyeSc6IGl0ZW0uYWN0aXZlLFxuICAgICAgICAgICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1oYXMtc2VsZWN0aW9uJzogaXRlbS5hY3RpdmUsXG4gICAgICAgIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0uc3ViID8gKCEhKG1lbnVEYXRhICYmIG1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbikgPyB0cnVlIDogZmFsc2UpIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5zdWIgPyAoISEobWVudURhdGEgJiYgbWVudURhdGFbaXRlbUluZGV4XS5vcGVuKSA/IHRydWUgOiBmYWxzZSkgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IGl0ZW0uYXJpYURpc2FibGVkID8gaXRlbS5hcmlhRGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgW2Rlc3lBcHBBY2Nlc3NpYmlsaXR5XT1cIml0ZW1cIlxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uc3ViID8gKGl0ZW0uYXJpYUNvbnRyb2xzID8gaXRlbS5hcmlhQ29udHJvbHMgOiBpZCArICctc3ViLWxpc3QnKSA6IG51bGxcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiBpdGVtSW5kZXggPT09IGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA/IDAgOiAtMVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICAgIGNsYXNzPVwic3Itb25seVwiPlxuICAgICAgICAgIEl0ZW0gYWN0aXZvOlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBzZWxmLWNlbnRlciBtYXgtdy14cyBhbGlnbi1taWRkbGUgdHJ1bmNhdGUgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgI2l0ZW1Db250ZW50V3JhcHBlcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJpdGVtLnN1YlwiXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtYmxvY2sgLW1yLTIgYWxpZ24tbWlkZGxlIC1teS1weCBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDk2IDk2XCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICB3aWR0aD1cIjEuNWVtXCJcbiAgICAgICAgICBoZWlnaHQ9XCIxLjVlbVwiPlxuICAgICAgICAgIDxnPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk00Ni43MSA1OC4wMzdhMS44MjMgMS44MjMgMCAwMDIuNTgxIDBMNjIuMDQ4IDQ1LjI4YTEuODIzIDEuODIzIDAgMDAtMS4yOS0zLjExM0gzNS4yNDNhMS44MjMgMS44MjMgMCAwMC0xLjI5MSAzLjExM3pcIiAvPlxuICAgICAgICAgIDwvZz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIml0ZW0uc3ViICYmIGdldEl0ZW1TdWJpdGVtcyhpdGVtKVwiXG4gICAgICAgIGNsYXNzPVwiYy1tZW51LW5hdmlnYXRpb25fX3N1YiBhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTBcIj5cbiAgICAgICAgPHVsXG4gICAgICAgICAgW2lkXT1cImlkICsgJy1zdWItbGlzdCdcIlxuICAgICAgICAgIFtzdHlsZV09XCJtZW51RGF0YSAmJiBtZW51RGF0YVtpdGVtSW5kZXhdLm9wZW4gPyAnZGlzcGxheTpibG9jaycgOiAnZGlzcGxheTpub25lJ1wiXG4gICAgICAgICAgI3BvcHVwTWVudVxuICAgICAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICBpdGVtLnN1Yi5jbGFzc2VzXG4gICAgICAgICAgICAgID8gaXRlbS5zdWIuY2xhc3Nlc1xuICAgICAgICAgICAgICA6ICdjLW1lbnUtbmF2aWdhdGlvbl9fdG9vbHRpcCB3LW1heCBtYXgtdy02NCBib3JkZXIgYm9yZGVyLW5ldXRyYWwtYmFzZSBzaGFkb3ctbWQgYmctd2hpdGUgdGV4dC1zbSdcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5hcmlhTGFiZWwgPyBpdGVtLmFyaWFMYWJlbCA6IGl0ZW0uc3ViLmFyaWFMYWJlbCA/IGl0ZW0uc3ViLmFyaWFMYWJlbCA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5zdWIuYXJpYURpc2FibGVkID8gaXRlbS5zdWIuYXJpYURpc2FibGVkIDogbnVsbFwiXG4gICAgICAgICAgW2Rlc3lBcHBBY2Nlc3NpYmlsaXR5XT1cIml0ZW0uc3ViXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViSXRlbSBvZiBnZXRJdGVtU3ViaXRlbXMoaXRlbSk7IGluZGV4IGFzIHN1Ykl0ZW1JbmRleFwiPlxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICNwb3B1cE1lbnVJdGVtXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIj5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAqbmdJZj1cInN1Ykl0ZW0uaHJlZlwiXG4gICAgICAgICAgICAgICAgI2l0ZW1Db250ZW50V3JhcHBlclxuICAgICAgICAgICAgICAgIFtocmVmXT1cInN1Ykl0ZW0uaHJlZlwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIgcHgtYmFzZSBweS1zbSB0ZXh0LXNtIGhvdmVyOmJnLXByaW1hcnktYmFzZSBob3Zlcjp0ZXh0LXdoaXRlIGZvY3VzOmJnLXdhcm5pbmctYmFzZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6c2hhZG93LW91dGxpbmUtZm9jdXMgZm9jdXM6dGV4dC1ibGFjaycsXG4gICAgICAgICAgICAgICAgICAgIHN1Ykl0ZW0uY2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgIF0gfCBtYWtlSHRtbExpc3RcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3BvaW50ZXItZXZlbnRzLW5vbmUnOiBzdWJJdGVtLmRpc2FibGVkIH1cIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJzdWJJdGVtLmRpc2FibGVkID8gLTEgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwic3ViSXRlbS5hY3RpdmUgPyAncGFnZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cInN1Ykl0ZW0udGFyZ2V0XCI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZ1xuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb250LWJvbGRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdWJJdGVtLmFjdGl2ZTsgZWxzZSBub0FjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cIntcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN1Ykl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgaHRtbDogc3ViSXRlbS5odG1sLFxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHN1Ykl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9BY3RpdmU+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwie1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogc3ViSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBodG1sOiBzdWJJdGVtLmh0bWwsXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3ViSXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInN1Ykl0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNDAgMTQwXCJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIGFsaWduLW1pZGRsZSBmbGV4LWluaXRpYWwgbWwtc20gdGV4dC1uZXV0cmFsLWJhc2UgZmlsbC1jdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk03MCAwYTcwIDcwIDAgMTA3MCA3MEE3MC4wOCA3MC4wOCAwIDAwNzAgMHpNMjAgNzBhNTAgNTAgMCAwMTc0LjgtNDMuNCAyLjUxIDIuNTEgMCAwMTEuMjMgMS44NCAyLjQ4IDIuNDggMCAwMS0uNzEgMi4xTDMwLjU0IDk1LjMyYTIuNTEgMi41MSAwIDAxLTMuOTQtLjUyQTQ5LjYzIDQ5LjYzIDAgMDEyMCA3MHptMTAwIDBhNTAgNTAgMCAwMS03NC44IDQzLjQgMi41MSAyLjUxIDAgMDEtMS4yMy0xLjg0IDIuNDggMi40OCAwIDAxLjcxLTIuMWw2NC43OC02NC43OGEyLjUxIDIuNTEgMCAwMTMuOTQuNTJBNDkuNjMgNDkuNjMgMCAwMTEyMCA3MHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhc3ViSXRlbS5ocmVmICYmIHN1Ykl0ZW0ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAgICAgI2l0ZW1Db250ZW50V3JhcHBlclxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInN1Ykl0ZW0ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwic3ViSXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3NlcyA/IHN1Ykl0ZW0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXMgOiBbXVwiXG4gICAgICAgICAgICAgICAgW2ZyYWdtZW50XT1cInN1Ykl0ZW0uZnJhZ21lbnRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIHB4LWJhc2UgcHktc20gdGV4dC1zbSBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZSBmb2N1czpiZy13YXJuaW5nLWJhc2UgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnNoYWRvdy1vdXRsaW5lLWZvY3VzIGZvY3VzOnRleHQtYmxhY2snLFxuICAgICAgICAgICAgICAgICAgICBzdWJJdGVtLmNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICBdIHwgbWFrZUh0bWxMaXN0XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwb2ludGVyLWV2ZW50cy1ub25lJzogc3ViSXRlbS5kaXNhYmxlZCB9XCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwic3ViSXRlbS5kaXNhYmxlZCA/IC0xIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cInN1Ykl0ZW0uYWN0aXZlID8gJ3BhZ2UnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW3RhcmdldF09XCJzdWJJdGVtLnRhcmdldFwiPlxuICAgICAgICAgICAgICAgIDxzdHJvbmdcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1ib2xkXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3ViSXRlbS5hY3RpdmU7IGVsc2Ugbm9BY3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdWJJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IHN1Ykl0ZW0uaHRtbCxcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdWJJdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vQWN0aXZlPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cIntcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN1Ykl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgaHRtbDogc3ViSXRlbS5odG1sLFxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHN1Ykl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdWJJdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTQwIDE0MFwiXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1ibG9jayBhbGlnbi1taWRkbGUgZmxleC1pbml0aWFsIG1sLXNtIHRleHQtbmV1dHJhbC1iYXNlIGZpbGwtY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNzAgMGE3MCA3MCAwIDEwNzAgNzBBNzAuMDggNzAuMDggMCAwMDcwIDB6TTIwIDcwYTUwIDUwIDAgMDE3NC44LTQzLjQgMi41MSAyLjUxIDAgMDExLjIzIDEuODQgMi40OCAyLjQ4IDAgMDEtLjcxIDIuMUwzMC41NCA5NS4zMmEyLjUxIDIuNTEgMCAwMS0zLjk0LS41MkE0OS42MyA0OS42MyAwIDAxMjAgNzB6bTEwMCAwYTUwIDUwIDAgMDEtNzQuOCA0My40IDIuNTEgMi41MSAwIDAxLTEuMjMtMS44NCAyLjQ4IDIuNDggMCAwMS43MS0yLjFsNjQuNzgtNjQuNzhhMi41MSAyLjUxIDAgMDEzLjk0LjUyQTQ5LjYzIDQ5LjYzIDAgMDExMjAgNzB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAqbmdJZj1cInN1Ykl0ZW0uZGl2aWRlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibXktc20gYm9yZGVyLWIgYm9yZGVyLW5ldXRyYWwtYmFzZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Itb25seVwiPlNlcGFyYWRvcjwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gICAgPGxpXG4gICAgICAjcG9wdXBNZW51SXRlbVxuICAgICAgKm5nSWY9XCJpdGVtLmRpdmlkZXJcIlxuICAgICAgW2NsYXNzXT1cIml0ZW0uZGl2aWRlci5jbGFzc2VzXCJcbiAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwie1xuICAgICAgICAgIGNvbXBvbmVudDogaXRlbS5kaXZpZGVyLFxuICAgICAgICAgIGh0bWw6IGl0ZW0uZGl2aWRlci5odG1sLFxuICAgICAgICAgIHRleHQ6IGl0ZW0uZGl2aWRlci50ZXh0LFxuICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9saT5cbiAgPC9uZy1jb250YWluZXI+XG48L3VsPlxuIl19