@fundamental-ngx/platform 0.48.0-rc.2 → 0.48.0-rc.21

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 (684) hide show
  1. package/approval-flow/helpers/index.d.ts +1 -1
  2. package/approval-flow/index.d.ts +2 -2
  3. package/approval-flow/interfaces/approval-process.d.ts +1 -1
  4. package/approval-flow/interfaces/index.d.ts +1 -1
  5. package/approval-flow/interfaces/send-reminders-data.d.ts +1 -1
  6. package/button/button.component.d.ts +4 -1
  7. package/button/index.d.ts +1 -1
  8. package/dynamic-page/index.d.ts +5 -5
  9. package/esm2022/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +2 -2
  10. package/esm2022/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.mjs +1 -1
  11. package/esm2022/approval-flow/approval-flow-graph.mjs +1 -1
  12. package/esm2022/approval-flow/approval-flow-messages/approval-flow-messages.component.mjs +1 -1
  13. package/esm2022/approval-flow/approval-flow-node/approval-flow-drop-zone.directive.mjs +1 -1
  14. package/esm2022/approval-flow/approval-flow-node/approval-flow-node.component.mjs +2 -2
  15. package/esm2022/approval-flow/approval-flow-select-type/approval-flow-select-type.component.mjs +1 -1
  16. package/esm2022/approval-flow/approval-flow-team-list/approval-flow-team-list.component.mjs +1 -1
  17. package/esm2022/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.mjs +1 -1
  18. package/esm2022/approval-flow/approval-flow-user-details/approval-flow-user-details.component.mjs +1 -1
  19. package/esm2022/approval-flow/approval-flow-user-list/approval-flow-user-list.component.mjs +1 -1
  20. package/esm2022/approval-flow/approval-flow.component.mjs +2 -2
  21. package/esm2022/approval-flow/approval-flow.module.mjs +1 -1
  22. package/esm2022/approval-flow/fundamental-ngx-platform-approval-flow.mjs +1 -1
  23. package/esm2022/approval-flow/helpers/index.mjs +1 -1
  24. package/esm2022/approval-flow/index.mjs +3 -3
  25. package/esm2022/approval-flow/interfaces/approval-node.mjs +1 -1
  26. package/esm2022/approval-flow/interfaces/approval-process.mjs +1 -1
  27. package/esm2022/approval-flow/interfaces/approval-status.mjs +1 -1
  28. package/esm2022/approval-flow/interfaces/approval-team.mjs +1 -1
  29. package/esm2022/approval-flow/interfaces/approval-user.mjs +1 -1
  30. package/esm2022/approval-flow/interfaces/index.mjs +2 -2
  31. package/esm2022/approval-flow/interfaces/send-reminders-data.mjs +1 -1
  32. package/esm2022/approval-flow/services/approval-flow-add-node-view.service.mjs +1 -1
  33. package/esm2022/button/button.component.mjs +8 -3
  34. package/esm2022/button/button.module.mjs +1 -1
  35. package/esm2022/button/fundamental-ngx-platform-button.mjs +1 -1
  36. package/esm2022/button/index.mjs +2 -2
  37. package/esm2022/dynamic-page/constants.mjs +1 -1
  38. package/esm2022/dynamic-page/directives/dynamic-page-header-subtitle.directive.mjs +1 -1
  39. package/esm2022/dynamic-page/directives/dynamic-page-header-title.directive.mjs +1 -1
  40. package/esm2022/dynamic-page/dynamic-page-content/dynamic-page-content-host.component.mjs +1 -1
  41. package/esm2022/dynamic-page/dynamic-page-content/dynamic-page-content.component.mjs +1 -1
  42. package/esm2022/dynamic-page/dynamic-page-footer/dynamic-page-footer.component.mjs +1 -1
  43. package/esm2022/dynamic-page/dynamic-page-header/actions/global-actions/dynamic-page-global-actions.component.mjs +1 -1
  44. package/esm2022/dynamic-page/dynamic-page-header/actions/layout-actions/dynamic-page-layout-actions.component.mjs +1 -1
  45. package/esm2022/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.mjs +1 -1
  46. package/esm2022/dynamic-page/dynamic-page-header/key-info/dynamic-page-key-info.component.mjs +1 -1
  47. package/esm2022/dynamic-page/dynamic-page-header/title/dynamic-page-title-image.component.mjs +1 -1
  48. package/esm2022/dynamic-page/dynamic-page-header/title/dynamic-page-title.component.mjs +1 -1
  49. package/esm2022/dynamic-page/dynamic-page.component.mjs +1 -1
  50. package/esm2022/dynamic-page/dynamic-page.config.mjs +1 -1
  51. package/esm2022/dynamic-page/dynamic-page.module.mjs +1 -1
  52. package/esm2022/dynamic-page/dynamic-page.service.mjs +1 -1
  53. package/esm2022/dynamic-page/fundamental-ngx-platform-dynamic-page.mjs +1 -1
  54. package/esm2022/dynamic-page/index.mjs +6 -6
  55. package/esm2022/dynamic-page/utils.mjs +1 -1
  56. package/esm2022/feed-input/feed-input.component.mjs +2 -2
  57. package/esm2022/feed-input/feed-input.module.mjs +1 -1
  58. package/esm2022/feed-input/fundamental-ngx-platform-feed-input.mjs +1 -1
  59. package/esm2022/feed-input/index.mjs +2 -2
  60. package/esm2022/form/auto-complete/auto-complete.directive.mjs +2 -2
  61. package/esm2022/form/auto-complete/auto-complete.module.mjs +1 -1
  62. package/esm2022/form/checkbox/checkbox.component.mjs +1 -1
  63. package/esm2022/form/checkbox/checkbox.module.mjs +1 -1
  64. package/esm2022/form/checkbox-group/checkbox-group.component.mjs +1 -1
  65. package/esm2022/form/checkbox-group/checkbox-group.module.mjs +1 -1
  66. package/esm2022/form/combobox/combobox/combobox.component.mjs +13 -4
  67. package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +1 -1
  68. package/esm2022/form/combobox/combobox-mobile/combobox-mobile.module.mjs +1 -1
  69. package/esm2022/form/combobox/combobox.config.mjs +2 -2
  70. package/esm2022/form/combobox/combobox.interface.mjs +1 -1
  71. package/esm2022/form/combobox/combobox.module.mjs +1 -1
  72. package/esm2022/form/combobox/commons/base-combobox.mjs +1 -1
  73. package/esm2022/form/combobox/directives/combobox-item.directive.mjs +1 -1
  74. package/esm2022/form/combobox/index.mjs +1 -1
  75. package/esm2022/form/date-picker/date-picker.component.mjs +4 -5
  76. package/esm2022/form/date-picker/date-picker.module.mjs +1 -1
  77. package/esm2022/form/datetime-picker/datetime-picker.component.mjs +3 -3
  78. package/esm2022/form/datetime-picker/datetime-picker.module.mjs +1 -1
  79. package/esm2022/form/datetime-picker/errors.mjs +1 -1
  80. package/esm2022/form/form-generator/base-dynamic-form-generator-control.mjs +1 -1
  81. package/esm2022/form/form-generator/config/default-components-list.mjs +6 -6
  82. package/esm2022/form/form-generator/config/default-form-generator-hint-options.mjs +1 -1
  83. package/esm2022/form/form-generator/config/default-validation-errors.mjs +1 -1
  84. package/esm2022/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.mjs +3 -3
  85. package/esm2022/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.mjs +1 -1
  86. package/esm2022/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.mjs +1 -1
  87. package/esm2022/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.mjs +1 -1
  88. package/esm2022/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.mjs +1 -1
  89. package/esm2022/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.mjs +2 -2
  90. package/esm2022/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.mjs +3 -3
  91. package/esm2022/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.mjs +1 -1
  92. package/esm2022/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.mjs +1 -1
  93. package/esm2022/form/form-generator/dynamic-form-control-field.directive.mjs +1 -1
  94. package/esm2022/form/form-generator/dynamic-form-control.directive.mjs +3 -3
  95. package/esm2022/form/form-generator/dynamic-form-control.mjs +1 -1
  96. package/esm2022/form/form-generator/fdp-form-generator.module.mjs +14 -14
  97. package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +1 -1
  98. package/esm2022/form/form-generator/form-generator-components-accessor.service.mjs +1 -1
  99. package/esm2022/form/form-generator/form-generator-field/form-generator-field.component.mjs +1 -1
  100. package/esm2022/form/form-generator/form-generator.service.mjs +3 -3
  101. package/esm2022/form/form-generator/form-generator.tokens.mjs +1 -1
  102. package/esm2022/form/form-generator/helpers.mjs +1 -1
  103. package/esm2022/form/form-generator/interfaces/dynamic-abstract-control.mjs +1 -1
  104. package/esm2022/form/form-generator/interfaces/dynamic-form-group.mjs +1 -1
  105. package/esm2022/form/form-generator/interfaces/dynamic-form-item.mjs +1 -1
  106. package/esm2022/form/form-generator/interfaces/form-component-definition.mjs +1 -1
  107. package/esm2022/form/form-generator/interfaces/form-generator-module-config.mjs +1 -1
  108. package/esm2022/form/form-generator/pipes/get-hint-options.pipe.mjs +2 -2
  109. package/esm2022/form/form-generator/pipes/get-ordered-form-controls.pipe.mjs +1 -1
  110. package/esm2022/form/form-generator/providers/providers.mjs +1 -1
  111. package/esm2022/form/form-group/config/default-form-field-hint-options.mjs +1 -1
  112. package/esm2022/form/form-group/constants.mjs +1 -1
  113. package/esm2022/form/form-group/fdp-form.module.mjs +7 -7
  114. package/esm2022/form/form-group/fdp-form.tokens.mjs +1 -1
  115. package/esm2022/form/form-group/form-field/form-field.component.mjs +1 -1
  116. package/esm2022/form/form-group/form-field-error/form-field-error-description.directive.mjs +1 -1
  117. package/esm2022/form/form-group/form-field-error/form-field-error-heading.directive.mjs +1 -1
  118. package/esm2022/form/form-group/form-field-error/form-field-error.directive.mjs +1 -1
  119. package/esm2022/form/form-group/form-field-error/tokens.mjs +1 -1
  120. package/esm2022/form/form-group/form-field-extras/form-field-extras.component.mjs +1 -1
  121. package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +1 -1
  122. package/esm2022/form/form-group/form-group-header/form-group-header.component.mjs +1 -1
  123. package/esm2022/form/form-group/form-group.component.mjs +1 -1
  124. package/esm2022/form/form-group/helpers.mjs +1 -1
  125. package/esm2022/form/form-group/pipes/field-group-row-value.pipe.mjs +1 -1
  126. package/esm2022/form/form-group/services/form-field-layout.service.mjs +3 -3
  127. package/esm2022/form/form-helpers.mjs +3 -3
  128. package/esm2022/form/fundamental-ngx-platform-form.mjs +1 -1
  129. package/esm2022/form/helpers.mjs +1 -1
  130. package/esm2022/form/index.mjs +1 -1
  131. package/esm2022/form/input/fdp-input.module.mjs +1 -1
  132. package/esm2022/form/input/input.component.mjs +1 -1
  133. package/esm2022/form/input-group/addon-body.component.mjs +2 -2
  134. package/esm2022/form/input-group/addon.component.mjs +2 -2
  135. package/esm2022/form/input-group/constants.mjs +1 -1
  136. package/esm2022/form/input-group/input-group.component.mjs +1 -1
  137. package/esm2022/form/input-group/input-group.config.mjs +1 -1
  138. package/esm2022/form/input-group/input-group.module.mjs +3 -3
  139. package/esm2022/form/input-group/input.component.mjs +2 -2
  140. package/esm2022/form/input-message-group-with-template/input-message-group-with-template.component.mjs +1 -1
  141. package/esm2022/form/models/field.model.mjs +1 -1
  142. package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +1 -1
  143. package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +2 -2
  144. package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +1 -1
  145. package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.mjs +1 -1
  146. package/esm2022/form/multi-combobox/multi-combobox.config.mjs +2 -2
  147. package/esm2022/form/multi-combobox/multi-combobox.interface.mjs +1 -1
  148. package/esm2022/form/multi-combobox/multi-combobox.module.mjs +1 -1
  149. package/esm2022/form/multi-input/base-multi-input.mjs +1 -1
  150. package/esm2022/form/multi-input/index.mjs +2 -2
  151. package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
  152. package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.module.mjs +1 -1
  153. package/esm2022/form/multi-input/multi-input.component.mjs +2 -2
  154. package/esm2022/form/multi-input/multi-input.config.mjs +2 -2
  155. package/esm2022/form/multi-input/multi-input.interface.mjs +1 -1
  156. package/esm2022/form/multi-input/multi-input.module.mjs +1 -1
  157. package/esm2022/form/radio-group/radio/radio.component.mjs +1 -1
  158. package/esm2022/form/radio-group/radio-group.component.mjs +1 -1
  159. package/esm2022/form/radio-group/radio-group.module.mjs +1 -1
  160. package/esm2022/form/select/commons/base-select.mjs +7 -2
  161. package/esm2022/form/select/models/select.models.mjs +1 -1
  162. package/esm2022/form/select/select/select.component.mjs +3 -3
  163. package/esm2022/form/select/select.config.mjs +1 -1
  164. package/esm2022/form/select/select.module.mjs +1 -1
  165. package/esm2022/form/step-input/base.step-input.mjs +5 -5
  166. package/esm2022/form/step-input/number/number-step-input.component.mjs +1 -1
  167. package/esm2022/form/step-input/step-input-action-button.mjs +2 -2
  168. package/esm2022/form/step-input/step-input-control.directive.mjs +2 -2
  169. package/esm2022/form/step-input/step-input-decrement.directive.mjs +1 -1
  170. package/esm2022/form/step-input/step-input-increment.directive.mjs +1 -1
  171. package/esm2022/form/step-input/step-input.config.mjs +1 -1
  172. package/esm2022/form/step-input/step-input.module.mjs +3 -3
  173. package/esm2022/form/step-input/step-input.util.mjs +1 -1
  174. package/esm2022/form/switch/switch/index.mjs +1 -1
  175. package/esm2022/form/switch/switch/switch.component.mjs +1 -1
  176. package/esm2022/form/switch/switch/switch.config.mjs +1 -1
  177. package/esm2022/form/switch/switch.module.mjs +1 -1
  178. package/esm2022/form/text-area/text-area.component.mjs +1 -1
  179. package/esm2022/form/text-area/text-area.config.mjs +1 -1
  180. package/esm2022/form/text-area/text-area.module.mjs +1 -1
  181. package/esm2022/form/time-picker/time-picker.component.mjs +1 -1
  182. package/esm2022/form/time-picker/time-picker.module.mjs +1 -1
  183. package/esm2022/icon-tab-bar/components/closable-icon-tab-bar.class.mjs +1 -1
  184. package/esm2022/icon-tab-bar/components/icon-tab-bar-base.class.mjs +1 -1
  185. package/esm2022/icon-tab-bar/components/icon-tab-bar-filter-type/icon-tab-bar-filter-type.component.mjs +1 -1
  186. package/esm2022/icon-tab-bar/components/icon-tab-bar-icon-type/icon-tab-bar-icon-type.component.mjs +1 -1
  187. package/esm2022/icon-tab-bar/components/icon-tab-bar-process-type/icon-tab-bar-process-type.component.mjs +1 -1
  188. package/esm2022/icon-tab-bar/components/icon-tab-bar-text-type/icon-tab-bar-text-type.component.mjs +1 -1
  189. package/esm2022/icon-tab-bar/components/index.mjs +1 -1
  190. package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover/icon-tab-bar-popover.component.mjs +3 -3
  191. package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover-base.class.mjs +1 -1
  192. package/esm2022/icon-tab-bar/components/popovers/text-type-popover/text-type-popover.component.mjs +3 -3
  193. package/esm2022/icon-tab-bar/constants.mjs +1 -1
  194. package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.mjs +1 -1
  195. package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.mjs +1 -1
  196. package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.mjs +1 -1
  197. package/esm2022/icon-tab-bar/fundamental-ngx-platform-icon-tab-bar.mjs +1 -1
  198. package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +1 -1
  199. package/esm2022/icon-tab-bar/icon-tab-bar.module.mjs +1 -1
  200. package/esm2022/icon-tab-bar/index.mjs +8 -8
  201. package/esm2022/icon-tab-bar/interfaces/icon-tab-bar-item.interface.mjs +1 -1
  202. package/esm2022/icon-tab-bar/interfaces/tab-color-associations.interface.mjs +1 -1
  203. package/esm2022/icon-tab-bar/interfaces/tab-config.interface.mjs +1 -1
  204. package/esm2022/icon-tab-bar/types.mjs +1 -1
  205. package/esm2022/info-label/fundamental-ngx-platform-info-label.mjs +1 -1
  206. package/esm2022/info-label/index.mjs +1 -1
  207. package/esm2022/info-label/info-label.component.mjs +1 -1
  208. package/esm2022/info-label/info-label.module.mjs +1 -1
  209. package/esm2022/link/fundamental-ngx-platform-link.mjs +1 -1
  210. package/esm2022/link/index.mjs +1 -1
  211. package/esm2022/link/link.component.mjs +3 -3
  212. package/esm2022/link/link.module.mjs +1 -1
  213. package/esm2022/list/action-list-item/action-list-item.component.mjs +3 -3
  214. package/esm2022/list/action-list-item/action-list-item.module.mjs +1 -1
  215. package/esm2022/list/base-list-item.mjs +2 -2
  216. package/esm2022/list/display-list-item/display-list-item.component.mjs +3 -3
  217. package/esm2022/list/display-list-item/display-list-item.module.mjs +1 -1
  218. package/esm2022/list/fdpListComponent.token.mjs +1 -1
  219. package/esm2022/list/free-content-list-item/free-content-list-item.component.mjs +3 -3
  220. package/esm2022/list/fundamental-ngx-platform-list.mjs +1 -1
  221. package/esm2022/list/index.mjs +13 -13
  222. package/esm2022/list/list-group-footer.component.mjs +3 -3
  223. package/esm2022/list/list-group-header.component.mjs +5 -5
  224. package/esm2022/list/list.component.mjs +5 -5
  225. package/esm2022/list/list.config.mjs +1 -1
  226. package/esm2022/list/list.module.mjs +1 -1
  227. package/esm2022/list/load-more-content.directive.mjs +1 -1
  228. package/esm2022/list/models/list.mjs +1 -1
  229. package/esm2022/list/object-list-item/object-list-item-row.component.mjs +1 -1
  230. package/esm2022/list/object-list-item/object-list-item.component.mjs +3 -3
  231. package/esm2022/list/object-list-item/object-list-item.module.mjs +1 -1
  232. package/esm2022/list/standard-list-item/standard-list-item.component.mjs +3 -3
  233. package/esm2022/list/standard-list-item/standard-list-item.module.mjs +1 -1
  234. package/esm2022/menu/fundamental-ngx-platform-menu.mjs +1 -1
  235. package/esm2022/menu/index.mjs +3 -3
  236. package/esm2022/menu/menu-item.component.mjs +1 -1
  237. package/esm2022/menu/menu-trigger.directive.mjs +1 -1
  238. package/esm2022/menu/menu.component.mjs +1 -1
  239. package/esm2022/menu/menu.module.mjs +1 -1
  240. package/esm2022/menu-button/fundamental-ngx-platform-menu-button.mjs +1 -1
  241. package/esm2022/menu-button/index.mjs +2 -2
  242. package/esm2022/menu-button/menu-button.component.mjs +8 -3
  243. package/esm2022/menu-button/menu-button.module.mjs +1 -1
  244. package/esm2022/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.mjs +1 -1
  245. package/esm2022/message-popover/components/message-view/message-view.component.mjs +2 -2
  246. package/esm2022/message-popover/default-config.mjs +1 -1
  247. package/esm2022/message-popover/directives/message-popover-form-item.directive.mjs +1 -1
  248. package/esm2022/message-popover/fundamental-ngx-platform-message-popover.mjs +1 -1
  249. package/esm2022/message-popover/index.mjs +5 -5
  250. package/esm2022/message-popover/message-popover.component.mjs +2 -2
  251. package/esm2022/message-popover/models/message-popover-entry.interface.mjs +1 -1
  252. package/esm2022/message-popover/models/message-popover-wrapper.interface.mjs +1 -1
  253. package/esm2022/message-popover/models/message-popover.interface.mjs +1 -1
  254. package/esm2022/message-popover/platform-message-popover.module.mjs +3 -3
  255. package/esm2022/message-popover/utils.mjs +1 -1
  256. package/esm2022/object-attribute/fundamental-ngx-platform-object-attribute.mjs +1 -1
  257. package/esm2022/object-attribute/index.mjs +1 -1
  258. package/esm2022/object-marker/fundamental-ngx-platform-object-marker.mjs +1 -1
  259. package/esm2022/object-marker/index.mjs +1 -1
  260. package/esm2022/object-marker/object-marker.component.mjs +8 -3
  261. package/esm2022/object-marker/object-marker.module.mjs +1 -1
  262. package/esm2022/object-status/fundamental-ngx-platform-object-status.mjs +1 -1
  263. package/esm2022/object-status/index.mjs +1 -1
  264. package/esm2022/object-status/object-status.component.mjs +8 -3
  265. package/esm2022/object-status/object-status.module.mjs +1 -1
  266. package/esm2022/page-footer/fundamental-ngx-platform-page-footer.mjs +1 -1
  267. package/esm2022/page-footer/index.mjs +1 -1
  268. package/esm2022/page-footer/page-footer.component.mjs +1 -1
  269. package/esm2022/page-footer/page-footer.module.mjs +1 -1
  270. package/esm2022/panel/fundamental-ngx-platform-panel.mjs +1 -1
  271. package/esm2022/panel/index.mjs +3 -3
  272. package/esm2022/panel/panel-actions.component.mjs +1 -1
  273. package/esm2022/panel/panel-content/panel-content.component.mjs +1 -1
  274. package/esm2022/panel/panel.component.mjs +1 -1
  275. package/esm2022/panel/panel.config.mjs +1 -1
  276. package/esm2022/panel/panel.module.mjs +1 -1
  277. package/esm2022/search-field/fundamental-ngx-platform-search-field.mjs +1 -1
  278. package/esm2022/search-field/index.mjs +2 -2
  279. package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +1 -1
  280. package/esm2022/search-field/search-field-mobile/search-field-mobile.interface.mjs +1 -1
  281. package/esm2022/search-field/search-field-mobile/search-field-mobile.module.mjs +1 -1
  282. package/esm2022/search-field/search-field.component.mjs +2 -2
  283. package/esm2022/search-field/search-field.module.mjs +1 -1
  284. package/esm2022/settings-generator/controls/theme-selector-list/theme-selector-list.component.mjs +1 -1
  285. package/esm2022/settings-generator/default-config.mjs +1 -1
  286. package/esm2022/settings-generator/fundamental-ngx-platform-settings-generator.mjs +1 -1
  287. package/esm2022/settings-generator/index.mjs +5 -5
  288. package/esm2022/settings-generator/layouts/base-settings-generator-layout.mjs +2 -2
  289. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +1 -1
  290. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +1 -1
  291. package/esm2022/settings-generator/models/settings-config.model.mjs +1 -1
  292. package/esm2022/settings-generator/models/settings-generator.model.mjs +1 -1
  293. package/esm2022/settings-generator/models/settings.model.mjs +1 -1
  294. package/esm2022/settings-generator/settings-generator-content/settings-generator-content.component.mjs +1 -1
  295. package/esm2022/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.mjs +1 -1
  296. package/esm2022/settings-generator/settings-generator-layout-accessor.service.mjs +1 -1
  297. package/esm2022/settings-generator/settings-generator.component.mjs +1 -1
  298. package/esm2022/settings-generator/settings-generator.module.mjs +1 -1
  299. package/esm2022/settings-generator/settings-generator.service.mjs +2 -2
  300. package/esm2022/settings-generator/tokens.mjs +1 -1
  301. package/esm2022/shared/base.mjs +1 -1
  302. package/esm2022/shared/domain/array-data-source.mjs +2 -2
  303. package/esm2022/shared/domain/base-data-provider.mjs +3 -3
  304. package/esm2022/shared/domain/data-model.mjs +1 -1
  305. package/esm2022/shared/domain/data-source.mjs +1 -1
  306. package/esm2022/shared/domain/observable-data-source.mjs +2 -2
  307. package/esm2022/shared/form/base.input.mjs +1 -1
  308. package/esm2022/shared/form/collection-base.input.mjs +4 -4
  309. package/esm2022/shared/form/form-error.mjs +1 -1
  310. package/esm2022/shared/form/form-field.mjs +1 -1
  311. package/esm2022/shared/form/form-options.mjs +1 -1
  312. package/esm2022/shared/form/hint-options.mjs +1 -1
  313. package/esm2022/shared/form/inline-layout-collection-base.input.mjs +3 -3
  314. package/esm2022/shared/fundamental-ngx-platform-shared.mjs +1 -1
  315. package/esm2022/shared/index.mjs +4 -4
  316. package/esm2022/shared/pipes/convert-bytes/convert-bytes.pipe.mjs +1 -1
  317. package/esm2022/shared/pipes/pipe.module.mjs +1 -1
  318. package/esm2022/shared/platform.config.mjs +1 -1
  319. package/esm2022/shared/preset-management/preset-managed-component.interface.mjs +1 -1
  320. package/esm2022/shared/preset-management/preset-management.token.mjs +1 -1
  321. package/esm2022/shared/testing/event-objects.mjs +1 -1
  322. package/esm2022/shared/utils/lang.mjs +1 -1
  323. package/esm2022/slider/fundamental-ngx-platform-slider.mjs +1 -1
  324. package/esm2022/slider/index.mjs +1 -1
  325. package/esm2022/slider/slider.component.mjs +2 -2
  326. package/esm2022/slider/slider.module.mjs +1 -1
  327. package/esm2022/smart-filter-bar/components/smart-filter-bar-condition-field/base-smart-filter-bar-condition-field.mjs +1 -1
  328. package/esm2022/smart-filter-bar/components/smart-filter-bar-condition-field/smart-filter-bar-condition-field.component.mjs +1 -1
  329. package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +2 -2
  330. package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/data-provider.mjs +1 -1
  331. package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
  332. package/esm2022/smart-filter-bar/constants.mjs +1 -1
  333. package/esm2022/smart-filter-bar/directives/smart-filter-bar-field-definition.directive.mjs +1 -1
  334. package/esm2022/smart-filter-bar/directives/smart-filter-bar-subject.directive.mjs +1 -1
  335. package/esm2022/smart-filter-bar/directives/smart-filter-bar-toolbar-item.directive.mjs +1 -1
  336. package/esm2022/smart-filter-bar/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
  337. package/esm2022/smart-filter-bar/helpers.mjs +1 -1
  338. package/esm2022/smart-filter-bar/index.mjs +8 -8
  339. package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-change.mjs +1 -1
  340. package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-condition.mjs +1 -1
  341. package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-custom-filter-config.mjs +1 -1
  342. package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-field-definition.mjs +1 -1
  343. package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-field-filter-item.mjs +1 -1
  344. package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-settings-dialog-config.mjs +1 -1
  345. package/esm2022/smart-filter-bar/interfaces/smart-filter-bar-visibility-category.mjs +1 -1
  346. package/esm2022/smart-filter-bar/interfaces/smart-filter-dynamic-form-item.mjs +1 -1
  347. package/esm2022/smart-filter-bar/interfaces/strategy-labels.type.mjs +1 -1
  348. package/esm2022/smart-filter-bar/providers/smart-filter-bar.provider.mjs +1 -1
  349. package/esm2022/smart-filter-bar/smart-filter-bar.class.mjs +1 -1
  350. package/esm2022/smart-filter-bar/smart-filter-bar.component.mjs +2 -2
  351. package/esm2022/smart-filter-bar/smart-filter-bar.module.mjs +1 -1
  352. package/esm2022/smart-filter-bar/smart-filter-bar.service.mjs +2 -2
  353. package/esm2022/split-menu-button/fundamental-ngx-platform-split-menu-button.mjs +1 -1
  354. package/esm2022/split-menu-button/index.mjs +1 -1
  355. package/esm2022/split-menu-button/split-menu-button.component.mjs +8 -3
  356. package/esm2022/split-menu-button/split-menu-button.module.mjs +1 -1
  357. package/esm2022/table/components/index.mjs +9 -9
  358. package/esm2022/table/components/no-data-wrapper/no-data-wrapper.component.mjs +1 -1
  359. package/esm2022/table/components/reset-button/reset-button.component.mjs +1 -1
  360. package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +2 -2
  361. package/esm2022/table/components/table-column/table-column.component.mjs +1 -1
  362. package/esm2022/table/components/table-column-resizer/table-column-resizer.component.mjs +1 -1
  363. package/esm2022/table/components/table-editable-cell/table-editable-cell.component.mjs +1 -1
  364. package/esm2022/table/components/table-group-row/table-group-row.component.mjs +1 -1
  365. package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +2 -2
  366. package/esm2022/table/components/table-header-row/table-header-row.component.mjs +1 -1
  367. package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +1 -1
  368. package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +2 -2
  369. package/esm2022/table/components/table-p13-dialog/filtering/filtering.component.mjs +1 -1
  370. package/esm2022/table/components/table-p13-dialog/filtering/filtering.model.mjs +1 -1
  371. package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +2 -2
  372. package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +2 -2
  373. package/esm2022/table/components/table-p13-dialog/table-p13-columns.component.mjs +1 -1
  374. package/esm2022/table/components/table-p13-dialog/table-p13-dialog.component.mjs +1 -1
  375. package/esm2022/table/components/table-p13-dialog/table-p13-filter.component.mjs +1 -1
  376. package/esm2022/table/components/table-p13-dialog/table-p13-group.component.mjs +1 -1
  377. package/esm2022/table/components/table-p13-dialog/table-p13-sort.component.mjs +1 -1
  378. package/esm2022/table/components/table-popping-row/table-popping-row.component.mjs +1 -1
  379. package/esm2022/table/components/table-row/table-row.component.mjs +6 -4
  380. package/esm2022/table/components/table-toolbar/table-toolbar-actions.component.mjs +1 -1
  381. package/esm2022/table/components/table-toolbar/table-toolbar-left-actions.component.mjs +1 -1
  382. package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +2 -2
  383. package/esm2022/table/components/table-toolbar/table-toolbar.mjs +1 -1
  384. package/esm2022/table/components/table-view-settings-dialog/filtering/constants.mjs +1 -1
  385. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-custom.component.mjs +1 -1
  386. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.mjs +1 -1
  387. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-single-select.component.mjs +1 -1
  388. package/esm2022/table/components/table-view-settings-dialog/filtering/filter-step.component.mjs +1 -1
  389. package/esm2022/table/components/table-view-settings-dialog/filtering/filters-active-step.mjs +1 -1
  390. package/esm2022/table/components/table-view-settings-dialog/filtering/filters-list-step.component.mjs +1 -1
  391. package/esm2022/table/components/table-view-settings-dialog/filtering/filters.component.mjs +1 -1
  392. package/esm2022/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +1 -1
  393. package/esm2022/table/components/table-view-settings-dialog/index.mjs +3 -3
  394. package/esm2022/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +1 -1
  395. package/esm2022/table/components/table-view-settings-dialog/table-view-settings-dialog.component.mjs +1 -1
  396. package/esm2022/table/components/table-view-settings-dialog/table-view-settings-filter.component.mjs +1 -1
  397. package/esm2022/table/fundamental-ngx-platform-table.mjs +1 -1
  398. package/esm2022/table/index.mjs +15 -15
  399. package/esm2022/table/table.component.mjs +14 -10
  400. package/esm2022/table/table.module.mjs +1 -1
  401. package/esm2022/table-helpers/constants/index.mjs +1 -1
  402. package/esm2022/table-helpers/constants/tokens.mjs +1 -1
  403. package/esm2022/table-helpers/directives/index.mjs +7 -7
  404. package/esm2022/table-helpers/directives/platform-table-column-responsive.directive.mjs +3 -3
  405. package/esm2022/table-helpers/directives/table-cell-header-popover.directive.mjs +1 -1
  406. package/esm2022/table-helpers/directives/table-cell-resizable.directive.mjs +3 -3
  407. package/esm2022/table-helpers/directives/table-cell-selectable.directive.mjs +2 -2
  408. package/esm2022/table-helpers/directives/table-cell.directive.mjs +1 -1
  409. package/esm2022/table-helpers/directives/table-data-source.directive.mjs +3 -2
  410. package/esm2022/table-helpers/directives/table-draggable.directive.mjs +1 -1
  411. package/esm2022/table-helpers/directives/table-header-resizer.directive.mjs +2 -2
  412. package/esm2022/table-helpers/directives/table-header.directive.mjs +1 -1
  413. package/esm2022/table-helpers/directives/table-initial-state.directive.mjs +1 -1
  414. package/esm2022/table-helpers/directives/table-scrollable.directive.mjs +4 -4
  415. package/esm2022/table-helpers/directives/table-view-settings-filter-custom.directive.mjs +1 -1
  416. package/esm2022/table-helpers/directives/table-virtual-scroll.directive.mjs +2 -2
  417. package/esm2022/table-helpers/domain/array-data-source.mjs +3 -3
  418. package/esm2022/table-helpers/domain/data-source-parser.class.mjs +1 -1
  419. package/esm2022/table-helpers/domain/index.mjs +4 -4
  420. package/esm2022/table-helpers/domain/observable-data-source.mjs +3 -3
  421. package/esm2022/table-helpers/domain/table-data-provider.mjs +1 -1
  422. package/esm2022/table-helpers/domain/table-data-source.mjs +1 -1
  423. package/esm2022/table-helpers/enums/collection-filter.enum.mjs +1 -1
  424. package/esm2022/table-helpers/enums/column-align.enum.mjs +1 -1
  425. package/esm2022/table-helpers/enums/filter-type.enum.mjs +1 -1
  426. package/esm2022/table-helpers/enums/index.mjs +4 -4
  427. package/esm2022/table-helpers/enums/row-type.enum.mjs +1 -1
  428. package/esm2022/table-helpers/enums/selection-mode.enum.mjs +1 -1
  429. package/esm2022/table-helpers/enums/sort-direction.enum.mjs +1 -1
  430. package/esm2022/table-helpers/fundamental-ngx-platform-table-helpers.mjs +1 -1
  431. package/esm2022/table-helpers/helpers.mjs +6 -3
  432. package/esm2022/table-helpers/index.mjs +9 -9
  433. package/esm2022/table-helpers/interfaces/collection-filter.interface.mjs +1 -1
  434. package/esm2022/table-helpers/interfaces/collection-group.interface.mjs +1 -1
  435. package/esm2022/table-helpers/interfaces/collection-page.interface.mjs +1 -1
  436. package/esm2022/table-helpers/interfaces/collection-sort.interface.mjs +1 -1
  437. package/esm2022/table-helpers/interfaces/collection-state.interface.mjs +1 -1
  438. package/esm2022/table-helpers/interfaces/column-responsive-state.interface.mjs +1 -1
  439. package/esm2022/table-helpers/interfaces/index.mjs +3 -4
  440. package/esm2022/table-helpers/interfaces/selection-value.interface.mjs +1 -1
  441. package/esm2022/table-helpers/interfaces/table-state.interface.mjs +1 -1
  442. package/esm2022/table-helpers/models/column-freeze-event.model.mjs +1 -1
  443. package/esm2022/table-helpers/models/columns-change-event.model.mjs +1 -1
  444. package/esm2022/table-helpers/models/data-source.type.mjs +1 -1
  445. package/esm2022/table-helpers/models/directives.mjs +1 -1
  446. package/esm2022/table-helpers/models/dnd.mjs +1 -1
  447. package/esm2022/table-helpers/models/filter-change-event.model.mjs +1 -1
  448. package/esm2022/table-helpers/models/group-change-event.model.mjs +1 -1
  449. package/esm2022/table-helpers/models/index.mjs +15 -15
  450. package/esm2022/table-helpers/models/page-change-event.model.mjs +1 -1
  451. package/esm2022/table-helpers/models/row-comparator.model.mjs +1 -1
  452. package/esm2022/table-helpers/models/save-rows-event.interface.mjs +1 -1
  453. package/esm2022/table-helpers/models/search-change-event.model.mjs +1 -1
  454. package/esm2022/table-helpers/models/selection-change-event.model.mjs +1 -1
  455. package/esm2022/table-helpers/models/sort-change-event.model.mjs +1 -1
  456. package/esm2022/table-helpers/models/table-dialog-common-data.model.mjs +1 -1
  457. package/esm2022/table-helpers/models/table-item.model.mjs +1 -1
  458. package/esm2022/table-helpers/models/table-managed-preset.mjs +1 -1
  459. package/esm2022/table-helpers/models/table-row-activate-event.model.mjs +1 -1
  460. package/esm2022/table-helpers/models/table-row-toggle-open-state-event.model.mjs +1 -1
  461. package/esm2022/table-helpers/models/table-row.model.mjs +1 -1
  462. package/esm2022/table-helpers/models/table-rows-rearrange-event.model.mjs +1 -1
  463. package/esm2022/table-helpers/models/tree-table.model.mjs +1 -1
  464. package/esm2022/table-helpers/pipes/cell-styles.pipe.mjs +1 -1
  465. package/esm2022/table-helpers/pipes/column-resizable-side.pipe.mjs +1 -1
  466. package/esm2022/table-helpers/pipes/column-sorting-direction.pipe.mjs +1 -1
  467. package/esm2022/table-helpers/pipes/index.mjs +1 -1
  468. package/esm2022/table-helpers/pipes/row-classes.pipe.mjs +1 -1
  469. package/esm2022/table-helpers/pipes/selection-cell-styles.pipe.mjs +1 -1
  470. package/esm2022/table-helpers/services/table-column-resize.service.mjs +3 -4
  471. package/esm2022/table-helpers/services/table-responsive.service.mjs +1 -1
  472. package/esm2022/table-helpers/services/table-row.service.mjs +1 -1
  473. package/esm2022/table-helpers/services/table-scroll-dispatcher.service.mjs +1 -1
  474. package/esm2022/table-helpers/services/table.service.mjs +1 -1
  475. package/esm2022/table-helpers/table-cell.class.mjs +1 -1
  476. package/esm2022/table-helpers/table-column.mjs +1 -1
  477. package/esm2022/table-helpers/table-helpers.module.mjs +2 -2
  478. package/esm2022/table-helpers/table.mjs +1 -1
  479. package/esm2022/table-helpers/utils.mjs +1 -1
  480. package/esm2022/value-help-dialog/components/base-tab/vhd-base-tab.component.mjs +1 -1
  481. package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +2 -2
  482. package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +26 -6
  483. package/esm2022/value-help-dialog/components/value-help-dialog-filter/value-help-dialog-filter.component.mjs +7 -3
  484. package/esm2022/value-help-dialog/constans/condition-display.function.mjs +2 -2
  485. package/esm2022/value-help-dialog/constans/index.mjs +1 -1
  486. package/esm2022/value-help-dialog/constans/variables.mjs +1 -1
  487. package/esm2022/value-help-dialog/directives/condition-count-message.directive.mjs +1 -1
  488. package/esm2022/value-help-dialog/directives/value-help-column-def.directive.mjs +24 -0
  489. package/esm2022/value-help-dialog/directives/value-help-filter-def.directive.mjs +22 -0
  490. package/esm2022/value-help-dialog/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
  491. package/esm2022/value-help-dialog/index.mjs +4 -3
  492. package/esm2022/value-help-dialog/models/index.mjs +2 -2
  493. package/esm2022/value-help-dialog/models/vhd-component.model.mjs +3 -0
  494. package/esm2022/value-help-dialog/models/vhd-data.source.mjs +1 -1
  495. package/esm2022/value-help-dialog/models/vhd-filter-rule.model.mjs +1 -1
  496. package/esm2022/value-help-dialog/models/vhd-filter.model.mjs +1 -1
  497. package/esm2022/value-help-dialog/models/vhd-strategy.enum.mjs +1 -1
  498. package/esm2022/value-help-dialog/models/vhd-tab-type.enum.mjs +1 -1
  499. package/esm2022/value-help-dialog/models/vhd-table-selection.type.mjs +1 -1
  500. package/esm2022/value-help-dialog/models/vhd-type-condition.enum.mjs +1 -1
  501. package/esm2022/value-help-dialog/models/vhd-value.model.mjs +1 -1
  502. package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +26 -6
  503. package/esm2022/value-help-dialog/value-help-dialog.module.mjs +1 -1
  504. package/esm2022/variant-management/components/manage-variant-item/manage-variant-item.component.mjs +1 -1
  505. package/esm2022/variant-management/components/manage-variants-dialog/data-provider.mjs +1 -1
  506. package/esm2022/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +2 -2
  507. package/esm2022/variant-management/components/variant-management-wrapper/variant-management-wrapper.component.mjs +1 -1
  508. package/esm2022/variant-management/directives/variant-management-dirty-label.directive.mjs +1 -1
  509. package/esm2022/variant-management/fundamental-ngx-platform-variant-management.mjs +1 -1
  510. package/esm2022/variant-management/index.mjs +4 -4
  511. package/esm2022/variant-management/models/save-dialog.model.mjs +1 -1
  512. package/esm2022/variant-management/models/variant-management.mjs +1 -1
  513. package/esm2022/variant-management/models/variant.interface.mjs +1 -1
  514. package/esm2022/variant-management/tokens.mjs +1 -1
  515. package/esm2022/variant-management/variant-item.class.mjs +1 -1
  516. package/esm2022/variant-management/variant-management.component.mjs +2 -2
  517. package/esm2022/variant-management/variant-management.module.mjs +1 -1
  518. package/esm2022/wizard-generator/base-wizard-generator.mjs +2 -2
  519. package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +2 -2
  520. package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +2 -2
  521. package/esm2022/wizard-generator/components/wizard-generator/wizard-generator.component.mjs +1 -1
  522. package/esm2022/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +1 -1
  523. package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.mjs +1 -1
  524. package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.mjs +1 -1
  525. package/esm2022/wizard-generator/directives/wizard-generator-finish-button.directive.mjs +1 -1
  526. package/esm2022/wizard-generator/directives/wizard-generator-go-next-button.directive.mjs +1 -1
  527. package/esm2022/wizard-generator/directives/wizard-generator-review-button.directive.mjs +1 -1
  528. package/esm2022/wizard-generator/directives/wizard-generator-summary-step.directive.mjs +1 -1
  529. package/esm2022/wizard-generator/fundamental-ngx-platform-wizard-generator.mjs +1 -1
  530. package/esm2022/wizard-generator/index.mjs +10 -10
  531. package/esm2022/wizard-generator/interfaces/wizard-dialog-data.interface.mjs +1 -1
  532. package/esm2022/wizard-generator/interfaces/wizard-generator-form-group.interface.mjs +1 -1
  533. package/esm2022/wizard-generator/interfaces/wizard-generator-forms.interface.mjs +1 -1
  534. package/esm2022/wizard-generator/interfaces/wizard-generator-item.interface.mjs +1 -1
  535. package/esm2022/wizard-generator/interfaces/wizard-generator-summary-item.interface.mjs +1 -1
  536. package/esm2022/wizard-generator/interfaces/wizard-navigation-buttons.interface.mjs +1 -1
  537. package/esm2022/wizard-generator/interfaces/wizard-step.interface.mjs +1 -1
  538. package/esm2022/wizard-generator/interfaces/wizard-title.interface.mjs +1 -1
  539. package/esm2022/wizard-generator/wizard-dialog-generator.service.mjs +1 -1
  540. package/esm2022/wizard-generator/wizard-generator.module.mjs +8 -8
  541. package/esm2022/wizard-generator/wizard-generator.service.mjs +4 -4
  542. package/feed-input/index.d.ts +1 -1
  543. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +889 -889
  544. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  545. package/fesm2022/fundamental-ngx-platform-button.mjs +8 -3
  546. package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
  547. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  548. package/fesm2022/fundamental-ngx-platform-feed-input.mjs +1 -1
  549. package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
  550. package/fesm2022/fundamental-ngx-platform-form.mjs +2729 -2716
  551. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  552. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +9 -9
  553. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
  554. package/fesm2022/fundamental-ngx-platform-info-label.mjs.map +1 -1
  555. package/fesm2022/fundamental-ngx-platform-link.mjs +2 -2
  556. package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
  557. package/fesm2022/fundamental-ngx-platform-list.mjs +23 -23
  558. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  559. package/fesm2022/fundamental-ngx-platform-menu-button.mjs +8 -3
  560. package/fesm2022/fundamental-ngx-platform-menu-button.mjs.map +1 -1
  561. package/fesm2022/fundamental-ngx-platform-menu.mjs +3 -3
  562. package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
  563. package/fesm2022/fundamental-ngx-platform-message-popover.mjs +353 -353
  564. package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
  565. package/fesm2022/fundamental-ngx-platform-object-attribute.mjs.map +1 -1
  566. package/fesm2022/fundamental-ngx-platform-object-marker.mjs +7 -2
  567. package/fesm2022/fundamental-ngx-platform-object-marker.mjs.map +1 -1
  568. package/fesm2022/fundamental-ngx-platform-object-status.mjs +7 -2
  569. package/fesm2022/fundamental-ngx-platform-object-status.mjs.map +1 -1
  570. package/fesm2022/fundamental-ngx-platform-page-footer.mjs.map +1 -1
  571. package/fesm2022/fundamental-ngx-platform-panel.mjs +10 -10
  572. package/fesm2022/fundamental-ngx-platform-panel.mjs.map +1 -1
  573. package/fesm2022/fundamental-ngx-platform-search-field.mjs +13 -13
  574. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  575. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
  576. package/fesm2022/fundamental-ngx-platform-shared.mjs +62 -62
  577. package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
  578. package/fesm2022/fundamental-ngx-platform-slider.mjs.map +1 -1
  579. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +20 -20
  580. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  581. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +7 -2
  582. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
  583. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +2925 -2922
  584. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  585. package/fesm2022/fundamental-ngx-platform-table.mjs +365 -360
  586. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  587. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +182 -98
  588. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  589. package/fesm2022/fundamental-ngx-platform-variant-management.mjs +177 -177
  590. package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  591. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +41 -41
  592. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
  593. package/form/combobox/combobox.config.d.ts +1 -1
  594. package/form/date-picker/date-picker.component.d.ts +5 -5
  595. package/form/datetime-picker/datetime-picker.component.d.ts +3 -3
  596. package/form/form-generator/dynamic-form-control.directive.d.ts +3 -3
  597. package/form/form-generator/form-generator.service.d.ts +2 -2
  598. package/form/form-group/pipes/field-group-row-value.pipe.d.ts +1 -1
  599. package/form/form-group/services/form-field-layout.service.d.ts +1 -1
  600. package/form/form-helpers.d.ts +1 -1
  601. package/form/input-group/addon.component.d.ts +1 -1
  602. package/form/multi-combobox/multi-combobox.config.d.ts +1 -1
  603. package/form/multi-input/index.d.ts +1 -1
  604. package/form/multi-input/multi-input.config.d.ts +1 -1
  605. package/form/select/commons/base-select.d.ts +4 -1
  606. package/form/step-input/base.step-input.d.ts +4 -5
  607. package/fundamental-ngx-platform-v0.48.0-rc.21.tgz +0 -0
  608. package/icon-tab-bar/index.d.ts +7 -7
  609. package/icon-tab-bar/interfaces/icon-tab-bar-item.interface.d.ts +1 -1
  610. package/list/index.d.ts +12 -12
  611. package/menu/index.d.ts +2 -2
  612. package/menu-button/index.d.ts +1 -1
  613. package/menu-button/menu-button.component.d.ts +5 -2
  614. package/message-popover/index.d.ts +4 -4
  615. package/message-popover/models/message-popover-entry.interface.d.ts +1 -1
  616. package/message-popover/models/message-popover.interface.d.ts +1 -1
  617. package/message-popover/utils.d.ts +1 -1
  618. package/object-marker/object-marker.component.d.ts +4 -1
  619. package/object-status/object-status.component.d.ts +4 -1
  620. package/package.json +4 -4
  621. package/panel/index.d.ts +2 -2
  622. package/schematics/ng-add/index.js +1 -1
  623. package/search-field/index.d.ts +1 -1
  624. package/settings-generator/index.d.ts +4 -4
  625. package/settings-generator/layouts/base-settings-generator-layout.d.ts +1 -1
  626. package/settings-generator/settings-generator.service.d.ts +2 -2
  627. package/shared/domain/array-data-source.d.ts +0 -3
  628. package/shared/form/collection-base.input.d.ts +1 -1
  629. package/shared/form/form-field.d.ts +2 -2
  630. package/shared/form/hint-options.d.ts +2 -2
  631. package/shared/form/inline-layout-collection-base.input.d.ts +1 -1
  632. package/shared/index.d.ts +3 -3
  633. package/smart-filter-bar/index.d.ts +7 -7
  634. package/smart-filter-bar/interfaces/smart-filter-bar-condition.d.ts +2 -2
  635. package/smart-filter-bar/interfaces/smart-filter-bar-custom-filter-config.d.ts +1 -1
  636. package/smart-filter-bar/interfaces/smart-filter-bar-field-definition.d.ts +1 -1
  637. package/smart-filter-bar/interfaces/smart-filter-dynamic-form-item.d.ts +1 -1
  638. package/smart-filter-bar/smart-filter-bar.service.d.ts +2 -2
  639. package/split-menu-button/split-menu-button.component.d.ts +5 -2
  640. package/table/components/index.d.ts +8 -8
  641. package/table/components/table-view-settings-dialog/index.d.ts +2 -2
  642. package/table/index.d.ts +14 -14
  643. package/table/table.component.d.ts +4 -0
  644. package/table-helpers/constants/index.d.ts +1 -1
  645. package/table-helpers/directives/index.d.ts +6 -6
  646. package/table-helpers/directives/platform-table-column-responsive.directive.d.ts +1 -1
  647. package/table-helpers/directives/table-scrollable.directive.d.ts +1 -1
  648. package/table-helpers/domain/array-data-source.d.ts +3 -3
  649. package/table-helpers/domain/index.d.ts +3 -3
  650. package/table-helpers/domain/observable-data-source.d.ts +3 -3
  651. package/table-helpers/enums/index.d.ts +3 -3
  652. package/table-helpers/helpers.d.ts +1 -1
  653. package/table-helpers/index.d.ts +8 -8
  654. package/table-helpers/interfaces/collection-filter.interface.d.ts +1 -1
  655. package/table-helpers/interfaces/collection-state.interface.d.ts +1 -1
  656. package/table-helpers/interfaces/index.d.ts +2 -3
  657. package/table-helpers/models/filter-change-event.model.d.ts +1 -1
  658. package/table-helpers/models/group-change-event.model.d.ts +1 -1
  659. package/table-helpers/models/index.d.ts +14 -14
  660. package/table-helpers/models/sort-change-event.model.d.ts +1 -1
  661. package/table-helpers/pipes/selection-cell-styles.pipe.d.ts +1 -1
  662. package/table-helpers/table.d.ts +1 -0
  663. package/value-help-dialog/components/select-tab/select-tab.component.d.ts +9 -2
  664. package/value-help-dialog/components/value-help-dialog-filter/value-help-dialog-filter.component.d.ts +5 -1
  665. package/value-help-dialog/constans/condition-display.function.d.ts +1 -1
  666. package/value-help-dialog/directives/value-help-column-def.directive.d.ts +17 -0
  667. package/value-help-dialog/directives/value-help-filter-def.directive.d.ts +15 -0
  668. package/value-help-dialog/index.d.ts +3 -2
  669. package/value-help-dialog/models/index.d.ts +1 -1
  670. package/value-help-dialog/models/vhd-component.model.d.ts +5 -0
  671. package/value-help-dialog/models/vhd-filter.model.d.ts +3 -0
  672. package/value-help-dialog/value-help-dialog/value-help-dialog.component.d.ts +8 -6
  673. package/variant-management/index.d.ts +3 -3
  674. package/variant-management/models/variant-management.d.ts +1 -1
  675. package/wizard-generator/base-wizard-generator.d.ts +1 -1
  676. package/wizard-generator/index.d.ts +9 -9
  677. package/wizard-generator/interfaces/wizard-generator-form-group.interface.d.ts +1 -1
  678. package/wizard-generator/interfaces/wizard-generator-item.interface.d.ts +1 -1
  679. package/wizard-generator/interfaces/wizard-step.interface.d.ts +2 -2
  680. package/wizard-generator/wizard-generator.service.d.ts +1 -1
  681. package/fundamental-ngx-platform-v0.48.0-rc.2.tgz +0 -0
  682. package/schematics/ng-add/index.ts +0 -64
  683. package/schematics/ng-add/schema.ts +0 -3
  684. package/schematics/utils/package-utils.ts +0 -104
