@fundamental-ngx/platform 0.49.0-rc.8 → 0.49.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 (429) hide show
  1. package/approval-flow/approval-flow.component.d.ts +7 -1
  2. package/button/button.component.d.ts +1 -4
  3. package/esm2022/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +4 -4
  4. package/esm2022/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.mjs +4 -4
  5. package/esm2022/approval-flow/approval-flow-messages/approval-flow-messages.component.mjs +3 -3
  6. package/esm2022/approval-flow/approval-flow-node/approval-flow-drop-zone.directive.mjs +3 -3
  7. package/esm2022/approval-flow/approval-flow-node/approval-flow-node.component.mjs +3 -3
  8. package/esm2022/approval-flow/approval-flow-select-type/approval-flow-select-type.component.mjs +4 -4
  9. package/esm2022/approval-flow/approval-flow-team-list/approval-flow-team-list.component.mjs +3 -3
  10. package/esm2022/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.mjs +3 -3
  11. package/esm2022/approval-flow/approval-flow-user-details/approval-flow-user-details.component.mjs +3 -3
  12. package/esm2022/approval-flow/approval-flow-user-list/approval-flow-user-list.component.mjs +3 -3
  13. package/esm2022/approval-flow/approval-flow.component.mjs +27 -5
  14. package/esm2022/approval-flow/approval-flow.module.mjs +4 -4
  15. package/esm2022/approval-flow/services/approval-flow-add-node-view.service.mjs +3 -3
  16. package/esm2022/button/button.component.mjs +4 -6
  17. package/esm2022/button/button.module.mjs +4 -4
  18. package/esm2022/dynamic-page/directives/dynamic-page-header-subtitle.directive.mjs +3 -3
  19. package/esm2022/dynamic-page/directives/dynamic-page-header-title.directive.mjs +3 -3
  20. package/esm2022/dynamic-page/dynamic-page-content/dynamic-page-content-host.component.mjs +3 -3
  21. package/esm2022/dynamic-page/dynamic-page-content/dynamic-page-content.component.mjs +3 -3
  22. package/esm2022/dynamic-page/dynamic-page-footer/dynamic-page-footer.component.mjs +3 -3
  23. package/esm2022/dynamic-page/dynamic-page-header/actions/global-actions/dynamic-page-global-actions.component.mjs +3 -3
  24. package/esm2022/dynamic-page/dynamic-page-header/actions/layout-actions/dynamic-page-layout-actions.component.mjs +3 -3
  25. package/esm2022/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.mjs +3 -3
  26. package/esm2022/dynamic-page/dynamic-page-header/key-info/dynamic-page-key-info.component.mjs +3 -3
  27. package/esm2022/dynamic-page/dynamic-page-header/title/dynamic-page-title-image.component.mjs +3 -3
  28. package/esm2022/dynamic-page/dynamic-page-header/title/dynamic-page-title.component.mjs +3 -3
  29. package/esm2022/dynamic-page/dynamic-page.component.mjs +6 -6
  30. package/esm2022/dynamic-page/dynamic-page.config.mjs +3 -3
  31. package/esm2022/dynamic-page/dynamic-page.module.mjs +4 -4
  32. package/esm2022/feed-input/feed-input.component.mjs +5 -5
  33. package/esm2022/feed-input/feed-input.module.mjs +4 -4
  34. package/esm2022/form/auto-complete/auto-complete.directive.mjs +3 -3
  35. package/esm2022/form/auto-complete/auto-complete.module.mjs +4 -4
  36. package/esm2022/form/checkbox/checkbox.component.mjs +3 -3
  37. package/esm2022/form/checkbox/checkbox.module.mjs +4 -4
  38. package/esm2022/form/checkbox-group/checkbox-group.component.mjs +3 -3
  39. package/esm2022/form/checkbox-group/checkbox-group.module.mjs +4 -4
  40. package/esm2022/form/combobox/combobox/combobox.component.mjs +5 -5
  41. package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +4 -4
  42. package/esm2022/form/combobox/combobox-mobile/combobox-mobile.module.mjs +4 -4
  43. package/esm2022/form/combobox/combobox.config.mjs +11 -11
  44. package/esm2022/form/combobox/combobox.module.mjs +4 -4
  45. package/esm2022/form/combobox/commons/base-combobox.mjs +5 -8
  46. package/esm2022/form/combobox/directives/combobox-item.directive.mjs +15 -15
  47. package/esm2022/form/date-picker/date-picker.component.mjs +3 -3
  48. package/esm2022/form/date-picker/date-picker.module.mjs +4 -4
  49. package/esm2022/form/datetime-picker/datetime-picker.component.mjs +3 -3
  50. package/esm2022/form/datetime-picker/datetime-picker.module.mjs +4 -4
  51. package/esm2022/form/form-generator/base-dynamic-form-generator-control.mjs +3 -3
  52. package/esm2022/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.mjs +3 -3
  53. package/esm2022/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.mjs +3 -3
  54. package/esm2022/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.mjs +4 -4
  55. package/esm2022/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.mjs +3 -3
  56. package/esm2022/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.mjs +3 -3
  57. package/esm2022/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.mjs +3 -3
  58. package/esm2022/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.mjs +3 -3
  59. package/esm2022/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.mjs +3 -3
  60. package/esm2022/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.mjs +3 -3
  61. package/esm2022/form/form-generator/dynamic-form-control-field.directive.mjs +3 -3
  62. package/esm2022/form/form-generator/dynamic-form-control.directive.mjs +3 -3
  63. package/esm2022/form/form-generator/dynamic-form-control.mjs +1 -1
  64. package/esm2022/form/form-generator/fdp-form-generator.module.mjs +4 -4
  65. package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +3 -3
  66. package/esm2022/form/form-generator/form-generator-components-accessor.service.mjs +3 -3
  67. package/esm2022/form/form-generator/form-generator-field/form-generator-field.component.mjs +3 -3
  68. package/esm2022/form/form-generator/form-generator.service.mjs +3 -3
  69. package/esm2022/form/form-generator/pipes/get-hint-options.pipe.mjs +3 -3
  70. package/esm2022/form/form-generator/pipes/get-ordered-form-controls.pipe.mjs +3 -3
  71. package/esm2022/form/form-group/fdp-form.module.mjs +4 -4
  72. package/esm2022/form/form-group/form-field/form-field.component.mjs +5 -5
  73. package/esm2022/form/form-group/form-field-error/form-field-error-description.directive.mjs +3 -3
  74. package/esm2022/form/form-group/form-field-error/form-field-error-heading.directive.mjs +3 -3
  75. package/esm2022/form/form-group/form-field-error/form-field-error.directive.mjs +3 -3
  76. package/esm2022/form/form-group/form-field-extras/form-field-extras.component.mjs +3 -3
  77. package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +4 -4
  78. package/esm2022/form/form-group/form-group-header/form-group-header.component.mjs +3 -3
  79. package/esm2022/form/form-group/form-group.component.mjs +5 -5
  80. package/esm2022/form/form-group/pipes/field-group-row-value.pipe.mjs +3 -3
  81. package/esm2022/form/form-group/services/form-field-layout.service.mjs +3 -3
  82. package/esm2022/form/input/fdp-input.module.mjs +4 -4
  83. package/esm2022/form/input/input.component.mjs +4 -4
  84. package/esm2022/form/input-group/addon-body.component.mjs +3 -3
  85. package/esm2022/form/input-group/addon.component.mjs +3 -3
  86. package/esm2022/form/input-group/input-group.component.mjs +3 -3
  87. package/esm2022/form/input-group/input-group.config.mjs +3 -3
  88. package/esm2022/form/input-group/input-group.module.mjs +4 -4
  89. package/esm2022/form/input-group/input.component.mjs +3 -3
  90. package/esm2022/form/input-message-group-with-template/input-message-group-with-template.component.mjs +4 -4
  91. package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +3 -3
  92. package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +6 -6
  93. package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +4 -4
  94. package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.mjs +4 -4
  95. package/esm2022/form/multi-combobox/multi-combobox.config.mjs +3 -3
  96. package/esm2022/form/multi-combobox/multi-combobox.module.mjs +4 -4
  97. package/esm2022/form/multi-input/base-multi-input.mjs +11 -5
  98. package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +3 -3
  99. package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.module.mjs +4 -4
  100. package/esm2022/form/multi-input/multi-input.component.mjs +5 -5
  101. package/esm2022/form/multi-input/multi-input.config.mjs +3 -3
  102. package/esm2022/form/multi-input/multi-input.module.mjs +4 -4
  103. package/esm2022/form/radio-group/radio/radio.component.mjs +3 -3
  104. package/esm2022/form/radio-group/radio-group.component.mjs +3 -3
  105. package/esm2022/form/radio-group/radio-group.module.mjs +4 -4
  106. package/esm2022/form/select/commons/base-select.mjs +4 -4
  107. package/esm2022/form/select/select/select.component.mjs +5 -5
  108. package/esm2022/form/select/select.config.mjs +3 -3
  109. package/esm2022/form/select/select.module.mjs +4 -4
  110. package/esm2022/form/step-input/base.step-input.mjs +3 -3
  111. package/esm2022/form/step-input/number/number-step-input.component.mjs +6 -6
  112. package/esm2022/form/step-input/step-input-action-button.mjs +3 -3
  113. package/esm2022/form/step-input/step-input-control.directive.mjs +3 -3
  114. package/esm2022/form/step-input/step-input-decrement.directive.mjs +3 -3
  115. package/esm2022/form/step-input/step-input-increment.directive.mjs +3 -3
  116. package/esm2022/form/step-input/step-input.config.mjs +3 -3
  117. package/esm2022/form/step-input/step-input.module.mjs +4 -4
  118. package/esm2022/form/switch/switch/switch.component.mjs +4 -4
  119. package/esm2022/form/switch/switch/switch.config.mjs +3 -3
  120. package/esm2022/form/switch/switch.module.mjs +4 -4
  121. package/esm2022/form/text-area/text-area.component.mjs +4 -6
  122. package/esm2022/form/text-area/text-area.config.mjs +3 -3
  123. package/esm2022/form/text-area/text-area.module.mjs +4 -4
  124. package/esm2022/form/time-picker/time-picker.component.mjs +4 -4
  125. package/esm2022/form/time-picker/time-picker.module.mjs +4 -4
  126. package/esm2022/fundamental-ngx-platform.mjs +1 -1
  127. package/esm2022/fundamental-ngx.module.mjs +5 -5
  128. package/esm2022/icon-tab-bar/components/closable-icon-tab-bar.class.mjs +3 -3
  129. package/esm2022/icon-tab-bar/components/icon-tab-bar-base.class.mjs +6 -7
  130. package/esm2022/icon-tab-bar/components/icon-tab-bar-filter-type/icon-tab-bar-filter-type.component.mjs +3 -3
  131. package/esm2022/icon-tab-bar/components/icon-tab-bar-icon-type/icon-tab-bar-icon-type.component.mjs +3 -3
  132. package/esm2022/icon-tab-bar/components/icon-tab-bar-process-type/icon-tab-bar-process-type.component.mjs +3 -3
  133. package/esm2022/icon-tab-bar/components/icon-tab-bar-tab/icon-tab-bar-tab.component.mjs +6 -6
  134. package/esm2022/icon-tab-bar/components/icon-tab-bar-text-type/icon-tab-bar-text-type.component.mjs +3 -3
  135. package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover/icon-tab-bar-popover.component.mjs +4 -4
  136. package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover-base.class.mjs +3 -3
  137. package/esm2022/icon-tab-bar/components/popovers/text-type-popover/text-type-popover.component.mjs +4 -4
  138. package/esm2022/icon-tab-bar/components/text-type-tab-item/icon-tab-bar-text-type-tab-item.component.mjs +3 -3
  139. package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.mjs +3 -3
  140. package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.mjs +3 -3
  141. package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.mjs +3 -3
  142. package/esm2022/icon-tab-bar/directives/icon-tab-bar-free-content.directive.mjs +3 -3
  143. package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +6 -6
  144. package/esm2022/icon-tab-bar/icon-tab-bar.module.mjs +4 -4
  145. package/esm2022/index.mjs +1 -1
  146. package/esm2022/info-label/info-label.component.mjs +3 -3
  147. package/esm2022/info-label/info-label.module.mjs +4 -4
  148. package/esm2022/link/link.component.mjs +7 -7
  149. package/esm2022/link/link.module.mjs +4 -4
  150. package/esm2022/list/action-list-item/action-list-item.component.mjs +3 -3
  151. package/esm2022/list/action-list-item/action-list-item.module.mjs +4 -4
  152. package/esm2022/list/base-list-item.mjs +6 -6
  153. package/esm2022/list/display-list-item/display-list-item.component.mjs +4 -4
  154. package/esm2022/list/display-list-item/display-list-item.module.mjs +4 -4
  155. package/esm2022/list/free-content-list-item/free-content-list-item.component.mjs +3 -3
  156. package/esm2022/list/list-group-footer.component.mjs +3 -3
  157. package/esm2022/list/list-group-header.component.mjs +3 -3
  158. package/esm2022/list/list.component.mjs +6 -6
  159. package/esm2022/list/list.config.mjs +3 -3
  160. package/esm2022/list/list.module.mjs +4 -4
  161. package/esm2022/list/load-more-content.directive.mjs +3 -3
  162. package/esm2022/list/object-list-item/object-list-item-row.component.mjs +6 -6
  163. package/esm2022/list/object-list-item/object-list-item.component.mjs +5 -5
  164. package/esm2022/list/object-list-item/object-list-item.module.mjs +4 -4
  165. package/esm2022/list/standard-list-item/standard-list-item.component.mjs +4 -4
  166. package/esm2022/list/standard-list-item/standard-list-item.module.mjs +4 -4
  167. package/esm2022/menu/menu-item.component.mjs +5 -5
  168. package/esm2022/menu/menu-trigger.directive.mjs +3 -3
  169. package/esm2022/menu/menu.component.mjs +4 -4
  170. package/esm2022/menu/menu.module.mjs +4 -4
  171. package/esm2022/menu-button/menu-button.component.mjs +3 -3
  172. package/esm2022/menu-button/menu-button.module.mjs +4 -4
  173. package/esm2022/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.mjs +3 -3
  174. package/esm2022/message-popover/components/message-view/message-view.component.mjs +3 -3
  175. package/esm2022/message-popover/directives/message-popover-form-item.directive.mjs +3 -3
  176. package/esm2022/message-popover/message-popover.component.mjs +5 -5
  177. package/esm2022/message-popover/platform-message-popover.module.mjs +4 -4
  178. package/esm2022/object-marker/object-marker.component.mjs +3 -3
  179. package/esm2022/object-marker/object-marker.module.mjs +4 -4
  180. package/esm2022/object-status/object-status.component.mjs +6 -6
  181. package/esm2022/object-status/object-status.module.mjs +4 -4
  182. package/esm2022/page-footer/page-footer.component.mjs +5 -5
  183. package/esm2022/page-footer/page-footer.module.mjs +4 -4
  184. package/esm2022/panel/panel-actions.component.mjs +3 -3
  185. package/esm2022/panel/panel-content/panel-content.component.mjs +3 -3
  186. package/esm2022/panel/panel.component.mjs +4 -4
  187. package/esm2022/panel/panel.config.mjs +3 -3
  188. package/esm2022/panel/panel.module.mjs +4 -4
  189. package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +4 -4
  190. package/esm2022/search-field/search-field.component.mjs +33 -94
  191. package/esm2022/search-field/search-field.module.mjs +4 -4
  192. package/esm2022/settings-generator/controls/theme-selector-list/theme-selector-list.component.mjs +6 -6
  193. package/esm2022/settings-generator/layouts/base-settings-generator-layout.mjs +3 -3
  194. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +3 -3
  195. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +3 -3
  196. package/esm2022/settings-generator/settings-generator-content/settings-generator-content.component.mjs +4 -4
  197. package/esm2022/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.mjs +3 -3
  198. package/esm2022/settings-generator/settings-generator-layout-accessor.service.mjs +3 -3
  199. package/esm2022/settings-generator/settings-generator.component.mjs +3 -3
  200. package/esm2022/settings-generator/settings-generator.module.mjs +4 -4
  201. package/esm2022/settings-generator/settings-generator.service.mjs +3 -3
  202. package/esm2022/shared/base.mjs +3 -3
  203. package/esm2022/shared/form/base.input.mjs +4 -4
  204. package/esm2022/shared/form/collection-base.input.mjs +3 -3
  205. package/esm2022/shared/form/form-field.mjs +1 -1
  206. package/esm2022/shared/form/inline-layout-collection-base.input.mjs +9 -9
  207. package/esm2022/shared/pipes/convert-bytes/convert-bytes.pipe.mjs +3 -3
  208. package/esm2022/shared/pipes/pipe.module.mjs +4 -4
  209. package/esm2022/shared/platform.config.mjs +3 -3
  210. package/esm2022/slider/slider.component.mjs +3 -3
  211. package/esm2022/slider/slider.module.mjs +4 -4
  212. package/esm2022/smart-filter-bar/components/smart-filter-bar-condition-field/base-smart-filter-bar-condition-field.mjs +3 -3
  213. package/esm2022/smart-filter-bar/components/smart-filter-bar-condition-field/smart-filter-bar-condition-field.component.mjs +3 -3
  214. package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +4 -4
  215. package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +4 -4
  216. package/esm2022/smart-filter-bar/directives/smart-filter-bar-field-definition.directive.mjs +3 -3
  217. package/esm2022/smart-filter-bar/directives/smart-filter-bar-subject.directive.mjs +3 -3
  218. package/esm2022/smart-filter-bar/directives/smart-filter-bar-toolbar-item.directive.mjs +3 -3
  219. package/esm2022/smart-filter-bar/smart-filter-bar.class.mjs +3 -3
  220. package/esm2022/smart-filter-bar/smart-filter-bar.component.mjs +14 -10
  221. package/esm2022/smart-filter-bar/smart-filter-bar.module.mjs +4 -4
  222. package/esm2022/smart-filter-bar/smart-filter-bar.service.mjs +3 -3
  223. package/esm2022/split-menu-button/split-menu-button.component.mjs +4 -4
  224. package/esm2022/split-menu-button/split-menu-button.module.mjs +4 -4
  225. package/esm2022/table/components/growing-button/table-growing-button.component.mjs +31 -0
  226. package/esm2022/table/components/no-data-wrapper/no-data-wrapper.component.mjs +3 -3
  227. package/esm2022/table/components/reset-button/reset-button.component.mjs +3 -3
  228. package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +4 -4
  229. package/esm2022/table/components/table-column/table-column.component.mjs +3 -3
  230. package/esm2022/table/components/table-column-resizer/table-column-resizer.component.mjs +3 -3
  231. package/esm2022/table/components/table-editable-cell/table-editable-cell.component.mjs +3 -3
  232. package/esm2022/table/components/table-group-row/table-group-row.component.mjs +3 -3
  233. package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +3 -3
  234. package/esm2022/table/components/table-header-row/table-header-row.component.mjs +6 -6
  235. package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +8 -7
  236. package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +3 -3
  237. package/esm2022/table/components/table-p13-dialog/filtering/filtering.component.mjs +11 -7
  238. package/esm2022/table/components/table-p13-dialog/filtering/filtering.model.mjs +1 -1
  239. package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +5 -5
  240. package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +8 -8
  241. package/esm2022/table/components/table-p13-dialog/table-p13-columns.component.mjs +3 -3
  242. package/esm2022/table/components/table-p13-dialog/table-p13-dialog.component.mjs +9 -6
  243. package/esm2022/table/components/table-p13-dialog/table-p13-filter.component.mjs +8 -7
  244. package/esm2022/table/components/table-p13-dialog/table-p13-group.component.mjs +3 -3
  245. package/esm2022/table/components/table-p13-dialog/table-p13-sort.component.mjs +3 -3
  246. package/esm2022/table/components/table-popping-row/table-popping-row.component.mjs +3 -3
  247. package/esm2022/table/components/table-row/table-row.component.mjs +10 -9
  248. package/esm2022/table/components/table-toolbar/table-toolbar-actions.component.mjs +3 -3
  249. package/esm2022/table/components/table-toolbar/table-toolbar-left-actions.component.mjs +3 -3
  250. package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +10 -11
  251. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-custom.component.mjs +3 -3
  252. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.mjs +3 -3
  253. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-single-select.component.mjs +3 -3
  254. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-step.component.mjs +4 -4
  255. package/esm2022/table/components/table-view-settings-dialog/filtering/filters-list-step.component.mjs +4 -4
  256. package/esm2022/table/components/table-view-settings-dialog/filtering/filters.component.mjs +4 -4
  257. package/esm2022/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +4 -4
  258. package/esm2022/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +4 -4
  259. package/esm2022/table/components/table-view-settings-dialog/table-view-settings-dialog.component.mjs +3 -3
  260. package/esm2022/table/components/table-view-settings-dialog/table-view-settings-filter.component.mjs +3 -3
  261. package/esm2022/table/index.mjs +2 -1
  262. package/esm2022/table/table.component.mjs +38 -12
  263. package/esm2022/table/table.module.mjs +14 -9
  264. package/esm2022/table-helpers/directives/index.mjs +1 -2
  265. package/esm2022/table-helpers/directives/platform-table-column-responsive.directive.mjs +3 -3
  266. package/esm2022/table-helpers/directives/table-cell-header-popover.directive.mjs +3 -3
  267. package/esm2022/table-helpers/directives/table-cell-resizable.directive.mjs +3 -3
  268. package/esm2022/table-helpers/directives/table-cell.directive.mjs +12 -12
  269. package/esm2022/table-helpers/directives/table-data-source.directive.mjs +3 -3
  270. package/esm2022/table-helpers/directives/table-draggable.directive.mjs +3 -3
  271. package/esm2022/table-helpers/directives/table-header-resizer.directive.mjs +3 -3
  272. package/esm2022/table-helpers/directives/table-header.directive.mjs +6 -6
  273. package/esm2022/table-helpers/directives/table-initial-state.directive.mjs +3 -3
  274. package/esm2022/table-helpers/directives/table-scrollable.directive.mjs +3 -3
  275. package/esm2022/table-helpers/directives/table-view-settings-filter-custom.directive.mjs +3 -3
  276. package/esm2022/table-helpers/directives/table-virtual-scroll.directive.mjs +3 -3
  277. package/esm2022/table-helpers/pipes/cell-styles.pipe.mjs +3 -3
  278. package/esm2022/table-helpers/pipes/column-resizable-side.pipe.mjs +3 -3
  279. package/esm2022/table-helpers/pipes/column-sorting-direction.pipe.mjs +3 -3
  280. package/esm2022/table-helpers/pipes/row-classes.pipe.mjs +3 -3
  281. package/esm2022/table-helpers/pipes/selection-cell-styles.pipe.mjs +3 -3
  282. package/esm2022/table-helpers/services/table-column-resize.service.mjs +3 -3
  283. package/esm2022/table-helpers/services/table-responsive.service.mjs +3 -3
  284. package/esm2022/table-helpers/services/table-row.service.mjs +3 -3
  285. package/esm2022/table-helpers/services/table-scroll-dispatcher.service.mjs +3 -3
  286. package/esm2022/table-helpers/services/table.service.mjs +28 -5
  287. package/esm2022/table-helpers/table-helpers.module.mjs +6 -9
  288. package/esm2022/table-helpers/table.mjs +1 -1
  289. package/esm2022/value-help-dialog/components/base-tab/vhd-base-tab.component.mjs +3 -3
  290. package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +7 -6
  291. package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +4 -4
  292. package/esm2022/value-help-dialog/components/value-help-dialog-filter/value-help-dialog-filter.component.mjs +3 -3
  293. package/esm2022/value-help-dialog/directives/condition-count-message.directive.mjs +3 -3
  294. package/esm2022/value-help-dialog/directives/value-help-column-def.directive.mjs +3 -3
  295. package/esm2022/value-help-dialog/directives/value-help-filter-def.directive.mjs +6 -6
  296. package/esm2022/value-help-dialog/models/vhd-filter.model.mjs +1 -1
  297. package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +6 -6
  298. package/esm2022/value-help-dialog/value-help-dialog.module.mjs +4 -4
  299. package/esm2022/variant-management/components/manage-variant-item/manage-variant-item.component.mjs +4 -4
  300. package/esm2022/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +4 -4
  301. package/esm2022/variant-management/components/variant-management-wrapper/variant-management-wrapper.component.mjs +3 -3
  302. package/esm2022/variant-management/directives/variant-management-dirty-label.directive.mjs +3 -3
  303. package/esm2022/variant-management/variant-management.component.mjs +6 -6
  304. package/esm2022/variant-management/variant-management.module.mjs +4 -4
  305. package/esm2022/wizard-generator/base-wizard-generator.mjs +3 -3
  306. package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +4 -4
  307. package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +3 -3
  308. package/esm2022/wizard-generator/components/wizard-generator/wizard-generator.component.mjs +3 -3
  309. package/esm2022/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +4 -4
  310. package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.mjs +4 -4
  311. package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.mjs +3 -3
  312. package/esm2022/wizard-generator/directives/wizard-generator-finish-button.directive.mjs +3 -3
  313. package/esm2022/wizard-generator/directives/wizard-generator-go-next-button.directive.mjs +3 -3
  314. package/esm2022/wizard-generator/directives/wizard-generator-review-button.directive.mjs +3 -3
  315. package/esm2022/wizard-generator/directives/wizard-generator-summary-step.directive.mjs +3 -3
  316. package/esm2022/wizard-generator/wizard-dialog-generator.service.mjs +3 -3
  317. package/esm2022/wizard-generator/wizard-generator.module.mjs +4 -4
  318. package/esm2022/wizard-generator/wizard-generator.service.mjs +3 -3
  319. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +63 -41
  320. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  321. package/fesm2022/fundamental-ngx-platform-button.mjs +7 -9
  322. package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
  323. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +45 -45
  324. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  325. package/fesm2022/fundamental-ngx-platform-feed-input.mjs +8 -8
  326. package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
  327. package/fesm2022/fundamental-ngx-platform-form.mjs +331 -330
  328. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  329. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +60 -60
  330. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
  331. package/fesm2022/fundamental-ngx-platform-info-label.mjs +7 -7
  332. package/fesm2022/fundamental-ngx-platform-link.mjs +10 -10
  333. package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
  334. package/fesm2022/fundamental-ngx-platform-list.mjs +64 -64
  335. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  336. package/fesm2022/fundamental-ngx-platform-menu-button.mjs +7 -7
  337. package/fesm2022/fundamental-ngx-platform-menu.mjs +15 -15
  338. package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
  339. package/fesm2022/fundamental-ngx-platform-message-popover.mjs +17 -17
  340. package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
  341. package/fesm2022/fundamental-ngx-platform-object-marker.mjs +7 -7
  342. package/fesm2022/fundamental-ngx-platform-object-status.mjs +10 -10
  343. package/fesm2022/fundamental-ngx-platform-page-footer.mjs +8 -8
  344. package/fesm2022/fundamental-ngx-platform-page-footer.mjs.map +1 -1
  345. package/fesm2022/fundamental-ngx-platform-panel.mjs +16 -16
  346. package/fesm2022/fundamental-ngx-platform-panel.mjs.map +1 -1
  347. package/fesm2022/fundamental-ngx-platform-search-field.mjs +40 -100
  348. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  349. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +34 -34
  350. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
  351. package/fesm2022/fundamental-ngx-platform-shared.mjs +28 -28
  352. package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
  353. package/fesm2022/fundamental-ngx-platform-slider.mjs +7 -7
  354. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +42 -37
  355. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  356. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +8 -8
  357. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +110 -122
  358. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  359. package/fesm2022/fundamental-ngx-platform-table.mjs +213 -150
  360. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  361. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +34 -33
  362. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  363. package/fesm2022/fundamental-ngx-platform-variant-management.mjs +21 -21
  364. package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  365. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +43 -43
  366. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
  367. package/fesm2022/fundamental-ngx-platform.mjs +4 -4
  368. package/fesm2022/fundamental-ngx-platform.mjs.map +1 -1
  369. package/form/combobox/combobox.config.d.ts +2 -2
  370. package/form/combobox/commons/base-combobox.d.ts +2 -4
  371. package/form/multi-input/base-multi-input.d.ts +4 -1
  372. package/form/text-area/text-area.component.d.ts +1 -5
  373. package/form/time-picker/time-picker.component.d.ts +1 -1
  374. package/link/link.component.d.ts +2 -2
  375. package/package.json +4 -4
  376. package/panel/panel.component.d.ts +4 -4
  377. package/schematics/ng-add/index.js +1 -1
  378. package/schematics/utils/package-utils.d.ts +9 -1
  379. package/schematics/utils/package-utils.js +15 -17
  380. package/schematics/utils/package-utils.js.map +1 -1
  381. package/search-field/search-field.component.d.ts +5 -16
  382. package/shared/form/base.input.d.ts +0 -2
  383. package/shared/form/form-field.d.ts +1 -11
  384. package/smart-filter-bar/smart-filter-bar.component.d.ts +6 -3
  385. package/table/components/growing-button/table-growing-button.component.d.ts +16 -0
  386. package/table/components/table-p13-dialog/filtering/filtering.model.d.ts +1 -0
  387. package/table/components/table-p13-dialog/table-p13-dialog.component.d.ts +2 -2
  388. package/table/components/table-p13-dialog/table-p13-filter.component.d.ts +6 -2
  389. package/table/components/table-row/table-row.component.d.ts +1 -1
  390. package/table/components/table-toolbar/table-toolbar.component.d.ts +2 -3
  391. package/table/index.d.ts +1 -0
  392. package/table/table.component.d.ts +15 -2
  393. package/table/table.module.d.ts +3 -2
  394. package/table-helpers/directives/index.d.ts +0 -1
  395. package/table-helpers/services/table.service.d.ts +3 -1
  396. package/table-helpers/table-helpers.module.d.ts +10 -11
  397. package/table-helpers/table.d.ts +2 -1
  398. package/value-help-dialog/directives/value-help-filter-def.directive.d.ts +3 -7
  399. package/value-help-dialog/models/vhd-filter.model.d.ts +8 -2
  400. package/approval-flow/README.md +0 -25
  401. package/button/README.md +0 -25
  402. package/dynamic-page/README.md +0 -25
  403. package/esm2022/table-helpers/directives/table-cell-selectable.directive.mjs +0 -36
  404. package/feed-input/README.md +0 -25
  405. package/form/README.md +0 -25
  406. package/fundamental-ngx-platform-v0.49.0-rc.8.tgz +0 -0
  407. package/icon-tab-bar/README.md +0 -25
  408. package/info-label/README.md +0 -25
  409. package/link/README.md +0 -25
  410. package/list/README.md +0 -25
  411. package/menu/README.md +0 -25
  412. package/menu-button/README.md +0 -25
  413. package/message-popover/README.md +0 -7
  414. package/object-marker/README.md +0 -25
  415. package/object-status/README.md +0 -25
  416. package/page-footer/README.md +0 -25
  417. package/panel/README.md +0 -25
  418. package/search-field/README.md +0 -25
  419. package/settings-generator/README.md +0 -7
  420. package/shared/README.md +0 -25
  421. package/slider/README.md +0 -25
  422. package/smart-filter-bar/README.md +0 -29
  423. package/split-menu-button/README.md +0 -25
  424. package/table/README.md +0 -25
  425. package/table-helpers/README.md +0 -3
  426. package/table-helpers/directives/table-cell-selectable.directive.d.ts +0 -9
  427. package/value-help-dialog/README.md +0 -25
  428. package/variant-management/README.md +0 -7
  429. package/wizard-generator/README.md +0 -25
