@sapui5/sap.fe.macros 1.141.2 → 1.142.1

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 (239) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +4 -10
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
  5. package/src/sap/fe/macros/Chart.js +34 -23
  6. package/src/sap/fe/macros/Chart.tsx +25 -11
  7. package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
  9. package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
  10. package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
  11. package/src/sap/fe/macros/CommonHelper.js +14 -24
  12. package/src/sap/fe/macros/CommonHelper.ts +18 -25
  13. package/src/sap/fe/macros/Field.js +34 -17
  14. package/src/sap/fe/macros/Field.ts +64 -32
  15. package/src/sap/fe/macros/FooterContent.js +7 -3
  16. package/src/sap/fe/macros/FooterContent.tsx +8 -13
  17. package/src/sap/fe/macros/KPITag.js +1 -1
  18. package/src/sap/fe/macros/KPITag.tsx +3 -1
  19. package/src/sap/fe/macros/MacroAPI.js +3 -2
  20. package/src/sap/fe/macros/MacroAPI.ts +2 -2
  21. package/src/sap/fe/macros/MessageButton.js +4 -3
  22. package/src/sap/fe/macros/MessageButton.tsx +7 -3
  23. package/src/sap/fe/macros/MicroChart.js +10 -6
  24. package/src/sap/fe/macros/MicroChart.tsx +8 -2
  25. package/src/sap/fe/macros/MultiValueField.js +22 -36
  26. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  27. package/src/sap/fe/macros/Page.js +8 -4
  28. package/src/sap/fe/macros/Page.tsx +13 -4
  29. package/src/sap/fe/macros/RichTextEditor.js +14 -17
  30. package/src/sap/fe/macros/RichTextEditor.tsx +12 -16
  31. package/src/sap/fe/macros/Status.js +35 -8
  32. package/src/sap/fe/macros/Status.tsx +23 -2
  33. package/src/sap/fe/macros/ValueHelp.js +5 -2
  34. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  35. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  36. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  37. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  38. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  39. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  40. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  41. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  42. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  43. package/src/sap/fe/macros/chart/Action.js +37 -2
  44. package/src/sap/fe/macros/chart/Action.ts +21 -0
  45. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  46. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  47. package/src/sap/fe/macros/chart/ChartDelegate.js +19 -8
  48. package/src/sap/fe/macros/chart/ChartDelegate.ts +36 -12
  49. package/src/sap/fe/macros/chart/MdcChartTemplate.js +59 -14
  50. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +81 -31
  51. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  52. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  53. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  54. package/src/sap/fe/macros/controls/FilterBar.ts +50 -2
  55. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  56. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  57. package/src/sap/fe/macros/controls/TextLink.js +15 -1
  58. package/src/sap/fe/macros/controls/TextLink.tsx +19 -0
  59. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  60. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  61. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +46 -13
  62. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +51 -10
  63. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  64. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  65. package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
  66. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  67. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  68. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  69. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  70. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  71. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +6 -35
  72. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +35 -60
  73. package/src/sap/fe/macros/field/FieldTemplating.js +10 -4
  74. package/src/sap/fe/macros/field/FieldTemplating.ts +12 -5
  75. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  76. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  77. package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
  78. package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
  79. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  80. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  81. package/src/sap/fe/macros/filterBar/FilterBar.block.js +13 -3
  82. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +29 -8
  83. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
  84. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
  85. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
  86. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
  87. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  88. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  89. package/src/sap/fe/macros/form/Form.block.js +27 -2
  90. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  91. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  92. package/src/sap/fe/macros/form/FormContainer.block.js +104 -72
  93. package/src/sap/fe/macros/form/FormContainer.block.ts +114 -72
  94. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  95. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  96. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  97. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  98. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  99. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  100. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  101. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  102. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  103. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  104. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  105. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  106. package/src/sap/fe/macros/internal/field/EditStyle.js +18 -24
  107. package/src/sap/fe/macros/internal/field/EditStyle.tsx +24 -44
  108. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  109. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  110. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  111. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  112. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  113. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  114. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  115. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  116. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +44 -12
  117. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +42 -11
  118. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +54 -1
  119. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +59 -0
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  122. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  123. package/src/sap/fe/macros/library.js +5 -6
  124. package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
  125. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  126. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  127. package/src/sap/fe/macros/messagebundle.properties +13 -5
  128. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  129. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  130. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  131. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  132. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  133. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  134. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  135. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  136. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  137. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  138. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  139. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
  140. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  143. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  144. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  145. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  146. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  147. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  148. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  149. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  150. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  154. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  155. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  158. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  159. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  160. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  162. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  164. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  167. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  168. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  169. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  170. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  171. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  172. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  173. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  174. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  175. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  176. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  177. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  178. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  179. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +4 -3
  180. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +5 -2
  181. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  182. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  183. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  184. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  185. package/src/sap/fe/macros/table/Action.js +15 -2
  186. package/src/sap/fe/macros/table/Action.ts +11 -1
  187. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  188. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  189. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  190. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  191. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  192. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  193. package/src/sap/fe/macros/table/ActionsTemplating.js +21 -6
  194. package/src/sap/fe/macros/table/ActionsTemplating.tsx +19 -4
  195. package/src/sap/fe/macros/table/MdcTableTemplate.js +113 -15
  196. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +162 -14
  197. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  198. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  199. package/src/sap/fe/macros/table/Table.block.js +72 -29
  200. package/src/sap/fe/macros/table/Table.block.tsx +71 -15
  201. package/src/sap/fe/macros/table/TableAPI.js +213 -154
  202. package/src/sap/fe/macros/table/TableAPI.ts +116 -60
  203. package/src/sap/fe/macros/table/TableDefinition.js +19 -2
  204. package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
  205. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +8 -5
  206. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +14 -12
  207. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  208. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  209. package/src/sap/fe/macros/table/TableRuntime.js +2 -2
  210. package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
  211. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  212. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  213. package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -28
  214. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +111 -122
  215. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  216. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  217. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
  218. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
  219. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  220. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  221. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
  222. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
  223. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  224. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  225. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  226. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  227. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +6 -6
  228. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
  229. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +5 -3
  230. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +7 -4
  231. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  232. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  233. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  234. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  235. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  236. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  237. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  238. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  239. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -2,10 +2,11 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/editFlow/editFlowConstants", "sap/fe/core/controllerextensions/editFlow/operations/ODataOperation", "sap/fe/core/controllerextensions/editFlow/operations/Operation", "sap/fe/core/controllerextensions/editFlow/operations/actionHelper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/FPMHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/library", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/internal/valuehelp/ValueHelpTemplating", "sap/m/Button", "sap/m/Dialog", "sap/m/Label", "sap/m/MessageBox", "sap/m/MessageStrip", "sap/ui/core/Messaging", "sap/ui/core/Title", "sap/ui/core/message/MessageType", "sap/ui/layout/form/SimpleForm", "sap/ui/mdc/Field", "sap/ui/mdc/MultiValueField", "sap/ui/mdc/ValueHelp", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/field/MultiValueFieldItem", "sap/ui/mdc/valuehelp/Dialog", "sap/ui/mdc/valuehelp/Popover", "sap/ui/mdc/valuehelp/content/MTable", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/AnnotationHelper", "sap/ui/unified/FileUploader", "sap/ui/unified/FileUploaderHttpRequestMethod", "../internal/helpers/Upload", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ActionRuntime, CommonUtils, BusyLocker, UiModelConstants, ODataOperation, Operation, actionHelper, MetaModelConverter, DataField, FPMHelper, ModelHelper, ResourceModelHelper, StableIdHelper, TypeGuards, FELibrary, DataModelPathHelper, FieldControlHelper, PropertyHelper, FieldHelper, ValueHelpTemplating, Button, Dialog, Label, MessageBox, MessageStrip, Messaging, Title, MessageType, SimpleForm, Field, MultiValueField, ValueHelp, FieldEditMode, MultiValueFieldItem, VHDialog, Popover, MTable, JSONModel, AnnotationHelper, FileUploader, FileUploaderHttpRequestMethod, Upload, _jsx, _Fragment, _jsxs) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/editFlow/editFlowConstants", "sap/fe/core/controllerextensions/editFlow/operations/ODataOperation", "sap/fe/core/controllerextensions/editFlow/operations/Operation", "sap/fe/core/controllerextensions/editFlow/operations/actionHelper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/FPMHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/library", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/internal/valuehelp/ValueHelpTemplating", "sap/m/Button", "sap/m/Dialog", "sap/m/Label", "sap/m/MessageBox", "sap/m/MessageStrip", "sap/ui/core/Messaging", "sap/ui/core/Title", "sap/ui/core/message/MessageType", "sap/ui/layout/form/SimpleForm", "sap/ui/mdc/Field", "sap/ui/mdc/MultiValueField", "sap/ui/mdc/ValueHelp", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/field/MultiValueFieldItem", "sap/ui/mdc/valuehelp/Dialog", "sap/ui/mdc/valuehelp/Popover", "sap/ui/mdc/valuehelp/content/MTable", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/AnnotationHelper", "sap/ui/unified/FileUploader", "sap/ui/unified/FileUploaderHttpRequestMethod", "../internal/helpers/Upload", "sap/fe/macros/field/FieldTemplating", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ActionRuntime, CommonUtils, BusyLocker, UiModelConstants, ODataOperation, Operation, actionHelper, MetaModelConverter, DataField, FPMHelper, ModelHelper, ResourceModelHelper, StableIdHelper, TypeGuards, FELibrary, DataModelPathHelper, FieldControlHelper, PropertyHelper, FieldHelper, ValueHelpTemplating, Button, Dialog, Label, MessageBox, MessageStrip, Messaging, Title, MessageType, SimpleForm, Field, MultiValueField, ValueHelp, FieldEditMode, MultiValueFieldItem, VHDialog, Popover, MTable, JSONModel, AnnotationHelper, FileUploader, FileUploaderHttpRequestMethod, Upload, FieldTemplating, _jsx, _Fragment, _jsxs) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
+ var getValueBinding = FieldTemplating.getValueBinding;
9
10
  var showTypeMismatchDialog = Upload.showTypeMismatchDialog;
10
11
  var showFileSizeExceedDialog = Upload.showFileSizeExceedDialog;
11
12
  var displayMessageForFailedUpload = Upload.displayMessageForFailedUpload;
@@ -137,7 +138,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
137
138
  width: "100%",
138
139
  multipleLines: parameter.annotations.UI?.MultiLineText?.valueOf() === true,
139
140
  required: compileExpression(isActionParameterRequiredExpression(parameter, this.action, convertTypes(this.metaModel))),
140
- valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined,
141
+ valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name, "FieldValueHelp"]) : undefined,
141
142
  change: async e => this.handleFieldChange(e, parameter),
142
143
  visible: compileExpression(not(equal(getExpressionFromAnnotation(parameter.annotations?.UI?.Hidden), true))),
143
144
  ariaLabelledBy: [generate(["APD_", parameter.name, "Label"])],
@@ -209,10 +210,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
209
210
  _proto.createField = async function createField(parameter, parameterContext) {
210
211
  let display = "Value";
211
212
  let additionalValue;
213
+ let bindingValue;
212
214
  try {
213
215
  display = await FieldHelper.getAPDialogDisplayFormat(parameterContext.getObject(), {
214
216
  context: parameterContext
215
217
  });
218
+ bindingValue = await this.getAPDialogBindingValue(parameter, parameterContext);
216
219
  if (hasValueHelp(parameter)) {
217
220
  additionalValue = await this.getAdditionalValue({
218
221
  context: parameterContext
@@ -231,9 +234,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
231
234
  }
232
235
  },
233
236
  id: generate(["APD_", parameter.name]),
234
- value: AnnotationHelper.format(parameterContext.getObject(), {
235
- context: parameterContext
236
- }),
237
+ value: bindingValue,
237
238
  placeholder: placeHolderExpression,
238
239
  display: display,
239
240
  editMode: this.getParameterEditMode(parameter),
@@ -241,7 +242,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
241
242
  multipleLines: isMultiLineText(parameter),
242
243
  required: compileExpression(isActionParameterRequiredExpression(parameter, this.action, convertTypes(this.metaModel))),
243
244
  change: async e => this.handleFieldChange(e, parameter),
244
- valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined,
245
+ valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name, "FieldValueHelp"]) : undefined,
245
246
  dependents: this.createParameterDialogValueHelp(parameter, parameterContext),
246
247
  visible: compileExpression(ifElse(parameter.name === "ResultIsActiveEntity", false, not(equal(getExpressionFromAnnotation(parameter.annotations?.UI?.Hidden), true)))),
247
248
  ariaLabelledBy: [generate(["APD_", parameter.name, "Label"])],
@@ -260,7 +261,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
260
261
  return undefined;
261
262
  }
262
263
  return _jsx(ValueHelp, {
263
- id: generate([this.actionName, parameter.name]),
264
+ id: generate([this.actionName, parameter.name, "FieldValueHelp"]),
264
265
  delegate: {
265
266
  name: "sap/fe/macros/valuehelp/ValueHelpDelegate",
266
267
  payload: {
@@ -648,7 +649,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
648
649
  // File Uploader
649
650
  value = actionParameterInfos.value;
650
651
  } else {
651
- value = parameterContext?.getProperty(parameter.name);
652
+ // Regular field (non-collection, non-file)
653
+ //
654
+ // IMPORTANT: We prefer actionParameterInfos.value which represents the actual user input
655
+ // from the dialog field, validated and processed by handleFieldChange() over parameterContext.getProperty()
656
+ // because the parameterContext can contain more than just the action parameter itself.
657
+ // In ticket CS20250010966844 parameterContext.getProperty() returned the wrong value due
658
+ // to a name clash between the parameter and its text annotation target.
659
+ // Edge Case: If the user never interacted with the field (value is undefined),
660
+ // fall back to parameterContext which contains the default value set by
661
+ // setOperationDefaultValues() via setParameter() calls.
662
+ value = actionParameterInfos.value ?? parameterContext?.getProperty(parameter.name);
652
663
  }
653
664
  return {
654
665
  [parameter.name]: value
@@ -727,6 +738,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
727
738
  _proto.closeDialog = function closeDialog() {
728
739
  if (this.dialog) {
729
740
  this.parameters.events?.onParameterDialogClosed?.();
741
+ // when the dialog is cancelled, messages need to be removed in case the same action should be executed again
742
+ for (const i in this.actionParameterInfos) {
743
+ this.removeMessagesForParameter(this.actionParameterInfos[i].parameter);
744
+ }
730
745
  this.dialog.close();
731
746
  }
732
747
  this.isDialogOpen = false;
@@ -1019,10 +1034,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
1019
1034
  * Manages the close of the dialog.
1020
1035
  */;
1021
1036
  _proto.afterClose = function afterClose() {
1022
- // when the dialog is cancelled, messages need to be removed in case the same action should be executed again
1023
- for (const i in this.actionParameterInfos) {
1024
- this.removeMessagesForParameter(this.actionParameterInfos[i].parameter);
1025
- }
1026
1037
  this.dialog?.destroy();
1027
1038
  this.buttonLock = false; //needed here, not in the press events finally clause. In case the UI is sluggish, begin button could be pressed again.
1028
1039
  }
@@ -1057,10 +1068,32 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
1057
1068
  });
1058
1069
  }
1059
1070
  }
1071
+ }
1072
+
1073
+ /**
1074
+ * Gets the value binding for an action parameter. We add special handling for currency and unit beause they are not
1075
+ * part of the annotation helper format function.
1076
+ * @param parameter The parameter
1077
+ * @param parameterContext The parameter context
1078
+ * @param oInterface The parameter
1079
+ * @returns The binding for the value of the action parameter.
1080
+ */;
1081
+ _proto.getAPDialogBindingValue = async function getAPDialogBindingValue(parameter, parameterContext) {
1082
+ const actionMetaPath = this.action.isBound ? `${this.metaModel.getMetaPath(this.parameters.contexts[0].getPath())}/${convertTypes(this.metaModel).namespace}.${this.action.name}` : `/${this.action.name}`;
1083
+ const metaContext = this.metaModel.createBindingContext(`${actionMetaPath}/${parameter.name}`);
1084
+ try {
1085
+ const propertyObjectPath = getInvolvedDataModelObjects(metaContext);
1086
+ return getValueBinding(propertyObjectPath, {});
1087
+ } catch (error) {
1088
+ // Fallback to old approach until we can reach unbound actions
1089
+ return AnnotationHelper.format(parameterContext.getObject(), {
1090
+ context: parameterContext
1091
+ });
1092
+ }
1060
1093
  };
1061
1094
  return ActionParameterDialog;
1062
1095
  }();
1063
1096
  _exports = ActionParameterDialog;
1064
1097
  return _exports;
1065
1098
  }, false);