@@ -756,7 +756,7 @@ export class ApprovalFlowComponent {
756
756
  this._subscriptions.add(sub);
757
757
  }
758
758
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: ApprovalFlowComponent, deps: [{ token: i1.DialogService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: DATA_PROVIDERS, optional: true }, { token: i2.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
759
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.4", type: ApprovalFlowComponent, isStandalone: true, selector: "fdp-approval-flow", inputs: { title: "title", value: "value", userDataSource: "userDataSource", watcherDataSource: "watcherDataSource", teamDataSource: "teamDataSource", userDetailsTemplate: "userDetailsTemplate", approvalStatusTemplate: "approvalStatusTemplate", statusColorMapping: "statusColorMapping", checkDueDate: "checkDueDate", dueDateThreshold: "dueDateThreshold", allowSendRemindersForStatuses: "allowSendRemindersForStatuses", isEditAvailable: "isEditAvailable", watchersLabel: "watchersLabel", allowAddParallelNodes: "allowAddParallelNodes", disableSaveButton: "disableSaveButton", disableExitButton: "disableExitButton", usersDataProviderEntityKey: "usersDataProviderEntityKey", teamsDataProviderEntityKey: "teamsDataProviderEntityKey", watchersDataProviderEntityKey: "watchersDataProviderEntityKey" }, outputs: { nodeClick: "nodeClick", afterNodeAdd: "afterNodeAdd", afterNodeEdit: "afterNodeEdit", valueChange: "valueChange", sendReminders: "sendReminders", onDataRequested: "onDataRequested", onDataReceived: "onDataReceived" }, providers: [ApprovalFlowAddNodeViewService], viewQueries: [{ propertyName: "_graphContainerEl", first: true, predicate: ["graphContainerEl"], descendants: true }, { propertyName: "_graphEl", first: true, predicate: ["graphEl"], descendants: true }, { propertyName: "_gridList", first: true, predicate: ["gridList"], descendants: true }, { propertyName: "_nodeComponents", predicate: ApprovalFlowNodeComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container fdCompact>\n <fdp-approval-flow-messages\n [(messages)]=\"_messages\"\n [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n (undoLastAction)=\"_undoLastAction()\"\n ></fdp-approval-flow-messages>\n <fd-grid-list\n #gridList\n class=\"fdp-approval-flow__toolbar\"\n [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n (selectionChange)=\"_onNodeSelectionChange($event)\"\n >\n <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)\">\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n @if (isEditAvailable) {\n <fdp-approval-flow-toolbar-actions\n [graph]=\"_graph\"\n [selectedNodes]=\"_selectedNodes\"\n [graphMetadata]=\"_graphMetadata\"\n [isEditMode]=\"_isEditMode\"\n (enterEditMode)=\"_enterEditMode()\"\n (addNode)=\"_addNode($event.node, $event.target)\"\n (editSelectedNode)=\"_editNode($event)\"\n (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n ></fdp-approval-flow-toolbar-actions>\n }\n </fd-grid-list-title-bar>\n @if (_approvalProcess.watchers?.length || _isEditMode) {\n <div class=\"fdp-approval-flow__watchers\" [attr.aria-label]=\"watchersLabel\">\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n @if (!_isEditMode) {\n @for (watcher of _approvalProcess.watchers; track _trackByFn($index, watcher)) {\n <fd-avatar\n size=\"xs\"\n [image]=\"watcher.imgUrl || ''\"\n [label]=\"watcher.name\"\n [clickable]=\"true\"\n [circle]=\"true\"\n (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n ></fd-avatar>\n }\n } @else {\n <div class=\"fdp-approval-flow__watchers-input-container\">\n <fd-multi-input\n [dropdownValues]=\"_usersForWatchersList\"\n [placeholder]=\"'platformApprovalFlow.watchersInputPlaceholder' | fdTranslate\"\n [displayFn]=\"_displayUserFn\"\n [valueFn]=\"_userValueFn\"\n [showAllButton]=\"true\"\n [(ngModel)]=\"_selectedWatcherIds\"\n (ngModelChange)=\"_watchersSelectionChanged($event)\"\n ></fd-multi-input>\n </div>\n }\n </div>\n }\n @if (!_graph.errors) {\n @if (_graph.columns.length) {\n <div\n class=\"fdp-approval-flow__container\"\n [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n >\n @if (_scrollDiff > 0) {\n <div\n class=\"fdp-approval-flow-carousel-controls\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n @if (_carouselStepsLeft > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.prevButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide(-1)\"\n >\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'right' : 'left') + '-arrow'\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n }\n @if (_carouselStepsRight > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.nextButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide()\"\n >\n {{ _carouselStepsRight }}\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </button>\n }\n </div>\n }\n <div\n class=\"fdp-approval-flow__graph-container\"\n [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n [class.fd-scrollbar]=\"true\"\n #graphContainerEl\n >\n <div\n class=\"fdp-approval-flow__graph\"\n #graphEl\n [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n >\n @for (column of _graph.columns; track column; let columnIndex = $index) {\n <div class=\"fdp-approval-flow__graph-column\">\n @for (\n node of column.nodes;\n track _trackByFn(nodeIndex, node);\n let nodeIndex = $index\n ) {\n <fdp-approval-flow-node\n cdkDrag\n #approvalFlowNode\n [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n [node]=\"node\"\n [meta]=\"_graphMetadata[node.id]\"\n [isEdit]=\"_isEditMode\"\n [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n [checkDueDate]=\"checkDueDate\"\n [dueDateThreshold]=\"dueDateThreshold\"\n [renderArrow]=\"columnIndex > 0\"\n [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n [approvalStatusTemplate]=\"approvalStatusTemplate\"\n [statusColorMapping]=\"statusColorMapping\"\n (onAdd)=\"_addNode(node, $event)\"\n (onEdit)=\"_editNode(node)\"\n (onDelete)=\"_onNodeDelete(node)\"\n (keydown)=\"_onNodeKeyDown($event, node)\"\n (cdkDragStarted)=\"_dragDropInProgress = true\"\n (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n >\n <!-- Trick with using projection to make grid list items visible for the grid list -->\n <fd-grid-list-item\n type=\"active\"\n [value]=\"node\"\n [selected]=\"!!node.selected\"\n [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n [disableToolbarClick]=\"true\"\n class=\"fdp-approval-flow__graph-node-inner\"\n [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n (press)=\"_onNodeClick(node)\"\n >\n <fd-grid-list-item-toolbar>\n @if (_isEditMode) {\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-template>\n }\n </fd-grid-list-item-toolbar>\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"\n node.approvers.length === 1 ? node.approvers[0].imgUrl : null\n \"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n <ng-template fd-grid-list-item-body>\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-template>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n }\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n <figcaption fd-illustrated-message-figcaption>\n <h3 fd-illustrated-message-title>\n {{ 'platformApprovalFlow.emptyTitle' | fdTranslate }}\n </h3>\n <p fd-illustrated-message-text>\n {{ 'platformApprovalFlow.emptyHint' | fdTranslate }}\n </p>\n </figcaption>\n </figure>\n <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n <div [style.display]=\"'none'\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"128\"\n height=\"128\"\n viewBox=\"0 0 128 128\"\n id=\"sapIllus-Spot-NoData\"\n >\n <path\n d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n class=\"sapIllus_PatternShadow\"\n style=\"fill: var(--sapIllus_PatternShadow)\"\n ></path>\n <path\n d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n class=\"sapIllus_ObjectFillColor\"\n style=\"fill: var(--sapIllus_ObjectFillColor)\"\n ></path>\n <path\n d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n class=\"sapIllus_BrandColorSecondary\"\n style=\"fill: var(--sapIllus_BrandColorSecondary)\"\n ></path>\n <path\n d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n class=\"sapIllus_StrokeDetailColor\"\n style=\"fill: var(--sapIllus_StrokeDetailColor)\"\n ></path>\n </svg>\n </div>\n }\n }\n </fd-grid-list>\n @if (_isEditMode) {\n <div fd-bar>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n [disabled]=\"disableSaveButton\"\n (click)=\"_saveEditModeChanges()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeExitButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n [disabled]=\"disableExitButton\"\n (click)=\"_exitEditMode()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n }\n</ng-container>\n", styles: ["/*!\n * Fundamental Library Styles v0.32.0\n * Copyright (c) 2023 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-scrollbar{-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:var(--sapContent_LineHeight);margin:0;overflow:auto;padding:0;scrollbar-color:var(--fdScrollbar_Thumb_Color) var(--fdScrollbar_Track_Color)}.fd-scrollbar:after,.fd-scrollbar:before{box-sizing:inherit;font-size:inherit}.fd-scrollbar.is-focus,.fd-scrollbar:focus{outline:none;z-index:5}.fd-scrollbar::-webkit-scrollbar{height:var(--fdScrollbar_Dimension);width:var(--fdScrollbar_Dimension)}.fd-scrollbar::-webkit-scrollbar-corner,.fd-scrollbar::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color)}.fd-scrollbar::-webkit-scrollbar-thumb{-webkit-box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color);background-color:transparent;border:var(--fdScrollbar_Thumb_Offset) solid transparent;border-radius:calc(var(--fdScrollbar_Thumb_Border_Radius) - var(--fdScrollbar_Thumb_Offset));box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color)}.fd-scrollbar::-webkit-scrollbar-thumb:active,.fd-scrollbar::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Hover_Color)}.fd-scrollbar--container::-webkit-scrollbar-corner,.fd-scrollbar--container::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color);border-radius:0 var(--fdScrollbar_Border_Radius) var(--fdScrollbar_Border_Radius) 0}.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-corner,.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-track,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-corner,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-track{border-radius:var(--fdScrollbar_Border_Radius) 0 0 var(--fdScrollbar_Border_Radius)}.fdp-approval-flow__watchers{margin-bottom:.5rem;padding-left:.5rem}.fdp-approval-flow__watchers-title{font-size:.875em;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);margin:1rem 0 .5rem}.fdp-approval-flow__watchers fd-avatar{margin-right:.5rem;cursor:pointer}.fdp-approval-flow__watchers fd-avatar:focus{outline-offset:.0625rem;outline-width:.0625rem;outline-style:dotted;outline-color:var(--sapContent_FocusColor, #0854a0)}.fdp-approval-flow__watchers .fdp-approval-flow__watchers-input-container{width:17.375rem}[dir=rtl] .fdp-approval-flow__watchers,.fdp-approval-flow__watchers[dir=rtl]{padding-right:.5rem}[dir=rtl] .fdp-approval-flow__watchers fd-avatar,.fdp-approval-flow__watchers[dir=rtl] fd-avatar{margin-left:.5rem;margin-right:0}.fdp-approval-flow__container{max-width:100%;position:relative;padding:0 .5rem}.fdp-approval-flow__container--extra-padding-start{padding-left:2rem}.fdp-approval-flow__container--extra-padding-end{padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start{padding-left:.5rem;padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-end{padding-right:.5rem;padding-left:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end{padding-right:2rem;padding-left:2rem}.fdp-approval-flow__graph-container{position:relative;overflow:auto;padding-top:.5rem;padding-bottom:2rem;padding-left:2rem}.fdp-approval-flow__graph-container--multiple-root-nodes{padding-left:4rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-root-nodes,.fdp-approval-flow__graph-container--multiple-root-nodes[dir=rtl]{padding-right:2rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-final-nodes,.fdp-approval-flow__graph-container--multiple-final-nodes[dir=rtl]{padding-left:0}.fdp-approval-flow-carousel-controls{position:absolute;display:flex;align-items:center;width:100%;height:6.375rem;padding-top:.5rem;left:0}.fdp-approval-flow-carousel-controls--edit-mode{height:8.375rem}.fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--next-slide{position:absolute;border:none;background:transparent;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);display:flex;justify-content:space-between;width:2rem;align-items:center;cursor:pointer}.fdp-approval-flow-carousel-controls__button--prev-slide fd-icon,.fdp-approval-flow-carousel-controls__button--next-slide fd-icon{font-size:.875rem;color:#0854a0;color:var(--sapButton_IconColor, #0854a0);position:relative;top:.0625rem}.fdp-approval-flow-carousel-controls__button--prev-slide{left:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--prev-slide[dir=rtl]{left:auto;right:0}.fdp-approval-flow-carousel-controls__button--next-slide{right:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--next-slide,.fdp-approval-flow-carousel-controls__button--next-slide[dir=rtl]{left:0;right:auto}.fdp-approval-flow__graph{display:flex;align-items:flex-start;position:relative;left:0;transition:left .3s}.fdp-approval-flow__graph-column{margin-right:4rem;position:relative}[dir=rtl] .fdp-approval-flow__graph-column:first-child,.fdp-approval-flow__graph-column[dir=rtl]:first-child{margin-right:2rem}.fdp-approval-flow__graph fdp-approval-flow-node+fdp-approval-flow-node:not(:last-child){margin-bottom:1rem}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner{padding:0}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content{margin-left:auto}[dir=rtl] .fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content,.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content[dir=rtl]{margin-left:0;margin-right:auto}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--actions{display:none}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner:not(.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner--edit) .fd-toolbar.fd-grid-list__item-toolbar{display:none}.cdk-overlay-container{z-index:1002!important}\n"], dependencies: [{ kind: "directive", type: ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: ApprovalFlowMessagesComponent, selector: "fdp-approval-flow-messages", inputs: ["messages", "undoLastActionAvailable"], outputs: ["messagesChange", "undoLastAction"] }, { kind: "component", type: GridListComponent, selector: "fd-grid-list", inputs: ["id", "width", "ariaLabel", "selectionMode", "layoutPattern"], outputs: ["selectionChange"] }, { kind: "component", type: GridListTitleBarComponent, selector: "fd-grid-list-title-bar", inputs: ["title"] }, { kind: "component", type: GridListTitleBarSpacerComponent, selector: "fd-grid-list-title-bar-spacer" }, { kind: "component", type: ApprovalFlowToolbarActionsComponent, selector: "fdp-approval-flow-toolbar-actions", inputs: ["graph", "graphMetadata", "selectedNodes", "isEditMode"], outputs: ["enterEditMode", "addNode", "editSelectedNode", "deleteSelectedNodes"] }, { kind: "component", type: AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: MultiInputComponent, selector: "fd-multi-input", inputs: ["placeholder", "disabled", "required", "compactCollapse", "maxHeight", "glyph", "dropdownValues", "openDropdownOnAddOnClicked", "searchTerm", "inputId", "highlight", "selected", "class", "filterFn", "valueFn", "displayFn", "newTokenParseFn", "optionItemIdentifier", "newTokenValidateFn", "ariaLabel", "ariaLabelledBy", "fillControlMode", "state", "buttonFocusable", "allowNewTokens", "mobile", "showAllButton", "bodyMaxWidth", "mobileConfig", "includes", "itemTemplate", "title", "byline", "autoComplete", "open", "displayAddonButton", "tokenHiddenId"], outputs: ["searchTermChange", "selectedChange", "openChange", "addOnButtonClicked", "allItemsSelectedChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: ApprovalFlowNodeComponent, selector: "fdp-approval-flow-node", inputs: ["node", "meta", "renderArrow", "checkDueDate", "dueDateThreshold", "allNodesInColumnApproved", "approvalStatusTemplate", "statusColorMapping", "isEdit", "isNextNodeBlank"], outputs: ["onAdd", "onEdit", "onDelete"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: GridListItemComponent, selector: "fd-grid-list-item", inputs: ["id", "width", "layoutItemPattern", "status", "counter", "value", "disableToolbarClick", "selected", "noPadding", "ariaLabel", "ariaLabelledBy", "type", "state", "isNavigated", "title", "description"], outputs: ["press", "detail", "delete", "navigate", "draft", "locked"] }, { kind: "component", type: GridListItemToolbarComponent, selector: "fd-grid-list-item-toolbar" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: GridListItemImageDirective, selector: "[fd-grid-list-item-image]" }, { kind: "directive", type: GridListItemBodyDirective, selector: "[fd-grid-list-item-body]" }, { kind: "component", type: BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: IllustratedMessageComponent, selector: "[fd-illustrated-message]", inputs: ["type", "svgConfig", "noSvg", "id", "class"] }, { kind: "component", type: IllustratedMessageFigcaptionComponent, selector: "[fd-illustrated-message-figcaption]" }, { kind: "directive", type: IllustratedMessageTitleDirective, selector: "[fd-illustrated-message-title]" }, { kind: "directive", type: IllustratedMessageTextDirective, selector: "[fd-illustrated-message-text]" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
759
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.4", type: ApprovalFlowComponent, isStandalone: true, selector: "fdp-approval-flow", inputs: { title: "title", value: "value", userDataSource: "userDataSource", watcherDataSource: "watcherDataSource", teamDataSource: "teamDataSource", userDetailsTemplate: "userDetailsTemplate", approvalStatusTemplate: "approvalStatusTemplate", statusColorMapping: "statusColorMapping", checkDueDate: "checkDueDate", dueDateThreshold: "dueDateThreshold", allowSendRemindersForStatuses: "allowSendRemindersForStatuses", isEditAvailable: "isEditAvailable", watchersLabel: "watchersLabel", allowAddParallelNodes: "allowAddParallelNodes", disableSaveButton: "disableSaveButton", disableExitButton: "disableExitButton", usersDataProviderEntityKey: "usersDataProviderEntityKey", teamsDataProviderEntityKey: "teamsDataProviderEntityKey", watchersDataProviderEntityKey: "watchersDataProviderEntityKey" }, outputs: { nodeClick: "nodeClick", afterNodeAdd: "afterNodeAdd", afterNodeEdit: "afterNodeEdit", valueChange: "valueChange", sendReminders: "sendReminders", onDataRequested: "onDataRequested", onDataReceived: "onDataReceived" }, providers: [ApprovalFlowAddNodeViewService], viewQueries: [{ propertyName: "_graphContainerEl", first: true, predicate: ["graphContainerEl"], descendants: true }, { propertyName: "_graphEl", first: true, predicate: ["graphEl"], descendants: true }, { propertyName: "_gridList", first: true, predicate: ["gridList"], descendants: true }, { propertyName: "_nodeComponents", predicate: ApprovalFlowNodeComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container fdCompact>\n <fdp-approval-flow-messages\n [(messages)]=\"_messages\"\n [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n (undoLastAction)=\"_undoLastAction()\"\n ></fdp-approval-flow-messages>\n <fd-grid-list\n #gridList\n class=\"fdp-approval-flow__toolbar\"\n [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n (selectionChange)=\"_onNodeSelectionChange($event)\"\n >\n <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)\">\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n @if (isEditAvailable) {\n <fdp-approval-flow-toolbar-actions\n [graph]=\"_graph\"\n [selectedNodes]=\"_selectedNodes\"\n [graphMetadata]=\"_graphMetadata\"\n [isEditMode]=\"_isEditMode\"\n (enterEditMode)=\"_enterEditMode()\"\n (addNode)=\"_addNode($event.node, $event.target)\"\n (editSelectedNode)=\"_editNode($event)\"\n (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n ></fdp-approval-flow-toolbar-actions>\n }\n </fd-grid-list-title-bar>\n @if (_approvalProcess.watchers?.length || _isEditMode) {\n <div class=\"fdp-approval-flow__watchers\" [attr.aria-label]=\"watchersLabel\">\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n @if (!_isEditMode) {\n @for (watcher of _approvalProcess.watchers; track _trackByFn($index, watcher)) {\n <fd-avatar\n size=\"xs\"\n [image]=\"watcher.imgUrl || ''\"\n [label]=\"watcher.name\"\n [clickable]=\"true\"\n [circle]=\"true\"\n (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n ></fd-avatar>\n }\n } @else {\n <div class=\"fdp-approval-flow__watchers-input-container\">\n <fd-multi-input\n [dropdownValues]=\"_usersForWatchersList\"\n [placeholder]=\"'platformApprovalFlow.watchersInputPlaceholder' | fdTranslate\"\n [displayFn]=\"_displayUserFn\"\n [valueFn]=\"_userValueFn\"\n [showAllButton]=\"true\"\n [(ngModel)]=\"_selectedWatcherIds\"\n (ngModelChange)=\"_watchersSelectionChanged($event)\"\n ></fd-multi-input>\n </div>\n }\n </div>\n }\n @if (!_graph.errors) {\n @if (_graph.columns.length) {\n <div\n class=\"fdp-approval-flow__container\"\n [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n >\n @if (_scrollDiff > 0) {\n <div\n class=\"fdp-approval-flow-carousel-controls\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n @if (_carouselStepsLeft > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.prevButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide(-1)\"\n >\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'right' : 'left') + '-arrow'\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n }\n @if (_carouselStepsRight > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.nextButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide()\"\n >\n {{ _carouselStepsRight }}\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </button>\n }\n </div>\n }\n <div\n class=\"fdp-approval-flow__graph-container\"\n [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n [class.fd-scrollbar]=\"true\"\n #graphContainerEl\n >\n <div\n class=\"fdp-approval-flow__graph\"\n #graphEl\n [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n >\n @for (column of _graph.columns; track column; let columnIndex = $index) {\n <div class=\"fdp-approval-flow__graph-column\">\n @for (\n node of column.nodes;\n track _trackByFn(nodeIndex, node);\n let nodeIndex = $index\n ) {\n <fdp-approval-flow-node\n cdkDrag\n #approvalFlowNode\n [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n [node]=\"node\"\n [meta]=\"_graphMetadata[node.id]\"\n [isEdit]=\"_isEditMode\"\n [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n [checkDueDate]=\"checkDueDate\"\n [dueDateThreshold]=\"dueDateThreshold\"\n [renderArrow]=\"columnIndex > 0\"\n [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n [approvalStatusTemplate]=\"approvalStatusTemplate\"\n [statusColorMapping]=\"statusColorMapping\"\n (onAdd)=\"_addNode(node, $event)\"\n (onEdit)=\"_editNode(node)\"\n (onDelete)=\"_onNodeDelete(node)\"\n (keydown)=\"_onNodeKeyDown($event, node)\"\n (cdkDragStarted)=\"_dragDropInProgress = true\"\n (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n >\n <!-- Trick with using projection to make grid list items visible for the grid list -->\n <fd-grid-list-item\n type=\"active\"\n [value]=\"node\"\n [selected]=\"!!node.selected\"\n [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n [disableToolbarClick]=\"true\"\n class=\"fdp-approval-flow__graph-node-inner\"\n [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n (press)=\"_onNodeClick(node)\"\n >\n <fd-grid-list-item-toolbar>\n @if (_isEditMode) {\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-template>\n }\n </fd-grid-list-item-toolbar>\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"\n node.approvers.length === 1 ? node.approvers[0].imgUrl : null\n \"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n <ng-template fd-grid-list-item-body>\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-template>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n }\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n <figcaption fd-illustrated-message-figcaption>\n <h3 fd-illustrated-message-title>\n {{ 'platformApprovalFlow.emptyTitle' | fdTranslate }}\n </h3>\n <p fd-illustrated-message-text>\n {{ 'platformApprovalFlow.emptyHint' | fdTranslate }}\n </p>\n </figcaption>\n </figure>\n <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n <div [style.display]=\"'none'\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"128\"\n height=\"128\"\n viewBox=\"0 0 128 128\"\n id=\"sapIllus-Spot-NoData\"\n >\n <path\n d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n class=\"sapIllus_PatternShadow\"\n style=\"fill: var(--sapIllus_PatternShadow)\"\n ></path>\n <path\n d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n class=\"sapIllus_ObjectFillColor\"\n style=\"fill: var(--sapIllus_ObjectFillColor)\"\n ></path>\n <path\n d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n class=\"sapIllus_BrandColorSecondary\"\n style=\"fill: var(--sapIllus_BrandColorSecondary)\"\n ></path>\n <path\n d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n class=\"sapIllus_StrokeDetailColor\"\n style=\"fill: var(--sapIllus_StrokeDetailColor)\"\n ></path>\n </svg>\n </div>\n }\n }\n </fd-grid-list>\n @if (_isEditMode) {\n <div fd-bar>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n [disabled]=\"disableSaveButton\"\n (click)=\"_saveEditModeChanges()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeExitButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n [disabled]=\"disableExitButton\"\n (click)=\"_exitEditMode()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n }\n</ng-container>\n", styles: ["/*!\n * Fundamental Library Styles v0.32.0\n * Copyright (c) 2023 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-scrollbar{-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:var(--sapContent_LineHeight);margin:0;overflow:auto;padding:0;scrollbar-color:var(--fdScrollbar_Thumb_Color) var(--fdScrollbar_Track_Color)}.fd-scrollbar:after,.fd-scrollbar:before{box-sizing:inherit;font-size:inherit}.fd-scrollbar.is-focus,.fd-scrollbar:focus{outline:none;z-index:5}.fd-scrollbar::-webkit-scrollbar{height:var(--fdScrollbar_Dimension);width:var(--fdScrollbar_Dimension)}.fd-scrollbar::-webkit-scrollbar-corner,.fd-scrollbar::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color)}.fd-scrollbar::-webkit-scrollbar-thumb{-webkit-box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color);background-color:transparent;border:var(--fdScrollbar_Thumb_Offset) solid transparent;border-radius:calc(var(--fdScrollbar_Thumb_Border_Radius) - var(--fdScrollbar_Thumb_Offset));box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color)}.fd-scrollbar::-webkit-scrollbar-thumb:active,.fd-scrollbar::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Hover_Color)}.fd-scrollbar--container::-webkit-scrollbar-corner,.fd-scrollbar--container::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color);border-radius:0 var(--fdScrollbar_Border_Radius) var(--fdScrollbar_Border_Radius) 0}.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-corner,.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-track,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-corner,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-track{border-radius:var(--fdScrollbar_Border_Radius) 0 0 var(--fdScrollbar_Border_Radius)}.fdp-approval-flow__watchers{margin-bottom:.5rem;padding-left:.5rem}.fdp-approval-flow__watchers-title{font-size:.875em;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);margin:1rem 0 .5rem}.fdp-approval-flow__watchers fd-avatar{margin-right:.5rem;cursor:pointer}.fdp-approval-flow__watchers fd-avatar:focus{outline-offset:.0625rem;outline-width:.0625rem;outline-style:dotted;outline-color:var(--sapContent_FocusColor, #0854a0)}.fdp-approval-flow__watchers .fdp-approval-flow__watchers-input-container{width:17.375rem}[dir=rtl] .fdp-approval-flow__watchers,.fdp-approval-flow__watchers[dir=rtl]{padding-right:.5rem}[dir=rtl] .fdp-approval-flow__watchers fd-avatar,.fdp-approval-flow__watchers[dir=rtl] fd-avatar{margin-left:.5rem;margin-right:0}.fdp-approval-flow__container{max-width:100%;position:relative;padding:0 .5rem}.fdp-approval-flow__container--extra-padding-start{padding-left:2rem}.fdp-approval-flow__container--extra-padding-end{padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start{padding-left:.5rem;padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-end{padding-right:.5rem;padding-left:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end{padding-right:2rem;padding-left:2rem}.fdp-approval-flow__graph-container{position:relative;overflow:auto;padding-top:.5rem;padding-bottom:2rem;padding-left:2rem}.fdp-approval-flow__graph-container--multiple-root-nodes{padding-left:4rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-root-nodes,.fdp-approval-flow__graph-container--multiple-root-nodes[dir=rtl]{padding-right:2rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-final-nodes,.fdp-approval-flow__graph-container--multiple-final-nodes[dir=rtl]{padding-left:0}.fdp-approval-flow-carousel-controls{position:absolute;display:flex;align-items:center;width:100%;height:6.375rem;padding-top:.5rem;left:0}.fdp-approval-flow-carousel-controls--edit-mode{height:8.375rem}.fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--next-slide{position:absolute;border:none;background:transparent;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);display:flex;justify-content:space-between;width:2rem;align-items:center;cursor:pointer}.fdp-approval-flow-carousel-controls__button--prev-slide fd-icon,.fdp-approval-flow-carousel-controls__button--next-slide fd-icon{font-size:.875rem;color:#0854a0;color:var(--sapButton_IconColor, #0854a0);position:relative;top:.0625rem}.fdp-approval-flow-carousel-controls__button--prev-slide{left:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--prev-slide[dir=rtl]{left:auto;right:0}.fdp-approval-flow-carousel-controls__button--next-slide{right:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--next-slide,.fdp-approval-flow-carousel-controls__button--next-slide[dir=rtl]{left:0;right:auto}.fdp-approval-flow__graph{display:flex;align-items:flex-start;position:relative;left:0;transition:left .3s}.fdp-approval-flow__graph-column{margin-right:4rem;position:relative}[dir=rtl] .fdp-approval-flow__graph-column:first-child,.fdp-approval-flow__graph-column[dir=rtl]:first-child{margin-right:2rem}.fdp-approval-flow__graph fdp-approval-flow-node+fdp-approval-flow-node:not(:last-child){margin-bottom:1rem}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner{padding:0}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content{margin-left:auto}[dir=rtl] .fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content,.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content[dir=rtl]{margin-left:0;margin-right:auto}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--actions{display:none}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner:not(.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner--edit) .fd-toolbar.fd-grid-list__item-toolbar{display:none}.cdk-overlay-container{z-index:1002!important}\n"], dependencies: [{ kind: "directive", type: ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: ApprovalFlowMessagesComponent, selector: "fdp-approval-flow-messages", inputs: ["messages", "undoLastActionAvailable"], outputs: ["messagesChange", "undoLastAction"] }, { kind: "component", type: GridListComponent, selector: "fd-grid-list", inputs: ["id", "width", "ariaLabel", "selectionMode", "layoutPattern"], outputs: ["selectionChange"] }, { kind: "component", type: GridListTitleBarComponent, selector: "fd-grid-list-title-bar", inputs: ["title"] }, { kind: "component", type: GridListTitleBarSpacerComponent, selector: "fd-grid-list-title-bar-spacer" }, { kind: "component", type: ApprovalFlowToolbarActionsComponent, selector: "fdp-approval-flow-toolbar-actions", inputs: ["graph", "graphMetadata", "selectedNodes", "isEditMode"], outputs: ["enterEditMode", "addNode", "editSelectedNode", "deleteSelectedNodes"] }, { kind: "component", type: AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: MultiInputComponent, selector: "fd-multi-input", inputs: ["placeholder", "disabled", "required", "compactCollapse", "maxHeight", "glyph", "glyphFont", "dropdownValues", "openDropdownOnAddOnClicked", "searchTerm", "inputId", "highlight", "selected", "class", "filterFn", "valueFn", "displayFn", "newTokenParseFn", "optionItemIdentifier", "newTokenValidateFn", "ariaLabel", "ariaLabelledBy", "fillControlMode", "state", "buttonFocusable", "allowNewTokens", "mobile", "showAllButton", "bodyMaxWidth", "mobileConfig", "includes", "itemTemplate", "title", "byline", "autoComplete", "open", "displayAddonButton", "tokenHiddenId"], outputs: ["searchTermChange", "selectedChange", "openChange", "addOnButtonClicked", "allItemsSelectedChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: ApprovalFlowNodeComponent, selector: "fdp-approval-flow-node", inputs: ["node", "meta", "renderArrow", "checkDueDate", "dueDateThreshold", "allNodesInColumnApproved", "approvalStatusTemplate", "statusColorMapping", "isEdit", "isNextNodeBlank"], outputs: ["onAdd", "onEdit", "onDelete"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: GridListItemComponent, selector: "fd-grid-list-item", inputs: ["id", "width", "layoutItemPattern", "status", "counter", "value", "disableToolbarClick", "selected", "noPadding", "ariaLabel", "ariaLabelledBy", "type", "state", "isNavigated", "title", "description"], outputs: ["press", "detail", "delete", "navigate", "draft", "locked"] }, { kind: "component", type: GridListItemToolbarComponent, selector: "fd-grid-list-item-toolbar" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: GridListItemImageDirective, selector: "[fd-grid-list-item-image]" }, { kind: "directive", type: GridListItemBodyDirective, selector: "[fd-grid-list-item-body]" }, { kind: "component", type: BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: IllustratedMessageComponent, selector: "[fd-illustrated-message]", inputs: ["type", "svgConfig", "noSvg", "id", "class"] }, { kind: "component", type: IllustratedMessageFigcaptionComponent, selector: "[fd-illustrated-message-figcaption]" }, { kind: "directive", type: IllustratedMessageTitleDirective, selector: "[fd-illustrated-message-title]" }, { kind: "directive", type: IllustratedMessageTextDirective, selector: "[fd-illustrated-message-text]" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
760
760
  }
761
761
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: ApprovalFlowComponent, decorators: [{
762
762
  type: Component,
@@ -860,4 +860,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImpor
860
860
  type: ViewChildren,
861
861
  args: [ApprovalFlowNodeComponent]
862
862
  }] } });
863
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvYXBwcm92YWwtZmxvdy9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9hcHByb3ZhbC1mbG93L2FwcHJvdmFsLWZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RixPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQTBCLE1BQU0saUNBQWlDLENBQUM7QUFFNUYsT0FBTyxFQUFF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R0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUlOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQU9HLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFPRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBT0csNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUdJLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0csWUFBWTtzQkFBckIsTUFBTTtnQkFHRyxhQUFhO3NCQUF0QixNQUFNO2dCQUdHLFdBQVc7c0JBQXBCLE1BQU07Z0JBR0csYUFBYTtzQkFBdEIsTUFBTTtnQkFJRyxlQUFlO3NCQUF4QixNQUFNO2dCQUlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBR3dCLGlCQUFpQjtzQkFBL0MsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBR1AsUUFBUTtzQkFBN0IsU0FBUzt1QkFBQyxTQUFTO2dCQUdHLFNBQVM7c0JBQS9CLFNBQVM7dUJBQUMsVUFBVTtnQkFHb0IsZUFBZTtzQkFBdkQsWUFBWTt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBtYXBUbywgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5VXRpbCwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IEdyaWRMaXN0Q29tcG9uZW50LCBHcmlkTGlzdFNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2dyaWQtbGlzdCc7XG5cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBdmF0YXJDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYXZhdGFyJztcbmltcG9ydCB7IEJhckNvbXBvbmVudCwgQmFyRWxlbWVudERpcmVjdGl2ZSwgQmFyUmlnaHREaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYmFyJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXR0b24nO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7XG4gICAgR3JpZExpc3RJdGVtQm9keURpcmVjdGl2ZSxcbiAgICBHcmlkTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgR3JpZExpc3RJdGVtSW1hZ2VEaXJlY3RpdmUsXG4gICAgR3JpZExpc3RJdGVtVG9vbGJhckNvbXBvbmVudCxcbiAgICBHcmlkTGlzdFRpdGxlQmFyQ29tcG9uZW50LFxuICAgIEdyaWRMaXN0VGl0bGVCYXJTcGFjZXJDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2dyaWQtbGlzdCc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2ljb24nO1xuaW1wb3J0IHtcbiAgICBJbGx1c3RyYXRlZE1lc3NhZ2VDb21wb25lbnQsXG4gICAgSWxsdXN0cmF0ZWRNZXNzYWdlRmlnY2FwdGlvbkNvbXBvbmVudCxcbiAgICBJbGx1c3RyYXRlZE1lc3NhZ2VUZXh0RGlyZWN0aXZlLFxuICAgIElsbHVzdHJhdGVkTWVzc2FnZVRpdGxlRGlyZWN0aXZlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbGx1c3RyYXRlZC1tZXNzYWdlJztcbmltcG9ydCB7IE11bHRpSW5wdXRDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbXVsdGktaW5wdXQnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdHVzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL29iamVjdC1zdGF0dXMnO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxGbG93VGVhbURhdGFTb3VyY2UsXG4gICAgQXBwcm92YWxGbG93VXNlckRhdGFTb3VyY2UsXG4gICAgREFUQV9QUk9WSURFUlMsXG4gICAgRGF0YVByb3ZpZGVyXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IGNsb25lRGVlcCwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gICAgQVBQUk9WQUxfRkxPV19OT0RFX1RZUEVTLFxuICAgIEFkZE5vZGVEaWFsb2dGb3JtRGF0YSxcbiAgICBBZGROb2RlRGlhbG9nUmVmRGF0YSxcbiAgICBBcHByb3ZhbEZsb3dBZGROb2RlQ29tcG9uZW50LFxuICAgIEFwcHJvdmFsRmxvd05vZGVUYXJnZXRcbn0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LWFkZC1ub2RlL2FwcHJvdmFsLWZsb3ctYWRkLW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzQ29tcG9uZW50LFxuICAgIEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0RpYWxvZ1JlZkRhdGFcbn0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LWFwcHJvdmVyLWRldGFpbHMvYXBwcm92YWwtZmxvdy1hcHByb3Zlci1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd0dyYXBoLFxuICAgIEFwcHJvdmFsR3JhcGhNZXRhZGF0YSxcbiAgICBnZW5lcmF0ZUFwcHJvdmFsRmxvd0dyYXBoLFxuICAgIGdlbmVyYXRlQXBwcm92YWxGbG93R3JhcGhNZXRhZGF0YVxufSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctZ3JhcGgnO1xuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dNZXNzYWdlLFxuICAgIEFwcHJvdmFsRmxvd01lc3NhZ2VUeXBlLFxuICAgIEFwcHJvdmFsRmxvd01lc3NhZ2VzQ29tcG9uZW50XG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1tZXNzYWdlcy9hcHByb3ZhbC1mbG93LW1lc3NhZ2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcHByb3ZhbEZsb3dOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LW5vZGUvYXBwcm92YWwtZmxvdy1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd1NlbGVjdFR5cGVDb21wb25lbnQsXG4gICAgU2VsZWN0VHlwZURpYWxvZ0Zvcm1EYXRhXG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1zZWxlY3QtdHlwZS9hcHByb3ZhbC1mbG93LXNlbGVjdC10eXBlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcHByb3ZhbEZsb3dUb29sYmFyQWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vYXBwcm92YWwtZmxvdy10b29sYmFyLWFjdGlvbnMvYXBwcm92YWwtZmxvdy10b29sYmFyLWFjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgZGlzcGxheVVzZXJGbixcbiAgICBnZXRCbGFua0FwcHJvdmFsR3JhcGhOb2RlLFxuICAgIGdldEdyYXBoTm9kZXMsXG4gICAgaXNOb2RlVGFyZ2V0c0luY2x1ZGVJZCxcbiAgICB0cmFja0J5Rm4sXG4gICAgdXNlclZhbHVlRm5cbn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxHcmFwaE5vZGUsXG4gICAgQXBwcm92YWxHcmFwaE5vZGVNZXRhZGF0YSxcbiAgICBBcHByb3ZhbE5vZGUsXG4gICAgQXBwcm92YWxQcm9jZXNzLFxuICAgIEFwcHJvdmFsU3RhdHVzLFxuICAgIEFwcHJvdmFsVGVhbSxcbiAgICBBcHByb3ZhbFVzZXIsXG4gICAgU2VuZFJlbWluZGVyc0RhdGFcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFwcHJvdmFsRmxvd0FkZE5vZGVWaWV3U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXBwcm92YWwtZmxvdy1hZGQtbm9kZS12aWV3LnNlcnZpY2UnO1xuXG5sZXQgZGVmYXVsdElkID0gMDtcbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjQwLjBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtYXBwcm92YWwtZmxvdycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FwcHJvdmFsLWZsb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW0FwcHJvdmFsRmxvd0FkZE5vZGVWaWV3U2VydmljZV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbnRlbnREZW5zaXR5RGlyZWN0aXZlLFxuICAgICAgICBBcHByb3ZhbEZsb3dNZXNzYWdlc0NvbXBvbmVudCxcbiAgICAgICAgR3JpZExpc3RDb21wb25lbnQsXG4gICAgICAgIEdyaWRMaXN0VGl0bGVCYXJDb21wb25lbnQsXG4gICAgICAgIEdyaWRMaXN0VGl0bGVCYXJTcGFjZXJDb21wb25lbnQsXG4gICAgICAgIEFwcHJvdmFsRmxvd1Rvb2xiYXJBY3Rpb25zQ29tcG9uZW50LFxuICAgICAgICBBdmF0YXJDb21wb25lbnQsXG4gICAgICAgIE11bHRpSW5wdXRDb21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBBcHByb3ZhbEZsb3dOb2RlQ29tcG9uZW50LFxuICAgICAgICBDZGtEcmFnLFxuICAgICAgICBHcmlkTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgICAgIEdyaWRMaXN0SXRlbVRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIEdyaWRMaXN0SXRlbUltYWdlRGlyZWN0aXZlLFxuICAgICAgICBHcmlkTGlzdEl0ZW1Cb2R5RGlyZWN0aXZlLFxuICAgICAgICBCYXJDb21wb25lbnQsXG4gICAgICAgIEJhclJpZ2h0RGlyZWN0aXZlLFxuICAgICAgICBCYXJFbGVtZW50RGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIElsbHVzdHJhdGVkTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgSWxsdXN0cmF0ZWRNZXNzYWdlRmlnY2FwdGlvbkNvbXBvbmVudCxcbiAgICAgICAgSWxsdXN0cmF0ZWRNZXNzYWdlVGl0bGVEaXJlY3RpdmUsXG4gICAgICAgIElsbHVzdHJhdGVkTWVzc2FnZVRleHREaXJlY3RpdmUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQXBwcm92YWxGbG93Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgLyoqIFRpdGxlIHdoaWNoIGlzIGRpc3BsYXllZCBpbiB0aGUgaGVhZGVyIG9mIHRoZSBBcHByb3ZhbCBGbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFZhbHVlIG9mIHRoZSBhcHByb3ZhbCBmbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB2YWx1ZTogQXBwcm92YWxQcm9jZXNzO1xuXG4gICAgLyoqIERhdGEgc291cmNlIGZvciB0aGUgdXNlcnMgb2YgQXBwcm92YWwgRmxvdyBjb21wb25lbnQuICovXG4gICAgQElucHV0KCkgdXNlckRhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlPEFwcHJvdmFsVXNlcj47XG5cbiAgICAvKiogRGF0YSBzb3VyY2UgZm9yIHRoZSB3YXRjaGVycyBvZiBBcHByb3ZhbCBGbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB3YXRjaGVyRGF0YVNvdXJjZTogQXBwcm92YWxGbG93VXNlckRhdGFTb3VyY2U8QXBwcm92YWxVc2VyPjtcblxuICAgIC8qKiBEYXRhIHNvdXJjZSBmb3IgdGhlIHRlYW1zIG9mIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHRlYW1EYXRhU291cmNlOiBBcHByb3ZhbEZsb3dUZWFtRGF0YVNvdXJjZTxBcHByb3ZhbFRlYW0+O1xuXG4gICAgLyoqIEEgcmVmZXJlbmNlIHRvIHRoZSB1c2VyIGRldGFpbHMgdGVtcGxhdGUgKi9cbiAgICBASW5wdXQoKSB1c2VyRGV0YWlsc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEEgcmVmZXJlbmNlIHRvIHRoZSBhcHAgY3VzdG9tIHN0YXR1c2VzICovXG4gICAgQElucHV0KCkgYXBwcm92YWxTdGF0dXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBDdXN0b20gc3RhdHVzIHRvIGNvbG9yIG1hcHBpbmcgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0dXNDb2xvck1hcHBpbmc6IFJlY29yZDxBcHByb3ZhbFN0YXR1cywgT2JqZWN0U3RhdHVzPjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgZHVlIGRhdGUgd2FybmluZyBpbiBzdGF0dXMgKi9cbiAgICBASW5wdXQoKSBjaGVja0R1ZURhdGUgPSBmYWxzZTtcblxuICAgIC8qKiBOdW1iZXIgb2YgZGF5cyBiZWZvcmUgZHVlIGRhdGUgd2hlbiBzdGF0dXMgY2hhbmdlcyB0byBgd2FybmluZ2Agd2l0aCB0ZXh0ICdEdWUgaW4gWCBkYXlzJy5cbiAgICAgKiAgTm90IHVzZWQgaWYgJ2NoZWNrRHVlRGF0ZScgZXF1YWxzIGZhbHNlICovXG4gICAgQElucHV0KCkgZHVlRGF0ZVRocmVzaG9sZCA9IDc7XG5cbiAgICAvKiogQSBsaXN0IG9mIGFwcHJvdmFsIHN0YXR1c2VzIHRoYXQgYWxsb3cgc2VuZGluZyByZW1pbmRlcnMgdG8gdGhlaXIgYXBwcm92ZXJzICovXG4gICAgQElucHV0KCkgYWxsb3dTZW5kUmVtaW5kZXJzRm9yU3RhdHVzZXM6IEFwcHJvdmFsU3RhdHVzW10gPSBbJ2luIHByb2dyZXNzJywgJ25vdCBzdGFydGVkJ107XG5cbiAgICAvKiogV2hldGhlciB0aGUgYXBwcm92YWwgZmxvdyBpcyBlZGl0YWJsZSAqL1xuICAgIEBJbnB1dCgpIGlzRWRpdEF2YWlsYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqIFRleHQgbGFiZWwgZm9yIHdhdGNoZXJzIGxpc3QgKi9cbiAgICBASW5wdXQoKSB3YXRjaGVyc0xhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogRW5hYmxlcyBvciBkaXNhYmxlcyBhYmlsaXR5IHRvIGFkZCBwYXJhbGxlbCBub2RlcyAqL1xuICAgIEBJbnB1dCgpIGFsbG93QWRkUGFyYWxsZWxOb2RlcyA9IHRydWU7XG5cbiAgICAvKiogRGlzYWJsZXMgc2F2ZSBidXR0b24sIHNhdmUgYnV0dG9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpIGRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKiogRGlzYWJsZXMgZXhpdCBidXR0b24sIGV4aXQgYnV0dG9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpIGRpc2FibGVFeGl0QnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHVzZXJzIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC5cbiAgICAgKiBJbnRlcm5hbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGxvb2t1cCB0byBzb21lIHJlZ2lzdHJ5XG4gICAgICogYW5kIHJldHJpZXZlIHRoZSBiZXN0IG1hdGNoaW5nIERhdGFQcm92aWRlciB0aGF0IGlzIHNldCBvbiBhcHBsaWNhdGlvbiBsZXZlbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHVzZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZW50aXR5IGZvciB3aGljaCB0ZWFtcyBEYXRhUHJvdmlkZXIgd2lsbCBiZSBsb2FkZWQuXG4gICAgICogSW50ZXJuYWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyBsb29rdXAgdG8gc29tZSByZWdpc3RyeVxuICAgICAqIGFuZCByZXRyaWV2ZSB0aGUgYmVzdCBtYXRjaGluZyBEYXRhUHJvdmlkZXIgdGhhdCBpcyBzZXQgb24gYXBwbGljYXRpb24gbGV2ZWxcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0ZWFtc0RhdGFQcm92aWRlckVudGl0eUtleT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIGVudGl0eSBmb3Igd2hpY2ggYXBwcm92YWwgZmxvdyBEYXRhUHJvdmlkZXIgd2lsbCBiZSBsb2FkZWQuXG4gICAgICogSW50ZXJuYWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyBsb29rdXAgdG8gc29tZSByZWdpc3RyeVxuICAgICAqIGFuZCByZXRyaWV2ZSB0aGUgYmVzdCBtYXRjaGluZyBEYXRhUHJvdmlkZXIgdGhhdCBpcyBzZXQgb24gYXBwbGljYXRpb24gbGV2ZWxcbiAgICAgKi9cbiAgICBASW5wdXQoKSB3YXRjaGVyc0RhdGFQcm92aWRlckVudGl0eUtleT86IHN0cmluZztcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIG9uIGFwcHJvdmFsIGZsb3cgbm9kZSBjbGljay4gKi9cbiAgICBAT3V0cHV0KCkgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxBcHByb3ZhbE5vZGU+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCBvbiBhcHByb3ZhbCBmbG93IG5vZGUgYWRkICovXG4gICAgQE91dHB1dCgpIGFmdGVyTm9kZUFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8QXBwcm92YWxOb2RlPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgb24gYXBwcm92YWwgZmxvdyBub2RlIGVkaXQgKi9cbiAgICBAT3V0cHV0KCkgYWZ0ZXJOb2RlRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8QXBwcm92YWxOb2RlPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbnZlciBzYXZlIGlzIGNsaWNrZWQgaW4gZWRpdCBtb2RlICAqL1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXBwcm92YWxQcm9jZXNzPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbmV2ZXIgcmVtaW5kZXJzIHNob3VsZCBiZSBzZW50ICovXG4gICAgQE91dHB1dCgpIHNlbmRSZW1pbmRlcnMgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbmRSZW1pbmRlcnNEYXRhPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkYXRhIGxvYWRpbmcgaXMgc3RhcnRlZC4gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBAT3V0cHV0KCkgb25EYXRhUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkYXRhIGxvYWRpbmcgaXMgZmluaXNoZWQuICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgQE91dHB1dCgpIG9uRGF0YVJlY2VpdmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdncmFwaENvbnRhaW5lckVsJykgX2dyYXBoQ29udGFpbmVyRWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdncmFwaEVsJykgX2dyYXBoRWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdncmlkTGlzdCcpIF9ncmlkTGlzdDogR3JpZExpc3RDb21wb25lbnQ8QXBwcm92YWxHcmFwaE5vZGU+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKEFwcHJvdmFsRmxvd05vZGVDb21wb25lbnQpIF9ub2RlQ29tcG9uZW50czogUXVlcnlMaXN0PEFwcHJvdmFsRmxvd05vZGVDb21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYXBwcm92YWxQcm9jZXNzOiBBcHByb3ZhbFByb2Nlc3M7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pbml0aWFsQXBwcm92YWxQcm9jZXNzPzogQXBwcm92YWxQcm9jZXNzO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcHJldmlvdXNBcHByb3ZhbFByb2Nlc3M/OiBBcHByb3ZhbFByb2Nlc3M7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9ncmFwaDogQXBwcm92YWxGbG93R3JhcGg7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc0Nhcm91c2VsID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9ncmFwaE1ldGFkYXRhOiBBcHByb3ZhbEdyYXBoTWV0YWRhdGEgPSB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzRWRpdE1vZGUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3VzZXJzRm9yV2F0Y2hlcnNMaXN0OiBBcHByb3ZhbFVzZXJbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZFdhdGNoZXJzOiBBcHByb3ZhbFVzZXJbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VsZWN0ZWRXYXRjaGVySWRzOiBBcHByb3ZhbFVzZXJbJ2lkJ11bXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbWVzc2FnZXM6IEFwcHJvdmFsRmxvd01lc3NhZ2VbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGlzcGxheVVzZXJGbiA9IGRpc3BsYXlVc2VyRm47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF91c2VyVmFsdWVGbiA9IHVzZXJWYWx1ZUZuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdHJhY2tCeUZuID0gdHJhY2tCeUZuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZW1wdHlBcHByb3ZhbEZsb3dTcG90Q29uZmlnID0ge1xuICAgICAgICBzcG90OiB7IHVybDogJycsIGlkOiAnc2FwSWxsdXMtU3BvdC1Ob0RhdGEnIH1cbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbXVsdGlwbGVSb290Tm9kZXMgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX211bHRpcGxlRmluYWxOb2RlcyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZHJhZ0Ryb3BJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IGFwcHJvdmFsRmxvd1VuaXF1ZUlkID0gYGZkcC1hcHByb3ZhbC1mbG93LSR7KytkZWZhdWx0SWR9YDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZWRpdE1vZGVJbml0U3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RhdGFTb3VyY2VDaGFuZ2VkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFUQV9QUk9WSURFUlMpIHByaXZhdGUgcHJvdmlkZXJzOiBNYXA8c3RyaW5nLCBEYXRhUHJvdmlkZXI8YW55Pj4sXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0FwcHJvdmFsRmxvd0NvbXBvbmVudCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCByZWxlYXNlLicpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IGFuZCBpbml0aWFsIHN0YXRlcyBvZiBhcHByb3ZhbCBwcm9jZXNzICovXG4gICAgZ2V0IGFwcHJvdmFsUHJvY2VzcygpOiBBcHByb3ZhbFByb2Nlc3Mge1xuICAgICAgICByZXR1cm4gY2xvbmVEZWVwKHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3J0bCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zZWxlY3RlZE5vZGVzKCk6IEFwcHJvdmFsR3JhcGhOb2RlW10ge1xuICAgICAgICByZXR1cm4gZ2V0R3JhcGhOb2Rlcyh0aGlzLl9ncmFwaCkuZmlsdGVyKChub2RlKSA9PiBub2RlLnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudXNlckRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJzRFAgPSB0aGlzLnVzZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5ICYmIHRoaXMucHJvdmlkZXJzPy5nZXQodGhpcy51c2Vyc0RhdGFQcm92aWRlckVudGl0eUtleSk7XG4gICAgICAgICAgICBpZiAodXNlcnNEUCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlckRhdGFTb3VyY2UgPSBuZXcgQXBwcm92YWxGbG93VXNlckRhdGFTb3VyY2UodXNlcnNEUCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIHVzZXJzIGRhdGEgc291cmNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXJEYXRhU291cmNlKSB7XG4gICAgICAgICAgICBjb25zdCB3YXRjaGVyc0RQID1cbiAgICAgICAgICAgICAgICB0aGlzLndhdGNoZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5ICYmIHRoaXMucHJvdmlkZXJzPy5nZXQodGhpcy53YXRjaGVyc0RhdGFQcm92aWRlckVudGl0eUtleSk7XG4gICAgICAgICAgICBpZiAod2F0Y2hlcnNEUCkge1xuICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hlckRhdGFTb3VyY2UgPSBuZXcgQXBwcm92YWxGbG93VXNlckRhdGFTb3VyY2Uod2F0Y2hlcnNEUCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIHdhdGNoZXJzIGRhdGEgc291cmNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnRlYW1EYXRhU291cmNlKSB7XG4gICAgICAgICAgICBjb25zdCB0ZWFtc0RQID0gdGhpcy50ZWFtc0RhdGFQcm92aWRlckVudGl0eUtleSAmJiB0aGlzLnByb3ZpZGVycz8uZ2V0KHRoaXMudGVhbXNEYXRhUHJvdmlkZXJFbnRpdHlLZXkpO1xuICAgICAgICAgICAgaWYgKHRlYW1zRFApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlYW1EYXRhU291cmNlID0gbmV3IEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlKHRlYW1zRFApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSB0ZWFtcyBkYXRhIHNvdXJjZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuT25SZXNpemUoKTtcbiAgICAgICAgdGhpcy5fc2V0dXBEYXRhU291cmNlU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzID0gdGhpcy52YWx1ZSA/PyB7IHdhdGNoZXJzOiBbXSwgbm9kZXM6IFtdIH07XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsQXBwcm92YWxQcm9jZXNzID0gY2xvbmVEZWVwKHByb2Nlc3MpO1xuICAgICAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHByb2Nlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMudXNlckRhdGFTb3VyY2UgfHwgY2hhbmdlcy53YXRjaGVyRGF0YVNvdXJjZSB8fCBjaGFuZ2VzLnRlYW1EYXRhU291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlQ2hhbmdlZCQubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzTmV4dE5vZGVCbGFuayhub2RlOiBBcHByb3ZhbEdyYXBoTm9kZSwgY29sdW1uSW5kZXg6IG51bWJlciwgbm9kZUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbmV4dE5vZGUgPSB0aGlzLl9ncmFwaC5jb2x1bW5zW2NvbHVtbkluZGV4ICsgMV0/Lm5vZGVzW25vZGVJbmRleF07XG4gICAgICAgIGNvbnN0IG5leHROb2RlQmxhbmsgPSBuZXh0Tm9kZT8uYmxhbms7XG4gICAgICAgIGNvbnN0IG5leHROb2RlUGFyYWxsZWxFbmQgPSB0aGlzLl9ncmFwaE1ldGFkYXRhW25leHROb2RlPy5pZF0/LnBhcmFsbGVsRW5kO1xuXG4gICAgICAgIHJldHVybiAhbm9kZS5ibGFuayAmJiAhIW5leHROb2RlQmxhbmsgJiYgIW5leHROb2RlUGFyYWxsZWxFbmQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNDZGtEcmFnRGlzYWJsZWQobm9kZTogQXBwcm92YWxHcmFwaE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9pc0VkaXRNb2RlIHx8IG5vZGUuYmxhbmsgfHwgbm9kZS5zcGFjZSB8fCBub2RlLnN0YXR1cyAhPT0gJ25vdCBzdGFydGVkJztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBOb2RlIGNsaWNrIGhhbmRsZXIgKi9cbiAgICBfb25Ob2RlQ2xpY2sobm9kZTogQXBwcm92YWxOb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9kcmFnRHJvcEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbjxBcHByb3ZhbEZsb3dBcHByb3ZlckRldGFpbHNEaWFsb2dSZWZEYXRhPihcbiAgICAgICAgICAgIEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0NvbXBvbmVudCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93U2VuZFJlbWluZGVyOiB0aGlzLmFsbG93U2VuZFJlbWluZGVyc0ZvclN0YXR1c2VzLmluY2x1ZGVzKG5vZGUuc3RhdHVzKSxcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdERpYWxvZ09wdGlvbnNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKChyZW1pbmRlclRhcmdldHMpID0+IHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlbWluZGVyVGFyZ2V0cykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRSZW1pbmRlcnMuZW1pdCh7IHVzZXJzOiByZW1pbmRlclRhcmdldHMsIG5vZGUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubm9kZUNsaWNrLmVtaXQobm9kZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Ob2RlQWRkKG5vZGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmFmdGVyTm9kZUFkZC5lbWl0KG5vZGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uTm9kZUVkaXQobm9kZTogQXBwcm92YWxOb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWZ0ZXJOb2RlRWRpdC5lbWl0KG5vZGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uTm9kZVNlbGVjdGlvbkNoYW5nZShldmVudDogR3JpZExpc3RTZWxlY3Rpb25FdmVudDxBcHByb3ZhbEdyYXBoTm9kZT4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZ3JhcGguY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbHVtbi5ub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgbm9kZS5zZWxlY3RlZCA9ICEhZXZlbnQuc2VsZWN0aW9uLmZpbmQoKF9ub2RlKSA9PiBfbm9kZS5pZCA9PT0gbm9kZS5pZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gV2F0Y2hlcidzIGF2YXRhciBjbGljayBoYW5kbGVyICovXG4gICAgX29uV2F0Y2hlckNsaWNrKHdhdGNoZXI6IEFwcHJvdmFsVXNlciwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbjxBcHByb3ZhbEZsb3dBcHByb3ZlckRldGFpbHNEaWFsb2dSZWZEYXRhPihBcHByb3ZhbEZsb3dBcHByb3ZlckRldGFpbHNDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICB3YXRjaGVyLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHREaWFsb2dPcHRpb25zXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBSZXRyaXZlIG1ldGFkYXRhIGJ5IG5vZGUgaWQgKi9cbiAgICBnZXROb2RlTWV0YWRhdGFCeU5vZGVJZChub2RlSWQ6IHN0cmluZyk6IEFwcHJvdmFsR3JhcGhOb2RlTWV0YWRhdGEge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JhcGhNZXRhZGF0YVtub2RlSWRdO1xuICAgIH1cblxuICAgIC8qKiBTY3JvbGwgdG8gdGhlIG5leHQgaG9yaXpvbnRhbCBzbGlkZSAqL1xuICAgIG5leHRTbGlkZShkaXIgPSAxKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDE7XG5cbiAgICAgICAgbGV0IHBvcyA9IDA7XG5cbiAgICAgICAgaWYgKGRpciA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgbGFzdFN0ZXAgPSB0aGlzLl9jYXJvdXNlbFN0ZXBzUmlnaHQgPT09IDE7XG4gICAgICAgICAgICBjb25zdCBuZXh0U3RlcCA9IHRoaXMuX2Nhcm91c2VsU3RlcHNDb3VudCAtIHRoaXMuX2Nhcm91c2VsU3RlcHNSaWdodCArIDE7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlUmlnaHRQb2ludCA9IHRoaXMuX2Nhcm91c2VsU3RlcFNpemUgKiBuZXh0U3RlcCArIChsYXN0U3RlcCA/IDAgOiB0aHJlc2hvbGQpO1xuICAgICAgICAgICAgcG9zID0gdmlzaWJsZVJpZ2h0UG9pbnQgLSB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0U3RlcCA9IHRoaXMuX2Nhcm91c2VsU3RlcHNMZWZ0ID09PSAxO1xuICAgICAgICAgICAgY29uc3QgbmV4dFN0ZXAgPSB0aGlzLl9jYXJvdXNlbFN0ZXBzTGVmdCAtIDE7XG4gICAgICAgICAgICBwb3MgPSB0aGlzLl9jYXJvdXNlbFN0ZXBTaXplICogbmV4dFN0ZXAgLSAobGFzdFN0ZXAgPyAwIDogdGhyZXNob2xkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldFNjcm9sbFBvc2l0aW9uKHBvcyk7XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRTY3JvbGxQb3NpdGlvbihwb3M6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9ncmFwaENvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xuICAgICAgICAgICAgbGVmdDogcG9zLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbW92ZUNvbEluVmlldyhjb2xJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbltjb2xJbmRleF0uZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB4OiBub2RlWCwgd2lkdGggfSA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgZGVsdGEgPSB0aGlzLl9ncmFwaENvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueDtcblxuICAgICAgICBjb25zdCBsZWZ0ID0gbm9kZVggLSBkZWx0YTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgd2lkdGg7XG5cbiAgICAgICAgaWYgKGxlZnQgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9ncmFwaENvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCArIGxlZnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0ID4gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRTY3JvbGxQb3NpdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLl9ncmFwaENvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCArIHJpZ2h0IC0gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSGFuZGxlIG5vZGUga2V5ZG93biBhbmQgZm9jdXMgb3RoZXIgbm9kZSBiYXNlZCBvbiB3aGljaCBrZXkgaXMgcHJlc3NlZCAqL1xuICAgIF9vbk5vZGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBub2RlOiBBcHByb3ZhbEdyYXBoTm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAoIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbVVBfQVJST1csIERPV05fQVJST1csIFJJR0hUX0FSUk9XLCBMRUZUX0FSUk9XXSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgbm9kZUluZGV4LCBjb2x1bW5JbmRleCB9ID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtub2RlLmlkXTtcblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGxldCBuZXh0Rm9jdXNUYXJnZXQ6IEFwcHJvdmFsR3JhcGhOb2RlIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZUluZGV4ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgY29sdW1uSW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRGb2N1c1RhcmdldCA9IHRoaXMuX2dldE5leHRWZXJ0aWNhbE5vZGUobm9kZUluZGV4LCBjb2x1bW5JbmRleCwgJ3VwJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXh0Rm9jdXNUYXJnZXQgPSB0aGlzLl9nZXROZXh0VmVydGljYWxOb2RlKG5vZGVJbmRleCwgY29sdW1uSW5kZXgsICdkb3duJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBMRUZUX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5leHRGb2N1c1RhcmdldCA9IHRoaXMuX2dldE5leHRIb3Jpem9udGFsTm9kZShub2RlSW5kZXgsIGNvbHVtbkluZGV4LCB0aGlzLl9ydGwgPyAncmlnaHQnIDogJ2xlZnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFJJR0hUX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5leHRGb2N1c1RhcmdldCA9IHRoaXMuX2dldE5leHRIb3Jpem9udGFsTm9kZShub2RlSW5kZXgsIGNvbHVtbkluZGV4LCB0aGlzLl9ydGwgPyAnbGVmdCcgOiAncmlnaHQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0Rm9jdXNUYXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzTm9kZShuZXh0Rm9jdXNUYXJnZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gRmV0Y2ggYWxsIG5lY2Vzc2FyeSBkYXRhIGFuZCBlbnRlciBlZGl0IG1vZGUgKi9cbiAgICBfZW50ZXJFZGl0TW9kZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhlcmUncyBubyBzdXBwb3J0IGZvciBzZWFyY2hpbmcgaW4gbXVsdGktaW5wdXQsIHNvIGdyYWJiaW5nIGFsbCB3YXRjaGVyc1xuICAgICAgICAvLyB0cmlnZ2VyaW5nIGluaXRpYWwgbG9hZGluZyBvZiBkYXRhIGluIGRhdGEgc291cmNlc1xuICAgICAgICB0aGlzLndhdGNoZXJEYXRhU291cmNlLm1hdGNoKCk7XG4gICAgICAgIHRoaXMuX2VkaXRNb2RlSW5pdFN1YiA9IHRoaXMud2F0Y2hlckRhdGFTb3VyY2Uub3BlbigpLnN1YnNjcmliZSgod2F0Y2hlcnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJzRm9yV2F0Y2hlcnNMaXN0ID0gd2F0Y2hlcnM7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFdhdGNoZXJzID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLndhdGNoZXJzO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRXYXRjaGVySWRzID0gdGhpcy5fc2VsZWN0ZWRXYXRjaGVycy5tYXAoKHcpID0+IHcuaWQpO1xuICAgICAgICAgICAgdGhpcy5faXNFZGl0TW9kZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsQXBwcm92YWxQcm9jZXNzID0gY2xvbmVEZWVwKHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5fZWRpdE1vZGVJbml0U3ViKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTZW5kIHVwZGF0ZSBhcHByb3ZhbCBwcm9jZXNzIGNhbGxzIHRvIERhdGFTb3VyY2UgYW5kIGV4aXQgZWRpdCBtb2RlKi9cbiAgICBfc2F2ZUVkaXRNb2RlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZWRpdE1vZGVJbml0U3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLndhdGNoZXJEYXRhU291cmNlLmNsb3NlKCk7XG5cbiAgICAgICAgdGhpcy5faW5pdGlhbEFwcHJvdmFsUHJvY2VzcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5faXNFZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tZXNzYWdlcyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7XG4gICAgICAgICAgICAuLi50aGlzLl9hcHByb3ZhbFByb2Nlc3MsXG4gICAgICAgICAgICB3YXRjaGVyczogdGhpcy5fc2VsZWN0ZWRXYXRjaGVyc1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2J1aWxkVmlldyh1cGRhdGVkKTtcblxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodXBkYXRlZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmVzdG9yZSBpbml0aWFsIGFwcHJvdmFsIGZsb3cgc3RhdGUgYW5kIGV4aXQgZWRpdCBtb2RlICovXG4gICAgX2V4aXRFZGl0TW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZWRpdE1vZGVJbml0U3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLndhdGNoZXJEYXRhU291cmNlLmNsb3NlKCk7XG5cbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzID0gY2xvbmVEZWVwKHRoaXMuX2luaXRpYWxBcHByb3ZhbFByb2Nlc3MhKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbEFwcHJvdmFsUHJvY2VzcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5faXNFZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9tZXNzYWdlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3dhdGNoZXJzU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3RlZElkczogQXBwcm92YWxVc2VyWydpZCddW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaWRzU2V0ID0gbmV3IFNldChzZWxlY3RlZElkcyk7XG4gICAgICAgIC8vIHVwZGF0aW5nIHdhdGNoZXJzIHNlbGVjdGlvblxuICAgICAgICAvLyBzaW5jZSBpdCdzIHBvc3NpYmxlIFwiX3VzZXJzRm9yV2F0Y2hlcnNMaXN0XCIgbWlnaHQgbm90IGNvbnRhaW4gYWxsIHNlbGVjdGVkIHZhbHVlcyxcbiAgICAgICAgLy8gZGV0ZXJtaW5lIGN1cnJlbnQgc2VsZWN0aW9uIGJhc2VkIG9uIHdoYXQncyBhbHJlYWR5IHNlbGVjdGVkIGFuZCBcIl91c2Vyc0ZvcldhdGNoZXJzTGlzdFwiXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkV2F0Y2hlcnMgPSB1bmlxQnkoXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFdhdGNoZXJzLmNvbmNhdCh0aGlzLl91c2Vyc0ZvcldhdGNoZXJzTGlzdCkuZmlsdGVyKCh1c2VyKSA9PiBpZHNTZXQuaGFzKHVzZXIuaWQpKSxcbiAgICAgICAgICAgICh1KSA9PiB1LmlkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmVzdG9yZSBwcmV2aW91c2x5IHNhdmVkIGFwcHJvdmFsIHByb2Nlc3Mgc3RhdGUgKi9cbiAgICBfdW5kb0xhc3RBY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2VzcyA9IGNsb25lRGVlcCh0aGlzLl9wcmV2aW91c0FwcHJvdmFsUHJvY2VzcyEpO1xuICAgICAgICB0aGlzLl9wcmV2aW91c0FwcHJvdmFsUHJvY2VzcyA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBPcGVuIGFkZCBub2RlIGRpYWxvZyAqL1xuICAgIF9hZGROb2RlKHNvdXJjZTogQXBwcm92YWxHcmFwaE5vZGUsIHR5cGU6IEFwcHJvdmFsRmxvd05vZGVUYXJnZXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2hvd05vZGVUeXBlU2VsZWN0ID0gdHlwZSA9PT0gJ2JlZm9yZScgJiYgIXNvdXJjZS5hY3Rpb25zQ29uZmlnPy5kaXNhYmxlQWRkUGFyYWxsZWw7XG5cbiAgICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuPEFkZE5vZGVEaWFsb2dSZWZEYXRhPihcbiAgICAgICAgICAgIEFwcHJvdmFsRmxvd0FkZE5vZGVDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBub2RlVGFyZ2V0OiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBzaG93Tm9kZVR5cGVTZWxlY3QsXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IE9iamVjdC5hc3NpZ24oZ2V0QmxhbmtBcHByb3ZhbEdyYXBoTm9kZSgpLCB7IGJsYW5rOiBmYWxzZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tEdWVEYXRlOiB0aGlzLmNoZWNrRHVlRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdERpYWxvZ09wdGlvbnNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKChkYXRhOiBBZGROb2RlRGlhbG9nRm9ybURhdGEpID0+IHtcbiAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgeyBub2RlLCBub2RlVHlwZSwgdG9OZXh0U2VyaWFsIH0gPSBkYXRhO1xuXG4gICAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQ3VycmVudEFwcHJvdmFsUHJvY2VzcygpO1xuXG4gICAgICAgICAgICBub2RlLmlkID0gYHRlbXBJZCR7KE1hdGgucmFuZG9tKCkgKiAxMDAwKS50b0ZpeGVkKCl9YDtcblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZW1wdHknOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbnRlckVkaXRNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYmVmb3JlJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09PSBBUFBST1ZBTF9GTE9XX05PREVfVFlQRVMuU0VSSUFMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRhcmdldHMgPSBbc291cmNlLmlkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VUYXJnZXRzKHNvdXJjZS5pZCwgW25vZGUuaWRdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gQVBQUk9WQUxfRkxPV19OT0RFX1RZUEVTLlBBUkFMTEVMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzQWRkaW5nUGFyYWxsZWxOb2RlKG5vZGUsIHNvdXJjZSwgdG9OZXh0U2VyaWFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYmVmb3JlLWFsbCc6XG4gICAgICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0cyA9IHRoaXMuX2dyYXBoLmNvbHVtbnNbMF0ubm9kZXMubWFwKChfbm9kZSkgPT4gX25vZGUuaWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2FmdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgbm9kZS50YXJnZXRzID0gc291cmNlLnRhcmdldHM7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS50YXJnZXRzID0gW25vZGUuaWRdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2FmdGVyLWFsbCc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UGFyZW50cyA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbc291cmNlLnRhcmdldHNbMF1dPy5wYXJlbnRzO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRQYXJlbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRhcmdldHMgPSBzb3VyY2UudGFyZ2V0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VUYXJnZXRzKHNvdXJjZS5pZCwgW25vZGUuaWRdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX25vZGUpID0+IF9ub2RlLmlkICE9PSBzb3VyY2UuaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ncmFwaC5jb2x1bW5zW3RoaXMuX2dyYXBoLmNvbHVtbnMubGVuZ3RoIC0gMV0ubm9kZXMuZm9yRWFjaCgoX25vZGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX25vZGUudGFyZ2V0cy5wdXNoKG5vZGUuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ3BhcmFsbGVsJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0FkZGluZ1BhcmFsbGVsTm9kZShub2RlLCBzb3VyY2UsIHRvTmV4dFNlcmlhbCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShub2RlLmFwcHJvdmFsVGVhbUlkID8gJ3RlYW1BZGRTdWNjZXNzJyA6ICdhcHByb3ZlckFkZFN1Y2Nlc3MnKTtcbiAgICAgICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5wdXNoKG5vZGUpO1xuXG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICAgICAgICAgIHRoaXMuX29uTm9kZUFkZChub2RlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gT3BlbiBlZGl0IG5vZGUgZGlhbG9nICovXG4gICAgX2VkaXROb2RlKG5vZGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW48QWRkTm9kZURpYWxvZ1JlZkRhdGE+KFxuICAgICAgICAgICAgQXBwcm92YWxGbG93QWRkTm9kZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGlzRWRpdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogT2JqZWN0LmFzc2lnbih7fSwgbm9kZSksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrRHVlRGF0ZTogdGhpcy5jaGVja0R1ZURhdGUsXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHREaWFsb2dPcHRpb25zXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yXG4gICAgICAgICk7XG5cbiAgICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkLnN1YnNjcmliZSgoZGF0YTogeyBub2RlOiBBcHByb3ZhbE5vZGUgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZE5vZGUgPSBkYXRhPy5ub2RlO1xuXG4gICAgICAgICAgICBpZiAoIXVwZGF0ZWROb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUN1cnJlbnRBcHByb3ZhbFByb2Nlc3MoKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU5vZGUodXBkYXRlZE5vZGUpO1xuICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoJ25vZGVFZGl0Jyk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICAgICAgICAgIHRoaXMuX29uTm9kZUVkaXQobm9kZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFwiRGVsZXRlXCIgYnV0dG9uIGNsaWNrIGhhbmRsZXIgKi9cbiAgICBfb25Ob2RlRGVsZXRlKG5vZGVUb0RlbGV0ZTogQXBwcm92YWxOb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhY2hlQ3VycmVudEFwcHJvdmFsUHJvY2VzcygpO1xuICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5vZGVUb0RlbGV0ZSk7XG4gICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKG5vZGVUb0RlbGV0ZS5hcHByb3ZhbFRlYW1JZCA/ICd0ZWFtUmVtb3ZlJyA6ICdub2RlUmVtb3ZlJyk7XG4gICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2RlbGV0ZVNlbGVjdGVkTm9kZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhY2hlQ3VycmVudEFwcHJvdmFsUHJvY2VzcygpO1xuXG4gICAgICAgIGNvbnN0IG5vZGVzVG9EZWxldGUgPSB0aGlzLl9ub2RlQ29tcG9uZW50c1xuICAgICAgICAgICAgLmZpbHRlcigobm9kZUNvbXBvbmVudCkgPT4gbm9kZUNvbXBvbmVudC5faXNTZWxlY3RlZClcbiAgICAgICAgICAgIC5tYXAoKG5vZGVDb21wb25lbnQpID0+IG5vZGVDb21wb25lbnQubm9kZSk7XG5cbiAgICAgICAgbm9kZXNUb0RlbGV0ZS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5vZGUpO1xuICAgICAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKCdub2Rlc1JlbW92ZScpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE5vZGUgZHJhZyBtb3ZlIGhhbmRsZXIsIHVzZWQgdG8gY2hlY2sgaWYgbmVlZCB0byBoaWdobGlnaHQgYSBkcm9wIHpvbmUgcmVjdGFuZ2xlICovXG4gICAgX29uTm9kZURyYWdNb3ZlZChub2RlOiBBcHByb3ZhbEdyYXBoTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkcmFnZ2VkTm9kZURpbWVuc2lvbnMgPSB0aGlzLl9ub2RlQ29tcG9uZW50c1xuICAgICAgICAgICAgLmZpbmQoKGNvbXApID0+IGNvbXAubm9kZSA9PT0gbm9kZSlcbiAgICAgICAgICAgID8uX25hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKCFkcmFnZ2VkTm9kZURpbWVuc2lvbnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX25vZGVDb21wb25lbnRzLmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5ub2RlICE9PSBub2RlICYmIEJvb2xlYW4oY29tcG9uZW50Ll9kcm9wWm9uZXMubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5fY2hlY2tJZk5vZGVEcmFnZ2VkSW5Ecm9wWm9uZShkcmFnZ2VkTm9kZURpbWVuc2lvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBOb2RlIGRyb3AgaGFuZGxlciAqL1xuICAgIF9vbk5vZGVEcm9wKG5vZGVUb0Ryb3A6IEFwcHJvdmFsR3JhcGhOb2RlLCBkcmFnOiBDZGtEcmFnKTogdm9pZCB7XG4gICAgICAgIGRyYWcucmVzZXQoKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLl9kcmFnRHJvcEluUHJvZ3Jlc3MgPSBmYWxzZSkpO1xuXG4gICAgICAgIGNvbnN0IGRyb3BUYXJnZXQgPSB0aGlzLl9ub2RlQ29tcG9uZW50cy5maW5kKChuKSA9PiBuLl9pc0FueURyb3Bab25lQWN0aXZlKTtcblxuICAgICAgICBpZiAoIWRyb3BUYXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlQ3VycmVudEFwcHJvdmFsUHJvY2VzcygpO1xuXG4gICAgICAgIGNvbnN0IHBsYWNlbWVudCA9IGRyb3BUYXJnZXQuX2FjdGl2ZURyb3Bab25lc1swXS5wbGFjZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5fbm9kZUNvbXBvbmVudHMuZm9yRWFjaCgobikgPT4gbi5fZGVhY3RpdmF0ZURyb3Bab25lcygpKTtcblxuICAgICAgICBpZiAocGxhY2VtZW50ID09PSAnYWZ0ZXInKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5vZGVUb0Ryb3ApO1xuICAgICAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5leHROb2RlID0gZ2V0R3JhcGhOb2Rlcyh0aGlzLl9ncmFwaCkuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gZHJvcFRhcmdldC5ub2RlLnRhcmdldHNbMF0pO1xuXG4gICAgICAgICAgICBpZiAobmV4dE5vZGU/LmJsYW5rKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShuZXh0Tm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGVUb0Ryb3AudGFyZ2V0cyA9XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbmQoKG5vZGUpID0+IG5vZGUuaWQgPT09IGRyb3BUYXJnZXQubm9kZS5pZCk/LnRhcmdldHMgPz8gW107XG4gICAgICAgICAgICBkcm9wVGFyZ2V0Lm5vZGUudGFyZ2V0cyA9IFtub2RlVG9Ecm9wLmlkXTtcblxuICAgICAgICAgICAgdGhpcy5fZmluaXNoRHJhZ0Ryb3BQcm9jZXNzKG5vZGVUb0Ryb3ApO1xuICAgICAgICB9IGVsc2UgaWYgKHBsYWNlbWVudCA9PT0gJ2JlZm9yZScpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbihBcHByb3ZhbEZsb3dTZWxlY3RUeXBlQ29tcG9uZW50LCB1bmRlZmluZWQsIHRoaXMuX2luamVjdG9yKTtcblxuICAgICAgICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkLnN1YnNjcmliZSgoZGF0YTogU2VsZWN0VHlwZURpYWxvZ0Zvcm1EYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB7IHR5cGUsIHRvTmV4dFNlcmlhbCB9ID0gZGF0YTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZVRvRHJvcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gQVBQUk9WQUxfRkxPV19OT0RFX1RZUEVTLlNFUklBTCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlVGFyZ2V0cyhkcm9wVGFyZ2V0Lm5vZGUuaWQsIFtub2RlVG9Ecm9wLmlkXSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVUb0Ryb3AudGFyZ2V0cyA9IFtkcm9wVGFyZ2V0Lm5vZGUuaWRdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBBUFBST1ZBTF9GTE9XX05PREVfVFlQRVMuUEFSQUxMRUwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0FkZGluZ1BhcmFsbGVsTm9kZShub2RlVG9Ecm9wLCBkcm9wVGFyZ2V0Lm5vZGUsIHRvTmV4dFNlcmlhbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZmluaXNoRHJhZ0Ryb3BQcm9jZXNzKG5vZGVUb0Ryb3ApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2VtZW50ID09PSAnYmVmb3JlLWFsbCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZVRvRHJvcCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Q29sdW1uTm9kZXMgPSB0aGlzLl9ncmFwaC5jb2x1bW5zWzBdLm5vZGVzO1xuICAgICAgICAgICAgbm9kZVRvRHJvcC50YXJnZXRzID0gZmlyc3RDb2x1bW5Ob2Rlcy5tYXAoKG5vZGUpID0+IG5vZGUuaWQpO1xuXG4gICAgICAgICAgICB0aGlzLl9maW5pc2hEcmFnRHJvcFByb2Nlc3Mobm9kZVRvRHJvcCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2VtZW50ID09PSAnYWZ0ZXItYWxsJykge1xuICAgICAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlVG9Ecm9wKTtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuXG4gICAgICAgICAgICBub2RlVG9Ecm9wLnRhcmdldHMgPSBbLi4uZHJvcFRhcmdldC5ub2RlLnRhcmdldHNdO1xuXG4gICAgICAgICAgICBpZiAoZHJvcFRhcmdldC5ub2RlLnRhcmdldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdENvbHVtbk5vZGVzID0gdGhpcy5fZ3JhcGguY29sdW1uc1t0aGlzLl9ncmFwaC5jb2x1bW5zLmxlbmd0aCAtIDFdLm5vZGVzO1xuICAgICAgICAgICAgICAgIGxhc3RDb2x1bW5Ob2Rlcy5mb3JFYWNoKChub2RlKSA9PiBub2RlLnRhcmdldHMucHVzaChub2RlVG9Ecm9wLmlkKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2RlcyA9IHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIChub2RlKSA9PiBub2RlLmlkICE9PSBkcm9wVGFyZ2V0Lm5vZGUuaWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VUYXJnZXRzKGRyb3BUYXJnZXQubm9kZS5pZCwgW25vZGVUb0Ryb3AuaWRdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZmluaXNoRHJhZ0Ryb3BQcm9jZXNzKG5vZGVUb0Ryb3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9maW5pc2hEcmFnRHJvcFByb2Nlc3Mobm9kZVRvRHJvcDogQXBwcm92YWxHcmFwaE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLnB1c2gobm9kZVRvRHJvcCk7XG4gICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2hvd01lc3NhZ2UodHlwZTogQXBwcm92YWxGbG93TWVzc2FnZVR5cGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZXMgPSBbeyB0eXBlIH1dO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEJ1aWxkIEFwcHJvdmFsIEZsb3cgZ3JhcGggYW5kIHJlbmRlciBpdCAqL1xuICAgIHByaXZhdGUgX2J1aWxkVmlldyhhcHByb3ZhbFByb2Nlc3M6IEFwcHJvdmFsUHJvY2Vzcyk6IHZvaWQge1xuICAgICAgICBpZiAoIWFwcHJvdmFsUHJvY2Vzcy5ub2Rlcykge1xuICAgICAgICAgICAgYXBwcm92YWxQcm9jZXNzLm5vZGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcHByb3ZhbFByb2Nlc3Mud2F0Y2hlcnMpIHtcbiAgICAgICAgICAgIGFwcHJvdmFsUHJvY2Vzcy53YXRjaGVycyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2VzcyA9IGFwcHJvdmFsUHJvY2VzcztcbiAgICAgICAgdGhpcy5fZ3JhcGggPSBnZW5lcmF0ZUFwcHJvdmFsRmxvd0dyYXBoKHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2dyYXBoLmVycm9ycykge1xuICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoJ2Vycm9yJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ncmFwaE1ldGFkYXRhID0gZ2VuZXJhdGVBcHByb3ZhbEZsb3dHcmFwaE1ldGFkYXRhKHRoaXMuX2dyYXBoKTtcblxuICAgICAgICBjb25zdCBub2RlcyA9IGdldEdyYXBoTm9kZXModGhpcy5fZ3JhcGgpO1xuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMgPSBub2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFub2RlLnNwYWNlKTtcbiAgICAgICAgdGhpcy5fbXVsdGlwbGVSb290Tm9kZXMgPSBub2Rlcy5maWx0ZXIoKG5vZGUpID0+IHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZS5pZF0uaXNSb290KS5sZW5ndGggPiAxO1xuICAgICAgICB0aGlzLl9tdWx0aXBsZUZpbmFsTm9kZXMgPSBub2Rlcy5maWx0ZXIoKG5vZGUpID0+IHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZS5pZF0uaXNGaW5hbCkubGVuZ3RoID4gMTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9ncmlkTGlzdD8uY2xlYXJTZWxlY3Rpb24oKTtcblxuICAgICAgICBpZiAoIXRoaXMuX2lzRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFNjcm9sbFBvc2l0aW9uKDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTGlzdGVuIHdpbmRvdyByZXNpemUgYW5kIGRpc3RyaWJ1dGUgY2FyZHMgb24gY29sdW1uIGNoYW5nZSAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uUmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIG1lcmdlKGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKSwgZnJvbUV2ZW50KHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpKVxuICAgICAgICAgICAgICAgIC5waXBlKHRocm90dGxlVGltZSg1MCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0pKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZm9jdXNOb2RlKG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vZGVUb0ZvY3VzID0gdGhpcy5fbm9kZUNvbXBvbmVudHMuZmluZCgoY29tcCkgPT4gY29tcC5ub2RlID09PSBub2RlKTtcblxuICAgICAgICBpZiAoIW5vZGVUb0ZvY3VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW92ZUNvbEluVmlldyhub2RlLmNvbEluZGV4ID8/IDApO1xuICAgICAgICBub2RlVG9Gb2N1cy5fZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFVwZGF0ZSBub2RlIG9iamVjdCBpbiBsb2NhbCBhcHByb3ZhbCBwcm9jZXNzIGRhdGEgc3RydWN0dXJlICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlTm9kZShub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZUluZGV4ID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbmRJbmRleCgobikgPT4gbi5pZCA9PT0gbm9kZS5pZCk7XG5cbiAgICAgICAgaWYgKG5vZGVJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXNbbm9kZUluZGV4XSA9IG5vZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBEZWxldGUgbm9kZSBvYmplY3QgaW4gbG9jYWwgYXBwcm92YWwgcHJvY2VzcyBkYXRhIHN0cnVjdHVyZSAqL1xuICAgIHByaXZhdGUgX2RlbGV0ZU5vZGUobm9kZVRvRGVsZXRlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZXNUb0RlbGV0ZSA9IFtub2RlVG9EZWxldGVdO1xuICAgICAgICBjb25zdCBncmFwaE5vZGVzID0gZ2V0R3JhcGhOb2Rlcyh0aGlzLl9ncmFwaCk7XG4gICAgICAgIGxldCBjdXJyTm9kZSA9IGdyYXBoTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gbm9kZVRvRGVsZXRlLmlkKTtcbiAgICAgICAgbGV0IG5leHROb2RlOiBBcHByb3ZhbEdyYXBoTm9kZSB8IHVuZGVmaW5lZDtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoY3Vyck5vZGU/LnRhcmdldHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBncmFwaE5vZGVzLmZpbmQoKG5vZGUpID0+IG5vZGUuaWQgPT09IGN1cnJOb2RlPy50YXJnZXRzWzBdKTtcblxuICAgICAgICAgICAgICAgIGlmIChuZXh0Tm9kZT8uYmxhbmsgJiYgdGhpcy5fZ3JhcGhNZXRhZGF0YVtuZXh0Tm9kZS5pZF0ucGFyZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZXNUb0RlbGV0ZS5wdXNoKG5leHROb2RlKTtcblxuICAgICAgICAgICAgICAgICAgICBjdXJyTm9kZSA9IG5leHROb2RlO1xuICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGdyYXBoTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gY3Vyck5vZGU/LnRhcmdldHNbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAobmV4dE5vZGU/LmJsYW5rICYmIHRoaXMuX2dyYXBoTWV0YWRhdGFbbmV4dE5vZGUuaWRdLnBhcmVudHMubGVuZ3RoID09PSAxKTtcblxuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9ncmFwaE1ldGFkYXRhW25vZGVUb0RlbGV0ZS5pZF0ucGFyZW50c1swXTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gbm9kZVRvRGVsZXRlLnRhcmdldHNbMF07XG4gICAgICAgIGNvbnN0IGlzUGFyZW50UGFyYWxsZWxTdGFydCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbcGFyZW50Py5pZF0/LnBhcmFsbGVsU3RhcnQ7XG4gICAgICAgIGNvbnN0IGlzVGFyZ2V0UGFyYWxsZWxFbmQgPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3RhcmdldF0/LnBhcmFsbGVsRW5kO1xuICAgICAgICBjb25zdCB0YXJnZXRzID1cbiAgICAgICAgICAgIChpc1BhcmVudFBhcmFsbGVsU3RhcnQgJiYgaXNUYXJnZXRQYXJhbGxlbEVuZCkgfHwgbm9kZXNUb0RlbGV0ZS5sZW5ndGggPiAxID8gW10gOiBjdXJyTm9kZT8udGFyZ2V0cyA/PyBbXTtcblxuICAgICAgICB0aGlzLl9yZXBsYWNlVGFyZ2V0cyhub2RlVG9EZWxldGUuaWQsIHRhcmdldHMpO1xuXG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2RlcyA9IHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFub2Rlc1RvRGVsZXRlLmluY2x1ZGVzKG5vZGUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FkZFBhcmFsbGVsVGFyZ2V0cyh0YXJnZXROb2RlSWQ6IHN0cmluZywgbm9kZUlkVG9BZGQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzTm9kZVRhcmdldHNJbmNsdWRlSWQobm9kZSwgdGFyZ2V0Tm9kZUlkKSkge1xuICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0cy5wdXNoKG5vZGVJZFRvQWRkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgXCJpZFRvUmVwbGFjZVwiIGluIGFsbCBub2RlcycgXCJ0YXJnZXRzXCIgd2l0aCBvbmVzIGluIFwicmVwbGFjZVdpdGhcIiBhcnJheSAqL1xuICAgIHByaXZhdGUgX3JlcGxhY2VUYXJnZXRzKElkVG9SZXBsYWNlOiBzdHJpbmcsIHJlcGxhY2VXaXRoSWQ6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNOb2RlVGFyZ2V0c0luY2x1ZGVJZChuLCBJZFRvUmVwbGFjZSkpIHtcbiAgICAgICAgICAgICAgICBuLnRhcmdldHMgPSBuLnRhcmdldHMuZmlsdGVyKChfaWQpID0+IF9pZCAhPT0gSWRUb1JlcGxhY2UpO1xuICAgICAgICAgICAgICAgIG4udGFyZ2V0cy5wdXNoKC4uLnJlcGxhY2VXaXRoSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTYXZlIGN1cnJlbnQgc3RhdGUgb2YgYXBwcm92YWwgcHJvY2VzcyBkYXRhIHRvIGJlIGFibGUgdG8gdW5kbyBhbiBhY3Rpb24gbWFkZSBpbiBlZGl0IG1vZGUgKi9cbiAgICBwcml2YXRlIF9jYWNoZUN1cnJlbnRBcHByb3ZhbFByb2Nlc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzID0gY2xvbmVEZWVwKHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXROZXh0SG9yaXpvbnRhbE5vZGUgPSAoXG4gICAgICAgIG5vZGVJbmRleDogbnVtYmVyLFxuICAgICAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgICAgICBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCdcbiAgICApOiBBcHByb3ZhbEdyYXBoTm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4RGlmZiA9IGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IDEgOiAtMTtcbiAgICAgICAgY29uc3QgbmV4dENvbHVtbiA9IHRoaXMuX2dyYXBoLmNvbHVtbnNbY29sdW1uSW5kZXggKyBpbmRleERpZmZdO1xuICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IG5leHRDb2x1bW4/Lm5vZGVzW25vZGVJbmRleF07XG5cbiAgICAgICAgaWYgKCFuZXh0Tm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0Tm9kZS5ibGFuayB8fCBuZXh0Tm9kZS5zcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldE5leHRIb3Jpem9udGFsTm9kZShub2RlSW5kZXgsIGNvbHVtbkluZGV4ICsgaW5kZXhEaWZmLCBkaXJlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHROb2RlO1xuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE5leHRWZXJ0aWNhbE5vZGUgPSAoXG4gICAgICAgIG5vZGVJbmRleDogbnVtYmVyLFxuICAgICAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgICAgICBkaXJlY3Rpb246ICd1cCcgfCAnZG93bidcbiAgICApOiBBcHByb3ZhbEdyYXBoTm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4RGlmZiA9IGRpcmVjdGlvbiA9PT0gJ2Rvd24nID8gMSA6IC0xO1xuICAgICAgICBjb25zdCBjdXJyQ29sdW1uID0gdGhpcy5fZ3JhcGguY29sdW1uc1tjb2x1bW5JbmRleF07XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gY3VyckNvbHVtbi5ub2Rlc1tub2RlSW5kZXggKyBpbmRleERpZmZdO1xuXG4gICAgICAgIGlmICghbmV4dE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dE5vZGUuYmxhbmsgfHwgbmV4dE5vZGUuc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXROZXh0VmVydGljYWxOb2RlKG5vZGVJbmRleCArIGluZGV4RGlmZiwgY29sdW1uSW5kZXgsIGRpcmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dE5vZGU7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX2Nhcm91c2VsU3RlcFNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCAvIHRoaXMuX2Nhcm91c2VsU3RlcHNDb3VudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2Nyb2xsRGlmZigpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuX2dyYXBoRWwpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGggLSB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2Nhcm91c2VsU3RlcHNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY2Fyb3VzZWxTdGVwc0xlZnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLl9ncmFwaENvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCAvIHRoaXMuX2Nhcm91c2VsU3RlcFNpemUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9jYXJvdXNlbFN0ZXBzUmlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChcbiAgICAgICAgICAgICh0aGlzLl9zY3JvbGxEaWZmIC0gTWF0aC5yb3VuZCh0aGlzLl9ncmFwaENvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCkpIC8gdGhpcy5fY2Fyb3VzZWxTdGVwU2l6ZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX2RlZmF1bHREaWFsb2dPcHRpb25zKCk6IERlZmF1bHREaWFsb2dPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRlYW1EYXRhU291cmNlOiB0aGlzLnRlYW1EYXRhU291cmNlLFxuICAgICAgICAgICAgdXNlckRhdGFTb3VyY2U6IHRoaXMudXNlckRhdGFTb3VyY2UsXG4gICAgICAgICAgICB1c2VyRGV0YWlsc1RlbXBsYXRlOiB0aGlzLnVzZXJEZXRhaWxzVGVtcGxhdGUsXG4gICAgICAgICAgICBydGw6IHRoaXMuX3J0bFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmluZFNlcmlhbE5vZGUoeUluZGV4PzogbnVtYmVyLCB0YXJnZXRzPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHRhcmdldElzUGFyZW50ID1cbiAgICAgICAgICAgIE51bWJlci5pc0ludGVnZXIoeUluZGV4KSAmJlxuICAgICAgICAgICAgdGFyZ2V0cz8uc29tZSgodGFyZ2V0SWQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlSW5kZXggPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3RhcmdldElkXT8ubm9kZUluZGV4O1xuICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG5vZGVJbmRleCkgJiYgbm9kZUluZGV4ISA8PSB5SW5kZXghIC0gMTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0YXJnZXRJc1BhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldHMgPz8gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbmQoKG5vZGUpID0+IG5vZGUuaWQgPT09IHRhcmdldHM/LlswXSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kU2VyaWFsTm9kZSh5SW5kZXgsIHRhcmdldE5vZGU/LnRhcmdldHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJvY2Vzc0FkZGluZ1BhcmFsbGVsTm9kZShcbiAgICAgICAgYWRkZWROb2RlOiBBcHByb3ZhbEdyYXBoTm9kZSxcbiAgICAgICAgc291cmNlTm9kZTogQXBwcm92YWxHcmFwaE5vZGUsXG4gICAgICAgIHRvTmV4dFNlcmlhbCA9IGZhbHNlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGFkZGVkTm9kZS50YXJnZXRzID0gc291cmNlTm9kZS50YXJnZXRzO1xuXG4gICAgICAgIHRoaXMuX2FkZFBhcmFsbGVsVGFyZ2V0cyhzb3VyY2VOb2RlLmlkLCBhZGRlZE5vZGUuaWQpO1xuXG4gICAgICAgIGlmICh0b05leHRTZXJpYWwpIHtcbiAgICAgICAgICAgIGxldCB5SW5kZXggPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3NvdXJjZU5vZGUuaWRdLm5vZGVJbmRleDtcbiAgICAgICAgICAgIGxldCB0YXJnZXRzID0gc291cmNlTm9kZS50YXJnZXRzO1xuXG4gICAgICAgICAgICBpZiAoeUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlTm9kZU1ldGFkYXRhID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtzb3VyY2VOb2RlLmlkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5Ob2RlcyA9IHRoaXMuX2dyYXBoLmNvbHVtbnM/Lltzb3VyY2VOb2RlTWV0YWRhdGEuY29sdW1uSW5kZXghXT8ubm9kZXM7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFBhcmFsbGVsTm9kZSA9IGNvbHVtbk5vZGVzLmZpbmQoKG5vZGUsIGluZGV4KSA9PiBpbmRleCA+IDAgJiYgIW5vZGUuc3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5leHRQYXJhbGxlbE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgeUluZGV4ID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtuZXh0UGFyYWxsZWxOb2RlLmlkXS5jb2x1bW5JbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cyA9IG5leHRQYXJhbGxlbE5vZGUudGFyZ2V0cztcblxuICAgICAgICAgICAgICAgICAgICBhZGRlZE5vZGUudGFyZ2V0cyA9IHRoaXMuX2ZpbmRTZXJpYWxOb2RlKHlJbmRleCwgdGFyZ2V0cyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhZGRlZE5vZGUudGFyZ2V0cyA9IHNvdXJjZU5vZGUudGFyZ2V0cztcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFkZGVkTm9kZS50YXJnZXRzID0gdGhpcy5fZmluZFNlcmlhbE5vZGUoeUluZGV4LCB0YXJnZXRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0dXBEYXRhU291cmNlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdWIgPSB0aGlzLl9kYXRhU291cmNlQ2hhbmdlZCRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2FkaW5nU3RhdGVzID0gW3RoaXMudGVhbURhdGFTb3VyY2UsIHRoaXMudXNlckRhdGFTb3VyY2UsIHRoaXMud2F0Y2hlckRhdGFTb3VyY2VdXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChkcykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZShkcy5vbkRhdGFSZXF1ZXN0ZWQoKS5waXBlKG1hcFRvKHRydWUpKSwgZHMub25EYXRhUmVjZWl2ZWQoKS5waXBlKG1hcFRvKGZhbHNlKSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChkcy5pc0RhdGFMb2FkaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KGxvYWRpbmdTdGF0ZXMpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgobG9hZGluZ1N0YXRlcykgPT4gbG9hZGluZ1N0YXRlcy5zb21lKEJvb2xlYW4pKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzb21lTG9hZGluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzb21lTG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVJlcXVlc3RlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFSZWNlaXZlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHN1Yik7XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgRGVmYXVsdERpYWxvZ09wdGlvbnMge1xuICAgIHRlYW1EYXRhU291cmNlOiBBcHByb3ZhbEZsb3dUZWFtRGF0YVNvdXJjZTxBcHByb3ZhbFRlYW0+O1xuICAgIHVzZXJEYXRhU291cmNlOiBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZTxBcHByb3ZhbFVzZXI+O1xuICAgIHVzZXJEZXRhaWxzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgcnRsOiBib29sZWFuO1xufVxuIiwiPG5nLWNvbnRhaW5lciBmZENvbXBhY3Q+XG4gICAgPGZkcC1hcHByb3ZhbC1mbG93LW1lc3NhZ2VzXG4gICAgICAgIFsobWVzc2FnZXMpXT1cIl9tZXNzYWdlc1wiXG4gICAgICAgIFt1bmRvTGFzdEFjdGlvbkF2YWlsYWJsZV09XCIhIV9wcmV2aW91c0FwcHJvdmFsUHJvY2Vzc1wiXG4gICAgICAgICh1bmRvTGFzdEFjdGlvbik9XCJfdW5kb0xhc3RBY3Rpb24oKVwiXG4gICAgPjwvZmRwLWFwcHJvdmFsLWZsb3ctbWVzc2FnZXM+XG4gICAgPGZkLWdyaWQtbGlzdFxuICAgICAgICAjZ3JpZExpc3RcbiAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvd19fdG9vbGJhclwiXG4gICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cIl9pc0VkaXRNb2RlID8gJ211bHRpU2VsZWN0JyA6ICdub25lJ1wiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiX29uTm9kZVNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIDxmZC1ncmlkLWxpc3QtdGl0bGUtYmFyIFt0aXRsZV09XCJ0aXRsZSB8fCAoJ3BsYXRmb3JtQXBwcm92YWxGbG93LmRlZmF1bHRUaXRsZScgfCBmZFRyYW5zbGF0ZSlcIj5cbiAgICAgICAgICAgIDxmZC1ncmlkLWxpc3QtdGl0bGUtYmFyLXNwYWNlcj48L2ZkLWdyaWQtbGlzdC10aXRsZS1iYXItc3BhY2VyPlxuICAgICAgICAgICAgQGlmIChpc0VkaXRBdmFpbGFibGUpIHtcbiAgICAgICAgICAgICAgICA8ZmRwLWFwcHJvdmFsLWZsb3ctdG9vbGJhci1hY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIFtncmFwaF09XCJfZ3JhcGhcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWROb2Rlc109XCJfc2VsZWN0ZWROb2Rlc1wiXG4gICAgICAgICAgICAgICAgICAgIFtncmFwaE1ldGFkYXRhXT1cIl9ncmFwaE1ldGFkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzRWRpdE1vZGVdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAoZW50ZXJFZGl0TW9kZSk9XCJfZW50ZXJFZGl0TW9kZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGFkZE5vZGUpPVwiX2FkZE5vZGUoJGV2ZW50Lm5vZGUsICRldmVudC50YXJnZXQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGVkaXRTZWxlY3RlZE5vZGUpPVwiX2VkaXROb2RlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZGVsZXRlU2VsZWN0ZWROb2Rlcyk9XCJfZGVsZXRlU2VsZWN0ZWROb2RlcygpXCJcbiAgICAgICAgICAgICAgICA+PC9mZHAtYXBwcm92YWwtZmxvdy10b29sYmFyLWFjdGlvbnM+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZmQtZ3JpZC1saXN0LXRpdGxlLWJhcj5cbiAgICAgICAgQGlmIChfYXBwcm92YWxQcm9jZXNzLndhdGNoZXJzPy5sZW5ndGggfHwgX2lzRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvd19fd2F0Y2hlcnNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIndhdGNoZXJzTGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X193YXRjaGVycy10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB3YXRjaGVyc0xhYmVsIHx8ICgncGxhdGZvcm1BcHByb3ZhbEZsb3cuZGVmYXVsdFdhdGNoZXJzTGFiZWwnIHwgZmRUcmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIEBpZiAoIV9pc0VkaXRNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHdhdGNoZXIgb2YgX2FwcHJvdmFsUHJvY2Vzcy53YXRjaGVyczsgdHJhY2sgX3RyYWNrQnlGbigkaW5kZXgsIHdhdGNoZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYXZhdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW1hZ2VdPVwid2F0Y2hlci5pbWdVcmwgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ3YXRjaGVyLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGlja2FibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NpcmNsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXZhdGFyQ2xpY2tlZCk9XCJfb25XYXRjaGVyQ2xpY2sod2F0Y2hlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9mZC1hdmF0YXI+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X193YXRjaGVycy1pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1tdWx0aS1pbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcm9wZG93blZhbHVlc109XCJfdXNlcnNGb3JXYXRjaGVyc0xpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cud2F0Y2hlcnNJbnB1dFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheUZuXT1cIl9kaXNwbGF5VXNlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVGbl09XCJfdXNlclZhbHVlRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93QWxsQnV0dG9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiX3NlbGVjdGVkV2F0Y2hlcklkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiX3dhdGNoZXJzU2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkLW11bHRpLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFfZ3JhcGguZXJyb3JzKSB7XG4gICAgICAgICAgICBAaWYgKF9ncmFwaC5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvd19fY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19jb250YWluZXItLWV4dHJhLXBhZGRpbmctc3RhcnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvd19fY29udGFpbmVyLS1leHRyYS1wYWRkaW5nLWVuZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoX3Njcm9sbERpZmYgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvdy1jYXJvdXNlbC1jb250cm9sc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93LWNhcm91c2VsLWNvbnRyb2xzLS1lZGl0LW1vZGVdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoX2Nhcm91c2VsU3RlcHNMZWZ0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LWNhcm91c2VsLWNvbnRyb2xzX19idXR0b24tLXByZXYtc2xpZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cucHJldkJ1dHRvbkFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dFNsaWRlKC0xKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIFtnbHlwaF09XCInbmF2aWdhdGlvbi0nICsgKF9ydGwgPyAncmlnaHQnIDogJ2xlZnQnKSArICctYXJyb3cnXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgX2Nhcm91c2VsU3RlcHNMZWZ0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKF9jYXJvdXNlbFN0ZXBzUmlnaHQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctY2Fyb3VzZWwtY29udHJvbHNfX2J1dHRvbi0tbmV4dC1zbGlkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybUFwcHJvdmFsRmxvdy5uZXh0QnV0dG9uQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0U2xpZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IF9jYXJvdXNlbFN0ZXBzUmlnaHQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1pY29uIFtnbHlwaF09XCInbmF2aWdhdGlvbi0nICsgKF9ydGwgPyAnbGVmdCcgOiAncmlnaHQnKSArICctYXJyb3cnXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1jb250YWluZXItLW11bHRpcGxlLXJvb3Qtbm9kZXNdPVwiX211bHRpcGxlUm9vdE5vZGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvd19fZ3JhcGgtY29udGFpbmVyLS1tdWx0aXBsZS1maW5hbC1ub2Rlc109XCJfbXVsdGlwbGVGaW5hbE5vZGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1zY3JvbGxiYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAjZ3JhcGhDb250YWluZXJFbFxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvd19fZ3JhcGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICNncmFwaEVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC0tZWRpdC1tb2RlXT1cIl9pc0VkaXRNb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2x1bW4gb2YgX2dyYXBoLmNvbHVtbnM7IHRyYWNrIGNvbHVtbjsgbGV0IGNvbHVtbkluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvd19fZ3JhcGgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlIG9mIGNvbHVtbi5ub2RlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayBfdHJhY2tCeUZuKG5vZGVJbmRleCwgbm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vZGVJbmRleCA9ICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkcC1hcHByb3ZhbC1mbG93LW5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXBwcm92YWxGbG93Tm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIl9pc0Nka0RyYWdEaXNhYmxlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWV0YV09XCJfZ3JhcGhNZXRhZGF0YVtub2RlLmlkXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0VkaXRdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNOZXh0Tm9kZUJsYW5rXT1cIl9pc05leHROb2RlQmxhbmsobm9kZSwgY29sdW1uSW5kZXgsIG5vZGVJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tEdWVEYXRlXT1cImNoZWNrRHVlRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkdWVEYXRlVGhyZXNob2xkXT1cImR1ZURhdGVUaHJlc2hvbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVuZGVyQXJyb3ddPVwiY29sdW1uSW5kZXggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbE5vZGVzSW5Db2x1bW5BcHByb3ZlZF09XCIhIWNvbHVtbi5hbGxOb2Rlc0FwcHJvdmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcHJvdmFsU3RhdHVzVGVtcGxhdGVdPVwiYXBwcm92YWxTdGF0dXNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0dXNDb2xvck1hcHBpbmddPVwic3RhdHVzQ29sb3JNYXBwaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWRkKT1cIl9hZGROb2RlKG5vZGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25FZGl0KT1cIl9lZGl0Tm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkRlbGV0ZSk9XCJfb25Ob2RlRGVsZXRlKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiX29uTm9kZUtleURvd24oJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJfZHJhZ0Ryb3BJblByb2dyZXNzID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcmFnUmVsZWFzZWQpPVwiX29uTm9kZURyb3Aobm9kZSwgJGV2ZW50LnNvdXJjZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2RrRHJhZ01vdmVkKT1cIl9vbk5vZGVEcmFnTW92ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUcmljayB3aXRoIHVzaW5nIHByb2plY3Rpb24gdG8gbWFrZSBncmlkIGxpc3QgaXRlbXMgdmlzaWJsZSBmb3IgdGhlIGdyaWQgbGlzdCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWdyaWQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCIhIW5vZGUuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbGxlZEJ5XT1cImFwcHJvdmFsRmxvd05vZGUuYXBwcm92YWxGbG93Tm9kZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVG9vbGJhckNsaWNrXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvd19fZ3JhcGgtbm9kZS1pbm5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLW5vZGUtaW5uZXItLWVkaXRdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByZXNzKT1cIl9vbk5vZGVDbGljayhub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1ncmlkLWxpc3QtaXRlbS10b29sYmFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoX2lzRWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhcHByb3ZhbEZsb3dOb2RlLl9vdmVyZmxvd01lbnVCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWdyaWQtbGlzdC1pdGVtLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYXZhdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtZ3JpZC1saXN0LWl0ZW0taW1hZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW1hZ2VdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYXBwcm92ZXJzLmxlbmd0aCA9PT0gMSA/IG5vZGUuYXBwcm92ZXJzWzBdLmltZ1VybCA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJub2RlLmFwcHJvdmVycy5sZW5ndGggPiAxID8gbm9kZS5kZXNjcmlwdGlvbiA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NpcmNsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkLWF2YXRhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmZC1ncmlkLWxpc3QtaXRlbS1ib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhcHByb3ZhbEZsb3dOb2RlLl9ub2RlQ29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWdyaWQtbGlzdC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmRwLWFwcHJvdmFsLWZsb3ctbm9kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGZpZ3VyZSBmZC1pbGx1c3RyYXRlZC1tZXNzYWdlIHR5cGU9XCJzcG90XCIgW3N2Z0NvbmZpZ109XCJfZW1wdHlBcHByb3ZhbEZsb3dTcG90Q29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmaWdjYXB0aW9uIGZkLWlsbHVzdHJhdGVkLW1lc3NhZ2UtZmlnY2FwdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBmZC1pbGx1c3RyYXRlZC1tZXNzYWdlLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5lbXB0eVRpdGxlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgZmQtaWxsdXN0cmF0ZWQtbWVzc2FnZS10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5lbXB0eUhpbnQnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9maWdjYXB0aW9uPlxuICAgICAgICAgICAgICAgIDwvZmlndXJlPlxuICAgICAgICAgICAgICAgIDwhLS0gVE9ETyAjNTE3ODogUmVwbGFjZSB3aXRoIGlsbHVzdHJhdGVkIGltYWdlIGNvbXBvbmVudCBhZnRlciBpdCBnZXRzIGZpeGVkIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMjhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTI4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTI4IDEyOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNhcElsbHVzLVNwb3QtTm9EYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQxLjYxNzksMzIuNzE3NEg4NC42MjczYTEsMSwwLDAsMSwuNzIzLjMwOTJsNy4yNDQ1LDcuNTgyNCw3LjQ4MTcsNy44NDkxYTEsMSwwLDAsMSwuMjc2MS42OWwtLjAwNDYsNTUuNjA2OWE0LjEwMzgsNC4xMDM4LDAsMCwxLS44Nzg3LDIuMTIxMkE0LjA1NjQsNC4wNTY0LDAsMCwxLDk4LjEsMTA3Ljk2MzFsLTU2LjM4NTguMDMxM2EyLjYxNjcsMi42MTY3LDAsMCwxLTMuMDgxMi0zLjIzMDlsLS4wMTUyLTY5LjA1OTRaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX1BhdHRlcm5TaGFkb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfUGF0dGVyblNoYWRvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zNS43OTI4LDI3LjQ5ODdINzguODAyMmExLDEsMCwwLDEsLjcyMy4zMDkyTDg2Ljc3LDM1LjM5bDcuNDgxNiw3Ljg0OTJhMSwxLDAsMCwxLC4yNzYyLjY5bC0uMDA0Niw1NS42MDY5YTMsMywwLDAsMS0zLDNIMzUuODA4YTIuOTk0NiwyLjk5NDYsMCwwLDEtMy0yLjk5MTNjLS4wMS0xMi4wNTY0LS4wNDIzLTU3LjAxMTYtLjAxNTItNjkuMDU5NUEyLjk5NDMsMi45OTQzLDAsMCwxLDM1Ljc5MjgsMjcuNDk4N1pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfT2JqZWN0RmlsbENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZpbGw6IHZhcigtLXNhcElsbHVzX09iamVjdEZpbGxDb2xvcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05My4yOTc4LDQ0LjUzMzVINzguODIwOGEuOTkyNS45OTI1LDAsMCwxLS45NzQtMS4wMVYyOC41MTA4YS45Ny45NywwLDAsMSwxLjY2MjgtLjcxNDNMOTMuOTg2NSw0Mi44MDkyQTEuMDE1MSwxLjAxNTEsMCwwLDEsOTMuMjk3OCw0NC41MzM1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYXBJbGx1c19CcmFuZENvbG9yU2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZpbGw6IHZhcigtLXNhcElsbHVzX0JyYW5kQ29sb3JTZWNvbmRhcnkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTA0LjYwOCwzOC45NDg1bDUuOTE1Ny0xLjc3MjFjMS4zMi0uMzk1NC43NTg0LTIuNTI1OC0uNTY4OS0yLjEyODJMMTA0LjAzOTIsMzYuODJjLTEuMzIuMzk1My0uNzU4NCwyLjUyNTguNTY4OCwyLjEyODJaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX0xheWVyaW5nMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19MYXllcmluZzEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNODUuMjk3MywyMS4yNDY1bC45NzE4LTUuOTMzMWMuMjE1NC0xLjMxNTEtMS43NzctMS44ODA3LTEuOTk0MS0uNTU1NGwtLjk3MTgsNS45MzMyYy0uMjE1NSwxLjMxNTEsMS43NzcsMS44ODA3LDEuOTk0MS41NTUzWlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYXBJbGx1c19MYXllcmluZzFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfTGF5ZXJpbmcxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTk1LjMwMzQsMjkuMDAxNWExLjAxLDEuMDEsMCwwLDEtLjY4MzctLjI2NywxLjA3ODMsMS4wNzgzLDAsMCwxLS4wODY0LTEuNDkzMmw1Ljk1MTEtNi44ODU3YTEuMDEsMS4wMSwwLDAsMSwxLjQ1MzgtLjA4ODQsMS4wNzg1LDEuMDc4NSwwLDAsMSwuMDg2NSwxLjQ5MzJsLTUuOTUxMSw2Ljg4NThBMS4wMTY0LDEuMDE2NCwwLDAsMSw5NS4zMDM0LDI5LjAwMTVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX0xheWVyaW5nMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19MYXllcmluZzEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOTQuODc0Nyw0Mi44ODYxLDgwLjA4NTUsMjcuNDYyM2ExLjUxNTIsMS41MTUyLDAsMCwwLTEuMDg4NS0uNDYzNkgzNS44MDdhMy41MDksMy41MDksMCwwLDAtMy41MTQ2LDMuNDgzNmMtLjAyOTQsMTMuMjg1Ny4wMTM3LDY2Ljc1NTkuMDE1Nyw2OS4wMjU3YTMuNTA3NiwzLjUwNzYsMCwwLDAsMy41MTQ2LDMuNDg5NEg5MS43NzA5YTMuNTEwNiwzLjUxMDYsMCwwLDAsMy41MTQ2LTMuNDk4MmwuMDA1LTU1LjU3ODVBMS40OSwxLjQ5LDAsMCwwLDk0Ljg3NDcsNDIuODg2MVptLTE2LjIxLTE0LjgzNTVhMS4xNSwxLjE1LDAsMCwxLC4yNTYxLS4wMzA5LDEuMDQsMS4wNCwwLDAsMSwuNTEuMjEzNGwxNC4yNzYsMTQuODgzNy4wMTk0LjAyYS41ODkxLjU4OTEsMCwwLDEsLjA5NjguNjI1MWMtLjEwMTYuMTc2NC0uNDA4Ni4yNC0uNjkuMjRMNzguODM1NSw0NGEuNjAzMS42MDMxLDAsMCwxLS41NDcyLS42MTMxYy0uMDA4Ny00Ljk1ODgtLjAxNy05LjkwMTUtLjAwMzUtMTQuODY4OUEuNTE4OS41MTg5LDAsMCwxLDc4LjY2NDYsMjguMDUwNlptMTMuMTA2Miw3My45NUgzNS44MTg4YTIuNTA0NSwyLjUwNDUsMCwwLDEtMi41MTA3LTIuNDkxYy0uMDAyLTIuMjY5NC0uMDQ1MS01NS43NC0uMDE1Ny02OS4wMjQ4YTIuNTA1NCwyLjUwNTQsMCwwLDEsMi41MTA3LTIuNDg2MUg3Ny4zNjg0YTEuNDksMS40OSwwLDAsMC0uMDk3Ni41MTA2VjQzLjQ5MzRBMS41MTQ1LDEuNTE0NSwwLDAsMCw3OC43ODk0LDQ1SDc4LjkyTDk0LjI4Niw0Ny45NzQ5bC0uMDA0Niw1MS41MjY5QTIuNTA3NCwyLjUwNzQsMCwwLDEsOTEuNzcwOCwxMDIuMDAwNlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfU3Ryb2tlRGV0YWlsQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfU3Ryb2tlRGV0YWlsQ29sb3IpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPC9mZC1ncmlkLWxpc3Q+XG4gICAgQGlmIChfaXNFZGl0TW9kZSkge1xuICAgICAgICA8ZGl2IGZkLWJhcj5cbiAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtQXBwcm92YWxGbG93LmVkaXRNb2RlU2F2ZUJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVTYXZlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfc2F2ZUVkaXRNb2RlQ2hhbmdlcygpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cuZWRpdE1vZGVFeGl0QnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVFeGl0QnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfZXhpdEVkaXRNb2RlKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
863
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2FwcHJvdmFsLWZsb3cvYXBwcm92YWwtZmxvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2FwcHJvdmFsLWZsb3cvYXBwcm92YWwtZmxvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRHLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBMEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFB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LEtBQUs7Z0JBSU4sa0JBQWtCO3NCQURqQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQU9HLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFPRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBR0ksU0FBUztzQkFBbEIsTUFBTTtnQkFHRyxZQUFZO3NCQUFyQixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBR0csV0FBVztzQkFBcEIsTUFBTTtnQkFHRyxhQUFhO3NCQUF0QixNQUFNO2dCQUlHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTTtnQkFHd0IsaUJBQWlCO3NCQUEvQyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFHUCxRQUFRO3NCQUE3QixTQUFTO3VCQUFDLFNBQVM7Z0JBR0csU0FBUztzQkFBL0IsU0FBUzt1QkFBQyxVQUFVO2dCQUdvQixlQUFlO3NCQUF2RCxZQUFZO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWcgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IERPV05fQVJST1csIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIGZyb21FdmVudCwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIG1hcFRvLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBLZXlVdGlsLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kaWFsb2cnO1xuaW1wb3J0IHsgR3JpZExpc3RDb21wb25lbnQsIEdyaWRMaXN0U2VsZWN0aW9uRXZlbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZ3JpZC1saXN0JztcblxuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEF2YXRhckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9hdmF0YXInO1xuaW1wb3J0IHsgQmFyQ29tcG9uZW50LCBCYXJFbGVtZW50RGlyZWN0aXZlLCBCYXJSaWdodERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9iYXInO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHtcbiAgICBHcmlkTGlzdEl0ZW1Cb2R5RGlyZWN0aXZlLFxuICAgIEdyaWRMaXN0SXRlbUNvbXBvbmVudCxcbiAgICBHcmlkTGlzdEl0ZW1JbWFnZURpcmVjdGl2ZSxcbiAgICBHcmlkTGlzdEl0ZW1Ub29sYmFyQ29tcG9uZW50LFxuICAgIEdyaWRMaXN0VGl0bGVCYXJDb21wb25lbnQsXG4gICAgR3JpZExpc3RUaXRsZUJhclNwYWNlckNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZ3JpZC1saXN0JztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWNvbic7XG5pbXBvcnQge1xuICAgIElsbHVzdHJhdGVkTWVzc2FnZUNvbXBvbmVudCxcbiAgICBJbGx1c3RyYXRlZE1lc3NhZ2VGaWdjYXB0aW9uQ29tcG9uZW50LFxuICAgIElsbHVzdHJhdGVkTWVzc2FnZVRleHREaXJlY3RpdmUsXG4gICAgSWxsdXN0cmF0ZWRNZXNzYWdlVGl0bGVEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lsbHVzdHJhdGVkLW1lc3NhZ2UnO1xuaW1wb3J0IHsgTXVsdGlJbnB1dENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tdWx0aS1pbnB1dCc7XG5pbXBvcnQgeyBPYmplY3RTdGF0dXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvb2JqZWN0LXN0YXR1cyc7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dUZWFtRGF0YVNvdXJjZSxcbiAgICBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZSxcbiAgICBEQVRBX1BST1ZJREVSUyxcbiAgICBEYXRhUHJvdmlkZXJcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgICBBUFBST1ZBTF9GTE9XX05PREVfVFlQRVMsXG4gICAgQWRkTm9kZURpYWxvZ0Zvcm1EYXRhLFxuICAgIEFkZE5vZGVEaWFsb2dSZWZEYXRhLFxuICAgIEFwcHJvdmFsRmxvd0FkZE5vZGVDb21wb25lbnQsXG4gICAgQXBwcm92YWxGbG93Tm9kZVRhcmdldFxufSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctYWRkLW5vZGUvYXBwcm92YWwtZmxvdy1hZGQtbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dBcHByb3ZlckRldGFpbHNDb21wb25lbnQsXG4gICAgQXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzRGlhbG9nUmVmRGF0YVxufSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctYXBwcm92ZXItZGV0YWlscy9hcHByb3ZhbC1mbG93LWFwcHJvdmVyLWRldGFpbHMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxGbG93R3JhcGgsXG4gICAgQXBwcm92YWxHcmFwaE1ldGFkYXRhLFxuICAgIGdlbmVyYXRlQXBwcm92YWxGbG93R3JhcGgsXG4gICAgZ2VuZXJhdGVBcHByb3ZhbEZsb3dHcmFwaE1ldGFkYXRhXG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1ncmFwaCc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd01lc3NhZ2UsXG4gICAgQXBwcm92YWxGbG93TWVzc2FnZVR5cGUsXG4gICAgQXBwcm92YWxGbG93TWVzc2FnZXNDb21wb25lbnRcbn0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LW1lc3NhZ2VzL2FwcHJvdmFsLWZsb3ctbWVzc2FnZXMuY29tcG9uZW50JztcbmltcG9ydCB7IEFwcHJvdmFsRmxvd05vZGVDb21wb25lbnQgfSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctbm9kZS9hcHByb3ZhbC1mbG93LW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxGbG93U2VsZWN0VHlwZUNvbXBvbmVudCxcbiAgICBTZWxlY3RUeXBlRGlhbG9nRm9ybURhdGFcbn0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LXNlbGVjdC10eXBlL2FwcHJvdmFsLWZsb3ctc2VsZWN0LXR5cGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFwcHJvdmFsRmxvd1Rvb2xiYXJBY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LXRvb2xiYXItYWN0aW9ucy9hcHByb3ZhbC1mbG93LXRvb2xiYXItYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBkaXNwbGF5VXNlckZuLFxuICAgIGdldEJsYW5rQXBwcm92YWxHcmFwaE5vZGUsXG4gICAgZ2V0R3JhcGhOb2RlcyxcbiAgICBpc05vZGVUYXJnZXRzSW5jbHVkZUlkLFxuICAgIHRyYWNrQnlGbixcbiAgICB1c2VyVmFsdWVGblxufSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEdyYXBoTm9kZSxcbiAgICBBcHByb3ZhbEdyYXBoTm9kZU1ldGFkYXRhLFxuICAgIEFwcHJvdmFsTm9kZSxcbiAgICBBcHByb3ZhbFByb2Nlc3MsXG4gICAgQXBwcm92YWxTdGF0dXMsXG4gICAgQXBwcm92YWxUZWFtLFxuICAgIEFwcHJvdmFsVXNlcixcbiAgICBTZW5kUmVtaW5kZXJzRGF0YVxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXBwcm92YWxGbG93QWRkTm9kZVZpZXdTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hcHByb3ZhbC1mbG93LWFkZC1ub2RlLXZpZXcuc2VydmljZSc7XG5cbmxldCBkZWZhdWx0SWQgPSAwO1xuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICogQXBwcm92YWwgRmxvdyBjb21wb25lbnQgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuNDAuMFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC1hcHByb3ZhbC1mbG93JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXBwcm92YWwtZmxvdy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2FwcHJvdmFsLWZsb3cuY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbQXBwcm92YWxGbG93QWRkTm9kZVZpZXdTZXJ2aWNlXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29udGVudERlbnNpdHlEaXJlY3RpdmUsXG4gICAgICAgIEFwcHJvdmFsRmxvd01lc3NhZ2VzQ29tcG9uZW50LFxuICAgICAgICBHcmlkTGlzdENvbXBvbmVudCxcbiAgICAgICAgR3JpZExpc3RUaXRsZUJhckNvbXBvbmVudCxcbiAgICAgICAgR3JpZExpc3RUaXRsZUJhclNwYWNlckNvbXBvbmVudCxcbiAgICAgICAgQXBwcm92YWxGbG93VG9vbGJhckFjdGlvbnNDb21wb25lbnQsXG4gICAgICAgIEF2YXRhckNvbXBvbmVudCxcbiAgICAgICAgTXVsdGlJbnB1dENvbXBvbmVudCxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIEFwcHJvdmFsRmxvd05vZGVDb21wb25lbnQsXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIEdyaWRMaXN0SXRlbUNvbXBvbmVudCxcbiAgICAgICAgR3JpZExpc3RJdGVtVG9vbGJhckNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgR3JpZExpc3RJdGVtSW1hZ2VEaXJlY3RpdmUsXG4gICAgICAgIEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmUsXG4gICAgICAgIEJhckNvbXBvbmVudCxcbiAgICAgICAgQmFyUmlnaHREaXJlY3RpdmUsXG4gICAgICAgIEJhckVsZW1lbnREaXJlY3RpdmUsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgSWxsdXN0cmF0ZWRNZXNzYWdlQ29tcG9uZW50LFxuICAgICAgICBJbGx1c3RyYXRlZE1lc3NhZ2VGaWdjYXB0aW9uQ29tcG9uZW50LFxuICAgICAgICBJbGx1c3RyYXRlZE1lc3NhZ2VUaXRsZURpcmVjdGl2ZSxcbiAgICAgICAgSWxsdXN0cmF0ZWRNZXNzYWdlVGV4dERpcmVjdGl2ZSxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBBcHByb3ZhbEZsb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogVGl0bGUgd2hpY2ggaXMgZGlzcGxheWVkIGluIHRoZSBoZWFkZXIgb2YgdGhlIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogVmFsdWUgb2YgdGhlIGFwcHJvdmFsIGZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHZhbHVlOiBBcHByb3ZhbFByb2Nlc3M7XG5cbiAgICAvKiogRGF0YSBzb3VyY2UgZm9yIHRoZSB1c2VycyBvZiBBcHByb3ZhbCBGbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB1c2VyRGF0YVNvdXJjZTogQXBwcm92YWxGbG93VXNlckRhdGFTb3VyY2U8QXBwcm92YWxVc2VyPjtcblxuICAgIC8qKiBEYXRhIHNvdXJjZSBmb3IgdGhlIHdhdGNoZXJzIG9mIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHdhdGNoZXJEYXRhU291cmNlOiBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZTxBcHByb3ZhbFVzZXI+O1xuXG4gICAgLyoqIERhdGEgc291cmNlIGZvciB0aGUgdGVhbXMgb2YgQXBwcm92YWwgRmxvdyBjb21wb25lbnQuICovXG4gICAgQElucHV0KCkgdGVhbURhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlPEFwcHJvdmFsVGVhbT47XG5cbiAgICAvKiogQSByZWZlcmVuY2UgdG8gdGhlIHVzZXIgZGV0YWlscyB0ZW1wbGF0ZSAqL1xuICAgIEBJbnB1dCgpIHVzZXJEZXRhaWxzVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQSByZWZlcmVuY2UgdG8gdGhlIGFwcCBjdXN0b20gc3RhdHVzZXMgKi9cbiAgICBASW5wdXQoKSBhcHByb3ZhbFN0YXR1c1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEN1c3RvbSBzdGF0dXMgdG8gY29sb3IgbWFwcGluZyAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXR1c0NvbG9yTWFwcGluZzogUmVjb3JkPEFwcHJvdmFsU3RhdHVzLCBPYmplY3RTdGF0dXM+O1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBkdWUgZGF0ZSB3YXJuaW5nIGluIHN0YXR1cyAqL1xuICAgIEBJbnB1dCgpIGNoZWNrRHVlRGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIE51bWJlciBvZiBkYXlzIGJlZm9yZSBkdWUgZGF0ZSB3aGVuIHN0YXR1cyBjaGFuZ2VzIHRvIGB3YXJuaW5nYCB3aXRoIHRleHQgJ0R1ZSBpbiBYIGRheXMnLlxuICAgICAqICBOb3QgdXNlZCBpZiAnY2hlY2tEdWVEYXRlJyBlcXVhbHMgZmFsc2UgKi9cbiAgICBASW5wdXQoKSBkdWVEYXRlVGhyZXNob2xkID0gNztcblxuICAgIC8qKiBBIGxpc3Qgb2YgYXBwcm92YWwgc3RhdHVzZXMgdGhhdCBhbGxvdyBzZW5kaW5nIHJlbWluZGVycyB0byB0aGVpciBhcHByb3ZlcnMgKi9cbiAgICBASW5wdXQoKSBhbGxvd1NlbmRSZW1pbmRlcnNGb3JTdGF0dXNlczogQXBwcm92YWxTdGF0dXNbXSA9IFsnaW4gcHJvZ3Jlc3MnLCAnbm90IHN0YXJ0ZWQnXTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBhcHByb3ZhbCBmbG93IGlzIGVkaXRhYmxlICovXG4gICAgQElucHV0KCkgaXNFZGl0QXZhaWxhYmxlID0gZmFsc2U7XG5cbiAgICAvKiogVGV4dCBsYWJlbCBmb3Igd2F0Y2hlcnMgbGlzdCAqL1xuICAgIEBJbnB1dCgpIHdhdGNoZXJzTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBFbmFibGVzIG9yIGRpc2FibGVzIGFiaWxpdHkgdG8gYWRkIHBhcmFsbGVsIG5vZGVzICovXG4gICAgQElucHV0KCkgYWxsb3dBZGRQYXJhbGxlbE5vZGVzID0gdHJ1ZTtcblxuICAgIC8qKiBEaXNhYmxlcyBzYXZlIGJ1dHRvbiwgc2F2ZSBidXR0b24gaXMgZW5hYmxlZCBieSBkZWZhdWx0ICovXG4gICAgQElucHV0KCkgZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcblxuICAgIC8qKiBEaXNhYmxlcyBleGl0IGJ1dHRvbiwgZXhpdCBidXR0b24gaXMgZW5hYmxlZCBieSBkZWZhdWx0ICovXG4gICAgQElucHV0KCkgZGlzYWJsZUV4aXRCdXR0b24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIGVudGl0eSBmb3Igd2hpY2ggdXNlcnMgRGF0YVByb3ZpZGVyIHdpbGwgYmUgbG9hZGVkLlxuICAgICAqIEludGVybmFsbHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gbG9va3VwIHRvIHNvbWUgcmVnaXN0cnlcbiAgICAgKiBhbmQgcmV0cmlldmUgdGhlIGJlc3QgbWF0Y2hpbmcgRGF0YVByb3ZpZGVyIHRoYXQgaXMgc2V0IG9uIGFwcGxpY2F0aW9uIGxldmVsXG4gICAgICovXG4gICAgQElucHV0KCkgdXNlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXk/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHRlYW1zIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC5cbiAgICAgKiBJbnRlcm5hbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGxvb2t1cCB0byBzb21lIHJlZ2lzdHJ5XG4gICAgICogYW5kIHJldHJpZXZlIHRoZSBiZXN0IG1hdGNoaW5nIERhdGFQcm92aWRlciB0aGF0IGlzIHNldCBvbiBhcHBsaWNhdGlvbiBsZXZlbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRlYW1zRGF0YVByb3ZpZGVyRW50aXR5S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZW50aXR5IGZvciB3aGljaCBhcHByb3ZhbCBmbG93IERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC5cbiAgICAgKiBJbnRlcm5hbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGxvb2t1cCB0byBzb21lIHJlZ2lzdHJ5XG4gICAgICogYW5kIHJldHJpZXZlIHRoZSBiZXN0IG1hdGNoaW5nIERhdGFQcm92aWRlciB0aGF0IGlzIHNldCBvbiBhcHBsaWNhdGlvbiBsZXZlbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHdhdGNoZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgb24gYXBwcm92YWwgZmxvdyBub2RlIGNsaWNrLiAqL1xuICAgIEBPdXRwdXQoKSBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEFwcHJvdmFsTm9kZT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIG9uIGFwcHJvdmFsIGZsb3cgbm9kZSBhZGQgKi9cbiAgICBAT3V0cHV0KCkgYWZ0ZXJOb2RlQWRkID0gbmV3IEV2ZW50RW1pdHRlcjxBcHByb3ZhbE5vZGU+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCBvbiBhcHByb3ZhbCBmbG93IG5vZGUgZWRpdCAqL1xuICAgIEBPdXRwdXQoKSBhZnRlck5vZGVFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxBcHByb3ZhbE5vZGU+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVudmVyIHNhdmUgaXMgY2xpY2tlZCBpbiBlZGl0IG1vZGUgICovXG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcHByb3ZhbFByb2Nlc3M+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuZXZlciByZW1pbmRlcnMgc2hvdWxkIGJlIHNlbnQgKi9cbiAgICBAT3V0cHV0KCkgc2VuZFJlbWluZGVycyA9IG5ldyBFdmVudEVtaXR0ZXI8U2VuZFJlbWluZGVyc0RhdGE+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBzdGFydGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBmaW5pc2hlZC4gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBAT3V0cHV0KCkgb25EYXRhUmVjZWl2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyYXBoQ29udGFpbmVyRWwnKSBfZ3JhcGhDb250YWluZXJFbDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyYXBoRWwnKSBfZ3JhcGhFbDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyaWRMaXN0JykgX2dyaWRMaXN0OiBHcmlkTGlzdENvbXBvbmVudDxBcHByb3ZhbEdyYXBoTm9kZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oQXBwcm92YWxGbG93Tm9kZUNvbXBvbmVudCkgX25vZGVDb21wb25lbnRzOiBRdWVyeUxpc3Q8QXBwcm92YWxGbG93Tm9kZUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hcHByb3ZhbFByb2Nlc3M6IEFwcHJvdmFsUHJvY2VzcztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2luaXRpYWxBcHByb3ZhbFByb2Nlc3M/OiBBcHByb3ZhbFByb2Nlc3M7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9wcmV2aW91c0FwcHJvdmFsUHJvY2Vzcz86IEFwcHJvdmFsUHJvY2VzcztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dyYXBoOiBBcHByb3ZhbEZsb3dHcmFwaDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzQ2Fyb3VzZWwgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dyYXBoTWV0YWRhdGE6IEFwcHJvdmFsR3JhcGhNZXRhZGF0YSA9IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNFZGl0TW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdXNlcnNGb3JXYXRjaGVyc0xpc3Q6IEFwcHJvdmFsVXNlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkV2F0Y2hlcnM6IEFwcHJvdmFsVXNlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3RlZFdhdGNoZXJJZHM6IEFwcHJvdmFsVXNlclsnaWQnXVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlczogQXBwcm92YWxGbG93TWVzc2FnZVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kaXNwbGF5VXNlckZuID0gZGlzcGxheVVzZXJGbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3VzZXJWYWx1ZUZuID0gdXNlclZhbHVlRm47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90cmFja0J5Rm4gPSB0cmFja0J5Rm47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9lbXB0eUFwcHJvdmFsRmxvd1Nwb3RDb25maWcgPSB7XG4gICAgICAgIHNwb3Q6IHsgdXJsOiAnJywgaWQ6ICdzYXBJbGx1cy1TcG90LU5vRGF0YScgfVxuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tdWx0aXBsZVJvb3ROb2RlcyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbXVsdGlwbGVGaW5hbE5vZGVzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kcmFnRHJvcEluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgYXBwcm92YWxGbG93VW5pcXVlSWQgPSBgZmRwLWFwcHJvdmFsLWZsb3ctJHsrK2RlZmF1bHRJZH1gO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lZGl0TW9kZUluaXRTdWI6IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGF0YVNvdXJjZUNoYW5nZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEQVRBX1BST1ZJREVSUykgcHJpdmF0ZSBwcm92aWRlcnM6IE1hcDxzdHJpbmcsIERhdGFQcm92aWRlcjxhbnk+PixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZygnQXBwcm92YWxGbG93Q29tcG9uZW50IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBuZXh0IHJlbGVhc2UuJyk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgYW5kIGluaXRpYWwgc3RhdGVzIG9mIGFwcHJvdmFsIHByb2Nlc3MgKi9cbiAgICBnZXQgYXBwcm92YWxQcm9jZXNzKCk6IEFwcHJvdmFsUHJvY2VzcyB7XG4gICAgICAgIHJldHVybiBjbG9uZURlZXAodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfcnRsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZT8ucnRsLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3NlbGVjdGVkTm9kZXMoKTogQXBwcm92YWxHcmFwaE5vZGVbXSB7XG4gICAgICAgIHJldHVybiBnZXRHcmFwaE5vZGVzKHRoaXMuX2dyYXBoKS5maWx0ZXIoKG5vZGUpID0+IG5vZGUuc2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy51c2VyRGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgY29uc3QgdXNlcnNEUCA9IHRoaXMudXNlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXkgJiYgdGhpcy5wcm92aWRlcnM/LmdldCh0aGlzLnVzZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5KTtcbiAgICAgICAgICAgIGlmICh1c2Vyc0RQKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyRGF0YVNvdXJjZSA9IG5ldyBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZSh1c2Vyc0RQKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc29sdmUgdXNlcnMgZGF0YSBzb3VyY2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlckRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoZXJzRFAgPVxuICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXkgJiYgdGhpcy5wcm92aWRlcnM/LmdldCh0aGlzLndhdGNoZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5KTtcbiAgICAgICAgICAgIGlmICh3YXRjaGVyc0RQKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53YXRjaGVyRGF0YVNvdXJjZSA9IG5ldyBBcHByb3ZhbEZsb3dVc2VyRGF0YVNvdXJjZSh3YXRjaGVyc0RQKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc29sdmUgd2F0Y2hlcnMgZGF0YSBzb3VyY2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudGVhbURhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlYW1zRFAgPSB0aGlzLnRlYW1zRGF0YVByb3ZpZGVyRW50aXR5S2V5ICYmIHRoaXMucHJvdmlkZXJzPy5nZXQodGhpcy50ZWFtc0RhdGFQcm92aWRlckVudGl0eUtleSk7XG4gICAgICAgICAgICBpZiAodGVhbXNEUCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGVhbURhdGFTb3VyY2UgPSBuZXcgQXBwcm92YWxGbG93VGVhbURhdGFTb3VyY2UodGVhbXNEUCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCByZXNvbHZlIHRlYW1zIGRhdGEgc291cmNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9saXN0ZW5PblJlc2l6ZSgpO1xuICAgICAgICB0aGlzLl9zZXR1cERhdGFTb3VyY2VTdWJzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSB0aGlzLnZhbHVlID8/IHsgd2F0Y2hlcnM6IFtdLCBub2RlczogW10gfTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxBcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAocHJvY2Vzcyk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcocHJvY2Vzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy51c2VyRGF0YVNvdXJjZSB8fCBjaGFuZ2VzLndhdGNoZXJEYXRhU291cmNlIHx8IGNoYW5nZXMudGVhbURhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VkJC5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNOZXh0Tm9kZUJsYW5rKG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlLCBjb2x1bW5JbmRleDogbnVtYmVyLCBub2RlSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHRoaXMuX2dyYXBoLmNvbHVtbnNbY29sdW1uSW5kZXggKyAxXT8ubm9kZXNbbm9kZUluZGV4XTtcbiAgICAgICAgY29uc3QgbmV4dE5vZGVCbGFuayA9IG5leHROb2RlPy5ibGFuaztcbiAgICAgICAgY29uc3QgbmV4dE5vZGVQYXJhbGxlbEVuZCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbbmV4dE5vZGU/LmlkXT8ucGFyYWxsZWxFbmQ7XG5cbiAgICAgICAgcmV0dXJuICFub2RlLmJsYW5rICYmICEhbmV4dE5vZGVCbGFuayAmJiAhbmV4dE5vZGVQYXJhbGxlbEVuZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc0Nka0RyYWdEaXNhYmxlZChub2RlOiBBcHByb3ZhbEdyYXBoTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2lzRWRpdE1vZGUgfHwgbm9kZS5ibGFuayB8fCBub2RlLnNwYWNlIHx8IG5vZGUuc3RhdHVzICE9PSAnbm90IHN0YXJ0ZWQnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE5vZGUgY2xpY2sgaGFuZGxlciAqL1xuICAgIF9vbk5vZGVDbGljayhub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RyYWdEcm9wSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuPEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0RpYWxvZ1JlZkRhdGE+KFxuICAgICAgICAgICAgQXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dTZW5kUmVtaW5kZXI6IHRoaXMuYWxsb3dTZW5kUmVtaW5kZXJzRm9yU3RhdHVzZXMuaW5jbHVkZXMobm9kZS5zdGF0dXMpLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0RGlhbG9nT3B0aW9uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLl9pbmplY3RvclxuICAgICAgICApO1xuXG4gICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKHJlbWluZGVyVGFyZ2V0cykgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVtaW5kZXJUYXJnZXRzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFJlbWluZGVycy5lbWl0KHsgdXNlcnM6IHJlbWluZGVyVGFyZ2V0cywgbm9kZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdChub2RlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbk5vZGVBZGQobm9kZTogQXBwcm92YWxOb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWZ0ZXJOb2RlQWRkLmVtaXQobm9kZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Ob2RlRWRpdChub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZnRlck5vZGVFZGl0LmVtaXQobm9kZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Ob2RlU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBHcmlkTGlzdFNlbGVjdGlvbkV2ZW50PEFwcHJvdmFsR3JhcGhOb2RlPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9ncmFwaC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sdW1uLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBub2RlLnNlbGVjdGVkID0gISFldmVudC5zZWxlY3Rpb24uZmluZCgoX25vZGUpID0+IF9ub2RlLmlkID09PSBub2RlLmlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBXYXRjaGVyJ3MgYXZhdGFyIGNsaWNrIGhhbmRsZXIgKi9cbiAgICBfb25XYXRjaGVyQ2xpY2sod2F0Y2hlcjogQXBwcm92YWxVc2VyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuPEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0RpYWxvZ1JlZkRhdGE+KEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHdhdGNoZXIsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdERpYWxvZ09wdGlvbnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHJpdmUgbWV0YWRhdGEgYnkgbm9kZSBpZCAqL1xuICAgIGdldE5vZGVNZXRhZGF0YUJ5Tm9kZUlkKG5vZGVJZDogc3RyaW5nKTogQXBwcm92YWxHcmFwaE5vZGVNZXRhZGF0YSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmFwaE1ldGFkYXRhW25vZGVJZF07XG4gICAgfVxuXG4gICAgLyoqIFNjcm9sbCB0byB0aGUgbmV4dCBob3Jpem9udGFsIHNsaWRlICovXG4gICAgbmV4dFNsaWRlKGRpciA9IDEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMTtcblxuICAgICAgICBsZXQgcG9zID0gMDtcblxuICAgICAgICBpZiAoZGlyID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0U3RlcCA9IHRoaXMuX2Nhcm91c2VsU3RlcHNSaWdodCA9PT0gMTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRTdGVwID0gdGhpcy5fY2Fyb3VzZWxTdGVwc0NvdW50IC0gdGhpcy5fY2Fyb3VzZWxTdGVwc1JpZ2h0ICsgMTtcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVSaWdodFBvaW50ID0gdGhpcy5fY2Fyb3VzZWxTdGVwU2l6ZSAqIG5leHRTdGVwICsgKGxhc3RTdGVwID8gMCA6IHRocmVzaG9sZCk7XG4gICAgICAgICAgICBwb3MgPSB2aXNpYmxlUmlnaHRQb2ludCAtIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTdGVwID0gdGhpcy5fY2Fyb3VzZWxTdGVwc0xlZnQgPT09IDE7XG4gICAgICAgICAgICBjb25zdCBuZXh0U3RlcCA9IHRoaXMuX2Nhcm91c2VsU3RlcHNMZWZ0IC0gMTtcbiAgICAgICAgICAgIHBvcyA9IHRoaXMuX2Nhcm91c2VsU3RlcFNpemUgKiBuZXh0U3RlcCAtIChsYXN0U3RlcCA/IDAgOiB0aHJlc2hvbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0U2Nyb2xsUG9zaXRpb24ocG9zKTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFNjcm9sbFBvc2l0aW9uKHBvczogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxUbyh7XG4gICAgICAgICAgICBsZWZ0OiBwb3MsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tb3ZlQ29sSW5WaWV3KGNvbEluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuW2NvbEluZGV4XS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHg6IG5vZGVYLCB3aWR0aCB9ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS54O1xuXG4gICAgICAgIGNvbnN0IGxlZnQgPSBub2RlWCAtIGRlbHRhO1xuICAgICAgICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcblxuICAgICAgICBpZiAobGVmdCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFNjcm9sbFBvc2l0aW9uKHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ICsgbGVmdCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmlnaHQgPiB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFNjcm9sbFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ICsgcmlnaHQgLSB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBIYW5kbGUgbm9kZSBrZXlkb3duIGFuZCBmb2N1cyBvdGhlciBub2RlIGJhc2VkIG9uIHdoaWNoIGtleSBpcyBwcmVzc2VkICovXG4gICAgX29uTm9kZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICghS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtVUF9BUlJPVywgRE9XTl9BUlJPVywgUklHSFRfQVJST1csIExFRlRfQVJST1ddKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBub2RlSW5kZXgsIGNvbHVtbkluZGV4IH0gPSB0aGlzLl9ncmFwaE1ldGFkYXRhW25vZGUuaWRdO1xuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IG5leHRGb2N1c1RhcmdldDogQXBwcm92YWxHcmFwaE5vZGUgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBub2RlSW5kZXggPT09ICdudW1iZXInICYmIHR5cGVvZiBjb2x1bW5JbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZvY3VzVGFyZ2V0ID0gdGhpcy5fZ2V0TmV4dFZlcnRpY2FsTm9kZShub2RlSW5kZXgsIGNvbHVtbkluZGV4LCAndXAnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIG5leHRGb2N1c1RhcmdldCA9IHRoaXMuX2dldE5leHRWZXJ0aWNhbE5vZGUobm9kZUluZGV4LCBjb2x1bW5JbmRleCwgJ2Rvd24nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIExFRlRfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgbmV4dEZvY3VzVGFyZ2V0ID0gdGhpcy5fZ2V0TmV4dEhvcml6b250YWxOb2RlKG5vZGVJbmRleCwgY29sdW1uSW5kZXgsIHRoaXMuX3J0bCA/ICdyaWdodCcgOiAnbGVmdCcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgUklHSFRfQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgbmV4dEZvY3VzVGFyZ2V0ID0gdGhpcy5fZ2V0TmV4dEhvcml6b250YWxOb2RlKG5vZGVJbmRleCwgY29sdW1uSW5kZXgsIHRoaXMuX3J0bCA/ICdsZWZ0JyA6ICdyaWdodCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRGb2N1c1RhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNOb2RlKG5leHRGb2N1c1RhcmdldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBGZXRjaCBhbGwgbmVjZXNzYXJ5IGRhdGEgYW5kIGVudGVyIGVkaXQgbW9kZSAqL1xuICAgIF9lbnRlckVkaXRNb2RlKCk6IHZvaWQge1xuICAgICAgICAvLyB0aGVyZSdzIG5vIHN1cHBvcnQgZm9yIHNlYXJjaGluZyBpbiBtdWx0aS1pbnB1dCwgc28gZ3JhYmJpbmcgYWxsIHdhdGNoZXJzXG4gICAgICAgIC8vIHRyaWdnZXJpbmcgaW5pdGlhbCBsb2FkaW5nIG9mIGRhdGEgaW4gZGF0YSBzb3VyY2VzXG4gICAgICAgIHRoaXMud2F0Y2hlckRhdGFTb3VyY2UubWF0Y2goKTtcbiAgICAgICAgdGhpcy5fZWRpdE1vZGVJbml0U3ViID0gdGhpcy53YXRjaGVyRGF0YVNvdXJjZS5vcGVuKCkuc3Vic2NyaWJlKCh3YXRjaGVycykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXNlcnNGb3JXYXRjaGVyc0xpc3QgPSB3YXRjaGVycztcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkV2F0Y2hlcnMgPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mud2F0Y2hlcnM7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFdhdGNoZXJJZHMgPSB0aGlzLl9zZWxlY3RlZFdhdGNoZXJzLm1hcCgodykgPT4gdy5pZCk7XG4gICAgICAgICAgICB0aGlzLl9pc0VkaXRNb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxBcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZCh0aGlzLl9lZGl0TW9kZUluaXRTdWIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNlbmQgdXBkYXRlIGFwcHJvdmFsIHByb2Nlc3MgY2FsbHMgdG8gRGF0YVNvdXJjZSBhbmQgZXhpdCBlZGl0IG1vZGUqL1xuICAgIF9zYXZlRWRpdE1vZGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lZGl0TW9kZUluaXRTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMud2F0Y2hlckRhdGFTb3VyY2UuY2xvc2UoKTtcblxuICAgICAgICB0aGlzLl9pbml0aWFsQXBwcm92YWxQcm9jZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9pc0VkaXRNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW107XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2FwcHJvdmFsUHJvY2VzcyxcbiAgICAgICAgICAgIHdhdGNoZXJzOiB0aGlzLl9zZWxlY3RlZFdhdGNoZXJzXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHVwZGF0ZWQpO1xuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh1cGRhdGVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXN0b3JlIGluaXRpYWwgYXBwcm92YWwgZmxvdyBzdGF0ZSBhbmQgZXhpdCBlZGl0IG1vZGUgKi9cbiAgICBfZXhpdEVkaXRNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lZGl0TW9kZUluaXRTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMud2F0Y2hlckRhdGFTb3VyY2UuY2xvc2UoKTtcblxuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAodGhpcy5faW5pdGlhbEFwcHJvdmFsUHJvY2VzcyEpO1xuICAgICAgICB0aGlzLl9pbml0aWFsQXBwcm92YWxQcm9jZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9pc0VkaXRNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW107XG5cbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfd2F0Y2hlcnNTZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGVkSWRzOiBBcHByb3ZhbFVzZXJbJ2lkJ11bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpZHNTZXQgPSBuZXcgU2V0KHNlbGVjdGVkSWRzKTtcbiAgICAgICAgLy8gdXBkYXRpbmcgd2F0Y2hlcnMgc2VsZWN0aW9uXG4gICAgICAgIC8vIHNpbmNlIGl0J3MgcG9zc2libGUgXCJfdXNlcnNGb3JXYXRjaGVyc0xpc3RcIiBtaWdodCBub3QgY29udGFpbiBhbGwgc2VsZWN0ZWQgdmFsdWVzLFxuICAgICAgICAvLyBkZXRlcm1pbmUgY3VycmVudCBzZWxlY3Rpb24gYmFzZWQgb24gd2hhdCdzIGFscmVhZHkgc2VsZWN0ZWQgYW5kIFwiX3VzZXJzRm9yV2F0Y2hlcnNMaXN0XCJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRXYXRjaGVycyA9IHVuaXFCeShcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkV2F0Y2hlcnMuY29uY2F0KHRoaXMuX3VzZXJzRm9yV2F0Y2hlcnNMaXN0KS5maWx0ZXIoKHVzZXIpID0+IGlkc1NldC5oYXModXNlci5pZCkpLFxuICAgICAgICAgICAgKHUpID0+IHUuaWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXN0b3JlIHByZXZpb3VzbHkgc2F2ZWQgYXBwcm92YWwgcHJvY2VzcyBzdGF0ZSAqL1xuICAgIF91bmRvTGFzdEFjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzID0gY2xvbmVEZWVwKHRoaXMuX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzISk7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE9wZW4gYWRkIG5vZGUgZGlhbG9nICovXG4gICAgX2FkZE5vZGUoc291cmNlOiBBcHByb3ZhbEdyYXBoTm9kZSwgdHlwZTogQXBwcm92YWxGbG93Tm9kZVRhcmdldCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzaG93Tm9kZVR5cGVTZWxlY3QgPSB0eXBlID09PSAnYmVmb3JlJyAmJiAhc291cmNlLmFjdGlvbnNDb25maWc/LmRpc2FibGVBZGRQYXJhbGxlbDtcblxuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW48QWRkTm9kZURpYWxvZ1JlZkRhdGE+KFxuICAgICAgICAgICAgQXBwcm92YWxGbG93QWRkTm9kZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVUYXJnZXQ6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHNob3dOb2RlVHlwZVNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogT2JqZWN0LmFzc2lnbihnZXRCbGFua0FwcHJvdmFsR3JhcGhOb2RlKCksIHsgYmxhbms6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgICAgICBjaGVja0R1ZURhdGU6IHRoaXMuY2hlY2tEdWVEYXRlLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0RGlhbG9nT3B0aW9uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLl9pbmplY3RvclxuICAgICAgICApO1xuXG4gICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKGRhdGE6IEFkZE5vZGVEaWFsb2dGb3JtRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7IG5vZGUsIG5vZGVUeXBlLCB0b05leHRTZXJpYWwgfSA9IGRhdGE7XG5cbiAgICAgICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG5cbiAgICAgICAgICAgIG5vZGUuaWQgPSBgdGVtcElkJHsoTWF0aC5yYW5kb20oKSAqIDEwMDApLnRvRml4ZWQoKX1gO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdlbXB0eSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VudGVyRWRpdE1vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdiZWZvcmUnOlxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09IEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUy5TRVJJQUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0cyA9IFtzb3VyY2UuaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVRhcmdldHMoc291cmNlLmlkLCBbbm9kZS5pZF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09PSBBUFBST1ZBTF9GTE9XX05PREVfVFlQRVMuUEFSQUxMRUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZGRpbmdQYXJhbGxlbE5vZGUobm9kZSwgc291cmNlLCB0b05leHRTZXJpYWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdiZWZvcmUtYWxsJzpcbiAgICAgICAgICAgICAgICAgICAgbm9kZS50YXJnZXRzID0gdGhpcy5fZ3JhcGguY29sdW1uc1swXS5ub2Rlcy5tYXAoKF9ub2RlKSA9PiBfbm9kZS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYWZ0ZXInOlxuICAgICAgICAgICAgICAgICAgICBub2RlLnRhcmdldHMgPSBzb3VyY2UudGFyZ2V0cztcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLnRhcmdldHMgPSBbbm9kZS5pZF07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYWZ0ZXItYWxsJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRQYXJlbnRzID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtzb3VyY2UudGFyZ2V0c1swXV0/LnBhcmVudHM7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldFBhcmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0cyA9IHNvdXJjZS50YXJnZXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVRhcmdldHMoc291cmNlLmlkLCBbbm9kZS5pZF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMgPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfbm9kZSkgPT4gX25vZGUuaWQgIT09IHNvdXJjZS5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dyYXBoLmNvbHVtbnNbdGhpcy5fZ3JhcGguY29sdW1ucy5sZW5ndGggLSAxXS5ub2Rlcy5mb3JFYWNoKChfbm9kZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbm9kZS50YXJnZXRzLnB1c2gobm9kZS5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAncGFyYWxsZWwnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzQWRkaW5nUGFyYWxsZWxOb2RlKG5vZGUsIHNvdXJjZSwgdG9OZXh0U2VyaWFsKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKG5vZGUuYXBwcm92YWxUZWFtSWQgPyAndGVhbUFkZFN1Y2Nlc3MnIDogJ2FwcHJvdmVyQWRkU3VjY2VzcycpO1xuICAgICAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgICAgICAgICAgdGhpcy5fb25Ob2RlQWRkKG5vZGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBPcGVuIGVkaXQgbm9kZSBkaWFsb2cgKi9cbiAgICBfZWRpdE5vZGUobm9kZTogQXBwcm92YWxOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbjxBZGROb2RlRGlhbG9nUmVmRGF0YT4oXG4gICAgICAgICAgICBBcHByb3ZhbEZsb3dBZGROb2RlQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgaXNFZGl0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBub2RlOiBPYmplY3QuYXNzaWduKHt9LCBub2RlKSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tEdWVEYXRlOiB0aGlzLmNoZWNrRHVlRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmYXVsdERpYWxvZ09wdGlvbnNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKChkYXRhOiB7IG5vZGU6IEFwcHJvdmFsTm9kZSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkTm9kZSA9IGRhdGE/Lm5vZGU7XG5cbiAgICAgICAgICAgIGlmICghdXBkYXRlZE5vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQ3VycmVudEFwcHJvdmFsUHJvY2VzcygpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTm9kZSh1cGRhdGVkTm9kZSk7XG4gICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZSgnbm9kZUVkaXQnKTtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgICAgICAgICAgdGhpcy5fb25Ob2RlRWRpdChub2RlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gXCJEZWxldGVcIiBidXR0b24gY2xpY2sgaGFuZGxlciAqL1xuICAgIF9vbk5vZGVEZWxldGUobm9kZVRvRGVsZXRlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG4gICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZVRvRGVsZXRlKTtcbiAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2Uobm9kZVRvRGVsZXRlLmFwcHJvdmFsVGVhbUlkID8gJ3RlYW1SZW1vdmUnIDogJ25vZGVSZW1vdmUnKTtcbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZGVsZXRlU2VsZWN0ZWROb2RlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG5cbiAgICAgICAgY29uc3Qgbm9kZXNUb0RlbGV0ZSA9IHRoaXMuX25vZGVDb21wb25lbnRzXG4gICAgICAgICAgICAuZmlsdGVyKChub2RlQ29tcG9uZW50KSA9PiBub2RlQ29tcG9uZW50Ll9pc1NlbGVjdGVkKVxuICAgICAgICAgICAgLm1hcCgobm9kZUNvbXBvbmVudCkgPT4gbm9kZUNvbXBvbmVudC5ub2RlKTtcblxuICAgICAgICBub2Rlc1RvRGVsZXRlLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZSk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoJ25vZGVzUmVtb3ZlJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTm9kZSBkcmFnIG1vdmUgaGFuZGxlciwgdXNlZCB0byBjaGVjayBpZiBuZWVkIHRvIGhpZ2hsaWdodCBhIGRyb3Agem9uZSByZWN0YW5nbGUgKi9cbiAgICBfb25Ob2RlRHJhZ01vdmVkKG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRyYWdnZWROb2RlRGltZW5zaW9ucyA9IHRoaXMuX25vZGVDb21wb25lbnRzXG4gICAgICAgICAgICAuZmluZCgoY29tcCkgPT4gY29tcC5ub2RlID09PSBub2RlKVxuICAgICAgICAgICAgPy5fbmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBpZiAoIWRyYWdnZWROb2RlRGltZW5zaW9ucykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbm9kZUNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50Lm5vZGUgIT09IG5vZGUgJiYgQm9vbGVhbihjb21wb25lbnQuX2Ryb3Bab25lcy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50Ll9jaGVja0lmTm9kZURyYWdnZWRJbkRyb3Bab25lKGRyYWdnZWROb2RlRGltZW5zaW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE5vZGUgZHJvcCBoYW5kbGVyICovXG4gICAgX29uTm9kZURyb3Aobm9kZVRvRHJvcDogQXBwcm92YWxHcmFwaE5vZGUsIGRyYWc6IENka0RyYWcpOiB2b2lkIHtcbiAgICAgICAgZHJhZy5yZXNldCgpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuX2RyYWdEcm9wSW5Qcm9ncmVzcyA9IGZhbHNlKSk7XG5cbiAgICAgICAgY29uc3QgZHJvcFRhcmdldCA9IHRoaXMuX25vZGVDb21wb25lbnRzLmZpbmQoKG4pID0+IG4uX2lzQW55RHJvcFpvbmVBY3RpdmUpO1xuXG4gICAgICAgIGlmICghZHJvcFRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG5cbiAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gZHJvcFRhcmdldC5fYWN0aXZlRHJvcFpvbmVzWzBdLnBsYWNlbWVudDtcblxuICAgICAgICB0aGlzLl9ub2RlQ29tcG9uZW50cy5mb3JFYWNoKChuKSA9PiBuLl9kZWFjdGl2YXRlRHJvcFpvbmVzKCkpO1xuXG4gICAgICAgIGlmIChwbGFjZW1lbnQgPT09ICdhZnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZVRvRHJvcCk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcblxuICAgICAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBnZXRHcmFwaE5vZGVzKHRoaXMuX2dyYXBoKS5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBkcm9wVGFyZ2V0Lm5vZGUudGFyZ2V0c1swXSk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZT8uYmxhbmspIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5leHROb2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZVRvRHJvcC50YXJnZXRzID1cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gZHJvcFRhcmdldC5ub2RlLmlkKT8udGFyZ2V0cyA/PyBbXTtcbiAgICAgICAgICAgIGRyb3BUYXJnZXQubm9kZS50YXJnZXRzID0gW25vZGVUb0Ryb3AuaWRdO1xuXG4gICAgICAgICAgICB0aGlzLl9maW5pc2hEcmFnRHJvcFByb2Nlc3Mobm9kZVRvRHJvcCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2VtZW50ID09PSAnYmVmb3JlJykge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKEFwcHJvdmFsRmxvd1NlbGVjdFR5cGVDb21wb25lbnQsIHVuZGVmaW5lZCwgdGhpcy5faW5qZWN0b3IpO1xuXG4gICAgICAgICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKChkYXRhOiBTZWxlY3RUeXBlRGlhbG9nRm9ybURhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgdG9OZXh0U2VyaWFsIH0gPSBkYXRhO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlVG9Ecm9wKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBBUFBST1ZBTF9GTE9XX05PREVfVFlQRVMuU0VSSUFMKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcGxhY2VUYXJnZXRzKGRyb3BUYXJnZXQubm9kZS5pZCwgW25vZGVUb0Ryb3AuaWRdKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVRvRHJvcC50YXJnZXRzID0gW2Ryb3BUYXJnZXQubm9kZS5pZF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUy5QQVJBTExFTCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzQWRkaW5nUGFyYWxsZWxOb2RlKG5vZGVUb0Ryb3AsIGRyb3BUYXJnZXQubm9kZSwgdG9OZXh0U2VyaWFsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9maW5pc2hEcmFnRHJvcFByb2Nlc3Mobm9kZVRvRHJvcCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChwbGFjZW1lbnQgPT09ICdiZWZvcmUtYWxsJykge1xuICAgICAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlVG9Ecm9wKTtcblxuICAgICAgICAgICAgY29uc3QgZmlyc3RDb2x1bW5Ob2RlcyA9IHRoaXMuX2dyYXBoLmNvbHVtbnNbMF0ubm9kZXM7XG4gICAgICAgICAgICBub2RlVG9Ecm9wLnRhcmdldHMgPSBmaXJzdENvbHVtbk5vZGVzLm1hcCgobm9kZSkgPT4gbm9kZS5pZCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaERyYWdEcm9wUHJvY2Vzcyhub2RlVG9Ecm9wKTtcbiAgICAgICAgfSBlbHNlIGlmIChwbGFjZW1lbnQgPT09ICdhZnRlci1hbGwnKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5vZGVUb0Ryb3ApO1xuICAgICAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG5cbiAgICAgICAgICAgIG5vZGVUb0Ryb3AudGFyZ2V0cyA9IFsuLi5kcm9wVGFyZ2V0Lm5vZGUudGFyZ2V0c107XG5cbiAgICAgICAgICAgIGlmIChkcm9wVGFyZ2V0Lm5vZGUudGFyZ2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q29sdW1uTm9kZXMgPSB0aGlzLl9ncmFwaC5jb2x1bW5zW3RoaXMuX2dyYXBoLmNvbHVtbnMubGVuZ3RoIC0gMV0ubm9kZXM7XG4gICAgICAgICAgICAgICAgbGFzdENvbHVtbk5vZGVzLmZvckVhY2goKG5vZGUpID0+IG5vZGUudGFyZ2V0cy5wdXNoKG5vZGVUb0Ryb3AuaWQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKG5vZGUpID0+IG5vZGUuaWQgIT09IGRyb3BUYXJnZXQubm9kZS5pZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVRhcmdldHMoZHJvcFRhcmdldC5ub2RlLmlkLCBbbm9kZVRvRHJvcC5pZF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9maW5pc2hEcmFnRHJvcFByb2Nlc3Mobm9kZVRvRHJvcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpbmlzaERyYWdEcm9wUHJvY2Vzcyhub2RlVG9Ecm9wOiBBcHByb3ZhbEdyYXBoTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMucHVzaChub2RlVG9Ecm9wKTtcbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zaG93TWVzc2FnZSh0eXBlOiBBcHByb3ZhbEZsb3dNZXNzYWdlVHlwZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tZXNzYWdlcyA9IFt7IHR5cGUgfV07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQnVpbGQgQXBwcm92YWwgRmxvdyBncmFwaCBhbmQgcmVuZGVyIGl0ICovXG4gICAgcHJpdmF0ZSBfYnVpbGRWaWV3KGFwcHJvdmFsUHJvY2VzczogQXBwcm92YWxQcm9jZXNzKTogdm9pZCB7XG4gICAgICAgIGlmICghYXBwcm92YWxQcm9jZXNzLm5vZGVzKSB7XG4gICAgICAgICAgICBhcHByb3ZhbFByb2Nlc3Mubm9kZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFwcHJvdmFsUHJvY2Vzcy53YXRjaGVycykge1xuICAgICAgICAgICAgYXBwcm92YWxQcm9jZXNzLndhdGNoZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzID0gYXBwcm92YWxQcm9jZXNzO1xuICAgICAgICB0aGlzLl9ncmFwaCA9IGdlbmVyYXRlQXBwcm92YWxGbG93R3JhcGgodGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzKTtcblxuICAgICAgICBpZiAodGhpcy5fZ3JhcGguZXJyb3JzKSB7XG4gICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZSgnZXJyb3InKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dyYXBoTWV0YWRhdGEgPSBnZW5lcmF0ZUFwcHJvdmFsRmxvd0dyYXBoTWV0YWRhdGEodGhpcy5fZ3JhcGgpO1xuXG4gICAgICAgIGNvbnN0IG5vZGVzID0gZ2V0R3JhcGhOb2Rlcyh0aGlzLl9ncmFwaCk7XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2RlcyA9IG5vZGVzLmZpbHRlcigobm9kZSkgPT4gIW5vZGUuc3BhY2UpO1xuICAgICAgICB0aGlzLl9tdWx0aXBsZVJvb3ROb2RlcyA9IG5vZGVzLmZpbHRlcigobm9kZSkgPT4gdGhpcy5fZ3JhcGhNZXRhZGF0YVtub2RlLmlkXS5pc1Jvb3QpLmxlbmd0aCA+IDE7XG4gICAgICAgIHRoaXMuX211bHRpcGxlRmluYWxOb2RlcyA9IG5vZGVzLmZpbHRlcigobm9kZSkgPT4gdGhpcy5fZ3JhcGhNZXRhZGF0YVtub2RlLmlkXS5pc0ZpbmFsKS5sZW5ndGggPiAxO1xuXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuX2dyaWRMaXN0Py5jbGVhclNlbGVjdGlvbigpO1xuXG4gICAgICAgIGlmICghdGhpcy5faXNFZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0U2Nyb2xsUG9zaXRpb24oMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0ZW4gd2luZG93IHJlc2l6ZSBhbmQgZGlzdHJpYnV0ZSBjYXJkcyBvbiBjb2x1bW4gY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgbWVyZ2UoZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLCBmcm9tRXZlbnQodGhpcy5fZ3JhcGhDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJykpXG4gICAgICAgICAgICAgICAgLnBpcGUodGhyb3R0bGVUaW1lKDUwLCB1bmRlZmluZWQsIHsgbGVhZGluZzogdHJ1ZSwgdHJhaWxpbmc6IHRydWUgfSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9mb2N1c05vZGUobm9kZTogQXBwcm92YWxHcmFwaE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZVRvRm9jdXMgPSB0aGlzLl9ub2RlQ29tcG9uZW50cy5maW5kKChjb21wKSA9PiBjb21wLm5vZGUgPT09IG5vZGUpO1xuXG4gICAgICAgIGlmICghbm9kZVRvRm9jdXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb3ZlQ29sSW5WaWV3KG5vZGUuY29sSW5kZXggPz8gMCk7XG4gICAgICAgIG5vZGVUb0ZvY3VzLl9mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gVXBkYXRlIG5vZGUgb2JqZWN0IGluIGxvY2FsIGFwcHJvdmFsIHByb2Nlc3MgZGF0YSBzdHJ1Y3R1cmUgKi9cbiAgICBwcml2YXRlIF91cGRhdGVOb2RlKG5vZGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBub2RlSW5kZXggPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmluZEluZGV4KChuKSA9PiBuLmlkID09PSBub2RlLmlkKTtcblxuICAgICAgICBpZiAobm9kZUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlc1tub2RlSW5kZXhdID0gbm9kZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIERlbGV0ZSBub2RlIG9iamVjdCBpbiBsb2NhbCBhcHByb3ZhbCBwcm9jZXNzIGRhdGEgc3RydWN0dXJlICovXG4gICAgcHJpdmF0ZSBfZGVsZXRlTm9kZShub2RlVG9EZWxldGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBub2Rlc1RvRGVsZXRlID0gW25vZGVUb0RlbGV0ZV07XG4gICAgICAgIGNvbnN0IGdyYXBoTm9kZXMgPSBnZXRHcmFwaE5vZGVzKHRoaXMuX2dyYXBoKTtcbiAgICAgICAgbGV0IGN1cnJOb2RlID0gZ3JhcGhOb2Rlcy5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBub2RlVG9EZWxldGUuaWQpO1xuICAgICAgICBsZXQgbmV4dE5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChjdXJyTm9kZT8udGFyZ2V0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGdyYXBoTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gY3Vyck5vZGU/LnRhcmdldHNbMF0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5leHROb2RlPy5ibGFuayAmJiB0aGlzLl9ncmFwaE1ldGFkYXRhW25leHROb2RlLmlkXS5wYXJlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBub2Rlc1RvRGVsZXRlLnB1c2gobmV4dE5vZGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGN1cnJOb2RlID0gbmV4dE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIG5leHROb2RlID0gZ3JhcGhOb2Rlcy5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBjdXJyTm9kZT8udGFyZ2V0c1swXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChuZXh0Tm9kZT8uYmxhbmsgJiYgdGhpcy5fZ3JhcGhNZXRhZGF0YVtuZXh0Tm9kZS5pZF0ucGFyZW50cy5sZW5ndGggPT09IDEpO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZVRvRGVsZXRlLmlkXS5wYXJlbnRzWzBdO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBub2RlVG9EZWxldGUudGFyZ2V0c1swXTtcbiAgICAgICAgY29uc3QgaXNQYXJlbnRQYXJhbGxlbFN0YXJ0ID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtwYXJlbnQ/LmlkXT8ucGFyYWxsZWxTdGFydDtcbiAgICAgICAgY29uc3QgaXNUYXJnZXRQYXJhbGxlbEVuZCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbdGFyZ2V0XT8ucGFyYWxsZWxFbmQ7XG4gICAgICAgIGNvbnN0IHRhcmdldHMgPVxuICAgICAgICAgICAgKGlzUGFyZW50UGFyYWxsZWxTdGFydCAmJiBpc1RhcmdldFBhcmFsbGVsRW5kKSB8fCBub2Rlc1RvRGVsZXRlLmxlbmd0aCA+IDEgPyBbXSA6IGN1cnJOb2RlPy50YXJnZXRzID8/IFtdO1xuXG4gICAgICAgIHRoaXMuX3JlcGxhY2VUYXJnZXRzKG5vZGVUb0RlbGV0ZS5pZCwgdGFyZ2V0cyk7XG5cbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbHRlcigobm9kZSkgPT4gIW5vZGVzVG9EZWxldGUuaW5jbHVkZXMobm9kZSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkUGFyYWxsZWxUYXJnZXRzKHRhcmdldE5vZGVJZDogc3RyaW5nLCBub2RlSWRUb0FkZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNOb2RlVGFyZ2V0c0luY2x1ZGVJZChub2RlLCB0YXJnZXROb2RlSWQpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS50YXJnZXRzLnB1c2gobm9kZUlkVG9BZGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZiBcImlkVG9SZXBsYWNlXCIgaW4gYWxsIG5vZGVzJyBcInRhcmdldHNcIiB3aXRoIG9uZXMgaW4gXCJyZXBsYWNlV2l0aFwiIGFycmF5ICovXG4gICAgcHJpdmF0ZSBfcmVwbGFjZVRhcmdldHMoSWRUb1JlcGxhY2U6IHN0cmluZywgcmVwbGFjZVdpdGhJZDogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgICAgIGlmIChpc05vZGVUYXJnZXRzSW5jbHVkZUlkKG4sIElkVG9SZXBsYWNlKSkge1xuICAgICAgICAgICAgICAgIG4udGFyZ2V0cyA9IG4udGFyZ2V0cy5maWx0ZXIoKF9pZCkgPT4gX2lkICE9PSBJZFRvUmVwbGFjZSk7XG4gICAgICAgICAgICAgICAgbi50YXJnZXRzLnB1c2goLi4ucmVwbGFjZVdpdGhJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNhdmUgY3VycmVudCBzdGF0ZSBvZiBhcHByb3ZhbCBwcm9jZXNzIGRhdGEgdG8gYmUgYWJsZSB0byB1bmRvIGFuIGFjdGlvbiBtYWRlIGluIGVkaXQgbW9kZSAqL1xuICAgIHByaXZhdGUgX2NhY2hlQ3VycmVudEFwcHJvdmFsUHJvY2VzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNBcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE5leHRIb3Jpem9udGFsTm9kZSA9IChcbiAgICAgICAgbm9kZUluZGV4OiBudW1iZXIsXG4gICAgICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgICAgIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0J1xuICAgICk6IEFwcHJvdmFsR3JhcGhOb2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhEaWZmID0gZGlyZWN0aW9uID09PSAncmlnaHQnID8gMSA6IC0xO1xuICAgICAgICBjb25zdCBuZXh0Q29sdW1uID0gdGhpcy5fZ3JhcGguY29sdW1uc1tjb2x1bW5JbmRleCArIGluZGV4RGlmZl07XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gbmV4dENvbHVtbj8ubm9kZXNbbm9kZUluZGV4XTtcblxuICAgICAgICBpZiAoIW5leHROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHROb2RlLmJsYW5rIHx8IG5leHROb2RlLnNwYWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TmV4dEhvcml6b250YWxOb2RlKG5vZGVJbmRleCwgY29sdW1uSW5kZXggKyBpbmRleERpZmYsIGRpcmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dE5vZGU7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0TmV4dFZlcnRpY2FsTm9kZSA9IChcbiAgICAgICAgbm9kZUluZGV4OiBudW1iZXIsXG4gICAgICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgICAgIGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJ1xuICAgICk6IEFwcHJvdmFsR3JhcGhOb2RlIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhEaWZmID0gZGlyZWN0aW9uID09PSAnZG93bicgPyAxIDogLTE7XG4gICAgICAgIGNvbnN0IGN1cnJDb2x1bW4gPSB0aGlzLl9ncmFwaC5jb2x1bW5zW2NvbHVtbkluZGV4XTtcbiAgICAgICAgY29uc3QgbmV4dE5vZGUgPSBjdXJyQ29sdW1uLm5vZGVzW25vZGVJbmRleCArIGluZGV4RGlmZl07XG5cbiAgICAgICAgaWYgKCFuZXh0Tm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0Tm9kZS5ibGFuayB8fCBuZXh0Tm9kZS5zcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldE5leHRWZXJ0aWNhbE5vZGUobm9kZUluZGV4ICsgaW5kZXhEaWZmLCBjb2x1bW5JbmRleCwgZGlyZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0Tm9kZTtcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfY2Fyb3VzZWxTdGVwU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoIC8gdGhpcy5fY2Fyb3VzZWxTdGVwc0NvdW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zY3JvbGxEaWZmKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5fZ3JhcGhFbCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCAtIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY2Fyb3VzZWxTdGVwc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9jYXJvdXNlbFN0ZXBzTGVmdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0IC8gdGhpcy5fY2Fyb3VzZWxTdGVwU2l6ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2Nhcm91c2VsU3RlcHNSaWdodCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKFxuICAgICAgICAgICAgKHRoaXMuX3Njcm9sbERpZmYgLSBNYXRoLnJvdW5kKHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KSkgLyB0aGlzLl9jYXJvdXNlbFN0ZXBTaXplXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfZGVmYXVsdERpYWxvZ09wdGlvbnMoKTogRGVmYXVsdERpYWxvZ09wdGlvbnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGVhbURhdGFTb3VyY2U6IHRoaXMudGVhbURhdGFTb3VyY2UsXG4gICAgICAgICAgICB1c2VyRGF0YVNvdXJjZTogdGhpcy51c2VyRGF0YVNvdXJjZSxcbiAgICAgICAgICAgIHVzZXJEZXRhaWxzVGVtcGxhdGU6IHRoaXMudXNlckRldGFpbHNUZW1wbGF0ZSxcbiAgICAgICAgICAgIHJ0bDogdGhpcy5fcnRsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9maW5kU2VyaWFsTm9kZSh5SW5kZXg/OiBudW1iZXIsIHRhcmdldHM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0SXNQYXJlbnQgPVxuICAgICAgICAgICAgTnVtYmVyLmlzSW50ZWdlcih5SW5kZXgpICYmXG4gICAgICAgICAgICB0YXJnZXRzPy5zb21lKCh0YXJnZXRJZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVJbmRleCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbdGFyZ2V0SWRdPy5ub2RlSW5kZXg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIobm9kZUluZGV4KSAmJiBub2RlSW5kZXghIDw9IHlJbmRleCEgLSAxO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRhcmdldElzUGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0cyA/PyBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gdGFyZ2V0cz8uWzBdKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRTZXJpYWxOb2RlKHlJbmRleCwgdGFyZ2V0Tm9kZT8udGFyZ2V0cyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcm9jZXNzQWRkaW5nUGFyYWxsZWxOb2RlKFxuICAgICAgICBhZGRlZE5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlLFxuICAgICAgICBzb3VyY2VOb2RlOiBBcHByb3ZhbEdyYXBoTm9kZSxcbiAgICAgICAgdG9OZXh0U2VyaWFsID0gZmFsc2VcbiAgICApOiB2b2lkIHtcbiAgICAgICAgYWRkZWROb2RlLnRhcmdldHMgPSBzb3VyY2VOb2RlLnRhcmdldHM7XG5cbiAgICAgICAgdGhpcy5fYWRkUGFyYWxsZWxUYXJnZXRzKHNvdXJjZU5vZGUuaWQsIGFkZGVkTm9kZS5pZCk7XG5cbiAgICAgICAgaWYgKHRvTmV4dFNlcmlhbCkge1xuICAgICAgICAgICAgbGV0IHlJbmRleCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbc291cmNlTm9kZS5pZF0ubm9kZUluZGV4O1xuICAgICAgICAgICAgbGV0IHRhcmdldHMgPSBzb3VyY2VOb2RlLnRhcmdldHM7XG5cbiAgICAgICAgICAgIGlmICh5SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VOb2RlTWV0YWRhdGEgPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3NvdXJjZU5vZGUuaWRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbk5vZGVzID0gdGhpcy5fZ3JhcGguY29sdW1ucz8uW3NvdXJjZU5vZGVNZXRhZGF0YS5jb2x1bW5JbmRleCFdPy5ub2RlcztcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0UGFyYWxsZWxOb2RlID0gY29sdW1uTm9kZXMuZmluZCgobm9kZSwgaW5kZXgpID0+IGluZGV4ID4gMCAmJiAhbm9kZS5zcGFjZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmV4dFBhcmFsbGVsTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB5SW5kZXggPSB0aGlzLl9ncmFwaE1ldGFkYXRhW25leHRQYXJhbGxlbE5vZGUuaWRdLmNvbHVtbkluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRzID0gbmV4dFBhcmFsbGVsTm9kZS50YXJnZXRzO1xuXG4gICAgICAgICAgICAgICAgICAgIGFkZGVkTm9kZS50YXJnZXRzID0gdGhpcy5fZmluZFNlcmlhbE5vZGUoeUluZGV4LCB0YXJnZXRzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFkZGVkTm9kZS50YXJnZXRzID0gc291cmNlTm9kZS50YXJnZXRzO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYWRkZWROb2RlLnRhcmdldHMgPSB0aGlzLl9maW5kU2VyaWFsTm9kZSh5SW5kZXgsIHRhcmdldHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXR1cERhdGFTb3VyY2VTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN1YiA9IHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VkJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRpbmdTdGF0ZXMgPSBbdGhpcy50ZWFtRGF0YVNvdXJjZSwgdGhpcy51c2VyRGF0YVNvdXJjZSwgdGhpcy53YXRjaGVyRGF0YVNvdXJjZV1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGRzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKGRzLm9uRGF0YVJlcXVlc3RlZCgpLnBpcGUobWFwVG8odHJ1ZSkpLCBkcy5vbkRhdGFSZWNlaXZlZCgpLnBpcGUobWFwVG8oZmFsc2UpKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKGRzLmlzRGF0YUxvYWRpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QobG9hZGluZ1N0YXRlcyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChsb2FkaW5nU3RhdGVzKSA9PiBsb2FkaW5nU3RhdGVzLnNvbWUoQm9vbGVhbikpLFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNvbWVMb2FkaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNvbWVMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EYXRhUmVxdWVzdGVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVJlY2VpdmVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoc3ViKTtcbiAgICB9XG59XG5cbmludGVyZmFjZSBEZWZhdWx0RGlhbG9nT3B0aW9ucyB7XG4gICAgdGVhbURhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlPEFwcHJvdmFsVGVhbT47XG4gICAgdXNlckRhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlPEFwcHJvdmFsVXNlcj47XG4gICAgdXNlckRldGFpbHNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBydGw6IGJvb2xlYW47XG59XG4iLCI8bmctY29udGFpbmVyIGZkQ29tcGFjdD5cbiAgICA8ZmRwLWFwcHJvdmFsLWZsb3ctbWVzc2FnZXNcbiAgICAgICAgWyhtZXNzYWdlcyldPVwiX21lc3NhZ2VzXCJcbiAgICAgICAgW3VuZG9MYXN0QWN0aW9uQXZhaWxhYmxlXT1cIiEhX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzXCJcbiAgICAgICAgKHVuZG9MYXN0QWN0aW9uKT1cIl91bmRvTGFzdEFjdGlvbigpXCJcbiAgICA+PC9mZHAtYXBwcm92YWwtZmxvdy1tZXNzYWdlcz5cbiAgICA8ZmQtZ3JpZC1saXN0XG4gICAgICAgICNncmlkTGlzdFxuICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X190b29sYmFyXCJcbiAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiX2lzRWRpdE1vZGUgPyAnbXVsdGlTZWxlY3QnIDogJ25vbmUnXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJfb25Ob2RlU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICAgICAgPGZkLWdyaWQtbGlzdC10aXRsZS1iYXIgW3RpdGxlXT1cInRpdGxlIHx8ICgncGxhdGZvcm1BcHByb3ZhbEZsb3cuZGVmYXVsdFRpdGxlJyB8IGZkVHJhbnNsYXRlKVwiPlxuICAgICAgICAgICAgPGZkLWdyaWQtbGlzdC10aXRsZS1iYXItc3BhY2VyPjwvZmQtZ3JpZC1saXN0LXRpdGxlLWJhci1zcGFjZXI+XG4gICAgICAgICAgICBAaWYgKGlzRWRpdEF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIDxmZHAtYXBwcm92YWwtZmxvdy10b29sYmFyLWFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgW2dyYXBoXT1cIl9ncmFwaFwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZE5vZGVzXT1cIl9zZWxlY3RlZE5vZGVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2dyYXBoTWV0YWRhdGFdPVwiX2dyYXBoTWV0YWRhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbaXNFZGl0TW9kZV09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgIChlbnRlckVkaXRNb2RlKT1cIl9lbnRlckVkaXRNb2RlKClcIlxuICAgICAgICAgICAgICAgICAgICAoYWRkTm9kZSk9XCJfYWRkTm9kZSgkZXZlbnQubm9kZSwgJGV2ZW50LnRhcmdldClcIlxuICAgICAgICAgICAgICAgICAgICAoZWRpdFNlbGVjdGVkTm9kZSk9XCJfZWRpdE5vZGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVTZWxlY3RlZE5vZGVzKT1cIl9kZWxldGVTZWxlY3RlZE5vZGVzKClcIlxuICAgICAgICAgICAgICAgID48L2ZkcC1hcHByb3ZhbC1mbG93LXRvb2xiYXItYWN0aW9ucz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9mZC1ncmlkLWxpc3QtdGl0bGUtYmFyPlxuICAgICAgICBAaWYgKF9hcHByb3ZhbFByb2Nlc3Mud2F0Y2hlcnM/Lmxlbmd0aCB8fCBfaXNFZGl0TW9kZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X193YXRjaGVyc1wiIFthdHRyLmFyaWEtbGFiZWxdPVwid2F0Y2hlcnNMYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX3dhdGNoZXJzLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHdhdGNoZXJzTGFiZWwgfHwgKCdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5kZWZhdWx0V2F0Y2hlcnNMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgQGlmICghX2lzRWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAod2F0Y2hlciBvZiBfYXBwcm92YWxQcm9jZXNzLndhdGNoZXJzOyB0cmFjayBfdHJhY2tCeUZuKCRpbmRleCwgd2F0Y2hlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbWFnZV09XCJ3YXRjaGVyLmltZ1VybCB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIndhdGNoZXIubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2lyY2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdmF0YXJDbGlja2VkKT1cIl9vbldhdGNoZXJDbGljayh3YXRjaGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkLWF2YXRhcj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX3dhdGNoZXJzLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLW11bHRpLWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duVmFsdWVzXT1cIl91c2Vyc0ZvcldhdGNoZXJzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybUFwcHJvdmFsRmxvdy53YXRjaGVyc0lucHV0UGxhY2Vob2xkZXInIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5Rm5dPVwiX2Rpc3BsYXlVc2VyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZuXT1cIl91c2VyVmFsdWVGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dBbGxCdXR0b25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJfc2VsZWN0ZWRXYXRjaGVySWRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJfd2F0Y2hlcnNTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtbXVsdGktaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIV9ncmFwaC5lcnJvcnMpIHtcbiAgICAgICAgICAgIEBpZiAoX2dyYXBoLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2NvbnRhaW5lci0tZXh0cmEtcGFkZGluZy1zdGFydF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19jb250YWluZXItLWV4dHJhLXBhZGRpbmctZW5kXT1cInRydWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChfc2Nyb2xsRGlmZiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LWNhcm91c2VsLWNvbnRyb2xzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctY2Fyb3VzZWwtY29udHJvbHMtLWVkaXQtbW9kZV09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChfY2Fyb3VzZWxTdGVwc0xlZnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctY2Fyb3VzZWwtY29udHJvbHNfX2J1dHRvbi0tcHJldi1zbGlkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybUFwcHJvdmFsRmxvdy5wcmV2QnV0dG9uQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0U2xpZGUoLTEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gW2dseXBoXT1cIiduYXZpZ2F0aW9uLScgKyAoX3J0bCA/ICdyaWdodCcgOiAnbGVmdCcpICsgJy1hcnJvdydcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBfY2Fyb3VzZWxTdGVwc0xlZnQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoX2Nhcm91c2VsU3RlcHNSaWdodCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvdy1jYXJvdXNlbC1jb250cm9sc19fYnV0dG9uLS1uZXh0LXNsaWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtQXBwcm92YWxGbG93Lm5leHRCdXR0b25BcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRTbGlkZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgX2Nhcm91c2VsU3RlcHNSaWdodCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gW2dseXBoXT1cIiduYXZpZ2F0aW9uLScgKyAoX3J0bCA/ICdsZWZ0JyA6ICdyaWdodCcpICsgJy1hcnJvdydcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLWNvbnRhaW5lci0tbXVsdGlwbGUtcm9vdC1ub2Rlc109XCJfbXVsdGlwbGVSb290Tm9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1jb250YWluZXItLW11bHRpcGxlLWZpbmFsLW5vZGVzXT1cIl9tdWx0aXBsZUZpbmFsTm9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLXNjcm9sbGJhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNncmFwaENvbnRhaW5lckVsXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI2dyYXBoRWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLS1lZGl0LW1vZGVdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBfZ3JhcGguY29sdW1uczsgdHJhY2sgY29sdW1uOyBsZXQgY29sdW1uSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgb2YgY29sdW1uLm5vZGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIF90cmFja0J5Rm4obm9kZUluZGV4LCBub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZUluZGV4ID0gJGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmRwLWFwcHJvdmFsLWZsb3ctbm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcHByb3ZhbEZsb3dOb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiX2lzQ2RrRHJhZ0Rpc2FibGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttZXRhXT1cIl9ncmFwaE1ldGFkYXRhW25vZGUuaWRdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzRWRpdF09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc05leHROb2RlQmxhbmtdPVwiX2lzTmV4dE5vZGVCbGFuayhub2RlLCBjb2x1bW5JbmRleCwgbm9kZUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja0R1ZURhdGVdPVwiY2hlY2tEdWVEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2R1ZURhdGVUaHJlc2hvbGRdPVwiZHVlRGF0ZVRocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZW5kZXJBcnJvd109XCJjb2x1bW5JbmRleCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsTm9kZXNJbkNvbHVtbkFwcHJvdmVkXT1cIiEhY29sdW1uLmFsbE5vZGVzQXBwcm92ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwcm92YWxTdGF0dXNUZW1wbGF0ZV09XCJhcHByb3ZhbFN0YXR1c1RlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c0NvbG9yTWFwcGluZ109XCJzdGF0dXNDb2xvck1hcHBpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25BZGQpPVwiX2FkZE5vZGUobm9kZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkVkaXQpPVwiX2VkaXROb2RlKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uRGVsZXRlKT1cIl9vbk5vZGVEZWxldGUobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfb25Ob2RlS2V5RG93bigkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIl9kcmFnRHJvcEluUHJvZ3Jlc3MgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNka0RyYWdSZWxlYXNlZCk9XCJfb25Ob2RlRHJvcChub2RlLCAkZXZlbnQuc291cmNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcmFnTW92ZWQpPVwiX29uTm9kZURyYWdNb3ZlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRyaWNrIHdpdGggdXNpbmcgcHJvamVjdGlvbiB0byBtYWtlIGdyaWQgbGlzdCBpdGVtcyB2aXNpYmxlIGZvciB0aGUgZ3JpZCBsaXN0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtZ3JpZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIiEhbm9kZS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsbGVkQnldPVwiYXBwcm92YWxGbG93Tm9kZS5hcHByb3ZhbEZsb3dOb2RlSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sYmFyQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1ub2RlLWlubmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvd19fZ3JhcGgtbm9kZS1pbm5lci0tZWRpdF09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJlc3MpPVwiX29uTm9kZUNsaWNrKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWdyaWQtbGlzdC1pdGVtLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChfaXNFZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFwcHJvdmFsRmxvd05vZGUuX292ZXJmbG93TWVudUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtZ3JpZC1saXN0LWl0ZW0tdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1ncmlkLWxpc3QtaXRlbS1pbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbWFnZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHByb3ZlcnMubGVuZ3RoID09PSAxID8gbm9kZS5hcHByb3ZlcnNbMF0uaW1nVXJsIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm5vZGUuYXBwcm92ZXJzLmxlbmd0aCA+IDEgPyBub2RlLmRlc2NyaXB0aW9uIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2lyY2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtYXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZkLWdyaWQtbGlzdC1pdGVtLWJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFwcHJvdmFsRmxvd05vZGUuX25vZGVDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtZ3JpZC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZHAtYXBwcm92YWwtZmxvdy1ub2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZmlndXJlIGZkLWlsbHVzdHJhdGVkLW1lc3NhZ2UgdHlwZT1cInNwb3RcIiBbc3ZnQ29uZmlnXT1cIl9lbXB0eUFwcHJvdmFsRmxvd1Nwb3RDb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZpZ2NhcHRpb24gZmQtaWxsdXN0cmF0ZWQtbWVzc2FnZS1maWdjYXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGZkLWlsbHVzdHJhdGVkLW1lc3NhZ2UtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93LmVtcHR5VGl0bGUnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBmZC1pbGx1c3RyYXRlZC1tZXNzYWdlLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93LmVtcHR5SGludCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2ZpZ2NhcHRpb24+XG4gICAgICAgICAgICAgICAgPC9maWd1cmU+XG4gICAgICAgICAgICAgICAgPCEtLSBUT0RPICM1MTc4OiBSZXBsYWNlIHdpdGggaWxsdXN0cmF0ZWQgaW1hZ2UgY29tcG9uZW50IGFmdGVyIGl0IGdldHMgZml4ZWQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEyOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMjhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMjggMTI4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2FwSWxsdXMtU3BvdC1Ob0RhdGFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNDEuNjE3OSwzMi43MTc0SDg0LjYyNzNhMSwxLDAsMCwxLC43MjMuMzA5Mmw3LjI0NDUsNy41ODI0LDcuNDgxNyw3Ljg0OTFhMSwxLDAsMCwxLC4yNzYxLjY5bC0uMDA0Niw1NS42MDY5YTQuMTAzOCw0LjEwMzgsMCwwLDEtLjg3ODcsMi4xMjEyQTQuMDU2NCw0LjA1NjQsMCwwLDEsOTguMSwxMDcuOTYzMWwtNTYuMzg1OC4wMzEzYTIuNjE2NywyLjYxNjcsMCwwLDEtMy4wODEyLTMuMjMwOWwtLjAxNTItNjkuMDU5NFpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfUGF0dGVyblNoYWRvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19QYXR0ZXJuU2hhZG93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTM1Ljc5MjgsMjcuNDk4N0g3OC44MDIyYTEsMSwwLDAsMSwuNzIzLjMwOTJMODYuNzcsMzUuMzlsNy40ODE2LDcuODQ5MmExLDEsMCwwLDEsLjI3NjIuNjlsLS4wMDQ2LDU1LjYwNjlhMywzLDAsMCwxLTMsM0gzNS44MDhhMi45OTQ2LDIuOTk0NiwwLDAsMS0zLTIuOTkxM2MtLjAxLTEyLjA1NjQtLjA0MjMtNTcuMDExNi0uMDE1Mi02OS4wNTk1QTIuOTk0MywyLjk5NDMsMCwwLDEsMzUuNzkyOCwyNy40OTg3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYXBJbGx1c19PYmplY3RGaWxsQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfT2JqZWN0RmlsbENvbG9yKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkzLjI5NzgsNDQuNTMzNUg3OC44MjA4YS45OTI1Ljk5MjUsMCwwLDEtLjk3NC0xLjAxVjI4LjUxMDhhLjk3Ljk3LDAsMCwxLDEuNjYyOC0uNzE0M0w5My45ODY1LDQyLjgwOTJBMS4wMTUxLDEuMDE1MSwwLDAsMSw5My4yOTc4LDQ0LjUzMzVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX0JyYW5kQ29sb3JTZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfQnJhbmRDb2xvclNlY29uZGFyeSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMDQuNjA4LDM4Ljk0ODVsNS45MTU3LTEuNzcyMWMxLjMyLS4zOTU0Ljc1ODQtMi41MjU4LS41Njg5LTIuMTI4MkwxMDQuMDM5MiwzNi44MmMtMS4zMi4zOTUzLS43NTg0LDIuNTI1OC41Njg4LDIuMTI4MlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfTGF5ZXJpbmcxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZpbGw6IHZhcigtLXNhcElsbHVzX0xheWVyaW5nMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04NS4yOTczLDIxLjI0NjVsLjk3MTgtNS45MzMxYy4yMTU0LTEuMzE1MS0xLjc3Ny0xLjg4MDctMS45OTQxLS41NTU0bC0uOTcxOCw1LjkzMzJjLS4yMTU1LDEuMzE1MSwxLjc3NywxLjg4MDcsMS45OTQxLjU1NTNaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX0xheWVyaW5nMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19MYXllcmluZzEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOTUuMzAzNCwyOS4wMDE1YTEuMDEsMS4wMSwwLDAsMS0uNjgzNy0uMjY3LDEuMDc4MywxLjA3ODMsMCwwLDEtLjA4NjQtMS40OTMybDUuOTUxMS02Ljg4NTdhMS4wMSwxLjAxLDAsMCwxLDEuNDUzOC0uMDg4NCwxLjA3ODUsMS4wNzg1LDAsMCwxLC4wODY1LDEuNDkzMmwtNS45NTExLDYuODg1OEExLjAxNjQsMS4wMTY0LDAsMCwxLDk1LjMwMzQsMjkuMDAxNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfTGF5ZXJpbmcxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZpbGw6IHZhcigtLXNhcElsbHVzX0xheWVyaW5nMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05NC44NzQ3LDQyLjg4NjEsODAuMDg1NSwyNy40NjIzYTEuNTE1MiwxLjUxNTIsMCwwLDAtMS4wODg1LS40NjM2SDM1LjgwN2EzLjUwOSwzLjUwOSwwLDAsMC0zLjUxNDYsMy40ODM2Yy0uMDI5NCwxMy4yODU3LjAxMzcsNjYuNzU1OS4wMTU3LDY5LjAyNTdhMy41MDc2LDMuNTA3NiwwLDAsMCwzLjUxNDYsMy40ODk0SDkxLjc3MDlhMy41MTA2LDMuNTEwNiwwLDAsMCwzLjUxNDYtMy40OTgybC4wMDUtNTUuNTc4NUExLjQ5LDEuNDksMCwwLDAsOTQuODc0Nyw0Mi44ODYxWm0tMTYuMjEtMTQuODM1NWExLjE1LDEuMTUsMCwwLDEsLjI1NjEtLjAzMDksMS4wNCwxLjA0LDAsMCwxLC41MS4yMTM0bDE0LjI3NiwxNC44ODM3LjAxOTQuMDJhLjU4OTEuNTg5MSwwLDAsMSwuMDk2OC42MjUxYy0uMTAxNi4xNzY0LS40MDg2LjI0LS42OS4yNEw3OC44MzU1LDQ0YS42MDMxLjYwMzEsMCwwLDEtLjU0NzItLjYxMzFjLS4wMDg3LTQuOTU4OC0uMDE3LTkuOTAxNS0uMDAzNS0xNC44Njg5QS41MTg5LjUxODksMCwwLDEsNzguNjY0NiwyOC4wNTA2Wm0xMy4xMDYyLDczLjk1SDM1LjgxODhhMi41MDQ1LDIuNTA0NSwwLDAsMS0yLjUxMDctMi40OTFjLS4wMDItMi4yNjk0LS4wNDUxLTU1Ljc0LS4wMTU3LTY5LjAyNDhhMi41MDU0LDIuNTA1NCwwLDAsMSwyLjUxMDctMi40ODYxSDc3LjM2ODRhMS40OSwxLjQ5LDAsMCwwLS4wOTc2LjUxMDZWNDMuNDkzNEExLjUxNDUsMS41MTQ1LDAsMCwwLDc4Ljc4OTQsNDVINzguOTJMOTQuMjg2LDQ3Ljk3NDlsLS4wMDQ2LDUxLjUyNjlBMi41MDc0LDIuNTA3NCwwLDAsMSw5MS43NzA4LDEwMi4wMDA2WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYXBJbGx1c19TdHJva2VEZXRhaWxDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19TdHJva2VEZXRhaWxDb2xvcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICA8L2ZkLWdyaWQtbGlzdD5cbiAgICBAaWYgKF9pc0VkaXRNb2RlKSB7XG4gICAgICAgIDxkaXYgZmQtYmFyPlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cuZWRpdE1vZGVTYXZlQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVNhdmVCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9zYXZlRWRpdE1vZGVDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybUFwcHJvdmFsRmxvdy5lZGl0TW9kZUV4aXRCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUV4aXRCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9leGl0RWRpdE1vZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvbmctY29udGFpbmVyPlxuIl19