@@ -583,10 +583,10 @@ export class FormFieldComponent {
583
583
  }));
584
584
  });
585
585
  }
586
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormGroupContainer, optional: true }, { token: i1.FormFieldGroup, optional: true }, { token: RESPONSIVE_BREAKPOINTS_CONFIG, optional: true }, { token: i1.ResponsiveBreakpointsService }, { token: FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT }, { token: FDP_FORM_FIELD_HINT_LAYOUT_CONFIG }, { token: i2.FormFieldLayoutService, self: true }, { token: i2.FormFieldLayoutService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
587
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.8", type: FormFieldComponent, isStandalone: true, selector: "fdp-form-field", inputs: { label: "label", id: "id", hint: "hint", noLabelLayout: "noLabelLayout", validators: "validators", rank: "rank", placeholder: "placeholder", column: "column", columnLayout: "columnLayout", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", i18Strings: "i18Strings", required: ["required", "required", booleanAttribute], editable: ["editable", "editable", booleanAttribute], columns: "columns", disabled: "disabled", colon: "colon", formGroupContainer: "formGroupContainer" }, outputs: { onChange: "onChange", onColumnChange: "onColumnChange" }, providers: [formFieldProvider, formGroupChildProvider, FormFieldLayoutService], queries: [{ propertyName: "formFieldExtras", first: true, predicate: FormFieldControlExtrasComponent, descendants: true, read: ElementRef }, { propertyName: "_errorDirectiveQuery", predicate: FormFieldErrorDirective }], viewQueries: [{ propertyName: "renderer", first: true, predicate: ["renderer"], descendants: true, static: true }, { propertyName: "labelCol", first: true, predicate: ["labelCol"], descendants: true }, { propertyName: "inputMessageGroup", first: true, predicate: InputMessageGroupWithTemplate, descendants: true, read: ElementRef }, { propertyName: "innerErrorRenderers", first: true, predicate: ["innerErrorRenderers"], descendants: true }, { propertyName: "_inputMessageGroupCmp", predicate: InputMessageGroupWithTemplate, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n @if (!noLabelLayout) {\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n }\n <ng-template [ngTemplateOutlet]=\"withFormMessage\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"gapTemplate\"></ng-template>\n </div>\n <span aria-hidden=\"true\" [style.display]=\"'none'\" [id]=\"'fdp-form-hint-' + id\">\n @if (isStringHint(hintOptions.content)) {\n {{ hintOptions.content }}\n } @else {\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n }\n </span>\n</ng-template>\n<ng-template #withFormMessage>\n <fdp-input-message-group\n class=\"fd-col\"\n [class]=\"_fieldColumnLayoutClass\"\n [attr.aria-labelledby]=\"'fdp-form-label-' + id\"\n >\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n @if (hasErrors() && groupedErrors.length > 0) {\n @for (error of groupedErrors; track error) {\n <fd-form-message [type]=\"error.directive.type\">\n @if (error.directive._headingTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n <br />\n }\n @if (error.directive._descriptionTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n </fd-form-message>\n }\n }\n\n @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n <fd-form-message type=\"error\">\n <ng-template\n [ngTemplateOutlet]=\"i18Strings\"\n [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n >\n </ng-template>\n </fd-form-message>\n }\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #innerErrorRenderers>\n @if (hasErrors() && groupedErrors.length > 0) {\n @for (error of groupedErrors; track error) {\n @if (error.directive._headingTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n <br />\n }\n @if (error.directive._descriptionTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n }\n }\n\n @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n <ng-template\n [ngTemplateOutlet]=\"i18Strings\"\n [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n >\n </ng-template>\n }\n</ng-template>\n\n<ng-template #labelTemplate>\n @if (hintTarget === 'label') {\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!isHorizontal$()\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n } @else {\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!isHorizontal$()\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n }\n</ng-template>\n\n<ng-template #gapTemplate>\n @if (hintTarget === 'input' && hintOptions.content) {\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n } @else {\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n }\n</ng-template>\n", styles: [".fd-form-label__wrapper{display:flex;width:100%;white-space:nowrap}.fd-form-field-inline-help-container{overflow:visible!important}.fd-form-field-inline-help-container [class*=sap-icon]{margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: InputMessageGroupWithTemplate, selector: "fdp-input-message-group", inputs: ["triggers"] }, { kind: "component", type: FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["class", "emphasized", "disabled", "inverted", "subtle", "undecorated"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "directive", type: InlineHelpDirective, selector: "[fd-inline-help]:not([fd-inline-help-template]), [fd-inline-help-template]:not([fd-inline-help])", inputs: ["triggers", "noArrow", "closeOnEscapeKey", "closeOnOutsideClick", "fd-inline-help"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
586
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormFieldComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.FormGroupContainer, optional: true }, { token: i1.FormFieldGroup, optional: true }, { token: RESPONSIVE_BREAKPOINTS_CONFIG, optional: true }, { token: i1.ResponsiveBreakpointsService }, { token: FDP_FORM_FIELD_HINT_OPTIONS_DEFAULT }, { token: FDP_FORM_FIELD_HINT_LAYOUT_CONFIG }, { token: i2.FormFieldLayoutService, self: true }, { token: i2.FormFieldLayoutService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
587
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: FormFieldComponent, isStandalone: true, selector: "fdp-form-field", inputs: { label: "label", id: "id", hint: "hint", noLabelLayout: "noLabelLayout", validators: "validators", rank: "rank", placeholder: "placeholder", column: "column", columnLayout: "columnLayout", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", i18Strings: "i18Strings", required: ["required", "required", booleanAttribute], editable: ["editable", "editable", booleanAttribute], columns: "columns", disabled: "disabled", colon: "colon", formGroupContainer: "formGroupContainer" }, outputs: { onChange: "onChange", onColumnChange: "onColumnChange" }, providers: [formFieldProvider, formGroupChildProvider, FormFieldLayoutService], queries: [{ propertyName: "formFieldExtras", first: true, predicate: FormFieldControlExtrasComponent, descendants: true, read: ElementRef }, { propertyName: "_errorDirectiveQuery", predicate: FormFieldErrorDirective }], viewQueries: [{ propertyName: "renderer", first: true, predicate: ["renderer"], descendants: true, static: true }, { propertyName: "labelCol", first: true, predicate: ["labelCol"], descendants: true }, { propertyName: "inputMessageGroup", first: true, predicate: InputMessageGroupWithTemplate, descendants: true, read: ElementRef }, { propertyName: "innerErrorRenderers", first: true, predicate: ["innerErrorRenderers"], descendants: true }, { propertyName: "_inputMessageGroupCmp", predicate: InputMessageGroupWithTemplate, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n @if (!noLabelLayout) {\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n }\n <ng-template [ngTemplateOutlet]=\"withFormMessage\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"gapTemplate\"></ng-template>\n </div>\n <span aria-hidden=\"true\" [style.display]=\"'none'\" [id]=\"'fdp-form-hint-' + id\">\n @if (isStringHint(hintOptions.content)) {\n {{ hintOptions.content }}\n } @else {\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n }\n </span>\n</ng-template>\n<ng-template #withFormMessage>\n <fdp-input-message-group\n class=\"fd-col\"\n [class]=\"_fieldColumnLayoutClass\"\n [attr.aria-labelledby]=\"'fdp-form-label-' + id\"\n >\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n @if (hasErrors() && groupedErrors.length > 0) {\n @for (error of groupedErrors; track error) {\n <fd-form-message [type]=\"error.directive.type\">\n <div>\n @if (error.directive._headingTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n <br />\n }\n @if (error.directive._descriptionTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n </div>\n </fd-form-message>\n }\n }\n\n @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n <fd-form-message type=\"error\">\n <ng-template\n [ngTemplateOutlet]=\"i18Strings\"\n [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n >\n </ng-template>\n </fd-form-message>\n }\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #innerErrorRenderers>\n @if (hasErrors() && groupedErrors.length > 0) {\n @for (error of groupedErrors; track error) {\n <div>\n @if (error.directive._headingTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n <br />\n }\n @if (error.directive._descriptionTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n </div>\n }\n }\n\n @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n <ng-template\n [ngTemplateOutlet]=\"i18Strings\"\n [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n >\n </ng-template>\n }\n</ng-template>\n\n<ng-template #labelTemplate>\n @if (hintTarget === 'label') {\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!isHorizontal$()\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n } @else {\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!isHorizontal$()\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n }\n</ng-template>\n\n<ng-template #gapTemplate>\n @if (hintTarget === 'input' && hintOptions.content) {\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n } @else {\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n }\n</ng-template>\n", styles: [".fd-form-label__wrapper{display:flex;width:100%;white-space:nowrap}.fd-form-field-inline-help-container{overflow:visible!important}.fd-form-field-inline-help-container [class*=sap-icon]{margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: InputMessageGroupWithTemplate, selector: "fdp-input-message-group", inputs: ["triggers"] }, { kind: "component", type: FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["class", "emphasized", "disabled", "inverted", "subtle", "undecorated"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "directive", type: InlineHelpDirective, selector: "[fd-inline-help]:not([fd-inline-help-template]), [fd-inline-help-template]:not([fd-inline-help])", inputs: ["triggers", "noArrow", "closeOnEscapeKey", "closeOnOutsideClick", "fd-inline-help"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
588
588
  }
589
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormFieldComponent, decorators: [{
589
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormFieldComponent, decorators: [{
590
590
  type: Component,
591
591
  args: [{ selector: 'fdp-form-field', changeDetection: ChangeDetectionStrategy.OnPush, providers: [formFieldProvider, formGroupChildProvider, FormFieldLayoutService], standalone: true, imports: [
592
592
  CommonModule,
@@ -598,7 +598,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
598
598
  LinkComponent,
599
599
  IconComponent,
600
600
  InlineHelpDirective
601
- ], template: "<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n @if (!noLabelLayout) {\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n }\n <ng-template [ngTemplateOutlet]=\"withFormMessage\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"gapTemplate\"></ng-template>\n </div>\n <span aria-hidden=\"true\" [style.display]=\"'none'\" [id]=\"'fdp-form-hint-' + id\">\n @if (isStringHint(hintOptions.content)) {\n {{ hintOptions.content }}\n } @else {\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n }\n </span>\n</ng-template>\n<ng-template #withFormMessage>\n <fdp-input-message-group\n class=\"fd-col\"\n [class]=\"_fieldColumnLayoutClass\"\n [attr.aria-labelledby]=\"'fdp-form-label-' + id\"\n >\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n @if (hasErrors() && groupedErrors.length > 0) {\n @for (error of groupedErrors; track error) {\n <fd-form-message [type]=\"error.directive.type\">\n @if (error.directive._headingTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n <br />\n }\n @if (error.directive._descriptionTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n </fd-form-message>\n }\n }\n\n @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n <fd-form-message type=\"error\">\n <ng-template\n [ngTemplateOutlet]=\"i18Strings\"\n [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n >\n </ng-template>\n </fd-form-message>\n }\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #innerErrorRenderers>\n @if (hasErrors() && groupedErrors.length > 0) {\n @for (error of groupedErrors; track error) {\n @if (error.directive._headingTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n <br />\n }\n @if (error.directive._descriptionTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n }\n }\n\n @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n <ng-template\n [ngTemplateOutlet]=\"i18Strings\"\n [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n >\n </ng-template>\n }\n</ng-template>\n\n<ng-template #labelTemplate>\n @if (hintTarget === 'label') {\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!isHorizontal$()\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n } @else {\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!isHorizontal$()\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n }\n</ng-template>\n\n<ng-template #gapTemplate>\n @if (hintTarget === 'input' && hintOptions.content) {\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n } @else {\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n }\n</ng-template>\n", styles: [".fd-form-label__wrapper{display:flex;width:100%;white-space:nowrap}.fd-form-field-inline-help-container{overflow:visible!important}.fd-form-field-inline-help-container [class*=sap-icon]{margin:0}\n"] }]
601
+ ], template: "<ng-template #renderer>\n <div [horizontal]=\"true\" fd-form-item class=\"fd-row\">\n @if (!noLabelLayout) {\n <div\n class=\"fd-col\"\n #labelCol\n [class]=\"_labelColumnLayoutClass\"\n [style.margin-bottom.px]=\"_controlExtrasHeightPx\"\n >\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </div>\n }\n <ng-template [ngTemplateOutlet]=\"withFormMessage\"></ng-template>\n <ng-template [ngTemplateOutlet]=\"gapTemplate\"></ng-template>\n </div>\n <span aria-hidden=\"true\" [style.display]=\"'none'\" [id]=\"'fdp-form-hint-' + id\">\n @if (isStringHint(hintOptions.content)) {\n {{ hintOptions.content }}\n } @else {\n <ng-template [ngTemplateOutlet]=\"$any(hintOptions.content)\"></ng-template>\n }\n </span>\n</ng-template>\n<ng-template #withFormMessage>\n <fdp-input-message-group\n class=\"fd-col\"\n [class]=\"_fieldColumnLayoutClass\"\n [attr.aria-labelledby]=\"'fdp-form-label-' + id\"\n >\n <ng-template #triggerItem>\n <ng-content></ng-content>\n </ng-template>\n\n @if (hasErrors() && groupedErrors.length > 0) {\n @for (error of groupedErrors; track error) {\n <fd-form-message [type]=\"error.directive.type\">\n <div>\n @if (error.directive._headingTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n <br />\n }\n @if (error.directive._descriptionTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n </div>\n </fd-form-message>\n }\n }\n\n @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n <fd-form-message type=\"error\">\n <ng-template\n [ngTemplateOutlet]=\"i18Strings\"\n [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n >\n </ng-template>\n </fd-form-message>\n }\n </fdp-input-message-group>\n</ng-template>\n\n<ng-template #innerErrorRenderers>\n @if (hasErrors() && groupedErrors.length > 0) {\n @for (error of groupedErrors; track error) {\n <div>\n @if (error.directive._headingTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._headingTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n @if (error.directive._headingTemplateRef && error.directive._descriptionTemplateRef) {\n <br />\n }\n @if (error.directive._descriptionTemplateRef) {\n <ng-template\n [ngTemplateOutlet]=\"error.directive._descriptionTemplateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: error.error, label: label }\"\n >\n </ng-template>\n }\n </div>\n }\n }\n\n @if (groupedErrors.length === 0 && hasErrors() && i18Strings) {\n <ng-template\n [ngTemplateOutlet]=\"i18Strings\"\n [ngTemplateOutletContext]=\"{ $implicit: control?.ngControl?.errors }\"\n >\n </ng-template>\n }\n</ng-template>\n\n<ng-template #labelTemplate>\n @if (hintTarget === 'label') {\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [inlineHelpContent]=\"hintOptions.content\"\n [inlineHelpBodyPlacement]=\"hintOptions.placement || 'top'\"\n [inlineHelpPlacement]=\"hintOptions.position || 'after'\"\n [inlineHelpGlyph]=\"hintOptions.glyph || ''\"\n [inlineHelpTriggers]=\"hintOptions.trigger || []\"\n [alignLabelEnd]=\"!!isHorizontal$()\"\n [colon]=\"colon\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n } @else {\n <label\n [id]=\"'fdp-form-label-' + id\"\n [required]=\"editable && required\"\n fd-form-label\n [colon]=\"colon\"\n [alignLabelEnd]=\"!!isHorizontal$()\"\n >\n <span [id]=\"'fdp-form-label-content-' + id\">{{ label }}</span>\n </label>\n }\n</ng-template>\n\n<ng-template #gapTemplate>\n @if (hintTarget === 'input' && hintOptions.content) {\n <div class=\"fd-col fd-form-field-inline-help-container\" [class]=\"_gapColumnLayoutClass\">\n <span fd-link [undecorated]=\"true\">\n <fd-icon\n [fd-inline-help]=\"hintOptions.content\"\n [glyph]=\"hintOptions.glyph\"\n [placement]=\"hintOptions.placement || null\"\n [triggers]=\"hintOptions.trigger || []\"\n tabindex=\"0\"\n >\n </fd-icon>\n </span>\n </div>\n } @else {\n <div class=\"fd-col\" [class]=\"_gapColumnLayoutClass\"></div>\n }\n</ng-template>\n", styles: [".fd-form-label__wrapper{display:flex;width:100%;white-space:nowrap}.fd-form-field-inline-help-container{overflow:visible!important}.fd-form-field-inline-help-container [class*=sap-icon]{margin:0}\n"] }]
602
602
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.FormGroupContainer, decorators: [{
603
603
  type: Optional
604
604
  }] }, { type: i1.FormFieldGroup, decorators: [{
@@ -690,4 +690,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
690
690
  type: ViewChildren,
691
691
  args: [InputMessageGroupWithTemplate]
692
692
  }] } });
693
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2Zvcm0vZm9ybS1ncm91cC9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9mb3JtL2Zvcm0tZ3JvdXAvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1QsSUFBSSxFQUdKLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLFdBQVcsRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGFBQWEsRUFBZ0MsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFF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QkFBdUI7Z0JBS3ZCLHFCQUFxQjtzQkFEckMsWUFBWTt1QkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUHJvdmlkZXIsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNlbGYsXG4gICAgU2lnbmFsLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgU2tpcFNlbGYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGZvcndhcmRSZWYsXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZEX0ZPUk1fRklFTEQsIEZvcm1GaWVsZENvbnRyb2wsIEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRm9ybUl0ZW1Db21wb25lbnQsIEZvcm1MYWJlbENvbXBvbmVudCwgRm9ybU1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHsgSW5saW5lSGVscERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbmxpbmUtaGVscCc7XG5pbXBvcnQgeyBMaW5rQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpbmsnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW4sXG4gICAgQ29sdW1uTGF5b3V0LFxuICAgIEZpZWxkSGludElucHV0LFxuICAgIEZpZWxkSGludE9wdGlvbnMsXG4gICAgRm9ybUVycm9yLFxuICAgIEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlQ29udGV4dCxcbiAgICBGb3JtRmllbGRHcm91cCxcbiAgICBGb3JtR3JvdXBDb250YWluZXIsXG4gICAgSGludENvbnRlbnQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIFJFU1BPTlNJVkVfQlJFQUtQT0lOVFNfQ09ORklHLFxuICAgIFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnLFxuICAgIFJlc3BvbnNpdmVCcmVha3BvaW50c1NlcnZpY2Vcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgZ2V0Rm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XG5pbXBvcnQgeyBJbnB1dE1lc3NhZ2VHcm91cFdpdGhUZW1wbGF0ZSB9IGZyb20gJy4uLy4uL2lucHV0LW1lc3NhZ2UtZ3JvdXAtd2l0aC10ZW1wbGF0ZS9pbnB1dC1tZXNzYWdlLWdyb3VwLXdpdGgtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IGRlZmF1bHRGb3JtRmllbGRIaW50T3B0aW9ucyB9IGZyb20gJy4uL2NvbmZpZy9kZWZhdWx0LWZvcm0tZmllbGQtaGludC1vcHRpb25zJztcbmltcG9ydCB7IEZPUk1fR1JPVVBfQ0hJTERfRklFTERfVE9LRU4gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBGRFBfRk9STV9GSUVMRF9ISU5UX0xBWU9VVF9DT05GSUcsXG4gICAgRkRQX0ZPUk1fRklFTERfSElOVF9PUFRJT05TX0RFRkFVTFQsXG4gICAgSGludExheW91dENvbmZpZ1xufSBmcm9tICcuLi9mZHAtZm9ybS50b2tlbnMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtLWZpZWxkLWVycm9yL2Zvcm0tZmllbGQtZXJyb3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZvcm1GaWVsZENvbnRyb2xFeHRyYXNDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkLWV4dHJhcy9mb3JtLWZpZWxkLWV4dHJhcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVDb2x1bW5DbGFzcywgbm9ybWFsaXplQ29sdW1uTGF5b3V0IH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBGb3JtRmllbGRMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9ybS1maWVsZC1sYXlvdXQuc2VydmljZSc7XG5cbmxldCBkZWZhdWx0SWQgPSAwO1xuXG5jb25zdCBmb3JtRmllbGRQcm92aWRlcjogUHJvdmlkZXIgPSB7XG4gICAgcHJvdmlkZTogRkRfRk9STV9GSUVMRCxcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb3JtRmllbGRDb21wb25lbnQpXG59O1xuXG5jb25zdCBmb3JtR3JvdXBDaGlsZFByb3ZpZGVyOiBQcm92aWRlciA9IHtcbiAgICBwcm92aWRlOiBGT1JNX0dST1VQX0NISUxEX0ZJRUxEX1RPS0VOLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvcm1GaWVsZENvbXBvbmVudClcbn07XG5cbi8qKlxuICogRm9ybSBGaWVsZCByZXByZXNlbnQgYWN0dWFsIHJvdyBhbmQgYWdncmVnYXRlcyBjb21tb24gYmVoYXZpb3IgZm9yIHRoZSBpbnB1dCBmaWVsZCBzdWNoIGFzXG4gKiBlcnJvciwgbGFiZWwgb3IgaGludC5cbiAqIEhpbnQgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgbGlzdGVuaW5nIGZvciBGaWVsZENvbnRyb2wgY2hhbmdlcyBhbmQgdHJpZ2dlciBuZWNlc3NhcnlcbiAqIGNoYW5nZSBkZXRlY3Rpb25cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWZvcm0tZmllbGQnLFxuICAgIHRlbXBsYXRlVXJsOiAnZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2Zvcm0tZmllbGQuY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW2Zvcm1GaWVsZFByb3ZpZGVyLCBmb3JtR3JvdXBDaGlsZFByb3ZpZGVyLCBGb3JtRmllbGRMYXlvdXRTZXJ2aWNlXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3JtSXRlbUNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgSW5wdXRNZXNzYWdlR3JvdXBXaXRoVGVtcGxhdGUsXG4gICAgICAgIEZvcm1NZXNzYWdlQ29tcG9uZW50LFxuICAgICAgICBGb3JtTGFiZWxDb21wb25lbnQsXG4gICAgICAgIExpbmtDb21wb25lbnQsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIElubGluZUhlbHBEaXJlY3RpdmVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZENvbXBvbmVudFxuICAgIGltcGxlbWVudHMgUGxhdGZvcm1Gb3JtRmllbGQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXNcbntcbiAgICAvKiogRm9ybSBmaWVsZCBsYWJlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFN1ZmZpeCBmb3IgaWRzIG9mIGNvbnRyb2wgZWxlbWVudHMgaW5zaWRlIHRoaXMgZm9ybSBmaWVsZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZyA9ICgrK2RlZmF1bHRJZCkudG9TdHJpbmcoKTtcblxuICAgIC8qKiBIaW50IHRvIGJlIHBsYWNlZCBuZXh0IHRvIGxhYmVsICovXG4gICAgQElucHV0KClcbiAgICBoaW50OiBOdWxsYWJsZTxGaWVsZEhpbnRJbnB1dD47XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hlbiBmb3JtIGZpZWxkIGxhYmVsIHNob3VsZCBub3QgYmUgZGlzcGxheWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBub0xhYmVsTGF5b3V0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdCBvZiB2YWxpZGF0b3JzIGFwcGxpZWQgdG8gdGhlIGZvcm0gZmllbGQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbVmFsaWRhdG9ycy5udWxsVmFsaWRhdG9yXTtcblxuICAgIC8qKlxuICAgICAqIFJhbmsgaXMgdXNlZCBmb3Igb3JkZXJpbmcuXG4gICAgICogRmlyc3QgbG93ZXIgbnVtYmVyLCB0aGVuIC0gaGlnaGVyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByYW5rOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGZpZWxkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqIEZvcm0gQ29udGFpbmVyIGNvbHVtbiBpdCBiZWxvbmdzIHRvICovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW46IG51bWJlcjtcblxuICAgIC8qKiBvYmplY3QgZm9yIHBsYWNpbmcgZmllbGQgaW4gY29sdW1uIGluIGVhY2ggc2NyZWVuIGxheW91dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvbHVtbkxheW91dChsYXlvdXQ6IENvbHVtbkxheW91dCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIWxheW91dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbHVtbkxheW91dCA9IGxheW91dDtcbiAgICAgICAgdGhpcy5faXNDb2x1bW5MYXlvdXRFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2V0TGF5b3V0KCk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbHVtbkxheW91dCgpOiBDb2x1bW5MYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uTGF5b3V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgbGFiZWwncyBjb2x1bW4gbGF5b3V0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxhYmVsQ29sdW1uTGF5b3V0KHZhbHVlOiBDb2x1bW5MYXlvdXQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0ID0gbm9ybWFsaXplQ29sdW1uTGF5b3V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5fbGFiZWxDb2x1bW5MYXlvdXRDbGFzcyA9IGdlbmVyYXRlQ29sdW1uQ2xhc3ModGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9sYWJlbENvbHVtbkxheW91dCQubmV4dCh0aGlzLl9sYWJlbENvbHVtbkxheW91dCk7XG4gICAgfVxuXG4gICAgZ2V0IGxhYmVsQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbENvbHVtbkxheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGZpZWxkJ3MgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBmaWVsZENvbHVtbkxheW91dCh2YWx1ZTogQ29sdW1uTGF5b3V0IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0ID0gbm9ybWFsaXplQ29sdW1uTGF5b3V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5fZmllbGRDb2x1bW5MYXlvdXRDbGFzcyA9IGdlbmVyYXRlQ29sdW1uQ2xhc3ModGhpcy5fZmllbGRDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9maWVsZENvbHVtbkxheW91dCQubmV4dCh0aGlzLl9maWVsZENvbHVtbkxheW91dCk7XG4gICAgfVxuXG4gICAgZ2V0IGZpZWxkQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZENvbHVtbkxheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGdhcCBjb2x1bW4gbGF5b3V0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGdhcENvbHVtbkxheW91dCh2YWx1ZTogQ29sdW1uTGF5b3V0IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dCA9IG5vcm1hbGl6ZUNvbHVtbkxheW91dCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dENsYXNzID0gZ2VuZXJhdGVDb2x1bW5DbGFzcyh0aGlzLl9nYXBDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9nYXBDb2x1bW5MYXlvdXQkLm5leHQodGhpcy5fZ2FwQ29sdW1uTGF5b3V0KTtcbiAgICB9XG5cbiAgICBnZXQgZ2FwQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nYXBDb2x1bW5MYXlvdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNsYXRpb25zIHRlbXBsYXRlIHJlZmVyZW5jZS5cbiAgICAgKiBUaGlzIGlzIGluIG1vc3Qgb2YgdGhlIGNhc2VzIHNldCBmcm9tIHBhcmVudCBjb250YWluZXIgKGZvcm0tZ3JvdXApXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpMThTdHJpbmdzOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFNldCB3aGVuIGZvcm0gZmllbGQgaXMgYSBtYW5kYXRvcnkgb25lLiAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgZmllbGQgaXMgZWRpdGFibGVcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBzZXQgZWRpdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2VkaXRhYmxlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VkaXRhYmxlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xQcm9wZXJ0aWVzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdGFibGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9ybSBmaWVsZCBjdXN0b20gd2lkdGggaW4gY29sdW1ucyBtdXN0IGJlIGJldHdlZW4gMSAtIDEyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY29sdW1ucyh2YWx1ZTogQ29sdW1uKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMgPSA8Q29sdW1uPmNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgY29sdW1ucygpOiBDb2x1bW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBtYXJrcyBmaWVsZCBhcyBkaXNhYmxlZC4gdXNlZCBpbiByZWFjdGl2ZSBmb3JtIGFwcHJvYWNoLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGxhYmVsIHRleHQgc2hvdWxkIGJlIGFwcGVuZGVkIHdpdGggY29sb24uICovXG4gICAgQElucHV0KClcbiAgICBjb2xvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRm9ybSBHcm91cCBDb250YWluZXIgdG8gYmluZCB0aGUgRm9ybS1GaWVsZCB0by5cbiAgICAgKiBUaGlzIHdpbGwgb3ZlcnJpZGUgZGVmYXVsdCB2YWx1ZSBpbmplY3RlZCBieSBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9ybUdyb3VwQ29udGFpbmVyOiBGb3JtR3JvdXBDb250YWluZXI7XG5cbiAgICAvKiogRW1pdHMgd2hlbmV2ZXIgZm9ybUZpZWxkQ29udHJvbCdzIHN0YXRlIGNoYW5nZXMgKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuZXZlciBjb2x1bW4gbGF5b3V0IGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBvbkNvbHVtbkNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZvcm0gZmllbGQgdGVtcGxhdGUgcmVmZXJlbmNlXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgncmVuZGVyZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHJlbmRlcmVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKEZvcm1GaWVsZENvbnRyb2xFeHRyYXNDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGZvcm1GaWVsZEV4dHJhcz86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdsYWJlbENvbCcpIGxhYmVsQ29sPzogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoSW5wdXRNZXNzYWdlR3JvdXBXaXRoVGVtcGxhdGUsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGlucHV0TWVzc2FnZUdyb3VwOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5uZXJFcnJvclJlbmRlcmVycycpXG4gICAgaW5uZXJFcnJvclJlbmRlcmVyczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihGb3JtRmllbGRFcnJvckRpcmVjdGl2ZSlcbiAgICBwcml2YXRlIF9lcnJvckRpcmVjdGl2ZVF1ZXJ5OiBRdWVyeUxpc3Q8Rm9ybUVycm9yPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbihJbnB1dE1lc3NhZ2VHcm91cFdpdGhUZW1wbGF0ZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dE1lc3NhZ2VHcm91cENtcDogUXVlcnlMaXN0PElucHV0TWVzc2FnZUdyb3VwV2l0aFRlbXBsYXRlPjtcblxuICAgIC8qKiBDb21iaW5lZCBFcnJvciBkaXJlY3RpdmVzIGZyb20gZmllbGQgaXRzZWxmIGFuZCBwYXJlbnQgZm9ybSBjb250YWluZXIuICovXG4gICAgZ2V0IGVycm9yRGlyZWN0aXZlcygpOiBGb3JtRXJyb3JbXSB7XG4gICAgICAgIHJldHVybiB1bmlxQnkoWy4uLnRoaXMuX2Vycm9yRGlyZWN0aXZlcywgLi4udGhpcy5fZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzXSwgJ2Vycm9yJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpc0hvcml6b250YWwkOiBTaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD47XG5cbiAgICAvKipcbiAgICAgKiBDaGlsZCBGb3JtRmllbGRDb250cm9sXG4gICAgICovXG4gICAgY29udHJvbDogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sIHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2xhYmVsQ29sdW1uTGF5b3V0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2ZpZWxkQ29sdW1uTGF5b3V0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dhcENvbHVtbkxheW91dENsYXNzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBoaW50IGFuZCBoaW50IHBsYWNlbWVudCBjb2VyY2VkIHRvIHRoZSBGaWVsZEhpbnRPcHRpb25zXG4gICAgICovXG4gICAgaGludE9wdGlvbnM6IEZpZWxkSGludE9wdGlvbnMgPSBkZWZhdWx0Rm9ybUZpZWxkSGludE9wdGlvbnMgYXMgdW5rbm93biBhcyBGaWVsZEhpbnRPcHRpb25zO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZXJyb3JEaXJlY3RpdmVzOiBGb3JtRXJyb3JbXSA9IFtdO1xuXG4gICAgLyoqIEdyb3VwZWQgZXJyb3JzLiAqL1xuICAgIGdyb3VwZWRFcnJvcnM6IEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlQ29udGV4dFtdID0gW107XG5cbiAgICAvKiogRXZlbnQgZW1pdGVkIHdoZW4gZXJyb3JzIG9iamVjdCBiZWluZyBjaGFuZ2VkLiAqL1xuICAgIGVycm9yc0NoYW5nZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9wdGlvbmFsIEZvcm1Db250cm9sXG4gICAgICovXG4gICAgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2dyb3VwSG9zdCgpOiBGb3JtR3JvdXBDb250YWluZXIgfCBGb3JtRmllbGRHcm91cCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1GaWVsZEdyb3VwID8gdGhpcy5mb3JtRmllbGRHcm91cCA6IHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdpbGwgYmUgdXBkYXRlZCBkdXJpbmcgb25DaGFuZ2VzIGFuZCByZXNpemUsIHJlc3VsdGluZyBjb3JyZWN0IHBsYWNlbWVudCBvZiB0aGVcbiAgICAgKiBoaW50IHJlc3BlY3RpbmcgcGFzc2VkIGNvbmZpZ3MgYW5kIGdpdmVuIGJyZWFrcG9pbnQgb2Ygc2NyZWVuLlxuICAgICAqL1xuICAgIGhpbnRUYXJnZXQ/OiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfY29sdW1uczogQ29sdW1uID0gNjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9lZGl0YWJsZSA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gY29sdW1uIG51bWJlciBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcyAqL1xuICAgIHByaXZhdGUgX3hsQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xnQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21kQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NDb2x1bW5OdW1iZXIgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2x1bW5MYXlvdXQ6IENvbHVtbkxheW91dDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWc6IFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9maWVsZENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2FwQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlczogRm9ybUVycm9yW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Vycm9yRGlyZWN0aXZlc0NkcjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gd2hldGhlciBsYWJlbCBhbmQgY29udHJvbCBhcmUgdmVydGljYWxseSBhbGlnbmVkICovXG4gICAgcHJpdmF0ZSBnZXQgX2lzSG9yaXpvbnRhbEFsaWdubWVudCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0TWVzc2FnZUdyb3VwIHx8ICF0aGlzLmxhYmVsQ29sKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXRNZXNzYWdlR3JvdXBZID0gdGhpcy5pbnB1dE1lc3NhZ2VHcm91cC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnk7XG4gICAgICAgIGNvbnN0IGxhYmVsQ29sUmVjdCA9IHRoaXMubGFiZWxDb2wubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xCb3R0b21ZID0gbGFiZWxDb2xSZWN0LnkgKyBsYWJlbENvbFJlY3QuaGVpZ2h0O1xuICAgICAgICByZXR1cm4gbGFiZWxDb2xCb3R0b21ZID4gaW5wdXRNZXNzYWdlR3JvdXBZO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTdW0gb2YgZXh0cmEgaGVpZ2h0cyBpbnNpZGUgZm9ybSBjb250cm9sIGFuZCBmb3JtRmllbGRFeHRyYXMuXG4gICAgICogTGFiZWwgd2lsbCBiZSBzaGlmdGVkIGJ5IHRoaXMgbnVtYmVyIGluIG9yZGVyIHRvIGJlIHByb3Blcmx5IGFsaWduZWQgd2l0aCB0aGUgY29udHJvbFxuICAgICAqL1xuICAgIGdldCBfY29udHJvbEV4dHJhc0hlaWdodFB4KCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5ub0xhYmVsTGF5b3V0IHx8ICF0aGlzLl9pc0hvcml6b250YWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICAgIC8vIHByb2NlZWQgb25seSBpZiAxLiB0aGVyZSdzIGEgbGFiZWw7IDIuIGNvbnRyb2wgaGFzIHZlcnRpY2FsIGFsaWdubWVudFxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLmZvcm1GaWVsZEV4dHJhcz8ubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgPz8gMCkgKyAodGhpcy5jb250cm9sPy5leHRyYUNvbnRlbnRIZWlnaHRQeCA/PyAwKSB8fCBudWxsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbENvbHVtbkxheW91dCQ6IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5MYXlvdXQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmllbGRDb2x1bW5MYXlvdXQkOiBCZWhhdmlvclN1YmplY3Q8Q29sdW1uTGF5b3V0PjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dhcENvbHVtbkxheW91dCQ6IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5MYXlvdXQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2JyZWFrUG9pbnRPYnNlcnZlcjogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtRmllbGRMYXlvdXRTZXJ2aWNlOiBGb3JtRmllbGRMYXlvdXRTZXJ2aWNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEhpbnRPcHRpb25zOiBGaWVsZEhpbnRPcHRpb25zO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBmb3JtR3JvdXBDb250YWluZXI6IEZvcm1Hcm91cENvbnRhaW5lcixcbiAgICAgICAgQE9wdGlvbmFsKCkgcmVhZG9ubHkgZm9ybUZpZWxkR3JvdXA6IEZvcm1GaWVsZEdyb3VwLFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KFJFU1BPTlNJVkVfQlJFQUtQT0lOVFNfQ09ORklHKVxuICAgICAgICByZWFkb25seSBfZGVmYXVsdFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnOiBSZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZyxcbiAgICAgICAgcmVhZG9ubHkgX3Jlc3BvbnNpdmVCcmVha3BvaW50c1NlcnZpY2U6IFJlc3BvbnNpdmVCcmVha3BvaW50c1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRkRQX0ZPUk1fRklFTERfSElOVF9PUFRJT05TX0RFRkFVTFQpIF9wcm92aWRlZEhpbnRPcHRpb25zOiBGaWVsZEhpbnRPcHRpb25zLFxuICAgICAgICBASW5qZWN0KEZEUF9GT1JNX0ZJRUxEX0hJTlRfTEFZT1VUX0NPTkZJRykgcHJpdmF0ZSBfaGludExheW91dENvbmZpZzogSGludExheW91dENvbmZpZyxcbiAgICAgICAgQFNlbGYoKSBfc2VsZkZvcm1GaWVsZExheW91dFNlcnZpY2U6IEZvcm1GaWVsZExheW91dFNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIF9wYXJlbnRGb3JtRmllbGRMYXlvdXRTZXJ2aWNlOiBGb3JtRmllbGRMYXlvdXRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRIaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRGb3JtRmllbGRIaW50T3B0aW9ucyxcbiAgICAgICAgICAgIC4uLl9wcm92aWRlZEhpbnRPcHRpb25zXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2Zvcm1GaWVsZExheW91dFNlcnZpY2UgPSBfcGFyZW50Rm9ybUZpZWxkTGF5b3V0U2VydmljZSB8fCBfc2VsZkZvcm1GaWVsZExheW91dFNlcnZpY2U7XG4gICAgICAgIHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9maWVsZENvbHVtbkxheW91dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0KTtcbiAgICAgICAgdGhpcy5fZ2FwQ29sdW1uTGF5b3V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5fZ2FwQ29sdW1uTGF5b3V0KTtcbiAgICAgICAgLy8gZm9ybUdyb3VwQ29udGFpbmVyIGNhbiBiZSBpbmplY3RlZCBvbmx5IGlmIGN1cnJlbnQgZm9ybS1maWVsZCBpcyBsb2NhdGVkXG4gICAgICAgIC8vIGluc2lnaHQgZm9ybUdyb3VwQ29udGFpbmVyIGNvbnRlbnQuXG4gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlIHRoZSBmb3JtR3JvdXBDb250YWluZXJcbiAgICAgICAgLy8gd2lsbCBiZSB1bmRlZmluZWQgKGtub3duIGFuZ3VsYXIgaXNzdWUpLFxuICAgICAgICAvLyBpbiBzdWNoIGNhc2UgZm9ybUdyb3VwQ29udGFpbmVyIGNhbiBiZSBwb2ludGVkIGV4cGxpY2l0bHkgdXNpbmdcbiAgICAgICAgLy8gY29tcG9uZW50IGlucHV0IGFubm90YXRpb25cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBDb250YWluZXIgPSBmb3JtR3JvdXBDb250YWluZXI7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnID0gX2RlZmF1bHRSZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZyB8fCBuZXcgUmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWcoKTtcbiAgICAgICAgdGhpcy5fYnJlYWtQb2ludE9ic2VydmVyID0gdGhpcy5fcmVzcG9uc2l2ZUJyZWFrcG9pbnRzU2VydmljZS5vYnNlcnZlQnJlYWtwb2ludEJ5Q29uZmlnKFxuICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWdcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmlzSG9yaXpvbnRhbCQgPSB0b1NpZ25hbChcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0JC5waXBlKGZpbHRlcihCb29sZWFuKSwgbWFwKG5vcm1hbGl6ZUNvbHVtbkxheW91dCkpLFxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0JC5waXBlKGZpbHRlcihCb29sZWFuKSwgbWFwKG5vcm1hbGl6ZUNvbHVtbkxheW91dCkpLFxuICAgICAgICAgICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dCQucGlwZShtYXAoKGcpID0+IG5vcm1hbGl6ZUNvbHVtbkxheW91dChnIHx8IHsgUzogMCB9KSkpXG4gICAgICAgICAgICBdKS5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoW2xhYmVsLCBmaWVsZCwgZ2FwXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtQb2ludE9ic2VydmVyLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJyZWFrcG9pbnROYW1lKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFticmVha3BvaW50TmFtZV0gKyBmaWVsZFticmVha3BvaW50TmFtZV0gKyBnYXBbYnJlYWtwb2ludE5hbWVdIDw9IDEyXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBpbml0aWFsIHZhbHVlcyBmb3IgbGFiZWwsIGZpZWxkIGFuZCBnYXAgY29sdW1uc1xuICAgICAqL1xuICAgIHNldERlZmF1bHRDb2x1bW5MYXlvdXQoKTogdm9pZCB7XG4gICAgICAgIC8vIElmIGxheW91dCBhbHJlYWR5IGRlZmluZWQsIG5vIG5lZWQgdG8gc2V0IGRlZmF1bHQgb25lLlxuICAgICAgICBpZiAodGhpcy5sYWJlbENvbHVtbkxheW91dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdGVuVG9JbmxpbmVIZWxwUGxhY2VSZXF1aXJlbWVudENoYW5nZXMoKCkgPT4gKHRoaXMubGFiZWxDb2x1bW5MYXlvdXQgPyB0aGlzIDogdGhpcy5fZ3JvdXBIb3N0KSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBsaXN0ZW5Ub0lubGluZUhlbHBQbGFjZVJlcXVpcmVtZW50Q2hhbmdlcyhnZXRTb3VyY2U6ICgpID0+IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX25lZWRzSW5saW5lSGVscFBsYWNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9uZWVkc0lubGluZUhlbHBQbGFjZVN1YnNjcmlwdGlvbiA9IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXRMYXlvdXRzID0gKHNvdXJjZTogYW55KTogdm9pZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sdW1uTGF5b3V0ID0gc291cmNlLmxhYmVsQ29sdW1uTGF5b3V0O1xuICAgICAgICAgICAgdGhpcy5maWVsZENvbHVtbkxheW91dCA9IHNvdXJjZS5maWVsZENvbHVtbkxheW91dDtcbiAgICAgICAgICAgIHRoaXMuZ2FwQ29sdW1uTGF5b3V0ID0gc291cmNlLmdhcENvbHVtbkxheW91dDtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24gPSB0aGlzLl9mb3JtRmllbGRMYXlvdXRTZXJ2aWNlLm5lZWRzSW5saW5lSGVscFBsYWNlXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5fZm9ybUZpZWxkTGF5b3V0U2VydmljZS5nZXRGaXhlZExheW91dHMoZ2V0U291cmNlKCkpKSxcbiAgICAgICAgICAgICAgICB0YXAoc2V0TGF5b3V0cyksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gcHJvdmlkZXMgY2FwYWJpbGl0eSB0byBtYWtlIGEgZmllbGQgZGlzYWJsZWQuIHVzZWZ1bCBpbiByZWFjdGl2ZSBmb3JtIGFwcHJvYWNoLlxuICAgICAgICB0aGlzLmZvcm1Db250cm9sID1cbiAgICAgICAgICAgICh0aGlzLmZvcm1Hcm91cENvbnRhaW5lcj8uZm9ybUdyb3VwPy5nZXQodGhpcy5pZCkgYXMgRm9ybUNvbnRyb2wpID8/XG4gICAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogbnVsbCwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucyAmJiAodGhpcy5jb2x1bW5zIDwgMSB8fCB0aGlzLmNvbHVtbnMgPiAxMikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW2NvbHVtbnNdIGFjY2VwdHMgbnVtYmVycyBiZXR3ZWVuIDEgLSAxMicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fYnJlYWtQb2ludE9ic2VydmVyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGJyZWFrUG9pbnROYW1lKSA9PiB0aGlzLl91cGRhdGVMYXlvdXQoYnJlYWtQb2ludE5hbWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FkZFRvRm9ybUdyb3VwKCk7XG5cbiAgICAgICAgdGhpcy5saXN0ZW5Ub0lubGluZUhlbHBQbGFjZVJlcXVpcmVtZW50Q2hhbmdlcygoKSA9PiB0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaGludCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSGludE9wdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1GaWVsZExheW91dFNlcnZpY2Uuc2V0TmVlZHNJbmxpbmVIZWxwKFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgKHRoaXMuaGludE9wdGlvbnMudGFyZ2V0ID09PSAnaW5wdXQnIHx8IHRoaXMuaGludE9wdGlvbnMudGFyZ2V0ID09PSAnYXV0bycpICYmICEhdGhpcy5oaW50XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmhpbnQgJiYgY2hhbmdlcy5oaW50LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9icmVha1BvaW50T2JzZXJ2ZXJcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFwKChzaXplTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGludE9wdGlvbnMudGFyZ2V0ID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpbnRUYXJnZXQgPSB0aGlzLl9oaW50TGF5b3V0Q29uZmlnLmhpbnRPbklucHV0QnJlYWtwb2ludHMuaW5jbHVkZXMoc2l6ZU5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2lucHV0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdsYWJlbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGludFRhcmdldCA9IHRoaXMuaGludE9wdGlvbnMudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXNzaWduRXJyb3JEaXJlY3RpdmVzKCk7XG5cbiAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVRdWVyeS5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXNzaWduRXJyb3JEaXJlY3RpdmVzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl91cGRhdGVDb250cm9sUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZUVycm9ySGFuZGxlcigpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0Zvcm1NZXNzYWdlKCk7XG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtRmllbGRMYXlvdXRTZXJ2aWNlLnJlbW92ZUVudHJ5KHRoaXMpO1xuICAgICAgICB0aGlzLl9yZW1vdmVGcm9tRm9ybUdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlc0Nkcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdGFibGUgJiYgISF0aGlzLmNvbnRyb2w/LmNvbnRyb2xJbnZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIHVuZGVybHlpbmcgZm9ybSBjb250cm9sXG4gICAgICogQHBhcmFtIGZvcm1GaWVsZENvbnRyb2xcbiAgICAgKi9cbiAgICByZWdpc3RlckZvcm1GaWVsZENvbnRyb2woZm9ybUZpZWxkQ29udHJvbDogRm9ybUZpZWxkQ29udHJvbCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignRm9ybSBmaWVsZCBjYW4gY29udGFpbiBvbmx5IG9uZSBGb3JtRmllbGRDb250cm9sJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRyb2wgPSBmb3JtRmllbGRDb250cm9sIGFzIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbDtcblxuICAgICAgICBmb3JtRmllbGRDb250cm9sLnN0YXRlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29udHJvbFByb3BlcnRpZXMoKTtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY2FsbCBleHBsaWNpdGx5IGRldGVjdENoYW5nZXMoKSBpbnN0ZWFkIG9mIG1hcmtGb3JDaGVjayBiZWZvcmUgdGhlXG4gICAgICAgICAgICAvLyBtb2RpZmllZCB2YWxpZGF0aW9uIHN0YXRlIG9mIHRoZSBjb250cm9sIHBhc3NlcyBvdmVyIGNoZWNrZWQgcGhhc2VcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCgnc3RhdGVDaGFuZ2VzJyk7XG4gICAgICAgICAgICB0aGlzLmdyb3VwRXJyb3JzKCk7XG4gICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlZnJlc2ggVUkgd2hlbiB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIGlmIChmb3JtRmllbGRDb250cm9sPy5uZ0NvbnRyb2w/LnZhbHVlQ2hhbmdlcykge1xuICAgICAgICAgICAgZm9ybUZpZWxkQ29udHJvbC5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCgndmFsdWVDaGFuZ2VzJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cEVycm9ycygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybUZpZWxkQ29udHJvbD8ubmdDb250cm9sPy5jb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUZpZWxkQ29udHJvbC5uZ0NvbnRyb2wuY29udHJvbDtcblxuICAgICAgICAgICAgY29uc3QgaGFzUmVxdWlyZWRWYWxpZGF0b3IgPVxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9ycy5pbmNsdWRlcyhWYWxpZGF0b3JzLnJlcXVpcmVkKSB8fCB0aGlzLnZhbGlkYXRvcnMuaW5jbHVkZXMoVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhaGFzUmVxdWlyZWRWYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc1JlcXVpcmVkVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIGZvcm0gY29udHJvbCBpcyBkaXNhYmxlZCwgaW4gcmVhY3RpdmUgZm9ybSBhcHByb2FjaFxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGVyZSBpcyBhIGNhc2Ugd2hlbiBhIFwiZm9ybS1ncm91cFwiIGluaXRpYWwgc3RhdGUgaXMgVkFMSUQsXG4gICAgICAgICAgICAgKiBhbmQgb24gdGhlIG5leHQgbG9vcCBhIGNoaWxkIGZvcm0tZmlsZWQgZXh0ZW5kcyBpdCBhbmQgbWFrZVxuICAgICAgICAgICAgICogdGhlIGZvcm0tZ3JvdXAgSU5WQUxJRC5cbiAgICAgICAgICAgICAqIEluIHN1Y2ggY2FzZSB3ZSBnZXQgdGhlIGVycm9yXG4gICAgICAgICAgICAgKiBcIkV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3IuIFByZXZpb3VzIHZhbHVlIGlzIG5nLXZhbGlkLCBjdXJyZW50IHZhbHVlIGlzIG5nLWludmFsaWRcIi5cbiAgICAgICAgICAgICAqIFRvIGZpeCBpdCB3ZSBoYXZlIHRvIHBvc3Rwb25lIGFkZGluZyBmb3JtLWZpZWxkIHZhbGlkYXRvcnNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UodGhpcy52YWxpZGF0b3JzKSk7XG4gICAgICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9hZGRDb250cm9sVG9Gb3JtR3JvdXAoZm9ybUZpZWxkQ29udHJvbD8ubmdDb250cm9sPy5jb250cm9sKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVucmVnaXN0ZXIgdW5kZXJseWluZyBmb3JtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gZm9ybUZpZWxkQ29udHJvbFxuICAgICAqL1xuICAgIHVucmVnaXN0ZXJGb3JtRmllbGRDb250cm9sKGZvcm1GaWVsZENvbnRyb2w6IEZvcm1GaWVsZENvbnRyb2wpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZENvbnRyb2wgIT09IHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250cm9sID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9yZW1vdmVDb250cm9sRnJvbUZvcm1Hcm91cCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdyb3Vwc1xuICAgICAqL1xuICAgIGdyb3VwRXJyb3JzKCk6IHZvaWQge1xuICAgICAgICAvLyBRdWV1ZSB0YXNrIGJlY2F1c2UgZmlyaW5nIGl0IHJpZ2h0IGF3YXkgbWF5IGNhdXNlIGVycm9yIHdpdGggc2hvd2luZyBlbXB0eSBtZXNzYWdlLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBlZEVycm9ycyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5jb250cm9sPy5uZ0NvbnRyb2w/LmVycm9ycztcbiAgICAgICAgICAgIGlmICghZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVycm9yRGlyZWN0aXZlcy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yc1tkaXJlY3RpdmUuZXJyb3JdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwZWRFcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yc1tkaXJlY3RpdmUuZXJyb3JdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzQ2hhbmdlJC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBwcmlvcml0aXplZCBjb250cm9sIHN0YXRlIGJhc2VkIG9uIHRoZSBlcnJvciB0eXBlcyBpdCBoYXMuXG4gICAgICovXG4gICAgZ2V0UHJpb3JpdHlTdGF0ZSgpOiBGb3JtU3RhdGVzIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBlZEVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc0Vycm9ycygpID8gJ2Vycm9yJyA6ICdkZWZhdWx0JztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRGb3JtU3RhdGUodGhpcy5ncm91cGVkRXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLmRpcmVjdGl2ZS50eXBlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBlcnJvciBkaXJlY3RpdmVzLlxuICAgICAqL1xuICAgIHNldEVycm9yRGlyZWN0aXZlcyhkaXJlY3RpdmVzOiBRdWVyeUxpc3Q8Rm9ybUVycm9yPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgaWYgKCFkaXJlY3RpdmVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzLnRvQXJyYXkoKTtcblxuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24gPSBkaXJlY3RpdmVzLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXMudG9BcnJheSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIGNvbnRlbnQgb2YgdGhlIHByb3ZpZGVkIGhpbnQgaXMgYSBzdHJpbmcuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGlzU3RyaW5nSGludChoaW50T3B0aW9uczogSGludENvbnRlbnQpOiBoaW50T3B0aW9ucyBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGhpbnRPcHRpb25zID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdGVucyB0byBmb3JtIG1lc3NhZ2UgY29tcG9uZW50IGNoYW5nZXMgYW5kIHBhc3NlcyBpdHMgaW5zdGFuY2UgdG8gdGhlIGZvcm0gY29udHJvbCBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Gb3JtTWVzc2FnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5wdXRNZXNzYWdlR3JvdXBDbXAuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLl9pbnB1dE1lc3NhZ2VHcm91cENtcC5maXJzdCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbCEuZm9ybU1lc3NhZ2UgPSBjb21wb25lbnQ7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbGlkYXRlRXJyb3JIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9lZGl0YWJsZSAmJlxuICAgICAgICAgICAgdGhpcy5jb250cm9sICYmXG4gICAgICAgICAgICB0aGlzLl9oYXNWYWxpZGF0b3JzKCkgJiZcbiAgICAgICAgICAgICF0aGlzLmkxOFN0cmluZ3MgJiZcbiAgICAgICAgICAgIHRoaXMuZXJyb3JEaXJlY3RpdmVzLmxlbmd0aCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsaWRhdGlvbiBzdHJpbmdzIGFyZSByZXF1aXJlZCBmb3IgdGhlIGFueSBwcm92aWRlZCB2YWxpZGF0aW9ucy4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFzVmFsaWRhdG9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdG9ycyAmJiB0aGlzLnZhbGlkYXRvcnMubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQWRkIEZvcm1GaWVsZCB0byBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9hZGRUb0Zvcm1Hcm91cCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cENvbnRhaW5lciB8fCB0aGlzLmZvcm1GaWVsZEdyb3VwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcm1Hcm91cENvbnRhaW5lci5hZGRGb3JtRmllbGQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlbW92ZSBGb3JtRmllbGQgZnJvbSBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZW1vdmVGcm9tRm9ybUdyb3VwKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBDb250YWluZXIucmVtb3ZlRm9ybUZpZWxkKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBZGQgRm9ybUNvbnRyb2wgZnJvbSBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9hZGRDb250cm9sVG9Gb3JtR3JvdXAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXBDb250YWluZXIgfHwgISF0aGlzLmZvcm1GaWVsZEdyb3VwPy5mb3JtTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyLmFkZEZvcm1Db250cm9sKHRoaXMuaWQsIGNvbnRyb2wpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZW1vdmUgRm9ybUNvbnRyb2wgZnJvbSBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZW1vdmVDb250cm9sRnJvbUZvcm1Hcm91cCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cENvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyLnJlbW92ZUZvcm1Db250cm9sKHRoaXMuaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBOZWVkIHRvIGJlIGFibGUgdG8gc2V0IHRoZXNlIHByb3BlcnRpZXMgb24gZXZlcnkgbGV2ZWwuXG4gICAgICogIC0gR2xvYmFsIEZvcm1Hcm91cCBMZXZlbCBhcyB3ZWxsIGVhY2ggZmllbGRcbiAgICAgKlxuICAgICAqICBUb2RvOiB1c2UgbW9yZSBlbGVnYW50IHdheSB0byBzZXQgdGhlc2UgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVDb250cm9sUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCAmJiB0aGlzLl9lZGl0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmlkID0gdGhpcy5pZDtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5yZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0TGF5b3V0KCk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUNvbHVtbkxheW91dCh0aGlzLmNvbHVtbkxheW91dCwgMSk7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkxheW91dCA9IG5vcm1hbGl6ZWQ7XG4gICAgICAgICAgICB0aGlzLl9zQ29sdW1uTnVtYmVyID0gbm9ybWFsaXplZFsnUyddO1xuICAgICAgICAgICAgdGhpcy5fbWRDb2x1bW5OdW1iZXIgPSBub3JtYWxpemVkWydNJ107XG4gICAgICAgICAgICB0aGlzLl9sZ0NvbHVtbk51bWJlciA9IG5vcm1hbGl6ZWRbJ0wnXTtcbiAgICAgICAgICAgIHRoaXMuX3hsQ29sdW1uTnVtYmVyID0gbm9ybWFsaXplZFsnWEwnXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVMYXlvdXQoY3VycmVudEJyZWFraW5nUG9pbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCkge1xuICAgICAgICAgICAgc3dpdGNoIChjdXJyZW50QnJlYWtpbmdQb2ludE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl9zQ29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl9tZENvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uID0gdGhpcy5fbGdDb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1hMJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl94bENvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl94bENvbHVtbk51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtaXQgY29sdW1uIGNoYW5nZSwgc28gZm9ybS1ncm91cCBrbm93cyBpdCBhbmQgcmUtYXJyYW5nZXMgdGhlIGZpZWxkc1xuICAgICAgICB0aGlzLm9uQ29sdW1uQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVIaW50T3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgLy8gcGxhY2VtZW50IGlzIGhlcmUgc2V0IHVwIGJlY2F1c2UgaGludFBsYWNlbWVudCBpcyBkZXByZWNhdGVkXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oaW50ID09PSAnc3RyaW5nJyB8fCB0aGlzLmhpbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgdGhpcy5oaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0SGludE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5oaW50XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmhpbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aGlzLmhpbnRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHRIaW50T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmhpbnRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Fzc2lnbkVycm9yRGlyZWN0aXZlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVzQ2RyPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZXMgPSB0aGlzLl9lcnJvckRpcmVjdGl2ZVF1ZXJ5LnRvQXJyYXkoKTtcbiAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVzQ2RyID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlcy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlc0Nkci5hZGQoXG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlLmRldGVjdENoYW5nZXMkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBFcnJvcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI3JlbmRlcmVyPlxuICAgIDxkaXYgW2hvcml6b250YWxdPVwidHJ1ZVwiIGZkLWZvcm0taXRlbSBjbGFzcz1cImZkLXJvd1wiPlxuICAgICAgICBAaWYgKCFub0xhYmVsTGF5b3V0KSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jb2xcIlxuICAgICAgICAgICAgICAgICNsYWJlbENvbFxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJfbGFiZWxDb2x1bW5MYXlvdXRDbGFzc1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbi1ib3R0b20ucHhdPVwiX2NvbnRyb2xFeHRyYXNIZWlnaHRQeFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndpdGhGb3JtTWVzc2FnZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJnYXBUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCIgW2lkXT1cIidmZHAtZm9ybS1oaW50LScgKyBpZFwiPlxuICAgICAgICBAaWYgKGlzU3RyaW5nSGludChoaW50T3B0aW9ucy5jb250ZW50KSkge1xuICAgICAgICAgICAge3sgaGludE9wdGlvbnMuY29udGVudCB9fVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KGhpbnRPcHRpb25zLmNvbnRlbnQpXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3dpdGhGb3JtTWVzc2FnZT5cbiAgICA8ZmRwLWlucHV0LW1lc3NhZ2UtZ3JvdXBcbiAgICAgICAgY2xhc3M9XCJmZC1jb2xcIlxuICAgICAgICBbY2xhc3NdPVwiX2ZpZWxkQ29sdW1uTGF5b3V0Q2xhc3NcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiJ2ZkcC1mb3JtLWxhYmVsLScgKyBpZFwiXG4gICAgPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3RyaWdnZXJJdGVtPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIEBpZiAoaGFzRXJyb3JzKCkgJiYgZ3JvdXBlZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBAZm9yIChlcnJvciBvZiBncm91cGVkRXJyb3JzOyB0cmFjayBlcnJvcikge1xuICAgICAgICAgICAgICAgIDxmZC1mb3JtLW1lc3NhZ2UgW3R5cGVdPVwiZXJyb3IuZGlyZWN0aXZlLnR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChlcnJvci5kaXJlY3RpdmUuX2hlYWRpbmdUZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3IuZGlyZWN0aXZlLl9oZWFkaW5nVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZXJyb3IuZXJyb3IsIGxhYmVsOiBsYWJlbCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChlcnJvci5kaXJlY3RpdmUuX2hlYWRpbmdUZW1wbGF0ZVJlZiAmJiBlcnJvci5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZXJyb3IuZGlyZWN0aXZlLl9kZXNjcmlwdGlvblRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvci5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZXJyb3IuZXJyb3IsIGxhYmVsOiBsYWJlbCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoZ3JvdXBlZEVycm9ycy5sZW5ndGggPT09IDAgJiYgaGFzRXJyb3JzKCkgJiYgaTE4U3RyaW5ncykge1xuICAgICAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSB0eXBlPVwiZXJyb3JcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaTE4U3RyaW5nc1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY29udHJvbD8ubmdDb250cm9sPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICAgICAgfVxuICAgIDwvZmRwLWlucHV0LW1lc3NhZ2UtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lubmVyRXJyb3JSZW5kZXJlcnM+XG4gICAgQGlmIChoYXNFcnJvcnMoKSAmJiBncm91cGVkRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgQGZvciAoZXJyb3Igb2YgZ3JvdXBlZEVycm9yczsgdHJhY2sgZXJyb3IpIHtcbiAgICAgICAgICAgIEBpZiAoZXJyb3IuZGlyZWN0aXZlLl9oZWFkaW5nVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3IuZGlyZWN0aXZlLl9oZWFkaW5nVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGVycm9yLmVycm9yLCBsYWJlbDogbGFiZWwgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGVycm9yLmRpcmVjdGl2ZS5faGVhZGluZ1RlbXBsYXRlUmVmICYmIGVycm9yLmRpcmVjdGl2ZS5fZGVzY3JpcHRpb25UZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChlcnJvci5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3IuZGlyZWN0aXZlLl9kZXNjcmlwdGlvblRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBlcnJvci5lcnJvciwgbGFiZWw6IGxhYmVsIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQGlmIChncm91cGVkRXJyb3JzLmxlbmd0aCA9PT0gMCAmJiBoYXNFcnJvcnMoKSAmJiBpMThTdHJpbmdzKSB7XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaTE4U3RyaW5nc1wiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGNvbnRyb2w/Lm5nQ29udHJvbD8uZXJyb3JzIH1cIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxuICAgIEBpZiAoaGludFRhcmdldCA9PT0gJ2xhYmVsJykge1xuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIFtpZF09XCInZmRwLWZvcm0tbGFiZWwtJyArIGlkXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJlZGl0YWJsZSAmJiByZXF1aXJlZFwiXG4gICAgICAgICAgICBmZC1mb3JtLWxhYmVsXG4gICAgICAgICAgICBbaW5saW5lSGVscENvbnRlbnRdPVwiaGludE9wdGlvbnMuY29udGVudFwiXG4gICAgICAgICAgICBbaW5saW5lSGVscEJvZHlQbGFjZW1lbnRdPVwiaGludE9wdGlvbnMucGxhY2VtZW50IHx8ICd0b3AnXCJcbiAgICAgICAgICAgIFtpbmxpbmVIZWxwUGxhY2VtZW50XT1cImhpbnRPcHRpb25zLnBvc2l0aW9uIHx8ICdhZnRlcidcIlxuICAgICAgICAgICAgW2lubGluZUhlbHBHbHlwaF09XCJoaW50T3B0aW9ucy5nbHlwaCB8fCAnJ1wiXG4gICAgICAgICAgICBbaW5saW5lSGVscFRyaWdnZXJzXT1cImhpbnRPcHRpb25zLnRyaWdnZXIgfHwgW11cIlxuICAgICAgICAgICAgW2FsaWduTGFiZWxFbmRdPVwiISFpc0hvcml6b250YWwkKClcIlxuICAgICAgICAgICAgW2NvbG9uXT1cImNvbG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gW2lkXT1cIidmZHAtZm9ybS1sYWJlbC1jb250ZW50LScgKyBpZFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIFtpZF09XCInZmRwLWZvcm0tbGFiZWwtJyArIGlkXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJlZGl0YWJsZSAmJiByZXF1aXJlZFwiXG4gICAgICAgICAgICBmZC1mb3JtLWxhYmVsXG4gICAgICAgICAgICBbY29sb25dPVwiY29sb25cIlxuICAgICAgICAgICAgW2FsaWduTGFiZWxFbmRdPVwiISFpc0hvcml6b250YWwkKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBbaWRdPVwiJ2ZkcC1mb3JtLWxhYmVsLWNvbnRlbnQtJyArIGlkXCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNnYXBUZW1wbGF0ZT5cbiAgICBAaWYgKGhpbnRUYXJnZXQgPT09ICdpbnB1dCcgJiYgaGludE9wdGlvbnMuY29udGVudCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY29sIGZkLWZvcm0tZmllbGQtaW5saW5lLWhlbHAtY29udGFpbmVyXCIgW2NsYXNzXT1cIl9nYXBDb2x1bW5MYXlvdXRDbGFzc1wiPlxuICAgICAgICAgICAgPHNwYW4gZmQtbGluayBbdW5kZWNvcmF0ZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxmZC1pY29uXG4gICAgICAgICAgICAgICAgICAgIFtmZC1pbmxpbmUtaGVscF09XCJoaW50T3B0aW9ucy5jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2dseXBoXT1cImhpbnRPcHRpb25zLmdseXBoXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlbWVudF09XCJoaW50T3B0aW9ucy5wbGFjZW1lbnQgfHwgbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIFt0cmlnZ2Vyc109XCJoaW50T3B0aW9ucy50cmlnZ2VyIHx8IFtdXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9mZC1pY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNvbFwiIFtjbGFzc109XCJfZ2FwQ29sdW1uTGF5b3V0Q2xhc3NcIj48L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19
693
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2Zvcm0vZm9ybS1ncm91cC9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9mb3JtL2Zvcm0tZ3JvdXAvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEVBQ1QsSUFBSSxFQUdKLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLFdBQVcsRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGFBQWEsRUFBZ0MsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFF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QkFBdUI7Z0JBS3ZCLHFCQUFxQjtzQkFEckMsWUFBWTt1QkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUHJvdmlkZXIsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNlbGYsXG4gICAgU2lnbmFsLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgU2tpcFNlbGYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIGZvcndhcmRSZWYsXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZEX0ZPUk1fRklFTEQsIEZvcm1GaWVsZENvbnRyb2wsIEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRm9ybUl0ZW1Db21wb25lbnQsIEZvcm1MYWJlbENvbXBvbmVudCwgRm9ybU1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHsgSW5saW5lSGVscERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbmxpbmUtaGVscCc7XG5pbXBvcnQgeyBMaW5rQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2xpbmsnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW4sXG4gICAgQ29sdW1uTGF5b3V0LFxuICAgIEZpZWxkSGludElucHV0LFxuICAgIEZpZWxkSGludE9wdGlvbnMsXG4gICAgRm9ybUVycm9yLFxuICAgIEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlQ29udGV4dCxcbiAgICBGb3JtRmllbGRHcm91cCxcbiAgICBGb3JtR3JvdXBDb250YWluZXIsXG4gICAgSGludENvbnRlbnQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIFJFU1BPTlNJVkVfQlJFQUtQT0lOVFNfQ09ORklHLFxuICAgIFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnLFxuICAgIFJlc3BvbnNpdmVCcmVha3BvaW50c1NlcnZpY2Vcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgZ2V0Rm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XG5pbXBvcnQgeyBJbnB1dE1lc3NhZ2VHcm91cFdpdGhUZW1wbGF0ZSB9IGZyb20gJy4uLy4uL2lucHV0LW1lc3NhZ2UtZ3JvdXAtd2l0aC10ZW1wbGF0ZS9pbnB1dC1tZXNzYWdlLWdyb3VwLXdpdGgtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IGRlZmF1bHRGb3JtRmllbGRIaW50T3B0aW9ucyB9IGZyb20gJy4uL2NvbmZpZy9kZWZhdWx0LWZvcm0tZmllbGQtaGludC1vcHRpb25zJztcbmltcG9ydCB7IEZPUk1fR1JPVVBfQ0hJTERfRklFTERfVE9LRU4gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBGRFBfRk9STV9GSUVMRF9ISU5UX0xBWU9VVF9DT05GSUcsXG4gICAgRkRQX0ZPUk1fRklFTERfSElOVF9PUFRJT05TX0RFRkFVTFQsXG4gICAgSGludExheW91dENvbmZpZ1xufSBmcm9tICcuLi9mZHAtZm9ybS50b2tlbnMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkRXJyb3JEaXJlY3RpdmUgfSBmcm9tICcuLi9mb3JtLWZpZWxkLWVycm9yL2Zvcm0tZmllbGQtZXJyb3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZvcm1GaWVsZENvbnRyb2xFeHRyYXNDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkLWV4dHJhcy9mb3JtLWZpZWxkLWV4dHJhcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVDb2x1bW5DbGFzcywgbm9ybWFsaXplQ29sdW1uTGF5b3V0IH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBGb3JtRmllbGRMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9ybS1maWVsZC1sYXlvdXQuc2VydmljZSc7XG5cbmxldCBkZWZhdWx0SWQgPSAwO1xuXG5jb25zdCBmb3JtRmllbGRQcm92aWRlcjogUHJvdmlkZXIgPSB7XG4gICAgcHJvdmlkZTogRkRfRk9STV9GSUVMRCxcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb3JtRmllbGRDb21wb25lbnQpXG59O1xuXG5jb25zdCBmb3JtR3JvdXBDaGlsZFByb3ZpZGVyOiBQcm92aWRlciA9IHtcbiAgICBwcm92aWRlOiBGT1JNX0dST1VQX0NISUxEX0ZJRUxEX1RPS0VOLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvcm1GaWVsZENvbXBvbmVudClcbn07XG5cbi8qKlxuICogRm9ybSBGaWVsZCByZXByZXNlbnQgYWN0dWFsIHJvdyBhbmQgYWdncmVnYXRlcyBjb21tb24gYmVoYXZpb3IgZm9yIHRoZSBpbnB1dCBmaWVsZCBzdWNoIGFzXG4gKiBlcnJvciwgbGFiZWwgb3IgaGludC5cbiAqIEhpbnQgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgbGlzdGVuaW5nIGZvciBGaWVsZENvbnRyb2wgY2hhbmdlcyBhbmQgdHJpZ2dlciBuZWNlc3NhcnlcbiAqIGNoYW5nZSBkZXRlY3Rpb25cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWZvcm0tZmllbGQnLFxuICAgIHRlbXBsYXRlVXJsOiAnZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2Zvcm0tZmllbGQuY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW2Zvcm1GaWVsZFByb3ZpZGVyLCBmb3JtR3JvdXBDaGlsZFByb3ZpZGVyLCBGb3JtRmllbGRMYXlvdXRTZXJ2aWNlXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3JtSXRlbUNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgSW5wdXRNZXNzYWdlR3JvdXBXaXRoVGVtcGxhdGUsXG4gICAgICAgIEZvcm1NZXNzYWdlQ29tcG9uZW50LFxuICAgICAgICBGb3JtTGFiZWxDb21wb25lbnQsXG4gICAgICAgIExpbmtDb21wb25lbnQsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIElubGluZUhlbHBEaXJlY3RpdmVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZENvbXBvbmVudFxuICAgIGltcGxlbWVudHMgUGxhdGZvcm1Gb3JtRmllbGQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXNcbntcbiAgICAvKiogRm9ybSBmaWVsZCBsYWJlbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGFiZWw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFN1ZmZpeCBmb3IgaWRzIG9mIGNvbnRyb2wgZWxlbWVudHMgaW5zaWRlIHRoaXMgZm9ybSBmaWVsZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZyA9ICgrK2RlZmF1bHRJZCkudG9TdHJpbmcoKTtcblxuICAgIC8qKiBIaW50IHRvIGJlIHBsYWNlZCBuZXh0IHRvIGxhYmVsICovXG4gICAgQElucHV0KClcbiAgICBoaW50OiBOdWxsYWJsZTxGaWVsZEhpbnRJbnB1dD47XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hlbiBmb3JtIGZpZWxkIGxhYmVsIHNob3VsZCBub3QgYmUgZGlzcGxheWVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBub0xhYmVsTGF5b3V0ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdCBvZiB2YWxpZGF0b3JzIGFwcGxpZWQgdG8gdGhlIGZvcm0gZmllbGQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbVmFsaWRhdG9ycy5udWxsVmFsaWRhdG9yXTtcblxuICAgIC8qKlxuICAgICAqIFJhbmsgaXMgdXNlZCBmb3Igb3JkZXJpbmcuXG4gICAgICogRmlyc3QgbG93ZXIgbnVtYmVyLCB0aGVuIC0gaGlnaGVyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByYW5rOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBQbGFjZWhvbGRlciBmb3IgdGhlIGZpZWxkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqIEZvcm0gQ29udGFpbmVyIGNvbHVtbiBpdCBiZWxvbmdzIHRvICovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW46IG51bWJlcjtcblxuICAgIC8qKiBvYmplY3QgZm9yIHBsYWNpbmcgZmllbGQgaW4gY29sdW1uIGluIGVhY2ggc2NyZWVuIGxheW91dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvbHVtbkxheW91dChsYXlvdXQ6IENvbHVtbkxheW91dCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIWxheW91dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbHVtbkxheW91dCA9IGxheW91dDtcbiAgICAgICAgdGhpcy5faXNDb2x1bW5MYXlvdXRFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2V0TGF5b3V0KCk7XG4gICAgfVxuXG4gICAgZ2V0IGNvbHVtbkxheW91dCgpOiBDb2x1bW5MYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uTGF5b3V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgbGFiZWwncyBjb2x1bW4gbGF5b3V0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxhYmVsQ29sdW1uTGF5b3V0KHZhbHVlOiBDb2x1bW5MYXlvdXQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0ID0gbm9ybWFsaXplQ29sdW1uTGF5b3V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5fbGFiZWxDb2x1bW5MYXlvdXRDbGFzcyA9IGdlbmVyYXRlQ29sdW1uQ2xhc3ModGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9sYWJlbENvbHVtbkxheW91dCQubmV4dCh0aGlzLl9sYWJlbENvbHVtbkxheW91dCk7XG4gICAgfVxuXG4gICAgZ2V0IGxhYmVsQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbENvbHVtbkxheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGZpZWxkJ3MgY29sdW1uIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBmaWVsZENvbHVtbkxheW91dCh2YWx1ZTogQ29sdW1uTGF5b3V0IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0ID0gbm9ybWFsaXplQ29sdW1uTGF5b3V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5fZmllbGRDb2x1bW5MYXlvdXRDbGFzcyA9IGdlbmVyYXRlQ29sdW1uQ2xhc3ModGhpcy5fZmllbGRDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9maWVsZENvbHVtbkxheW91dCQubmV4dCh0aGlzLl9maWVsZENvbHVtbkxheW91dCk7XG4gICAgfVxuXG4gICAgZ2V0IGZpZWxkQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZENvbHVtbkxheW91dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGdhcCBjb2x1bW4gbGF5b3V0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGdhcENvbHVtbkxheW91dCh2YWx1ZTogQ29sdW1uTGF5b3V0IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dCA9IG5vcm1hbGl6ZUNvbHVtbkxheW91dCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dENsYXNzID0gZ2VuZXJhdGVDb2x1bW5DbGFzcyh0aGlzLl9nYXBDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9nYXBDb2x1bW5MYXlvdXQkLm5leHQodGhpcy5fZ2FwQ29sdW1uTGF5b3V0KTtcbiAgICB9XG5cbiAgICBnZXQgZ2FwQ29sdW1uTGF5b3V0KCk6IENvbHVtbkxheW91dCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nYXBDb2x1bW5MYXlvdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNsYXRpb25zIHRlbXBsYXRlIHJlZmVyZW5jZS5cbiAgICAgKiBUaGlzIGlzIGluIG1vc3Qgb2YgdGhlIGNhc2VzIHNldCBmcm9tIHBhcmVudCBjb250YWluZXIgKGZvcm0tZ3JvdXApXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpMThTdHJpbmdzOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFNldCB3aGVuIGZvcm0gZmllbGQgaXMgYSBtYW5kYXRvcnkgb25lLiAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaWYgZmllbGQgaXMgZWRpdGFibGVcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBzZXQgZWRpdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2VkaXRhYmxlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VkaXRhYmxlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRyb2xQcm9wZXJ0aWVzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdGFibGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9ybSBmaWVsZCBjdXN0b20gd2lkdGggaW4gY29sdW1ucyBtdXN0IGJlIGJldHdlZW4gMSAtIDEyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY29sdW1ucyh2YWx1ZTogQ29sdW1uKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMgPSA8Q29sdW1uPmNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgY29sdW1ucygpOiBDb2x1bW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBtYXJrcyBmaWVsZCBhcyBkaXNhYmxlZC4gdXNlZCBpbiByZWFjdGl2ZSBmb3JtIGFwcHJvYWNoLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGxhYmVsIHRleHQgc2hvdWxkIGJlIGFwcGVuZGVkIHdpdGggY29sb24uICovXG4gICAgQElucHV0KClcbiAgICBjb2xvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRm9ybSBHcm91cCBDb250YWluZXIgdG8gYmluZCB0aGUgRm9ybS1GaWVsZCB0by5cbiAgICAgKiBUaGlzIHdpbGwgb3ZlcnJpZGUgZGVmYXVsdCB2YWx1ZSBpbmplY3RlZCBieSBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9ybUdyb3VwQ29udGFpbmVyOiBGb3JtR3JvdXBDb250YWluZXI7XG5cbiAgICAvKiogRW1pdHMgd2hlbmV2ZXIgZm9ybUZpZWxkQ29udHJvbCdzIHN0YXRlIGNoYW5nZXMgKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuZXZlciBjb2x1bW4gbGF5b3V0IGlzIGNoYW5nZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBvbkNvbHVtbkNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZvcm0gZmllbGQgdGVtcGxhdGUgcmVmZXJlbmNlXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgncmVuZGVyZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHJlbmRlcmVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKEZvcm1GaWVsZENvbnRyb2xFeHRyYXNDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGZvcm1GaWVsZEV4dHJhcz86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdsYWJlbENvbCcpIGxhYmVsQ29sPzogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoSW5wdXRNZXNzYWdlR3JvdXBXaXRoVGVtcGxhdGUsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGlucHV0TWVzc2FnZUdyb3VwOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnaW5uZXJFcnJvclJlbmRlcmVycycpXG4gICAgaW5uZXJFcnJvclJlbmRlcmVyczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihGb3JtRmllbGRFcnJvckRpcmVjdGl2ZSlcbiAgICBwcml2YXRlIF9lcnJvckRpcmVjdGl2ZVF1ZXJ5OiBRdWVyeUxpc3Q8Rm9ybUVycm9yPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbihJbnB1dE1lc3NhZ2VHcm91cFdpdGhUZW1wbGF0ZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dE1lc3NhZ2VHcm91cENtcDogUXVlcnlMaXN0PElucHV0TWVzc2FnZUdyb3VwV2l0aFRlbXBsYXRlPjtcblxuICAgIC8qKiBDb21iaW5lZCBFcnJvciBkaXJlY3RpdmVzIGZyb20gZmllbGQgaXRzZWxmIGFuZCBwYXJlbnQgZm9ybSBjb250YWluZXIuICovXG4gICAgZ2V0IGVycm9yRGlyZWN0aXZlcygpOiBGb3JtRXJyb3JbXSB7XG4gICAgICAgIHJldHVybiB1bmlxQnkoWy4uLnRoaXMuX2Vycm9yRGlyZWN0aXZlcywgLi4udGhpcy5fZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzXSwgJ2Vycm9yJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpc0hvcml6b250YWwkOiBTaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD47XG5cbiAgICAvKipcbiAgICAgKiBDaGlsZCBGb3JtRmllbGRDb250cm9sXG4gICAgICovXG4gICAgY29udHJvbDogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sIHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2xhYmVsQ29sdW1uTGF5b3V0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2ZpZWxkQ29sdW1uTGF5b3V0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dhcENvbHVtbkxheW91dENsYXNzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBoaW50IGFuZCBoaW50IHBsYWNlbWVudCBjb2VyY2VkIHRvIHRoZSBGaWVsZEhpbnRPcHRpb25zXG4gICAgICovXG4gICAgaGludE9wdGlvbnM6IEZpZWxkSGludE9wdGlvbnMgPSBkZWZhdWx0Rm9ybUZpZWxkSGludE9wdGlvbnMgYXMgdW5rbm93biBhcyBGaWVsZEhpbnRPcHRpb25zO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZXJyb3JEaXJlY3RpdmVzOiBGb3JtRXJyb3JbXSA9IFtdO1xuXG4gICAgLyoqIEdyb3VwZWQgZXJyb3JzLiAqL1xuICAgIGdyb3VwZWRFcnJvcnM6IEZvcm1GaWVsZEVycm9yRGlyZWN0aXZlQ29udGV4dFtdID0gW107XG5cbiAgICAvKiogRXZlbnQgZW1pdGVkIHdoZW4gZXJyb3JzIG9iamVjdCBiZWluZyBjaGFuZ2VkLiAqL1xuICAgIGVycm9yc0NoYW5nZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9wdGlvbmFsIEZvcm1Db250cm9sXG4gICAgICovXG4gICAgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2dyb3VwSG9zdCgpOiBGb3JtR3JvdXBDb250YWluZXIgfCBGb3JtRmllbGRHcm91cCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1GaWVsZEdyb3VwID8gdGhpcy5mb3JtRmllbGRHcm91cCA6IHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdpbGwgYmUgdXBkYXRlZCBkdXJpbmcgb25DaGFuZ2VzIGFuZCByZXNpemUsIHJlc3VsdGluZyBjb3JyZWN0IHBsYWNlbWVudCBvZiB0aGVcbiAgICAgKiBoaW50IHJlc3BlY3RpbmcgcGFzc2VkIGNvbmZpZ3MgYW5kIGdpdmVuIGJyZWFrcG9pbnQgb2Ygc2NyZWVuLlxuICAgICAqL1xuICAgIGhpbnRUYXJnZXQ/OiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfY29sdW1uczogQ29sdW1uID0gNjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9lZGl0YWJsZSA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gY29sdW1uIG51bWJlciBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcyAqL1xuICAgIHByaXZhdGUgX3hsQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xnQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21kQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NDb2x1bW5OdW1iZXIgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2x1bW5MYXlvdXQ6IENvbHVtbkxheW91dDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWc6IFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9maWVsZENvbHVtbkxheW91dDogQ29sdW1uTGF5b3V0O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2FwQ29sdW1uTGF5b3V0OiBDb2x1bW5MYXlvdXQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlczogRm9ybUVycm9yW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Vycm9yRGlyZWN0aXZlc0NkcjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gd2hldGhlciBsYWJlbCBhbmQgY29udHJvbCBhcmUgdmVydGljYWxseSBhbGlnbmVkICovXG4gICAgcHJpdmF0ZSBnZXQgX2lzSG9yaXpvbnRhbEFsaWdubWVudCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0TWVzc2FnZUdyb3VwIHx8ICF0aGlzLmxhYmVsQ29sKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXRNZXNzYWdlR3JvdXBZID0gdGhpcy5pbnB1dE1lc3NhZ2VHcm91cC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnk7XG4gICAgICAgIGNvbnN0IGxhYmVsQ29sUmVjdCA9IHRoaXMubGFiZWxDb2wubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgbGFiZWxDb2xCb3R0b21ZID0gbGFiZWxDb2xSZWN0LnkgKyBsYWJlbENvbFJlY3QuaGVpZ2h0O1xuICAgICAgICByZXR1cm4gbGFiZWxDb2xCb3R0b21ZID4gaW5wdXRNZXNzYWdlR3JvdXBZO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTdW0gb2YgZXh0cmEgaGVpZ2h0cyBpbnNpZGUgZm9ybSBjb250cm9sIGFuZCBmb3JtRmllbGRFeHRyYXMuXG4gICAgICogTGFiZWwgd2lsbCBiZSBzaGlmdGVkIGJ5IHRoaXMgbnVtYmVyIGluIG9yZGVyIHRvIGJlIHByb3Blcmx5IGFsaWduZWQgd2l0aCB0aGUgY29udHJvbFxuICAgICAqL1xuICAgIGdldCBfY29udHJvbEV4dHJhc0hlaWdodFB4KCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5ub0xhYmVsTGF5b3V0IHx8ICF0aGlzLl9pc0hvcml6b250YWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICAgIC8vIHByb2NlZWQgb25seSBpZiAxLiB0aGVyZSdzIGEgbGFiZWw7IDIuIGNvbnRyb2wgaGFzIHZlcnRpY2FsIGFsaWdubWVudFxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0aGlzLmZvcm1GaWVsZEV4dHJhcz8ubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgPz8gMCkgKyAodGhpcy5jb250cm9sPy5leHRyYUNvbnRlbnRIZWlnaHRQeCA/PyAwKSB8fCBudWxsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYWJlbENvbHVtbkxheW91dCQ6IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5MYXlvdXQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmllbGRDb2x1bW5MYXlvdXQkOiBCZWhhdmlvclN1YmplY3Q8Q29sdW1uTGF5b3V0PjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dhcENvbHVtbkxheW91dCQ6IEJlaGF2aW9yU3ViamVjdDxDb2x1bW5MYXlvdXQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2JyZWFrUG9pbnRPYnNlcnZlcjogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JtRmllbGRMYXlvdXRTZXJ2aWNlOiBGb3JtRmllbGRMYXlvdXRTZXJ2aWNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEhpbnRPcHRpb25zOiBGaWVsZEhpbnRPcHRpb25zO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBmb3JtR3JvdXBDb250YWluZXI6IEZvcm1Hcm91cENvbnRhaW5lcixcbiAgICAgICAgQE9wdGlvbmFsKCkgcmVhZG9ubHkgZm9ybUZpZWxkR3JvdXA6IEZvcm1GaWVsZEdyb3VwLFxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBASW5qZWN0KFJFU1BPTlNJVkVfQlJFQUtQT0lOVFNfQ09ORklHKVxuICAgICAgICByZWFkb25seSBfZGVmYXVsdFJlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnOiBSZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZyxcbiAgICAgICAgcmVhZG9ubHkgX3Jlc3BvbnNpdmVCcmVha3BvaW50c1NlcnZpY2U6IFJlc3BvbnNpdmVCcmVha3BvaW50c1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRkRQX0ZPUk1fRklFTERfSElOVF9PUFRJT05TX0RFRkFVTFQpIF9wcm92aWRlZEhpbnRPcHRpb25zOiBGaWVsZEhpbnRPcHRpb25zLFxuICAgICAgICBASW5qZWN0KEZEUF9GT1JNX0ZJRUxEX0hJTlRfTEFZT1VUX0NPTkZJRykgcHJpdmF0ZSBfaGludExheW91dENvbmZpZzogSGludExheW91dENvbmZpZyxcbiAgICAgICAgQFNlbGYoKSBfc2VsZkZvcm1GaWVsZExheW91dFNlcnZpY2U6IEZvcm1GaWVsZExheW91dFNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIF9wYXJlbnRGb3JtRmllbGRMYXlvdXRTZXJ2aWNlOiBGb3JtRmllbGRMYXlvdXRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRIaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRGb3JtRmllbGRIaW50T3B0aW9ucyxcbiAgICAgICAgICAgIC4uLl9wcm92aWRlZEhpbnRPcHRpb25zXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2Zvcm1GaWVsZExheW91dFNlcnZpY2UgPSBfcGFyZW50Rm9ybUZpZWxkTGF5b3V0U2VydmljZSB8fCBfc2VsZkZvcm1GaWVsZExheW91dFNlcnZpY2U7XG4gICAgICAgIHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5fbGFiZWxDb2x1bW5MYXlvdXQpO1xuICAgICAgICB0aGlzLl9maWVsZENvbHVtbkxheW91dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0KTtcbiAgICAgICAgdGhpcy5fZ2FwQ29sdW1uTGF5b3V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5fZ2FwQ29sdW1uTGF5b3V0KTtcbiAgICAgICAgLy8gZm9ybUdyb3VwQ29udGFpbmVyIGNhbiBiZSBpbmplY3RlZCBvbmx5IGlmIGN1cnJlbnQgZm9ybS1maWVsZCBpcyBsb2NhdGVkXG4gICAgICAgIC8vIGluc2lnaHQgZm9ybUdyb3VwQ29udGFpbmVyIGNvbnRlbnQuXG4gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlIHRoZSBmb3JtR3JvdXBDb250YWluZXJcbiAgICAgICAgLy8gd2lsbCBiZSB1bmRlZmluZWQgKGtub3duIGFuZ3VsYXIgaXNzdWUpLFxuICAgICAgICAvLyBpbiBzdWNoIGNhc2UgZm9ybUdyb3VwQ29udGFpbmVyIGNhbiBiZSBwb2ludGVkIGV4cGxpY2l0bHkgdXNpbmdcbiAgICAgICAgLy8gY29tcG9uZW50IGlucHV0IGFubm90YXRpb25cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBDb250YWluZXIgPSBmb3JtR3JvdXBDb250YWluZXI7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNpdmVCcmVha1BvaW50Q29uZmlnID0gX2RlZmF1bHRSZXNwb25zaXZlQnJlYWtQb2ludENvbmZpZyB8fCBuZXcgUmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWcoKTtcbiAgICAgICAgdGhpcy5fYnJlYWtQb2ludE9ic2VydmVyID0gdGhpcy5fcmVzcG9uc2l2ZUJyZWFrcG9pbnRzU2VydmljZS5vYnNlcnZlQnJlYWtwb2ludEJ5Q29uZmlnKFxuICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2l2ZUJyZWFrUG9pbnRDb25maWdcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmlzSG9yaXpvbnRhbCQgPSB0b1NpZ25hbChcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsQ29sdW1uTGF5b3V0JC5waXBlKGZpbHRlcihCb29sZWFuKSwgbWFwKG5vcm1hbGl6ZUNvbHVtbkxheW91dCkpLFxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkQ29sdW1uTGF5b3V0JC5waXBlKGZpbHRlcihCb29sZWFuKSwgbWFwKG5vcm1hbGl6ZUNvbHVtbkxheW91dCkpLFxuICAgICAgICAgICAgICAgIHRoaXMuX2dhcENvbHVtbkxheW91dCQucGlwZShtYXAoKGcpID0+IG5vcm1hbGl6ZUNvbHVtbkxheW91dChnIHx8IHsgUzogMCB9KSkpXG4gICAgICAgICAgICBdKS5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoW2xhYmVsLCBmaWVsZCwgZ2FwXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnJlYWtQb2ludE9ic2VydmVyLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJyZWFrcG9pbnROYW1lKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFticmVha3BvaW50TmFtZV0gKyBmaWVsZFticmVha3BvaW50TmFtZV0gKyBnYXBbYnJlYWtwb2ludE5hbWVdIDw9IDEyXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBpbml0aWFsIHZhbHVlcyBmb3IgbGFiZWwsIGZpZWxkIGFuZCBnYXAgY29sdW1uc1xuICAgICAqL1xuICAgIHNldERlZmF1bHRDb2x1bW5MYXlvdXQoKTogdm9pZCB7XG4gICAgICAgIC8vIElmIGxheW91dCBhbHJlYWR5IGRlZmluZWQsIG5vIG5lZWQgdG8gc2V0IGRlZmF1bHQgb25lLlxuICAgICAgICBpZiAodGhpcy5sYWJlbENvbHVtbkxheW91dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdGVuVG9JbmxpbmVIZWxwUGxhY2VSZXF1aXJlbWVudENoYW5nZXMoKCkgPT4gKHRoaXMubGFiZWxDb2x1bW5MYXlvdXQgPyB0aGlzIDogdGhpcy5fZ3JvdXBIb3N0KSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBsaXN0ZW5Ub0lubGluZUhlbHBQbGFjZVJlcXVpcmVtZW50Q2hhbmdlcyhnZXRTb3VyY2U6ICgpID0+IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX25lZWRzSW5saW5lSGVscFBsYWNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9uZWVkc0lubGluZUhlbHBQbGFjZVN1YnNjcmlwdGlvbiA9IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXRMYXlvdXRzID0gKHNvdXJjZTogYW55KTogdm9pZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsQ29sdW1uTGF5b3V0ID0gc291cmNlLmxhYmVsQ29sdW1uTGF5b3V0O1xuICAgICAgICAgICAgdGhpcy5maWVsZENvbHVtbkxheW91dCA9IHNvdXJjZS5maWVsZENvbHVtbkxheW91dDtcbiAgICAgICAgICAgIHRoaXMuZ2FwQ29sdW1uTGF5b3V0ID0gc291cmNlLmdhcENvbHVtbkxheW91dDtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fbmVlZHNJbmxpbmVIZWxwUGxhY2VTdWJzY3JpcHRpb24gPSB0aGlzLl9mb3JtRmllbGRMYXlvdXRTZXJ2aWNlLm5lZWRzSW5saW5lSGVscFBsYWNlXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5fZm9ybUZpZWxkTGF5b3V0U2VydmljZS5nZXRGaXhlZExheW91dHMoZ2V0U291cmNlKCkpKSxcbiAgICAgICAgICAgICAgICB0YXAoc2V0TGF5b3V0cyksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gcHJvdmlkZXMgY2FwYWJpbGl0eSB0byBtYWtlIGEgZmllbGQgZGlzYWJsZWQuIHVzZWZ1bCBpbiByZWFjdGl2ZSBmb3JtIGFwcHJvYWNoLlxuICAgICAgICB0aGlzLmZvcm1Db250cm9sID1cbiAgICAgICAgICAgICh0aGlzLmZvcm1Hcm91cENvbnRhaW5lcj8uZm9ybUdyb3VwPy5nZXQodGhpcy5pZCkgYXMgRm9ybUNvbnRyb2wpID8/XG4gICAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogbnVsbCwgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucyAmJiAodGhpcy5jb2x1bW5zIDwgMSB8fCB0aGlzLmNvbHVtbnMgPiAxMikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW2NvbHVtbnNdIGFjY2VwdHMgbnVtYmVycyBiZXR3ZWVuIDEgLSAxMicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fYnJlYWtQb2ludE9ic2VydmVyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGJyZWFrUG9pbnROYW1lKSA9PiB0aGlzLl91cGRhdGVMYXlvdXQoYnJlYWtQb2ludE5hbWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FkZFRvRm9ybUdyb3VwKCk7XG5cbiAgICAgICAgdGhpcy5saXN0ZW5Ub0lubGluZUhlbHBQbGFjZVJlcXVpcmVtZW50Q2hhbmdlcygoKSA9PiB0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaGludCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSGludE9wdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1GaWVsZExheW91dFNlcnZpY2Uuc2V0TmVlZHNJbmxpbmVIZWxwKFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgKHRoaXMuaGludE9wdGlvbnMudGFyZ2V0ID09PSAnaW5wdXQnIHx8IHRoaXMuaGludE9wdGlvbnMudGFyZ2V0ID09PSAnYXV0bycpICYmICEhdGhpcy5oaW50XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmhpbnQgJiYgY2hhbmdlcy5oaW50LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9icmVha1BvaW50T2JzZXJ2ZXJcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFwKChzaXplTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGludE9wdGlvbnMudGFyZ2V0ID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpbnRUYXJnZXQgPSB0aGlzLl9oaW50TGF5b3V0Q29uZmlnLmhpbnRPbklucHV0QnJlYWtwb2ludHMuaW5jbHVkZXMoc2l6ZU5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2lucHV0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdsYWJlbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGludFRhcmdldCA9IHRoaXMuaGludE9wdGlvbnMudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXNzaWduRXJyb3JEaXJlY3RpdmVzKCk7XG5cbiAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVRdWVyeS5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXNzaWduRXJyb3JEaXJlY3RpdmVzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl91cGRhdGVDb250cm9sUHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLl92YWxpZGF0ZUVycm9ySGFuZGxlcigpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0Zvcm1NZXNzYWdlKCk7XG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtRmllbGRMYXlvdXRTZXJ2aWNlLnJlbW92ZUVudHJ5KHRoaXMpO1xuICAgICAgICB0aGlzLl9yZW1vdmVGcm9tRm9ybUdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlc0Nkcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwRXJyb3JEaXJlY3RpdmVzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdGFibGUgJiYgISF0aGlzLmNvbnRyb2w/LmNvbnRyb2xJbnZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIHVuZGVybHlpbmcgZm9ybSBjb250cm9sXG4gICAgICogQHBhcmFtIGZvcm1GaWVsZENvbnRyb2xcbiAgICAgKi9cbiAgICByZWdpc3RlckZvcm1GaWVsZENvbnRyb2woZm9ybUZpZWxkQ29udHJvbDogRm9ybUZpZWxkQ29udHJvbCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignRm9ybSBmaWVsZCBjYW4gY29udGFpbiBvbmx5IG9uZSBGb3JtRmllbGRDb250cm9sJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRyb2wgPSBmb3JtRmllbGRDb250cm9sIGFzIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbDtcblxuICAgICAgICBmb3JtRmllbGRDb250cm9sLnN0YXRlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29udHJvbFByb3BlcnRpZXMoKTtcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY2FsbCBleHBsaWNpdGx5IGRldGVjdENoYW5nZXMoKSBpbnN0ZWFkIG9mIG1hcmtGb3JDaGVjayBiZWZvcmUgdGhlXG4gICAgICAgICAgICAvLyBtb2RpZmllZCB2YWxpZGF0aW9uIHN0YXRlIG9mIHRoZSBjb250cm9sIHBhc3NlcyBvdmVyIGNoZWNrZWQgcGhhc2VcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCgnc3RhdGVDaGFuZ2VzJyk7XG4gICAgICAgICAgICB0aGlzLmdyb3VwRXJyb3JzKCk7XG4gICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlZnJlc2ggVUkgd2hlbiB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIGlmIChmb3JtRmllbGRDb250cm9sPy5uZ0NvbnRyb2w/LnZhbHVlQ2hhbmdlcykge1xuICAgICAgICAgICAgZm9ybUZpZWxkQ29udHJvbC5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCgndmFsdWVDaGFuZ2VzJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cEVycm9ycygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybUZpZWxkQ29udHJvbD8ubmdDb250cm9sPy5jb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUZpZWxkQ29udHJvbC5uZ0NvbnRyb2wuY29udHJvbDtcblxuICAgICAgICAgICAgY29uc3QgaGFzUmVxdWlyZWRWYWxpZGF0b3IgPVxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdG9ycy5pbmNsdWRlcyhWYWxpZGF0b3JzLnJlcXVpcmVkKSB8fCB0aGlzLnZhbGlkYXRvcnMuaW5jbHVkZXMoVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhaGFzUmVxdWlyZWRWYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGhhc1JlcXVpcmVkVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIGZvcm0gY29udHJvbCBpcyBkaXNhYmxlZCwgaW4gcmVhY3RpdmUgZm9ybSBhcHByb2FjaFxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGVyZSBpcyBhIGNhc2Ugd2hlbiBhIFwiZm9ybS1ncm91cFwiIGluaXRpYWwgc3RhdGUgaXMgVkFMSUQsXG4gICAgICAgICAgICAgKiBhbmQgb24gdGhlIG5leHQgbG9vcCBhIGNoaWxkIGZvcm0tZmlsZWQgZXh0ZW5kcyBpdCBhbmQgbWFrZVxuICAgICAgICAgICAgICogdGhlIGZvcm0tZ3JvdXAgSU5WQUxJRC5cbiAgICAgICAgICAgICAqIEluIHN1Y2ggY2FzZSB3ZSBnZXQgdGhlIGVycm9yXG4gICAgICAgICAgICAgKiBcIkV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3IuIFByZXZpb3VzIHZhbHVlIGlzIG5nLXZhbGlkLCBjdXJyZW50IHZhbHVlIGlzIG5nLWludmFsaWRcIi5cbiAgICAgICAgICAgICAqIFRvIGZpeCBpdCB3ZSBoYXZlIHRvIHBvc3Rwb25lIGFkZGluZyBmb3JtLWZpZWxkIHZhbGlkYXRvcnNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UodGhpcy52YWxpZGF0b3JzKSk7XG4gICAgICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLl9hZGRDb250cm9sVG9Gb3JtR3JvdXAoZm9ybUZpZWxkQ29udHJvbD8ubmdDb250cm9sPy5jb250cm9sKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVucmVnaXN0ZXIgdW5kZXJseWluZyBmb3JtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gZm9ybUZpZWxkQ29udHJvbFxuICAgICAqL1xuICAgIHVucmVnaXN0ZXJGb3JtRmllbGRDb250cm9sKGZvcm1GaWVsZENvbnRyb2w6IEZvcm1GaWVsZENvbnRyb2wpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZENvbnRyb2wgIT09IHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250cm9sID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9yZW1vdmVDb250cm9sRnJvbUZvcm1Hcm91cCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdyb3Vwc1xuICAgICAqL1xuICAgIGdyb3VwRXJyb3JzKCk6IHZvaWQge1xuICAgICAgICAvLyBRdWV1ZSB0YXNrIGJlY2F1c2UgZmlyaW5nIGl0IHJpZ2h0IGF3YXkgbWF5IGNhdXNlIGVycm9yIHdpdGggc2hvd2luZyBlbXB0eSBtZXNzYWdlLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBlZEVycm9ycyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5jb250cm9sPy5uZ0NvbnRyb2w/LmVycm9ycztcbiAgICAgICAgICAgIGlmICghZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVycm9yRGlyZWN0aXZlcy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yc1tkaXJlY3RpdmUuZXJyb3JdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwZWRFcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yc1tkaXJlY3RpdmUuZXJyb3JdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzQ2hhbmdlJC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBwcmlvcml0aXplZCBjb250cm9sIHN0YXRlIGJhc2VkIG9uIHRoZSBlcnJvciB0eXBlcyBpdCBoYXMuXG4gICAgICovXG4gICAgZ2V0UHJpb3JpdHlTdGF0ZSgpOiBGb3JtU3RhdGVzIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBlZEVycm9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc0Vycm9ycygpID8gJ2Vycm9yJyA6ICdkZWZhdWx0JztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRGb3JtU3RhdGUodGhpcy5ncm91cGVkRXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLmRpcmVjdGl2ZS50eXBlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBlcnJvciBkaXJlY3RpdmVzLlxuICAgICAqL1xuICAgIHNldEVycm9yRGlyZWN0aXZlcyhkaXJlY3RpdmVzOiBRdWVyeUxpc3Q8Rm9ybUVycm9yPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgaWYgKCFkaXJlY3RpdmVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXMgPSBkaXJlY3RpdmVzLnRvQXJyYXkoKTtcblxuICAgICAgICB0aGlzLl9mb3JtR3JvdXBFcnJvckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24gPSBkaXJlY3RpdmVzLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1Hcm91cEVycm9yRGlyZWN0aXZlcyA9IGRpcmVjdGl2ZXMudG9BcnJheSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIGNvbnRlbnQgb2YgdGhlIHByb3ZpZGVkIGhpbnQgaXMgYSBzdHJpbmcuXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGlzU3RyaW5nSGludChoaW50T3B0aW9uczogSGludENvbnRlbnQpOiBoaW50T3B0aW9ucyBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGhpbnRPcHRpb25zID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdGVucyB0byBmb3JtIG1lc3NhZ2UgY29tcG9uZW50IGNoYW5nZXMgYW5kIHBhc3NlcyBpdHMgaW5zdGFuY2UgdG8gdGhlIGZvcm0gY29udHJvbCBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Gb3JtTWVzc2FnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5wdXRNZXNzYWdlR3JvdXBDbXAuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLl9pbnB1dE1lc3NhZ2VHcm91cENtcC5maXJzdCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbCEuZm9ybU1lc3NhZ2UgPSBjb21wb25lbnQ7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbGlkYXRlRXJyb3JIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9lZGl0YWJsZSAmJlxuICAgICAgICAgICAgdGhpcy5jb250cm9sICYmXG4gICAgICAgICAgICB0aGlzLl9oYXNWYWxpZGF0b3JzKCkgJiZcbiAgICAgICAgICAgICF0aGlzLmkxOFN0cmluZ3MgJiZcbiAgICAgICAgICAgIHRoaXMuZXJyb3JEaXJlY3RpdmVzLmxlbmd0aCA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsaWRhdGlvbiBzdHJpbmdzIGFyZSByZXF1aXJlZCBmb3IgdGhlIGFueSBwcm92aWRlZCB2YWxpZGF0aW9ucy4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFzVmFsaWRhdG9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdG9ycyAmJiB0aGlzLnZhbGlkYXRvcnMubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQWRkIEZvcm1GaWVsZCB0byBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9hZGRUb0Zvcm1Hcm91cCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cENvbnRhaW5lciB8fCB0aGlzLmZvcm1GaWVsZEdyb3VwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcm1Hcm91cENvbnRhaW5lci5hZGRGb3JtRmllbGQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlbW92ZSBGb3JtRmllbGQgZnJvbSBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZW1vdmVGcm9tRm9ybUdyb3VwKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtR3JvdXBDb250YWluZXIucmVtb3ZlRm9ybUZpZWxkKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBBZGQgRm9ybUNvbnRyb2wgZnJvbSBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9hZGRDb250cm9sVG9Gb3JtR3JvdXAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXBDb250YWluZXIgfHwgISF0aGlzLmZvcm1GaWVsZEdyb3VwPy5mb3JtTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyLmFkZEZvcm1Db250cm9sKHRoaXMuaWQsIGNvbnRyb2wpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZW1vdmUgRm9ybUNvbnRyb2wgZnJvbSBGb3JtR3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZW1vdmVDb250cm9sRnJvbUZvcm1Hcm91cCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cENvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQ29udGFpbmVyLnJlbW92ZUZvcm1Db250cm9sKHRoaXMuaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBOZWVkIHRvIGJlIGFibGUgdG8gc2V0IHRoZXNlIHByb3BlcnRpZXMgb24gZXZlcnkgbGV2ZWwuXG4gICAgICogIC0gR2xvYmFsIEZvcm1Hcm91cCBMZXZlbCBhcyB3ZWxsIGVhY2ggZmllbGRcbiAgICAgKlxuICAgICAqICBUb2RvOiB1c2UgbW9yZSBlbGVnYW50IHdheSB0byBzZXQgdGhlc2UgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF91cGRhdGVDb250cm9sUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCAmJiB0aGlzLl9lZGl0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmlkID0gdGhpcy5pZDtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5yZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0TGF5b3V0KCk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUNvbHVtbkxheW91dCh0aGlzLmNvbHVtbkxheW91dCwgMSk7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkxheW91dCA9IG5vcm1hbGl6ZWQ7XG4gICAgICAgICAgICB0aGlzLl9zQ29sdW1uTnVtYmVyID0gbm9ybWFsaXplZFsnUyddO1xuICAgICAgICAgICAgdGhpcy5fbWRDb2x1bW5OdW1iZXIgPSBub3JtYWxpemVkWydNJ107XG4gICAgICAgICAgICB0aGlzLl9sZ0NvbHVtbk51bWJlciA9IG5vcm1hbGl6ZWRbJ0wnXTtcbiAgICAgICAgICAgIHRoaXMuX3hsQ29sdW1uTnVtYmVyID0gbm9ybWFsaXplZFsnWEwnXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVMYXlvdXQoY3VycmVudEJyZWFraW5nUG9pbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29sdW1uTGF5b3V0RW5hYmxlZCkge1xuICAgICAgICAgICAgc3dpdGNoIChjdXJyZW50QnJlYWtpbmdQb2ludE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl9zQ29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl9tZENvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uID0gdGhpcy5fbGdDb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1hMJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl94bENvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSB0aGlzLl94bENvbHVtbk51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtaXQgY29sdW1uIGNoYW5nZSwgc28gZm9ybS1ncm91cCBrbm93cyBpdCBhbmQgcmUtYXJyYW5nZXMgdGhlIGZpZWxkc1xuICAgICAgICB0aGlzLm9uQ29sdW1uQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF91cGRhdGVIaW50T3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgLy8gcGxhY2VtZW50IGlzIGhlcmUgc2V0IHVwIGJlY2F1c2UgaGludFBsYWNlbWVudCBpcyBkZXByZWNhdGVkXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oaW50ID09PSAnc3RyaW5nJyB8fCB0aGlzLmhpbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgdGhpcy5oaW50T3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0SGludE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5oaW50XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmhpbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aGlzLmhpbnRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHRIaW50T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmhpbnRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Fzc2lnbkVycm9yRGlyZWN0aXZlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVzQ2RyPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9lcnJvckRpcmVjdGl2ZXMgPSB0aGlzLl9lcnJvckRpcmVjdGl2ZVF1ZXJ5LnRvQXJyYXkoKTtcbiAgICAgICAgdGhpcy5fZXJyb3JEaXJlY3RpdmVzQ2RyID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlcy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yRGlyZWN0aXZlc0Nkci5hZGQoXG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlLmRldGVjdENoYW5nZXMkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBFcnJvcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI3JlbmRlcmVyPlxuICAgIDxkaXYgW2hvcml6b250YWxdPVwidHJ1ZVwiIGZkLWZvcm0taXRlbSBjbGFzcz1cImZkLXJvd1wiPlxuICAgICAgICBAaWYgKCFub0xhYmVsTGF5b3V0KSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jb2xcIlxuICAgICAgICAgICAgICAgICNsYWJlbENvbFxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJfbGFiZWxDb2x1bW5MYXlvdXRDbGFzc1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbi1ib3R0b20ucHhdPVwiX2NvbnRyb2xFeHRyYXNIZWlnaHRQeFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndpdGhGb3JtTWVzc2FnZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJnYXBUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCIgW2lkXT1cIidmZHAtZm9ybS1oaW50LScgKyBpZFwiPlxuICAgICAgICBAaWYgKGlzU3RyaW5nSGludChoaW50T3B0aW9ucy5jb250ZW50KSkge1xuICAgICAgICAgICAge3sgaGludE9wdGlvbnMuY29udGVudCB9fVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KGhpbnRPcHRpb25zLmNvbnRlbnQpXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3dpdGhGb3JtTWVzc2FnZT5cbiAgICA8ZmRwLWlucHV0LW1lc3NhZ2UtZ3JvdXBcbiAgICAgICAgY2xhc3M9XCJmZC1jb2xcIlxuICAgICAgICBbY2xhc3NdPVwiX2ZpZWxkQ29sdW1uTGF5b3V0Q2xhc3NcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiJ2ZkcC1mb3JtLWxhYmVsLScgKyBpZFwiXG4gICAgPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3RyaWdnZXJJdGVtPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIEBpZiAoaGFzRXJyb3JzKCkgJiYgZ3JvdXBlZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBAZm9yIChlcnJvciBvZiBncm91cGVkRXJyb3JzOyB0cmFjayBlcnJvcikge1xuICAgICAgICAgICAgICAgIDxmZC1mb3JtLW1lc3NhZ2UgW3R5cGVdPVwiZXJyb3IuZGlyZWN0aXZlLnR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZXJyb3IuZGlyZWN0aXZlLl9oZWFkaW5nVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3IuZGlyZWN0aXZlLl9oZWFkaW5nVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGVycm9yLmVycm9yLCBsYWJlbDogbGFiZWwgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVycm9yLmRpcmVjdGl2ZS5faGVhZGluZ1RlbXBsYXRlUmVmICYmIGVycm9yLmRpcmVjdGl2ZS5fZGVzY3JpcHRpb25UZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlcnJvci5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXJyb3IuZGlyZWN0aXZlLl9kZXNjcmlwdGlvblRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBlcnJvci5lcnJvciwgbGFiZWw6IGxhYmVsIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoZ3JvdXBlZEVycm9ycy5sZW5ndGggPT09IDAgJiYgaGFzRXJyb3JzKCkgJiYgaTE4U3RyaW5ncykge1xuICAgICAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSB0eXBlPVwiZXJyb3JcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaTE4U3RyaW5nc1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY29udHJvbD8ubmdDb250cm9sPy5lcnJvcnMgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICAgICAgfVxuICAgIDwvZmRwLWlucHV0LW1lc3NhZ2UtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lubmVyRXJyb3JSZW5kZXJlcnM+XG4gICAgQGlmIChoYXNFcnJvcnMoKSAmJiBncm91cGVkRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgQGZvciAoZXJyb3Igb2YgZ3JvdXBlZEVycm9yczsgdHJhY2sgZXJyb3IpIHtcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgQGlmIChlcnJvci5kaXJlY3RpdmUuX2hlYWRpbmdUZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVycm9yLmRpcmVjdGl2ZS5faGVhZGluZ1RlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZXJyb3IuZXJyb3IsIGxhYmVsOiBsYWJlbCB9XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGVycm9yLmRpcmVjdGl2ZS5faGVhZGluZ1RlbXBsYXRlUmVmICYmIGVycm9yLmRpcmVjdGl2ZS5fZGVzY3JpcHRpb25UZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChlcnJvci5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJlcnJvci5kaXJlY3RpdmUuX2Rlc2NyaXB0aW9uVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBlcnJvci5lcnJvciwgbGFiZWw6IGxhYmVsIH1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAaWYgKGdyb3VwZWRFcnJvcnMubGVuZ3RoID09PSAwICYmIGhhc0Vycm9ycygpICYmIGkxOFN0cmluZ3MpIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpMThTdHJpbmdzXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY29udHJvbD8ubmdDb250cm9sPy5lcnJvcnMgfVwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XG4gICAgQGlmIChoaW50VGFyZ2V0ID09PSAnbGFiZWwnKSB7XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgW2lkXT1cIidmZHAtZm9ybS1sYWJlbC0nICsgaWRcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImVkaXRhYmxlICYmIHJlcXVpcmVkXCJcbiAgICAgICAgICAgIGZkLWZvcm0tbGFiZWxcbiAgICAgICAgICAgIFtpbmxpbmVIZWxwQ29udGVudF09XCJoaW50T3B0aW9ucy5jb250ZW50XCJcbiAgICAgICAgICAgIFtpbmxpbmVIZWxwQm9keVBsYWNlbWVudF09XCJoaW50T3B0aW9ucy5wbGFjZW1lbnQgfHwgJ3RvcCdcIlxuICAgICAgICAgICAgW2lubGluZUhlbHBQbGFjZW1lbnRdPVwiaGludE9wdGlvbnMucG9zaXRpb24gfHwgJ2FmdGVyJ1wiXG4gICAgICAgICAgICBbaW5saW5lSGVscEdseXBoXT1cImhpbnRPcHRpb25zLmdseXBoIHx8ICcnXCJcbiAgICAgICAgICAgIFtpbmxpbmVIZWxwVHJpZ2dlcnNdPVwiaGludE9wdGlvbnMudHJpZ2dlciB8fCBbXVwiXG4gICAgICAgICAgICBbYWxpZ25MYWJlbEVuZF09XCIhIWlzSG9yaXpvbnRhbCQoKVwiXG4gICAgICAgICAgICBbY29sb25dPVwiY29sb25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBbaWRdPVwiJ2ZkcC1mb3JtLWxhYmVsLWNvbnRlbnQtJyArIGlkXCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgW2lkXT1cIidmZHAtZm9ybS1sYWJlbC0nICsgaWRcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImVkaXRhYmxlICYmIHJlcXVpcmVkXCJcbiAgICAgICAgICAgIGZkLWZvcm0tbGFiZWxcbiAgICAgICAgICAgIFtjb2xvbl09XCJjb2xvblwiXG4gICAgICAgICAgICBbYWxpZ25MYWJlbEVuZF09XCIhIWlzSG9yaXpvbnRhbCQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIFtpZF09XCInZmRwLWZvcm0tbGFiZWwtY29udGVudC0nICsgaWRcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2dhcFRlbXBsYXRlPlxuICAgIEBpZiAoaGludFRhcmdldCA9PT0gJ2lucHV0JyAmJiBoaW50T3B0aW9ucy5jb250ZW50KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1jb2wgZmQtZm9ybS1maWVsZC1pbmxpbmUtaGVscC1jb250YWluZXJcIiBbY2xhc3NdPVwiX2dhcENvbHVtbkxheW91dENsYXNzXCI+XG4gICAgICAgICAgICA8c3BhbiBmZC1saW5rIFt1bmRlY29yYXRlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGZkLWljb25cbiAgICAgICAgICAgICAgICAgICAgW2ZkLWlubGluZS1oZWxwXT1cImhpbnRPcHRpb25zLmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZ2x5cGhdPVwiaGludE9wdGlvbnMuZ2x5cGhcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cImhpbnRPcHRpb25zLnBsYWNlbWVudCB8fCBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW3RyaWdnZXJzXT1cImhpbnRPcHRpb25zLnRyaWdnZXIgfHwgW11cIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2ZkLWljb24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY29sXCIgW2NsYXNzXT1cIl9nYXBDb2x1bW5MYXlvdXRDbGFzc1wiPjwvZGl2PlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -12,10 +12,10 @@ export class FormFieldErrorDescriptionDirective {
12
12
  this._formFieldErrorDirective = _formFieldErrorDirective;
13
13
  this._formFieldErrorDirective?.registerDescription(this);
14
14
  }
15
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormFieldErrorDescriptionDirective, deps: [{ token: i0.TemplateRef }, { token: FDP_FORM_ERROR_DIRECTIVE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
16
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.8", type: FormFieldErrorDescriptionDirective, isStandalone: true, selector: "[fdpFormFieldErrorDescription]", inputs: { fdpFormFieldErrorDescriptionAs: "fdpFormFieldErrorDescriptionAs" }, ngImport: i0 }); }
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormFieldErrorDescriptionDirective, deps: [{ token: i0.TemplateRef }, { token: FDP_FORM_ERROR_DIRECTIVE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
16
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.0", type: FormFieldErrorDescriptionDirective, isStandalone: true, selector: "[fdpFormFieldErrorDescription]", inputs: { fdpFormFieldErrorDescriptionAs: "fdpFormFieldErrorDescriptionAs" }, ngImport: i0 }); }
17
17
  }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormFieldErrorDescriptionDirective, decorators: [{
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormFieldErrorDescriptionDirective, decorators: [{
19
19
  type: Directive,
20
20
  args: [{
21
21
  selector: '[fdpFormFieldErrorDescription]',
@@ -12,10 +12,10 @@ export class FormFieldErrorHeadingDirective {
12
12
  this._formFieldErrorDirective = _formFieldErrorDirective;
13
13
  this._formFieldErrorDirective?.registerHeading(this);
14
14
  }
15
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormFieldErrorHeadingDirective, deps: [{ token: i0.TemplateRef }, { token: FDP_FORM_ERROR_DIRECTIVE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
16
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.8", type: FormFieldErrorHeadingDirective, isStandalone: true, selector: "[fdpFormFieldErrorHeading]", inputs: { fdpFormFieldErrorHeadingAs: "fdpFormFieldErrorHeadingAs", fdpFormFieldErrorHeadingType: "fdpFormFieldErrorHeadingType" }, ngImport: i0 }); }
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormFieldErrorHeadingDirective, deps: [{ token: i0.TemplateRef }, { token: FDP_FORM_ERROR_DIRECTIVE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
16
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.0", type: FormFieldErrorHeadingDirective, isStandalone: true, selector: "[fdpFormFieldErrorHeading]", inputs: { fdpFormFieldErrorHeadingAs: "fdpFormFieldErrorHeadingAs", fdpFormFieldErrorHeadingType: "fdpFormFieldErrorHeadingType" }, ngImport: i0 }); }
17
17
  }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormFieldErrorHeadingDirective, decorators: [{
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormFieldErrorHeadingDirective, decorators: [{
19
19
  type: Directive,
20
20
  args: [{
21
21
  selector: '[fdpFormFieldErrorHeading]',
@@ -59,15 +59,15 @@ export class FormFieldErrorDirective {
59
59
  this.detectChanges$.next();
60
60
  }, 5);
61
61
  }
62
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormFieldErrorDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
63
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.8", type: FormFieldErrorDirective, isStandalone: true, selector: "[fdpFormFieldError]", inputs: { fdpFormFieldErrorAs: "fdpFormFieldErrorAs", error: ["fdpFormFieldError", "error"], fdpFormFieldErrorType: "fdpFormFieldErrorType" }, providers: [
62
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormFieldErrorDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
63
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.0", type: FormFieldErrorDirective, isStandalone: true, selector: "[fdpFormFieldError]", inputs: { fdpFormFieldErrorAs: "fdpFormFieldErrorAs", error: ["fdpFormFieldError", "error"], fdpFormFieldErrorType: "fdpFormFieldErrorType" }, providers: [
64
64
  {
65
65
  provide: FDP_FORM_ERROR_DIRECTIVE,
66
66
  useExisting: FormFieldErrorDirective
67
67
  }
68
68
  ], ngImport: i0 }); }
69
69
  }
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormFieldErrorDirective, decorators: [{
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormFieldErrorDirective, decorators: [{
71
71
  type: Directive,
72
72
  args: [{
73
73
  selector: '[fdpFormFieldError]',
@@ -1,10 +1,10 @@
1
1
  import { ChangeDetectionStrategy, Component } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class FormFieldControlExtrasComponent {
4
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormFieldControlExtrasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: FormFieldControlExtrasComponent, isStandalone: true, selector: "fdp-form-field-extras", ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [":host{display:flex;white-space:normal}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormFieldControlExtrasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: FormFieldControlExtrasComponent, isStandalone: true, selector: "fdp-form-field-extras", ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [":host{display:flex;white-space:normal}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6
6
  }
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormFieldControlExtrasComponent, decorators: [{
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormFieldControlExtrasComponent, decorators: [{
8
8
  type: Component,
9
9
  args: [{ selector: 'fdp-form-field-extras', template: '<ng-content></ng-content>', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, styles: [":host{display:flex;white-space:normal}\n"] }]
10
10
  }] });
@@ -83,12 +83,12 @@ export class FormFieldGroupComponent {
83
83
  }
84
84
  this.formGroupContainer.removeFormFieldGroup(this);
85
85
  }
86
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormFieldGroupComponent, deps: [{ token: i1.FormGroupContainer, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
87
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: FormFieldGroupComponent, isStandalone: true, selector: "fdp-form-field-group", inputs: { label: "label", formName: "formName", formGroupContainer: "formGroupContainer", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", hintOptions: "hintOptions" }, providers: [formFieldGroupProvider, formGroupChildProvider], queries: [{ propertyName: "fields", predicate: FD_FORM_FIELD, descendants: true }], ngImport: i0, template: ` <ng-content></ng-content>`, isInline: true, styles: ["/*!\n * Fundamental Library Styles v0.33.2\n * Copyright (c) 2024 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-form-group{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin:0;padding:0}.fd-form-group:after,.fd-form-group:before{box-sizing:inherit;font-size:inherit}.fd-form-group--inline{-webkit-box-pack:start;-ms-flex-pack:start;-ms-flex-wrap:wrap;flex-direction:row;flex-wrap:wrap;justify-content:flex-start}.fd-form-group--inline,.fd-form-group__header{display:flex}.fd-form-group__header{-webkit-box-sizing:border-box;align-items:center;background-color:var(--sapGroup_TitleBackground);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.75rem;line-height:normal;margin:0;padding:0;width:100%}.fd-form-group__header:after,.fd-form-group__header:before{box-sizing:inherit;font-size:inherit}.fd-form-group__header[class*=-compact],.fd-form-group__header[class*=-condensed],[class*=-compact] .fd-form-group__header:not([class*=-cozy]),[class*=-condensed] .fd-form-group__header:not([class*=-cozy]){height:2rem}.fd-form-group__header-text{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapFontHeader6Size);font-weight:400;font-weight:700;forced-color-adjust:none;line-height:normal;margin:0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-group__header-text:after,.fd-form-group__header-text:before{box-sizing:inherit;font-size:inherit}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
86
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormFieldGroupComponent, deps: [{ token: i1.FormGroupContainer, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
87
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.0", type: FormFieldGroupComponent, isStandalone: true, selector: "fdp-form-field-group", inputs: { label: "label", formName: "formName", formGroupContainer: "formGroupContainer", labelColumnLayout: "labelColumnLayout", fieldColumnLayout: "fieldColumnLayout", gapColumnLayout: "gapColumnLayout", hintOptions: "hintOptions" }, providers: [formFieldGroupProvider, formGroupChildProvider], queries: [{ propertyName: "fields", predicate: FD_FORM_FIELD, descendants: true }], ngImport: i0, template: ` <ng-content></ng-content>`, isInline: true, styles: ["/*!\n * Fundamental Library Styles v0.34.0\n * Copyright (c) 2024 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-form-group{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin:0;padding:0}.fd-form-group:after,.fd-form-group:before{box-sizing:inherit;font-size:inherit}.fd-form-group--inline{-webkit-box-pack:start;-ms-flex-pack:start;-ms-flex-wrap:wrap;flex-direction:row;flex-wrap:wrap;justify-content:flex-start}.fd-form-group--inline,.fd-form-group__header{display:flex}.fd-form-group__header{-webkit-box-sizing:border-box;align-items:center;background-color:var(--sapGroup_TitleBackground);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.75rem;line-height:normal;margin:0;padding:0;width:100%}.fd-form-group__header:after,.fd-form-group__header:before{box-sizing:inherit;font-size:inherit}.fd-form-group__header[class*=-compact],.fd-form-group__header[class*=-condensed],[class*=-compact] .fd-form-group__header:not([class*=-cozy]),[class*=-condensed] .fd-form-group__header:not([class*=-cozy]){height:2rem}.fd-form-group__header-text{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapFontHeader6Size);font-weight:400;font-weight:700;forced-color-adjust:none;line-height:normal;margin:0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-group__header-text:after,.fd-form-group__header-text:before{box-sizing:inherit;font-size:inherit}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
88
88
  }
89
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FormFieldGroupComponent, decorators: [{
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FormFieldGroupComponent, decorators: [{
90
90
  type: Component,
91
- args: [{ selector: 'fdp-form-field-group', template: ` <ng-content></ng-content>`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [formFieldGroupProvider, formGroupChildProvider], standalone: true, styles: ["/*!\n * Fundamental Library Styles v0.33.2\n * Copyright (c) 2024 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-form-group{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin:0;padding:0}.fd-form-group:after,.fd-form-group:before{box-sizing:inherit;font-size:inherit}.fd-form-group--inline{-webkit-box-pack:start;-ms-flex-pack:start;-ms-flex-wrap:wrap;flex-direction:row;flex-wrap:wrap;justify-content:flex-start}.fd-form-group--inline,.fd-form-group__header{display:flex}.fd-form-group__header{-webkit-box-sizing:border-box;align-items:center;background-color:var(--sapGroup_TitleBackground);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.75rem;line-height:normal;margin:0;padding:0;width:100%}.fd-form-group__header:after,.fd-form-group__header:before{box-sizing:inherit;font-size:inherit}.fd-form-group__header[class*=-compact],.fd-form-group__header[class*=-condensed],[class*=-compact] .fd-form-group__header:not([class*=-cozy]),[class*=-condensed] .fd-form-group__header:not([class*=-cozy]){height:2rem}.fd-form-group__header-text{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapFontHeader6Size);font-weight:400;font-weight:700;forced-color-adjust:none;line-height:normal;margin:0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-group__header-text:after,.fd-form-group__header-text:before{box-sizing:inherit;font-size:inherit}\n"] }]
91
+ args: [{ selector: 'fdp-form-field-group', template: ` <ng-content></ng-content>`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [formFieldGroupProvider, formGroupChildProvider], standalone: true, styles: ["/*!\n * Fundamental Library Styles v0.34.0\n * Copyright (c) 2024 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-form-group{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin:0;padding:0}.fd-form-group:after,.fd-form-group:before{box-sizing:inherit;font-size:inherit}.fd-form-group--inline{-webkit-box-pack:start;-ms-flex-pack:start;-ms-flex-wrap:wrap;flex-direction:row;flex-wrap:wrap;justify-content:flex-start}.fd-form-group--inline,.fd-form-group__header{display:flex}.fd-form-group__header{-webkit-box-sizing:border-box;align-items:center;background-color:var(--sapGroup_TitleBackground);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2.75rem;line-height:normal;margin:0;padding:0;width:100%}.fd-form-group__header:after,.fd-form-group__header:before{box-sizing:inherit;font-size:inherit}.fd-form-group__header[class*=-compact],.fd-form-group__header[class*=-condensed],[class*=-compact] .fd-form-group__header:not([class*=-cozy]),[class*=-condensed] .fd-form-group__header:not([class*=-cozy]){height:2rem}.fd-form-group__header-text{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);color:var(--sapGroup_TitleTextColor);font-family:var(--sapFontFamily);font-family:var(--sapFontHeaderFamily);font-size:var(--sapFontSize);font-size:var(--sapFontHeader6Size);font-weight:400;font-weight:700;forced-color-adjust:none;line-height:normal;margin:0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.fd-form-group__header-text:after,.fd-form-group__header-text:before{box-sizing:inherit;font-size:inherit}\n"] }]
92
92
  }], ctorParameters: () => [{ type: i1.FormGroupContainer, decorators: [{
93
93
  type: Optional
94
94
  }] }], propDecorators: { label: [{