1066
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyVmFsdWVzIiwiZW50aXR5U2V0TmFtZSIsIm1lc3NhZ2VIYW5kbGVyIiwiaXNEaWFsb2dPcGVuIiwiYnV0dG9uTG9jayIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJhY3Rpb25OYW1lIiwiYWN0aW9uSGVscGVyIiwiZ2V0QWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicmVzb3VyY2VNb2RlbCIsInZpZXciLCJnZXRSZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwicGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlIiwicGFyYW1ldGVyc1ZhbHVlc1JlamVjdCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0UGFyYW1ldGVyRWRpdE1vZGUiLCJwYXJhbWV0ZXIiLCJhbm5vdGF0aW9ucyIsImZpZWxkQ29udHJvbCIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsIkNvcmUiLCJJbW11dGFibGUiLCJ2YWx1ZU9mIiwiY29tcHV0ZWQiLCJDb21wdXRlZCIsImNvbnN0YW50IiwiRmllbGRFZGl0TW9kZSIsIlJlYWRPbmx5IiwiaWZFbHNlIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsIkRpc2FibGVkIiwiRWRpdGFibGUiLCJjcmVhdGVGb3JtRWxlbWVudCIsImFjdGlvbk1ldGFQYXRoIiwiaXNCb3VuZCIsImdldE1ldGFQYXRoIiwiY29udGV4dHMiLCJnZXRQYXRoIiwiY29udmVydFR5cGVzIiwibmFtZXNwYWNlIiwibmFtZSIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJmaWVsZCIsImxhYmVsIiwiTGFiZWwiLCJnZXRUZXh0IiwidG9TdHJpbmciLCJzdHJlYW1QYXJhbWV0ZXIiLCJpc0NvbGxlY3Rpb24iLCJjcmVhdGVNdWx0aUZpZWxkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJnZXRTdHJlYW1Qcm9wZXJ0eSIsImNyZWF0ZUZpbGVVcGxvYWRlciIsImNyZWF0ZUZpZWxkIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjaGlsZHJlbiIsIl9qc3giLCJpZCIsImdlbmVyYXRlIiwidGV4dCIsInBhcmFtZXRlckNvbnRleHQiLCJkaXNwbGF5IiwiRmllbGRIZWxwZXIiLCJnZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQiLCJnZXRPYmplY3QiLCJjb250ZXh0IiwiZXJyIiwiTG9nIiwid2FybmluZyIsInBsYWNlSG9sZGVyIiwiVUkiLCJQbGFjZWhvbGRlciIsInBsYWNlSG9sZGVyRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwicGFyYW1ldGVyVHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJNdWx0aVZhbHVlRmllbGQiLCJwbGFjZWhvbGRlciIsIml0ZW1zIiwicGF0aCIsImRlbGVnYXRlIiwiZWRpdE1vZGUiLCJ3aWR0aCIsIm11bHRpcGxlTGluZXMiLCJNdWx0aUxpbmVUZXh0IiwicmVxdWlyZWQiLCJpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiIsInZhbHVlSGVscCIsImhhc1ZhbHVlSGVscCIsImNoYW5nZSIsImUiLCJoYW5kbGVGaWVsZENoYW5nZSIsInZpc2libGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsImFyaWFMYWJlbGxlZEJ5IiwiZGVwZW5kZW50cyIsImNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscCIsIk11bHRpVmFsdWVGaWVsZEl0ZW0iLCJkZXNjcmlwdGlvbiIsImZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiYWNjZXB0ZWRUeXBlcyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImpvaW4iLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZXZlbnQiLCJmaWxlVXBsb2FkZXIiLCJnZXRTb3VyY2UiLCJnaXZlblR5cGUiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNaW1lVHlwZSIsInNob3dUeXBlTWlzbWF0Y2hEaWFsb2ciLCJmaWxlTWF4aW11bVNpemUiLCJjYWxjdWxhdGVNQmZyb21CeXRlIiwibWF4TGVuZ3RoIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJzaG93RmlsZVNpemVFeGNlZWREaWFsb2ciLCJnZXRNYXhpbXVtRmlsZVNpemUiLCJ0b0ZpeGVkIiwib25VcGxvYWRDb21wbGV0ZSIsImRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkIiwiRmlsZVVwbG9hZGVyIiwiYnV0dG9uT25seSIsImljb25Pbmx5IiwibXVsdGlwbGUiLCJ0b29sdGlwIiwiaWNvbiIsInN0eWxlIiwic2VuZFhIUiIsInVzZU11bHRpcGFydCIsInNhbWVGaWxlbmFtZUFsbG93ZWQiLCJ1cGxvYWRPbkNoYW5nZSIsIm1pbWVUeXBlIiwidHlwZU1pc3NtYXRjaCIsIm1heGltdW1GaWxlU2l6ZSIsImZpbGVTaXplRXhjZWVkIiwiaHR0cFJlcXVlc3RNZXRob2QiLCJGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCIsIlB1dCIsInVwbG9hZENvbXBsZXRlIiwiaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlIiwiYWRkaXRpb25hbFZhbHVlIiwiZ2V0QWRkaXRpb25hbFZhbHVlIiwiRmllbGQiLCJwYXlsb2FkIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsInZhbHVlIiwiQW5ub3RhdGlvbkhlbHBlciIsImZvcm1hdCIsImlzTXVsdGlMaW5lVGV4dCIsIlZhbHVlSGVscCIsInByb3BlcnR5UGF0aCIsImdldFRhcmdldE5hdmlnYXRpb25QYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJxdWFsaWZpZXJzIiwidmFsdWVIZWxwUXVhbGlmaWVyIiwidmFsaWRhdGVJbnB1dCIsInJlcXVpcmVzVmFsaWRhdGlvbiIsInR5cGVhaGVhZCIsIlBvcG92ZXIiLCJNVGFibGUiLCJjYXNlU2Vuc2l0aXZlIiwidXNlQ2FzZVNlbnNpdGl2ZUZpbHRlclJlcXVlc3RzIiwiZW50aXR5Q29udGFpbmVyIiwiQ2FwYWJpbGl0aWVzIiwiRmlsdGVyRnVuY3Rpb25zIiwiTW9kZWxIZWxwZXIiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJ1c2VBc1ZhbHVlSGVscCIsIlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsImRpYWxvZyIsImNyZWF0ZUZpZWxkVkhEaWFsb2ciLCJWSERpYWxvZyIsImZpZWxkUHJvbWlzZSIsInBhcmFtZXRlckluZm8iLCJmaW5kIiwiYWN0aW9uUGFyYW1ldGVySW5mbyIsInZhbGlkYXRpb25Qcm9taXNlIiwicmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIiLCJwYXJhbWV0ZXJzVmFsdWVzIiwiaGFzRXJyb3IiLCJlcnJvciIsIkFjdGlvblJ1bnRpbWUiLCJfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlciIsIm1lc3NhZ2UiLCJmaWxlcyIsImdldEJhc2U2NEZpbGUiLCJnZXRNaW1lVHlwZVBhdGgiLCJnZXRGaWxlTmFtZVBhdGgiLCJDb250ZW50RGlzcG9zaXRpb24iLCJGaWxlbmFtZSIsIk1lZGlhVHlwZSIsInR5cGVSZWZlcmVuY2UiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwicmVzdWx0Iiwic3BsaXQiLCJyZWFkQXNEYXRhVVJMIiwiaXRlbSIsIm1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImNvbnRyb2xJZCIsInJlbGV2YW50TWVzc2FnZXMiLCJmaWx0ZXIiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwic29tZSIsImluY2x1ZGVzIiwicmVtb3ZlTWVzc2FnZXMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudHMiLCJnZXREaWFsb2ciLCJjcmVhdGVEaWFsb2ciLCJkaWFsb2dDb250ZW50cyIsImRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMiLCJhY3Rpb25QYXJhbWV0ZXJzIiwic2xpY2UiLCJPcGVyYXRpb25QYXJhbWV0ZXJGYWNldHMiLCJhY3Rpb25QYXJhbWV0ZXJHcm91cHMiLCJmb3JFYWNoIiwiZmFjZXQiLCJmYWNldFRpdGxlIiwiJFR5cGUiLCJoYXNGaWVsZEdyb3VwVGFyZ2V0IiwiZmllbGRHcm91cCIsIlRhcmdldCIsIiR0YXJnZXQiLCJncm91cGVkQWN0aW9uUGFyYW1ldGVycyIsIkRhdGEiLCJncm91cCIsInB1c2giLCJWYWx1ZSIsImRhdGEiLCJnZXRHcm91cEZvcm0iLCJhbGwiLCJiaW5kIiwiZm9ybURhdGEiLCJwYXJhbWV0ZXJHcm91cCIsIm9wRmFjZXRzIiwiZGlhbG9nQ29udGVudCIsIlRpdGxlIiwiZWxlbWVudCIsIm9wRmFjZXQiLCJyZWdpc3RlckFjdGlvblBhcmFtZXRlckluZm8iLCJtZXNzYWdlU3RyaXAiLCJnZXRDdXN0b21BY3Rpb25NZXNzYWdlU3RyaXBUZXh0IiwiZW5kQnV0dG9uIiwiQnV0dG9uIiwicHJlc3MiLCJvbkNhbmNlbCIsIkRpYWxvZyIsInRpdGxlIiwiZ2V0VGl0bGVUZXh0IiwiZXNjYXBlSGFuZGxlciIsImRyYWdnYWJsZSIsInJlc2l6YWJsZSIsImFmdGVyQ2xvc2UiLCJiZWZvcmVPcGVuIiwiYWZ0ZXJPcGVuIiwiaW5pdGlhbEZvY3VzIiwiYmVnaW5CdXR0b24iLCJpc0NyZWF0ZUFjdGlvbiIsImdldEJlZ2luQnV0dG9uTGFiZWwiLCJvbkFwcGx5IiwiY29udGVudCIsIk1lc3NhZ2VTdHJpcCIsInNob3dJY29uIiwiU2ltcGxlRm9ybSIsImNvbHVtbnNNIiwiZWRpdGFibGUiLCJsYWJlbFNwYW5MIiwibGFiZWxTcGFuTSIsImJpbmRpbmciLCJhY3Rpb25MYWJlbCIsImtleSIsImRlZmF1bHRLZXkiLCJnZXRPdmVycmlkZGVuVGV4dCIsImJvdW5kQWN0aW9uTmFtZSIsInBvcCIsInN1ZmZpeFJlc291cmNlS2V5IiwiY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzIiwiZ2V0T2JqZWN0QmluZGluZyIsImdldFBhcmFtZXRlckNvbnRleHQiLCJCdXN5TG9ja2VyIiwibG9jayIsInZhbGlkYXRlUHJvcGVydGllcyIsInVubG9jayIsIm5ld1ZhbHVlc0RpY3Rpb25hcnkiLCJPYmplY3QiLCJhc3NpZ24iLCJ2YWx1ZXMiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwicGFyYW1WYWx1ZSIsIktleSIsImlzTmV3VmFsdWUiLCJzZXRQcm9wZXJ0eSIsIlVpTW9kZWxDb25zdGFudHMiLCJEb2N1bWVudE1vZGlmaWVkIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwicmVzZXRTdGF0ZSIsInVubG9ja0RpYWxvZyIsInVwZGF0ZURpYWxvZ0JpbmRpbmdDb250ZXh0Rm9yRXJyb3IiLCJsZW5ndGgiLCJ3YXJuaW5nQ29udGV4dCIsImluZm9Db250ZXh0IiwiZXJyb25lb3VzQ3R4IiwiZ2V0TWVzc2FnZXMiLCJnZXRUeXBlIiwiTWVzc2FnZVR5cGUiLCJXYXJuaW5nIiwiSW5mb3JtYXRpb24iLCJFcnJvciIsImNvbnRleHRUb1VzZSIsInNldEJpbmRpbmdDb250ZXh0IiwiaXNMb2NrZWQiLCJGRUxpYnJhcnkiLCJDb25zdGFudHMiLCJDYW5jZWxBY3Rpb25EaWFsb2ciLCJjbG9zZURpYWxvZyIsImV2ZW50cyIsIm9uUGFyYW1ldGVyRGlhbG9nQ2xvc2VkIiwiY2xvc2UiLCJvcGVuRGlhbG9nIiwiQ29tbW9uVXRpbHMiLCJzZXRVc2VyRGVmYXVsdHMiLCJzZXRNb2RlbHMiLCJhZGREZXBlbmRlbnQiLCJzZXRPcGVyYXRpb25EZWZhdWx0VmFsdWVzIiwib3BlbiIsInNldE1vZGVsIiwiYmluZEVsZW1lbnQiLCJfZXZlbnQiLCJ3YWl0Rm9yUGFyYW1ldGVyc1ZhbHVlcyIsImlzT3BlbiIsImdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZSIsImJpbmRpbmdQYXJhbWV0ZXIiLCJvcGVyYXRpb25CaW5kaW5nIiwicGFyYW1ldGVyTW9kZWxEYXRhIiwicGFyYW1OYW1lIiwiZGVmYXVsdFZhbHVlIiwiUGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJwYXRoRm9yQ29udGV4dCIsInJlcGxhY2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJyZXF1ZXN0UHJvcGVydHkiLCJub1Bvc3NpYmxlVmFsdWUiLCJsYXRlUHJvcGVydHlFcnJvciIsImdldE1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiRlBNSGVscGVyIiwibG9hZE1vZHVsZUFuZENhbGxNZXRob2QiLCJnZXRQcmVEZWZpbmVkVmFsdWVzIiwiYm91bmRGdW5jdGlvbk5hbWUiLCJEZWZhdWx0VmFsdWVzRnVuY3Rpb24iLCJyZXF1ZXN0Q29udGV4dE9iamVjdCIsImZ1bmN0aW9uUGFyYW1zIiwiYm91bmRGdW5jdGlvbiIsIk9wZXJhdGlvbiIsImdldE9wZXJhdGlvbkZyb21OYW1lIiwiT0RhdGFPcGVyYXRpb24iLCJlbmhhbmNlJHNlbGVjdCIsImdyb3VwSWQiLCJleGVjdXRlIiwiaXNGdWxmaWxsZWQiLCJib3VuZENvbnRleHQiLCJyZXF1ZXN0T2JqZWN0IiwiY29udGV4dFZhbHVlcyIsInByb21pc2VzIiwiZGVmYXVsdFZhbHVlcyIsImZ1bmN0aW9uVmFsdWVzIiwibWFuaWZlc3RGdW5jdGlvblZhbHVlcyIsImZpcnN0VmlzaWJsZVBhcmFtZXRlciIsImdldFZpc2libGUiLCJmaXJzdEZpZWxkIiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwib25QYXJhbWV0ZXJEaWFsb2dPcGVuZWQiLCJpc011bHRpVmFsdWUiLCJzZXRQYXJhbWV0ZXIiLCJpIiwicGFyYW1ldGVyTmFtZSIsInBhcmFtZXRlclByb3ZpZGVkVmFsdWUiLCJoYXNPd25Qcm9wZXJ0eSIsInNldE9mRnVuY3Rpb25WYWx1ZXMiLCJTZXQiLCJpbmRleCIsInNpemUiLCJuZXh0IiwicmVmcmVzaCIsIk1lc3NhZ2VCb3giLCJhY3Rpb25zIiwiQWN0aW9uIiwiT0siLCJlbXBoYXNpemVkQWN0aW9uIiwib25DbG9zZSIsImV4dGVuc2lvbkFQSSIsImdldENvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25BUEkiLCJjb250ZW50V2lkdGgiLCJmdW5jdGlvbkNvbnRleHQiLCJnZXRCaW5kaW5nIiwiaXNBIiwiZGVzdHJveSIsIm9JbnRlcmZhY2UiLCJ0ZXh0Q29udGV4dCIsImNvbnRleHRQYXRoIiwibG9jYWxEYXRhUHJvcGVydHkiLCIkTmFtZSIsInZhbHVlTGlzdEJ5UXVhbGlmaWVyIiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJ2YWx1ZUxpc3RQYXJhbWV0ZXIiLCJQYXJhbWV0ZXJzIiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiVmFsdWVMaXN0UHJvcGVydHkiLCJ0ZXh0UHJvcGVydHkiLCJDb2xsZWN0aW9uUGF0aCIsInByb3BBbm5vdGF0aW9ucyIsInRleHRQcm9wIiwidGV4dFBhdGgiLCIkUGF0aCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT3BlcmF0aW9uUGFyYW1ldGVyRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbXBsZXhUeXBlLCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByaW1pdGl2ZVR5cGUsIFByb3BlcnR5LCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBBY3Rpb24sIHR5cGUgQWN0aW9uUGFyYW1ldGVyIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFByb3BlcnR5QW5ub3RhdGlvbnNfQ29yZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29yZV9FZG1cIjtcbmltcG9ydCB0eXBlIHsgRGF0YUZpZWxkLCBGaWVsZEdyb3VwVHlwZSwgUmVmZXJlbmNlRmFjZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXJJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE9EYXRhT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09EYXRhT3BlcmF0aW9uXCI7XG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09wZXJhdGlvblwiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9ucy9hY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNGaWVsZEdyb3VwVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNGdWxmaWxsZWQsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiwgaXNEaXNhYmxlZEV4cHJlc3Npb24sIGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAsIGlzTXVsdGlMaW5lVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyByZXF1aXJlc1ZhbGlkYXRpb24sIHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUhlbHBUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgRGlhbG9nJEJlZm9yZU9wZW5FdmVudCB9IGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC91aS9jb3JlL1RpdGxlXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFNpbXBsZUZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9TaW1wbGVGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvZmllbGQvTXVsdGlWYWx1ZUZpZWxkSXRlbVwiO1xuaW1wb3J0IFZIRGlhbG9nIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9EaWFsb2dcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9Qb3BvdmVyXCI7XG5pbXBvcnQgTVRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2RcIjtcbmltcG9ydCB7IGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkLCBzaG93RmlsZVNpemVFeGNlZWREaWFsb2csIHNob3dUeXBlTWlzbWF0Y2hEaWFsb2cgfSBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9VcGxvYWRcIjtcblxudHlwZSBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgPSB7IHBhcmFtTmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bjsgbGF0ZVByb3BlcnR5RXJyb3I/OiBib29sZWFuOyBub1Bvc3NpYmxlVmFsdWU/OiBib29sZWFuIH07XG5cbnR5cGUgRWxlbWVudEdyb3VwID0geyBmYWNldFRpdGxlOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+IHwgdW5kZWZpbmVkOyBkYXRhOiBBY3Rpb25QYXJhbWV0ZXJbXSB9O1xudHlwZSBFbGVtZW50R3JvdXBDb252ZXJ0ZWQgPSB7IGZhY2V0VGl0bGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQ7IGRhdGE6IERpYWxvZ0NvbnRlbnRUeXBlc1tdIH07XG5cbnR5cGUgRm9ybUVsZW1lbnRUeXBlID0gW0xhYmVsLCBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZF07XG5cbnR5cGUgRGlhbG9nQ29udGVudFR5cGVzID0ge1xuXHRmb3JtRWxlbWVudHM6IEZvcm1FbGVtZW50VHlwZTtcblx0cGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXI7XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWN0aW9uUGFyYW1ldGVyRGlhbG9nIHtcblx0cHJpdmF0ZSBwYXJhbWV0ZXJzVmFsdWVzUHJvbWlzZTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPj47XG5cblx0cHJpdmF0ZSBwYXJhbWV0ZXJzVmFsdWVzUmVzb2x2ZSE6IChyZXNvbHZlVmFsdWU6IFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+KSA9PiB2b2lkO1xuXG5cdHByaXZhdGUgcGFyYW1ldGVyc1ZhbHVlc1JlamVjdCE6IChlcnJvcjogdW5rbm93bikgPT4gdm9pZDtcblxuXHQvLyB0aGUgZGlhbG9nIGlzIGNvbnNpZGVyZWQgYXMgY2xvc2VkIGFmdGVyIHRoZSBhZnRlckNsb3NlIGV2ZW50IGhhcyBiZWVuIHRyaWdnZXJlZFxuXHQvLyB0aGlzIGlzIGFzeW5jaHJvbm91cywgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBkaWFsb2cgc3RhdGUgc2luY2UgdGhlIG1lc3NhZ2UgaGFuZGxpbmcgaXMgc3luY2hyb25vdXNcblx0Ly8gYW5kIHdlIG5lZWQgdG8ga25vdyBpZiB0aGUgZGlhbG9nIGlzIG9wZW4gb3IgY2xvc2VkXG5cdHByaXZhdGUgaXNEaWFsb2dPcGVuID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBkaWFsb2c6IERpYWxvZyB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvbk5hbWU6IHN0cmluZztcblxuXHRwcml2YXRlIGJ1dHRvbkxvY2sgPSBmYWxzZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cblx0cHJpdmF0ZSByZWFkb25seSBhY3Rpb25QYXJhbWV0ZXJJbmZvczogKEFjdGlvblBhcmFtZXRlckluZm8gJiB7IHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyIH0pW10gPSBbXTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IHBhcmFtZXRlck1vZGVsOiBKU09OTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHQkZGlzcGxheU1vZGU6IHt9XG5cdH0pO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbDtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvbjogQWN0aW9uLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdHBhcmFtZXRlcnNWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogc3RyaW5nO1xuXHRcdFx0aXNDcmVhdGVBY3Rpb24/OiBib29sZWFuO1xuXHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRtb2RlbDogT0RhdGFNb2RlbDtcblx0XHRcdHZpZXc/OiBGRVZpZXc7XG5cdFx0XHRldmVudHM/OiB7XG5cdFx0XHRcdG9uUGFyYW1ldGVyRGlhbG9nT3BlbmVkPzogKCkgPT4gdm9pZDtcblx0XHRcdFx0b25QYXJhbWV0ZXJEaWFsb2dDbG9zZWQ/OiAoKSA9PiB2b2lkO1xuXHRcdFx0fTtcblx0XHR9LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdIHwgdW5kZWZpbmVkLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgZW50aXR5U2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyXG5cdCkge1xuXHRcdHRoaXMuYWN0aW9uTmFtZSA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25OYW1lKHRoaXMuYWN0aW9uKTtcblx0XHR0aGlzLm1ldGFNb2RlbCA9IHRoaXMucGFyYW1ldGVycy5tb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHR0aGlzLnJlc291cmNlTW9kZWwgPSB0aGlzLnBhcmFtZXRlcnMudmlldyA/IGdldFJlc291cmNlTW9kZWwodGhpcy5wYXJhbWV0ZXJzLnZpZXcpIDogZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KTtcblx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBiaW5kaW5nIGV4cHJlc3Npb24gb2YgdGhlIGVkaXQgbW9kZSBwcm9wZXJ0eSBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRQYXJhbWV0ZXJFZGl0TW9kZShwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxGaWVsZEVkaXRNb2RlPiB7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbnMgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMsXG5cdFx0XHRmaWVsZENvbnRyb2wgPSBhbm5vdGF0aW9ucy5Db21tb24/LkZpZWxkQ29udHJvbCxcblx0XHRcdGltbXV0YWJsZSA9IChhbm5vdGF0aW9ucy5Db3JlIGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uc19Db3JlKT8uSW1tdXRhYmxlPy52YWx1ZU9mKCksXG5cdFx0XHRjb21wdXRlZCA9IChhbm5vdGF0aW9ucy5Db3JlIGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uc19Db3JlKT8uQ29tcHV0ZWQ/LnZhbHVlT2YoKTtcblxuXHRcdGlmIChpbW11dGFibGUgfHwgY29tcHV0ZWQpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChGaWVsZEVkaXRNb2RlLlJlYWRPbmx5KTtcblx0XHR9IGVsc2UgaWYgKGZpZWxkQ29udHJvbCkge1xuXHRcdFx0cmV0dXJuIGlmRWxzZShcblx0XHRcdFx0aXNSZWFkT25seUV4cHJlc3Npb24ocGFyYW1ldGVyKSxcblx0XHRcdFx0RmllbGRFZGl0TW9kZS5SZWFkT25seSxcblx0XHRcdFx0aWZFbHNlKGlzRGlzYWJsZWRFeHByZXNzaW9uKHBhcmFtZXRlciksIEZpZWxkRWRpdE1vZGUuRGlzYWJsZWQsIEZpZWxkRWRpdE1vZGUuRWRpdGFibGUpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29uc3RhbnQoRmllbGRFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZm9ybSBlbGVtZW50IGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGZvcm0gZWxlbWVudCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVGb3JtRWxlbWVudChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8Rm9ybUVsZW1lbnRUeXBlPiB7XG5cdFx0Y29uc3QgYWN0aW9uTWV0YVBhdGggPSB0aGlzLmFjdGlvbi5pc0JvdW5kXG5cdFx0XHQ/IGAke3RoaXMubWV0YU1vZGVsLmdldE1ldGFQYXRoKHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRQYXRoKCkpfS8ke2NvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkubmFtZXNwYWNlfS4ke1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uLm5hbWVcblx0XHRcdCAgfWBcblx0XHRcdDogYC8ke3RoaXMuYWN0aW9uLm5hbWV9YDtcblx0XHRjb25zdCBtZXRhQ29udGV4dCA9IHRoaXMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke2FjdGlvbk1ldGFQYXRofS8ke3BhcmFtZXRlci5uYW1lfWApITtcblx0XHRsZXQgZmllbGQ7XG5cdFx0bGV0IGxhYmVsID0gcGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWxcblx0XHRcdD8gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQocGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbi5MYWJlbC50b1N0cmluZygpKVxuXHRcdFx0OiBwYXJhbWV0ZXIubmFtZTtcblx0XHRsZXQgc3RyZWFtUGFyYW1ldGVyO1xuXHRcdGlmIChwYXJhbWV0ZXIuaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRmaWVsZCA9IGF3YWl0IHRoaXMuY3JlYXRlTXVsdGlGaWVsZChwYXJhbWV0ZXIsIG1ldGFDb250ZXh0KTtcblx0XHR9IGVsc2UgaWYgKCFwYXJhbWV0ZXIudHlwZS5zdGFydHNXaXRoKFwiRWRtLlwiKSAmJiB0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcikpIHtcblx0XHRcdHN0cmVhbVBhcmFtZXRlciA9IHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKTtcblx0XHRcdC8vIGNhbGN1bGF0ZSBsYWJlbCBmcm9tIHRoZSBzdHJlYW0gcHJvcGVydHkgd2l0aGluIHRoZSBDb21wbGV4VHlwZVxuXHRcdFx0bGFiZWwgPSBzdHJlYW1QYXJhbWV0ZXI/LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWxcblx0XHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChzdHJlYW1QYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uLkxhYmVsLnRvU3RyaW5nKCkpXG5cdFx0XHRcdDogKHN0cmVhbVBhcmFtZXRlcj8ubmFtZSBhcyBzdHJpbmcpO1xuXHRcdFx0ZmllbGQgPSB0aGlzLmNyZWF0ZUZpbGVVcGxvYWRlcihwYXJhbWV0ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmaWVsZCA9IGF3YWl0IHRoaXMuY3JlYXRlRmllbGQocGFyYW1ldGVyLCBtZXRhQ29udGV4dCk7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHQ8TGFiZWwgaWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWUsIHN0cmVhbVBhcmFtZXRlcj8ubmFtZSwgXCJMYWJlbFwiXSl9IHRleHQ9e2xhYmVsfSAvPlxuXHRcdFx0XHR7ZmllbGR9XG5cdFx0XHQ8Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIG11bHRpIGZpZWxkIGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHBhcmFtZXRlckNvbnRleHQgVGhlIHBhcmFtZXRlciBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBtdWx0aSB2YWx1ZSBmaWVsZCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVNdWx0aUZpZWxkKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxNdWx0aVZhbHVlRmllbGQ+IHtcblx0XHRsZXQgZGlzcGxheSA9IFwiVmFsdWVcIjtcblx0XHR0cnkge1xuXHRcdFx0ZGlzcGxheSA9IGF3YWl0IEZpZWxkSGVscGVyLmdldEFQRGlhbG9nRGlzcGxheUZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRMb2cud2FybmluZyhgUGFyYW1ldGVyIGRpYWxvZyBtdWx0aWZpZWxkOiBkaXNwbGF5IGZvcm1hdCBjb3VsZG4ndCBiZSBjYWxjdWxhdGVkIGZvciBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9JzogJHtlcnJ9YCk7XG5cdFx0fVxuXHRcdGNvbnN0IHBsYWNlSG9sZGVyID0gcGFyYW1ldGVyLmFubm90YXRpb25zLlVJPy5QbGFjZWhvbGRlciBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxQcmltaXRpdmVUeXBlPiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBwbGFjZUhvbGRlckV4cHJlc3Npb24gPSBwbGFjZUhvbGRlciA/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwbGFjZUhvbGRlcikpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBhcmFtZXRlclR5cGUgPSBFRE1fVFlQRV9NQVBQSU5HPy5bcGFyYW1ldGVyLnR5cGVdPy50eXBlO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TXVsdGlWYWx1ZUZpZWxkXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lXSl9XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtwbGFjZUhvbGRlckV4cHJlc3Npb259XG5cdFx0XHRcdGl0ZW1zPXt7IHBhdGg6IGBtdmZ2aWV3Pi8ke3BhcmFtZXRlci5uYW1lfWAgfX1cblx0XHRcdFx0ZGVsZWdhdGU9e3sgbmFtZTogXCJzYXAvZmUvY29yZS9jb250cm9scy9NdWx0aVZhbHVlUGFyYW1ldGVyRGVsZWdhdGVcIiB9fVxuXHRcdFx0XHRkaXNwbGF5PXtkaXNwbGF5fVxuXHRcdFx0XHRlZGl0TW9kZT17dGhpcy5nZXRQYXJhbWV0ZXJFZGl0TW9kZShwYXJhbWV0ZXIpfVxuXHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRtdWx0aXBsZUxpbmVzPXtwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/Lk11bHRpTGluZVRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZX1cblx0XHRcdFx0cmVxdWlyZWQ9e2NvbXBpbGVFeHByZXNzaW9uKGlzQWN0aW9uUGFyYW1ldGVyUmVxdWlyZWRFeHByZXNzaW9uKHBhcmFtZXRlciwgdGhpcy5hY3Rpb24sIGNvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkpKX1cblx0XHRcdFx0dmFsdWVIZWxwPXtoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSA/IGdlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmllbGRDaGFuZ2UoZSwgcGFyYW1ldGVyKX1cblx0XHRcdFx0dmlzaWJsZT17Y29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwYXJhbWV0ZXIuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSkpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWUsIFwiTGFiZWxcIl0pXX1cblx0XHRcdFx0ZGVwZW5kZW50cz17dGhpcy5jcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0KX1cblx0XHRcdD5cblx0XHRcdFx0PE11bHRpVmFsdWVGaWVsZEl0ZW0ga2V5PXtge3BhdGg6ICdtdmZ2aWV3PktleScsIHR5cGU6JyR7cGFyYW1ldGVyVHlwZX0nfWB9IGRlc2NyaXB0aW9uPVwie212ZnZpZXc+RGVzY31cIiAvPlxuXHRcdFx0PC9NdWx0aVZhbHVlRmllbGQ+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBGaWxlVXBsb2FkZXIgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgRmlsZVVwbG9hZGVyIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUZpbGVVcGxvYWRlcihwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IEZpbGVVcGxvYWRlciB7XG5cdFx0bGV0IGZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcztcblx0XHRpZiAodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5hbm5vdGF0aW9ucy5Db3JlPy5BY2NlcHRhYmxlTWVkaWFUeXBlcykge1xuXHRcdFx0Y29uc3QgYWNjZXB0ZWRUeXBlcyA9IEFycmF5LmZyb20oXG5cdFx0XHRcdHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXMgYXMgdW5rbm93biBhcyBzdHJpbmdbXVxuXHRcdFx0KS5tYXAoKHR5cGUpID0+IGAnJHt0eXBlfSdgKTtcblx0XHRcdGZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyA9IGB7PW9kYXRhLmNvbGxlY3Rpb24oWyR7YWNjZXB0ZWRUeXBlcy5qb2luKFwiLFwiKX1dKX1gO1xuXHRcdH1cblx0XHRjb25zdCBoYW5kbGVUeXBlTWlzc21hdGNoID0gZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IGdpdmVuVHlwZSA9IGV2ZW50LmdldFBhcmFtZXRlcihcIm1pbWVUeXBlXCIpO1xuXHRcdFx0Y29uc3QgYWNjZXB0ZWRUeXBlcyA9IGZpbGVVcGxvYWRlci5nZXRNaW1lVHlwZSgpO1xuXHRcdFx0aWYgKGdpdmVuVHlwZSkge1xuXHRcdFx0XHRzaG93VHlwZU1pc21hdGNoRGlhbG9nKGZpbGVVcGxvYWRlciwgZ2l2ZW5UeXBlLCBhY2NlcHRlZFR5cGVzKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8vIHZlcmlmeSBjaGVjayBmb3Igc3RyZWFtXG5cdFx0Y29uc3QgZmlsZU1heGltdW1TaXplID0gRmllbGRIZWxwZXIuY2FsY3VsYXRlTUJmcm9tQnl0ZSh0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/Lm1heExlbmd0aCk7XG5cdFx0Y29uc3QgaGFuZGxlRmlsZVNpemVFeGNlZWQgPSBmdW5jdGlvbiAoZXZlbnQ6IEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50KTogdm9pZCB7XG5cdFx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudD8uZ2V0U291cmNlKCk7XG5cdFx0XHRzaG93RmlsZVNpemVFeGNlZWREaWFsb2coZmlsZVVwbG9hZGVyLCBmaWxlVXBsb2FkZXIuZ2V0TWF4aW11bUZpbGVTaXplKCkudG9GaXhlZCgzKSk7XG5cdFx0fTtcblx0XHRjb25zdCBvblVwbG9hZENvbXBsZXRlID0gZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudCk6IHZvaWQge1xuXHRcdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcInN0YXR1c1wiKSA9PT0gMCB8fCAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwic3RhdHVzXCIpIGFzIG51bWJlcikgPj0gNDAwKSB7XG5cdFx0XHRcdGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkKFxuXHRcdFx0XHRcdGV2ZW50LmdldFNvdXJjZSgpLFxuXHRcdFx0XHRcdChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNwb25zZVJhd1wiKSBhcyBzdHJpbmcpIHx8IChldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNwb25zZVwiKSBhcyBzdHJpbmcpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZpbGVVcGxvYWRlclxuXHRcdFx0XHRuYW1lPVwiRkVWNEZpbGVVcGxvYWRcIlxuXHRcdFx0XHRidXR0b25Pbmx5PVwiZmFsc2VcIlxuXHRcdFx0XHRpY29uT25seT1cInRydWVcIlxuXHRcdFx0XHRtdWx0aXBsZT1cImZhbHNlXCJcblx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0ZJRUxEX0ZJTEVVUExPQURFUl9VUExPQURfQlVUVE9OX1RPT0xUSVB9XCJcblx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vdXBsb2FkXCJcblx0XHRcdFx0c3R5bGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdHNlbmRYSFI9XCJ0cnVlXCJcblx0XHRcdFx0dXNlTXVsdGlwYXJ0PVwiZmFsc2VcIlxuXHRcdFx0XHRzYW1lRmlsZW5hbWVBbGxvd2VkPVwidHJ1ZVwiXG5cdFx0XHRcdHVwbG9hZE9uQ2hhbmdlPVwiZmFsc2VcIlxuXHRcdFx0XHRtaW1lVHlwZT17ZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzfVxuXHRcdFx0XHR0eXBlTWlzc21hdGNoPXtoYW5kbGVUeXBlTWlzc21hdGNofVxuXHRcdFx0XHRtYXhpbXVtRmlsZVNpemU9e2ZpbGVNYXhpbXVtU2l6ZX1cblx0XHRcdFx0ZmlsZVNpemVFeGNlZWQ9e2hhbmRsZUZpbGVTaXplRXhjZWVkfVxuXHRcdFx0XHRodHRwUmVxdWVzdE1ldGhvZD17RmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2QuUHV0fVxuXHRcdFx0XHR1cGxvYWRDb21wbGV0ZT17b25VcGxvYWRDb21wbGV0ZX1cblx0XHRcdFx0Y2hhbmdlPXthc3luYyAoZSk6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5oYW5kbGVGaWxlVXBsb2FkZXJDaGFuZ2UoZSwgcGFyYW1ldGVyKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmaWVsZCBjb250cm9sIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJDb250ZXh0IFRoZSBwYXJhbWV0ZXIgY29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgZmllbGQgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgY3JlYXRlRmllbGQocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPEZpZWxkPiB7XG5cdFx0bGV0IGRpc3BsYXkgPSBcIlZhbHVlXCI7XG5cdFx0bGV0IGFkZGl0aW9uYWxWYWx1ZTtcblx0XHR0cnkge1xuXHRcdFx0ZGlzcGxheSA9IGF3YWl0IEZpZWxkSGVscGVyLmdldEFQRGlhbG9nRGlzcGxheUZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0XHRpZiAoaGFzVmFsdWVIZWxwKHBhcmFtZXRlcikpIHtcblx0XHRcdFx0YWRkaXRpb25hbFZhbHVlID0gYXdhaXQgdGhpcy5nZXRBZGRpdGlvbmFsVmFsdWUoeyBjb250ZXh0OiBwYXJhbWV0ZXJDb250ZXh0IH0pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0TG9nLndhcm5pbmcoYFBhcmFtZXRlciBkaWFsb2cgZmllbGQ6IGRpc3BsYXkgZm9ybWF0IGNvdWxkbid0IGJlIGNhbGN1bGF0ZWQgZm9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nOiAke2Vycn1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXIgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBsYWNlaG9sZGVyIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBsYWNlSG9sZGVyRXhwcmVzc2lvbiA9IHBsYWNlSG9sZGVyID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBsYWNlSG9sZGVyKSkgOiB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWVsZFxuXHRcdFx0XHRkZWxlZ2F0ZT17eyBuYW1lOiBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRCYXNlRGVsZWdhdGVcIiwgcGF5bG9hZDogeyByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiB0cnVlIH0gfX1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKX1cblx0XHRcdFx0dmFsdWU9e0Fubm90YXRpb25IZWxwZXIuZm9ybWF0KHBhcmFtZXRlckNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KX1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyRXhwcmVzc2lvbn1cblx0XHRcdFx0ZGlzcGxheT17ZGlzcGxheX1cblx0XHRcdFx0ZWRpdE1vZGU9e3RoaXMuZ2V0UGFyYW1ldGVyRWRpdE1vZGUocGFyYW1ldGVyKX1cblx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0bXVsdGlwbGVMaW5lcz17aXNNdWx0aUxpbmVUZXh0KHBhcmFtZXRlcil9XG5cdFx0XHRcdHJlcXVpcmVkPXtjb21waWxlRXhwcmVzc2lvbihpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbihwYXJhbWV0ZXIsIHRoaXMuYWN0aW9uLCBjb252ZXJ0VHlwZXModGhpcy5tZXRhTW9kZWwpKSl9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmllbGRDaGFuZ2UoZSwgcGFyYW1ldGVyKX1cblx0XHRcdFx0dmFsdWVIZWxwPXtoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSA/IGdlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lXSkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGRlcGVuZGVudHM9e3RoaXMuY3JlYXRlUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCl9XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdHBhcmFtZXRlci5uYW1lID09PSBcIlJlc3VsdElzQWN0aXZlRW50aXR5XCIsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGFyYW1ldGVyLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWUsIFwiTGFiZWxcIl0pXX1cblx0XHRcdFx0YWRkaXRpb25hbFZhbHVlPXthZGRpdGlvbmFsVmFsdWV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgdmFsdWVIZWxwICBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgQSB2YWx1ZUhlbHAgaWYgdGhlIHBhcmFtZXRlciBoYXMgYSBWSCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBWYWx1ZUhlbHAgfCB1bmRlZmluZWQge1xuXHRcdGlmICghaGFzVmFsdWVIZWxwKHBhcmFtZXRlcikpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8VmFsdWVIZWxwXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZV0pfVxuXHRcdFx0XHRkZWxlZ2F0ZT17e1xuXHRcdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy92YWx1ZWhlbHAvVmFsdWVIZWxwRGVsZWdhdGVcIixcblx0XHRcdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IHRoaXMuYWN0aW9uLmlzQm91bmRcblx0XHRcdFx0XHRcdFx0PyBgJHtnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aChnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWN0aW9uUGFyYW1ldGVyPihwYXJhbWV0ZXJDb250ZXh0KSl9LyR7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFjdGlvbk5hbWVcblx0XHRcdFx0XHRcdFx0ICB9LyR7cGFyYW1ldGVyLm5hbWV9YFxuXHRcdFx0XHRcdFx0XHQ6IGAvJHt0aGlzLmFjdGlvbi5uYW1lLnN1YnN0cmluZyh0aGlzLmFjdGlvbi5uYW1lLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpfS8ke3BhcmFtZXRlci5uYW1lfWAsXG5cdFx0XHRcdFx0XHRxdWFsaWZpZXJzOiB7fSxcblx0XHRcdFx0XHRcdHZhbHVlSGVscFF1YWxpZmllcjogXCJcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fX1cblx0XHRcdFx0dmFsaWRhdGVJbnB1dD17cmVxdWlyZXNWYWxpZGF0aW9uKHBhcmFtZXRlcil9XG5cdFx0XHRcdHR5cGVhaGVhZD17XG5cdFx0XHRcdFx0PFBvcG92ZXI+XG5cdFx0XHRcdFx0XHQ8TVRhYmxlXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5hY3Rpb25OYW1lLCBwYXJhbWV0ZXIubmFtZSwgXCJQb3BvdmVyXCIsIFwicXVhbGlmaWVyXCJdKX1cblx0XHRcdFx0XHRcdFx0Y2FzZVNlbnNpdGl2ZT17XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0XHRcdFx0XHRcdFx0PyB1c2VDYXNlU2Vuc2l0aXZlRmlsdGVyUmVxdWVzdHMoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEFjdGlvblBhcmFtZXRlcj4ocGFyYW1ldGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkuZW50aXR5Q29udGFpbmVyLmFubm90YXRpb25zLkNhcGFiaWxpdGllc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Py5GaWx0ZXJGdW5jdGlvbnMgYXMgdW5rbm93biBhcyBzdHJpbmdbXSkgPz8gW11cblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiBNb2RlbEhlbHBlci5pc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUodGhpcy5tZXRhTW9kZWwpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dXNlQXNWYWx1ZUhlbHA9eyEhcGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L1BvcG92ZXI+XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGlhbG9nPXt0aGlzLmNyZWF0ZUZpZWxkVkhEaWFsb2cocGFyYW1ldGVyKX1cblx0XHRcdD48L1ZhbHVlSGVscD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIFZhbHVlSGVscCBkaWFsb2cgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgQSBkaWFsb2cgaWYgdGhlIHBhcmFtZXRlciBoYXMgYSBWSCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGaWVsZFZIRGlhbG9nKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogVkhEaWFsb2cgfCB1bmRlZmluZWQge1xuXHRcdGlmIChwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIDxWSERpYWxvZyAvPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgZmllbGQgY2hhbmdlIGV2ZW50IGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSB1aTUgZXZlbnRcblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGhhbmRsZUZpZWxkQ2hhbmdlKGV2ZW50OiBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfCBGaWVsZCRDaGFuZ2VFdmVudCwgcGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWVsZFByb21pc2UgPSAoZXZlbnQgYXMgRmllbGQkQ2hhbmdlRXZlbnQpLmdldFBhcmFtZXRlcihcInByb21pc2VcIik7XG5cdFx0Y29uc3QgZmllbGQgPSAoZXZlbnQgYXMgRmllbGQkQ2hhbmdlRXZlbnQpLmdldFNvdXJjZSgpIGFzIEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkO1xuXHRcdGNvbnN0IHBhcmFtZXRlckluZm8gPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgPT09IGZpZWxkKTtcblx0XHRpZiAoIXBhcmFtZXRlckluZm8pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZSA9IGZpZWxkUHJvbWlzZTtcblx0XHQvLyBmaWVsZCB2YWx1ZSBpcyBiZWluZyBjaGFuZ2VkLCB0aHVzIGV4aXN0aW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhhdCBmaWVsZCBhcmUgbm90IHZhbGlkIGFueW1vcmVcblx0XHR0aGlzLnJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHBhcmFtZXRlcik7XG5cdFx0dHJ5IHtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWUgPSBhd2FpdCBmaWVsZFByb21pc2U7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMucGFyYW1ldGVyc1ZhbHVlc1twYXJhbWV0ZXJJbmZvLnBhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlckluZm8udmFsdWU7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gZmFsc2U7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGRlbGV0ZSBwYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdFx0cGFyYW1ldGVySW5mby5oYXNFcnJvciA9IHRydWU7XG5cdFx0XHRBY3Rpb25SdW50aW1lLl9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyKFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IHBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0bWVzc2FnZTogKGVycm9yIGFzIHsgbWVzc2FnZTogc3RyaW5nIH0pLm1lc3NhZ2Vcblx0XHRcdFx0fVxuXHRcdFx0XSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIEZpbGVVcGxvYWRlciBjaGFuZ2UgZXZlbnQgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIFNBUFVJNSBldmVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBGaWxlVXBsb2FkZXIgY2hhbmdlIGV2ZW50LlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBoYW5kbGVGaWxlVXBsb2FkZXJDaGFuZ2UoZXZlbnQ6IEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCwgcGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWxlcyA9IGV2ZW50LmdldFBhcmFtZXRlcihcImZpbGVzXCIpO1xuXHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdC8vIGNvcnJlY3Rpb24gbmVlZGVkIGZvciBtdWx0aXBsZSBmaWxlIHVwbG9hZGVyc1xuXHRcdGNvbnN0IHBhcmFtZXRlckluZm8gPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQgPT09IGZpbGVVcGxvYWRlcik7XG5cdFx0aWYgKCFwYXJhbWV0ZXJJbmZvIHx8ICFmaWxlcykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHBhcmFtZXRlcik7XG5cdFx0cGFyYW1ldGVySW5mby52YWx1ZSA9IHt9O1xuXHRcdGlmICh0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcikpIHtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWVbdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5uYW1lIGFzIGtleW9mIHR5cGVvZiBwYXJhbWV0ZXJJbmZvLnZhbHVlXSA9XG5cdFx0XHRcdGF3YWl0IHRoaXMuZ2V0QmFzZTY0RmlsZShmaWxlcyk7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlWyh0aGlzLmdldE1pbWVUeXBlUGF0aChwYXJhbWV0ZXIpIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxzdHJpbmc+KS5wYXRoXSA9XG5cdFx0XHRcdChmaWxlc1swXSBhcyBGaWxlKS50eXBlIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlW3RoaXMuZ2V0RmlsZU5hbWVQYXRoKHBhcmFtZXRlcikgYXMgc3RyaW5nXSA9IChmaWxlc1swXSBhcyBGaWxlKS5uYW1lO1xuXHRcdFx0cGFyYW1ldGVySW5mby5oYXNFcnJvciA9IGZhbHNlO1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXNbcGFyYW1ldGVySW5mby5wYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgcHJvcGVydHkgbmFtZSBmb3IgdGhlIGZpbGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIFN0cmVhbSBwcm9wZXJ0eSBpbiB0aGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHJldHVybnMgUGF0aCBhcyBhIHN0cmluZy5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmlsZU5hbWVQYXRoKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uQ29udGVudERpc3Bvc2l0aW9uPy5GaWxlbmFtZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPikucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgcHJvcGVydHkgbmFtZSBmb3IgdGhlIE1pbWUgdHlwZSB3aXRoIHRoZSBhc3NvY2lhdGVkIFN0cmVhbSBwcm9wZXJ0eSBpbiB0aGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHJldHVybnMgVGhlIHBhdGggZXhwcmVzc2lvbi5cblx0ICovXG5cdHByaXZhdGUgZ2V0TWltZVR5cGVQYXRoKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5hbm5vdGF0aW9ucy5Db3JlPy5NZWRpYVR5cGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBTdHJlYW0gcHJvcGVydHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBDb21wbGV4IHR5cGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHJldHVybnMgVGhlIEVkbS5TdHJlYW0gcHJvcGVydHkuXG5cdCAqL1xuXHRwcml2YXRlIGdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiAocGFyYW1ldGVyLnR5cGVSZWZlcmVuY2UgYXMgQ29tcGxleFR5cGUpLnByb3BlcnRpZXM/LmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS50eXBlID09PSBcIkVkbS5TdHJlYW1cIik7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG5cdCAqIEBwYXJhbSBmaWxlcyBUaGUgZmlsZSBzZWxlY3RlZC5cblx0ICogQHJldHVybnMgVGhlIGZpbGUgY29udGVudC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0QmFzZTY0RmlsZShmaWxlczogb2JqZWN0W10pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0Y29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblx0XHRcdHJlYWRlci5vbmxvYWQgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICghcmVhZGVyLnJlc3VsdCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXNvbHZlKChyZWFkZXIucmVzdWx0IGFzIHN0cmluZykuc3BsaXQoXCIsXCIpWzFdKTtcblx0XHRcdH07XG5cdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTCgoZmlsZXMgYXMgdW5rbm93biBhcyBGaWxlTGlzdCkuaXRlbSgwKSEpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIG1lc3NhZ2VzIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqL1xuXHRwcml2YXRlIHJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogdm9pZCB7XG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGNvbnRyb2xJZCA9IGdlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKTtcblx0XHQvLyBhbHNvIHJlbW92ZSBtZXNzYWdlcyBhc3NpZ25lZCB0byBpbm5lciBjb250cm9scywgYnV0IGF2b2lkIHJlbW92aW5nIG1lc3NhZ2VzIGZvciBkaWZmZXJlbnQgcGFyYW1ldGVycyAod2l0aCBuYW1lIGJlaW5nIHN1YnN0cmluZyBvZiBhbm90aGVyIHBhcmFtZXRlciBuYW1lKVxuXHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBtZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdG1zZy5nZXRDb250cm9sSWRzKCkuc29tZSgoaWQ6IHN0cmluZykgPT4gY29udHJvbElkLnNwbGl0KFwiLVwiKS5pbmNsdWRlcyhpZCkpXG5cdFx0KTtcblx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMocmVsZXZhbnRNZXNzYWdlcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgRm9ybUVsZW1lbnRzIGFsb25nIHdpdGggdGhlIGFycmF5IG9mIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgcGFyYW1ldGVyIGluZm9ybWF0aW9uIGFsb25nIHdpdGggdGhlIEZvcm1FbGVtZW50cy5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0Rm9ybUVsZW1lbnRzKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTxEaWFsb2dDb250ZW50VHlwZXM+IHtcblx0XHRjb25zdCBmb3JtRWxlbWVudHMgPSBhd2FpdCB0aGlzLmNyZWF0ZUZvcm1FbGVtZW50KHBhcmFtZXRlcik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGZvcm1FbGVtZW50czogZm9ybUVsZW1lbnRzLFxuXHRcdFx0cGFyYW1ldGVyOiBwYXJhbWV0ZXJcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgZGlhbG9nIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldERpYWxvZygpOiBEaWFsb2cgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmRpYWxvZztcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIGRpYWxvZy5cblx0ICovXG5cdGFzeW5jIGNyZWF0ZURpYWxvZygpOiBQcm9taXNlPERpYWxvZz4ge1xuXHRcdGxldCBkaWFsb2dDb250ZW50czogRm9ybUVsZW1lbnRUeXBlW10gPSBbXTtcblx0XHRsZXQgZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVyczogRGlhbG9nQ29udGVudFR5cGVzW10gPSBbXTtcblx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJzID0gdGhpcy5hY3Rpb24uaXNCb3VuZCA/IHRoaXMuYWN0aW9uLnBhcmFtZXRlcnMuc2xpY2UoMSkgOiB0aGlzLmFjdGlvbi5wYXJhbWV0ZXJzO1xuXG5cdFx0Ly8gSWYgT3BlcmF0aW9uYWxQYXJhbWV0ZXJGYWNldHMgaGF2ZSBiZWVuIGRlZmluZWQgZm9yIHRoaXMgYWN0aW9uLCB0aGV5IGFyZSB1c2VkIHRvIGdyb3VwIHRoZSBhY3Rpb24gcGFyYW1ldGVyc1xuXHRcdC8vIHdpdGggdGl0bGVzXG5cdFx0aWYgKHRoaXMuYWN0aW9uLmFubm90YXRpb25zPy5VST8uT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzKSB7XG5cdFx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJHcm91cHM6IEVsZW1lbnRHcm91cFtdID0gW107XG5cdFx0XHR0aGlzLmFjdGlvbi5hbm5vdGF0aW9ucy5VST8uT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzPy5mb3JFYWNoKGZ1bmN0aW9uIChmYWNldDogUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0bGV0IGZhY2V0VGl0bGU7XG5cdFx0XHRcdGlmIChmYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdFx0XHRmYWNldFRpdGxlID0gZmFjZXQuTGFiZWw7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGhhc0ZpZWxkR3JvdXBUYXJnZXQoZmFjZXQpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmllbGRHcm91cCA9IGZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cFR5cGU7XG5cdFx0XHRcdFx0Y29uc3QgZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcltdID0gW107XG5cblx0XHRcdFx0XHRmaWVsZEdyb3VwLkRhdGEuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXA6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdGdyb3VwZWRBY3Rpb25QYXJhbWV0ZXJzLnB1c2goKGdyb3VwIGFzIERhdGFGaWVsZCkuVmFsdWUuJHRhcmdldCBhcyBBY3Rpb25QYXJhbWV0ZXIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckdyb3Vwcy5wdXNoKHtcblx0XHRcdFx0XHRcdGZhY2V0VGl0bGU6IGZhY2V0VGl0bGUgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdGRhdGE6IGdyb3VwZWRBY3Rpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBHZXQgdGhlIGZpZWxkcyBmb3IgZWFjaCBwYXJhbWV0ZXIgZ3JvdXBcblx0XHRcdGNvbnN0IGdldEdyb3VwRm9ybSA9IGFzeW5jIChncm91cDogRWxlbWVudEdyb3VwKTogUHJvbWlzZTxFbGVtZW50R3JvdXBDb252ZXJ0ZWQ+ID0+IHtcblx0XHRcdFx0Y29uc3QgZm9ybUVsZW1lbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoZ3JvdXAuZGF0YS5tYXAodGhpcy5nZXRGb3JtRWxlbWVudHMuYmluZCh0aGlzKSkpO1xuXHRcdFx0XHRyZXR1cm4geyBmYWNldFRpdGxlOiBncm91cC5mYWNldFRpdGxlLCBkYXRhOiBmb3JtRWxlbWVudHMgfTtcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGZvcm1EYXRhID0gYWN0aW9uUGFyYW1ldGVyR3JvdXBzLm1hcChhc3luYyAocGFyYW1ldGVyR3JvdXApID0+IGdldEdyb3VwRm9ybShwYXJhbWV0ZXJHcm91cCkpO1xuXHRcdFx0Y29uc3Qgb3BGYWNldHMgPSBhd2FpdCBQcm9taXNlLmFsbChmb3JtRGF0YSk7XG5cblx0XHRcdC8vIEFkZCB0aGUgdGl0bGUgY29udHJvbCB0byBlYWNoIHBhcmFtZXRlciBncm91cFxuXHRcdFx0b3BGYWNldHMuZm9yRWFjaCgoZGlhbG9nQ29udGVudCkgPT4ge1xuXHRcdFx0XHRkaWFsb2dDb250ZW50cy5wdXNoKDxUaXRsZSB0ZXh0PXtkaWFsb2dDb250ZW50LmZhY2V0VGl0bGV9IC8+KTtcblx0XHRcdFx0cmV0dXJuIGRpYWxvZ0NvbnRlbnQuZGF0YS5tYXAoKGVsZW1lbnQpID0+IGRpYWxvZ0NvbnRlbnRzLnB1c2goZWxlbWVudC5mb3JtRWxlbWVudHMpKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvcEZhY2V0cy5mb3JFYWNoKGZ1bmN0aW9uIChvcEZhY2V0KSB7XG5cdFx0XHRcdG9wRmFjZXQuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0ZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycy5wdXNoKGVsZW1lbnQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBObyBPcGVyYXRpb25QYXJhbWV0ZXJGYWNldHMgaGF2ZSBiZWVuIGRlZmluZWRcblx0XHRcdGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMgPSBhd2FpdCBQcm9taXNlLmFsbChhY3Rpb25QYXJhbWV0ZXJzLm1hcCh0aGlzLmdldEZvcm1FbGVtZW50cy5iaW5kKHRoaXMpKSk7XG5cdFx0XHRkaWFsb2dDb250ZW50cyA9IGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMubWFwKChkaWFsb2dDb250ZW50KSA9PiB7XG5cdFx0XHRcdHJldHVybiBkaWFsb2dDb250ZW50LmZvcm1FbGVtZW50cztcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRoaXMucmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvKGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMpO1xuXG5cdFx0Ly8gSW4gY2FzZSBvZiBkZWZlcnJlZCBjcmVhdGUgd2UgaGF2ZSBubyB2aWV3LCBzbyB3ZSBuZWVkIHRvIGdldCB0aGUgcmVzb3VyY2UgbW9kZWwgZnJvbSB0aGUgYXBwIGNvbXBvbmVudFxuXG5cdFx0Y29uc3QgbWVzc2FnZVN0cmlwID0gdGhpcy5nZXRDdXN0b21BY3Rpb25NZXNzYWdlU3RyaXBUZXh0KCk7XG5cblx0XHRjb25zdCBlbmRCdXR0b24gPSAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgdGhpcy5hY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIkNhbmNlbFwiXSl9XG5cdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQ0FOQ0VMXCIpfVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMub25DYW5jZWwuYmluZCh0aGlzKSgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGNvbnN0IGRpYWxvZyA9IChcblx0XHRcdDxEaWFsb2dcblx0XHRcdFx0dGl0bGU9e3RoaXMuZ2V0VGl0bGVUZXh0KHRoaXMucGFyYW1ldGVycy5sYWJlbCl9XG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgdGhpcy5hY3Rpb25OYW1lXSl9XG5cdFx0XHRcdGVzY2FwZUhhbmRsZXI9e3RoaXMub25DYW5jZWwuYmluZCh0aGlzKX1cblx0XHRcdFx0ZHJhZ2dhYmxlPXt0cnVlfVxuXHRcdFx0XHRyZXNpemFibGU9e3RydWV9XG5cdFx0XHRcdGFmdGVyQ2xvc2U9e3RoaXMuYWZ0ZXJDbG9zZS5iaW5kKHRoaXMpfVxuXHRcdFx0XHRiZWZvcmVPcGVuPXt0aGlzLmJlZm9yZU9wZW4uYmluZCh0aGlzKX1cblx0XHRcdFx0YWZ0ZXJPcGVuPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hZnRlck9wZW4oKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0aW5pdGlhbEZvY3VzPXtlbmRCdXR0b259IC8vIFRoZSBpbml0aWFsIGZvY3VzIGlzIHNldCBwcm9ncmFtbWF0aWNhbGx5IGluIGFmdGVyT3BlbiwgdG8gYXZvaWQgb3BlbmluZyB0aGUgVkggZGlhbG9nXG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YmVnaW5CdXR0b246IChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCB0aGlzLmFjdGlvbk5hbWUsIFwiQWN0aW9uXCIsIFwiT2tcIl0pfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuaXNDcmVhdGVBY3Rpb24gPT09IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9TQVBGRV9BQ1RJT05fQ1JFQVRFX0JVVFRPTl9DT05USU5VRVwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmdldEJlZ2luQnV0dG9uTGFiZWwodGhpcy5wYXJhbWV0ZXJzLmxhYmVsKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkFwcGx5LmJpbmQodGhpcykoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0dHlwZT1cIkVtcGhhc2l6ZWRcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGVuZEJ1dHRvbjogZW5kQnV0dG9uLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmUgKHVua25vd24gcHJvcGVydHkgYmluZGluZylcblx0XHRcdFx0XHRcdC8vIGNvbHVtbnNNIG9ubHkgdGFrZXMgZWZmZWN0IGlmIHRoZXJlIGFyZSB0aXRsZXMgaW4gdGhlIGNvbnRlbnQuXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHR7bWVzc2FnZVN0cmlwICYmIDxNZXNzYWdlU3RyaXAgc2hvd0ljb249XCJ0cnVlXCIgdGV4dD17bWVzc2FnZVN0cmlwfT48L01lc3NhZ2VTdHJpcD59XG5cdFx0XHRcdFx0XHRcdDxTaW1wbGVGb3JtIGNvbHVtbnNNPXtcIjJcIn0gZWRpdGFibGU9XCJ0cnVlXCIgbGFiZWxTcGFuTD17XCIxMlwifSBsYWJlbFNwYW5NPXtcIjEyXCJ9IGJpbmRpbmc9e1wiJFBhcmFtZXRlclwifT5cblx0XHRcdFx0XHRcdFx0XHR7eyBjb250ZW50OiBkaWFsb2dDb250ZW50cyB9fVxuXHRcdFx0XHRcdFx0XHQ8L1NpbXBsZUZvcm0+XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpO1xuXHRcdHRoaXMuZGlhbG9nID0gZGlhbG9nO1xuXHRcdHJldHVybiBkaWFsb2c7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGFiZWwgZm9yIHRoZSBiZWdpbiBidXR0b24gb2YgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIGFjdGlvbkxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBsYWJlbC5cblx0ICovXG5cdHByaXZhdGUgZ2V0QmVnaW5CdXR0b25MYWJlbChhY3Rpb25MYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0XHRjb25zdCBrZXkgPSBcIkFDVElPTl9QQVJBTUVURVJfRElBTE9HX0FDVElPTl9OQU1FXCI7XG5cdFx0Y29uc3QgZGVmYXVsdEtleSA9IFwiQ19DT01NT05fRElBTE9HX09LXCI7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3ZlcnJpZGRlblRleHQoa2V5LCBkZWZhdWx0S2V5LCBhY3Rpb25MYWJlbCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIGFjdGlvbkxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZS5cblx0ICovXG5cdHByaXZhdGUgZ2V0VGl0bGVUZXh0KGFjdGlvbkxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGtleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQUNUSU9OX1RJVExFXCI7XG5cdFx0Y29uc3QgZGVmYXVsdEtleSA9IFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX1RJVExFXCI7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3ZlcnJpZGRlblRleHQoa2V5LCBkZWZhdWx0S2V5LCBhY3Rpb25MYWJlbCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhbiBvdmVycmlkZGVuIHRleHQgZm9yIG1lc3NhZ2Ugc3RyaXAuXG5cdCAqIEByZXR1cm5zIFRoZSBvdmVycmlkZGVuIHRleHQgZm9yIG1lc3NhZ2Ugc3RyaXAuXG5cdCAqL1xuXHRwcml2YXRlIGdldEN1c3RvbUFjdGlvbk1lc3NhZ2VTdHJpcFRleHQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBrZXkgPSBcIkFDVElPTl9QQVJBTUVURVJfRElBTE9HX01FU1NBR0VfVEVYVFwiO1xuXHRcdGxldCBib3VuZEFjdGlvbk5hbWUgPSB0aGlzLmFjdGlvbk5hbWU7XG5cdFx0Ym91bmRBY3Rpb25OYW1lID0gYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKS5wb3AoKSA/PyBib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgdGhpcy5lbnRpdHlTZXROYW1lID8gYCR7dGhpcy5lbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0XHRpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9fCR7c3VmZml4UmVzb3VyY2VLZXl9YCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9fCR7dGhpcy5lbnRpdHlTZXROYW1lfWApKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5LCB1bmRlZmluZWQsIGAke3RoaXMuZW50aXR5U2V0TmFtZX1gKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fWApKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGFuIG92ZXJyaWRkZW4gdGV4dC5cblx0ICogQHBhcmFtIGtleSBUaGUga2V5IGZvciBhbiBvdmVycmlkZGVuIHRleHRcblx0ICogQHBhcmFtIGRlZmF1bHRLZXkgVGhlIGRlZmF1bHQga2V5IGZvciB0aGUgdGV4dFxuXHQgKiBAcGFyYW0gYWN0aW9uTGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIG92ZXJyaWRkZW4gdGV4dCBvciBsYWJlbC5cblx0ICovXG5cdHByaXZhdGUgZ2V0T3ZlcnJpZGRlblRleHQoa2V5OiBzdHJpbmcsIGRlZmF1bHRLZXk6IHN0cmluZywgYWN0aW9uTGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCBib3VuZEFjdGlvbk5hbWUgPSB0aGlzLmFjdGlvbk5hbWU7XG5cdFx0Ym91bmRBY3Rpb25OYW1lID0gYm91bmRBY3Rpb25OYW1lLnNwbGl0KFwiLlwiKS5wb3AoKSA/PyBib3VuZEFjdGlvbk5hbWU7XG5cdFx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBib3VuZEFjdGlvbk5hbWUgJiYgdGhpcy5lbnRpdHlTZXROYW1lID8gYCR7dGhpcy5lbnRpdHlTZXROYW1lfXwke2JvdW5kQWN0aW9uTmFtZX1gIDogXCJcIjtcblx0XHRpZiAoYWN0aW9uTGFiZWwpIHtcblx0XHRcdGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHtzdWZmaXhSZXNvdXJjZUtleX1gKSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5LCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9fCR7dGhpcy5lbnRpdHlTZXROYW1lfWApKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgYCR7dGhpcy5lbnRpdHlTZXROYW1lfWApO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX1gKSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBhY3Rpb25MYWJlbDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGRlZmF1bHRLZXkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBwcmVzcyBldmVudCBvZiB0aGUgYmVnaW4gYnV0dG9uIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBvbkFwcGx5KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIHByZXZlbnQgbXVsdGlwbGUgcHJlc3MgZXZlbnRzLiBUaGUgQnVzeUxvY2tlciBpcyBub3QgZmFzdCBlbm91Z2guIChCQ1A6IDIzNzAxMzAyMTApXG5cdFx0aWYgKHRoaXMuYnV0dG9uTG9jayB8fCAhdGhpcy5kaWFsb2cpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2c7XG5cblx0XHRjb25zdCBwYXJhbWV0ZXJDb250ZXh0ID0gKGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZyB8IHVuZGVmaW5lZCk/LmdldFBhcmFtZXRlckNvbnRleHQoKTtcblxuXHRcdC8vIGxvY2sgdGhlIGJ1dHRvbiB0byBwcmV2ZW50IG11bHRpcGxlIHByZXNzIGV2ZW50c1xuXHRcdHRoaXMuYnV0dG9uTG9jayA9IHRydWU7XG5cdFx0QnVzeUxvY2tlci5sb2NrKGRpYWxvZyk7XG5cblx0XHQvLyB2YWxpZGF0ZSB0aGUgYWN0aW9uIHBhcmFtZXRlcnMuIEl0IGlzIGltcG9ydGFudCB0byBkbyB0aGlzIGFzIGEgZmlyc3Qgb3BlcmF0aW9uIGFzIHRoZXJlIGlzIGFcblx0XHQvLyB3YWl0IGRvbmUgZm9yIHRoZSB2YWx1ZSBjaGFuZ2VzIHRvIGNvbXBsZXRlIHVwZGF0aW5nIHRoZSBtb2RlbC4gRXZlbiBpbiBjYXNlcyB3aGVyZSB2YWxpZGF0aW9uIGlzXG5cdFx0Ly8gbm90IGNvbmZpZ3VyZWQgdGhpcyBwcm9taXNlIG5lZWRzIHRvIGJlIHJlc29sdmVkIHRvIHJlYWQgZnJvbSB0aGUgbW9kZWwgdG8gcmV0dXJuIHVzZXIgZW50ZXJlZCB2YWx1ZXMuXG5cdFx0aWYgKCEoYXdhaXQgQWN0aW9uUnVudGltZS52YWxpZGF0ZVByb3BlcnRpZXModGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcywgdGhpcy5yZXNvdXJjZU1vZGVsKSkpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKGRpYWxvZyk7XG5cdFx0XHR0aGlzLmJ1dHRvbkxvY2sgPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBuZXdWYWx1ZXNEaWN0aW9uYXJ5ID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0Li4udGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm9zKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IGFjdGlvblBhcmFtZXRlckluZm9zLnBhcmFtZXRlcjtcblx0XHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0XHRpZiAocGFyYW1ldGVyLmlzQ29sbGVjdGlvbikge1xuXHRcdFx0XHRcdHZhbHVlID0gT2JqZWN0LnZhbHVlcygoZGlhbG9nLmdldE1vZGVsKFwibXZmdmlld1wiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KGAvJHtwYXJhbWV0ZXIubmFtZX1gKSA/PyB7fSkubWFwKFxuXHRcdFx0XHRcdFx0KHBhcmFtVmFsdWUpID0+IChwYXJhbVZhbHVlIGFzIHsgS2V5PzogUHJpbWl0aXZlVHlwZSB9KT8uS2V5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIGlmICghcGFyYW1ldGVyLnR5cGUuc3RhcnRzV2l0aChcIkVkbS5cIikgJiYgdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpKSB7XG5cdFx0XHRcdFx0Ly8gRmlsZSBVcGxvYWRlclxuXHRcdFx0XHRcdHZhbHVlID0gYWN0aW9uUGFyYW1ldGVySW5mb3MudmFsdWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBwYXJhbWV0ZXJDb250ZXh0Py5nZXRQcm9wZXJ0eShwYXJhbWV0ZXIubmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHsgW3BhcmFtZXRlci5uYW1lXTogdmFsdWUgfTtcblx0XHRcdH0pXG5cdFx0KSBhcyBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPjtcblx0XHRjb25zdCBpc05ld1ZhbHVlID0gT2JqZWN0LnZhbHVlcyhuZXdWYWx1ZXNEaWN0aW9uYXJ5KS5zb21lKCh2YWx1ZSkgPT4gISF2YWx1ZSk7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlKG5ld1ZhbHVlc0RpY3Rpb25hcnkpO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudC5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFVpTW9kZWxDb25zdGFudHMuRG9jdW1lbnRNb2RpZmllZCwgaXNOZXdWYWx1ZSk7XG5cdFx0Ly8gRHVlIHRvIHVzaW5nIHRoZSBzZWFyY2ggYW5kIHZhbHVlIGhlbHBzIG9uIHRoZSBhY3Rpb24gZGlhbG9nIHRyYW5zaWVudCBtZXNzYWdlcyBjb3VsZCBhcHBlYXJcblx0XHQvLyB3ZSBuZWVkIGFuIFVYIGRlc2lnbiBmb3IgdGhvc2UgdG8gc2hvdyB0aGVtIHRvIHRoZSB1c2VyIC0gZm9yIG5vdyByZW1vdmUgdGhlbSBiZWZvcmUgY29udGludWluZ1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXQgdGhlIHN0YXRlIG9mIHRoZSBkaWFsb2cgdG8gc3RhcnQgYSBuZXcgaXRlcmF0aW9uLlxuXHQgKlxuXHQgKi9cblx0cHVibGljIHJlc2V0U3RhdGUoKTogdm9pZCB7XG5cdFx0dGhpcy51bmxvY2tEaWFsb2coKTtcblx0XHR0aGlzLmJ1dHRvbkxvY2sgPSBmYWxzZTtcblx0XHR0aGlzLnVwZGF0ZURpYWxvZ0JpbmRpbmdDb250ZXh0Rm9yRXJyb3IoKTtcblx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIGRpYWxvZyB0byBvbmUgd2l0aCBwcmlvcml0eSBtZXNzYWdlLlxuXHQgKlxuXHQgKiBPbiBpbml0aWFsIGFjdGlvbiBleGVjdXRpb24sIHdlIG1pZ2h0IGhhdmUgYm91bmQgbWVzc2FnZXMgd2l0aCBhbnkgc2VsZWN0ZWQgY29udGV4dHMgYXMgdGFyZ2V0IGFwYXJ0IGZyb20gdGhlIGRpYWxvZydzIGluaXRpYWwgY29udGV4dC5cblx0ICogV2UgY2hhbmdlIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgZGlhbG9nIGZvciB0aGUgcGFyYW1ldGVyIGZpZWxkcycgdG8gZ2V0IHRoZSB2YWxpZCB2YWx1ZSBzdGF0ZSBmcm9tIHRoZSBwcmlvcml0eSBib3VuZCBtZXNzYWdlLlxuXHQgKi9cblx0dXBkYXRlRGlhbG9nQmluZGluZ0NvbnRleHRGb3JFcnJvcigpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA8IDIpIHtcblx0XHRcdC8vIFdlIHdvdWxkIG5lZWQgdG8gc3dpdGNoIHRoZSBiaW5kaW5nIGNvbnRleHQgb2YgdGhlIGRpYWxvZyBvbmx5IHdoZW4gd2UgaGF2ZSBtdWx0aXBsZSBjb250ZXh0cyBmb3IgZXhlY3V0aW5nIHRoZSBhY3Rpb24uXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHdhcm5pbmdDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCwgaW5mb0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGVycm9uZW91c0N0eCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRjb25zdCBtZXNzYWdlcyA9IGNvbnRleHQuZ2V0TWVzc2FnZXMoKTtcblx0XHRcdHJldHVybiBtZXNzYWdlcy5zb21lKChtc2cpID0+IHtcblx0XHRcdFx0Ly8gV2UgaG9sZCBmaXJzdCBjb250ZXh0IHdpdGggd2FybmluZyBvciBpbmZvIG1lc3NhZ2VzLlxuXHRcdFx0XHR3YXJuaW5nQ29udGV4dCA9ICF3YXJuaW5nQ29udGV4dCAmJiBtc2cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5XYXJuaW5nID8gY29udGV4dCA6IHVuZGVmaW5lZDtcblx0XHRcdFx0aW5mb0NvbnRleHQgPSAhaW5mb0NvbnRleHQgJiYgbXNnLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb24gPyBjb250ZXh0IDogdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBFcnJvciBpcyBmb3VuZCEhISBXZSBzaGFsbCBleGl0LlxuXHRcdFx0XHRyZXR1cm4gbXNnLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRjb25zdCBjb250ZXh0VG9Vc2UgPSBlcnJvbmVvdXNDdHggPz8gd2FybmluZ0NvbnRleHQgPz8gaW5mb0NvbnRleHQ7XG5cblx0XHRpZiAoY29udGV4dFRvVXNlKSB7XG5cdFx0XHR0aGlzLmRpYWxvZz8uc2V0QmluZGluZ0NvbnRleHQoY29udGV4dFRvVXNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgYnVzeSBzdGF0ZSBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHJpdmF0ZSB1bmxvY2tEaWFsb2coKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGlhbG9nICYmIEJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcy5kaWFsb2cpKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzLmRpYWxvZyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIHRoZSBjYW5jZWwgYWN0aW9uIG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIG9uQ2FuY2VsKCk6IHZvaWQge1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdChGRUxpYnJhcnkuQ29uc3RhbnRzLkNhbmNlbEFjdGlvbkRpYWxvZyk7XG5cdFx0dGhpcy5jbG9zZURpYWxvZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsb3NlcyB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHVibGljIGNsb3NlRGlhbG9nKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmRpYWxvZykge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25QYXJhbWV0ZXJEaWFsb2dDbG9zZWQ/LigpO1xuXHRcdFx0dGhpcy5kaWFsb2cuY2xvc2UoKTtcblx0XHR9XG5cdFx0dGhpcy5pc0RpYWxvZ09wZW4gPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgYWN0aW9uIHJlc3VsdC5cblx0ICovXG5cdGFzeW5jIG9wZW5EaWFsb2coKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmRpYWxvZykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRXJyb3Igb24gb3BlbmluZyB0aGUgZGlhbG9nXCIpO1xuXHRcdH1cblx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMoXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0dGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKSxcblx0XHRcdHRoaXMucGFyYW1ldGVyTW9kZWwsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHR0aGlzLnNldE1vZGVscyh0aGlzLmRpYWxvZyk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLnZpZXc/LmFkZERlcGVuZGVudCh0aGlzLmRpYWxvZyk7XG5cdFx0YXdhaXQgdGhpcy5zZXRPcGVyYXRpb25EZWZhdWx0VmFsdWVzKHRoaXMuZGlhbG9nKTtcblx0XHR0aGlzLmRpYWxvZy5vcGVuKCk7XG5cdFx0dGhpcy5pc0RpYWxvZ09wZW4gPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1vZGVsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIG93bmVyIG9mIHRoZSBkaWFsb2dcblx0ICovXG5cdHByaXZhdGUgc2V0TW9kZWxzKGRpYWxvZzogRGlhbG9nKTogdm9pZCB7XG5cdFx0ZGlhbG9nLnNldE1vZGVsKHRoaXMucGFyYW1ldGVyTW9kZWwsIFwicGFyYW1zTW9kZWxcIik7XG5cdFx0ZGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0bW9kZWw6IFwicGFyYW1zTW9kZWxcIlxuXHRcdH0pO1xuXHRcdGRpYWxvZy5zZXRNb2RlbCh0aGlzLnBhcmFtZXRlcnMubW9kZWwpO1xuXHRcdGRpYWxvZy5iaW5kRWxlbWVudCh7XG5cdFx0XHRwYXRoOiBgJHt0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID8gXCJcIiA6IFwiL1wifSR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdGRpYWxvZy5zZXRCaW5kaW5nQ29udGV4dCh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0pOyAvLyB1c2UgY29udGV4dCBvZiBmaXJzdCBzZWxlY3RlZCBsaW5lIGl0ZW1cblx0XHR9XG5cdFx0Ly8gZW1wdHkgbW9kZWwgdG8gYWRkIGVsZW1lbnRzIGR5bmFtaWNhbGx5IGRlcGVuZGluZyBvbiBudW1iZXIgb2YgTVZGIGZpZWxkcyBkZWZpbmVkIG9uIHRoZSBkaWFsb2dcblx0XHRkaWFsb2cuc2V0TW9kZWwobmV3IEpTT05Nb2RlbCh7fSksIFwibXZmdmlld1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyBiZWZvcmUgb3BlbmluZyB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gX2V2ZW50XG5cdCAqL1xuXHRwcml2YXRlIGJlZm9yZU9wZW4oX2V2ZW50OiBEaWFsb2ckQmVmb3JlT3BlbkV2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXYWl0IGZvciB0aGUgcGFyYW1ldGVyIHZhbHVlcyB0byBiZSBzZXQuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgY29udGFpbmluZyB0aGUgcGFyYW1ldGVyIHZhbHVlcy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyB3YWl0Rm9yUGFyYW1ldGVyc1ZhbHVlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+PiB7XG5cdFx0cmV0dXJuIHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiB0aGUgZGlhbG9nIGlzIG9wZW5lZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGlhbG9nIGlzIG9wZW5lZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzT3BlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pc0RpYWxvZ09wZW47XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIGJpbmRpbmdQYXJhbWV0ZXIgVGhlIGJpbmRpbmcgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIGRpYWxvZ1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShcblx0XHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcixcblx0XHRiaW5kaW5nUGFyYW1ldGVyOiBzdHJpbmcsXG5cdFx0ZGlhbG9nOiBEaWFsb2dcblx0KTogUHJvbWlzZTxQYXJhbWV0ZXJEZWZhdWx0VmFsdWU+IHtcblx0XHRjb25zdCBvcGVyYXRpb25CaW5kaW5nID0gZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXHRcdGNvbnN0IHBhcmFtZXRlck1vZGVsRGF0YSA9IHRoaXMucGFyYW1ldGVyTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IHBhcmFtTmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uUGFyYW1ldGVyRGVmYXVsdFZhbHVlO1xuXHRcdC8vIENhc2UgMTogVGhlcmUgaXMgYSBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvblxuXHRcdGlmIChkZWZhdWx0VmFsdWUpIHtcblx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMCAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkZWZhdWx0VmFsdWUpKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aEZvckNvbnRleHQ6IHN0cmluZyA9XG5cdFx0XHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyICYmIGRlZmF1bHRWYWx1ZS5wYXRoLnN0YXJ0c1dpdGgoYCR7YmluZGluZ1BhcmFtZXRlcn0vYClcblx0XHRcdFx0XHRcdFx0PyBkZWZhdWx0VmFsdWUucGF0aC5yZXBsYWNlKGAke2JpbmRpbmdQYXJhbWV0ZXJ9L2AsIFwiXCIpXG5cdFx0XHRcdFx0XHRcdDogZGVmYXVsdFZhbHVlLnBhdGg7XG5cdFx0XHRcdFx0bGV0IHBhcmFtVmFsdWUgPSBhd2FpdCBDb21tb25VdGlscy5yZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoZGVmYXVsdFZhbHVlLnBhdGgsIG9wZXJhdGlvbkJpbmRpbmcuZ2V0TW9kZWwoKSk7XG5cdFx0XHRcdFx0aWYgKHBhcmFtVmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdHBhcmFtVmFsdWUgPSBhd2FpdCBvcGVyYXRpb25CaW5kaW5nLmdldFBhcmFtZXRlckNvbnRleHQoKS5yZXF1ZXN0UHJvcGVydHkoZGVmYXVsdFZhbHVlLnBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdC8vIEZvciBtdWx0aSBzZWxlY3QsIG5lZWQgdG8gbG9vcCBvdmVyIGNvbnRleHRzIChhcyBjb250ZXh0cyBjYW5ub3QgYmUgcmV0cmlldmVkIHZpYSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgb3BlcmF0aW9uIGJpbmRpbmcpXG5cblx0XHRcdFx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4gY29udGV4dC5nZXRQcm9wZXJ0eShwYXRoRm9yQ29udGV4dCkgIT09IHBhcmFtVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZXMgZnJvbSB0aGUgY29udGV4dHMgYXJlIG5vdCBhbGwgdGhlIHNhbWUsIGRvIG5vdCBwcmVmaWxsXG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0bm9Qb3NzaWJsZVZhbHVlOiB0cnVlXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZSwgdmFsdWU6IHBhcmFtVmFsdWUgfTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWFkaW5nIGRlZmF1bHQgYWN0aW9uIHBhcmFtZXRlclwiLCBwYXJhbU5hbWUsIHRoaXMuYWN0aW9uLm5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRwYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0bGF0ZVByb3BlcnR5RXJyb3I6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDYXNlIDEuMjogUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGRlZmluZXMgYSBmaXhlZCBzdHJpbmcgdmFsdWUgKGkuZS4gdlBhcmFtRGVmYXVsdFZhbHVlID0gJ3NvbWVTdHJpbmcnKVxuXHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBkZWZhdWx0VmFsdWUudmFsdWVPZigpIH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IHBhcmFtTmFtZSwgdmFsdWU6IHBhcmFtZXRlck1vZGVsRGF0YVtwYXJhbU5hbWVdIH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbWFuaWZlc3QgdmFsdWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgbWFuaWZlc3QgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRNYW5pZmVzdEZ1bmN0aW9uVmFsdWVzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuZGlhbG9nPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmICghdGhpcy5wYXJhbWV0ZXJzLnZpZXcgfHwgIXRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24gfHwgIWJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEZQTUhlbHBlci5sb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0LnN1YnN0cmluZygwLCB0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMSlcblx0XHRcdFx0LnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpLFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5zdWJzdHJpbmcoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpICsgMSxcblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sZW5ndGhcblx0XHRcdCksXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMudmlldyxcblx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzXG5cdFx0KSBhcyBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVkZWZpbmVkIHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyIFRoZSBiaW5kaW5nIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UgY29udGFpbmluZyBhbGwgcHJlZGVmaW5lZCB2YWx1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFByZURlZmluZWRWYWx1ZXMoXG5cdFx0YmluZGluZ1BhcmFtZXRlcjogc3RyaW5nLFxuXHRcdGRpYWxvZzogRGlhbG9nXG5cdCk6IFByb21pc2U8e1xuXHRcdGNvbnRleHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGRlZmF1bHRWYWx1ZXM6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZVtdO1xuXHRcdGZ1bmN0aW9uVmFsdWVzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHR9PiB7XG5cdFx0Y29uc3QgYm91bmRGdW5jdGlvbk5hbWUgPSB0aGlzLmFjdGlvbi5hbm5vdGF0aW9ucy5Db21tb24/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbj8udmFsdWVPZigpO1xuXHRcdGxldCByZXF1ZXN0Q29udGV4dE9iamVjdDogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSBQcm9taXNlLnJlc29sdmUoe30pO1xuXHRcdGxldCBmdW5jdGlvblBhcmFtczogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD5bXSA9IFtdO1xuXHRcdGlmICh0aGlzLmFjdGlvbi5pc0JvdW5kKSB7XG5cdFx0XHRpZiAodHlwZW9mIGJvdW5kRnVuY3Rpb25OYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldE1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IGJvdW5kRnVuY3Rpb24gPSBPcGVyYXRpb24uZ2V0T3BlcmF0aW9uRnJvbU5hbWUoYm91bmRGdW5jdGlvbk5hbWUsIG1vZGVsLCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0pO1xuXHRcdFx0XHRpZiAoYm91bmRGdW5jdGlvbikge1xuXHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLm1hcChhc3luYyAoY29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgbmV3IE9EYXRhT3BlcmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRib3VuZEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdG1vZGVsOiBtb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogW2NvbnRleHRdXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRlbmhhbmNlJHNlbGVjdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXBJZDogXCJmdW5jdGlvbkdyb3VwXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KS5leGVjdXRlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0LmZpbHRlcihpc0Z1bGZpbGxlZClbMF0/LnZhbHVlLmJvdW5kQ29udGV4dDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJlcXVlc3RDb250ZXh0T2JqZWN0ID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY29udGV4dFZhbHVlcyA9IGF3YWl0IHJlcXVlc3RDb250ZXh0T2JqZWN0O1xuXG5cdFx0XHRjb25zdCBwcm9taXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0UHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0dGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoYXN5bmMgKGFjdGlvblBhcmFtZXRlckluZm8pID0+XG5cdFx0XHRcdFx0XHR0aGlzLmdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlciwgYmluZGluZ1BhcmFtZXRlciwgZGlhbG9nKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSxcblx0XHRcdFx0UHJvbWlzZS5hbGwoZnVuY3Rpb25QYXJhbXMpLFxuXHRcdFx0XHR0aGlzLmdldE1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMoKVxuXHRcdFx0XSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb250ZXh0VmFsdWVzLFxuXHRcdFx0XHRkZWZhdWx0VmFsdWVzOiBwcm9taXNlc1swXSxcblx0XHRcdFx0ZnVuY3Rpb25WYWx1ZXM6IHByb21pc2VzWzFdLFxuXHRcdFx0XHRtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzOiBwcm9taXNlc1syXVxuXHRcdFx0fTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHQvLyBSZW1vdmUgbWVzc2FnZXMgcmVsYXRpbmcgdG8gdGhlIGZ1bmN0aW9uIGZvciBkZWZhdWx0IHZhbHVlcyBhcyB0aGV5IGFyZW4ndCBoZWxwZnVsIGZvciBhIHVzZXJcblx0XHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb250ZXh0VmFsdWVzOiB7fSxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlczogW10sXG5cdFx0XHRcdGZ1bmN0aW9uVmFsdWVzOiBbXSxcblx0XHRcdFx0bWFuaWZlc3RGdW5jdGlvblZhbHVlczoge31cblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuZWQuIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBmaXJzdCBmaWVsZCB3aXRob3V0IG9wZW5pbmcgdGhlIFZIIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgYWZ0ZXJPcGVuKCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0VmlzaWJsZVBhcmFtZXRlciA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgocGFyYW1ldGVySW5mbykgPT4gcGFyYW1ldGVySW5mby5maWVsZC5nZXRWaXNpYmxlKCkpO1xuXHRcdGlmIChmaXJzdFZpc2libGVQYXJhbWV0ZXIpIHtcblx0XHRcdGNvbnN0IGZpcnN0RmllbGQgPSBmaXJzdFZpc2libGVQYXJhbWV0ZXI/LmZpZWxkO1xuXHRcdFx0Y29uc3QgZm9jdXNJbmZvID0gZmlyc3RGaWVsZD8uZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRcdGZpcnN0RmllbGQ/LmZvY3VzKGZvY3VzSW5mbyk7XG5cdFx0fVxuXHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uUGFyYW1ldGVyRGlhbG9nT3BlbmVkPy4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgaW5mby5cblx0ICogQHBhcmFtIGRpYWxvZ0NvbnRlbnRzIFRoZSBkaWFsb2cgY29udGVudHNcblx0ICovXG5cdHByaXZhdGUgcmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvKGRpYWxvZ0NvbnRlbnRzOiBEaWFsb2dDb250ZW50VHlwZXNbXSk6IHZvaWQge1xuXHRcdC8vUmVnaXN0ZXIgdGhlIGZpZWxkXG5cdFx0ZGlhbG9nQ29udGVudHMuZm9yRWFjaCgoZGlhbG9nQ29udGVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gZGlhbG9nQ29udGVudD8ucGFyYW1ldGVyO1xuXHRcdFx0Y29uc3QgZmllbGQgPSBkaWFsb2dDb250ZW50Py5mb3JtRWxlbWVudHM/LlsxXTtcblx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MucHVzaCh7XG5cdFx0XHRcdHBhcmFtZXRlcixcblx0XHRcdFx0ZmllbGQsXG5cdFx0XHRcdGlzTXVsdGlWYWx1ZTogcGFyYW1ldGVyLmlzQ29sbGVjdGlvbixcblx0XHRcdFx0aGFzRXJyb3I6IGZhbHNlXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIGRpYWxvZ1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgc2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcyhkaWFsb2c6IERpYWxvZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXIgPSB0aGlzLmFjdGlvbi5pc0JvdW5kID8gdGhpcy5hY3Rpb24ucGFyYW1ldGVyc1swXS5uYW1lIDogXCJcIjtcblx0XHRjb25zdCB7IGNvbnRleHRWYWx1ZXMsIGRlZmF1bHRWYWx1ZXMsIGZ1bmN0aW9uVmFsdWVzLCBtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzIH0gPSBhd2FpdCB0aGlzLmdldFByZURlZmluZWRWYWx1ZXMoXG5cdFx0XHRiaW5kaW5nUGFyYW1ldGVyLFxuXHRcdFx0ZGlhbG9nXG5cdFx0KTtcblx0XHRjb25zdCBvcGVyYXRpb25CaW5kaW5nID0gZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXG5cdFx0aWYgKGJpbmRpbmdQYXJhbWV0ZXIpIHtcblx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKGJpbmRpbmdQYXJhbWV0ZXIsIGNvbnRleHRWYWx1ZXMpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRpZiAodGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIubmFtZSAhPT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlck5hbWUgPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zW2ldLnBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHQvLyBQYXJhbWV0ZXIgdmFsdWVzIHByb3ZpZGVkIGluIHRoZSBjYWxsIG9mIGludm9rZUFjdGlvbiBvdmVycnVsZSBvdGhlciBzb3VyY2VzXG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlclByb3ZpZGVkVmFsdWUgPSB0aGlzLnBhcmFtZXRlclZhbHVlcz8uZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lID09PSBwYXJhbWV0ZXJOYW1lKT8udmFsdWU7XG5cdFx0XHRcdGlmIChwYXJhbWV0ZXJQcm92aWRlZFZhbHVlKSB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAobWFuaWZlc3RGdW5jdGlvblZhbHVlcy5oYXNPd25Qcm9wZXJ0eShwYXJhbWV0ZXJOYW1lKSkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXNbcGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZXNbaV0gJiYgZGVmYXVsdFZhbHVlc1tpXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgZGVmYXVsdFZhbHVlc1tpXS52YWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuQ29tbW9uPy5EZWZhdWx0VmFsdWVzRnVuY3Rpb24gJiYgIWRlZmF1bHRWYWx1ZXNbaV0ubm9Qb3NzaWJsZVZhbHVlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0T2ZGdW5jdGlvblZhbHVlcyA9IG5ldyBTZXQ8c3RyaW5nPihcblx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5tYXAoKGNvbnRleHQsIGluZGV4KSA9PiBmdW5jdGlvblZhbHVlc1tpbmRleF0uZ2V0T2JqZWN0KHBhcmFtZXRlck5hbWUpKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHNldE9mRnVuY3Rpb25WYWx1ZXMuc2l6ZSA9PT0gMSAmJiBzZXRPZkZ1bmN0aW9uVmFsdWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvL3BhcmFtIHZhbHVlcyBhcmUgYWxsIHRoZSBzYW1lOlxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgQXJyYXkuZnJvbShzZXRPZkZ1bmN0aW9uVmFsdWVzKVswXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgYXQgbGVhc3Qgb25lIERlZmF1bHQgUHJvcGVydHkgaXMgYSBMYXRlIFByb3BlcnR5IGFuZCBhbiBlVGFnIGVycm9yIHdhcyByYWlzZWQuXG5cdFx0aWYgKGRlZmF1bHRWYWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlLmxhdGVQcm9wZXJ0eUVycm9yKSkge1xuXHRcdFx0Y29uc3QgcmVmcmVzaCA9IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKTtcblx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhnZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19MQVRFX1BST1BFUlRZXCIpLCB7XG5cdFx0XHRcdGFjdGlvbnM6IFtyZWZyZXNoLCBNZXNzYWdlQm94LkFjdGlvbi5PS10sXG5cdFx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IHJlZnJlc2gsXG5cdFx0XHRcdG9uQ2xvc2U6IChhY3Rpb246IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdGlmIChhY3Rpb24gPT09IHJlZnJlc2gpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMucGFyYW1ldGVycy52aWV3Py5nZXRDb250cm9sbGVyKCkuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0XHRcdFx0XHQoZXh0ZW5zaW9uQVBJIGFzIExpc3RSZXBvcnRFeHRlbnNpb25BUEkgfCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJKS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMjVlbVwiXG5cdFx0XHR9IGFzIG9iamVjdCk7XG5cdFx0fVxuXG5cdFx0Ly8gZGVzdHJveSB0aGUgb2RhdGFDb250ZXh0QmluZGluZyByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbiBjYWxsXG5cdFx0Zm9yIChjb25zdCBmdW5jdGlvbkNvbnRleHQgb2YgZnVuY3Rpb25WYWx1ZXMpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSBmdW5jdGlvbkNvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0aWYgKGJpbmRpbmc/LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBjbG9zZSBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHJpdmF0ZSBhZnRlckNsb3NlKCk6IHZvaWQge1xuXHRcdC8vIHdoZW4gdGhlIGRpYWxvZyBpcyBjYW5jZWxsZWQsIG1lc3NhZ2VzIG5lZWQgdG8gYmUgcmVtb3ZlZCBpbiBjYXNlIHRoZSBzYW1lIGFjdGlvbiBzaG91bGQgYmUgZXhlY3V0ZWQgYWdhaW5cblx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0dGhpcy5yZW1vdmVNZXNzYWdlc0ZvclBhcmFtZXRlcih0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zW2ldLnBhcmFtZXRlcik7XG5cdFx0fVxuXHRcdHRoaXMuZGlhbG9nPy5kZXN0cm95KCk7XG5cdFx0dGhpcy5idXR0b25Mb2NrID0gZmFsc2U7IC8vbmVlZGVkIGhlcmUsIG5vdCBpbiB0aGUgcHJlc3MgZXZlbnRzIGZpbmFsbHkgY2xhdXNlLiBJbiBjYXNlIHRoZSBVSSBpcyBzbHVnZ2lzaCwgYmVnaW4gYnV0dG9uIGNvdWxkIGJlIHByZXNzZWQgYWdhaW4uXG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgdXNlZCBmb3IgdGV4dCBhbm5vdGF0aW9uIGluIHRoZSBWYWx1ZUhlbHAgZm9yIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGFuZCBwcm92aWRlcyB0aGUgZm9ybWF0dGVkIGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGZvcm0gZWxlbWVudCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRBZGRpdGlvbmFsVmFsdWUob0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcblx0XHRsZXQgdGV4dENvbnRleHQ7XG5cblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbG9jYWxEYXRhUHJvcGVydHkgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0T2JqZWN0KCk/LiROYW1lO1xuXHRcdGNvbnN0IHZhbHVlTGlzdEJ5UXVhbGlmaWVyID0gYXdhaXQgdGhpcy5tZXRhTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8oY29udGV4dFBhdGgsIHRydWUpO1xuXG5cdFx0Ly8gTG9vayBmb3IgTG9jYWxEYXRhUHJvcGVydHkgaW4gVmFsdWVMaXN0UGFyYW1ldGVyT3V0IG9yIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHdoZXJlIHRoaXMgaXMgdGhlIHBhcmFtZXRlciBuYW1lXG5cdFx0Ly8gV2Ugb25seSBjb25zaWRlciBUZXh0QW5ub3RhdGlvbnMgZm9yIHRoaXMgYWN0aW9uIHBhcmFtZXRlclxuXHRcdGNvbnN0IHZhbHVlTGlzdFBhcmFtZXRlciA9IHZhbHVlTGlzdEJ5UXVhbGlmaWVyW1wiXCJdLlBhcmFtZXRlcnMuZmluZChcblx0XHRcdChwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHBhcmFtZXRlci4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHQocGFyYW1ldGVyLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIiAmJlxuXHRcdFx0XHRcdHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCA9PT0gbG9jYWxEYXRhUHJvcGVydHkpXG5cdFx0KTtcblxuXHRcdGlmICh2YWx1ZUxpc3RQYXJhbWV0ZXIgJiYgdmFsdWVMaXN0UGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCB0ZXh0UHJvcGVydHkgPSB2YWx1ZUxpc3RQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHQvLyBOb3cgd2UgaGF2ZSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBpcyB0aGUgYW5ub3RhdGVkIHRleHRcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGAvJHt2YWx1ZUxpc3RCeVF1YWxpZmllcltcIlwiXS5Db2xsZWN0aW9uUGF0aH0vJHt0ZXh0UHJvcGVydHl9YDtcblx0XHRcdGNvbnN0IHByb3BBbm5vdGF0aW9ucyA9IHRoaXMubWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApO1xuXG5cdFx0XHRpZiAocHJvcEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkge1xuXHRcdFx0XHRjb25zdCB0ZXh0UHJvcCA9IHByb3BBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXTtcblx0XHRcdFx0Y29uc3QgdGV4dFBhdGggPSBgLyR7dmFsdWVMaXN0QnlRdWFsaWZpZXJbXCJcIl0uQ29sbGVjdGlvblBhdGh9LyR7dGV4dFByb3AuJFBhdGh9YDtcblx0XHRcdFx0dGV4dENvbnRleHQgPSB0aGlzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0ZXh0UGF0aCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXh0Q29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gQW5ub3RhdGlvbkhlbHBlci5mb3JtYXQodGV4dENvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogdGV4dENvbnRleHQgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQStGcUJBLHFCQUFxQjtJQTRCekMsU0FBQUEsc0JBQ2tCQyxNQUFjLEVBQ2RDLFVBYWhCLEVBQ2dCQyxlQUFzRCxFQUN0REMsYUFBaUMsRUFDakNDLGNB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
1099
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyVmFsdWVzIiwiZW50aXR5U2V0TmFtZSIsIm1lc3NhZ2VIYW5kbGVyIiwiaXNEaWFsb2dPcGVuIiwiYnV0dG9uTG9jayIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJhY3Rpb25OYW1lIiwiYWN0aW9uSGVscGVyIiwiZ2V0QWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicmVzb3VyY2VNb2RlbCIsInZpZXciLCJnZXRSZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwicGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlIiwicGFyYW1ldGVyc1ZhbHVlc1JlamVjdCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0UGFyYW1ldGVyRWRpdE1vZGUiLCJwYXJhbWV0ZXIiLCJhbm5vdGF0aW9ucyIsImZpZWxkQ29udHJvbCIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsIkNvcmUiLCJJbW11dGFibGUiLCJ2YWx1ZU9mIiwiY29tcHV0ZWQiLCJDb21wdXRlZCIsImNvbnN0YW50IiwiRmllbGRFZGl0TW9kZSIsIlJlYWRPbmx5IiwiaWZFbHNlIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsIkRpc2FibGVkIiwiRWRpdGFibGUiLCJjcmVhdGVGb3JtRWxlbWVudCIsImFjdGlvbk1ldGFQYXRoIiwiaXNCb3VuZCIsImdldE1ldGFQYXRoIiwiY29udGV4dHMiLCJnZXRQYXRoIiwiY29udmVydFR5cGVzIiwibmFtZXNwYWNlIiwibmFtZSIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJmaWVsZCIsImxhYmVsIiwiTGFiZWwiLCJnZXRUZXh0IiwidG9TdHJpbmciLCJzdHJlYW1QYXJhbWV0ZXIiLCJpc0NvbGxlY3Rpb24iLCJjcmVhdGVNdWx0aUZpZWxkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJnZXRTdHJlYW1Qcm9wZXJ0eSIsImNyZWF0ZUZpbGVVcGxvYWRlciIsImNyZWF0ZUZpZWxkIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjaGlsZHJlbiIsIl9qc3giLCJpZCIsImdlbmVyYXRlIiwidGV4dCIsInBhcmFtZXRlckNvbnRleHQiLCJkaXNwbGF5IiwiRmllbGRIZWxwZXIiLCJnZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQiLCJnZXRPYmplY3QiLCJjb250ZXh0IiwiZXJyIiwiTG9nIiwid2FybmluZyIsInBsYWNlSG9sZGVyIiwiVUkiLCJQbGFjZWhvbGRlciIsInBsYWNlSG9sZGVyRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwicGFyYW1ldGVyVHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJNdWx0aVZhbHVlRmllbGQiLCJwbGFjZWhvbGRlciIsIml0ZW1zIiwicGF0aCIsImRlbGVnYXRlIiwiZWRpdE1vZGUiLCJ3aWR0aCIsIm11bHRpcGxlTGluZXMiLCJNdWx0aUxpbmVUZXh0IiwicmVxdWlyZWQiLCJpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiIsInZhbHVlSGVscCIsImhhc1ZhbHVlSGVscCIsImNoYW5nZSIsImUiLCJoYW5kbGVGaWVsZENoYW5nZSIsInZpc2libGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsImFyaWFMYWJlbGxlZEJ5IiwiZGVwZW5kZW50cyIsImNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscCIsIk11bHRpVmFsdWVGaWVsZEl0ZW0iLCJkZXNjcmlwdGlvbiIsImZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiYWNjZXB0ZWRUeXBlcyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImpvaW4iLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZXZlbnQiLCJmaWxlVXBsb2FkZXIiLCJnZXRTb3VyY2UiLCJnaXZlblR5cGUiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNaW1lVHlwZSIsInNob3dUeXBlTWlzbWF0Y2hEaWFsb2ciLCJmaWxlTWF4aW11bVNpemUiLCJjYWxjdWxhdGVNQmZyb21CeXRlIiwibWF4TGVuZ3RoIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJzaG93RmlsZVNpemVFeGNlZWREaWFsb2ciLCJnZXRNYXhpbXVtRmlsZVNpemUiLCJ0b0ZpeGVkIiwib25VcGxvYWRDb21wbGV0ZSIsImRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkIiwiRmlsZVVwbG9hZGVyIiwiYnV0dG9uT25seSIsImljb25Pbmx5IiwibXVsdGlwbGUiLCJ0b29sdGlwIiwiaWNvbiIsInN0eWxlIiwic2VuZFhIUiIsInVzZU11bHRpcGFydCIsInNhbWVGaWxlbmFtZUFsbG93ZWQiLCJ1cGxvYWRPbkNoYW5nZSIsIm1pbWVUeXBlIiwidHlwZU1pc3NtYXRjaCIsIm1heGltdW1GaWxlU2l6ZSIsImZpbGVTaXplRXhjZWVkIiwiaHR0cFJlcXVlc3RNZXRob2QiLCJGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCIsIlB1dCIsInVwbG9hZENvbXBsZXRlIiwiaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlIiwiYWRkaXRpb25hbFZhbHVlIiwiYmluZGluZ1ZhbHVlIiwiZ2V0QVBEaWFsb2dCaW5kaW5nVmFsdWUiLCJnZXRBZGRpdGlvbmFsVmFsdWUiLCJGaWVsZCIsInBheWxvYWQiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwidmFsdWUiLCJpc011bHRpTGluZVRleHQiLCJWYWx1ZUhlbHAiLCJwcm9wZXJ0eVBhdGgiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicXVhbGlmaWVycyIsInZhbHVlSGVscFF1YWxpZmllciIsInZhbGlkYXRlSW5wdXQiLCJyZXF1aXJlc1ZhbGlkYXRpb24iLCJ0eXBlYWhlYWQiLCJQb3BvdmVyIiwiTVRhYmxlIiwiY2FzZVNlbnNpdGl2ZSIsInVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyIsImVudGl0eUNvbnRhaW5lciIsIkNhcGFiaWxpdGllcyIsIkZpbHRlckZ1bmN0aW9ucyIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwidXNlQXNWYWx1ZUhlbHAiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJkaWFsb2ciLCJjcmVhdGVGaWVsZFZIRGlhbG9nIiwiVkhEaWFsb2ciLCJmaWVsZFByb21pc2UiLCJwYXJhbWV0ZXJJbmZvIiwiZmluZCIsImFjdGlvblBhcmFtZXRlckluZm8iLCJ2YWxpZGF0aW9uUHJvbWlzZSIsInJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyIiwicGFyYW1ldGVyc1ZhbHVlcyIsImhhc0Vycm9yIiwiZXJyb3IiLCJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlIiwiZmlsZXMiLCJnZXRCYXNlNjRGaWxlIiwiZ2V0TWltZVR5cGVQYXRoIiwiZ2V0RmlsZU5hbWVQYXRoIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJNZWRpYVR5cGUiLCJ0eXBlUmVmZXJlbmNlIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsInJlc3VsdCIsInNwbGl0IiwicmVhZEFzRGF0YVVSTCIsIml0ZW0iLCJtZXNzYWdlcyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJjb250cm9sSWQiLCJyZWxldmFudE1lc3NhZ2VzIiwiZmlsdGVyIiwibXNnIiwiZ2V0Q29udHJvbElkcyIsInNvbWUiLCJpbmNsdWRlcyIsInJlbW92ZU1lc3NhZ2VzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnRzIiwiZ2V0RGlhbG9nIiwiY3JlYXRlRGlhbG9nIiwiZGlhbG9nQ29udGVudHMiLCJkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzIiwiYWN0aW9uUGFyYW1ldGVycyIsInNsaWNlIiwiT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzIiwiYWN0aW9uUGFyYW1ldGVyR3JvdXBzIiwiZm9yRWFjaCIsImZhY2V0IiwiZmFjZXRUaXRsZSIsIiRUeXBlIiwiaGFzRmllbGRHcm91cFRhcmdldCIsImZpZWxkR3JvdXAiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnMiLCJEYXRhIiwiZ3JvdXAiLCJwdXNoIiwiVmFsdWUiLCJkYXRhIiwiZ2V0R3JvdXBGb3JtIiwiYWxsIiwiYmluZCIsImZvcm1EYXRhIiwicGFyYW1ldGVyR3JvdXAiLCJvcEZhY2V0cyIsImRpYWxvZ0NvbnRlbnQiLCJUaXRsZSIsImVsZW1lbnQiLCJvcEZhY2V0IiwicmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvIiwibWVzc2FnZVN0cmlwIiwiZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCIsImVuZEJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwib25DYW5jZWwiLCJEaWFsb2ciLCJ0aXRsZSIsImdldFRpdGxlVGV4dCIsImVzY2FwZUhhbmRsZXIiLCJkcmFnZ2FibGUiLCJyZXNpemFibGUiLCJhZnRlckNsb3NlIiwiYmVmb3JlT3BlbiIsImFmdGVyT3BlbiIsImluaXRpYWxGb2N1cyIsImJlZ2luQnV0dG9uIiwiaXNDcmVhdGVBY3Rpb24iLCJnZXRCZWdpbkJ1dHRvbkxhYmVsIiwib25BcHBseSIsImNvbnRlbnQiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsIlNpbXBsZUZvcm0iLCJjb2x1bW5zTSIsImVkaXRhYmxlIiwibGFiZWxTcGFuTCIsImxhYmVsU3Bhbk0iLCJiaW5kaW5nIiwiYWN0aW9uTGFiZWwiLCJrZXkiLCJkZWZhdWx0S2V5IiwiZ2V0T3ZlcnJpZGRlblRleHQiLCJib3VuZEFjdGlvbk5hbWUiLCJwb3AiLCJzdWZmaXhSZXNvdXJjZUtleSIsImNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImdldE9iamVjdEJpbmRpbmciLCJnZXRQYXJhbWV0ZXJDb250ZXh0IiwiQnVzeUxvY2tlciIsImxvY2siLCJ2YWxpZGF0ZVByb3BlcnRpZXMiLCJ1bmxvY2siLCJuZXdWYWx1ZXNEaWN0aW9uYXJ5IiwiT2JqZWN0IiwiYXNzaWduIiwidmFsdWVzIiwiZ2V0TW9kZWwiLCJnZXRQcm9wZXJ0eSIsInBhcmFtVmFsdWUiLCJLZXkiLCJpc05ld1ZhbHVlIiwic2V0UHJvcGVydHkiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInJlc2V0U3RhdGUiLCJ1bmxvY2tEaWFsb2ciLCJ1cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yIiwibGVuZ3RoIiwid2FybmluZ0NvbnRleHQiLCJpbmZvQ29udGV4dCIsImVycm9uZW91c0N0eCIsImdldE1lc3NhZ2VzIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiV2FybmluZyIsIkluZm9ybWF0aW9uIiwiRXJyb3IiLCJjb250ZXh0VG9Vc2UiLCJzZXRCaW5kaW5nQ29udGV4dCIsImlzTG9ja2VkIiwiRkVMaWJyYXJ5IiwiQ29uc3RhbnRzIiwiQ2FuY2VsQWN0aW9uRGlhbG9nIiwiY2xvc2VEaWFsb2ciLCJldmVudHMiLCJvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZCIsImkiLCJjbG9zZSIsIm9wZW5EaWFsb2ciLCJDb21tb25VdGlscyIsInNldFVzZXJEZWZhdWx0cyIsInNldE1vZGVscyIsImFkZERlcGVuZGVudCIsInNldE9wZXJhdGlvbkRlZmF1bHRWYWx1ZXMiLCJvcGVuIiwic2V0TW9kZWwiLCJiaW5kRWxlbWVudCIsIl9ldmVudCIsIndhaXRGb3JQYXJhbWV0ZXJzVmFsdWVzIiwiaXNPcGVuIiwiZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYmluZGluZ1BhcmFtZXRlciIsIm9wZXJhdGlvbkJpbmRpbmciLCJwYXJhbWV0ZXJNb2RlbERhdGEiLCJwYXJhbU5hbWUiLCJkZWZhdWx0VmFsdWUiLCJQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInBhdGhGb3JDb250ZXh0IiwicmVwbGFjZSIsInJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSIsInJlcXVlc3RQcm9wZXJ0eSIsIm5vUG9zc2libGVWYWx1ZSIsImxhdGVQcm9wZXJ0eUVycm9yIiwiZ2V0TWFuaWZlc3RGdW5jdGlvblZhbHVlcyIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJsb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZCIsImdldFByZURlZmluZWRWYWx1ZXMiLCJib3VuZEZ1bmN0aW9uTmFtZSIsIkRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInJlcXVlc3RDb250ZXh0T2JqZWN0IiwiZnVuY3Rpb25QYXJhbXMiLCJib3VuZEZ1bmN0aW9uIiwiT3BlcmF0aW9uIiwiZ2V0T3BlcmF0aW9uRnJvbU5hbWUiLCJPRGF0YU9wZXJhdGlvbiIsImVuaGFuY2Ukc2VsZWN0IiwiZ3JvdXBJZCIsImV4ZWN1dGUiLCJpc0Z1bGZpbGxlZCIsImJvdW5kQ29udGV4dCIsInJlcXVlc3RPYmplY3QiLCJjb250ZXh0VmFsdWVzIiwicHJvbWlzZXMiLCJkZWZhdWx0VmFsdWVzIiwiZnVuY3Rpb25WYWx1ZXMiLCJtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzIiwiZmlyc3RWaXNpYmxlUGFyYW1ldGVyIiwiZ2V0VmlzaWJsZSIsImZpcnN0RmllbGQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJvblBhcmFtZXRlckRpYWxvZ09wZW5lZCIsImlzTXVsdGlWYWx1ZSIsInNldFBhcmFtZXRlciIsInBhcmFtZXRlck5hbWUiLCJwYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwiaGFzT3duUHJvcGVydHkiLCJzZXRPZkZ1bmN0aW9uVmFsdWVzIiwiU2V0IiwiaW5kZXgiLCJzaXplIiwibmV4dCIsInJlZnJlc2giLCJNZXNzYWdlQm94IiwiYWN0aW9ucyIsIkFjdGlvbiIsIk9LIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJleHRlbnNpb25BUEkiLCJnZXRDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiY29udGVudFdpZHRoIiwiZnVuY3Rpb25Db250ZXh0IiwiZ2V0QmluZGluZyIsImlzQSIsImRlc3Ryb3kiLCJvSW50ZXJmYWNlIiwidGV4dENvbnRleHQiLCJjb250ZXh0UGF0aCIsImxvY2FsRGF0YVByb3BlcnR5IiwiJE5hbWUiLCJ2YWx1ZUxpc3RCeVF1YWxpZmllciIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwidmFsdWVMaXN0UGFyYW1ldGVyIiwiUGFyYW1ldGVycyIsIkxvY2FsRGF0YVByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidGV4dFByb3BlcnR5IiwiQ29sbGVjdGlvblBhdGgiLCJwcm9wQW5ub3RhdGlvbnMiLCJ0ZXh0UHJvcCIsInRleHRQYXRoIiwiJFBhdGgiLCJBbm5vdGF0aW9uSGVscGVyIiwiZm9ybWF0IiwicHJvcGVydHlPYmplY3RQYXRoIiwiZ2V0VmFsdWVCaW5kaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPcGVyYXRpb25QYXJhbWV0ZXJEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tcGxleFR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFjdGlvbiwgdHlwZSBBY3Rpb25QYXJhbWV0ZXIgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgUHJvcGVydHlBbm5vdGF0aW9uc19Db3JlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db3JlX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIEZpZWxkR3JvdXBUeXBlLCBSZWZlcmVuY2VGYWNldCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXJJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE9EYXRhT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09EYXRhT3BlcmF0aW9uXCI7XG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09wZXJhdGlvblwiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9ucy9hY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNGaWVsZEdyb3VwVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNGdWxmaWxsZWQsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiwgaXNEaXNhYmxlZEV4cHJlc3Npb24sIGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAsIGlzTXVsdGlMaW5lVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyByZXF1aXJlc1ZhbGlkYXRpb24sIHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUhlbHBUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgRGlhbG9nJEJlZm9yZU9wZW5FdmVudCB9IGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC91aS9jb3JlL1RpdGxlXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFNpbXBsZUZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9TaW1wbGVGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvZmllbGQvTXVsdGlWYWx1ZUZpZWxkSXRlbVwiO1xuaW1wb3J0IFZIRGlhbG9nIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9EaWFsb2dcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9Qb3BvdmVyXCI7XG5pbXBvcnQgTVRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2RcIjtcbmltcG9ydCB7IGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkLCBzaG93RmlsZVNpemVFeGNlZWREaWFsb2csIHNob3dUeXBlTWlzbWF0Y2hEaWFsb2cgfSBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9VcGxvYWRcIjtcblxuaW1wb3J0IHsgZ2V0VmFsdWVCaW5kaW5nIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG50eXBlIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IHsgcGFyYW1OYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyBsYXRlUHJvcGVydHlFcnJvcj86IGJvb2xlYW47IG5vUG9zc2libGVWYWx1ZT86IGJvb2xlYW4gfTtcblxudHlwZSBFbGVtZW50R3JvdXAgPSB7IGZhY2V0VGl0bGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQ7IGRhdGE6IEFjdGlvblBhcmFtZXRlcltdIH07XG50eXBlIEVsZW1lbnRHcm91cENvbnZlcnRlZCA9IHsgZmFjZXRUaXRsZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPiB8IHVuZGVmaW5lZDsgZGF0YTogRGlhbG9nQ29udGVudFR5cGVzW10gfTtcblxudHlwZSBGb3JtRWxlbWVudFR5cGUgPSBbTGFiZWwsIEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkXTtcblxudHlwZSBEaWFsb2dDb250ZW50VHlwZXMgPSB7XG5cdGZvcm1FbGVtZW50czogRm9ybUVsZW1lbnRUeXBlO1xuXHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcjtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY3Rpb25QYXJhbWV0ZXJEaWFsb2cge1xuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+PjtcblxuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlITogKHJlc29sdmVWYWx1ZTogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT4pID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBwYXJhbWV0ZXJzVmFsdWVzUmVqZWN0ITogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkO1xuXG5cdC8vIHRoZSBkaWFsb2cgaXMgY29uc2lkZXJlZCBhcyBjbG9zZWQgYWZ0ZXIgdGhlIGFmdGVyQ2xvc2UgZXZlbnQgaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdC8vIHRoaXMgaXMgYXN5bmNocm9ub3VzLCBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGRpYWxvZyBzdGF0ZSBzaW5jZSB0aGUgbWVzc2FnZSBoYW5kbGluZyBpcyBzeW5jaHJvbm91c1xuXHQvLyBhbmQgd2UgbmVlZCB0byBrbm93IGlmIHRoZSBkaWFsb2cgaXMgb3BlbiBvciBjbG9zZWRcblx0cHJpdmF0ZSBpc0RpYWxvZ09wZW4gPSBmYWxzZTtcblxuXHRwcml2YXRlIGRpYWxvZzogRGlhbG9nIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nO1xuXG5cdHByaXZhdGUgYnV0dG9uTG9jayA9IGZhbHNlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvblBhcmFtZXRlckluZm9zOiAoQWN0aW9uUGFyYW1ldGVySW5mbyAmIHsgcGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIgfSlbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyTW9kZWw6IEpTT05Nb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdCRkaXNwbGF5TW9kZToge31cblx0fSk7XG5cblx0cHJpdmF0ZSByZWFkb25seSByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uOiBBY3Rpb24sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJzOiB7XG5cdFx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0XHRcdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0cGFyYW1ldGVyc1ZhbHVlczogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHRpc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0dmlldz86IEZFVmlldztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25QYXJhbWV0ZXJEaWFsb2dPcGVuZWQ/OiAoKSA9PiB2b2lkO1xuXHRcdFx0XHRvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZD86ICgpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCB1bmRlZmluZWQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBlbnRpdHlTZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcblx0KSB7XG5cdFx0dGhpcy5hY3Rpb25OYW1lID0gYWN0aW9uSGVscGVyLmdldEFjdGlvbk5hbWUodGhpcy5hY3Rpb24pO1xuXHRcdHRoaXMubWV0YU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMucmVzb3VyY2VNb2RlbCA9IHRoaXMucGFyYW1ldGVycy52aWV3ID8gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMudmlldykgOiBnZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdCA9IHJlamVjdDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgZWRpdCBtb2RlIHByb3BlcnR5IGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24uXG5cdCAqL1xuXHRwcml2YXRlIGdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPEZpZWxkRWRpdE1vZGU+IHtcblx0XHRjb25zdCBhbm5vdGF0aW9ucyA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucyxcblx0XHRcdGZpZWxkQ29udHJvbCA9IGFubm90YXRpb25zLkNvbW1vbj8uRmllbGRDb250cm9sLFxuXHRcdFx0aW1tdXRhYmxlID0gKGFubm90YXRpb25zLkNvcmUgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUpPy5JbW11dGFibGU/LnZhbHVlT2YoKSxcblx0XHRcdGNvbXB1dGVkID0gKGFubm90YXRpb25zLkNvcmUgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUpPy5Db21wdXRlZD8udmFsdWVPZigpO1xuXG5cdFx0aWYgKGltbXV0YWJsZSB8fCBjb21wdXRlZCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuUmVhZE9ubHkpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRDb250cm9sKSB7XG5cdFx0XHRyZXR1cm4gaWZFbHNlKFxuXHRcdFx0XHRpc1JlYWRPbmx5RXhwcmVzc2lvbihwYXJhbWV0ZXIpLFxuXHRcdFx0XHRGaWVsZEVkaXRNb2RlLlJlYWRPbmx5LFxuXHRcdFx0XHRpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ocGFyYW1ldGVyKSwgRmllbGRFZGl0TW9kZS5EaXNhYmxlZCwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZSlcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjb25zdGFudChGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmb3JtIGVsZW1lbnQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybSBlbGVtZW50IGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUZvcm1FbGVtZW50KHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTxGb3JtRWxlbWVudFR5cGU+IHtcblx0XHRjb25zdCBhY3Rpb25NZXRhUGF0aCA9IHRoaXMuYWN0aW9uLmlzQm91bmRcblx0XHRcdD8gYCR7dGhpcy5tZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldFBhdGgoKSl9LyR7Y29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKS5uYW1lc3BhY2V9LiR7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24ubmFtZVxuXHRcdFx0ICB9YFxuXHRcdFx0OiBgLyR7dGhpcy5hY3Rpb24ubmFtZX1gO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7YWN0aW9uTWV0YVBhdGh9LyR7cGFyYW1ldGVyLm5hbWV9YCkhO1xuXHRcdGxldCBmaWVsZDtcblx0XHRsZXQgbGFiZWwgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbFxuXHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uLkxhYmVsLnRvU3RyaW5nKCkpXG5cdFx0XHQ6IHBhcmFtZXRlci5uYW1lO1xuXHRcdGxldCBzdHJlYW1QYXJhbWV0ZXI7XG5cdFx0aWYgKHBhcmFtZXRlci5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdGZpZWxkID0gYXdhaXQgdGhpcy5jcmVhdGVNdWx0aUZpZWxkKHBhcmFtZXRlciwgbWV0YUNvbnRleHQpO1xuXHRcdH0gZWxzZSBpZiAoIXBhcmFtZXRlci50eXBlLnN0YXJ0c1dpdGgoXCJFZG0uXCIpICYmIHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0c3RyZWFtUGFyYW1ldGVyID0gdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpO1xuXHRcdFx0Ly8gY2FsY3VsYXRlIGxhYmVsIGZyb20gdGhlIHN0cmVhbSBwcm9wZXJ0eSB3aXRoaW4gdGhlIENvbXBsZXhUeXBlXG5cdFx0XHRsYWJlbCA9IHN0cmVhbVBhcmFtZXRlcj8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbFxuXHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KHN0cmVhbVBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24uTGFiZWwudG9TdHJpbmcoKSlcblx0XHRcdFx0OiAoc3RyZWFtUGFyYW1ldGVyPy5uYW1lIGFzIHN0cmluZyk7XG5cdFx0XHRmaWVsZCA9IHRoaXMuY3JlYXRlRmlsZVVwbG9hZGVyKHBhcmFtZXRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpZWxkID0gYXdhaXQgdGhpcy5jcmVhdGVGaWVsZChwYXJhbWV0ZXIsIG1ldGFDb250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdDxMYWJlbCBpZD17Z2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZSwgc3RyZWFtUGFyYW1ldGVyPy5uYW1lLCBcIkxhYmVsXCJdKX0gdGV4dD17bGFiZWx9IC8+XG5cdFx0XHRcdHtmaWVsZH1cblx0XHRcdDwvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgbXVsdGkgZmllbGQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIG11bHRpIHZhbHVlIGZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZU11bHRpRmllbGQocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPE11bHRpVmFsdWVGaWVsZD4ge1xuXHRcdGxldCBkaXNwbGF5ID0gXCJWYWx1ZVwiO1xuXHRcdHRyeSB7XG5cdFx0XHRkaXNwbGF5ID0gYXdhaXQgRmllbGRIZWxwZXIuZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0KHBhcmFtZXRlckNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KTtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdExvZy53YXJuaW5nKGBQYXJhbWV0ZXIgZGlhbG9nIG11bHRpZmllbGQ6IGRpc3BsYXkgZm9ybWF0IGNvdWxkbid0IGJlIGNhbGN1bGF0ZWQgZm9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nOiAke2Vycn1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXIgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBsYWNlaG9sZGVyIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBsYWNlSG9sZGVyRXhwcmVzc2lvbiA9IHBsYWNlSG9sZGVyID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBsYWNlSG9sZGVyKSkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVyVHlwZSA9IEVETV9UWVBFX01BUFBJTkc/LltwYXJhbWV0ZXIudHlwZV0/LnR5cGU7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNdWx0aVZhbHVlRmllbGRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKX1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyRXhwcmVzc2lvbn1cblx0XHRcdFx0aXRlbXM9e3sgcGF0aDogYG12ZnZpZXc+LyR7cGFyYW1ldGVyLm5hbWV9YCB9fVxuXHRcdFx0XHRkZWxlZ2F0ZT17eyBuYW1lOiBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL011bHRpVmFsdWVQYXJhbWV0ZXJEZWxlZ2F0ZVwiIH19XG5cdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdGVkaXRNb2RlPXt0aGlzLmdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcil9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdG11bHRpcGxlTGluZXM9e3BhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlfVxuXHRcdFx0XHRyZXF1aXJlZD17Y29tcGlsZUV4cHJlc3Npb24oaXNBY3Rpb25QYXJhbWV0ZXJSZXF1aXJlZEV4cHJlc3Npb24ocGFyYW1ldGVyLCB0aGlzLmFjdGlvbiwgY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKSkpfVxuXHRcdFx0XHR2YWx1ZUhlbHA9e2hhc1ZhbHVlSGVscChwYXJhbWV0ZXIpID8gZ2VuZXJhdGUoW3RoaXMuYWN0aW9uTmFtZSwgcGFyYW1ldGVyLm5hbWUsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRjaGFuZ2U9e2FzeW5jIChlKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmhhbmRsZUZpZWxkQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGFyYW1ldGVyLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lLCBcIkxhYmVsXCJdKV19XG5cdFx0XHRcdGRlcGVuZGVudHM9e3RoaXMuY3JlYXRlUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRJdGVtIGtleT17YHtwYXRoOiAnbXZmdmlldz5LZXknLCB0eXBlOicke3BhcmFtZXRlclR5cGV9J31gfSBkZXNjcmlwdGlvbj1cInttdmZ2aWV3PkRlc2N9XCIgLz5cblx0XHRcdDwvTXVsdGlWYWx1ZUZpZWxkPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgRmlsZVVwbG9hZGVyIGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIEZpbGVVcGxvYWRlciBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGaWxlVXBsb2FkZXIocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBGaWxlVXBsb2FkZXIge1xuXHRcdGxldCBmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXM7XG5cdFx0aWYgKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXMpIHtcblx0XHRcdGNvbnN0IGFjY2VwdGVkVHlwZXMgPSBBcnJheS5mcm9tKFxuXHRcdFx0XHR0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/LkFjY2VwdGFibGVNZWRpYVR5cGVzIGFzIHVua25vd24gYXMgc3RyaW5nW11cblx0XHRcdCkubWFwKCh0eXBlKSA9PiBgJyR7dHlwZX0nYCk7XG5cdFx0XHRmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXMgPSBgez1vZGF0YS5jb2xsZWN0aW9uKFske2FjY2VwdGVkVHlwZXMuam9pbihcIixcIil9XSl9YDtcblx0XHR9XG5cdFx0Y29uc3QgaGFuZGxlVHlwZU1pc3NtYXRjaCA9IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRjb25zdCBnaXZlblR5cGUgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJtaW1lVHlwZVwiKTtcblx0XHRcdGNvbnN0IGFjY2VwdGVkVHlwZXMgPSBmaWxlVXBsb2FkZXIuZ2V0TWltZVR5cGUoKTtcblx0XHRcdGlmIChnaXZlblR5cGUpIHtcblx0XHRcdFx0c2hvd1R5cGVNaXNtYXRjaERpYWxvZyhmaWxlVXBsb2FkZXIsIGdpdmVuVHlwZSwgYWNjZXB0ZWRUeXBlcyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvLyB2ZXJpZnkgY2hlY2sgZm9yIHN0cmVhbVxuXHRcdGNvbnN0IGZpbGVNYXhpbXVtU2l6ZSA9IEZpZWxkSGVscGVyLmNhbGN1bGF0ZU1CZnJvbUJ5dGUodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5tYXhMZW5ndGgpO1xuXHRcdGNvbnN0IGhhbmRsZUZpbGVTaXplRXhjZWVkID0gZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQ/LmdldFNvdXJjZSgpO1xuXHRcdFx0c2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nKGZpbGVVcGxvYWRlciwgZmlsZVVwbG9hZGVyLmdldE1heGltdW1GaWxlU2l6ZSgpLnRvRml4ZWQoMykpO1xuXHRcdH07XG5cdFx0Y29uc3Qgb25VcGxvYWRDb21wbGV0ZSA9IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJFVwbG9hZENvbXBsZXRlRXZlbnQpOiB2b2lkIHtcblx0XHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJzdGF0dXNcIikgPT09IDAgfHwgKGV2ZW50LmdldFBhcmFtZXRlcihcInN0YXR1c1wiKSBhcyBudW1iZXIpID49IDQwMCkge1xuXHRcdFx0XHRkaXNwbGF5TWVzc2FnZUZvckZhaWxlZFVwbG9hZChcblx0XHRcdFx0XHRldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdFx0XHQoZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVzcG9uc2VSYXdcIikgYXMgc3RyaW5nKSB8fCAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVzcG9uc2VcIikgYXMgc3RyaW5nKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWxlVXBsb2FkZXJcblx0XHRcdFx0bmFtZT1cIkZFVjRGaWxlVXBsb2FkXCJcblx0XHRcdFx0YnV0dG9uT25seT1cImZhbHNlXCJcblx0XHRcdFx0aWNvbk9ubHk9XCJ0cnVlXCJcblx0XHRcdFx0bXVsdGlwbGU9XCJmYWxzZVwiXG5cdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9GSUVMRF9GSUxFVVBMT0FERVJfVVBMT0FEX0JVVFRPTl9UT09MVElQfVwiXG5cdFx0XHRcdGljb249XCJzYXAtaWNvbjovL3VwbG9hZFwiXG5cdFx0XHRcdHN0eWxlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRzZW5kWEhSPVwidHJ1ZVwiXG5cdFx0XHRcdHVzZU11bHRpcGFydD1cImZhbHNlXCJcblx0XHRcdFx0c2FtZUZpbGVuYW1lQWxsb3dlZD1cInRydWVcIlxuXHRcdFx0XHR1cGxvYWRPbkNoYW5nZT1cImZhbHNlXCJcblx0XHRcdFx0bWltZVR5cGU9e2ZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlc31cblx0XHRcdFx0dHlwZU1pc3NtYXRjaD17aGFuZGxlVHlwZU1pc3NtYXRjaH1cblx0XHRcdFx0bWF4aW11bUZpbGVTaXplPXtmaWxlTWF4aW11bVNpemV9XG5cdFx0XHRcdGZpbGVTaXplRXhjZWVkPXtoYW5kbGVGaWxlU2l6ZUV4Y2VlZH1cblx0XHRcdFx0aHR0cFJlcXVlc3RNZXRob2Q9e0ZpbGVVcGxvYWRlckh0dHBSZXF1ZXN0TWV0aG9kLlB1dH1cblx0XHRcdFx0dXBsb2FkQ29tcGxldGU9e29uVXBsb2FkQ29tcGxldGV9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZmllbGQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUZpZWxkKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxGaWVsZD4ge1xuXHRcdGxldCBkaXNwbGF5ID0gXCJWYWx1ZVwiO1xuXHRcdGxldCBhZGRpdGlvbmFsVmFsdWU7XG5cdFx0bGV0IGJpbmRpbmdWYWx1ZTtcblx0XHR0cnkge1xuXHRcdFx0ZGlzcGxheSA9IGF3YWl0IEZpZWxkSGVscGVyLmdldEFQRGlhbG9nRGlzcGxheUZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0XHRiaW5kaW5nVmFsdWUgPSBhd2FpdCB0aGlzLmdldEFQRGlhbG9nQmluZGluZ1ZhbHVlKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCk7XG5cdFx0XHRpZiAoaGFzVmFsdWVIZWxwKHBhcmFtZXRlcikpIHtcblx0XHRcdFx0YWRkaXRpb25hbFZhbHVlID0gYXdhaXQgdGhpcy5nZXRBZGRpdGlvbmFsVmFsdWUoeyBjb250ZXh0OiBwYXJhbWV0ZXJDb250ZXh0IH0pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0TG9nLndhcm5pbmcoYFBhcmFtZXRlciBkaWFsb2cgZmllbGQ6IGRpc3BsYXkgZm9ybWF0IGNvdWxkbid0IGJlIGNhbGN1bGF0ZWQgZm9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nOiAke2Vycn1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXIgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBsYWNlaG9sZGVyIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBsYWNlSG9sZGVyRXhwcmVzc2lvbiA9IHBsYWNlSG9sZGVyID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBsYWNlSG9sZGVyKSkgOiB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWVsZFxuXHRcdFx0XHRkZWxlZ2F0ZT17eyBuYW1lOiBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRCYXNlRGVsZWdhdGVcIiwgcGF5bG9hZDogeyByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiB0cnVlIH0gfX1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKX1cblx0XHRcdFx0dmFsdWU9e2JpbmRpbmdWYWx1ZX1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyRXhwcmVzc2lvbn1cblx0XHRcdFx0ZGlzcGxheT17ZGlzcGxheX1cblx0XHRcdFx0ZWRpdE1vZGU9e3RoaXMuZ2V0UGFyYW1ldGVyRWRpdE1vZGUocGFyYW1ldGVyKX1cblx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0bXVsdGlwbGVMaW5lcz17aXNNdWx0aUxpbmVUZXh0KHBhcmFtZXRlcil9XG5cdFx0XHRcdHJlcXVpcmVkPXtjb21waWxlRXhwcmVzc2lvbihpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbihwYXJhbWV0ZXIsIHRoaXMuYWN0aW9uLCBjb252ZXJ0VHlwZXModGhpcy5tZXRhTW9kZWwpKSl9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmllbGRDaGFuZ2UoZSwgcGFyYW1ldGVyKX1cblx0XHRcdFx0dmFsdWVIZWxwPXtoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSA/IGdlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lLCBcIkZpZWxkVmFsdWVIZWxwXCJdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0ZGVwZW5kZW50cz17dGhpcy5jcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0KX1cblx0XHRcdFx0dmlzaWJsZT17Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyLm5hbWUgPT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIixcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0bm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwYXJhbWV0ZXIuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZSwgXCJMYWJlbFwiXSldfVxuXHRcdFx0XHRhZGRpdGlvbmFsVmFsdWU9e2FkZGl0aW9uYWxWYWx1ZX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSB2YWx1ZUhlbHAgIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJDb250ZXh0IFRoZSBwYXJhbWV0ZXIgY29udGV4dFxuXHQgKiBAcmV0dXJucyBBIHZhbHVlSGVscCBpZiB0aGUgcGFyYW1ldGVyIGhhcyBhIFZILCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dDogQ29udGV4dCk6IFZhbHVlSGVscCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDxWYWx1ZUhlbHBcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lLCBcIkZpZWxkVmFsdWVIZWxwXCJdKX1cblx0XHRcdFx0ZGVsZWdhdGU9e3tcblx0XHRcdFx0XHRuYW1lOiBcInNhcC9mZS9tYWNyb3MvdmFsdWVoZWxwL1ZhbHVlSGVscERlbGVnYXRlXCIsXG5cdFx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoOiB0aGlzLmFjdGlvbi5pc0JvdW5kXG5cdFx0XHRcdFx0XHRcdD8gYCR7Z2V0VGFyZ2V0TmF2aWdhdGlvblBhdGgoZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEFjdGlvblBhcmFtZXRlcj4ocGFyYW1ldGVyQ29udGV4dCkpfS8ke1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hY3Rpb25OYW1lXG5cdFx0XHRcdFx0XHRcdCAgfS8ke3BhcmFtZXRlci5uYW1lfWBcblx0XHRcdFx0XHRcdFx0OiBgLyR7dGhpcy5hY3Rpb24ubmFtZS5zdWJzdHJpbmcodGhpcy5hY3Rpb24ubmFtZS5sYXN0SW5kZXhPZihcIi5cIikgKyAxKX0vJHtwYXJhbWV0ZXIubmFtZX1gLFxuXHRcdFx0XHRcdFx0cXVhbGlmaWVyczoge30sXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBRdWFsaWZpZXI6IFwiXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH19XG5cdFx0XHRcdHZhbGlkYXRlSW5wdXQ9e3JlcXVpcmVzVmFsaWRhdGlvbihwYXJhbWV0ZXIpfVxuXHRcdFx0XHR0eXBlYWhlYWQ9e1xuXHRcdFx0XHRcdDxQb3BvdmVyPlxuXHRcdFx0XHRcdFx0PE1UYWJsZVxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RoaXMuYWN0aW9uTmFtZSwgcGFyYW1ldGVyLm5hbWUsIFwiUG9wb3ZlclwiLCBcInF1YWxpZmllclwiXSl9XG5cdFx0XHRcdFx0XHRcdGNhc2VTZW5zaXRpdmU9e1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWN0aW9uLmlzQm91bmRcblx0XHRcdFx0XHRcdFx0XHRcdD8gdXNlQ2FzZVNlbnNpdGl2ZUZpbHRlclJlcXVlc3RzKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxBY3Rpb25QYXJhbWV0ZXI+KHBhcmFtZXRlckNvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjb252ZXJ0VHlwZXModGhpcy5tZXRhTW9kZWwpLmVudGl0eUNvbnRhaW5lci5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8uRmlsdGVyRnVuY3Rpb25zIGFzIHVua25vd24gYXMgc3RyaW5nW10pID8/IFtdXG5cdFx0XHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0XHRcdDogTW9kZWxIZWxwZXIuaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKHRoaXMubWV0YU1vZGVsKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHVzZUFzVmFsdWVIZWxwPXshIXBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24/LlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc31cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0XHR9XG5cdFx0XHRcdGRpYWxvZz17dGhpcy5jcmVhdGVGaWVsZFZIRGlhbG9nKHBhcmFtZXRlcil9XG5cdFx0XHQ+PC9WYWx1ZUhlbHA+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBWYWx1ZUhlbHAgZGlhbG9nIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIEEgZGlhbG9nIGlmIHRoZSBwYXJhbWV0ZXIgaGFzIGEgVkgsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgY3JlYXRlRmllbGRWSERpYWxvZyhwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFZIRGlhbG9nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAocGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPy52YWx1ZU9mKCkgIT09IHRydWUpIHtcblx0XHRcdHJldHVybiA8VkhEaWFsb2cgLz47XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGZpZWxkIGNoYW5nZSBldmVudCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgdWk1IGV2ZW50XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBQcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBoYW5kbGVGaWVsZENoYW5nZShldmVudDogTXVsdGlWYWx1ZUZpZWxkJENoYW5nZUV2ZW50IHwgRmllbGQkQ2hhbmdlRXZlbnQsIHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZmllbGRQcm9taXNlID0gKGV2ZW50IGFzIEZpZWxkJENoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJwcm9taXNlXCIpO1xuXHRcdGNvbnN0IGZpZWxkID0gKGV2ZW50IGFzIEZpZWxkJENoYW5nZUV2ZW50KS5nZXRTb3VyY2UoKSBhcyBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZDtcblx0XHRjb25zdCBwYXJhbWV0ZXJJbmZvID0gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5maW5kKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkID09PSBmaWVsZCk7XG5cdFx0aWYgKCFwYXJhbWV0ZXJJbmZvKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2UgPSBmaWVsZFByb21pc2U7XG5cdFx0Ly8gZmllbGQgdmFsdWUgaXMgYmVpbmcgY2hhbmdlZCwgdGh1cyBleGlzdGluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoYXQgZmllbGQgYXJlIG5vdCB2YWxpZCBhbnltb3JlXG5cdFx0dGhpcy5yZW1vdmVNZXNzYWdlc0ZvclBhcmFtZXRlcihwYXJhbWV0ZXIpO1xuXHRcdHRyeSB7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlID0gYXdhaXQgZmllbGRQcm9taXNlO1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXNbcGFyYW1ldGVySW5mby5wYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdFx0cGFyYW1ldGVySW5mby5oYXNFcnJvciA9IGZhbHNlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRkZWxldGUgcGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdHBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSB0cnVlO1xuXHRcdFx0QWN0aW9uUnVudGltZS5fYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvOiBwYXJhbWV0ZXJJbmZvLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IChlcnJvciBhcyB7IG1lc3NhZ2U6IHN0cmluZyB9KS5tZXNzYWdlXG5cdFx0XHRcdH1cblx0XHRcdF0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBGaWxlVXBsb2FkZXIgY2hhbmdlIGV2ZW50IGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBTQVBVSTUgZXZlbnQgY29ycmVzcG9uZGluZyB0byB0aGUgRmlsZVVwbG9hZGVyIGNoYW5nZSBldmVudC5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHJldHVybnMgUHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlKGV2ZW50OiBGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsIHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZmlsZXMgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJmaWxlc1wiKTtcblx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHQvLyBjb3JyZWN0aW9uIG5lZWRlZCBmb3IgbXVsdGlwbGUgZmlsZSB1cGxvYWRlcnNcblx0XHRjb25zdCBwYXJhbWV0ZXJJbmZvID0gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5maW5kKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkID09PSBmaWxlVXBsb2FkZXIpO1xuXHRcdGlmICghcGFyYW1ldGVySW5mbyB8fCAhZmlsZXMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5yZW1vdmVNZXNzYWdlc0ZvclBhcmFtZXRlcihwYXJhbWV0ZXIpO1xuXHRcdHBhcmFtZXRlckluZm8udmFsdWUgPSB7fTtcblx0XHRpZiAodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpKSB7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlW3RoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8ubmFtZSBhcyBrZXlvZiB0eXBlb2YgcGFyYW1ldGVySW5mby52YWx1ZV0gPVxuXHRcdFx0XHRhd2FpdCB0aGlzLmdldEJhc2U2NEZpbGUoZmlsZXMpO1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZVsodGhpcy5nZXRNaW1lVHlwZVBhdGgocGFyYW1ldGVyKSBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248c3RyaW5nPikucGF0aF0gPVxuXHRcdFx0XHQoZmlsZXNbMF0gYXMgRmlsZSkudHlwZSB8fCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZVt0aGlzLmdldEZpbGVOYW1lUGF0aChwYXJhbWV0ZXIpIGFzIHN0cmluZ10gPSAoZmlsZXNbMF0gYXMgRmlsZSkubmFtZTtcblx0XHRcdHBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSBmYWxzZTtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5wYXJhbWV0ZXJzVmFsdWVzW3BhcmFtZXRlckluZm8ucGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBmaWxlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdHJlYW0gcHJvcGVydHkgaW4gdGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFBhdGggYXMgYSBzdHJpbmcuXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpbGVOYW1lUGF0aChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/LkNvbnRlbnREaXNwb3NpdGlvbj8uRmlsZW5hbWUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4pLnBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBNaW1lIHR5cGUgd2l0aCB0aGUgYXNzb2NpYXRlZCBTdHJlYW0gcHJvcGVydHkgaW4gdGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBwYXRoIGV4cHJlc3Npb24uXG5cdCAqL1xuXHRwcml2YXRlIGdldE1pbWVUeXBlUGF0aChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uTWVkaWFUeXBlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgU3RyZWFtIHByb3BlcnR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgQ29tcGxleCB0eXBlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBFZG0uU3RyZWFtIHByb3BlcnR5LlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKHBhcmFtZXRlci50eXBlUmVmZXJlbmNlIGFzIENvbXBsZXhUeXBlKS5wcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uU3RyZWFtXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlLlxuXHQgKiBAcGFyYW0gZmlsZXMgVGhlIGZpbGUgc2VsZWN0ZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBmaWxlIGNvbnRlbnQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldEJhc2U2NEZpbGUoZmlsZXM6IG9iamVjdFtdKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0XHRyZWFkZXIub25sb2FkID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoIXJlYWRlci5yZXN1bHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzb2x2ZSgocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpLnNwbGl0KFwiLFwiKVsxXSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoKGZpbGVzIGFzIHVua25vd24gYXMgRmlsZUxpc3QpLml0ZW0oMCkhKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKi9cblx0cHJpdmF0ZSByZW1vdmVNZXNzYWdlc0ZvclBhcmFtZXRlcihwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IHZvaWQge1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBjb250cm9sSWQgPSBnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lXSk7XG5cdFx0Ly8gYWxzbyByZW1vdmUgbWVzc2FnZXMgYXNzaWduZWQgdG8gaW5uZXIgY29udHJvbHMsIGJ1dCBhdm9pZCByZW1vdmluZyBtZXNzYWdlcyBmb3IgZGlmZmVyZW50IHBhcmFtZXRlcnMgKHdpdGggbmFtZSBiZWluZyBzdWJzdHJpbmcgb2YgYW5vdGhlciBwYXJhbWV0ZXIgbmFtZSlcblx0XHRjb25zdCByZWxldmFudE1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKChtc2c6IE1lc3NhZ2UpID0+XG5cdFx0XHRtc2cuZ2V0Q29udHJvbElkcygpLnNvbWUoKGlkOiBzdHJpbmcpID0+IGNvbnRyb2xJZC5zcGxpdChcIi1cIikuaW5jbHVkZXMoaWQpKVxuXHRcdCk7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKHJlbGV2YW50TWVzc2FnZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIEZvcm1FbGVtZW50cyBhbG9uZyB3aXRoIHRoZSBhcnJheSBvZiBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIHBhcmFtZXRlciBpbmZvcm1hdGlvbiBhbG9uZyB3aXRoIHRoZSBGb3JtRWxlbWVudHMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldEZvcm1FbGVtZW50cyhwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8RGlhbG9nQ29udGVudFR5cGVzPiB7XG5cdFx0Y29uc3QgZm9ybUVsZW1lbnRzID0gYXdhaXQgdGhpcy5jcmVhdGVGb3JtRWxlbWVudChwYXJhbWV0ZXIpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRmb3JtRWxlbWVudHM6IGZvcm1FbGVtZW50cyxcblx0XHRcdHBhcmFtZXRlcjogcGFyYW1ldGVyXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIGRpYWxvZyBvciB1bmRlZmluZWQuXG5cdCAqL1xuXHRnZXREaWFsb2coKTogRGlhbG9nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5kaWFsb2c7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBkaWFsb2cuXG5cdCAqL1xuXHRhc3luYyBjcmVhdGVEaWFsb2coKTogUHJvbWlzZTxEaWFsb2c+IHtcblx0XHRsZXQgZGlhbG9nQ29udGVudHM6IEZvcm1FbGVtZW50VHlwZVtdID0gW107XG5cdFx0bGV0IGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnM6IERpYWxvZ0NvbnRlbnRUeXBlc1tdID0gW107XG5cdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVycyA9IHRoaXMuYWN0aW9uLmlzQm91bmQgPyB0aGlzLmFjdGlvbi5wYXJhbWV0ZXJzLnNsaWNlKDEpIDogdGhpcy5hY3Rpb24ucGFyYW1ldGVycztcblxuXHRcdC8vIElmIE9wZXJhdGlvbmFsUGFyYW1ldGVyRmFjZXRzIGhhdmUgYmVlbiBkZWZpbmVkIGZvciB0aGlzIGFjdGlvbiwgdGhleSBhcmUgdXNlZCB0byBncm91cCB0aGUgYWN0aW9uIHBhcmFtZXRlcnNcblx0XHQvLyB3aXRoIHRpdGxlc1xuXHRcdGlmICh0aGlzLmFjdGlvbi5hbm5vdGF0aW9ucz8uVUk/Lk9wZXJhdGlvblBhcmFtZXRlckZhY2V0cykge1xuXHRcdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVyR3JvdXBzOiBFbGVtZW50R3JvdXBbXSA9IFtdO1xuXHRcdFx0dGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuVUk/Lk9wZXJhdGlvblBhcmFtZXRlckZhY2V0cz8uZm9yRWFjaChmdW5jdGlvbiAoZmFjZXQ6IFJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRcdGxldCBmYWNldFRpdGxlO1xuXHRcdFx0XHRpZiAoZmFjZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRcdFx0ZmFjZXRUaXRsZSA9IGZhY2V0LkxhYmVsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChoYXNGaWVsZEdyb3VwVGFyZ2V0KGZhY2V0KSkge1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkR3JvdXAgPSBmYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXBUeXBlO1xuXHRcdFx0XHRcdGNvbnN0IGdyb3VwZWRBY3Rpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXSA9IFtdO1xuXG5cdFx0XHRcdFx0ZmllbGRHcm91cC5EYXRhLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRncm91cGVkQWN0aW9uUGFyYW1ldGVycy5wdXNoKChncm91cCBhcyBEYXRhRmllbGQpLlZhbHVlLiR0YXJnZXQgYXMgQWN0aW9uUGFyYW1ldGVyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJHcm91cHMucHVzaCh7XG5cdFx0XHRcdFx0XHRmYWNldFRpdGxlOiBmYWNldFRpdGxlIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRkYXRhOiBncm91cGVkQWN0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gR2V0IHRoZSBmaWVsZHMgZm9yIGVhY2ggcGFyYW1ldGVyIGdyb3VwXG5cdFx0XHRjb25zdCBnZXRHcm91cEZvcm0gPSBhc3luYyAoZ3JvdXA6IEVsZW1lbnRHcm91cCk6IFByb21pc2U8RWxlbWVudEdyb3VwQ29udmVydGVkPiA9PiB7XG5cdFx0XHRcdGNvbnN0IGZvcm1FbGVtZW50cyA9IGF3YWl0IFByb21pc2UuYWxsKGdyb3VwLmRhdGEubWFwKHRoaXMuZ2V0Rm9ybUVsZW1lbnRzLmJpbmQodGhpcykpKTtcblx0XHRcdFx0cmV0dXJuIHsgZmFjZXRUaXRsZTogZ3JvdXAuZmFjZXRUaXRsZSwgZGF0YTogZm9ybUVsZW1lbnRzIH07XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBmb3JtRGF0YSA9IGFjdGlvblBhcmFtZXRlckdyb3Vwcy5tYXAoYXN5bmMgKHBhcmFtZXRlckdyb3VwKSA9PiBnZXRHcm91cEZvcm0ocGFyYW1ldGVyR3JvdXApKTtcblx0XHRcdGNvbnN0IG9wRmFjZXRzID0gYXdhaXQgUHJvbWlzZS5hbGwoZm9ybURhdGEpO1xuXG5cdFx0XHQvLyBBZGQgdGhlIHRpdGxlIGNvbnRyb2wgdG8gZWFjaCBwYXJhbWV0ZXIgZ3JvdXBcblx0XHRcdG9wRmFjZXRzLmZvckVhY2goKGRpYWxvZ0NvbnRlbnQpID0+IHtcblx0XHRcdFx0ZGlhbG9nQ29udGVudHMucHVzaCg8VGl0bGUgdGV4dD17ZGlhbG9nQ29udGVudC5mYWNldFRpdGxlfSAvPik7XG5cdFx0XHRcdHJldHVybiBkaWFsb2dDb250ZW50LmRhdGEubWFwKChlbGVtZW50KSA9PiBkaWFsb2dDb250ZW50cy5wdXNoKGVsZW1lbnQuZm9ybUVsZW1lbnRzKSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0b3BGYWNldHMuZm9yRWFjaChmdW5jdGlvbiAob3BGYWNldCkge1xuXHRcdFx0XHRvcEZhY2V0LmRhdGEuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdFx0XHRcdGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMucHVzaChlbGVtZW50KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gTm8gT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzIGhhdmUgYmVlbiBkZWZpbmVkXG5cdFx0XHRkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzID0gYXdhaXQgUHJvbWlzZS5hbGwoYWN0aW9uUGFyYW1ldGVycy5tYXAodGhpcy5nZXRGb3JtRWxlbWVudHMuYmluZCh0aGlzKSkpO1xuXHRcdFx0ZGlhbG9nQ29udGVudHMgPSBkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzLm1hcCgoZGlhbG9nQ29udGVudCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZGlhbG9nQ29udGVudC5mb3JtRWxlbWVudHM7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLnJlZ2lzdGVyQWN0aW9uUGFyYW1ldGVySW5mbyhkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgZGVmZXJyZWQgY3JlYXRlIHdlIGhhdmUgbm8gdmlldywgc28gd2UgbmVlZCB0byBnZXQgdGhlIHJlc291cmNlIG1vZGVsIGZyb20gdGhlIGFwcCBjb21wb25lbnRcblxuXHRcdGNvbnN0IG1lc3NhZ2VTdHJpcCA9IHRoaXMuZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCgpO1xuXG5cdFx0Y29uc3QgZW5kQnV0dG9uID0gKFxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHRoaXMuYWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJDYW5jZWxcIl0pfVxuXHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX0NBTkNFTFwiKX1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLm9uQ2FuY2VsLmJpbmQodGhpcykoKTtcblx0XHRcdFx0fX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRjb25zdCBkaWFsb2cgPSAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmdldFRpdGxlVGV4dCh0aGlzLnBhcmFtZXRlcnMubGFiZWwpfVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHRoaXMuYWN0aW9uTmFtZV0pfVxuXHRcdFx0XHRlc2NhcGVIYW5kbGVyPXt0aGlzLm9uQ2FuY2VsLmJpbmQodGhpcyl9XG5cdFx0XHRcdGRyYWdnYWJsZT17dHJ1ZX1cblx0XHRcdFx0cmVzaXphYmxlPXt0cnVlfVxuXHRcdFx0XHRhZnRlckNsb3NlPXt0aGlzLmFmdGVyQ2xvc2UuYmluZCh0aGlzKX1cblx0XHRcdFx0YmVmb3JlT3Blbj17dGhpcy5iZWZvcmVPcGVuLmJpbmQodGhpcyl9XG5cdFx0XHRcdGFmdGVyT3Blbj17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWZ0ZXJPcGVuKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGluaXRpYWxGb2N1cz17ZW5kQnV0dG9ufSAvLyBUaGUgaW5pdGlhbCBmb2N1cyBpcyBzZXQgcHJvZ3JhbW1hdGljYWxseSBpbiBhZnRlck9wZW4sIHRvIGF2b2lkIG9wZW5pbmcgdGhlIFZIIGRpYWxvZ1xuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGJlZ2luQnV0dG9uOiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgdGhpcy5hY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIk9rXCJdKX1cblx0XHRcdFx0XHRcdFx0dGV4dD17XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uID09PSB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfU0FQRkVfQUNUSU9OX0NSRUFURV9CVVRUT05fQ09OVElOVUVcIilcblx0XHRcdFx0XHRcdFx0XHRcdDogdGhpcy5nZXRCZWdpbkJ1dHRvbkxhYmVsKHRoaXMucGFyYW1ldGVycy5sYWJlbClcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25BcHBseS5iaW5kKHRoaXMpKCk7XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJFbXBoYXNpemVkXCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRlbmRCdXR0b246IGVuZEJ1dHRvbixcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHRcdFx0XHQvLyBAdHMtaWdub3JlICh1bmtub3duIHByb3BlcnR5IGJpbmRpbmcpXG5cdFx0XHRcdFx0XHQvLyBjb2x1bW5zTSBvbmx5IHRha2VzIGVmZmVjdCBpZiB0aGVyZSBhcmUgdGl0bGVzIGluIHRoZSBjb250ZW50LlxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0e21lc3NhZ2VTdHJpcCAmJiA8TWVzc2FnZVN0cmlwIHNob3dJY29uPVwidHJ1ZVwiIHRleHQ9e21lc3NhZ2VTdHJpcH0+PC9NZXNzYWdlU3RyaXA+fVxuXHRcdFx0XHRcdFx0XHQ8U2ltcGxlRm9ybSBjb2x1bW5zTT17XCIyXCJ9IGVkaXRhYmxlPVwidHJ1ZVwiIGxhYmVsU3Bhbkw9e1wiMTJcIn0gbGFiZWxTcGFuTT17XCIxMlwifSBiaW5kaW5nPXtcIiRQYXJhbWV0ZXJcIn0+XG5cdFx0XHRcdFx0XHRcdFx0e3sgY29udGVudDogZGlhbG9nQ29udGVudHMgfX1cblx0XHRcdFx0XHRcdFx0PC9TaW1wbGVGb3JtPlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9EaWFsb2c+XG5cdFx0KTtcblx0XHR0aGlzLmRpYWxvZyA9IGRpYWxvZztcblx0XHRyZXR1cm4gZGlhbG9nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGxhYmVsIGZvciB0aGUgYmVnaW4gYnV0dG9uIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBhY3Rpb25MYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgbGFiZWwuXG5cdCAqL1xuXHRwcml2YXRlIGdldEJlZ2luQnV0dG9uTGFiZWwoYWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qga2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19BQ1RJT05fTkFNRVwiO1xuXHRcdGNvbnN0IGRlZmF1bHRLZXkgPSBcIkNfQ09NTU9OX0RJQUxPR19PS1wiO1xuXHRcdHJldHVybiB0aGlzLmdldE92ZXJyaWRkZW5UZXh0KGtleSwgZGVmYXVsdEtleSwgYWN0aW9uTGFiZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBhY3Rpb25MYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgdGl0bGUuXG5cdCAqL1xuXHRwcml2YXRlIGdldFRpdGxlVGV4dChhY3Rpb25MYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0XHRjb25zdCBrZXkgPSBcIkFDVElPTl9QQVJBTUVURVJfRElBTE9HX0FDVElPTl9USVRMRVwiO1xuXHRcdGNvbnN0IGRlZmF1bHRLZXkgPSBcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19USVRMRVwiO1xuXHRcdHJldHVybiB0aGlzLmdldE92ZXJyaWRkZW5UZXh0KGtleSwgZGVmYXVsdEtleSwgYWN0aW9uTGFiZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYW4gb3ZlcnJpZGRlbiB0ZXh0IGZvciBtZXNzYWdlIHN0cmlwLlxuXHQgKiBAcmV0dXJucyBUaGUgb3ZlcnJpZGRlbiB0ZXh0IGZvciBtZXNzYWdlIHN0cmlwLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDdXN0b21BY3Rpb25NZXNzYWdlU3RyaXBUZXh0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qga2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19NRVNTQUdFX1RFWFRcIjtcblx0XHRsZXQgYm91bmRBY3Rpb25OYW1lID0gdGhpcy5hY3Rpb25OYW1lO1xuXHRcdGJvdW5kQWN0aW9uTmFtZSA9IGJvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikucG9wKCkgPz8gYm91bmRBY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIHRoaXMuZW50aXR5U2V0TmFtZSA/IGAke3RoaXMuZW50aXR5U2V0TmFtZX18JHtib3VuZEFjdGlvbk5hbWV9YCA6IFwiXCI7XG5cdFx0aWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3N1ZmZpeFJlc291cmNlS2V5fWApKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5LCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3RoaXMuZW50aXR5U2V0TmFtZX1gKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBgJHt0aGlzLmVudGl0eVNldE5hbWV9YCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX1gKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhbiBvdmVycmlkZGVuIHRleHQuXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgYW4gb3ZlcnJpZGRlbiB0ZXh0XG5cdCAqIEBwYXJhbSBkZWZhdWx0S2V5IFRoZSBkZWZhdWx0IGtleSBmb3IgdGhlIHRleHRcblx0ICogQHBhcmFtIGFjdGlvbkxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBvdmVycmlkZGVuIHRleHQgb3IgbGFiZWwuXG5cdCAqL1xuXHRwcml2YXRlIGdldE92ZXJyaWRkZW5UZXh0KGtleTogc3RyaW5nLCBkZWZhdWx0S2V5OiBzdHJpbmcsIGFjdGlvbkxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgYm91bmRBY3Rpb25OYW1lID0gdGhpcy5hY3Rpb25OYW1lO1xuXHRcdGJvdW5kQWN0aW9uTmFtZSA9IGJvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikucG9wKCkgPz8gYm91bmRBY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIHRoaXMuZW50aXR5U2V0TmFtZSA/IGAke3RoaXMuZW50aXR5U2V0TmFtZX18JHtib3VuZEFjdGlvbk5hbWV9YCA6IFwiXCI7XG5cdFx0aWYgKGFjdGlvbkxhYmVsKSB7XG5cdFx0XHRpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9fCR7c3VmZml4UmVzb3VyY2VLZXl9YCkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3RoaXMuZW50aXR5U2V0TmFtZX1gKSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5LCB1bmRlZmluZWQsIGAke3RoaXMuZW50aXR5U2V0TmFtZX1gKTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9YCkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYWN0aW9uTGFiZWw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChkZWZhdWx0S2V5KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgcHJlc3MgZXZlbnQgb2YgdGhlIGJlZ2luIGJ1dHRvbiBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgb25BcHBseSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBwcmV2ZW50IG11bHRpcGxlIHByZXNzIGV2ZW50cy4gVGhlIEJ1c3lMb2NrZXIgaXMgbm90IGZhc3QgZW5vdWdoLiAoQkNQOiAyMzcwMTMwMjEwKVxuXHRcdGlmICh0aGlzLmJ1dHRvbkxvY2sgfHwgIXRoaXMuZGlhbG9nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGRpYWxvZyA9IHRoaXMuZGlhbG9nO1xuXG5cdFx0Y29uc3QgcGFyYW1ldGVyQ29udGV4dCA9IChkaWFsb2cuZ2V0T2JqZWN0QmluZGluZygpIGFzIE9EYXRhQ29udGV4dEJpbmRpbmcgfCB1bmRlZmluZWQpPy5nZXRQYXJhbWV0ZXJDb250ZXh0KCk7XG5cblx0XHQvLyBsb2NrIHRoZSBidXR0b24gdG8gcHJldmVudCBtdWx0aXBsZSBwcmVzcyBldmVudHNcblx0XHR0aGlzLmJ1dHRvbkxvY2sgPSB0cnVlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhkaWFsb2cpO1xuXG5cdFx0Ly8gdmFsaWRhdGUgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzLiBJdCBpcyBpbXBvcnRhbnQgdG8gZG8gdGhpcyBhcyBhIGZpcnN0IG9wZXJhdGlvbiBhcyB0aGVyZSBpcyBhXG5cdFx0Ly8gd2FpdCBkb25lIGZvciB0aGUgdmFsdWUgY2hhbmdlcyB0byBjb21wbGV0ZSB1cGRhdGluZyB0aGUgbW9kZWwuIEV2ZW4gaW4gY2FzZXMgd2hlcmUgdmFsaWRhdGlvbiBpc1xuXHRcdC8vIG5vdCBjb25maWd1cmVkIHRoaXMgcHJvbWlzZSBuZWVkcyB0byBiZSByZXNvbHZlZCB0byByZWFkIGZyb20gdGhlIG1vZGVsIHRvIHJldHVybiB1c2VyIGVudGVyZWQgdmFsdWVzLlxuXHRcdGlmICghKGF3YWl0IEFjdGlvblJ1bnRpbWUudmFsaWRhdGVQcm9wZXJ0aWVzKHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MsIHRoaXMucmVzb3VyY2VNb2RlbCkpKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayhkaWFsb2cpO1xuXHRcdFx0dGhpcy5idXR0b25Mb2NrID0gZmFsc2U7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbmV3VmFsdWVzRGljdGlvbmFyeSA9IE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdC4uLnRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvcykgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXIgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy5wYXJhbWV0ZXI7XG5cdFx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdFx0aWYgKHBhcmFtZXRlci5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdFx0XHR2YWx1ZSA9IE9iamVjdC52YWx1ZXMoKGRpYWxvZy5nZXRNb2RlbChcIm12ZnZpZXdcIikgYXMgSlNPTk1vZGVsKS5nZXRQcm9wZXJ0eShgLyR7cGFyYW1ldGVyLm5hbWV9YCkgPz8ge30pLm1hcChcblx0XHRcdFx0XHRcdChwYXJhbVZhbHVlKSA9PiAocGFyYW1WYWx1ZSBhcyB7IEtleT86IFByaW1pdGl2ZVR5cGUgfSk/LktleVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIXBhcmFtZXRlci50eXBlLnN0YXJ0c1dpdGgoXCJFZG0uXCIpICYmIHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0XHRcdC8vIEZpbGUgVXBsb2FkZXJcblx0XHRcdFx0XHR2YWx1ZSA9IGFjdGlvblBhcmFtZXRlckluZm9zLnZhbHVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFJlZ3VsYXIgZmllbGQgKG5vbi1jb2xsZWN0aW9uLCBub24tZmlsZSlcblx0XHRcdFx0XHQvL1xuXHRcdFx0XHRcdC8vIElNUE9SVEFOVDogV2UgcHJlZmVyIGFjdGlvblBhcmFtZXRlckluZm9zLnZhbHVlIHdoaWNoIHJlcHJlc2VudHMgdGhlIGFjdHVhbCB1c2VyIGlucHV0XG5cdFx0XHRcdFx0Ly8gZnJvbSB0aGUgZGlhbG9nIGZpZWxkLCB2YWxpZGF0ZWQgYW5kIHByb2Nlc3NlZCBieSBoYW5kbGVGaWVsZENoYW5nZSgpIG92ZXIgcGFyYW1ldGVyQ29udGV4dC5nZXRQcm9wZXJ0eSgpXG5cdFx0XHRcdFx0Ly8gYmVjYXVzZSB0aGUgcGFyYW1ldGVyQ29udGV4dCBjYW4gY29udGFpbiBtb3JlIHRoYW4ganVzdCB0aGUgYWN0aW9uIHBhcmFtZXRlciBpdHNlbGYuXG5cdFx0XHRcdFx0Ly8gSW4gdGlja2V0IENTMjAyNTAwMTA5NjY4NDQgcGFyYW1ldGVyQ29udGV4dC5nZXRQcm9wZXJ0eSgpIHJldHVybmVkIHRoZSB3cm9uZyB2YWx1ZSBkdWVcblx0XHRcdFx0XHQvLyB0byBhIG5hbWUgY2xhc2ggYmV0d2VlbiB0aGUgcGFyYW1ldGVyIGFuZCBpdHMgdGV4dCBhbm5vdGF0aW9uIHRhcmdldC5cblx0XHRcdFx0XHQvLyBFZGdlIENhc2U6IElmIHRoZSB1c2VyIG5ldmVyIGludGVyYWN0ZWQgd2l0aCB0aGUgZmllbGQgKHZhbHVlIGlzIHVuZGVmaW5lZCksXG5cdFx0XHRcdFx0Ly8gZmFsbCBiYWNrIHRvIHBhcmFtZXRlckNvbnRleHQgd2hpY2ggY29udGFpbnMgdGhlIGRlZmF1bHQgdmFsdWUgc2V0IGJ5XG5cdFx0XHRcdFx0Ly8gc2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcygpIHZpYSBzZXRQYXJhbWV0ZXIoKSBjYWxscy5cblx0XHRcdFx0XHR2YWx1ZSA9IGFjdGlvblBhcmFtZXRlckluZm9zLnZhbHVlID8/IHBhcmFtZXRlckNvbnRleHQ/LmdldFByb3BlcnR5KHBhcmFtZXRlci5uYW1lKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB7IFtwYXJhbWV0ZXIubmFtZV06IHZhbHVlIH07XG5cdFx0XHR9KVxuXHRcdCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0Y29uc3QgaXNOZXdWYWx1ZSA9IE9iamVjdC52YWx1ZXMobmV3VmFsdWVzRGljdGlvbmFyeSkuc29tZSgodmFsdWUpID0+ICEhdmFsdWUpO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVzb2x2ZShuZXdWYWx1ZXNEaWN0aW9uYXJ5KTtcblxuXHRcdHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQsIGlzTmV3VmFsdWUpO1xuXHRcdC8vIER1ZSB0byB1c2luZyB0aGUgc2VhcmNoIGFuZCB2YWx1ZSBoZWxwcyBvbiB0aGUgYWN0aW9uIGRpYWxvZyB0cmFuc2llbnQgbWVzc2FnZXMgY291bGQgYXBwZWFyXG5cdFx0Ly8gd2UgbmVlZCBhbiBVWCBkZXNpZ24gZm9yIHRob3NlIHRvIHNob3cgdGhlbSB0byB0aGUgdXNlciAtIGZvciBub3cgcmVtb3ZlIHRoZW0gYmVmb3JlIGNvbnRpbnVpbmdcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgZGlhbG9nIHRvIHN0YXJ0IGEgbmV3IGl0ZXJhdGlvbi5cblx0ICpcblx0ICovXG5cdHB1YmxpYyByZXNldFN0YXRlKCk6IHZvaWQge1xuXHRcdHRoaXMudW5sb2NrRGlhbG9nKCk7XG5cdFx0dGhpcy5idXR0b25Mb2NrID0gZmFsc2U7XG5cdFx0dGhpcy51cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yKCk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Jlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVqZWN0ID0gcmVqZWN0O1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZSB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBkaWFsb2cgdG8gb25lIHdpdGggcHJpb3JpdHkgbWVzc2FnZS5cblx0ICpcblx0ICogT24gaW5pdGlhbCBhY3Rpb24gZXhlY3V0aW9uLCB3ZSBtaWdodCBoYXZlIGJvdW5kIG1lc3NhZ2VzIHdpdGggYW55IHNlbGVjdGVkIGNvbnRleHRzIGFzIHRhcmdldCBhcGFydCBmcm9tIHRoZSBkaWFsb2cncyBpbml0aWFsIGNvbnRleHQuXG5cdCAqIFdlIGNoYW5nZSB0aGUgYmluZGluZyBjb250ZXh0IG9mIGRpYWxvZyBmb3IgdGhlIHBhcmFtZXRlciBmaWVsZHMnIHRvIGdldCB0aGUgdmFsaWQgdmFsdWUgc3RhdGUgZnJvbSB0aGUgcHJpb3JpdHkgYm91bmQgbWVzc2FnZS5cblx0ICovXG5cdHVwZGF0ZURpYWxvZ0JpbmRpbmdDb250ZXh0Rm9yRXJyb3IoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPCAyKSB7XG5cdFx0XHQvLyBXZSB3b3VsZCBuZWVkIHRvIHN3aXRjaCB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBkaWFsb2cgb25seSB3aGVuIHdlIGhhdmUgbXVsdGlwbGUgY29udGV4dHMgZm9yIGV4ZWN1dGluZyB0aGUgYWN0aW9uLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCB3YXJuaW5nQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsIGluZm9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBlcnJvbmVvdXNDdHggPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMuZmluZCgoY29udGV4dCkgPT4ge1xuXHRcdFx0Y29uc3QgbWVzc2FnZXMgPSBjb250ZXh0LmdldE1lc3NhZ2VzKCk7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZXMuc29tZSgobXNnKSA9PiB7XG5cdFx0XHRcdC8vIFdlIGhvbGQgZmlyc3QgY29udGV4dCB3aXRoIHdhcm5pbmcgb3IgaW5mbyBtZXNzYWdlcy5cblx0XHRcdFx0d2FybmluZ0NvbnRleHQgPSAhd2FybmluZ0NvbnRleHQgJiYgbXNnLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuV2FybmluZyA/IGNvbnRleHQgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGluZm9Db250ZXh0ID0gIWluZm9Db250ZXh0ICYmIG1zZy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uID8gY29udGV4dCA6IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gRXJyb3IgaXMgZm91bmQhISEgV2Ugc2hhbGwgZXhpdC5cblx0XHRcdFx0cmV0dXJuIG1zZy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0Y29uc3QgY29udGV4dFRvVXNlID0gZXJyb25lb3VzQ3R4ID8/IHdhcm5pbmdDb250ZXh0ID8/IGluZm9Db250ZXh0O1xuXG5cdFx0aWYgKGNvbnRleHRUb1VzZSkge1xuXHRcdFx0dGhpcy5kaWFsb2c/LnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHRUb1VzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIGJ1c3kgc3RhdGUgb2YgdGhlIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgdW5sb2NrRGlhbG9nKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmRpYWxvZyAmJiBCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMuZGlhbG9nKSkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5kaWFsb2cpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgY2FuY2VsIGFjdGlvbiBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHJpdmF0ZSBvbkNhbmNlbCgpOiB2b2lkIHtcblx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZWplY3QoRkVMaWJyYXJ5LkNvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdHRoaXMuY2xvc2VEaWFsb2coKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGRpYWxvZy5cblx0ICovXG5cdHB1YmxpYyBjbG9zZURpYWxvZygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5kaWFsb2cpIHtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uUGFyYW1ldGVyRGlhbG9nQ2xvc2VkPy4oKTtcblx0XHRcdC8vIHdoZW4gdGhlIGRpYWxvZyBpcyBjYW5jZWxsZWQsIG1lc3NhZ2VzIG5lZWQgdG8gYmUgcmVtb3ZlZCBpbiBjYXNlIHRoZSBzYW1lIGFjdGlvbiBzaG91bGQgYmUgZXhlY3V0ZWQgYWdhaW5cblx0XHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIodGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5kaWFsb2cuY2xvc2UoKTtcblx0XHR9XG5cdFx0dGhpcy5pc0RpYWxvZ09wZW4gPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgYWN0aW9uIHJlc3VsdC5cblx0ICovXG5cdGFzeW5jIG9wZW5EaWFsb2coKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmRpYWxvZykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRXJyb3Igb24gb3BlbmluZyB0aGUgZGlhbG9nXCIpO1xuXHRcdH1cblx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMoXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0dGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKSxcblx0XHRcdHRoaXMucGFyYW1ldGVyTW9kZWwsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHR0aGlzLnNldE1vZGVscyh0aGlzLmRpYWxvZyk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLnZpZXc/LmFkZERlcGVuZGVudCh0aGlzLmRpYWxvZyk7XG5cdFx0YXdhaXQgdGhpcy5zZXRPcGVyYXRpb25EZWZhdWx0VmFsdWVzKHRoaXMuZGlhbG9nKTtcblx0XHR0aGlzLmRpYWxvZy5vcGVuKCk7XG5cdFx0dGhpcy5pc0RpYWxvZ09wZW4gPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1vZGVsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIG93bmVyIG9mIHRoZSBkaWFsb2dcblx0ICovXG5cdHByaXZhdGUgc2V0TW9kZWxzKGRpYWxvZzogRGlhbG9nKTogdm9pZCB7XG5cdFx0ZGlhbG9nLnNldE1vZGVsKHRoaXMucGFyYW1ldGVyTW9kZWwsIFwicGFyYW1zTW9kZWxcIik7XG5cdFx0ZGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0bW9kZWw6IFwicGFyYW1zTW9kZWxcIlxuXHRcdH0pO1xuXHRcdGRpYWxvZy5zZXRNb2RlbCh0aGlzLnBhcmFtZXRlcnMubW9kZWwpO1xuXHRcdGRpYWxvZy5iaW5kRWxlbWVudCh7XG5cdFx0XHRwYXRoOiBgJHt0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID8gXCJcIiA6IFwiL1wifSR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdGRpYWxvZy5zZXRCaW5kaW5nQ29udGV4dCh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0pOyAvLyB1c2UgY29udGV4dCBvZiBmaXJzdCBzZWxlY3RlZCBsaW5lIGl0ZW1cblx0XHR9XG5cdFx0Ly8gZW1wdHkgbW9kZWwgdG8gYWRkIGVsZW1lbnRzIGR5bmFtaWNhbGx5IGRlcGVuZGluZyBvbiBudW1iZXIgb2YgTVZGIGZpZWxkcyBkZWZpbmVkIG9uIHRoZSBkaWFsb2dcblx0XHRkaWFsb2cuc2V0TW9kZWwobmV3IEpTT05Nb2RlbCh7fSksIFwibXZmdmlld1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyBiZWZvcmUgb3BlbmluZyB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gX2V2ZW50XG5cdCAqL1xuXHRwcml2YXRlIGJlZm9yZU9wZW4oX2V2ZW50OiBEaWFsb2ckQmVmb3JlT3BlbkV2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXYWl0IGZvciB0aGUgcGFyYW1ldGVyIHZhbHVlcyB0byBiZSBzZXQuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgY29udGFpbmluZyB0aGUgcGFyYW1ldGVyIHZhbHVlcy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyB3YWl0Rm9yUGFyYW1ldGVyc1ZhbHVlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+PiB7XG5cdFx0cmV0dXJuIHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiB0aGUgZGlhbG9nIGlzIG9wZW5lZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGlhbG9nIGlzIG9wZW5lZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzT3BlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pc0RpYWxvZ09wZW47XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIGJpbmRpbmdQYXJhbWV0ZXIgVGhlIGJpbmRpbmcgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIGRpYWxvZ1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShcblx0XHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcixcblx0XHRiaW5kaW5nUGFyYW1ldGVyOiBzdHJpbmcsXG5cdFx0ZGlhbG9nOiBEaWFsb2dcblx0KTogUHJvbWlzZTxQYXJhbWV0ZXJEZWZhdWx0VmFsdWU+IHtcblx0XHRjb25zdCBvcGVyYXRpb25CaW5kaW5nID0gZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXHRcdGNvbnN0IHBhcmFtZXRlck1vZGVsRGF0YSA9IHRoaXMucGFyYW1ldGVyTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IHBhcmFtTmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uUGFyYW1ldGVyRGVmYXVsdFZhbHVlO1xuXHRcdC8vIENhc2UgMTogVGhlcmUgaXMgYSBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvblxuXHRcdGlmIChkZWZhdWx0VmFsdWUpIHtcblx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMCAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkZWZhdWx0VmFsdWUpKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aEZvckNvbnRleHQ6IHN0cmluZyA9XG5cdFx0XHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyICYmIGRlZmF1bHRWYWx1ZS5wYXRoLnN0YXJ0c1dpdGgoYCR7YmluZGluZ1BhcmFtZXRlcn0vYClcblx0XHRcdFx0XHRcdFx0PyBkZWZhdWx0VmFsdWUucGF0aC5yZXBsYWNlKGAke2JpbmRpbmdQYXJhbWV0ZXJ9L2AsIFwiXCIpXG5cdFx0XHRcdFx0XHRcdDogZGVmYXVsdFZhbHVlLnBhdGg7XG5cdFx0XHRcdFx0bGV0IHBhcmFtVmFsdWUgPSBhd2FpdCBDb21tb25VdGlscy5yZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoZGVmYXVsdFZhbHVlLnBhdGgsIG9wZXJhdGlvbkJpbmRpbmcuZ2V0TW9kZWwoKSk7XG5cdFx0XHRcdFx0aWYgKHBhcmFtVmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdHBhcmFtVmFsdWUgPSBhd2FpdCBvcGVyYXRpb25CaW5kaW5nLmdldFBhcmFtZXRlckNvbnRleHQoKS5yZXF1ZXN0UHJvcGVydHkoZGVmYXVsdFZhbHVlLnBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdC8vIEZvciBtdWx0aSBzZWxlY3QsIG5lZWQgdG8gbG9vcCBvdmVyIGNvbnRleHRzIChhcyBjb250ZXh0cyBjYW5ub3QgYmUgcmV0cmlldmVkIHZpYSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgb3BlcmF0aW9uIGJpbmRpbmcpXG5cblx0XHRcdFx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4gY29udGV4dC5nZXRQcm9wZXJ0eShwYXRoRm9yQ29udGV4dCkgIT09IHBhcmFtVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZXMgZnJvbSB0aGUgY29udGV4dHMgYXJlIG5vdCBhbGwgdGhlIHNhbWUsIGRvIG5vdCBwcmVmaWxsXG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0bm9Qb3NzaWJsZVZhbHVlOiB0cnVlXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZSwgdmFsdWU6IHBhcmFtVmFsdWUgfTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWFkaW5nIGRlZmF1bHQgYWN0aW9uIHBhcmFtZXRlclwiLCBwYXJhbU5hbWUsIHRoaXMuYWN0aW9uLm5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRwYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0bGF0ZVByb3BlcnR5RXJyb3I6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDYXNlIDEuMjogUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGRlZmluZXMgYSBmaXhlZCBzdHJpbmcgdmFsdWUgKGkuZS4gdlBhcmFtRGVmYXVsdFZhbHVlID0gJ3NvbWVTdHJpbmcnKVxuXHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBkZWZhdWx0VmFsdWUudmFsdWVPZigpIH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IHBhcmFtTmFtZSwgdmFsdWU6IHBhcmFtZXRlck1vZGVsRGF0YVtwYXJhbU5hbWVdIH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbWFuaWZlc3QgdmFsdWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgbWFuaWZlc3QgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRNYW5pZmVzdEZ1bmN0aW9uVmFsdWVzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuZGlhbG9nPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmICghdGhpcy5wYXJhbWV0ZXJzLnZpZXcgfHwgIXRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24gfHwgIWJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEZQTUhlbHBlci5sb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0LnN1YnN0cmluZygwLCB0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMSlcblx0XHRcdFx0LnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpLFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5zdWJzdHJpbmcoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpICsgMSxcblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sZW5ndGhcblx0XHRcdCksXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMudmlldyxcblx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzXG5cdFx0KSBhcyBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVkZWZpbmVkIHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyIFRoZSBiaW5kaW5nIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UgY29udGFpbmluZyBhbGwgcHJlZGVmaW5lZCB2YWx1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFByZURlZmluZWRWYWx1ZXMoXG5cdFx0YmluZGluZ1BhcmFtZXRlcjogc3RyaW5nLFxuXHRcdGRpYWxvZzogRGlhbG9nXG5cdCk6IFByb21pc2U8e1xuXHRcdGNvbnRleHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGRlZmF1bHRWYWx1ZXM6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZVtdO1xuXHRcdGZ1bmN0aW9uVmFsdWVzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHR9PiB7XG5cdFx0Y29uc3QgYm91bmRGdW5jdGlvbk5hbWUgPSB0aGlzLmFjdGlvbi5hbm5vdGF0aW9ucy5Db21tb24/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbj8udmFsdWVPZigpO1xuXHRcdGxldCByZXF1ZXN0Q29udGV4dE9iamVjdDogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSBQcm9taXNlLnJlc29sdmUoe30pO1xuXHRcdGxldCBmdW5jdGlvblBhcmFtczogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD5bXSA9IFtdO1xuXHRcdGlmICh0aGlzLmFjdGlvbi5pc0JvdW5kKSB7XG5cdFx0XHRpZiAodHlwZW9mIGJvdW5kRnVuY3Rpb25OYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldE1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IGJvdW5kRnVuY3Rpb24gPSBPcGVyYXRpb24uZ2V0T3BlcmF0aW9uRnJvbU5hbWUoYm91bmRGdW5jdGlvbk5hbWUsIG1vZGVsLCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0pO1xuXHRcdFx0XHRpZiAoYm91bmRGdW5jdGlvbikge1xuXHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLm1hcChhc3luYyAoY29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgbmV3IE9EYXRhT3BlcmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRib3VuZEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdG1vZGVsOiBtb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogW2NvbnRleHRdXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRlbmhhbmNlJHNlbGVjdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXBJZDogXCJmdW5jdGlvbkdyb3VwXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KS5leGVjdXRlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0LmZpbHRlcihpc0Z1bGZpbGxlZClbMF0/LnZhbHVlLmJvdW5kQ29udGV4dDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJlcXVlc3RDb250ZXh0T2JqZWN0ID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY29udGV4dFZhbHVlcyA9IGF3YWl0IHJlcXVlc3RDb250ZXh0T2JqZWN0O1xuXG5cdFx0XHRjb25zdCBwcm9taXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0UHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0dGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoYXN5bmMgKGFjdGlvblBhcmFtZXRlckluZm8pID0+XG5cdFx0XHRcdFx0XHR0aGlzLmdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlciwgYmluZGluZ1BhcmFtZXRlciwgZGlhbG9nKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSxcblx0XHRcdFx0UHJvbWlzZS5hbGwoZnVuY3Rpb25QYXJhbXMpLFxuXHRcdFx0XHR0aGlzLmdldE1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMoKVxuXHRcdFx0XSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb250ZXh0VmFsdWVzLFxuXHRcdFx0XHRkZWZhdWx0VmFsdWVzOiBwcm9taXNlc1swXSxcblx0XHRcdFx0ZnVuY3Rpb25WYWx1ZXM6IHByb21pc2VzWzFdLFxuXHRcdFx0XHRtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzOiBwcm9taXNlc1syXVxuXHRcdFx0fTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHQvLyBSZW1vdmUgbWVzc2FnZXMgcmVsYXRpbmcgdG8gdGhlIGZ1bmN0aW9uIGZvciBkZWZhdWx0IHZhbHVlcyBhcyB0aGV5IGFyZW4ndCBoZWxwZnVsIGZvciBhIHVzZXJcblx0XHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb250ZXh0VmFsdWVzOiB7fSxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlczogW10sXG5cdFx0XHRcdGZ1bmN0aW9uVmFsdWVzOiBbXSxcblx0XHRcdFx0bWFuaWZlc3RGdW5jdGlvblZhbHVlczoge31cblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuZWQuIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBmaXJzdCBmaWVsZCB3aXRob3V0IG9wZW5pbmcgdGhlIFZIIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgYWZ0ZXJPcGVuKCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0VmlzaWJsZVBhcmFtZXRlciA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgocGFyYW1ldGVySW5mbykgPT4gcGFyYW1ldGVySW5mby5maWVsZC5nZXRWaXNpYmxlKCkpO1xuXHRcdGlmIChmaXJzdFZpc2libGVQYXJhbWV0ZXIpIHtcblx0XHRcdGNvbnN0IGZpcnN0RmllbGQgPSBmaXJzdFZpc2libGVQYXJhbWV0ZXI/LmZpZWxkO1xuXHRcdFx0Y29uc3QgZm9jdXNJbmZvID0gZmlyc3RGaWVsZD8uZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRcdGZpcnN0RmllbGQ/LmZvY3VzKGZvY3VzSW5mbyk7XG5cdFx0fVxuXHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uUGFyYW1ldGVyRGlhbG9nT3BlbmVkPy4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgaW5mby5cblx0ICogQHBhcmFtIGRpYWxvZ0NvbnRlbnRzIFRoZSBkaWFsb2cgY29udGVudHNcblx0ICovXG5cdHByaXZhdGUgcmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvKGRpYWxvZ0NvbnRlbnRzOiBEaWFsb2dDb250ZW50VHlwZXNbXSk6IHZvaWQge1xuXHRcdC8vUmVnaXN0ZXIgdGhlIGZpZWxkXG5cdFx0ZGlhbG9nQ29udGVudHMuZm9yRWFjaCgoZGlhbG9nQ29udGVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gZGlhbG9nQ29udGVudD8ucGFyYW1ldGVyO1xuXHRcdFx0Y29uc3QgZmllbGQgPSBkaWFsb2dDb250ZW50Py5mb3JtRWxlbWVudHM/LlsxXTtcblx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MucHVzaCh7XG5cdFx0XHRcdHBhcmFtZXRlcixcblx0XHRcdFx0ZmllbGQsXG5cdFx0XHRcdGlzTXVsdGlWYWx1ZTogcGFyYW1ldGVyLmlzQ29sbGVjdGlvbixcblx0XHRcdFx0aGFzRXJyb3I6IGZhbHNlXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIGRpYWxvZ1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgc2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcyhkaWFsb2c6IERpYWxvZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXIgPSB0aGlzLmFjdGlvbi5pc0JvdW5kID8gdGhpcy5hY3Rpb24ucGFyYW1ldGVyc1swXS5uYW1lIDogXCJcIjtcblx0XHRjb25zdCB7IGNvbnRleHRWYWx1ZXMsIGRlZmF1bHRWYWx1ZXMsIGZ1bmN0aW9uVmFsdWVzLCBtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzIH0gPSBhd2FpdCB0aGlzLmdldFByZURlZmluZWRWYWx1ZXMoXG5cdFx0XHRiaW5kaW5nUGFyYW1ldGVyLFxuXHRcdFx0ZGlhbG9nXG5cdFx0KTtcblx0XHRjb25zdCBvcGVyYXRpb25CaW5kaW5nID0gZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXG5cdFx0aWYgKGJpbmRpbmdQYXJhbWV0ZXIpIHtcblx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKGJpbmRpbmdQYXJhbWV0ZXIsIGNvbnRleHRWYWx1ZXMpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRpZiAodGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIubmFtZSAhPT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlck5hbWUgPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zW2ldLnBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHQvLyBQYXJhbWV0ZXIgdmFsdWVzIHByb3ZpZGVkIGluIHRoZSBjYWxsIG9mIGludm9rZUFjdGlvbiBvdmVycnVsZSBvdGhlciBzb3VyY2VzXG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlclByb3ZpZGVkVmFsdWUgPSB0aGlzLnBhcmFtZXRlclZhbHVlcz8uZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lID09PSBwYXJhbWV0ZXJOYW1lKT8udmFsdWU7XG5cdFx0XHRcdGlmIChwYXJhbWV0ZXJQcm92aWRlZFZhbHVlKSB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAobWFuaWZlc3RGdW5jdGlvblZhbHVlcy5oYXNPd25Qcm9wZXJ0eShwYXJhbWV0ZXJOYW1lKSkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXNbcGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZXNbaV0gJiYgZGVmYXVsdFZhbHVlc1tpXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgZGVmYXVsdFZhbHVlc1tpXS52YWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuQ29tbW9uPy5EZWZhdWx0VmFsdWVzRnVuY3Rpb24gJiYgIWRlZmF1bHRWYWx1ZXNbaV0ubm9Qb3NzaWJsZVZhbHVlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0T2ZGdW5jdGlvblZhbHVlcyA9IG5ldyBTZXQ8c3RyaW5nPihcblx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5tYXAoKGNvbnRleHQsIGluZGV4KSA9PiBmdW5jdGlvblZhbHVlc1tpbmRleF0uZ2V0T2JqZWN0KHBhcmFtZXRlck5hbWUpKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHNldE9mRnVuY3Rpb25WYWx1ZXMuc2l6ZSA9PT0gMSAmJiBzZXRPZkZ1bmN0aW9uVmFsdWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvL3BhcmFtIHZhbHVlcyBhcmUgYWxsIHRoZSBzYW1lOlxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgQXJyYXkuZnJvbShzZXRPZkZ1bmN0aW9uVmFsdWVzKVswXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgYXQgbGVhc3Qgb25lIERlZmF1bHQgUHJvcGVydHkgaXMgYSBMYXRlIFByb3BlcnR5IGFuZCBhbiBlVGFnIGVycm9yIHdhcyByYWlzZWQuXG5cdFx0aWYgKGRlZmF1bHRWYWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlLmxhdGVQcm9wZXJ0eUVycm9yKSkge1xuXHRcdFx0Y29uc3QgcmVmcmVzaCA9IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKTtcblx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhnZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19MQVRFX1BST1BFUlRZXCIpLCB7XG5cdFx0XHRcdGFjdGlvbnM6IFtyZWZyZXNoLCBNZXNzYWdlQm94LkFjdGlvbi5PS10sXG5cdFx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IHJlZnJlc2gsXG5cdFx0XHRcdG9uQ2xvc2U6IChhY3Rpb246IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdGlmIChhY3Rpb24gPT09IHJlZnJlc2gpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMucGFyYW1ldGVycy52aWV3Py5nZXRDb250cm9sbGVyKCkuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0XHRcdFx0XHQoZXh0ZW5zaW9uQVBJIGFzIExpc3RSZXBvcnRFeHRlbnNpb25BUEkgfCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJKS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMjVlbVwiXG5cdFx0XHR9IGFzIG9iamVjdCk7XG5cdFx0fVxuXG5cdFx0Ly8gZGVzdHJveSB0aGUgb2RhdGFDb250ZXh0QmluZGluZyByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbiBjYWxsXG5cdFx0Zm9yIChjb25zdCBmdW5jdGlvbkNvbnRleHQgb2YgZnVuY3Rpb25WYWx1ZXMpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSBmdW5jdGlvbkNvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0aWYgKGJpbmRpbmc/LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBjbG9zZSBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHJpdmF0ZSBhZnRlckNsb3NlKCk6IHZvaWQge1xuXHRcdHRoaXMuZGlhbG9nPy5kZXN0cm95KCk7XG5cdFx0dGhpcy5idXR0b25Mb2NrID0gZmFsc2U7IC8vbmVlZGVkIGhlcmUsIG5vdCBpbiB0aGUgcHJlc3MgZXZlbnRzIGZpbmFsbHkgY2xhdXNlLiBJbiBjYXNlIHRoZSBVSSBpcyBzbHVnZ2lzaCwgYmVnaW4gYnV0dG9uIGNvdWxkIGJlIHByZXNzZWQgYWdhaW4uXG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgdXNlZCBmb3IgdGV4dCBhbm5vdGF0aW9uIGluIHRoZSBWYWx1ZUhlbHAgZm9yIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGFuZCBwcm92aWRlcyB0aGUgZm9ybWF0dGVkIGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGZvcm0gZWxlbWVudCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRBZGRpdGlvbmFsVmFsdWUob0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcblx0XHRsZXQgdGV4dENvbnRleHQ7XG5cblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbG9jYWxEYXRhUHJvcGVydHkgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0T2JqZWN0KCk/LiROYW1lO1xuXHRcdGNvbnN0IHZhbHVlTGlzdEJ5UXVhbGlmaWVyID0gYXdhaXQgdGhpcy5tZXRhTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8oY29udGV4dFBhdGgsIHRydWUpO1xuXG5cdFx0Ly8gTG9vayBmb3IgTG9jYWxEYXRhUHJvcGVydHkgaW4gVmFsdWVMaXN0UGFyYW1ldGVyT3V0IG9yIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHdoZXJlIHRoaXMgaXMgdGhlIHBhcmFtZXRlciBuYW1lXG5cdFx0Ly8gV2Ugb25seSBjb25zaWRlciBUZXh0QW5ub3RhdGlvbnMgZm9yIHRoaXMgYWN0aW9uIHBhcmFtZXRlclxuXHRcdGNvbnN0IHZhbHVlTGlzdFBhcmFtZXRlciA9IHZhbHVlTGlzdEJ5UXVhbGlmaWVyW1wiXCJdLlBhcmFtZXRlcnMuZmluZChcblx0XHRcdChwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHBhcmFtZXRlci4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHQocGFyYW1ldGVyLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIiAmJlxuXHRcdFx0XHRcdHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCA9PT0gbG9jYWxEYXRhUHJvcGVydHkpXG5cdFx0KTtcblxuXHRcdGlmICh2YWx1ZUxpc3RQYXJhbWV0ZXIgJiYgdmFsdWVMaXN0UGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCB0ZXh0UHJvcGVydHkgPSB2YWx1ZUxpc3RQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHQvLyBOb3cgd2UgaGF2ZSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBpcyB0aGUgYW5ub3RhdGVkIHRleHRcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGAvJHt2YWx1ZUxpc3RCeVF1YWxpZmllcltcIlwiXS5Db2xsZWN0aW9uUGF0aH0vJHt0ZXh0UHJvcGVydHl9YDtcblx0XHRcdGNvbnN0IHByb3BBbm5vdGF0aW9ucyA9IHRoaXMubWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApO1xuXG5cdFx0XHRpZiAocHJvcEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkge1xuXHRcdFx0XHRjb25zdCB0ZXh0UHJvcCA9IHByb3BBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXTtcblx0XHRcdFx0Y29uc3QgdGV4dFBhdGggPSBgLyR7dmFsdWVMaXN0QnlRdWFsaWZpZXJbXCJcIl0uQ29sbGVjdGlvblBhdGh9LyR7dGV4dFByb3AuJFBhdGh9YDtcblx0XHRcdFx0dGV4dENvbnRleHQgPSB0aGlzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0ZXh0UGF0aCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXh0Q29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gQW5ub3RhdGlvbkhlbHBlci5mb3JtYXQodGV4dENvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogdGV4dENvbnRleHQgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZhbHVlIGJpbmRpbmcgZm9yIGFuIGFjdGlvbiBwYXJhbWV0ZXIuIFdlIGFkZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBjdXJyZW5jeSBhbmQgdW5pdCBiZWF1c2UgdGhleSBhcmUgbm90XG5cdCAqIHBhcnQgb2YgdGhlIGFubm90YXRpb24gaGVscGVyIGZvcm1hdCBmdW5jdGlvbi5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJDb250ZXh0IFRoZSBwYXJhbWV0ZXIgY29udGV4dFxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGZvciB0aGUgdmFsdWUgb2YgdGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldEFQRGlhbG9nQmluZGluZ1ZhbHVlKFxuXHRcdHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyLFxuXHRcdHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHRcblx0KTogUHJvbWlzZTxDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZz4ge1xuXHRcdGNvbnN0IGFjdGlvbk1ldGFQYXRoID0gdGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0PyBgJHt0aGlzLm1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0uZ2V0UGF0aCgpKX0vJHtjb252ZXJ0VHlwZXModGhpcy5tZXRhTW9kZWwpLm5hbWVzcGFjZX0uJHtcblx0XHRcdFx0XHR0aGlzLmFjdGlvbi5uYW1lXG5cdFx0XHQgIH1gXG5cdFx0XHQ6IGAvJHt0aGlzLmFjdGlvbi5uYW1lfWA7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSB0aGlzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHthY3Rpb25NZXRhUGF0aH0vJHtwYXJhbWV0ZXIubmFtZX1gKSE7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5T2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxBY3Rpb25QYXJhbWV0ZXI+KG1ldGFDb250ZXh0KTtcblx0XHRcdHJldHVybiBnZXRWYWx1ZUJpbmRpbmcocHJvcGVydHlPYmplY3RQYXRoLCB7fSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdC8vIEZhbGxiYWNrIHRvIG9sZCBhcHByb2FjaCB1bnRpbCB3ZSBjYW4gcmVhY2ggdW5ib3VuZCBhY3Rpb25zXG5cdFx0XHRyZXR1cm4gQW5ub3RhdGlvbkhlbHBlci5mb3JtYXQocGFyYW1ldGVyQ29udGV4dC5nZXRPYmplY3QoKSwgeyBjb250ZXh0OiBwYXJhbWV0ZXJDb250ZXh0IH0pO1xuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BZ0dxQkEscUJBQXFCO0lBNEJ6QyxTQUFBQSxzQkFDa0JDLE1BQWMsRUFDZEMsVUFhaEIsRUFDZ0JDLGVBQXNELEVBQ3REQyxhQUFpQyxFQUNqQ0MsY0FBOEIsRUFDOUM7TUF4Q0Y7TUFDQTtNQUNBO01BQUEsS0FDUUMsWUFBWSxHQUFHLEtBQUs7TUFBQSxLQU1wQkMsVUFBVSxHQUFHLEtBQUs7TUFBQSxLQUlUQyxvQkFBb0IsR0FBNkQsRUFBRTtNQUFBLEtBRW5GQyxjQUFjLEdBQWMsSUFBSUMsU0FBUyxDQUFDO1FBQzFEQyxZQUFZLEVBQUUsQ0FBQztNQUNoQixDQUFDLENBQUM7TUFBQSxLQUtnQlYsTUFBYyxHQUFkQSxNQUFjO01BQUEsS0FDZEMsVUFhaEIsR0FiZ0JBLFVBYWhCO01BQUEsS0FDZ0JDLGVBQXNELEdBQXREQSxlQUFzRDtNQUFBLEtBQ3REQyxhQUFpQyxHQUFqQ0Es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