@sapui5/sap.fe.macros 1.141.2 → 1.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) 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 +47 -36
  8. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
  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/ConditionalSwitch.js +1 -2
  14. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  15. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  16. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  17. package/src/sap/fe/macros/Field.js +34 -17
  18. package/src/sap/fe/macros/Field.ts +64 -32
  19. package/src/sap/fe/macros/FooterContent.js +7 -3
  20. package/src/sap/fe/macros/FooterContent.tsx +8 -13
  21. package/src/sap/fe/macros/KPITag.js +6 -6
  22. package/src/sap/fe/macros/KPITag.tsx +8 -6
  23. package/src/sap/fe/macros/MacroAPI.js +4 -3
  24. package/src/sap/fe/macros/MacroAPI.ts +3 -3
  25. package/src/sap/fe/macros/MessageButton.js +4 -3
  26. package/src/sap/fe/macros/MessageButton.tsx +7 -3
  27. package/src/sap/fe/macros/MicroChart.js +12 -7
  28. package/src/sap/fe/macros/MicroChart.tsx +9 -3
  29. package/src/sap/fe/macros/MultiValueField.js +22 -36
  30. package/src/sap/fe/macros/MultiValueField.tsx +34 -66
  31. package/src/sap/fe/macros/RichTextEditor.js +3 -4
  32. package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
  33. package/src/sap/fe/macros/Share.js +7 -7
  34. package/src/sap/fe/macros/Share.tsx +9 -6
  35. package/src/sap/fe/macros/Status.js +39 -11
  36. package/src/sap/fe/macros/Status.tsx +25 -5
  37. package/src/sap/fe/macros/ValueHelp.js +5 -2
  38. package/src/sap/fe/macros/ValueHelp.tsx +5 -0
  39. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  40. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  41. package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
  42. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
  43. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
  44. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
  45. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  46. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  47. package/src/sap/fe/macros/chart/Action.js +25 -2
  48. package/src/sap/fe/macros/chart/Action.ts +13 -0
  49. package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
  50. package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
  51. package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
  52. package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
  53. package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
  54. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
  55. package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
  56. package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
  57. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  58. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  59. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  60. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  61. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  62. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  63. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  64. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  65. package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
  66. package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
  67. package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
  68. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
  69. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
  70. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
  71. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
  72. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
  73. package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
  74. package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
  75. package/src/sap/fe/macros/field/FieldHelper.js +4 -3
  76. package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
  77. package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
  78. package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
  79. package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
  80. package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
  81. package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
  82. package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
  83. package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
  84. package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
  85. package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
  86. package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
  87. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
  88. package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
  89. package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
  90. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
  91. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
  92. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
  93. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
  94. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
  95. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  96. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  97. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
  98. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
  99. package/src/sap/fe/macros/form/Form.block.js +27 -2
  100. package/src/sap/fe/macros/form/Form.block.ts +31 -11
  101. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
  102. package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
  103. package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
  104. package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
  105. package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
  106. package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
  107. package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
  108. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
  109. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
  110. package/src/sap/fe/macros/insights/InsightsService.js +3 -2
  111. package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
  112. package/src/sap/fe/macros/internal/DataPoint.js +7 -8
  113. package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
  114. package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
  115. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
  116. package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
  117. package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
  118. package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
  119. package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
  120. package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
  121. package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
  122. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
  123. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
  124. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
  125. package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
  126. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
  127. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
  128. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  129. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
  130. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
  131. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  132. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  133. package/src/sap/fe/macros/library.js +5 -6
  134. package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
  135. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
  136. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
  137. package/src/sap/fe/macros/messagebundle.properties +13 -5
  138. package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
  139. package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
  140. package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
  141. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
  142. package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
  143. package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
  144. package/src/sap/fe/macros/messagebundle_da.properties +12 -3
  145. package/src/sap/fe/macros/messagebundle_de.properties +16 -7
  146. package/src/sap/fe/macros/messagebundle_el.properties +13 -4
  147. package/src/sap/fe/macros/messagebundle_en.properties +13 -4
  148. package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
  149. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
  150. package/src/sap/fe/macros/messagebundle_es.properties +12 -3
  151. package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
  152. package/src/sap/fe/macros/messagebundle_et.properties +12 -3
  153. package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
  154. package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
  155. package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
  156. package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
  157. package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
  158. package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
  159. package/src/sap/fe/macros/messagebundle_id.properties +18 -9
  160. package/src/sap/fe/macros/messagebundle_it.properties +12 -3
  161. package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
  162. package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
  163. package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
  164. package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
  165. package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
  166. package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
  167. package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
  168. package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
  169. package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
  170. package/src/sap/fe/macros/messagebundle_no.properties +12 -3
  171. package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
  172. package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
  173. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
  174. package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
  175. package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
  176. package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
  177. package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
  178. package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
  179. package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
  180. package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
  181. package/src/sap/fe/macros/messagebundle_th.properties +11 -2
  182. package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
  183. package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
  184. package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
  185. package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
  186. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
  187. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  188. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  189. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  190. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  191. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  192. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  193. package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
  194. package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
  195. package/src/sap/fe/macros/table/Action.js +21 -5
  196. package/src/sap/fe/macros/table/Action.ts +14 -4
  197. package/src/sap/fe/macros/table/ActionGroup.js +15 -2
  198. package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
  199. package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
  200. package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
  201. package/src/sap/fe/macros/table/ActionOverride.js +14 -2
  202. package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
  203. package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
  204. package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
  205. package/src/sap/fe/macros/table/Column.js +3 -2
  206. package/src/sap/fe/macros/table/Column.ts +1 -1
  207. package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
  208. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
  209. package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
  210. package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
  211. package/src/sap/fe/macros/table/Table.block.js +74 -30
  212. package/src/sap/fe/macros/table/Table.block.tsx +77 -14
  213. package/src/sap/fe/macros/table/TableAPI.js +175 -132
  214. package/src/sap/fe/macros/table/TableAPI.ts +67 -30
  215. package/src/sap/fe/macros/table/TableDefinition.js +20 -3
  216. package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
  217. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
  218. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
  219. package/src/sap/fe/macros/table/TableHelper.js +5 -2
  220. package/src/sap/fe/macros/table/TableHelper.ts +5 -2
  221. package/src/sap/fe/macros/table/TableRuntime.js +25 -13
  222. package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
  223. package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
  224. package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
  225. package/src/sap/fe/macros/table/Utils.js +9 -3
  226. package/src/sap/fe/macros/table/Utils.ts +14 -8
  227. package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
  228. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
  229. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  230. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  231. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
  232. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
  233. package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
  234. package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
  235. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  236. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  237. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
  238. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
  239. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
  240. package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
  241. package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
  242. package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
  243. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  244. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  245. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  246. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  247. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  248. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
  249. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
  250. package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
  251. package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
  252. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
  253. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
  254. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
  255. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
  256. package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
  257. package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
@@ -2,7 +2,7 @@
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/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/Common/table/StandardActions", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/macros/CommonHelper", "sap/fe/macros/TSXUtils", "sap/fe/macros/table/TableFullScreenButton", "sap/fe/macros/table/TableHelper", "sap/m/Button", "sap/m/Menu", "sap/m/MenuButton", "sap/m/MenuItem", "sap/m/OverflowToolbarLayoutData", "sap/m/library", "sap/m/upload/ActionsPlaceholder", "sap/ui/core/Popup", "sap/ui/mdc/actiontoolbar/ActionToolbarAction", "../internal/helpers/ActionHelper", "./BasicSearch", "sap/fe/base/jsx-runtime/jsx"], function (deepClone, BindingToolkit, ManifestSettings, MetaModelConverter, DataField, Action, StandardActions, BindingHelper, ModelHelper, StableIdHelper, CommonHelper, TSXUtils, TableFullScreenButton, TableHelper, Button, Menu, MenuButton, MenuItem, OverflowToolbarLayoutData, library, ActionsPlaceholder, Popup, ActionToolbarAction, ActionHelper, BasicSearchMacro, _jsx) {
5
+ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/Common/table/StandardActions", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/macros/CommonHelper", "sap/fe/macros/TSXUtils", "sap/fe/macros/table/TableFullScreenButton", "sap/fe/macros/table/TableHelper", "sap/m/Button", "sap/m/Menu", "sap/m/MenuButton", "sap/m/MenuItem", "sap/m/OverflowToolbarLayoutData", "sap/m/ToolbarSeparator", "sap/m/library", "sap/m/upload/ActionsPlaceholder", "sap/ui/core/Popup", "sap/ui/mdc/actiontoolbar/ActionToolbarAction", "../internal/helpers/ActionHelper", "./BasicSearch", "sap/fe/base/jsx-runtime/jsx"], function (deepClone, BindingToolkit, ManifestSettings, MetaModelConverter, DataField, Action, StandardActions, BindingHelper, ModelHelper, StableIdHelper, CommonHelper, TSXUtils, TableFullScreenButton, TableHelper, Button, Menu, MenuButton, MenuItem, OverflowToolbarLayoutData, ToolbarSeparator, library, ActionsPlaceholder, Popup, ActionToolbarAction, ActionHelper, BasicSearchMacro, _jsx) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -192,6 +192,7 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
192
192
  type: ButtonType.Transparent,
193
193
  enabled: enabled,
194
194
  visible: action.visible,
195
+ ariaDescribedBy: action.isAIOperation === true ? ["fe::AiAction::AriaText"] : undefined,
195
196
  children: {
196
197
  customData: [createCustomData("actionId", toolbarActionId)],
197
198
  layoutData: _jsx(OverflowToolbarLayoutData, {
@@ -406,6 +407,7 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
406
407
  buttonMode: action.defaultAction ? MenuButtonMode.Split : MenuButtonMode.Regular,
407
408
  defaultAction: defaultActionHandlers.handler,
408
409
  "jsx:command": defaultActionHandlers.command,
410
+ ariaDescribedBy: action.isAIOperation === true ? ["fe::AiAction::AriaText"] : undefined,
409
411
  children: {
410
412
  customData: [createCustomData("actionId", menuId)],
411
413
  menu: _jsx(Menu, {
@@ -480,6 +482,7 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
480
482
  visible: action.visible,
481
483
  enabled: action.enabled,
482
484
  icon: action.isAIOperation === true ? aiIcon : undefined,
485
+ ariaDescribedBy: action.isAIOperation === true ? ["fe::AiAction::AriaText"] : undefined,
483
486
  children: {
484
487
  customData: [createCustomData("actionId", generate([table.contentId, action.id]))],
485
488
  layoutData: _jsx(OverflowToolbarLayoutData, {
@@ -851,6 +854,17 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
851
854
  return getStandardAction(action, table, forContextMenu, parameters.handlerProvider, collectionEntity);
852
855
  case ActionType.Copy:
853
856
  return getCopyAction(action, table, forContextMenu, collectionContext, parameters);
857
+ case ActionType.Separator:
858
+ if (!forContextMenu) {
859
+ return _jsx(ToolbarSeparator, {
860
+ children: {
861
+ layoutData: _jsx(OverflowToolbarLayoutData, {
862
+ group: action.group
863
+ })
864
+ }
865
+ });
866
+ }
867
+ return undefined;
854
868
  default:
855
869
  return getAction(action, table, forContextMenu, collectionContext, parameters);
856
870
  }
@@ -1119,4 +1133,4 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
1119
1133
  }
1120
1134
  return _exports;
1121
1135
  }, false);
1122
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZW51SXRlbUZvckFjdGlvbiIsImRhdGFGaWVsZCIsImFjdGlvbiIsIm1lbnVJdGVtQWN0aW9uIiwidGFibGUiLCJmb3JDb250ZXh0TWVudSIsImNvbGxlY3Rpb25Db250ZXh0IiwicGFyYW1ldGVycyIsImFubm90YXRpb25QYXRoIiwidW5kZWZpbmVkIiwiYWN0aW9uQ29udGV4dFBhdGgiLCJDb21tb25IZWxwZXIiLCJnZXRBY3Rpb25Db250ZXh0IiwibWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzQm91bmQiLCJBY3Rpb25UYXJnZXQiLCJpc09wZXJhdGlvbkF2YWlsYWJsZSIsImFubm90YXRpb25zIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInZhbHVlT2YiLCJjb21tYW5kIiwiY29udGV4dE1lbnVUZXh0IiwicHJlc3NIYW5kbGVyIiwiaGFuZGxlclByb3ZpZGVyIiwiZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyIiwicHJlc3NDb21tYW5kIiwiZW5hYmxlZCIsIlRhYmxlSGVscGVyIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkIiwidGFibGVEZWZpbml0aW9uIiwiQWN0aW9uIiwiZ2V0T2JqZWN0IiwiZW5hYmxlT25TZWxlY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiY29udHJvbCIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImNvbXBpbGVFeHByZXNzaW9uIiwiYW5kIiwiVUkiLCJpc05vZGVMZXZlbE5hdmlnYWJsZSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiaXRlbUlkIiwiZ2VuZXJhdGUiLCJjb250ZW50SWQiLCJrZXkiLCJfanN4IiwiTWVudUl0ZW0iLCJ0ZXh0IiwiTGFiZWwiLCJpZCIsInByZXNzIiwidmlzaWJsZSIsImNoaWxkcmVuIiwiY3VzdG9tRGF0YSIsImNyZWF0ZUN1c3RvbURhdGEiLCJnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlciIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsImNvbGxlY3Rpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwic2VtYW50aWNPYmplY3QiLCJTZW1hbnRpY09iamVjdCIsImdldE1lbnVJdGVtIiwiY29udmVydGVkTWV0YWRhdGEiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsInR5cGUiLCJpc0RhdGFGaWVsZEZvckFjdGlvbiIsImlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51IiwiY29udGV4dE9iamVjdFBhdGgiLCJpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwiZW5hYmxlZEZvckNvbnRleHRNZW51IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24iLCJkYXRhRmllbGRBY3Rpb25Db250ZXh0IiwiaWNvbiIsImlzQUlPcGVyYXRpb24iLCJhaUljb24iLCJ0b29sYmFyQWN0aW9uSWQiLCJCdXR0b24iLCJhcmlhSGFzUG9wdXAiLCJpc0FjdGlvbldpdGhEaWFsb2ciLCJCdXR0b25UeXBlIiwiVHJhbnNwYXJlbnQiLCJsYXlvdXREYXRhIiwiT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSIsInByaW9yaXR5IiwiZ3JvdXAiLCJ0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQiLCJnZXREYXRhRmllbGRCdXR0b25Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJQk5EYXRhIiwiZ2V0RGF0YUZpZWxkQnV0dG9uIiwidGVtcGxhdGUiLCJkZWVwQ2xvbmUiLCJBY3Rpb25Ub29sYmFyQWN0aW9uIiwiZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24iLCJkZWZhdWx0QWN0aW9uIiwiZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiIsImhhbmRsZXIiLCJlIiwiZ2V0TWVudUJ1dHRvbiIsImRlZmF1bHRBY3Rpb25IYW5kbGVycyIsIm1lbnVJdGVtcyIsIm1lbnUiLCJmaWx0ZXIiLCJtYXAiLCJpdGVtIiwibWVudUlkIiwiTWVudUJ1dHRvbiIsIm1lbnVQb3NpdGlvbiIsIlBvcHVwIiwiRG9jayIsIkJlZ2luQm90dG9tIiwidXNlRGVmYXVsdEFjdGlvbk9ubHkiLCJidXR0b25Nb2RlIiwiTWVudUJ1dHRvbk1vZGUiLCJTcGxpdCIsIlJlZ3VsYXIiLCJNZW51IiwibWVudUl0ZW1zRm9yQ29udGV4dE1lbnUiLCJmb3JFYWNoIiwicHVzaCIsIml0ZW1zIiwiZ2V0RGVmYXVsdEJ1dHRvbiIsImdldEFjdGlvbiIsImdldENvcHlBY3Rpb24iLCJvcGVyYXRpb25BdmFpbGFibGUiLCJBY3Rpb25IZWxwZXIiLCJnZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbiIsImVxdWFsIiwicGF0aEluTW9kZWwiLCJnZXRDcmVhdGVCdXR0b24iLCJzdGFuZGFyZEFjdGlvbiIsImNvbGxlY3Rpb25FbnRpdHkiLCJzdWZmaXhSZXNvdXJjZUtleSIsIm5hbWUiLCJidXR0b25UZXh0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJjcmVhdGVPdXRib3VuZERldGFpbCIsImFubm90YXRpb24iLCJjcmVhdGUiLCJvdXRib3VuZERldGFpbCIsImVuYWJsZVVwbG9hZFBsdWdpbiIsIkFjdGlvbnNQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyRm9yIiwiZ2V0Q3JlYXRlTWVudSIsInZhbHVlcyIsIm5vZGVUeXBlIiwiaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJhbGxvd2VkVmFsdWUiLCJpbmRleCIsIm1vZGVsTmFtZSIsImlzRW5hYmxlZCIsIm5vdEVxdWFsIiwidmFsdWUiLCJnZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvbiIsImdldFN0YW5kYXJkQWN0aW9uIiwiaXNUZW1wbGF0ZWQiLCJTdGFuZGFyZEFjdGlvbktleXMiLCJDcmVhdGUiLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJEZWxldGUiLCJDdXQiLCJnZXRDdXRCdXR0b24iLCJDb3B5IiwiZ2V0Q29weUJ1dHRvbiIsIlBhc3RlIiwiZ2V0UGFzdGVCdXR0b24iLCJNYXNzRWRpdCIsImdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyIiwiSW5zaWdodHMiLCJhZGRDYXJkVG9JbnNpZ2h0c1ByZXNzIiwiTW92ZVVwIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImFjdGlvbnNXaXRoT3ZlcmZsb3dQcm90ZWN0aW9uIiwiZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzIiwiYWN0aW9ucyIsIkFjdGlvblR5cGUiLCJTdGFuZGFyZCIsIl9leHBvcnRzIiwiZ2V0QmFzaWNTZWFyY2giLCJ1c2VCYXNpY1NlYXJjaCIsImZpbHRlckJhcklkIiwiX2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZCIsImlzU2VhcmNoYWJsZSIsImxhYmVsIiwiQmFzaWNTZWFyY2hNYWNybyIsInVzZURyYWZ0RWRpdFN0YXRlIiwiZ2V0RnVsbFNjcmVlbiIsImVuYWJsZUZ1bGxTY3JlZW4iLCJUYWJsZUZ1bGxTY3JlZW5CdXR0b24iLCJmb3JNb3ZlVXAiLCJ0YWJsZVR5cGUiLCJnZXRUYWJsZUFjdGlvbnNUZW1wbGF0ZSIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdE5vZGUiLCJpc0RyYWZ0Um9vdCIsInNlYXJjaGFibGUiLCJiYXNpY1NlYXJjaCIsImZpbHRlckJhciIsImZ1bGxTY3JlZW4iLCJnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUiLCJnZXRFeHBhbmRlZENvbGxhcHNlQWN0aW9ucyIsImV4cGFuZE5vZGUiLCJjb2xsYXBzZU5vZGUiLCJleHBhbmQiLCJlbmFibGVFeHByZXNzaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb25zVGVtcGxhdGluZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcblxuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgY29tcGlsZUV4cHJlc3Npb24sIGVxdWFsLCBub3RFcXVhbCwgcGF0aEluTW9kZWwsIHJlc29sdmVCaW5kaW5nU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHtcblx0aXNBY3Rpb25XaXRoRGlhbG9nLFxuXHRpc0RhdGFGaWVsZEZvckFjdGlvbixcblx0aXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25BY3Rpb24sIEJhc2VBY3Rpb24sIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIGFpSWNvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBTdGFuZGFyZEFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7IFN0YW5kYXJkQWN0aW9uS2V5cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHsgY3JlYXRlQ3VzdG9tRGF0YSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL1RTWFV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUFuZEFjdGlvbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L01kY0NoYXJ0VGVtcGxhdGVcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVCbG9ja1Byb3BlcnRpZXMsIFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9NZGNUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgVGFibGVGdWxsU2NyZWVuQnV0dG9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlRnVsbFNjcmVlbkJ1dHRvblwiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhckxheW91dERhdGFcIjtcbmltcG9ydCB7IE1lbnVCdXR0b25Nb2RlIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBBY3Rpb25zUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9tL3VwbG9hZC9BY3Rpb25zUGxhY2Vob2xkZXJcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFBvcHVwIGZyb20gXCJzYXAvdWkvY29yZS9Qb3B1cFwiO1xuaW1wb3J0IEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9BY3Rpb25IZWxwZXJcIjtcbmltcG9ydCBCYXNpY1NlYXJjaE1hY3JvIGZyb20gXCIuL0Jhc2ljU2VhcmNoXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyIGZyb20gXCIuL1RhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcIjtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIE1lbnVJdGVtIGZvciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gbWVudUl0ZW1BY3Rpb24gVGhlIG1lbnVJdGVtQWN0aW9uIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRNZW51SXRlbUZvckFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdG1lbnVJdGVtQWN0aW9uOiBCYXNlQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRpZiAoIW1lbnVJdGVtQWN0aW9uLmFubm90YXRpb25QYXRoKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25Db250ZXh0KFxuXHRcdHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1lbnVJdGVtQWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpIVxuXHQpO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0ID0gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpITtcblx0Y29uc3QgZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGFjdGlvbkNvbnRleHRcblx0XHQ/IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoYWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkNvbnRleHQpXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzQm91bmQgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kO1xuXHRjb25zdCBpc09wZXJhdGlvbkF2YWlsYWJsZSA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSAhPT0gZmFsc2U7XG5cdGNvbnN0IGNvbW1hbmQgPSAhZm9yQ29udGV4dE1lbnUgPyBtZW51SXRlbUFjdGlvbi5jb21tYW5kIDogbWVudUl0ZW1BY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXHRjb25zdCBjb250ZXh0TWVudVRleHQgPSBmb3JDb250ZXh0TWVudSA/IFwiQ29udGV4dE1lbnVcIiA6IFwiQWN0aW9uTWVudVwiO1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kXG5cdFx0PyB1bmRlZmluZWRcblx0XHQ6IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihkYXRhRmllbGQsIG1lbnVJdGVtQWN0aW9uLCBhY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cblx0bGV0IGVuYWJsZWQ6IHN0cmluZyB8IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9XG5cdFx0bWVudUl0ZW1BY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IG1lbnVJdGVtQWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkKFxuXHRcdFx0XHRcdHRhYmxlLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdG1lbnVJdGVtQWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdCAgKTtcblxuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwgJiYgISFpc0JvdW5kKSB7XG5cdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcoZW5hYmxlZCkpKTtcblx0fVxuXHRpZiAoaXNCb3VuZCAhPT0gdHJ1ZSB8fCBpc09wZXJhdGlvbkF2YWlsYWJsZSkge1xuXHRcdGNvbnN0IGl0ZW1JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIG1lbnVJdGVtQWN0aW9uLmtleSwgYWN0aW9uLmtleSwgY29udGV4dE1lbnVUZXh0LCBkYXRhRmllbGQsIFwiTWVudUl0ZW1Gb3JBY3Rpb25cIl0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0dGV4dD17ZGF0YUZpZWxkLkxhYmVsfVxuXHRcdFx0XHRpZD17aXRlbUlkfVxuXHRcdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdFx0XHR2aXNpYmxlPXttZW51SXRlbUFjdGlvbi52aXNpYmxlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgaXRlbUlkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBNZW51SXRlbSBmb3IgdGhlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbi5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGZvciBJbnRlbnRCYXNlZE5hdmlnYXRpb25cbiAqIEBwYXJhbSBtZW51SXRlbUFjdGlvbiBUaGUgbWVudUl0ZW1BY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgTWVudUl0ZW1cbiAqL1xuZnVuY3Rpb24gZ2V0TWVudUl0ZW1Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRtZW51SXRlbUFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBNZW51SXRlbSB7XG5cdGNvbnN0IHByZXNzSGFuZGxlciA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDogaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihtZW51SXRlbUFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kID8gYGNtZDoke21lbnVJdGVtQWN0aW9uLmNvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBlbmFibGVkID1cblx0XHRtZW51SXRlbUFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gbWVudUl0ZW1BY3Rpb24uZW5hYmxlZFxuXHRcdFx0OiBUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvcklCTkVuYWJsZWQoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogY29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHR0YWJsZURlZmluaXRpb246IHRhYmxlLnRhYmxlRGVmaW5pdGlvblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdCAgKTtcblx0Y29uc3QgaWQgPSBmb3JDb250ZXh0TWVudVxuXHRcdD8gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgbWVudUl0ZW1BY3Rpb24ua2V5LCBhY3Rpb24ua2V5LCBkYXRhRmllbGQsIFwiTWVudUl0ZW1JbnRlbnRCYXNlZE5hdmlnYXRpb25cIiwgXCJDb250ZXh0TWVudVwiXSlcblx0XHQ6IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIG1lbnVJdGVtQWN0aW9uLmtleSwgYWN0aW9uLmtleSwgZGF0YUZpZWxkLCBcIk1lbnVJdGVtSW50ZW50QmFzZWROYXZpZ2F0aW9uXCJdKTtcblx0cmV0dXJuIChcblx0XHQ8TWVudUl0ZW1cblx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdGlkPXtpZH1cblx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogW1xuXHRcdFx0XHRcdCFkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0XG5cdFx0XHRcdFx0XHQ/IGNyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIHsgc2VtYW50aWNPYmplY3Q6IGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCwgYWN0aW9uOiBkYXRhRmllbGQuQWN0aW9uIH0pXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgaWQpXG5cdFx0XHRcdF1cblx0XHRcdH19XG5cdFx0PC9NZW51SXRlbT5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBNZW51SXRlbSBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgbWVudUl0ZW1BY3Rpb24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBtZW51SXRlbUFjdGlvbiBUaGUgbWVudUl0ZW1BY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRNZW51SXRlbShcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0bWVudUl0ZW1BY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IG1lbnVJdGVtQWN0aW9uLmFubm90YXRpb25QYXRoXG5cdFx0PyAocGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aChtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aCkudGFyZ2V0IGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXMpXG5cdFx0OiB1bmRlZmluZWQ7XG5cblx0c3dpdGNoIChkYXRhRmllbGQgJiYgbWVudUl0ZW1BY3Rpb24udHlwZSkge1xuXHRcdGNhc2UgXCJGb3JBY3Rpb25cIjpcblx0XHRcdGlmIChpc0RhdGFGaWVsZEZvckFjdGlvbihkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQhZm9yQ29udGV4dE1lbnUgfHxcblx0XHRcdFx0XHQoZm9yQ29udGV4dE1lbnUgJiYgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUobWVudUl0ZW1BY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtRm9yQWN0aW9uKGRhdGFGaWVsZCwgYWN0aW9uLCBtZW51SXRlbUFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKGRhdGFGaWVsZCEpICYmXG5cdFx0XHRcdCghZm9yQ29udGV4dE1lbnUgfHwgKGZvckNvbnRleHRNZW51ICYmIFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KG1lbnVJdGVtQWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0bWVudUl0ZW1BY3Rpb24sXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHR9XG5cblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgOiBtZW51SXRlbUFjdGlvbi5jb21tYW5kICsgXCI6OkNvbnRleHRNZW51XCI7XG5cdGNvbnN0IHByZXNzSGFuZGxlciA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIobWVudUl0ZW1BY3Rpb24gYXMgQ3VzdG9tQWN0aW9uLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXHRsZXQgZW5hYmxlZCA9ICFmb3JDb250ZXh0TWVudSA/IG1lbnVJdGVtQWN0aW9uLmVuYWJsZWQgOiAobWVudUl0ZW1BY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5lbmFibGVkRm9yQ29udGV4dE1lbnU7XG5cdGlmIChcblx0XHQobWVudUl0ZW1BY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5yZXF1aXJlc1NlbGVjdGlvbiAmJlxuXHRcdHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsXG5cdCkge1xuXHRcdGVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0fVxuXHRjb25zdCBjb250ZXh0TWVudVRleHQgPSBmb3JDb250ZXh0TWVudSA/IFwiQ29udGV4dE1lbnVcIiA6IFwiQWN0aW9uTWVudVwiO1xuXHRjb25zdCBpdGVtSWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBtZW51SXRlbUFjdGlvbi5rZXksIGNvbnRleHRNZW51VGV4dCwgYWN0aW9uLmtleSwgZGF0YUZpZWxkLCBcIk1lbnVJdGVtXCJdKTtcblx0cmV0dXJuIChcblx0XHQ8TWVudUl0ZW1cblx0XHRcdGNvcmU6cmVxdWlyZT1cIntGUE06ICdzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlcid9XCJcblx0XHRcdHRleHQ9e21lbnVJdGVtQWN0aW9uPy50ZXh0fVxuXHRcdFx0aWQ9e2l0ZW1JZH1cblx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0dmlzaWJsZT17bWVudUl0ZW1BY3Rpb24udmlzaWJsZX1cblx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBpdGVtSWQpXVxuXHRcdFx0fX1cblx0XHQ8L01lbnVJdGVtPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgdGhlIERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbi5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGZvciBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIGZvciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbkZvckFjdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBCdXR0b24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IGRhdGFGaWVsZEFjdGlvbkNvbnRleHQgPSBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25Db250ZXh0KGRhdGFGaWVsZEFjdGlvbkNvbnRleHQpO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0ID0gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpITtcblx0Y29uc3QgZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGFjdGlvbkNvbnRleHRcblx0XHQ/IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWN0aW9uPihhY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uQ29udGV4dClcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNCb3VuZCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdGNvbnN0IGNvbW1hbmQgPSAhZm9yQ29udGV4dE1lbnUgPyBhY3Rpb24uY29tbWFuZCA6IGFjdGlvbi5jb21tYW5kICsgXCI6OkNvbnRleHRNZW51XCI7XG5cdGNvbnN0IHByZXNzSGFuZGxlciA9IGFjdGlvbi5jb21tYW5kXG5cdFx0PyB1bmRlZmluZWRcblx0XHQ6IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihkYXRhRmllbGQsIGFjdGlvbiwgdW5kZWZpbmVkLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IGFjdGlvbi5jb21tYW5kID8gYGNtZDoke2NvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblx0Y29uc3QgZW5hYmxlZCA9XG5cdFx0YWN0aW9uLmVuYWJsZWQgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBhY3Rpb24uZW5hYmxlZFxuXHRcdFx0OiBUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQoXG5cdFx0XHRcdFx0dGFibGUudGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0ISFpc0JvdW5kLFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0YWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdCAgKTtcblx0Y29uc3QgaWNvbiA9IGFjdGlvbi5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gYWlJY29uIDogdW5kZWZpbmVkO1xuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRjb25zdCB0b29sYmFyQWN0aW9uSWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGRdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17dG9vbGJhckFjdGlvbklkfVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdGFyaWFIYXNQb3B1cD17aXNBY3Rpb25XaXRoRGlhbG9nKGRhdGFGaWVsZCl9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdG9vbGJhckFjdGlvbklkKV0sXG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0Y29uc3QgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXt0YWJsZUFjdGlvbkNvbnRleHRNZW51SWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gQnV0dG9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIEludGVudEJhc2VkTmF2aWdhdGlvblxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBmb3IgdGhlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBidXR0b24vbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbkZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IEJ1dHRvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmQgPyB1bmRlZmluZWQgOiBoYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKGFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBhY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGVuYWJsZWQgPVxuXHRcdGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uOiB0YWJsZS50YWJsZURlZmluaXRpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cdGNvbnN0IElCTkRhdGEgPSAhZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCA/IHsgc2VtYW50aWNPYmplY3Q6IGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCwgYWN0aW9uOiBkYXRhRmllbGQuQWN0aW9uIH0gOiB1bmRlZmluZWQ7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdGNvbnN0IHRvb2xiYXJBY3Rpb25JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uSWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIElCTkRhdGEpLCBjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdG9vbGJhckFjdGlvbklkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZCwgXCJDb250ZXh0TWVudVwiXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17dGFibGVBY3Rpb25Db250ZXh0TWVudUlkfVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIElCTkRhdGEpLCBjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgdGhlIGJ1dHRvbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgZm9yIHRoZSBidXR0b24vbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcylcblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHRlbXBsYXRlOiBNZW51SXRlbSB8IEJ1dHRvbiB8IHVuZGVmaW5lZDtcblx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRpZiAoaXNEYXRhRmllbGRGb3JBY3Rpb24oZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0XHRcdFx0aWYgKCEhaXNCb3VuZCAmJiB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdFx0XHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlzT3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0XHRcdFx0Ly8gc2hvdyBvbmx5IGJvdW5kIGFjdGlvbnMgaW4gY29udGV4dCBtZW51XG5cdFx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUgfHwgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpIHtcblx0XHRcdFx0XHRpZiAoaXNCb3VuZCAhPT0gdHJ1ZSB8fCBpc09wZXJhdGlvbkF2YWlsYWJsZSkge1xuXHRcdFx0XHRcdFx0dGVtcGxhdGUgPSBnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24oZGF0YUZpZWxkLCBhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHQoIWZvckNvbnRleHRNZW51IHx8IFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KGFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRlbXBsYXRlID0gZ2V0RGF0YUZpZWxkQnV0dG9uRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRpZiAodGVtcGxhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgZGF0YUZpZWxkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiB0ZW1wbGF0ZVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiB0ZW1wbGF0ZSBhcyBNZW51SXRlbTtcblx0fVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGRlZmF1bHQgYWN0aW9uIGhhbmRsZXIgdGhhdCBpcyBpbnZva2VkIHdoZW4gYWRkaW5nIHRoZSBtZW51IGJ1dHRvbi5cbiAqIEBwYXJhbSBkZWZhdWx0QWN0aW9uIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGUgbWVudVxuICogQHBhcmFtIGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24gVGhlIGRhdGFGaWVsZCBmb3IgdGhlIGRlZmF1bHQgYWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQgaGFuZGxlciBvciBjb21tYW5kXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRNZW51QnV0dG9uQWN0aW9uKFxuXHRkZWZhdWx0QWN0aW9uOiBDdXN0b21BY3Rpb24gfCB1bmRlZmluZWQsXG5cdGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb246IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IHVuZGVmaW5lZCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogeyBoYW5kbGVyPzogKGU6IFVJNUV2ZW50KSA9PiB2b2lkOyBjb21tYW5kPzogc3RyaW5nIH0ge1xuXHRpZiAoIWRlZmF1bHRBY3Rpb24pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHR0cnkge1xuXHRcdHN3aXRjaCAoZGVmYXVsdEFjdGlvbi50eXBlKSB7XG5cdFx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRkZWZhdWx0QWN0aW9uLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH07XG5cblx0XHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKGRlZmF1bHRBY3Rpb24sIGZhbHNlKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdGlmIChkZWZhdWx0QWN0aW9uLmNvbW1hbmQpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0Y29tbWFuZDogYGNtZDoke2RlZmF1bHRBY3Rpb24uY29tbWFuZH18ZGVmYXVsdEFjdGlvbmBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyOiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihkZWZhdWx0QWN0aW9uLCBmYWxzZSlcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0aGUgTWVudUJ1dHRvbiBjb250cm9sIHdoaWNoIGVuYWJsZXMgdGhlIHVzZXIgdG8gc2hvdyBhIGhpZXJhcmNoaWNhbCBtZW51LlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIE1lbnVCdXR0b24gY29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRNZW51QnV0dG9uKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0aWYgKChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5yZXF1aXJlc1NlbGVjdGlvbiAmJiB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHR9XG5cdGNvbnN0IGljb24gPSBhY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZDtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbiA9IChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5kZWZhdWx0QWN0aW9uIGFzIEN1c3RvbUFjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBkYXRhRmllbGRGb3JEZWZhdWx0QWN0aW9uID0gZGVmYXVsdEFjdGlvbj8uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gcGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+KGRlZmF1bHRBY3Rpb24uYW5ub3RhdGlvblBhdGgpXG5cdFx0XHRcdFx0LnRhcmdldFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbkhhbmRsZXJzID0gZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24oZGVmYXVsdEFjdGlvbiwgZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiwgcGFyYW1ldGVycyk7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gYWN0aW9uLm1lbnVcblx0XHRcdD8uZmlsdGVyKChtZW51SXRlbUFjdGlvbikgPT4gdHlwZW9mIG1lbnVJdGVtQWN0aW9uICE9PSBcInN0cmluZ1wiKVxuXHRcdFx0Lm1hcCgobWVudUl0ZW1BY3Rpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtKGFjdGlvbiwgbWVudUl0ZW1BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAobWVudUl0ZW1zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZF0pO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRtZW51UG9zaXRpb249e1BvcHVwLkRvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdFx0XHRpZD17bWVudUlkfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRcdHVzZURlZmF1bHRBY3Rpb25Pbmx5PXshIShhY3Rpb24gYXMgQ3VzdG9tQW5kQWN0aW9uKS5kZWZhdWx0QWN0aW9ufVxuXHRcdFx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0XHRcdGJ1dHRvbk1vZGU9eyhhY3Rpb24gYXMgQ3VzdG9tQW5kQWN0aW9uKS5kZWZhdWx0QWN0aW9uID8gTWVudUJ1dHRvbk1vZGUuU3BsaXQgOiBNZW51QnV0dG9uTW9kZS5SZWd1bGFyfVxuXHRcdFx0XHRcdFx0ZGVmYXVsdEFjdGlvbj17ZGVmYXVsdEFjdGlvbkhhbmRsZXJzLmhhbmRsZXJ9XG5cdFx0XHRcdFx0XHRqc3g6Y29tbWFuZD17ZGVmYXVsdEFjdGlvbkhhbmRsZXJzLmNvbW1hbmR9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBtZW51SWQpXSxcblx0XHRcdFx0XHRcdFx0bWVudTogPE1lbnU+e21lbnVJdGVtc308L01lbnU+LFxuXHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdDwvTWVudUJ1dHRvbj5cblx0XHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IG1lbnVJdGVtc0ZvckNvbnRleHRNZW51OiBCYXNlQWN0aW9uW10gPSBbXTtcblx0XHRhY3Rpb24ubWVudT8uZm9yRWFjaCgobWVudUl0ZW1BY3Rpb24pID0+IHtcblx0XHRcdGlmICh0eXBlb2YgbWVudUl0ZW1BY3Rpb24gIT09IFwic3RyaW5nXCIgJiYgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUobWVudUl0ZW1BY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSkge1xuXHRcdFx0XHRtZW51SXRlbXNGb3JDb250ZXh0TWVudT8ucHVzaChtZW51SXRlbUFjdGlvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRjb25zdCBtZW51SXRlbXMgPSBtZW51SXRlbXNGb3JDb250ZXh0TWVudVxuXHRcdFx0LmZpbHRlcigobWVudUl0ZW1BY3Rpb24pID0+IHR5cGVvZiBtZW51SXRlbUFjdGlvbiAhPT0gXCJzdHJpbmdcIilcblx0XHRcdC5tYXAoKG1lbnVJdGVtQWN0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRNZW51SXRlbShhY3Rpb24sIG1lbnVJdGVtQWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xuXG5cdFx0aWYgKG1lbnVJdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51fVxuXHRcdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0aXRlbXM6IG1lbnVJdGVtc1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBkZWZhdWx0IGJ1dHRvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEJ1dHRvbihcblx0YWN0aW9uOiBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmQgPyB1bmRlZmluZWQgOiBoYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IGFjdGlvbi5jb21tYW5kID8gYGNtZDoke2NvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblxuXHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0YWN0aW9uID0gZGVlcENsb25lKGFjdGlvbik7XG5cdFx0YWN0aW9uLmVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWQgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKSk7XG5cdFx0YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0YW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKVxuXHRcdCk7XG5cdH1cblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGUE06ICdzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlcid9XCJcblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkXSl9XG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWR9XG5cdFx0XHRcdFx0aWNvbj17YWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWR9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWRdKSldLFxuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSBpZiAoVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpIHtcblx0XHRjb25zdCB0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIFwiQ29udGV4dE1lbnVcIl0pO1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGUE06ICdzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlcid9XCJcblx0XHRcdFx0aWQ9e3RhYmxlQWN0aW9uQ29udGV4dE1lbnVJZH1cblx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCB0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIGFuIGFjdGlvbiBidXR0b24vbWVudSBpdGVtIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBhY3Rpb24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdG8gZ2V0XG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgb2YgdGhlIGFjdGlvblxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb24oXG5cdGFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRGVmYXVsdFwiOlxuXHRcdFx0aWYgKFwibm9XcmFwXCIgaW4gYWN0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBnZXREZWZhdWx0QnV0dG9uKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk1lbnVcIjpcblx0XHRcdHJldHVybiBnZXRNZW51QnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXHRyZXR1cm4gZ2V0RGF0YUZpZWxkQnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb3B5IGFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIGNvcHkgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiBhY3Rpb24gaXMgZm9yIEFjdGlvbiBUb29sYmFyIG9mIENvbnRleHQgTWVudVxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGFjdGlvblxuICovXG5mdW5jdGlvbiBnZXRDb3B5QWN0aW9uKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBkYXRhRmllbGQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHQ/IChwYXJhbWV0ZXJzLmNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkudGFyZ2V0IGFzIERhdGFGaWVsZEZvckFjdGlvbilcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSE7XG5cdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBhY3Rpb25Db250ZXh0XG5cdFx0PyBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGFjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25Db250ZXh0KVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdGNvbnN0IHByZXNzID0gZGF0YUZpZWxkXG5cdFx0PyBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIoZGF0YUZpZWxkLCBhY3Rpb24sIHVuZGVmaW5lZCwgZm9yQ29udGV4dE1lbnUpXG5cdFx0OiB1bmRlZmluZWQ7XG5cblx0bGV0IGVuYWJsZWQ6IHN0cmluZyB8IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IG9wZXJhdGlvbkF2YWlsYWJsZVxuXHRcdD8gVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkKFxuXHRcdFx0XHR0YWJsZS50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0YWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0YWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRmb3JDb250ZXh0TWVudSxcblx0XHRcdFx0dHJ1ZVxuXHRcdCAgKVxuXHRcdDogYHs9ICR7QWN0aW9uSGVscGVyLmdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uKFwic2luZ2xlXCIsIGZvckNvbnRleHRNZW51KX19YDtcblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0fVxuXG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkXSl9XG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0cHJlc3M9e3ByZXNzfVxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pKV0sXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc31cblx0XHRcdFx0ZW5hYmxlZD17Y29tcGlsZUV4cHJlc3Npb24oZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSkpIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZCwgXCJDb250ZXh0TWVudVwiXSkpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgY3JlYXRlIGJ1dHRvbi5cbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbiBTdGFuZGFyZCBhY3Rpb25zIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgc2V0IHRvIGBmYWxzZWAsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhci5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIGNyZWF0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRlQnV0dG9uKFxuXHRzdGFuZGFyZEFjdGlvbjogU3RhbmRhcmRBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQWN0aW9uc1BsYWNlaG9sZGVyIHwgQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBjb2xsZWN0aW9uRW50aXR5Lm5hbWU7XG5cdGNvbnN0IGJ1dHRvblRleHQgPSB0YWJsZS5nZXRUcmFuc2xhdGVkVGV4dChcIk1fQ09NTU9OX1RBQkxFX0NSRUFURVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0Y29uc3QgY3JlYXRlT3V0Ym91bmREZXRhaWwgPSAodGFibGUudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY3JlYXRlIGFzIENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwpLm91dGJvdW5kRGV0YWlsO1xuXHRjb25zdCBjdXN0b21EYXRhID0gY3JlYXRlT3V0Ym91bmREZXRhaWxcblx0XHQ/IGNyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIHsgc2VtYW50aWNPYmplY3Q6IGNyZWF0ZU91dGJvdW5kRGV0YWlsLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IGNyZWF0ZU91dGJvdW5kRGV0YWlsLmFjdGlvbiB9KVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4pIHtcblx0XHRyZXR1cm4gPEFjdGlvbnNQbGFjZWhvbGRlciBpZD17YCR7dGFibGUuY29udGVudElkfS11cGxvYWRCdXR0b25gfSBwbGFjZWhvbGRlckZvcj1cIlVwbG9hZEJ1dHRvblBsYWNlaG9sZGVyXCIgLz47XG5cdH0gZWxzZSBpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q3JlYXRlfHByZXNzXCJcblx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGN1c3RvbURhdGEsXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXG5cdFx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e3N0YW5kYXJkQWN0aW9uLnByaW9yaXR5fVxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwPXtzdGFuZGFyZEFjdGlvbi5ncm91cH1cblx0XHRcdFx0XHRcdFx0PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkNyZWF0ZTo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDcmVhdGVNZW51KFxuXHRzdGFuZGFyZEFjdGlvbjogU3RhbmRhcmRBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5LFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGNvbGxlY3Rpb25FbnRpdHkubmFtZTtcblx0Y29uc3QgYnV0dG9uVGV4dCA9IHRhYmxlLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9DT01NT05fVEFCTEVfQ1JFQVRFXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRjb25zdCB2YWx1ZXMgPSB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZSEudmFsdWVzO1xuXHRjb25zdCBoYXNDdXN0b21DcmVhdGVFbmFibGVtZW50ID0gdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCAhPT0gdW5kZWZpbmVkO1xuXG5cdGNvbnN0IG1lbnVJdGVtcyA9IHZhbHVlcy5tYXAoKGFsbG93ZWRWYWx1ZSwgaW5kZXgpID0+IHtcblx0XHRjb25zdCBtb2RlbE5hbWUgPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblxuXHRcdGNvbnN0IGlzRW5hYmxlZCA9IGhhc0N1c3RvbUNyZWF0ZUVuYWJsZW1lbnRcblx0XHRcdD8gbm90RXF1YWwocGF0aEluTW9kZWwoYCR7bW9kZWxOYW1lfWNyZWF0ZUVuYWJsZW1lbnQvQ3JlYXRlXyR7aW5kZXh9YCwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpZCA9IGZvckNvbnRleHRNZW51XG5cdFx0XHQ/IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFsbG93ZWRWYWx1ZS52YWx1ZSwgXCJDb250ZXh0TWVudVwiXSlcblx0XHRcdDogZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWxsb3dlZFZhbHVlLnZhbHVlXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdHRleHQ9e2FsbG93ZWRWYWx1ZS50ZXh0fVxuXHRcdFx0XHRlbmFibGVkPXtpc0VuYWJsZWQgPyBjb21waWxlRXhwcmVzc2lvbihpc0VuYWJsZWQpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRwcmVzcz17aGFuZGxlclByb3ZpZGVyLmdldENyZWF0ZU1lbnVJdGVtUHJlc3NIYW5kbGVyKGluZGV4LCBmb3JDb250ZXh0TWVudSl9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0pO1xuXG5cdGlmIChmb3JDb250ZXh0TWVudSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGl0ZW1zOiBtZW51SXRlbXMgIT09IHVuZGVmaW5lZCAmJiBtZW51SXRlbXMubGVuZ3RoID4gMCA/IG1lbnVJdGVtcyA6IHVuZGVmaW5lZFxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfSBkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCI+XG5cdFx0XHQ8TWVudUJ1dHRvblxuXHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRtZW51UG9zaXRpb249XCJCZWdpbkJvdHRvbVwiXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXldKX1cblx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5XSkpXSxcblx0XHRcdFx0XHRtZW51OiA8TWVudT57bWVudUl0ZW1zfTwvTWVudT4sXG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGFcblx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e3N0YW5kYXJkQWN0aW9uLnByaW9yaXR5fVxuXHRcdFx0XHRcdFx0XHRncm91cD17c3RhbmRhcmRBY3Rpb24uZ3JvdXB9XG5cdFx0XHRcdFx0XHQ+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUJ1dHRvbj5cblx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgZGVsZXRlIGJ1dHRvbi5cbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbiBTdGFuZGFyZCBhY3Rpb25zIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlbGV0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0RGVsZXRlQnV0dG9uKFxuXHRzdGFuZGFyZEFjdGlvbjogU3RhbmRhcmRBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBjb2xsZWN0aW9uRW50aXR5Lm5hbWU7XG5cdGNvbnN0IGJ1dHRvblRleHQgPSB0YWJsZS5nZXRUcmFuc2xhdGVkVGV4dChcIk1fQ09NTU9OX1RBQkxFX0RFTEVURVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6RGVsZXRlRW50cnl8cHJlc3NcIlxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0YXJpYUhhc1BvcHVwPVwiRGlhbG9nXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXG5cdFx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e3N0YW5kYXJkQWN0aW9uLnByaW9yaXR5fVxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwPXtzdGFuZGFyZEFjdGlvbi5ncm91cH1cblx0XHRcdFx0XHRcdFx0PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpEZWxldGVFbnRyeTo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3Igc3RhbmRhcmQgYWN0aW9ucyBiYXNlZCBvbiB0aGUga2V5IG9mIHRoZSBzdGFuZGFyZCBhY3Rpb24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdG8gdGVtcGxhdGVcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0YW5kYXJkIGFjdGlvblxuICovXG5mdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbihcblx0YWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IEFjdGlvbnNQbGFjZWhvbGRlciB8IHVuZGVmaW5lZCB7XG5cdGlmIChhY3Rpb24uaXNUZW1wbGF0ZWQgPT09IFwiZmFsc2VcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsICYmIGFjdGlvbi5rZXkgIT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUpIHtcblx0XHRhY3Rpb24gPSBkZWVwQ2xvbmUoYWN0aW9uKTtcblx0XHRhY3Rpb24uZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0XHRhY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpXG5cdFx0KTtcblx0fVxuXG5cdHN3aXRjaCAoYWN0aW9uLmtleSkge1xuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZTpcblx0XHRcdGlmIChcblx0XHRcdFx0IXRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCB8fFxuXHRcdFx0XHQvLyBXZSBvbmx5IGhhdmUgQ3JlYXRlIG9uIHRoZSBDb250ZXh0TWVudSBvbiB0aGUgVHJlZVRhYmxlXG5cdFx0XHRcdCh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlICE9PSBcIlRyZWVUYWJsZVwiICYmIGZvckNvbnRleHRNZW51KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlKSB7XG5cdFx0XHRcdHJldHVybiBnZXRDcmVhdGVNZW51KGFjdGlvbiwgdGFibGUsIGNvbGxlY3Rpb25FbnRpdHksIGZvckNvbnRleHRNZW51LCBoYW5kbGVyUHJvdmlkZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGdldENyZWF0ZUJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkVudGl0eSk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGU6XG5cdFx0XHRyZXR1cm4gZ2V0RGVsZXRlQnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uRW50aXR5KTtcblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5DdXQ6XG5cdFx0XHRyZXR1cm4gZ2V0Q3V0QnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51KTtcblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5Db3B5OlxuXHRcdFx0cmV0dXJuIGdldENvcHlCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlOlxuXHRcdFx0cmV0dXJuIGdldFBhc3RlQnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51KTtcblxuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLk1hc3NFZGl0OlxuXHRcdFx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCkge1xuXHRcdFx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRcdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXldKX1cblx0XHRcdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX01BU1NFRElUfVwiXG5cdFx0XHRcdFx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5nZXRNYXNzRWRpdEJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRncm91cD17YWN0aW9uLmdyb3VwfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX01BU1NFRElUfVwiXG5cdFx0XHRcdFx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuZ2V0TWFzc0VkaXRCdXR0b25QcmVzc0hhbmRsZXIodHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuSW5zaWdodHM6XG5cdFx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT17YWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiIHx8IGFjdGlvbi52aXNpYmxlID09PSBcImZhbHNlXCIgPyB1bmRlZmluZWQgOiBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwifVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0lOU0lHSFRTX0NBUkR9XCJcblx0XHRcdFx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5hZGRDYXJkVG9JbnNpZ2h0c1ByZXNzfVxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5ID8/IFwiQWx3YXlzT3ZlcmZsb3dcIn0gZ3JvdXA9e2FjdGlvbi5ncm91cH0gLz5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZVVwOlxuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVEb3duOlxuXHRcdFx0cmV0dXJuIGdldE1vdmVVcERvd25CdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUpO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIHN0YW5kYXJkLCBhbm5vdGF0aW9uLCBhbmQgY3VzdG9tIGFjdGlvbnMgb2YgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9ucyhcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogKEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IEFjdGlvbnNQbGFjZWhvbGRlcilbXSB7XG5cdC8vIEFwcGx5IHByaW1hcnkgYWN0aW9uIG92ZXJmbG93IHByb3RlY3Rpb24gYmVmb3JlIHByb2Nlc3Npbmdcblx0Y29uc3QgYWN0aW9uc1dpdGhPdmVyZmxvd1Byb3RlY3Rpb24gPSBBY3Rpb25IZWxwZXIuZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zKTtcblxuXHRyZXR1cm4gYWN0aW9uc1dpdGhPdmVyZmxvd1Byb3RlY3Rpb25cblx0XHQubWFwKChhY3Rpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBBY3Rpb25UeXBlLlN0YW5kYXJkOlxuXHRcdFx0XHRcdHJldHVybiBnZXRTdGFuZGFyZEFjdGlvbihhY3Rpb24gYXMgU3RhbmRhcmRBY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIsIGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRcdFx0XHRjYXNlIEFjdGlvblR5cGUuQ29weTpcblx0XHRcdFx0XHRyZXR1cm4gZ2V0Q29weUFjdGlvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHJldHVybiBnZXRBY3Rpb24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uICE9PSB1bmRlZmluZWQpIGFzIChBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCBBY3Rpb25zUGxhY2Vob2xkZXIpW107XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciBCYXNpY1NlYXJjaC5cbiAqIEBwYXJhbSB1c2VCYXNpY1NlYXJjaFxuICogQHBhcmFtIGZpbHRlckJhcklkXG4gKiBAcGFyYW0gX2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZFxuICogQHBhcmFtIGlzU2VhcmNoYWJsZVxuICogQHJldHVybnMgVGhlIGNvbnRyb2wgb2YgdGhlIEJhc2ljU2VhcmNoXG4gKi9cbmZ1bmN0aW9uIGdldEJhc2ljU2VhcmNoKFxuXHR1c2VCYXNpY1NlYXJjaDogYm9vbGVhbixcblx0ZmlsdGVyQmFySWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0X2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZDogYm9vbGVhbixcblx0aXNTZWFyY2hhYmxlOiBib29sZWFuXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKHVzZUJhc2ljU2VhcmNoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbZmlsdGVyQmFySWQsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGxhYmVsPVwie3NhcC5mZS5pMThuPk1fQkFTSUNfU0VBUkNIfVwiXG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGFjdGlvbjogPEJhc2ljU2VhcmNoTWFjcm8gaWQ9e2ZpbHRlckJhcklkfSB1c2VEcmFmdEVkaXRTdGF0ZT17X2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZH0gdmlzaWJsZT17aXNTZWFyY2hhYmxlfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRhYmxlIGZ1bGxzY3JlZW4gYnV0dG9uLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIG9mIHRoZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0RnVsbFNjcmVlbih0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMpOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZUZ1bGxTY3JlZW4pIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiU3RhbmRhcmRBY3Rpb25cIiwgXCJGdWxsU2NyZWVuXCIsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGxhYmVsPVwie3NhcC5mZS5pMThuPk1fRlVMTF9TQ1JFRU59XCJcblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiA8VGFibGVGdWxsU2NyZWVuQnV0dG9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlN0YW5kYXJkQWN0aW9uXCIsIFwiRnVsbFNjcmVlblwiXSl9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgWE1MIHN0cmluZyBmb3IgdGhlIEN1dCBCdXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmQgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ3V0IEJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRDdXRCdXR0b24oYWN0aW9uOiBTdGFuZGFyZEFjdGlvbiwgdGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkN1dFwiLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfSBkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCI+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDdXRcIl0pfVxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DVVR9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDdXR8cHJlc3NcIlxuXHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ3V0XCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ1VUfVwiXG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkN1dDo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciB0aGUgQ29weSBidXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmRBY3Rpb24uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSBUYWJsZSBidWlsZGluZyBibG9jay5cbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEN1dCBidXR0b24uXG4gKi9cbmZ1bmN0aW9uIGdldENvcHlCdXR0b24oYWN0aW9uOiBTdGFuZGFyZEFjdGlvbiwgdGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkNvcHlcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ29weVwiXSl9XG5cdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPUFl9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDb3B5fHByZXNzXCJcblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkNvcHlcIiwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DT1BZfVwiXG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkNvcHk6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRNb3ZlVXBEb3duQnV0dG9uKGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sIHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBmb3JNb3ZlVXAgPSBhY3Rpb24ua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZVVwO1xuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0dGV4dD17Zm9yTW92ZVVwID8gXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX1VQfVwiIDogXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX0RPV059XCJ9XG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9e2Zvck1vdmVVcCA/IFwiY21kOlRhYmxlTW92ZUVsZW1lbnRVcHxwcmVzc1wiIDogXCJjbWQ6VGFibGVNb3ZlRWxlbWVudERvd258cHJlc3NcIn1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17Zm9yTW92ZVVwID8gXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX1VQfVwiIDogXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX0RPV059XCJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtmb3JNb3ZlVXAgPyBcImNtZDpUYWJsZU1vdmVFbGVtZW50VXA6OkNvbnRleHRNZW51fHByZXNzXCIgOiBcImNtZDpUYWJsZU1vdmVFbGVtZW50RG93bjo6Q29udGV4dE1lbnV8cHJlc3NcIn1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBQYXN0ZSBCdXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBQYXN0ZSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgUGFzdGUgQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldFBhc3RlQnV0dG9uKFxuXHRhY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24gaWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiUGFzdGVcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlBhc3RlXCJdKX1cblx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9QQVNURX1cIlxuXHRcdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6UGFzdGV8cHJlc3NcIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGZvciBDb250ZXh0IE1lbnVcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlBhc3RlXCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9QQVNURX1cIlxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOlBhc3RlOjpDb250ZXh0TWVudXxwcmVzc1wiXG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFhNTCBzdHJpbmcgZm9yIGFjdGlvbnMuXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFjdGlvbnNUZW1wbGF0ZShcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBDb250cm9sW10ge1xuXHRjb25zdCBfY29sbGVjdGlvbklzRHJhZnRFbmFibGVkID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoY29sbGVjdGlvbkVudGl0eSkgfHwgTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29sbGVjdGlvbkVudGl0eSk7XG5cdGxldCBzZWFyY2hhYmxlOiBib29sZWFuO1xuXHRpZiAodGFibGUuaXNTZWFyY2hhYmxlID09PSBmYWxzZSkge1xuXHRcdHNlYXJjaGFibGUgPSBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRzZWFyY2hhYmxlID0gdGFibGUudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uc2VhcmNoYWJsZTtcblx0fVxuXG5cdGNvbnN0IGFjdGlvbnM6IChBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCBBY3Rpb25zUGxhY2Vob2xkZXIpW10gPSBbXTtcblx0Y29uc3QgYmFzaWNTZWFyY2ggPSBnZXRCYXNpY1NlYXJjaCghIXRhYmxlLnVzZUJhc2ljU2VhcmNoLCB0YWJsZS5maWx0ZXJCYXIsIF9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQsIHNlYXJjaGFibGUpO1xuXHRpZiAoYmFzaWNTZWFyY2gpIHtcblx0XHRhY3Rpb25zLnB1c2goYmFzaWNTZWFyY2gpO1xuXHR9XG5cdGFjdGlvbnMucHVzaCguLi5nZXRBY3Rpb25zKHRhYmxlLCBmYWxzZSwgcGFyYW1ldGVycywgY29sbGVjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25FbnRpdHkpKTtcblx0Y29uc3QgZnVsbFNjcmVlbiA9IGdldEZ1bGxTY3JlZW4odGFibGUpO1xuXHRpZiAoZnVsbFNjcmVlbikge1xuXHRcdGFjdGlvbnMucHVzaChmdWxsU2NyZWVuKTtcblx0fVxuXG5cdHJldHVybiBhY3Rpb25zIGFzIENvbnRyb2xbXTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIGNvbnRleHQgbWVudSBhY3Rpb25zLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVDb250ZXh0TWVudVRlbXBsYXRlKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IE1lbnVJdGVtW10ge1xuXHRjb25zdCB0ZW1wbGF0ZTogTWVudUl0ZW1bXSA9IGdldEFjdGlvbnModGFibGUsIHRydWUsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSBhcyB1bmtub3duIGFzIE1lbnVJdGVtW107XG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0dGVtcGxhdGUucHVzaChnZXRFeHBhbmRlZENvbGxhcHNlQWN0aW9ucyh0YWJsZSwgdHJ1ZSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZXhwYW5kTm9kZSkpO1xuXHRcdHRlbXBsYXRlLnB1c2goZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnModGFibGUsIGZhbHNlLCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5jb2xsYXBzZU5vZGUpKTtcblx0fVxuXHRyZXR1cm4gdGVtcGxhdGU7XG59XG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkQ29sbGFwc2VBY3Rpb25zKHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZXhwYW5kOiBib29sZWFuLCBwcmVzc0hhbmRsZXI/OiAoZTogVUk1RXZlbnQpID0+IHZvaWQpOiBNZW51SXRlbSB7XG5cdGNvbnN0IGVuYWJsZUV4cHJlc3Npb24gPSBleHBhbmRcblx0XHQ/IGFuZChcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pc0V4cGFuZGFibGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpXG5cdFx0ICApXG5cdFx0OiBhbmQoXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaXNDb2xsYXBzYWJsZVwiLCBcImludGVybmFsXCIpLCB0cnVlKSxcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSlcblx0XHQgICk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZXhwYW5kID8gXCJFeHBhbmRcIiA6IFwiQ29sbGFwc2VcIiwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHR0ZXh0PXtleHBhbmQgPyBcIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPTlRFWFRNRU5VX0VYUEFORH1cIiA6IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ09OVEVYVE1FTlVfQ09MTEFQU0V9XCJ9XG5cdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0ZW5hYmxlZD17ZW5hYmxlRXhwcmVzc2lvbn1cblx0XHQvPlxuXHQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBZ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQSxvQkFBb0JBLENBQzVCQyxTQUE2QixFQUM3QkMsTUFBb0QsRUFDcERDLGNBQTBCLEVBQzFCQyxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJDLGlCQUEwQixFQUMxQkMsVUFBcUMsRUFDZDtJQUN2QixJQUFJLENBQUNKLGNBQWMsQ0FBQ0ssY0FBYyxFQUFFO01BQ25DLE9BQU9DLFNBQVM7SUFDakI7SUFDQSxNQUFNQyxpQkFBaUIsR0FBR0MsWUFBWSxDQUFDQyxnQkFBZ0IsQ0FDdERMLFVBQVUsQ0FBQ00sU0FBUyxDQUFDQyxvQkFBb0IsQ0FBQ1gsY0FBYyxDQUFDSyxjQUFjLEdBQUcsU0FBUyxDQUNwRixDQUFDO0lBQ0QsTUFBTU8sYUFBYSxHQUFHUixVQUFVLENBQUNNLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNKLGlCQUFpQixDQUFFO0lBQ25GLE1BQU1NLDRCQUE0QixHQUFHRCxhQUFhLEdBQy9DRSxrQkFBa0IsQ0FBQ0MsMkJBQTJCLENBQUNILGFBQWEsRUFBRVQsaUJBQWlCLENBQUMsR0FDaEZHLFNBQVM7SUFDWixNQUFNVSxPQUFPLEdBQUdsQixTQUFTLENBQUNtQixZQUFZLEVBQUVELE9BQU87SUFDL0MsTUFBTUUsb0JBQW9CLEdBQUdwQixTQUFTLENBQUNtQixZQUFZLEVBQUVFLFdBQVcsRUFBRUMsSUFBSSxFQUFFQyxrQkFBa0IsRUFBRUMsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLO0lBQy9HLE1BQU1DLE9BQU8sR0FBRyxDQUFDckIsY0FBYyxHQUFHRixjQUFjLENBQUN1QixPQUFPLEdBQUd2QixjQUFjLENBQUN1QixPQUFPLEdBQUcsZUFBZTtJQUNuRyxNQUFNQyxlQUFlLEdBQUd0QixjQUFjLEdBQUcsYUFBYSxHQUFHLFlBQVk7SUFDckUsTUFBTXVCLFlBQVksR0FBR3pCLGNBQWMsQ0FBQ3VCLE9BQU8sR0FDeENqQixTQUFTLEdBQ1RGLFVBQVUsQ0FBQ3NCLGVBQWUsQ0FBQ0MsdUNBQXVDLENBQUM3QixTQUFTLEVBQUVFLGNBQWMsRUFBRUQsTUFBTSxFQUFFRyxjQUFjLENBQUM7SUFDeEgsTUFBTTBCLFlBQVksR0FBRzVCLGNBQWMsQ0FBQ3VCLE9BQU8sR0FBRyxPQUFPQSxPQUFPLFFBQVEsR0FBR2pCLFNBQVM7SUFFaEYsSUFBSXVCLE9BQTRELEdBQy9EN0IsY0FBYyxDQUFDNkIsT0FBTyxLQUFLdkIsU0FBUyxHQUNqQ04sY0FBYyxDQUFDNkIsT0FBTyxHQUN0QkMsV0FBVyxDQUFDQywyQkFBMkIsQ0FDdkM5QixLQUFLLENBQUMrQixlQUFlLEVBQ3JCbEMsU0FBUyxDQUFDbUMsTUFBTSxFQUNoQixDQUFDLENBQUNqQixPQUFPLEVBQ1RKLGFBQWEsQ0FBQ3NCLFNBQVMsQ0FBQyxDQUFDLEVBQ3pCbEMsY0FBYyxDQUFDbUMsY0FBYyxFQUM3QnRCLDRCQUE0QixFQUFFdUIsZ0JBQWdCLEVBQzlDbEMsY0FDQSxDQUFDO0lBRUwsSUFBSUQsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNDLHVCQUF1QixFQUFFQyxzQkFBc0IsSUFBSSxDQUFDLENBQUN2QixPQUFPLEVBQUU7TUFDL0ZhLE9BQU8sR0FBR1csaUJBQWlCLENBQUNDLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxvQkFBb0IsRUFBRUMsb0JBQW9CLENBQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekY7SUFDQSxJQUFJYixPQUFPLEtBQUssSUFBSSxJQUFJRSxvQkFBb0IsRUFBRTtNQUM3QyxNQUFNMkIsTUFBTSxHQUFHQyxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRS9DLGNBQWMsQ0FBQ2dELEdBQUcsRUFBRWpELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRXhCLGVBQWUsRUFBRTFCLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO01BQzNILE9BQ0NtRCxJQUFBLENBQUNDLFFBQVE7UUFDUkMsSUFBSSxFQUFFckQsU0FBUyxDQUFDc0QsS0FBTTtRQUN0QkMsRUFBRSxFQUFFUixNQUFPO1FBQ1hTLEtBQUssRUFBRTdCLFlBQWE7UUFDcEIsZUFBYUcsWUFBYTtRQUMxQkMsT0FBTyxFQUFFQSxPQUFRO1FBQ2pCMEIsT0FBTyxFQUFFdkQsY0FBYyxDQUFDdUQsT0FBUTtRQUFBQyxRQUFBLEVBRS9CO1VBQ0FDLFVBQVUsRUFBRSxDQUFDQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUViLE1BQU0sQ0FBQztRQUNsRDtNQUFDLENBQ1EsQ0FBQztJQUViLENBQUMsTUFBTTtNQUNOLE9BQU92QyxTQUFTO0lBQ2pCO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNxRCxtQ0FBbUNBLENBQzNDN0QsU0FBNEMsRUFDNUNFLGNBQTBCLEVBQzFCQyxLQUEyQixFQUtoQjtJQUFBLElBSlhDLGNBQWMsR0FBQTBELFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF0RCxTQUFBLEdBQUFzRCxTQUFBLE1BQUcsS0FBSztJQUFBLElBQ3RCekQsaUJBQTBCLEdBQUF5RCxTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBdEQsU0FBQTtJQUFBLElBQzFCUCxNQUFvRCxHQUFBNkQsU0FBQSxDQUFBQyxNQUFBLE9BQUFELFNBQUEsTUFBQXRELFNBQUE7SUFBQSxJQUNwRG9CLGVBQTBDLEdBQUFrQyxTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBdEQsU0FBQTtJQUUxQyxNQUFNbUIsWUFBWSxHQUFHekIsY0FBYyxDQUFDdUIsT0FBTyxHQUN4Q2pCLFNBQVMsR0FDVG9CLGVBQWUsQ0FBQ29DLDhCQUE4QixDQUFDOUQsY0FBYyxFQUFFRSxjQUFjLENBQUM7SUFDakYsTUFBTTBCLFlBQVksR0FBRzVCLGNBQWMsQ0FBQ3VCLE9BQU8sR0FBRyxPQUFPdkIsY0FBYyxDQUFDdUIsT0FBTyxRQUFRLEdBQUdqQixTQUFTO0lBRS9GLE1BQU11QixPQUFPLEdBQ1o3QixjQUFjLENBQUM2QixPQUFPLEtBQUt2QixTQUFTLEdBQ2pDTixjQUFjLENBQUM2QixPQUFPLEdBQ3RCQyxXQUFXLENBQUNpQyx3QkFBd0IsQ0FDcEM7TUFDQ0MsVUFBVSxFQUFFN0QsaUJBQWlCO01BQzdCNkIsZUFBZSxFQUFFL0IsS0FBSyxDQUFDK0I7SUFDeEIsQ0FBQyxFQUNEbEMsU0FBUyxFQUNUQSxTQUFTLENBQUNtRSxlQUFlLEVBQ3pCbkUsU0FBUyxDQUFDb0UsbUJBQW1CLEVBQzdCaEUsY0FDQSxDQUFDO0lBQ0wsTUFBTW1ELEVBQUUsR0FBR25ELGNBQWMsR0FDdEI0QyxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRS9DLGNBQWMsQ0FBQ2dELEdBQUcsRUFBRWpELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRWxELFNBQVMsRUFBRSwrQkFBK0IsRUFBRSxhQUFhLENBQUMsQ0FBQyxHQUN0SGdELFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFL0MsY0FBYyxDQUFDZ0QsR0FBRyxFQUFFakQsTUFBTSxDQUFDaUQsR0FBRyxFQUFFbEQsU0FBUyxFQUFFLCtCQUErQixDQUFDLENBQUM7SUFDMUcsT0FDQ21ELElBQUEsQ0FBQ0MsUUFBUTtNQUNSQyxJQUFJLEVBQUVyRCxTQUFTLENBQUNzRCxLQUFNO01BQ3RCQyxFQUFFLEVBQUVBLEVBQUc7TUFDUEMsS0FBSyxFQUFFN0IsWUFBYTtNQUNwQixlQUFhRyxZQUFhO01BQzFCQyxPQUFPLEVBQUVBLE9BQVE7TUFDakIwQixPQUFPLEVBQUV2RCxjQUFjLENBQUN1RCxPQUFRO01BQUFDLFFBQUEsRUFFL0I7UUFDQUMsVUFBVSxFQUFFLENBQ1gsQ0FBQzNELFNBQVMsQ0FBQ21FLGVBQWUsR0FDdkJQLGdCQUFnQixDQUFDLFNBQVMsRUFBRTtVQUFFUyxjQUFjLEVBQUVyRSxTQUFTLENBQUNzRSxjQUFjO1VBQUVyRSxNQUFNLEVBQUVELFNBQVMsQ0FBQ21DO1FBQU8sQ0FBQyxDQUFDLEdBQ25HM0IsU0FBUyxFQUNab0QsZ0JBQWdCLENBQUMsVUFBVSxFQUFFTCxFQUFFLENBQUM7TUFFbEM7SUFBQyxDQUNRLENBQUM7RUFFYjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNnQixXQUFXQSxDQUNuQnRFLE1BQW9ELEVBQ3BEQyxjQUEwQixFQUMxQkMsS0FBMkIsRUFDM0JDLGNBQXVCLEVBQ3ZCQyxpQkFBMEIsRUFDMUJDLFVBQXFDLEVBQ2Q7SUFDdkIsTUFBTU4sU0FBUyxHQUFHRSxjQUFjLENBQUNLLGNBQWMsR0FDM0NELFVBQVUsQ0FBQ2tFLGlCQUFpQixDQUFDQyxXQUFXLENBQUN2RSxjQUFjLENBQUNLLGNBQWMsQ0FBQyxDQUFDbUUsTUFBTSxHQUMvRWxFLFNBQVM7SUFFWixRQUFRUixTQUFTLElBQUlFLGNBQWMsQ0FBQ3lFLElBQUk7TUFDdkMsS0FBSyxXQUFXO1FBQ2YsSUFBSUMsb0JBQW9CLENBQUM1RSxTQUFTLENBQUMsRUFBRTtVQUNwQyxJQUNDLENBQUNJLGNBQWMsSUFDZEEsY0FBYyxJQUFJNEIsV0FBVyxDQUFDNkMsMEJBQTBCLENBQUMzRSxjQUFjLEVBQUVDLEtBQUssQ0FBQzJFLGlCQUFpQixDQUFFLEVBQ2xHO1lBQ0QsT0FBTy9FLG9CQUFvQixDQUFDQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsY0FBYyxFQUFFQyxLQUFLLEVBQUVDLGNBQWMsRUFBRUMsaUJBQWlCLEVBQUVDLFVBQVUsQ0FBQztVQUNySDtRQUNEO1FBQ0E7TUFDRCxLQUFLLGVBQWU7UUFDbkIsSUFDQ3lFLG1DQUFtQyxDQUFDL0UsU0FBVSxDQUFDLEtBQzlDLENBQUNJLGNBQWMsSUFBS0EsY0FBYyxJQUFJNEIsV0FBVyxDQUFDNkMsMEJBQTBCLENBQUMzRSxjQUFjLEVBQUVDLEtBQUssQ0FBQzJFLGlCQUFpQixDQUFFLENBQUMsRUFDdkg7VUFDRCxPQUFPakIsbUNBQW1DLENBQ3pDN0QsU0FBUyxFQUNURSxjQUFjLEVBQ2RDLEtBQUssRUFDTEMsY0FBYyxFQUNkQyxpQkFBaUIsRUFDakJKLE1BQU0sRUFDTkssVUFBVSxDQUFDc0IsZUFDWixDQUFDO1FBQ0Y7UUFDQTtNQUNEO0lBQ0Q7SUFFQSxNQUFNSCxPQUFPLEdBQUcsQ0FBQ3JCLGNBQWMsR0FBR0YsY0FBYyxDQUFDdUIsT0FBTyxHQUFHdkIsY0FBYyxDQUFDdUIsT0FBTyxHQUFHLGVBQWU7SUFDbkcsTUFBTUUsWUFBWSxHQUFHekIsY0FBYyxDQUFDdUIsT0FBTyxHQUN4Q2pCLFNBQVMsR0FDVEYsVUFBVSxDQUFDc0IsZUFBZSxDQUFDb0QsNkJBQTZCLENBQUM5RSxjQUFjLEVBQWtCRSxjQUFjLENBQUM7SUFDM0csTUFBTTBCLFlBQVksR0FBRzVCLGNBQWMsQ0FBQ3VCLE9BQU8sR0FBRyxPQUFPQSxPQUFPLFFBQVEsR0FBR2pCLFNBQVM7SUFDaEYsSUFBSXVCLE9BQU8sR0FBRyxDQUFDM0IsY0FBYyxHQUFHRixjQUFjLENBQUM2QixPQUFPLEdBQUk3QixjQUFjLENBQWtCK0UscUJBQXFCO0lBQy9HLElBQ0UvRSxjQUFjLENBQWtCZ0YsaUJBQWlCLElBQ2xEL0UsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNDLHVCQUF1QixFQUFFQyxzQkFBc0IsRUFDNUU7TUFDRFYsT0FBTyxHQUFHVyxpQkFBaUIsQ0FBQ0MsR0FBRyxDQUFDRyxvQkFBb0IsQ0FBQ2YsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFYSxFQUFFLENBQUNDLG9CQUFvQixDQUFDLENBQUM7SUFDL0Y7SUFDQSxNQUFNbkIsZUFBZSxHQUFHdEIsY0FBYyxHQUFHLGFBQWEsR0FBRyxZQUFZO0lBQ3JFLE1BQU0yQyxNQUFNLEdBQUdDLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFL0MsY0FBYyxDQUFDZ0QsR0FBRyxFQUFFeEIsZUFBZSxFQUFFekIsTUFBTSxDQUFDaUQsR0FBRyxFQUFFbEQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2xILE9BQ0NtRCxJQUFBLENBQUNDLFFBQVE7TUFDUixnQkFBYSx3Q0FBd0M7TUFDckRDLElBQUksRUFBRW5ELGNBQWMsRUFBRW1ELElBQUs7TUFDM0JFLEVBQUUsRUFBRVIsTUFBTztNQUNYUyxLQUFLLEVBQUU3QixZQUFhO01BQ3BCLGVBQWFHLFlBQWE7TUFDMUIyQixPQUFPLEVBQUV2RCxjQUFjLENBQUN1RCxPQUFRO01BQ2hDMUIsT0FBTyxFQUFFQSxPQUFRO01BQUEyQixRQUFBLEVBRWhCO1FBQ0FDLFVBQVUsRUFBRSxDQUFDQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUViLE1BQU0sQ0FBQztNQUNsRDtJQUFDLENBQ1EsQ0FBQztFQUViOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU29DLDJCQUEyQkEsQ0FDbkNuRixTQUE2QixFQUM3QkMsTUFBb0QsRUFDcERFLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QkMsaUJBQTBCLEVBQzFCQyxVQUFxQyxFQUNqQjtJQUNwQixNQUFNOEUsc0JBQXNCLEdBQUc5RSxVQUFVLENBQUNNLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNaLE1BQU0sQ0FBQ00sY0FBYyxHQUFHLFNBQVMsQ0FBRTtJQUM1RyxNQUFNRSxpQkFBaUIsR0FBR0MsWUFBWSxDQUFDQyxnQkFBZ0IsQ0FBQ3lFLHNCQUFzQixDQUFDO0lBQy9FLE1BQU10RSxhQUFhLEdBQUdSLFVBQVUsQ0FBQ00sU0FBUyxDQUFDQyxvQkFBb0IsQ0FBQ0osaUJBQWlCLENBQUU7SUFDbkYsTUFBTU0sNEJBQTRCLEdBQUdELGFBQWEsR0FDL0NFLGtCQUFrQixDQUFDQywyQkFBMkIsQ0FBU0gsYUFBYSxFQUFFVCxpQkFBaUIsQ0FBQyxHQUN4RkcsU0FBUztJQUNaLE1BQU1VLE9BQU8sR0FBR2xCLFNBQVMsQ0FBQ21CLFlBQVksRUFBRUQsT0FBTztJQUMvQyxNQUFNTyxPQUFPLEdBQUcsQ0FBQ3JCLGNBQWMsR0FBR0gsTUFBTSxDQUFDd0IsT0FBTyxHQUFHeEIsTUFBTSxDQUFDd0IsT0FBTyxHQUFHLGVBQWU7SUFDbkYsTUFBTUUsWUFBWSxHQUFHMUIsTUFBTSxDQUFDd0IsT0FBTyxHQUNoQ2pCLFNBQVMsR0FDVEYsVUFBVSxDQUFDc0IsZUFBZSxDQUFDQyx1Q0FBdUMsQ0FBQzdCLFNBQVMsRUFBRUMsTUFBTSxFQUFFTyxTQUFTLEVBQUVKLGNBQWMsQ0FBQztJQUNuSCxNQUFNMEIsWUFBWSxHQUFHN0IsTUFBTSxDQUFDd0IsT0FBTyxHQUFHLE9BQU9BLE9BQU8sUUFBUSxHQUFHakIsU0FBUztJQUN4RSxNQUFNdUIsT0FBTyxHQUNaOUIsTUFBTSxDQUFDOEIsT0FBTyxLQUFLdkIsU0FBUyxHQUN6QlAsTUFBTSxDQUFDOEIsT0FBTyxHQUNkQyxXQUFXLENBQUNDLDJCQUEyQixDQUN2QzlCLEtBQUssQ0FBQytCLGVBQWUsRUFDckJsQyxTQUFTLENBQUNtQyxNQUFNLEVBQ2hCLENBQUMsQ0FBQ2pCLE9BQU8sRUFDVEosYUFBYSxDQUFDc0IsU0FBUyxDQUFDLENBQUMsRUFDekJuQyxNQUFNLENBQUNvQyxjQUFjLEVBQ3JCdEIsNEJBQTRCLEVBQUV1QixnQkFBZ0IsRUFDOUNsQyxjQUNBLENBQUM7SUFDTCxNQUFNaUYsSUFBSSxHQUFHcEYsTUFBTSxDQUFDcUYsYUFBYSxLQUFLLElBQUksR0FBR0MsTUFBTSxHQUFHL0UsU0FBUztJQUMvRCxJQUFJLENBQUNKLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE1BQU1vRixlQUFlLEdBQUd4QyxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWpELFNBQVMsQ0FBQyxDQUFDO01BQzlELE9BQ0NtRCxJQUFBLENBQUNzQyxNQUFNO1FBQ05sQyxFQUFFLEVBQUVpQyxlQUFnQjtRQUNwQm5DLElBQUksRUFBRXJELFNBQVMsQ0FBQ3NELEtBQU07UUFDdEIrQixJQUFJLEVBQUVBLElBQUs7UUFDWEssWUFBWSxFQUFFQyxrQkFBa0IsQ0FBQzNGLFNBQVMsQ0FBRTtRQUM1Q3dELEtBQUssRUFBRTdCLFlBQWE7UUFDcEIsZUFBYUcsWUFBYTtRQUMxQjZDLElBQUksRUFBRWlCLFVBQVUsQ0FBQ0MsV0FBWTtRQUM3QjlELE9BQU8sRUFBRUEsT0FBUTtRQUNqQjBCLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQVE7UUFBQUMsUUFBQSxFQUV2QjtVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFNEIsZUFBZSxDQUFDLENBQUM7VUFDM0RNLFVBQVUsRUFBRTNDLElBQUEsQ0FBQzRDLHlCQUF5QjtZQUFDQyxRQUFRLEVBQUUvRixNQUFNLENBQUMrRixRQUFTO1lBQUNDLEtBQUssRUFBRWhHLE1BQU0sQ0FBQ2dHO1VBQU0sQ0FBNEI7UUFDbkg7TUFBQyxDQUNNLENBQUM7SUFFWCxDQUFDLE1BQU07TUFDTjtNQUNBLE1BQU1DLHdCQUF3QixHQUFHbEQsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVqRCxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDdEYsT0FDQ21ELElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUUyQyx3QkFBeUI7UUFDN0I3QyxJQUFJLEVBQUVyRCxTQUFTLENBQUNzRCxLQUFNO1FBQ3RCK0IsSUFBSSxFQUFFQSxJQUFLO1FBQ1g3QixLQUFLLEVBQUU3QixZQUFhO1FBQ3BCLGVBQWFHLFlBQWE7UUFDMUJDLE9BQU8sRUFBRUEsT0FBUTtRQUFBMkIsUUFBQSxFQUVoQjtVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFc0Msd0JBQXdCLENBQUM7UUFDcEU7TUFBQyxDQUNRLENBQUM7SUFFYjtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0MsMENBQTBDQSxDQUNsRG5HLFNBQTRDLEVBQzVDQyxNQUFvRCxFQUNwREUsS0FBMkIsRUFDM0JDLGNBQXVCLEVBQ3ZCQyxpQkFBMEIsRUFDMUJ1QixlQUEwQyxFQUN0QjtJQUNwQixNQUFNSCxPQUFPLEdBQUcsQ0FBQ3JCLGNBQWMsR0FBR0gsTUFBTSxDQUFDd0IsT0FBTyxHQUFHeEIsTUFBTSxDQUFDd0IsT0FBTyxHQUFHLGVBQWU7SUFDbkYsTUFBTUUsWUFBWSxHQUFHMUIsTUFBTSxDQUFDd0IsT0FBTyxHQUFHakIsU0FBUyxHQUFHb0IsZUFBZSxDQUFDb0MsOEJBQThCLENBQUMvRCxNQUFNLEVBQUVHLGNBQWMsQ0FBQztJQUN4SCxNQUFNMEIsWUFBWSxHQUFHN0IsTUFBTSxDQUFDd0IsT0FBTyxHQUFHLE9BQU9BLE9BQU8sUUFBUSxHQUFHakIsU0FBUztJQUN4RSxNQUFNdUIsT0FBTyxHQUNaOUIsTUFBTSxDQUFDOEIsT0FBTyxLQUFLdkIsU0FBUyxHQUN6QlAsTUFBTSxDQUFDOEIsT0FBTyxHQUNkQyxXQUFXLENBQUNpQyx3QkFBd0IsQ0FDcEM7TUFDQ0MsVUFBVSxFQUFFN0QsaUJBQWlCO01BQzdCNkIsZUFBZSxFQUFFL0IsS0FBSyxDQUFDK0I7SUFDeEIsQ0FBQyxFQUNEbEMsU0FBUyxFQUNUQSxTQUFTLENBQUNtRSxlQUFlLEVBQ3pCbkUsU0FBUyxDQUFDb0UsbUJBQW1CLEVBQzdCaEUsY0FDQSxDQUFDO0lBQ0wsTUFBTWdHLE9BQU8sR0FBRyxDQUFDcEcsU0FBUyxDQUFDbUUsZUFBZSxHQUFHO01BQUVFLGNBQWMsRUFBRXJFLFNBQVMsQ0FBQ3NFLGNBQWM7TUFBRXJFLE1BQU0sRUFBRUQsU0FBUyxDQUFDbUM7SUFBTyxDQUFDLEdBQUczQixTQUFTO0lBQy9ILElBQUksQ0FBQ0osY0FBYyxFQUFFO01BQ3BCO01BQ0EsTUFBTW9GLGVBQWUsR0FBR3hDLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFakQsU0FBUyxDQUFDLENBQUM7TUFDOUQsT0FDQ21ELElBQUEsQ0FBQ3NDLE1BQU07UUFDTmxDLEVBQUUsRUFBRWlDLGVBQWdCO1FBQ3BCbkMsSUFBSSxFQUFFckQsU0FBUyxDQUFDc0QsS0FBTTtRQUN0QkUsS0FBSyxFQUFFN0IsWUFBYTtRQUNwQixlQUFhRyxZQUFhO1FBQzFCNkMsSUFBSSxFQUFFaUIsVUFBVSxDQUFDQyxXQUFZO1FBQzdCOUQsT0FBTyxFQUFFQSxPQUFRO1FBQ2pCMEIsT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBUTtRQUFBQyxRQUFBLEVBRXZCO1VBQ0FDLFVBQVUsRUFBRSxDQUFDQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUV3QyxPQUFPLENBQUMsRUFBRXhDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTRCLGVBQWUsQ0FBQztRQUNqRztNQUFDLENBQ00sQ0FBQztJQUVYLENBQUMsTUFBTTtNQUNOO01BQ0EsTUFBTVUsd0JBQXdCLEdBQUdsRCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWpELFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztNQUN0RixPQUNDbUQsSUFBQSxDQUFDQyxRQUFRO1FBQ1JHLEVBQUUsRUFBRTJDLHdCQUF5QjtRQUM3QjdDLElBQUksRUFBRXJELFNBQVMsQ0FBQ3NELEtBQU07UUFDdEJFLEtBQUssRUFBRTdCLFlBQWE7UUFDcEIsZUFBYUcsWUFBYTtRQUMxQkMsT0FBTyxFQUFFQSxPQUFRO1FBQUEyQixRQUFBLEVBRWhCO1VBQ0FDLFVBQVUsRUFBRSxDQUFDQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUV3QyxPQUFPLENBQUMsRUFBRXhDLGdCQUFnQixDQUFDLFVBQVUsRUFBRXNDLHdCQUF3QixDQUFDO1FBQzFHO01BQUMsQ0FDUSxDQUFDO0lBRWI7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTRyxrQkFBa0JBLENBQzFCcEcsTUFBb0QsRUFDcERFLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QkMsaUJBQTBCLEVBQzFCQyxVQUFxQyxFQUNRO0lBQzdDLE1BQU1OLFNBQVMsR0FBR0MsTUFBTSxDQUFDTSxjQUFjLEdBQ25DRCxVQUFVLENBQUNrRSxpQkFBaUIsQ0FBQ0MsV0FBVyxDQUFDeEUsTUFBTSxDQUFDTSxjQUFjLENBQUMsQ0FBQ21FLE1BQU0sR0FDdkVsRSxTQUFTO0lBQ1osSUFBSThGLFFBQXVDO0lBQzNDLElBQUksQ0FBQ3RHLFNBQVMsRUFBRTtNQUNmLE9BQU9RLFNBQVM7SUFDakI7SUFDQSxRQUFRUCxNQUFNLENBQUMwRSxJQUFJO01BQ2xCLEtBQUssV0FBVztRQUNmLElBQUlDLG9CQUFvQixDQUFDNUUsU0FBUyxDQUFDLEVBQUU7VUFDcEMsTUFBTWtCLE9BQU8sR0FBR2xCLFNBQVMsQ0FBQ21CLFlBQVksRUFBRUQsT0FBTztVQUMvQyxJQUFJLENBQUMsQ0FBQ0EsT0FBTyxJQUFJZixLQUFLLENBQUMrQixlQUFlLENBQUNLLE9BQU8sQ0FBQ0MsdUJBQXVCLEVBQUVDLHNCQUFzQixFQUFFO1lBQy9GeEMsTUFBTSxHQUFHc0csU0FBUyxDQUFDdEcsTUFBTSxDQUFDO1lBQzFCQSxNQUFNLENBQUM4QixPQUFPLEdBQUdXLGlCQUFpQixDQUFDQyxHQUFHLENBQUNHLG9CQUFvQixDQUFDN0MsTUFBTSxDQUFDOEIsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFYSxFQUFFLENBQUNDLG9CQUFvQixDQUFDLENBQUM7VUFDN0c7VUFDQSxNQUFNekIsb0JBQW9CLEdBQUdwQixTQUFTLENBQUNtQixZQUFZLEVBQUVFLFdBQVcsRUFBRUMsSUFBSSxFQUFFQyxrQkFBa0IsRUFBRUMsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLO1VBQy9HO1VBQ0EsSUFBSSxDQUFDcEIsY0FBYyxJQUFJNEIsV0FBVyxDQUFDNkMsMEJBQTBCLENBQUM1RSxNQUFNLEVBQUVFLEtBQUssQ0FBQzJFLGlCQUFpQixDQUFDLEVBQUU7WUFDL0YsSUFBSTVELE9BQU8sS0FBSyxJQUFJLElBQUlFLG9CQUFvQixFQUFFO2NBQzdDa0YsUUFBUSxHQUFHbkIsMkJBQTJCLENBQUNuRixTQUFTLEVBQUVDLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxVQUFVLENBQUM7WUFDaEg7VUFDRDtRQUNEO1FBQ0E7TUFDRCxLQUFLLGVBQWU7UUFDbkIsSUFDQ3lFLG1DQUFtQyxDQUFDL0UsU0FBUyxDQUFDLEtBQzdDLENBQUNJLGNBQWMsSUFBSTRCLFdBQVcsQ0FBQzZDLDBCQUEwQixDQUFDNUUsTUFBTSxFQUFFRSxLQUFLLENBQUMyRSxpQkFBaUIsQ0FBQyxDQUFDLEVBQzNGO1VBQ0R3QixRQUFRLEdBQUdILDBDQUEwQyxDQUNwRG5HLFNBQVMsRUFDVEMsTUFBTSxFQUNORSxLQUFLLEVBQ0xDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCQyxVQUFVLENBQUNzQixlQUNaLENBQUM7UUFDRjtRQUNBO01BQ0Q7SUFDRDtJQUVBLElBQUkwRSxRQUFRLEtBQUs5RixTQUFTLEVBQUU7TUFDM0IsT0FBT0EsU0FBUztJQUNqQjtJQUVBLElBQUksQ0FBQ0osY0FBYyxFQUFFO01BQ3BCO01BQ0EsT0FDQytDLElBQUEsQ0FBQ3FELG1CQUFtQjtRQUNuQmpELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVoRCxNQUFNLENBQUNzRCxFQUFFLEVBQUV2RCxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBRTtRQUM3RSxpQkFBZUMsTUFBTSxDQUFDd0QsT0FBTyxLQUFLLE1BQU0sSUFBSXhELE1BQU0sQ0FBQ3dELE9BQU8sS0FBSyxPQUFPLEdBQUdqRCxTQUFTLEdBQUcsMEJBQTJCO1FBQUFrRCxRQUFBLEVBRS9HO1VBQ0F6RCxNQUFNLEVBQUVxRztRQUNUO01BQUMsQ0FDbUIsQ0FBQztJQUV4QixDQUFDLE1BQU07TUFDTjtNQUNBLE9BQU9BLFFBQVE7SUFDaEI7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNHLDBCQUEwQkEsQ0FDbENDLGFBQXVDLEVBQ3ZDQyx5QkFBNkYsRUFDN0ZyRyxVQUFxQyxFQUNtQjtJQUN4RCxJQUFJLENBQUNvRyxhQUFhLEVBQUU7TUFDbkIsT0FBTyxDQUFDLENBQUM7SUFDVjtJQUVBLElBQUk7TUFDSCxRQUFRQSxhQUFhLENBQUMvQixJQUFJO1FBQ3pCLEtBQUssV0FBVztVQUNmLE9BQU87WUFDTmlDLE9BQU8sRUFBRXRHLFVBQVUsQ0FBQ3NCLGVBQWUsQ0FBQ0MsdUNBQXVDLENBQzFFOEUseUJBQXlCLEVBQ3pCRCxhQUFhLEVBQ2JsRyxTQUFTLEVBQ1QsS0FDRDtVQUNELENBQUM7UUFFRixLQUFLLGVBQWU7VUFDbkIsT0FBTztZQUNOb0csT0FBTyxFQUFFdEcsVUFBVSxDQUFDc0IsZUFBZSxDQUFDb0MsOEJBQThCLENBQUMwQyxhQUFhLEVBQUUsS0FBSztVQUN4RixDQUFDO1FBRUY7VUFBUztZQUNSLElBQUlBLGFBQWEsQ0FBQ2pGLE9BQU8sRUFBRTtjQUMxQixPQUFPO2dCQUNOQSxPQUFPLEVBQUUsT0FBT2lGLGFBQWEsQ0FBQ2pGLE9BQU87Y0FDdEMsQ0FBQztZQUNGLENBQUMsTUFBTTtjQUNOLE9BQU87Z0JBQ05tRixPQUFPLEVBQUV0RyxVQUFVLENBQUNzQixlQUFlLENBQUNvRCw2QkFBNkIsQ0FBQzBCLGFBQWEsRUFBRSxLQUFLO2NBQ3ZGLENBQUM7WUFDRjtVQUNEO01BQ0Q7SUFDRCxDQUFDLENBQUMsT0FBT0csQ0FBQyxFQUFFO01BQ1gsT0FBTyxDQUFDLENBQUM7SUFDVjtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLGFBQWFBLENBQ3JCN0csTUFBb0QsRUFDcERFLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QkMsaUJBQTBCLEVBQzFCQyxVQUFxQyxFQUNRO0lBQzdDLElBQUtMLE1BQU0sQ0FBa0JpRixpQkFBaUIsSUFBSS9FLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDQyx1QkFBdUIsRUFBRUMsc0JBQXNCLEVBQUU7TUFDaEl4QyxNQUFNLEdBQUdzRyxTQUFTLENBQUN0RyxNQUFNLENBQUM7TUFDMUJBLE1BQU0sQ0FBQzhCLE9BQU8sR0FBR1csaUJBQWlCLENBQUNDLEdBQUcsQ0FBQ0csb0JBQW9CLENBQUM3QyxNQUFNLENBQUM4QixPQUFPLElBQUksRUFBRSxDQUFDLEVBQUVhLEVBQUUsQ0FBQ0Msb0JBQW9CLENBQUMsQ0FBQztJQUM3RztJQUNBLE1BQU13QyxJQUFJLEdBQUdwRixNQUFNLENBQUNxRixhQUFhLEtBQUssSUFBSSxHQUFHQyxNQUFNLEdBQUcvRSxTQUFTO0lBQy9ELElBQUksQ0FBQ0osY0FBYyxFQUFFO01BQ3BCO01BQ0EsTUFBTXNHLGFBQWEsR0FBSXpHLE1BQU0sQ0FBa0J5RyxhQUF5QztNQUN4RixNQUFNQyx5QkFBeUIsR0FBR0QsYUFBYSxFQUFFbkcsY0FBYyxHQUM1REQsVUFBVSxDQUFDa0UsaUJBQWlCLENBQUNDLFdBQVcsQ0FBeURpQyxhQUFhLENBQUNuRyxjQUFjLENBQUMsQ0FDN0htRSxNQUFNLEdBQ1BsRSxTQUFTO01BQ1osTUFBTXVHLHFCQUFxQixHQUFHTiwwQkFBMEIsQ0FBQ0MsYUFBYSxFQUFFQyx5QkFBeUIsRUFBRXJHLFVBQVUsQ0FBQztNQUM5RyxNQUFNMEcsU0FBUyxHQUFHL0csTUFBTSxDQUFDZ0gsSUFBSSxFQUMxQkMsTUFBTSxDQUFFaEgsY0FBYyxJQUFLLE9BQU9BLGNBQWMsS0FBSyxRQUFRLENBQUMsQ0FDL0RpSCxHQUFHLENBQUVqSCxjQUFjLElBQUs7UUFDeEIsT0FBT3FFLFdBQVcsQ0FBQ3RFLE1BQU0sRUFBRUMsY0FBYyxFQUFFQyxLQUFLLEVBQUVDLGNBQWMsRUFBRUMsaUJBQWlCLEVBQUVDLFVBQVUsQ0FBQztNQUNqRyxDQUFDLENBQUMsQ0FDRDRHLE1BQU0sQ0FBRUUsSUFBSSxJQUFLQSxJQUFJLEtBQUs1RyxTQUFTLENBQUM7TUFFdEMsSUFBSXdHLFNBQVMsRUFBRWpELE1BQU0sRUFBRTtRQUN0QixNQUFNc0QsTUFBTSxHQUFHckUsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVoRCxNQUFNLENBQUNzRCxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUNDSixJQUFBLENBQUNxRCxtQkFBbUI7VUFDbkJqRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDc0QsRUFBRSxFQUFFLHFCQUFxQixDQUFDLENBQUU7VUFDbEUsaUJBQWV0RCxNQUFNLENBQUN3RCxPQUFPLEtBQUssTUFBTSxJQUFJeEQsTUFBTSxDQUFDd0QsT0FBTyxLQUFLLE9BQU8sR0FBR2pELFNBQVMsR0FBRywwQkFBMkI7VUFBQWtELFFBQUEsRUFFaEhQLElBQUEsQ0FBQ21FLFVBQVU7WUFDVmpFLElBQUksRUFBRXBELE1BQU0sQ0FBQ29ELElBQUs7WUFDbEJzQixJQUFJLEVBQUVpQixVQUFVLENBQUNDLFdBQVk7WUFDN0IwQixZQUFZLEVBQUVDLEtBQUssQ0FBQ0MsSUFBSSxDQUFDQyxXQUFZO1lBQ3JDbkUsRUFBRSxFQUFFOEQsTUFBTztZQUNYNUQsT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBUTtZQUN4QjFCLE9BQU8sRUFBRTlCLE1BQU0sQ0FBQzhCLE9BQVE7WUFDeEI0RixvQkFBb0IsRUFBRSxDQUFDLENBQUUxSCxNQUFNLENBQXFCeUcsYUFBYztZQUNsRXJCLElBQUksRUFBRUEsSUFBSztZQUNYdUMsVUFBVSxFQUFHM0gsTUFBTSxDQUFxQnlHLGFBQWEsR0FBR21CLGNBQWMsQ0FBQ0MsS0FBSyxHQUFHRCxjQUFjLENBQUNFLE9BQVE7WUFDdEdyQixhQUFhLEVBQUVLLHFCQUFxQixDQUFDSCxPQUFRO1lBQzdDLGVBQWFHLHFCQUFxQixDQUFDdEYsT0FBUTtZQUFBaUMsUUFBQSxFQUUxQztjQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFeUQsTUFBTSxDQUFDLENBQUM7Y0FDbERKLElBQUksRUFBRTlELElBQUEsQ0FBQzZFLElBQUk7Z0JBQUF0RSxRQUFBLEVBQUVzRDtjQUFTLENBQU8sQ0FBQztjQUM5QmxCLFVBQVUsRUFDVDNDLElBQUEsQ0FBQzRDLHlCQUF5QjtnQkFBQ0MsUUFBUSxFQUFFL0YsTUFBTSxDQUFDK0YsUUFBUztnQkFBQ0MsS0FBSyxFQUFFaEcsTUFBTSxDQUFDZ0c7Y0FBTSxDQUE0QjtZQUV4RztVQUFDLENBQ1U7UUFBQyxDQUNPLENBQUM7TUFFeEIsQ0FBQyxNQUFNO1FBQ04sT0FBT3pGLFNBQVM7TUFDakI7SUFDRCxDQUFDLE1BQU07TUFDTjtNQUNBLE1BQU15SCx1QkFBcUMsR0FBRyxFQUFFO01BQ2hEaEksTUFBTSxDQUFDZ0gsSUFBSSxFQUFFaUIsT0FBTyxDQUFFaEksY0FBYyxJQUFLO1FBQ3hDLElBQUksT0FBT0EsY0FBYyxLQUFLLFFBQVEsSUFBSThCLFdBQVcsQ0FBQzZDLDBCQUEwQixDQUFDM0UsY0FBYyxFQUFFQyxLQUFLLENBQUMyRSxpQkFBaUIsQ0FBQyxFQUFFO1VBQzFIbUQsdUJBQXVCLEVBQUVFLElBQUksQ0FBQ2pJLGNBQWMsQ0FBQztRQUM5QztNQUNELENBQUMsQ0FBQztNQUVGLE1BQU04RyxTQUFTLEdBQUdpQix1QkFBdUIsQ0FDdkNmLE1BQU0sQ0FBRWhILGNBQWMsSUFBSyxPQUFPQSxjQUFjLEtBQUssUUFBUSxDQUFDLENBQzlEaUgsR0FBRyxDQUFFakgsY0FBYyxJQUFLO1FBQ3hCLE9BQU9xRSxXQUFXLENBQUN0RSxNQUFNLEVBQUVDLGNBQWMsRUFBRUMsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxVQUFVLENBQUM7TUFDakcsQ0FBQyxDQUFDLENBQ0Q0RyxNQUFNLENBQUVFLElBQUksSUFBS0EsSUFBSSxLQUFLNUcsU0FBUyxDQUFDO01BRXRDLElBQUl3RyxTQUFTLEVBQUVqRCxNQUFNLEVBQUU7UUFDdEIsT0FDQ1osSUFBQSxDQUFDQyxRQUFRO1VBQ1JDLElBQUksRUFBRXBELE1BQU0sQ0FBQ29ELElBQUs7VUFDbEJFLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVoRCxNQUFNLENBQUNzRCxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUU7VUFDMUR4QixPQUFPLEVBQUU5QixNQUFNLENBQUNnRixxQkFBc0I7VUFDdENJLElBQUksRUFBRUEsSUFBSztVQUFBM0IsUUFBQSxFQUVWO1lBQ0EwRSxLQUFLLEVBQUVwQjtVQUNSO1FBQUMsQ0FDUSxDQUFDO01BRWIsQ0FBQyxNQUFNO1FBQ04sT0FBT3hHLFNBQVM7TUFDakI7SUFDRDtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTNkgsZ0JBQWdCQSxDQUN4QnBJLE1BQW9CLEVBQ3BCRSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJ3QixlQUEwQyxFQUNHO0lBQzdDLE1BQU1ILE9BQU8sR0FBRyxDQUFDckIsY0FBYyxHQUFHSCxNQUFNLENBQUN3QixPQUFPLEdBQUd4QixNQUFNLENBQUN3QixPQUFPLEdBQUcsZUFBZTtJQUNuRixNQUFNRSxZQUFZLEdBQUcxQixNQUFNLENBQUN3QixPQUFPLEdBQUdqQixTQUFTLEdBQUdvQixlQUFlLENBQUNvRCw2QkFBNkIsQ0FBQy9FLE1BQU0sRUFBRUcsY0FBYyxDQUFDO0lBQ3ZILE1BQU0wQixZQUFZLEdBQUc3QixNQUFNLENBQUN3QixPQUFPLEdBQUcsT0FBT0EsT0FBTyxRQUFRLEdBQUdqQixTQUFTO0lBRXhFLElBQUlQLE1BQU0sQ0FBQ2lGLGlCQUFpQixJQUFJL0UsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNDLHVCQUF1QixFQUFFQyxzQkFBc0IsRUFBRTtNQUM5R3hDLE1BQU0sR0FBR3NHLFNBQVMsQ0FBQ3RHLE1BQU0sQ0FBQztNQUMxQkEsTUFBTSxDQUFDOEIsT0FBTyxHQUFHVyxpQkFBaUIsQ0FBQ0MsR0FBRyxDQUFDRyxvQkFBb0IsQ0FBQzdDLE1BQU0sQ0FBQzhCLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRWEsRUFBRSxDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDO01BQzVHNUMsTUFBTSxDQUFDZ0YscUJBQXFCLEdBQUd2QyxpQkFBaUIsQ0FDL0NDLEdBQUcsQ0FBQ0csb0JBQW9CLENBQUM3QyxNQUFNLENBQUNnRixxQkFBcUIsSUFBSSxFQUFFLENBQUMsRUFBRXJDLEVBQUUsQ0FBQ0Msb0JBQW9CLENBQ3RGLENBQUM7SUFDRjtJQUNBLElBQUksQ0FBQ3pDLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE9BQ0MrQyxJQUFBLENBQUNxRCxtQkFBbUI7UUFDbkJqRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDc0QsRUFBRSxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFDbEUsaUJBQWV0RCxNQUFNLENBQUN3RCxPQUFPLEtBQUssTUFBTSxJQUFJeEQsTUFBTSxDQUFDd0QsT0FBTyxLQUFLLE9BQU8sR0FBR2pELFNBQVMsR0FBRywwQkFBMkI7UUFBQWtELFFBQUEsRUFFaEhQLElBQUEsQ0FBQ3NDLE1BQU07VUFDTixnQkFBYSx3Q0FBd0M7VUFDckRsQyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDc0QsRUFBRSxDQUFDLENBQUU7VUFDM0NGLElBQUksRUFBRXBELE1BQU0sQ0FBQ29ELElBQUs7VUFDbEJHLEtBQUssRUFBRTdCLFlBQWE7VUFDcEIsZUFBYUcsWUFBYTtVQUMxQjZDLElBQUksRUFBRWlCLFVBQVUsQ0FBQ0MsV0FBWTtVQUM3QnBDLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQVE7VUFDeEIxQixPQUFPLEVBQUU5QixNQUFNLENBQUM4QixPQUFRO1VBQ3hCc0QsSUFBSSxFQUFFcEYsTUFBTSxDQUFDcUYsYUFBYSxLQUFLLElBQUksR0FBR0MsTUFBTSxHQUFHL0UsU0FBVTtVQUFBa0QsUUFBQSxFQUV4RDtZQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFWixRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ3NELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRnVDLFVBQVUsRUFBRTNDLElBQUEsQ0FBQzRDLHlCQUF5QjtjQUFDQyxRQUFRLEVBQUUvRixNQUFNLENBQUMrRixRQUFTO2NBQUNDLEtBQUssRUFBRWhHLE1BQU0sQ0FBQ2dHO1lBQU0sQ0FBNEI7VUFDbkg7UUFBQyxDQUNNO01BQUMsQ0FDVyxDQUFDO0lBRXhCLENBQUMsTUFBTSxJQUFJakUsV0FBVyxDQUFDNkMsMEJBQTBCLENBQUM1RSxNQUFNLEVBQUVFLEtBQUssQ0FBQzJFLGlCQUFpQixDQUFDLEVBQUU7TUFDbkYsTUFBTW9CLHdCQUF3QixHQUFHbEQsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVoRCxNQUFNLENBQUNzRCxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDdEY7TUFDQSxPQUNDSixJQUFBLENBQUNDLFFBQVE7UUFDUixnQkFBYSx3Q0FBd0M7UUFDckRHLEVBQUUsRUFBRTJDLHdCQUF5QjtRQUM3QjdDLElBQUksRUFBRXBELE1BQU0sQ0FBQ29ELElBQUs7UUFDbEJHLEtBQUssRUFBRTdCLFlBQWE7UUFDcEIsZUFBYUcsWUFBYTtRQUMxQkMsT0FBTyxFQUFFOUIsTUFBTSxDQUFDZ0YscUJBQXNCO1FBQUF2QixRQUFBLEVBRXJDO1VBQ0FDLFVBQVUsRUFBRSxDQUFDQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUVzQyx3QkFBd0IsQ0FBQztRQUNwRTtNQUFDLENBQ1EsQ0FBQztJQUViLENBQUMsTUFBTTtNQUNOLE9BQU8xRixTQUFTO0lBQ2pCO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUzhILFNBQVNBLENBQ2pCckksTUFBa0IsRUFDbEJFLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QkMsaUJBQTBCLEVBQzFCQyxVQUFxQyxFQUNRO0lBQzdDLFFBQVFMLE1BQU0sQ0FBQzBFLElBQUk7TUFDbEIsS0FBSyxTQUFTO1FBQ2IsSUFBSSxRQUFRLElBQUkxRSxNQUFNLEVBQUU7VUFDdkIsT0FBT29JLGdCQUFnQixDQUFDcEksTUFBTSxFQUFrQkUsS0FBSyxFQUFFQyxjQUFjLEVBQUVFLFVBQVUsQ0FBQ3NCLGVBQWUsQ0FBQztRQUNuRztRQUNBO01BQ0QsS0FBSyxNQUFNO1FBQ1YsT0FBT2tGLGFBQWEsQ0FBQzdHLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxVQUFVLENBQUM7TUFDbkY7SUFDRDtJQUNBLE9BQU8rRixrQkFBa0IsQ0FBQ3BHLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxVQUFVLENBQUM7RUFDeEY7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU2lJLGFBQWFBLENBQ3JCdEksTUFBa0IsRUFDbEJFLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QkMsaUJBQTBCLEVBQzFCQyxVQUFxQyxFQUNKO0lBQ2pDLE1BQU1OLFNBQVMsR0FBR0MsTUFBTSxDQUFDTSxjQUFjLEdBQ25DRCxVQUFVLENBQUNrRSxpQkFBaUIsQ0FBQ0MsV0FBVyxDQUFDeEUsTUFBTSxDQUFDTSxjQUFjLENBQUMsQ0FBQ21FLE1BQU0sR0FDdkVsRSxTQUFTO0lBQ1osTUFBTUMsaUJBQWlCLEdBQUdDLFlBQVksQ0FBQ0MsZ0JBQWdCLENBQUNMLFVBQVUsQ0FBQ00sU0FBUyxDQUFDQyxvQkFBb0IsQ0FBQ1osTUFBTSxDQUFDTSxjQUFjLEdBQUcsU0FBUyxDQUFFLENBQUM7SUFDdEksTUFBTWlJLGtCQUFrQixHQUFHeEksU0FBUyxFQUFFbUIsWUFBWSxFQUFFRSxXQUFXLEVBQUVDLElBQUksRUFBRUMsa0JBQWtCLEtBQUtmLFNBQVM7SUFDdkcsTUFBTU0sYUFBYSxHQUFHUixVQUFVLENBQUNNLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNKLGlCQUFpQixDQUFFO0lBQ25GLE1BQU1NLDRCQUE0QixHQUFHRCxhQUFhLEdBQy9DRSxrQkFBa0IsQ0FBQ0MsMkJBQTJCLENBQUNILGFBQWEsRUFBRVQsaUJBQWlCLENBQUMsR0FDaEZHLFNBQVM7SUFDWixNQUFNVSxPQUFPLEdBQUdsQixTQUFTLEVBQUVtQixZQUFZLEVBQUVELE9BQU87SUFDaEQsTUFBTXNDLEtBQUssR0FBR3hELFNBQVMsR0FDcEJNLFVBQVUsQ0FBQ3NCLGVBQWUsQ0FBQ0MsdUNBQXVDLENBQUM3QixTQUFTLEVBQUVDLE1BQU0sRUFBRU8sU0FBUyxFQUFFSixjQUFjLENBQUMsR0FDaEhJLFNBQVM7SUFFWixJQUFJdUIsT0FBNEQsR0FBR3lHLGtCQUFrQixHQUNsRnhHLFdBQVcsQ0FBQ0MsMkJBQTJCLENBQ3ZDOUIsS0FBSyxDQUFDK0IsZUFBZSxFQUNyQmxDLFNBQVMsQ0FBQ21DLE1BQU0sRUFDaEIsQ0FBQyxDQUFDakIsT0FBTyxFQUNUSixhQUFhLENBQUNzQixTQUFTLENBQUMsQ0FBQyxFQUN6Qm5DLE1BQU0sQ0FBQ29DLGNBQWMsRUFDckJ0Qiw0QkFBNEIsRUFBRXVCLGdCQUFnQixFQUM5Q2xDLGNBQWMsRUFDZCxJQUNBLENBQUMsR0FDRCxNQUFNcUksWUFBWSxDQUFDQyw2QkFBNkIsQ0FBQyxRQUFRLEVBQUV0SSxjQUFjLENBQUMsR0FBRztJQUNoRixJQUFJRCxLQUFLLENBQUMrQixlQUFlLENBQUNLLE9BQU8sQ0FBQ0MsdUJBQXVCLEVBQUVDLHNCQUFzQixFQUFFO01BQ2xGVixPQUFPLEdBQUdXLGlCQUFpQixDQUFDQyxHQUFHLENBQUNHLG9CQUFvQixDQUFDZixPQUFPLENBQUMsRUFBRWEsRUFBRSxDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3pGO0lBRUEsSUFBSSxDQUFDekMsY0FBYyxFQUFFO01BQ3BCO01BQ0EsT0FDQytDLElBQUEsQ0FBQ3FELG1CQUFtQjtRQUNuQmpELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVqRCxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBRTtRQUNsRSxpQkFBZUMsTUFBTSxDQUFDd0QsT0FBTyxLQUFLLE1BQU0sSUFBSXhELE1BQU0sQ0FBQ3dELE9BQU8sS0FBSyxPQUFPLEdBQUdqRCxTQUFTLEdBQUcsMEJBQTJCO1FBQUFrRCxRQUFBLEVBRWhIUCxJQUFBLENBQUNzQyxNQUFNO1VBQ05sQyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFakQsU0FBUyxDQUFDLENBQUU7VUFDM0NxRCxJQUFJLEVBQUVwRCxNQUFNLENBQUNvRCxJQUFLO1VBQ2xCRyxLQUFLLEVBQUVBLEtBQU07VUFDYm1CLElBQUksRUFBRWlCLFVBQVUsQ0FBQ0MsV0FBWTtVQUM3QnBDLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQVE7VUFDeEIxQixPQUFPLEVBQUVBLE9BQVE7VUFBQTJCLFFBQUEsRUFFaEI7WUFDQUMsVUFBVSxFQUFFLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRVosUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVqRCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEY4RixVQUFVLEVBQUUzQyxJQUFBLENBQUM0Qyx5QkFBeUI7Y0FBQ0MsUUFBUSxFQUFFL0YsTUFBTSxDQUFDK0YsUUFBUztjQUFDQyxLQUFLLEVBQUVoRyxNQUFNLENBQUNnRztZQUFNLENBQTRCO1VBQ25IO1FBQUMsQ0FDTTtNQUFDLENBQ1csQ0FBQztJQUV4QixDQUFDLE1BQU07TUFDTjtNQUNBLE9BQ0M5QyxJQUFBLENBQUNDLFFBQVE7UUFDUkcsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWpELFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBRTtRQUMxRHFELElBQUksRUFBRXBELE1BQU0sQ0FBQ29ELElBQUs7UUFDbEJHLEtBQUssRUFBRUEsS0FBTTtRQUNiekIsT0FBTyxFQUFFVyxpQkFBaUIsQ0FBQ2lHLEtBQUssQ0FBQ0MsV0FBVyxDQUFDLHNDQUFzQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUF3QjtRQUFBbEYsUUFBQSxFQUUzSDtVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFWixRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWpELFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ2pHO01BQUMsQ0FDUSxDQUFDO0lBRWI7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUzZJLGVBQWVBLENBQ3ZCQyxjQUE4QixFQUM5QjNJLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QjJJLGdCQUFnRCxFQUNNO0lBQ3RELE1BQU1DLGlCQUFpQixHQUFHRCxnQkFBZ0IsQ0FBQ0UsSUFBSTtJQUMvQyxNQUFNQyxVQUFVLEdBQUcvSSxLQUFLLENBQUNnSixpQkFBaUIsQ0FBQyx1QkFBdUIsRUFBRTNJLFNBQVMsRUFBRXdJLGlCQUFpQixDQUFDO0lBQ2pHLE1BQU1JLG9CQUFvQixHQUFJakosS0FBSyxDQUFDK0IsZUFBZSxDQUFDbUgsVUFBVSxDQUFDQyxNQUFNLENBQTRCQyxjQUFjO0lBQy9HLE1BQU01RixVQUFVLEdBQUd5RixvQkFBb0IsR0FDcEN4RixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUU7TUFBRVMsY0FBYyxFQUFFK0Usb0JBQW9CLENBQUMvRSxjQUFjO01BQUVwRSxNQUFNLEVBQUVtSixvQkFBb0IsQ0FBQ25KO0lBQU8sQ0FBQyxDQUFDLEdBQ3pITyxTQUFTO0lBRVosSUFBSUwsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNpSCxrQkFBa0IsRUFBRTtNQUNyRCxPQUFPckcsSUFBQSxDQUFDc0csa0JBQWtCO1FBQUNsRyxFQUFFLEVBQUUsR0FBR3BELEtBQUssQ0FBQzhDLFNBQVMsZUFBZ0I7UUFBQ3lHLGNBQWMsRUFBQztNQUF5QixDQUFFLENBQUM7SUFDOUcsQ0FBQyxNQUFNLElBQUksQ0FBQ3RKLGNBQWMsRUFBRTtNQUMzQixPQUNDK0MsSUFBQSxDQUFDcUQsbUJBQW1CO1FBQ25CakQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRTZGLGNBQWMsQ0FBQzVGLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1FBQzNFLGlCQUFjLG9CQUFvQjtRQUFBUSxRQUFBLEVBRWxDUCxJQUFBLENBQUNzQyxNQUFNO1VBQ05sQyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFNkYsY0FBYyxDQUFDNUYsR0FBRyxDQUFDLENBQUU7VUFDcERHLElBQUksRUFBRTZGLFVBQVc7VUFDakIsZUFBWSxrQkFBa0I7VUFDOUJ2RSxJQUFJLEVBQUVpQixVQUFVLENBQUNDLFdBQVk7VUFDN0JwQyxPQUFPLEVBQUVxRixjQUFjLENBQUNyRixPQUE4QjtVQUN0RDFCLE9BQU8sRUFBRStHLGNBQWMsQ0FBQy9HLE9BQThCO1VBQUEyQixRQUFBLEVBRXJEO1lBQ0FDLFVBQVU7WUFDVm1DLFVBQVUsRUFDVDNDLElBQUEsQ0FBQzRDLHlCQUF5QjtjQUN6QkMsUUFBUSxFQUFFOEMsY0FBYyxDQUFDOUMsUUFBUztjQUNsQ0MsS0FBSyxFQUFFNkMsY0FBYyxDQUFDN0M7WUFBTSxDQUNEO1VBRTlCO1FBQUMsQ0FDTTtNQUFDLENBQ1csQ0FBQztJQUV4QixDQUFDLE1BQU07TUFDTixPQUNDOUMsSUFBQSxDQUFDQyxRQUFRO1FBQ1JHLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUU2RixjQUFjLENBQUM1RixHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUU7UUFDbkVHLElBQUksRUFBRTZGLFVBQVc7UUFDakIsZUFBWSwrQkFBK0I7UUFDM0N6RixPQUFPLEVBQUVxRixjQUFjLENBQUNyRixPQUE4QjtRQUN0RDFCLE9BQU8sRUFBRStHLGNBQWMsQ0FBQzdEO01BQTRDLENBQ3BFLENBQUM7SUFFSjtFQUNEO0VBRUEsU0FBUzBFLGFBQWFBLENBQ3JCYixjQUE4QixFQUM5QjNJLEtBQTJCLEVBQzNCNEksZ0JBQWdELEVBQ2hEM0ksY0FBdUIsRUFDdkJ3QixlQUEwQyxFQUNUO0lBQ2pDLE1BQU1vSCxpQkFBaUIsR0FBR0QsZ0JBQWdCLENBQUNFLElBQUk7SUFDL0MsTUFBTUMsVUFBVSxHQUFHL0ksS0FBSyxDQUFDZ0osaUJBQWlCLENBQUMsdUJBQXVCLEVBQUUzSSxTQUFTLEVBQUV3SSxpQkFBaUIsQ0FBQztJQUNqRyxNQUFNWSxNQUFNLEdBQUd6SixLQUFLLENBQUMrQixlQUFlLENBQUNLLE9BQU8sQ0FBQ3NILFFBQVEsQ0FBRUQsTUFBTTtJQUM3RCxNQUFNRSx5QkFBeUIsR0FBRzNKLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDd0gsZ0JBQWdCLEtBQUt2SixTQUFTO0lBRTlGLE1BQU13RyxTQUFTLEdBQUc0QyxNQUFNLENBQUN6QyxHQUFHLENBQUMsQ0FBQzZDLFlBQVksRUFBRUMsS0FBSyxLQUFLO01BQ3JELE1BQU1DLFNBQVMsR0FBRyxDQUFDOUosY0FBYyxHQUFHLEVBQUUsR0FBRyxjQUFjO01BRXZELE1BQU0rSixTQUFTLEdBQUdMLHlCQUF5QixHQUN4Q00sUUFBUSxDQUFDeEIsV0FBVyxDQUFDLEdBQUdzQixTQUFTLDJCQUEyQkQsS0FBSyxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQ3hGekosU0FBUztNQUNaLE1BQU0rQyxFQUFFLEdBQUduRCxjQUFjLEdBQ3RCNEMsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUrRyxZQUFZLENBQUNLLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxHQUM5RHJILFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFK0csWUFBWSxDQUFDSyxLQUFLLENBQUMsQ0FBQztNQUNsRCxPQUNDbEgsSUFBQSxDQUFDQyxRQUFRO1FBQ1JHLEVBQUUsRUFBRUEsRUFBRztRQUNQRixJQUFJLEVBQUUyRyxZQUFZLENBQUMzRyxJQUFLO1FBQ3hCdEIsT0FBTyxFQUFFb0ksU0FBUyxHQUFHekgsaUJBQWlCLENBQUN5SCxTQUFTLENBQUMsR0FBRzNKLFNBQVU7UUFDOURnRCxLQUFLLEVBQUU1QixlQUFlLENBQUMwSSw2QkFBNkIsQ0FBQ0wsS0FBSyxFQUFFN0osY0FBYztNQUFFLENBQzVFLENBQUM7SUFFSixDQUFDLENBQUM7SUFFRixJQUFJQSxjQUFjLEVBQUU7TUFDbkIsT0FDQytDLElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFNkYsY0FBYyxDQUFDNUYsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFFO1FBQ25FRyxJQUFJLEVBQUU2RixVQUFXO1FBQ2pCekYsT0FBTyxFQUFFcUYsY0FBYyxDQUFDckYsT0FBOEI7UUFDdEQxQixPQUFPLEVBQUUrRyxjQUFjLENBQUM3RCxxQkFBNEM7UUFBQXZCLFFBQUEsRUFFbkU7VUFDQTBFLEtBQUssRUFBRXBCLFNBQVMsS0FBS3hHLFNBQVMsSUFBSXdHLFNBQVMsQ0FBQ2pELE1BQU0sR0FBRyxDQUFDLEdBQUdpRCxTQUFTLEdBQUd4RztRQUN0RTtNQUFDLENBQ1EsQ0FBQztJQUViO0lBRUEsT0FDQzJDLElBQUEsQ0FBQ3FELG1CQUFtQjtNQUFDakQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRTZGLGNBQWMsQ0FBQzVGLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO01BQUMsaUJBQWMsb0JBQW9CO01BQUFRLFFBQUEsRUFDbElQLElBQUEsQ0FBQ21FLFVBQVU7UUFDVmpFLElBQUksRUFBRTZGLFVBQVc7UUFDakJ2RSxJQUFJLEVBQUVpQixVQUFVLENBQUNDLFdBQVk7UUFDN0IwQixZQUFZLEVBQUMsYUFBYTtRQUMxQmhFLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUU2RixjQUFjLENBQUM1RixHQUFHLENBQUMsQ0FBRTtRQUNwRE8sT0FBTyxFQUFFcUYsY0FBYyxDQUFDckYsT0FBOEI7UUFDdEQxQixPQUFPLEVBQUUrRyxjQUFjLENBQUMvRyxPQUE4QjtRQUFBMkIsUUFBQSxFQUVyRDtVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFWixRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRTZGLGNBQWMsQ0FBQzVGLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUMzRitELElBQUksRUFBRTlELElBQUEsQ0FBQzZFLElBQUk7WUFBQXRFLFFBQUEsRUFBRXNEO1VBQVMsQ0FBTyxDQUFDO1VBQzlCbEIsVUFBVSxFQUNUM0MsSUFBQSxDQUFDNEMseUJBQXlCO1lBQ3pCQyxRQUFRLEVBQUU4QyxjQUFjLENBQUM5QyxRQUFTO1lBQ2xDQyxLQUFLLEVBQUU2QyxjQUFjLENBQUM3QztVQUFNLENBQ0Q7UUFFOUI7TUFBQyxDQUNVO0lBQUMsQ0FDTyxDQUFDO0VBRXhCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTc0UsZUFBZUEsQ0FDdkJ6QixjQUE4QixFQUM5QjNJLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QjJJLGdCQUFnRCxFQUNmO0lBQ2pDLE1BQU1DLGlCQUFpQixHQUFHRCxnQkFBZ0IsQ0FBQ0UsSUFBSTtJQUMvQyxNQUFNQyxVQUFVLEdBQUcvSSxLQUFLLENBQUNnSixpQkFBaUIsQ0FBQyx1QkFBdUIsRUFBRTNJLFNBQVMsRUFBRXdJLGlCQUFpQixDQUFDO0lBQ2pHLElBQUksQ0FBQzVJLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE9BQ0MrQyxJQUFBLENBQUNxRCxtQkFBbUI7UUFDbkJqRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFNkYsY0FBYyxDQUFDNUYsR0FBRyxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFDM0UsaUJBQWMsb0JBQW9CO1FBQUFRLFFBQUEsRUFFbENQLElBQUEsQ0FBQ3NDLE1BQU07VUFDTmxDLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUU2RixjQUFjLENBQUM1RixHQUFHLENBQUMsQ0FBRTtVQUNwREcsSUFBSSxFQUFFNkYsVUFBVztVQUNqQixlQUFZLHVCQUF1QjtVQUNuQ3ZFLElBQUksRUFBRWlCLFVBQVUsQ0FBQ0MsV0FBWTtVQUM3QnBDLE9BQU8sRUFBRXFGLGNBQWMsQ0FBQ3JGLE9BQThCO1VBQ3REMUIsT0FBTyxFQUFFK0csY0FBYyxDQUFDL0csT0FBOEI7VUFDdEQyRCxZQUFZLEVBQUMsUUFBUTtVQUFBaEMsUUFBQSxFQUVwQjtZQUNBb0MsVUFBVSxFQUNUM0MsSUFBQSxDQUFDNEMseUJBQXlCO2NBQ3pCQyxRQUFRLEVBQUU4QyxjQUFjLENBQUM5QyxRQUFTO2NBQ2xDQyxLQUFLLEVBQUU2QyxjQUFjLENBQUM3QztZQUFNLENBQ0Q7VUFFOUI7UUFBQyxDQUNNO01BQUMsQ0FDVyxDQUFDO0lBRXhCLENBQUMsTUFBTTtNQUNOO01BQ0EsT0FDQzlDLElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFNkYsY0FBYyxDQUFDNUYsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFFO1FBQ25FRyxJQUFJLEVBQUU2RixVQUFXO1FBQ2pCLGVBQVksb0NBQW9DO1FBQ2hEekYsT0FBTyxFQUFFcUYsY0FBYyxDQUFDckYsT0FBOEI7UUFDdEQxQixPQUFPLEVBQUUrRyxjQUFjLENBQUM3RDtNQUE0QyxDQUNwRSxDQUFDO0lBRUo7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTdUYsaUJBQWlCQSxDQUN6QnZLLE1BQXNCLEVBQ3RCRSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJ3QixlQUEwQyxFQUMxQ21ILGdCQUFnRCxFQUNrQjtJQUNsRSxJQUFJOUksTUFBTSxDQUFDd0ssV0FBVyxLQUFLLE9BQU8sRUFBRTtNQUNuQyxPQUFPakssU0FBUztJQUNqQjtJQUNBLElBQUlMLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDQyx1QkFBdUIsRUFBRUMsc0JBQXNCLElBQUl4QyxNQUFNLENBQUNpRCxHQUFHLEtBQUt3SCxrQkFBa0IsQ0FBQ0MsTUFBTSxFQUFFO01BQzlIMUssTUFBTSxHQUFHc0csU0FBUyxDQUFDdEcsTUFBTSxDQUFDO01BQzFCQSxNQUFNLENBQUM4QixPQUFPLEdBQUdXLGlCQUFpQixDQUFDQyxHQUFHLENBQUNHLG9CQUFvQixDQUFDN0MsTUFBTSxDQUFDOEIsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFYSxFQUFFLENBQUNDLG9CQUFvQixDQUFDLENBQUM7TUFDNUc1QyxNQUFNLENBQUNnRixxQkFBcUIsR0FBR3ZDLGlCQUFpQixDQUMvQ0MsR0FBRyxDQUFDRyxvQkFBb0IsQ0FBQzdDLE1BQU0sQ0FBQ2dGLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxFQUFFckMsRUFBRSxDQUFDQyxvQkFBb0IsQ0FDdEYsQ0FBQztJQUNGO0lBRUEsUUFBUTVDLE1BQU0sQ0FBQ2lELEdBQUc7TUFDakIsS0FBS3dILGtCQUFrQixDQUFDQyxNQUFNO1FBQzdCLElBQ0MsQ0FBQ3hLLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ21ILFVBQVUsQ0FBQ3VCLDhCQUE4QjtRQUNoRTtRQUNDekssS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNvQyxJQUFJLEtBQUssV0FBVyxJQUFJdkUsY0FBZSxFQUNyRTtVQUNELE9BQU9JLFNBQVM7UUFDakIsQ0FBQyxNQUFNLElBQUlMLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDc0gsUUFBUSxFQUFFO1VBQ2xELE9BQU9GLGFBQWEsQ0FBQzFKLE1BQU0sRUFBRUUsS0FBSyxFQUFFNEksZ0JBQWdCLEVBQUUzSSxjQUFjLEVBQUV3QixlQUFlLENBQUM7UUFDdkYsQ0FBQyxNQUFNO1VBQ04sT0FBT2lILGVBQWUsQ0FBQzVJLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLEVBQUUySSxnQkFBZ0IsQ0FBQztRQUN4RTtNQUVELEtBQUsyQixrQkFBa0IsQ0FBQ0csTUFBTTtRQUM3QixPQUFPTixlQUFlLENBQUN0SyxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxFQUFFMkksZ0JBQWdCLENBQUM7TUFDeEUsS0FBSzJCLGtCQUFrQixDQUFDSSxHQUFHO1FBQzFCLE9BQU9DLFlBQVksQ0FBQzlLLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLENBQUM7TUFDbkQsS0FBS3NLLGtCQUFrQixDQUFDTSxJQUFJO1FBQzNCLE9BQU9DLGFBQWEsQ0FBQ2hMLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLENBQUM7TUFDcEQsS0FBS3NLLGtCQUFrQixDQUFDUSxLQUFLO1FBQzVCLE9BQU9DLGNBQWMsQ0FBQ2xMLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLENBQUM7TUFFckQsS0FBS3NLLGtCQUFrQixDQUFDVSxRQUFRO1FBQy9CLElBQUlqTCxLQUFLLENBQUMrQixlQUFlLENBQUNtSCxVQUFVLENBQUN1Qiw4QkFBOEIsRUFBRTtVQUNwRSxJQUFJLENBQUN4SyxjQUFjLEVBQUU7WUFDcEI7WUFDQSxPQUNDK0MsSUFBQSxDQUFDcUQsbUJBQW1CO2NBQ25CakQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO2NBQ25FLGlCQUFjLG9CQUFvQjtjQUFBUSxRQUFBLEVBRWxDUCxJQUFBLENBQUNzQyxNQUFNO2dCQUNObEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsQ0FBQyxDQUFFO2dCQUM1Q0csSUFBSSxFQUFDLHVDQUF1QztnQkFDNUNHLEtBQUssRUFBRTVCLGVBQWUsQ0FBQ3lKLDZCQUE2QixDQUFDLEtBQUssQ0FBRTtnQkFDNUQ1SCxPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUE4QjtnQkFDOUMxQixPQUFPLEVBQUU5QixNQUFNLENBQUM4QixPQUE4QjtnQkFBQTJCLFFBQUEsRUFFN0M7a0JBQ0FvQyxVQUFVLEVBQ1QzQyxJQUFBLENBQUM0Qyx5QkFBeUI7b0JBQ3pCQyxRQUFRLEVBQUUvRixNQUFNLENBQUMrRixRQUFTO29CQUMxQkMsS0FBSyxFQUFFaEcsTUFBTSxDQUFDZ0c7a0JBQU0sQ0FDTztnQkFFOUI7Y0FBQyxDQUNNO1lBQUMsQ0FDVyxDQUFDO1VBRXhCLENBQUMsTUFBTTtZQUNOO1lBQ0EsT0FDQzlDLElBQUEsQ0FBQ0MsUUFBUTtjQUNSRyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDaUQsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFFO2NBQzNERyxJQUFJLEVBQUMsdUNBQXVDO2NBQzVDRyxLQUFLLEVBQUU1QixlQUFlLENBQUN5Siw2QkFBNkIsQ0FBQyxJQUFJLENBQUU7Y0FDM0R0SixPQUFPLEVBQUU5QixNQUFNLENBQUNnRjtZQUE0QyxDQUM1RCxDQUFDO1VBRUo7UUFDRDtRQUNBLE9BQU96RSxTQUFTO01BRWpCLEtBQUtrSyxrQkFBa0IsQ0FBQ1ksUUFBUTtRQUMvQixJQUFJLENBQUNsTCxjQUFjLEVBQUU7VUFDcEI7VUFDQSxPQUNDK0MsSUFBQSxDQUFDcUQsbUJBQW1CO1lBQ25CakQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1lBQ25FLGlCQUFlakQsTUFBTSxDQUFDd0QsT0FBTyxLQUFLLE1BQU0sSUFBSXhELE1BQU0sQ0FBQ3dELE9BQU8sS0FBSyxPQUFPLEdBQUdqRCxTQUFTLEdBQUcsMEJBQTJCO1lBQ2hIaUQsT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBUTtZQUFBQyxRQUFBLEVBRXhCUCxJQUFBLENBQUNzQyxNQUFNO2NBQ05sQyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDaUQsR0FBRyxDQUFDLENBQUU7Y0FDNUNHLElBQUksRUFBQyxzQ0FBc0M7Y0FDM0NHLEtBQUssRUFBRTVCLGVBQWUsQ0FBQzJKLHNCQUF1QjtjQUM5QzlILE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQThCO2NBQzlDMUIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDOEIsT0FBOEI7Y0FBQTJCLFFBQUEsRUFFN0M7Z0JBQ0FvQyxVQUFVLEVBQ1QzQyxJQUFBLENBQUM0Qyx5QkFBeUI7a0JBQUNDLFFBQVEsRUFBRS9GLE1BQU0sQ0FBQytGLFFBQVEsSUFBSSxnQkFBaUI7a0JBQUNDLEtBQUssRUFBRWhHLE1BQU0sQ0FBQ2dHO2dCQUFNLENBQUU7Y0FFbEc7WUFBQyxDQUNNO1VBQUMsQ0FDVyxDQUFDO1FBRXhCO1FBQ0EsT0FBT3pGLFNBQVM7TUFFakIsS0FBS2tLLGtCQUFrQixDQUFDYyxNQUFNO01BQzlCLEtBQUtkLGtCQUFrQixDQUFDZSxRQUFRO1FBQy9CLE9BQU9DLG1CQUFtQixDQUFDekwsTUFBTSxFQUFFRSxLQUFLLEVBQUVDLGNBQWMsQ0FBQztNQUUxRDtRQUNDLE9BQU9JLFNBQVM7SUFDbEI7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTbUwsVUFBVUEsQ0FDekJ4TCxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJFLFVBQXFDLEVBQ3JDRCxpQkFBMEIsRUFDMUIwSSxnQkFBZ0QsRUFDVTtJQUMxRDtJQUNBLE1BQU02Qyw2QkFBNkIsR0FBR25ELFlBQVksQ0FBQ29ELGlDQUFpQyxDQUFDMUwsS0FBSyxDQUFDK0IsZUFBZSxDQUFDNEosT0FBTyxDQUFDO0lBRW5ILE9BQU9GLDZCQUE2QixDQUNsQ3pFLEdBQUcsQ0FBRWxILE1BQWtCLElBQUs7TUFDNUIsUUFBUUEsTUFBTSxDQUFDMEUsSUFBSTtRQUNsQixLQUFLb0gsVUFBVSxDQUFDQyxRQUFRO1VBQ3ZCLE9BQU94QixpQkFBaUIsQ0FBQ3ZLLE1BQU0sRUFBb0JFLEtBQUssRUFBRUMsY0FBYyxFQUFFRSxVQUFVLENBQUNzQixlQUFlLEVBQUVtSCxnQkFBZ0IsQ0FBQztRQUN4SCxLQUFLZ0QsVUFBVSxDQUFDZixJQUFJO1VBQ25CLE9BQU96QyxhQUFhLENBQUN0SSxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxFQUFFQyxpQkFBaUIsRUFBRUMsVUFBVSxDQUFDO1FBQ25GO1VBQ0MsT0FBT2dJLFNBQVMsQ0FBQ3JJLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxVQUFVLENBQUM7TUFDaEY7SUFDRCxDQUFDLENBQUMsQ0FDRDRHLE1BQU0sQ0FBRWpILE1BQU0sSUFBS0EsTUFBTSxLQUFLTyxTQUFTLENBQUM7RUFDM0M7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVBBeUwsUUFBQSxDQUFBTixVQUFBLEdBQUFBLFVBQUE7RUFRQSxTQUFTTyxjQUFjQSxDQUN0QkMsY0FBdUIsRUFDdkJDLFdBQStCLEVBQy9CQyx5QkFBa0MsRUFDbENDLFlBQXFCLEVBQ2E7SUFDbEMsSUFBSUgsY0FBYyxFQUFFO01BQ25CLE9BQ0NoSixJQUFBLENBQUNxRCxtQkFBbUI7UUFDbkJqRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDb0osV0FBVyxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFDbkRHLEtBQUssRUFBQyw4QkFBOEI7UUFDcEMsaUJBQWMsb0JBQW9CO1FBQUE3SSxRQUFBLEVBRWpDO1VBQ0F6RCxNQUFNLEVBQUVrRCxJQUFBLENBQUNxSixnQkFBZ0I7WUFBQ2pKLEVBQUUsRUFBRTZJLFdBQVk7WUFBQ0ssaUJBQWlCLEVBQUVKLHlCQUEwQjtZQUFDNUksT0FBTyxFQUFFNkk7VUFBYSxDQUFFO1FBQ2xIO01BQUMsQ0FDbUIsQ0FBQztJQUV4QjtJQUNBLE9BQU85TCxTQUFTO0VBQ2pCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTa00sYUFBYUEsQ0FBQ3ZNLEtBQTJCLEVBQW1DO0lBQ3BGLElBQUlBLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDb0ssZ0JBQWdCLEVBQUU7TUFDbkQsT0FDQ3hKLElBQUEsQ0FBQ3FELG1CQUFtQjtRQUNuQmpELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFDdkZzSixLQUFLLEVBQUMsNkJBQTZCO1FBQ25DLGlCQUFjLG9CQUFvQjtRQUFBN0ksUUFBQSxFQUVqQztVQUNBekQsTUFBTSxFQUFFa0QsSUFBQSxDQUFDeUoscUJBQXFCO1lBQUNySixFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQztVQUFFLENBQUU7UUFDbEc7TUFBQyxDQUNtQixDQUFDO0lBRXhCO0lBQ0EsT0FBT3pDLFNBQVM7RUFDakI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTdUssWUFBWUEsQ0FBQzlLLE1BQXNCLEVBQUVFLEtBQTJCLEVBQTBEO0lBQUEsSUFBeERDLGNBQWMsR0FBQTBELFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF0RCxTQUFBLEdBQUFzRCxTQUFBLE1BQUcsS0FBSztJQUNoRyxJQUFJLENBQUMxRCxjQUFjLEVBQUU7TUFDcEI7TUFDQSxPQUNDK0MsSUFBQSxDQUFDcUQsbUJBQW1CO1FBQUNqRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1FBQUMsaUJBQWMsb0JBQW9CO1FBQUFTLFFBQUEsRUFDckhQLElBQUEsQ0FBQ3NDLE1BQU07VUFDTmxDLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUU7VUFDdkNJLElBQUksRUFBQywyQkFBMkI7VUFDaEMsZUFBWSxlQUFlO1VBQzNCSSxPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUE4QjtVQUM5QzFCLE9BQU8sRUFBRTlCLE1BQU0sQ0FBQzhCLE9BQThCO1VBQUEyQixRQUFBLEVBRTdDO1lBQ0FvQyxVQUFVLEVBQUUzQyxJQUFBLENBQUM0Qyx5QkFBeUI7Y0FBQ0MsUUFBUSxFQUFFL0YsTUFBTSxDQUFDK0YsUUFBUztjQUFDQyxLQUFLLEVBQUVoRyxNQUFNLENBQUNnRztZQUFNLENBQTRCO1VBQ25IO1FBQUMsQ0FDTTtNQUFDLENBQ1csQ0FBQztJQUV4QixDQUFDLE1BQU07TUFDTjtNQUNBLE9BQ0M5QyxJQUFBLENBQUNDLFFBQVE7UUFDUkcsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUU7UUFDdERJLElBQUksRUFBQywyQkFBMkI7UUFDaEMsZUFBWSw0QkFBNEI7UUFDeENJLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQThCO1FBQzlDMUIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDZ0Y7TUFBNEMsQ0FDNUQsQ0FBQztJQUVKO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTZ0csYUFBYUEsQ0FBQ2hMLE1BQXNCLEVBQUVFLEtBQTJCLEVBQTBEO0lBQUEsSUFBeERDLGNBQWMsR0FBQTBELFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF0RCxTQUFBLEdBQUFzRCxTQUFBLE1BQUcsS0FBSztJQUNqRyxJQUFJLENBQUMxRCxjQUFjLEVBQUU7TUFDcEI7TUFDQSxPQUNDK0MsSUFBQSxDQUFDcUQsbUJBQW1CO1FBQUNqRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1FBQUMsaUJBQWMsb0JBQW9CO1FBQUFTLFFBQUEsRUFDdEhQLElBQUEsQ0FBQ3NDLE1BQU07VUFDTmxDLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUU7VUFDeENJLElBQUksRUFBQyw0QkFBNEI7VUFDakMsZUFBWSxnQkFBZ0I7VUFDNUJJLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQThCO1VBQzlDMUIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDOEIsT0FBOEI7VUFBQTJCLFFBQUEsRUFFN0M7WUFDQW9DLFVBQVUsRUFBRTNDLElBQUEsQ0FBQzRDLHlCQUF5QjtjQUFDQyxRQUFRLEVBQUUvRixNQUFNLENBQUMrRixRQUFTO2NBQUNDLEtBQUssRUFBRWhHLE1BQU0sQ0FBQ2dHO1lBQU0sQ0FBNEI7VUFDbkg7UUFBQyxDQUNNO01BQUMsQ0FDVyxDQUFDO0lBRXhCLENBQUMsTUFBTTtNQUNOO01BQ0EsT0FDQzlDLElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBRTtRQUN2REksSUFBSSxFQUFDLDRCQUE0QjtRQUNqQyxlQUFZLDZCQUE2QjtRQUN6Q0ksT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBOEI7UUFDOUMxQixPQUFPLEVBQUU5QixNQUFNLENBQUNnRjtNQUE0QyxDQUM1RCxDQUFDO0lBRUo7RUFDRDtFQUVBLFNBQVN5RyxtQkFBbUJBLENBQUN6TCxNQUFzQixFQUFFRSxLQUEyQixFQUFFQyxjQUF1QixFQUFrQztJQUMxSSxNQUFNeU0sU0FBUyxHQUFHNU0sTUFBTSxDQUFDaUQsR0FBRyxLQUFLd0gsa0JBQWtCLENBQUNjLE1BQU07SUFDMUQsSUFBSSxDQUFDcEwsY0FBYyxFQUFFO01BQ3BCO01BQ0EsT0FDQytDLElBQUEsQ0FBQ3FELG1CQUFtQjtRQUNuQmpELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVoRCxNQUFNLENBQUNpRCxHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBRTtRQUNuRU8sT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBUTtRQUN4QixpQkFBYyxvQkFBb0I7UUFBQUMsUUFBQSxFQUVsQ1AsSUFBQSxDQUFDc0MsTUFBTTtVQUNObEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsQ0FBQyxDQUFFO1VBQzVDRyxJQUFJLEVBQUV3SixTQUFTLEdBQUcsK0JBQStCLEdBQUcsaUNBQWtDO1VBQ3RGLGVBQWFBLFNBQVMsR0FBRyw4QkFBOEIsR0FBRyxnQ0FBaUM7VUFDM0ZwSixPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUE4QjtVQUM5QzFCLE9BQU8sRUFBRTlCLE1BQU0sQ0FBQzhCLE9BQThCO1VBQUEyQixRQUFBLEVBRTdDO1lBQ0FvQyxVQUFVLEVBQUUzQyxJQUFBLENBQUM0Qyx5QkFBeUI7Y0FBQ0MsUUFBUSxFQUFFL0YsTUFBTSxDQUFDK0YsUUFBUztjQUFDQyxLQUFLLEVBQUVoRyxNQUFNLENBQUNnRztZQUFNLENBQTRCO1VBQ25IO1FBQUMsQ0FDTTtNQUFDLENBQ1csQ0FBQztJQUV4QixDQUFDLE1BQU07TUFDTjtNQUNBLE9BQ0M5QyxJQUFBLENBQUNDLFFBQVE7UUFDUkcsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBRTtRQUMzREcsSUFBSSxFQUFFd0osU0FBUyxHQUFHLCtCQUErQixHQUFHLGlDQUFrQztRQUN0RixlQUFhQSxTQUFTLEdBQUcsMkNBQTJDLEdBQUcsNkNBQThDO1FBQ3JIcEosT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBOEI7UUFDOUMxQixPQUFPLEVBQUU5QixNQUFNLENBQUNnRjtNQUE0QyxDQUM1RCxDQUFDO0lBRUo7RUFDRDtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU2tHLGNBQWNBLENBQ3RCbEwsTUFBc0IsRUFDdEJFLEtBQTJCLEVBRWtCO0lBQUEsSUFEN0NDLGNBQWMsR0FBQTBELFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF0RCxTQUFBLEdBQUFzRCxTQUFBLE1BQUcsS0FBSztJQUV0QixNQUFNZ0osU0FBUyxHQUFHM00sS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNvQyxJQUFJO0lBQ3BELElBQUltSSxTQUFTLEtBQUssV0FBVyxFQUFFO01BQzlCLElBQUksQ0FBQzFNLGNBQWMsRUFBRTtRQUNwQjtRQUNBLE9BQ0MrQyxJQUFBLENBQUNxRCxtQkFBbUI7VUFBQ2pELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUU7VUFBQyxpQkFBYyxvQkFBb0I7VUFBQVMsUUFBQSxFQUN2SFAsSUFBQSxDQUFDc0MsTUFBTTtZQUNObEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBRTtZQUN6Q0ksSUFBSSxFQUFDLHVCQUF1QjtZQUM1QixlQUFZLGlCQUFpQjtZQUM3QkksT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBOEI7WUFDOUMxQixPQUFPLEVBQUU5QixNQUFNLENBQUM4QixPQUE4QjtZQUFBMkIsUUFBQSxFQUU3QztjQUNBb0MsVUFBVSxFQUNUM0MsSUFBQSxDQUFDNEMseUJBQXlCO2dCQUFDQyxRQUFRLEVBQUUvRixNQUFNLENBQUMrRixRQUFTO2dCQUFDQyxLQUFLLEVBQUVoRyxNQUFNLENBQUNnRztjQUFNLENBQTRCO1lBRXhHO1VBQUMsQ0FDTTtRQUFDLENBQ1csQ0FBQztNQUV4QixDQUFDLE1BQU07UUFDTjtRQUNBLE9BQ0M5QyxJQUFBLENBQUNDLFFBQVE7VUFDUkcsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUU7VUFDeERJLElBQUksRUFBQyx1QkFBdUI7VUFDNUIsZUFBWSw4QkFBOEI7VUFDMUNJLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQThCO1VBQzlDMUIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDZ0Y7UUFBNEMsQ0FDNUQsQ0FBQztNQUVKO0lBQ0Q7SUFDQSxPQUFPekUsU0FBUztFQUNqQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU3VNLHVCQUF1QkEsQ0FDdEM1TSxLQUEyQixFQUMzQkcsVUFBcUMsRUFDckNELGlCQUEwQixFQUMxQjBJLGdCQUFnRCxFQUNwQztJQUNaLE1BQU1zRCx5QkFBeUIsR0FBR1csV0FBVyxDQUFDQyxXQUFXLENBQUNsRSxnQkFBZ0IsQ0FBQyxJQUFJaUUsV0FBVyxDQUFDRSxXQUFXLENBQUNuRSxnQkFBZ0IsQ0FBQztJQUN4SCxJQUFJb0UsVUFBbUI7SUFDdkIsSUFBSWhOLEtBQUssQ0FBQ21NLFlBQVksS0FBSyxLQUFLLEVBQUU7TUFDakNhLFVBQVUsR0FBRyxLQUFLO0lBQ25CLENBQUMsTUFBTTtNQUNOQSxVQUFVLEdBQUdoTixLQUFLLENBQUMrQixlQUFlLENBQUNtSCxVQUFVLENBQUM4RCxVQUFVO0lBQ3pEO0lBRUEsTUFBTXJCLE9BQWdFLEdBQUcsRUFBRTtJQUMzRSxNQUFNc0IsV0FBVyxHQUFHbEIsY0FBYyxDQUFDLENBQUMsQ0FBQy9MLEtBQUssQ0FBQ2dNLGNBQWMsRUFBRWhNLEtBQUssQ0FBQ2tOLFNBQVMsRUFBRWhCLHlCQUF5QixFQUFFYyxVQUFVLENBQUM7SUFDbEgsSUFBSUMsV0FBVyxFQUFFO01BQ2hCdEIsT0FBTyxDQUFDM0QsSUFBSSxDQUFDaUYsV0FBVyxDQUFDO0lBQzFCO0lBQ0F0QixPQUFPLENBQUMzRCxJQUFJLENBQUMsR0FBR3dELFVBQVUsQ0FBQ3hMLEtBQUssRUFBRSxLQUFLLEVBQUVHLFVBQVUsRUFBRUQsaUJBQWlCLEVBQUUwSSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFGLE1BQU11RSxVQUFVLEdBQUdaLGFBQWEsQ0FBQ3ZNLEtBQUssQ0FBQztJQUN2QyxJQUFJbU4sVUFBVSxFQUFFO01BQ2Z4QixPQUFPLENBQUMzRCxJQUFJLENBQUNtRixVQUFVLENBQUM7SUFDekI7SUFFQSxPQUFPeEIsT0FBTztFQUNmOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQUcsUUFBQSxDQUFBYyx1QkFBQSxHQUFBQSx1QkFBQTtFQVFPLFNBQVNRLDJCQUEyQkEsQ0FDMUNwTixLQUEyQixFQUMzQkcsVUFBcUMsRUFDckNELGlCQUEwQixFQUMxQjBJLGdCQUFnRCxFQUNuQztJQUNiLE1BQU16QyxRQUFvQixHQUFHcUYsVUFBVSxDQUFDeEwsS0FBSyxFQUFFLElBQUksRUFBRUcsVUFBVSxFQUFFRCxpQkFBaUIsRUFBRTBJLGdCQUFnQixDQUEwQjtJQUM5SCxJQUFJNUksS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNvQyxJQUFJLEtBQUssV0FBVyxFQUFFO01BQ3ZEMkIsUUFBUSxDQUFDNkIsSUFBSSxDQUFDcUYsMEJBQTBCLENBQUNyTixLQUFLLEVBQUUsSUFBSSxFQUFFRyxVQUFVLENBQUNzQixlQUFlLENBQUM2TCxVQUFVLENBQUMsQ0FBQztNQUM3Rm5ILFFBQVEsQ0FBQzZCLElBQUksQ0FBQ3FGLDBCQUEwQixDQUFDck4sS0FBSyxFQUFFLEtBQUssRUFBRUcsVUFBVSxDQUFDc0IsZUFBZSxDQUFDOEwsWUFBWSxDQUFDLENBQUM7SUFDakc7SUFDQSxPQUFPcEgsUUFBUTtFQUNoQjtFQUFDMkYsUUFBQSxDQUFBc0IsMkJBQUEsR0FBQUEsMkJBQUE7RUFFRCxTQUFTQywwQkFBMEJBLENBQUNyTixLQUEyQixFQUFFd04sTUFBZSxFQUFFaE0sWUFBb0MsRUFBWTtJQUNqSSxNQUFNaU0sZ0JBQWdCLEdBQUdELE1BQU0sR0FDNUJoTCxHQUFHLENBQ0hnRyxLQUFLLENBQUNDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsRUFDaEVELEtBQUssQ0FBQ0MsV0FBVyxDQUFDLHNDQUFzQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FDeEUsQ0FBQyxHQUNEakcsR0FBRyxDQUNIZ0csS0FBSyxDQUFDQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQ2pFRCxLQUFLLENBQUNDLFdBQVcsQ0FBQyxzQ0FBc0MsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQ3hFLENBQUM7SUFDSixPQUNDekYsSUFBQSxDQUFDQyxRQUFRO01BQ1JHLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUwSyxNQUFNLEdBQUcsUUFBUSxHQUFHLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBRTtNQUMvRXRLLElBQUksRUFBRXNLLE1BQU0sR0FBRywwQ0FBMEMsR0FBRyw0Q0FBNkM7TUFDekduSyxLQUFLLEVBQUU3QixZQUFhO01BQ3BCSSxPQUFPLEVBQUU2TDtJQUFpQixDQUMxQixDQUFDO0VBRUo7RUFBQyxPQUFBM0IsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
1136
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZW51SXRlbUZvckFjdGlvbiIsImRhdGFGaWVsZCIsImFjdGlvbiIsIm1lbnVJdGVtQWN0aW9uIiwidGFibGUiLCJmb3JDb250ZXh0TWVudSIsImNvbGxlY3Rpb25Db250ZXh0IiwicGFyYW1ldGVycyIsImFubm90YXRpb25QYXRoIiwidW5kZWZpbmVkIiwiYWN0aW9uQ29udGV4dFBhdGgiLCJDb21tb25IZWxwZXIiLCJnZXRBY3Rpb25Db250ZXh0IiwibWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzQm91bmQiLCJBY3Rpb25UYXJnZXQiLCJpc09wZXJhdGlvbkF2YWlsYWJsZSIsImFubm90YXRpb25zIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInZhbHVlT2YiLCJjb21tYW5kIiwiY29udGV4dE1lbnVUZXh0IiwicHJlc3NIYW5kbGVyIiwiaGFuZGxlclByb3ZpZGVyIiwiZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyIiwicHJlc3NDb21tYW5kIiwiZW5hYmxlZCIsIlRhYmxlSGVscGVyIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkIiwidGFibGVEZWZpbml0aW9uIiwiQWN0aW9uIiwiZ2V0T2JqZWN0IiwiZW5hYmxlT25TZWxlY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiY29udHJvbCIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImNvbXBpbGVFeHByZXNzaW9uIiwiYW5kIiwiVUkiLCJpc05vZGVMZXZlbE5hdmlnYWJsZSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiaXRlbUlkIiwiZ2VuZXJhdGUiLCJjb250ZW50SWQiLCJrZXkiLCJfanN4IiwiTWVudUl0ZW0iLCJ0ZXh0IiwiTGFiZWwiLCJpZCIsInByZXNzIiwidmlzaWJsZSIsImNoaWxkcmVuIiwiY3VzdG9tRGF0YSIsImNyZWF0ZUN1c3RvbURhdGEiLCJnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlciIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsImNvbGxlY3Rpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwic2VtYW50aWNPYmplY3QiLCJTZW1hbnRpY09iamVjdCIsImdldE1lbnVJdGVtIiwiY29udmVydGVkTWV0YWRhdGEiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsInR5cGUiLCJpc0RhdGFGaWVsZEZvckFjdGlvbiIsImlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51IiwiY29udGV4dE9iamVjdFBhdGgiLCJpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwiZW5hYmxlZEZvckNvbnRleHRNZW51IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24iLCJkYXRhRmllbGRBY3Rpb25Db250ZXh0IiwiaWNvbiIsImlzQUlPcGVyYXRpb24iLCJhaUljb24iLCJ0b29sYmFyQWN0aW9uSWQiLCJCdXR0b24iLCJhcmlhSGFzUG9wdXAiLCJpc0FjdGlvbldpdGhEaWFsb2ciLCJCdXR0b25UeXBlIiwiVHJhbnNwYXJlbnQiLCJhcmlhRGVzY3JpYmVkQnkiLCJsYXlvdXREYXRhIiwiT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSIsInByaW9yaXR5IiwiZ3JvdXAiLCJ0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQiLCJnZXREYXRhRmllbGRCdXR0b25Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJQk5EYXRhIiwiZ2V0RGF0YUZpZWxkQnV0dG9uIiwidGVtcGxhdGUiLCJkZWVwQ2xvbmUiLCJBY3Rpb25Ub29sYmFyQWN0aW9uIiwiZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24iLCJkZWZhdWx0QWN0aW9uIiwiZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiIsImhhbmRsZXIiLCJlIiwiZ2V0TWVudUJ1dHRvbiIsImRlZmF1bHRBY3Rpb25IYW5kbGVycyIsIm1lbnVJdGVtcyIsIm1lbnUiLCJmaWx0ZXIiLCJtYXAiLCJpdGVtIiwibWVudUlkIiwiTWVudUJ1dHRvbiIsIm1lbnVQb3NpdGlvbiIsIlBvcHVwIiwiRG9jayIsIkJlZ2luQm90dG9tIiwidXNlRGVmYXVsdEFjdGlvbk9ubHkiLCJidXR0b25Nb2RlIiwiTWVudUJ1dHRvbk1vZGUiLCJTcGxpdCIsIlJlZ3VsYXIiLCJNZW51IiwibWVudUl0ZW1zRm9yQ29udGV4dE1lbnUiLCJmb3JFYWNoIiwicHVzaCIsIml0ZW1zIiwiZ2V0RGVmYXVsdEJ1dHRvbiIsImdldEFjdGlvbiIsImdldENvcHlBY3Rpb24iLCJvcGVyYXRpb25BdmFpbGFibGUiLCJBY3Rpb25IZWxwZXIiLCJnZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbiIsImVxdWFsIiwicGF0aEluTW9kZWwiLCJnZXRDcmVhdGVCdXR0b24iLCJzdGFuZGFyZEFjdGlvbiIsImNvbGxlY3Rpb25FbnRpdHkiLCJzdWZmaXhSZXNvdXJjZUtleSIsIm5hbWUiLCJidXR0b25UZXh0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJjcmVhdGVPdXRib3VuZERldGFpbCIsImFubm90YXRpb24iLCJjcmVhdGUiLCJvdXRib3VuZERldGFpbCIsImVuYWJsZVVwbG9hZFBsdWdpbiIsIkFjdGlvbnNQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyRm9yIiwiZ2V0Q3JlYXRlTWVudSIsInZhbHVlcyIsIm5vZGVUeXBlIiwiaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJhbGxvd2VkVmFsdWUiLCJpbmRleCIsIm1vZGVsTmFtZSIsImlzRW5hYmxlZCIsIm5vdEVxdWFsIiwidmFsdWUiLCJnZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvbiIsImdldFN0YW5kYXJkQWN0aW9uIiwiaXNUZW1wbGF0ZWQiLCJTdGFuZGFyZEFjdGlvbktleXMiLCJDcmVhdGUiLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJEZWxldGUiLCJDdXQiLCJnZXRDdXRCdXR0b24iLCJDb3B5IiwiZ2V0Q29weUJ1dHRvbiIsIlBhc3RlIiwiZ2V0UGFzdGVCdXR0b24iLCJNYXNzRWRpdCIsImdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyIiwiSW5zaWdodHMiLCJhZGRDYXJkVG9JbnNpZ2h0c1ByZXNzIiwiTW92ZVVwIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImFjdGlvbnNXaXRoT3ZlcmZsb3dQcm90ZWN0aW9uIiwiZW5zdXJlUHJpbWFyeUFjdGlvbk5ldmVyT3ZlcmZsb3dzIiwiYWN0aW9ucyIsIkFjdGlvblR5cGUiLCJTdGFuZGFyZCIsIlNlcGFyYXRvciIsIlRvb2xiYXJTZXBhcmF0b3IiLCJfZXhwb3J0cyIsImdldEJhc2ljU2VhcmNoIiwidXNlQmFzaWNTZWFyY2giLCJmaWx0ZXJCYXJJZCIsIl9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQiLCJpc1NlYXJjaGFibGUiLCJsYWJlbCIsIkJhc2ljU2VhcmNoTWFjcm8iLCJ1c2VEcmFmdEVkaXRTdGF0ZSIsImdldEZ1bGxTY3JlZW4iLCJlbmFibGVGdWxsU2NyZWVuIiwiVGFibGVGdWxsU2NyZWVuQnV0dG9uIiwiZm9yTW92ZVVwIiwidGFibGVUeXBlIiwiZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUiLCJNb2RlbEhlbHBlciIsImlzRHJhZnROb2RlIiwiaXNEcmFmdFJvb3QiLCJzZWFyY2hhYmxlIiwiYmFzaWNTZWFyY2giLCJmaWx0ZXJCYXIiLCJmdWxsU2NyZWVuIiwiZ2V0VGFibGVDb250ZXh0TWVudVRlbXBsYXRlIiwiZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnMiLCJleHBhbmROb2RlIiwiY29sbGFwc2VOb2RlIiwiZXhwYW5kIiwiZW5hYmxlRXhwcmVzc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWN0aW9uc1RlbXBsYXRpbmcudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5cbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGNvbXBpbGVFeHByZXNzaW9uLCBlcXVhbCwgbm90RXF1YWwsIHBhdGhJbk1vZGVsLCByZXNvbHZlQmluZGluZ1N0cmluZyB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdGlzQWN0aW9uV2l0aERpYWxvZyxcblx0aXNEYXRhRmllbGRGb3JBY3Rpb24sXG5cdGlzRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uQWN0aW9uLCBCYXNlQWN0aW9uLCBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBCdXR0b25UeXBlLCBhaUljb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQgeyBTdGFuZGFyZEFjdGlvbktleXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbURhdGEgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9UU1hVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BbmRBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9NZGNDaGFydFRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvTWRjVGFibGVUZW1wbGF0ZVwiO1xuaW1wb3J0IFRhYmxlRnVsbFNjcmVlbkJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUZ1bGxTY3JlZW5CdXR0b25cIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCBNZW51SXRlbSBmcm9tIFwic2FwL20vTWVudUl0ZW1cIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXCI7XG5pbXBvcnQgVG9vbGJhclNlcGFyYXRvciBmcm9tIFwic2FwL20vVG9vbGJhclNlcGFyYXRvclwiO1xuaW1wb3J0IHsgTWVudUJ1dHRvbk1vZGUgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IEFjdGlvbnNQbGFjZWhvbGRlciBmcm9tIFwic2FwL20vdXBsb2FkL0FjdGlvbnNQbGFjZWhvbGRlclwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgUG9wdXAgZnJvbSBcInNhcC91aS9jb3JlL1BvcHVwXCI7XG5pbXBvcnQgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgQWN0aW9uSGVscGVyIGZyb20gXCIuLi9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IEJhc2ljU2VhcmNoTWFjcm8gZnJvbSBcIi4vQmFzaWNTZWFyY2hcIjtcbmltcG9ydCB0eXBlIFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIgZnJvbSBcIi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgTWVudUl0ZW0gZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBmb3IgYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBtZW51SXRlbUFjdGlvbiBUaGUgbWVudUl0ZW1BY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldE1lbnVJdGVtRm9yQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbixcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0bWVudUl0ZW1BY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGlmICghbWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRQYXRoID0gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQoXG5cdFx0cGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhXG5cdCk7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb25Db250ZXh0UGF0aCkhO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dFxuXHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhhY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uQ29udGV4dClcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNCb3VuZCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdGNvbnN0IGlzT3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgOiBtZW51SXRlbUFjdGlvbi5jb21tYW5kICsgXCI6OkNvbnRleHRNZW51XCI7XG5cdGNvbnN0IGNvbnRleHRNZW51VGV4dCA9IGZvckNvbnRleHRNZW51ID8gXCJDb250ZXh0TWVudVwiIDogXCJBY3Rpb25NZW51XCI7XG5cdGNvbnN0IHByZXNzSGFuZGxlciA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKGRhdGFGaWVsZCwgbWVudUl0ZW1BY3Rpb24sIGFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kID8gYGNtZDoke2NvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblxuXHRsZXQgZW5hYmxlZDogc3RyaW5nIHwgYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID1cblx0XHRtZW51SXRlbUFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gbWVudUl0ZW1BY3Rpb24uZW5hYmxlZFxuXHRcdFx0OiBUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQoXG5cdFx0XHRcdFx0dGFibGUudGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0ISFpc0JvdW5kLFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0bWVudUl0ZW1BY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0ICApO1xuXG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCAmJiAhIWlzQm91bmQpIHtcblx0XHRlbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlLCByZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkKSkpO1xuXHR9XG5cdGlmIChpc0JvdW5kICE9PSB0cnVlIHx8IGlzT3BlcmF0aW9uQXZhaWxhYmxlKSB7XG5cdFx0Y29uc3QgaXRlbUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgbWVudUl0ZW1BY3Rpb24ua2V5LCBhY3Rpb24ua2V5LCBjb250ZXh0TWVudVRleHQsIGRhdGFGaWVsZCwgXCJNZW51SXRlbUZvckFjdGlvblwiXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdGlkPXtpdGVtSWR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHRcdHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBpdGVtSWQpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIE1lbnVJdGVtIGZvciB0aGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIEludGVudEJhc2VkTmF2aWdhdGlvblxuICogQHBhcmFtIG1lbnVJdGVtQWN0aW9uIFRoZSBtZW51SXRlbUFjdGlvbiB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdG1lbnVJdGVtQWN0aW9uOiBCYXNlQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2UsXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IE1lbnVJdGVtIHtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiBoYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKG1lbnVJdGVtQWN0aW9uLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7bWVudUl0ZW1BY3Rpb24uY29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IGVuYWJsZWQgPVxuXHRcdG1lbnVJdGVtQWN0aW9uLmVuYWJsZWQgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBtZW51SXRlbUFjdGlvbi5lbmFibGVkXG5cdFx0XHQ6IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZChcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdHRhYmxlRGVmaW5pdGlvbjogdGFibGUudGFibGVEZWZpbml0aW9uXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCxcblx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0ICApO1xuXHRjb25zdCBpZCA9IGZvckNvbnRleHRNZW51XG5cdFx0PyBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBtZW51SXRlbUFjdGlvbi5rZXksIGFjdGlvbi5rZXksIGRhdGFGaWVsZCwgXCJNZW51SXRlbUludGVudEJhc2VkTmF2aWdhdGlvblwiLCBcIkNvbnRleHRNZW51XCJdKVxuXHRcdDogZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgbWVudUl0ZW1BY3Rpb24ua2V5LCBhY3Rpb24ua2V5LCBkYXRhRmllbGQsIFwiTWVudUl0ZW1JbnRlbnRCYXNlZE5hdmlnYXRpb25cIl0pO1xuXHRyZXR1cm4gKFxuXHRcdDxNZW51SXRlbVxuXHRcdFx0dGV4dD17ZGF0YUZpZWxkLkxhYmVsfVxuXHRcdFx0aWQ9e2lkfVxuXHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdFx0dmlzaWJsZT17bWVudUl0ZW1BY3Rpb24udmlzaWJsZX1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBbXG5cdFx0XHRcdFx0IWRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHRcblx0XHRcdFx0XHRcdD8gY3JlYXRlQ3VzdG9tRGF0YShcIklCTkRhdGFcIiwgeyBzZW1hbnRpY09iamVjdDogZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0LCBhY3Rpb246IGRhdGFGaWVsZC5BY3Rpb24gfSlcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBpZClcblx0XHRcdFx0XVxuXHRcdFx0fX1cblx0XHQ8L01lbnVJdGVtPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIE1lbnVJdGVtIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBtZW51SXRlbUFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIG1lbnVJdGVtQWN0aW9uIFRoZSBtZW51SXRlbUFjdGlvbiB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldE1lbnVJdGVtKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRtZW51SXRlbUFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZGF0YUZpZWxkID0gbWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHQ/IChwYXJhbWV0ZXJzLmNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoKG1lbnVJdGVtQWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcylcblx0XHQ6IHVuZGVmaW5lZDtcblxuXHRzd2l0Y2ggKGRhdGFGaWVsZCAmJiBtZW51SXRlbUFjdGlvbi50eXBlKSB7XG5cdFx0Y2FzZSBcIkZvckFjdGlvblwiOlxuXHRcdFx0aWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uKGRhdGFGaWVsZCkpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFmb3JDb250ZXh0TWVudSB8fFxuXHRcdFx0XHRcdChmb3JDb250ZXh0TWVudSAmJiBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShtZW51SXRlbUFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZ2V0TWVudUl0ZW1Gb3JBY3Rpb24oZGF0YUZpZWxkLCBhY3Rpb24sIG1lbnVJdGVtQWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oZGF0YUZpZWxkISkgJiZcblx0XHRcdFx0KCFmb3JDb250ZXh0TWVudSB8fCAoZm9yQ29udGV4dE1lbnUgJiYgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUobWVudUl0ZW1BY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRtZW51SXRlbUFjdGlvbixcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudSxcblx0XHRcdFx0XHRjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA6IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihtZW51SXRlbUFjdGlvbiBhcyBDdXN0b21BY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cdGxldCBlbmFibGVkID0gIWZvckNvbnRleHRNZW51ID8gbWVudUl0ZW1BY3Rpb24uZW5hYmxlZCA6IChtZW51SXRlbUFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLmVuYWJsZWRGb3JDb250ZXh0TWVudTtcblx0aWYgKFxuXHRcdChtZW51SXRlbUFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLnJlcXVpcmVzU2VsZWN0aW9uICYmXG5cdFx0dGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWxcblx0KSB7XG5cdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHR9XG5cdGNvbnN0IGNvbnRleHRNZW51VGV4dCA9IGZvckNvbnRleHRNZW51ID8gXCJDb250ZXh0TWVudVwiIDogXCJBY3Rpb25NZW51XCI7XG5cdGNvbnN0IGl0ZW1JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIG1lbnVJdGVtQWN0aW9uLmtleSwgY29udGV4dE1lbnVUZXh0LCBhY3Rpb24ua2V5LCBkYXRhRmllbGQsIFwiTWVudUl0ZW1cIl0pO1xuXHRyZXR1cm4gKFxuXHRcdDxNZW51SXRlbVxuXHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZQTTogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyJ31cIlxuXHRcdFx0dGV4dD17bWVudUl0ZW1BY3Rpb24/LnRleHR9XG5cdFx0XHRpZD17aXRlbUlkfVxuXHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHR2aXNpYmxlPXttZW51SXRlbUFjdGlvbi52aXNpYmxlfVxuXHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGl0ZW1JZCldXG5cdFx0XHR9fVxuXHRcdDwvTWVudUl0ZW0+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb25CdXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQnV0dG9uRm9yQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbixcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEJ1dHRvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgZGF0YUZpZWxkQWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSE7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRQYXRoID0gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQoZGF0YUZpZWxkQWN0aW9uQ29udGV4dCk7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb25Db250ZXh0UGF0aCkhO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dFxuXHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxBY3Rpb24+KGFjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25Db250ZXh0KVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKGRhdGFGaWVsZCwgYWN0aW9uLCB1bmRlZmluZWQsIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gYWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXHRjb25zdCBlbmFibGVkID1cblx0XHRhY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IGFjdGlvbi5lbmFibGVkXG5cdFx0XHQ6IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZChcblx0XHRcdFx0XHR0YWJsZS50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0XHQhIWlzQm91bmQsXG5cdFx0XHRcdFx0YWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0ICApO1xuXHRjb25zdCBpY29uID0gYWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWQ7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdGNvbnN0IHRvb2xiYXJBY3Rpb25JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uSWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0YXJpYUhhc1BvcHVwPXtpc0FjdGlvbldpdGhEaWFsb2coZGF0YUZpZWxkKX1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdGFyaWFEZXNjcmliZWRCeT17YWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBbXCJmZTo6QWlBY3Rpb246OkFyaWFUZXh0XCJdIDogdW5kZWZpbmVkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdG9vbGJhckFjdGlvbklkKV0sXG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0Y29uc3QgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXt0YWJsZUFjdGlvbkNvbnRleHRNZW51SWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gQnV0dG9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIEludGVudEJhc2VkTmF2aWdhdGlvblxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBmb3IgdGhlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBidXR0b24vbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbkZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IEJ1dHRvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmQgPyB1bmRlZmluZWQgOiBoYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKGFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBhY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGVuYWJsZWQgPVxuXHRcdGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uOiB0YWJsZS50YWJsZURlZmluaXRpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cdGNvbnN0IElCTkRhdGEgPSAhZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCA/IHsgc2VtYW50aWNPYmplY3Q6IGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCwgYWN0aW9uOiBkYXRhRmllbGQuQWN0aW9uIH0gOiB1bmRlZmluZWQ7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdGNvbnN0IHRvb2xiYXJBY3Rpb25JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uSWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIElCTkRhdGEpLCBjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdG9vbGJhckFjdGlvbklkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZCwgXCJDb250ZXh0TWVudVwiXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17dGFibGVBY3Rpb25Db250ZXh0TWVudUlkfVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIElCTkRhdGEpLCBjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgdGhlIGJ1dHRvbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgZm9yIHRoZSBidXR0b24vbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcylcblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHRlbXBsYXRlOiBNZW51SXRlbSB8IEJ1dHRvbiB8IHVuZGVmaW5lZDtcblx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRpZiAoaXNEYXRhRmllbGRGb3JBY3Rpb24oZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0XHRcdFx0aWYgKCEhaXNCb3VuZCAmJiB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdFx0XHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlzT3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0XHRcdFx0Ly8gc2hvdyBvbmx5IGJvdW5kIGFjdGlvbnMgaW4gY29udGV4dCBtZW51XG5cdFx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUgfHwgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpIHtcblx0XHRcdFx0XHRpZiAoaXNCb3VuZCAhPT0gdHJ1ZSB8fCBpc09wZXJhdGlvbkF2YWlsYWJsZSkge1xuXHRcdFx0XHRcdFx0dGVtcGxhdGUgPSBnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24oZGF0YUZpZWxkLCBhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHQoIWZvckNvbnRleHRNZW51IHx8IFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KGFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRlbXBsYXRlID0gZ2V0RGF0YUZpZWxkQnV0dG9uRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRpZiAodGVtcGxhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgZGF0YUZpZWxkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiB0ZW1wbGF0ZVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiB0ZW1wbGF0ZSBhcyBNZW51SXRlbTtcblx0fVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGRlZmF1bHQgYWN0aW9uIGhhbmRsZXIgdGhhdCBpcyBpbnZva2VkIHdoZW4gYWRkaW5nIHRoZSBtZW51IGJ1dHRvbi5cbiAqIEBwYXJhbSBkZWZhdWx0QWN0aW9uIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGUgbWVudVxuICogQHBhcmFtIGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24gVGhlIGRhdGFGaWVsZCBmb3IgdGhlIGRlZmF1bHQgYWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQgaGFuZGxlciBvciBjb21tYW5kXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRNZW51QnV0dG9uQWN0aW9uKFxuXHRkZWZhdWx0QWN0aW9uOiBDdXN0b21BY3Rpb24gfCB1bmRlZmluZWQsXG5cdGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb246IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IHVuZGVmaW5lZCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogeyBoYW5kbGVyPzogKGU6IFVJNUV2ZW50KSA9PiB2b2lkOyBjb21tYW5kPzogc3RyaW5nIH0ge1xuXHRpZiAoIWRlZmF1bHRBY3Rpb24pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHR0cnkge1xuXHRcdHN3aXRjaCAoZGVmYXVsdEFjdGlvbi50eXBlKSB7XG5cdFx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRkZWZhdWx0QWN0aW9uLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH07XG5cblx0XHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKGRlZmF1bHRBY3Rpb24sIGZhbHNlKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdGlmIChkZWZhdWx0QWN0aW9uLmNvbW1hbmQpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0Y29tbWFuZDogYGNtZDoke2RlZmF1bHRBY3Rpb24uY29tbWFuZH18ZGVmYXVsdEFjdGlvbmBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyOiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihkZWZhdWx0QWN0aW9uLCBmYWxzZSlcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0aGUgTWVudUJ1dHRvbiBjb250cm9sIHdoaWNoIGVuYWJsZXMgdGhlIHVzZXIgdG8gc2hvdyBhIGhpZXJhcmNoaWNhbCBtZW51LlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIE1lbnVCdXR0b24gY29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRNZW51QnV0dG9uKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0aWYgKChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5yZXF1aXJlc1NlbGVjdGlvbiAmJiB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHR9XG5cdGNvbnN0IGljb24gPSBhY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZDtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbiA9IChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5kZWZhdWx0QWN0aW9uIGFzIEN1c3RvbUFjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBkYXRhRmllbGRGb3JEZWZhdWx0QWN0aW9uID0gZGVmYXVsdEFjdGlvbj8uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gcGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+KGRlZmF1bHRBY3Rpb24uYW5ub3RhdGlvblBhdGgpXG5cdFx0XHRcdFx0LnRhcmdldFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbkhhbmRsZXJzID0gZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24oZGVmYXVsdEFjdGlvbiwgZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiwgcGFyYW1ldGVycyk7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gYWN0aW9uLm1lbnVcblx0XHRcdD8uZmlsdGVyKChtZW51SXRlbUFjdGlvbikgPT4gdHlwZW9mIG1lbnVJdGVtQWN0aW9uICE9PSBcInN0cmluZ1wiKVxuXHRcdFx0Lm1hcCgobWVudUl0ZW1BY3Rpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtKGFjdGlvbiwgbWVudUl0ZW1BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAobWVudUl0ZW1zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZF0pO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRtZW51UG9zaXRpb249e1BvcHVwLkRvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdFx0XHRpZD17bWVudUlkfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRcdHVzZURlZmF1bHRBY3Rpb25Pbmx5PXshIShhY3Rpb24gYXMgQ3VzdG9tQW5kQWN0aW9uKS5kZWZhdWx0QWN0aW9ufVxuXHRcdFx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0XHRcdGJ1dHRvbk1vZGU9eyhhY3Rpb24gYXMgQ3VzdG9tQW5kQWN0aW9uKS5kZWZhdWx0QWN0aW9uID8gTWVudUJ1dHRvbk1vZGUuU3BsaXQgOiBNZW51QnV0dG9uTW9kZS5SZWd1bGFyfVxuXHRcdFx0XHRcdFx0ZGVmYXVsdEFjdGlvbj17ZGVmYXVsdEFjdGlvbkhhbmRsZXJzLmhhbmRsZXJ9XG5cdFx0XHRcdFx0XHRqc3g6Y29tbWFuZD17ZGVmYXVsdEFjdGlvbkhhbmRsZXJzLmNvbW1hbmR9XG5cdFx0XHRcdFx0XHRhcmlhRGVzY3JpYmVkQnk9e2FjdGlvbi5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gW1wiZmU6OkFpQWN0aW9uOjpBcmlhVGV4dFwiXSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIG1lbnVJZCldLFxuXHRcdFx0XHRcdFx0XHRtZW51OiA8TWVudT57bWVudUl0ZW1zfTwvTWVudT4sXG5cdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0Y29uc3QgbWVudUl0ZW1zRm9yQ29udGV4dE1lbnU6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXHRcdGFjdGlvbi5tZW51Py5mb3JFYWNoKChtZW51SXRlbUFjdGlvbikgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBtZW51SXRlbUFjdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShtZW51SXRlbUFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKSB7XG5cdFx0XHRcdG1lbnVJdGVtc0ZvckNvbnRleHRNZW51Py5wdXNoKG1lbnVJdGVtQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IG1lbnVJdGVtc0ZvckNvbnRleHRNZW51XG5cdFx0XHQuZmlsdGVyKChtZW51SXRlbUFjdGlvbikgPT4gdHlwZW9mIG1lbnVJdGVtQWN0aW9uICE9PSBcInN0cmluZ1wiKVxuXHRcdFx0Lm1hcCgobWVudUl0ZW1BY3Rpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtKGFjdGlvbiwgbWVudUl0ZW1BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAobWVudUl0ZW1zPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHRleHQ9e2FjdGlvbi50ZXh0fVxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnV9XG5cdFx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9NZW51SXRlbT5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgZGVmYXVsdCBidXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0QnV0dG9uKFxuXHRhY3Rpb246IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gYWN0aW9uLmNvbW1hbmQgOiBhY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBhY3Rpb24uY29tbWFuZCA/IHVuZGVmaW5lZCA6IGhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihhY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gYWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXG5cdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gJiYgdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRhY3Rpb24gPSBkZWVwQ2xvbmUoYWN0aW9uKTtcblx0XHRhY3Rpb24uZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0XHRhY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpXG5cdFx0KTtcblx0fVxuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT17YWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiIHx8IGFjdGlvbi52aXNpYmxlID09PSBcImZhbHNlXCIgPyB1bmRlZmluZWQgOiBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwifVxuXHRcdFx0PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZQTTogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyJ31cIlxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWRdKX1cblx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRpY29uPXthY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRhcmlhRGVzY3JpYmVkQnk9e2FjdGlvbi5pc0FJT3BlcmF0aW9uID09PSB0cnVlID8gW1wiZmU6OkFpQWN0aW9uOjpBcmlhVGV4dFwiXSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZF0pKV0sXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIGlmIChUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShhY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSkge1xuXHRcdGNvbnN0IHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgXCJDb250ZXh0TWVudVwiXSk7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZQTTogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyJ31cIlxuXHRcdFx0XHRpZD17dGFibGVBY3Rpb25Db250ZXh0TWVudUlkfVxuXHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgYW4gYWN0aW9uIGJ1dHRvbi9tZW51IGl0ZW0gYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIGFjdGlvbiB0byBnZXRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBvZiB0aGUgYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGlvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0c3dpdGNoIChhY3Rpb24udHlwZSkge1xuXHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRpZiAoXCJub1dyYXBcIiBpbiBhY3Rpb24pIHtcblx0XHRcdFx0cmV0dXJuIGdldERlZmF1bHRCdXR0b24oYWN0aW9uIGFzIEN1c3RvbUFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlcik7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTWVudVwiOlxuXHRcdFx0cmV0dXJuIGdldE1lbnVCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRkZWZhdWx0OlxuXHR9XG5cdHJldHVybiBnZXREYXRhRmllbGRCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvcHkgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgY29weSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIGFjdGlvbiBpcyBmb3IgQWN0aW9uIFRvb2xiYXIgb2YgQ29udGV4dCBNZW51XG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldENvcHlBY3Rpb24oXG5cdGFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IENvbW1vbkhlbHBlci5nZXRBY3Rpb25Db250ZXh0KHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSEpO1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGUgPSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0ID0gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpITtcblx0Y29uc3QgZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGFjdGlvbkNvbnRleHRcblx0XHQ/IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoYWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkNvbnRleHQpXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzQm91bmQgPSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0Y29uc3QgcHJlc3MgPSBkYXRhRmllbGRcblx0XHQ/IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihkYXRhRmllbGQsIGFjdGlvbiwgdW5kZWZpbmVkLCBmb3JDb250ZXh0TWVudSlcblx0XHQ6IHVuZGVmaW5lZDtcblxuXHRsZXQgZW5hYmxlZDogc3RyaW5nIHwgYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gb3BlcmF0aW9uQXZhaWxhYmxlXG5cdFx0PyBUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQoXG5cdFx0XHRcdHRhYmxlLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0ISFpc0JvdW5kLFxuXHRcdFx0XHRhY3Rpb25Db250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGUsXG5cdFx0XHRcdGZvckNvbnRleHRNZW51LFxuXHRcdFx0XHR0cnVlXG5cdFx0ICApXG5cdFx0OiBgez0gJHtBY3Rpb25IZWxwZXIuZ2V0TnVtYmVyT2ZDb250ZXh0c0V4cHJlc3Npb24oXCJzaW5nbGVcIiwgZm9yQ29udGV4dE1lbnUpfX1gO1xuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRlbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGVuYWJsZWQpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHR9XG5cblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGQsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGRdKX1cblx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRwcmVzcz17cHJlc3N9XG5cdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkXSkpXSxcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGQsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzfVxuXHRcdFx0XHRlbmFibGVkPXtjb21waWxlRXhwcmVzc2lvbihlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKSkgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKSldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBjcmVhdGUgYnV0dG9uLlxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uIFN0YW5kYXJkIGFjdGlvbnMgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyB3aGV0aGVyIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBzZXQgdG8gYGZhbHNlYCwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyLlxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIGZvciB0aGUgY3JlYXRlIGJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRDcmVhdGVCdXR0b24oXG5cdHN0YW5kYXJkQWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBBY3Rpb25zUGxhY2Vob2xkZXIgfCBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGNvbGxlY3Rpb25FbnRpdHkubmFtZTtcblx0Y29uc3QgYnV0dG9uVGV4dCA9IHRhYmxlLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9DT01NT05fVEFCTEVfQ1JFQVRFXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRjb25zdCBjcmVhdGVPdXRib3VuZERldGFpbCA9ICh0YWJsZS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jcmVhdGUgYXMgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbCkub3V0Ym91bmREZXRhaWw7XG5cdGNvbnN0IGN1c3RvbURhdGEgPSBjcmVhdGVPdXRib3VuZERldGFpbFxuXHRcdD8gY3JlYXRlQ3VzdG9tRGF0YShcIklCTkRhdGFcIiwgeyBzZW1hbnRpY09iamVjdDogY3JlYXRlT3V0Ym91bmREZXRhaWwuc2VtYW50aWNPYmplY3QsIGFjdGlvbjogY3JlYXRlT3V0Ym91bmREZXRhaWwuYWN0aW9uIH0pXG5cdFx0OiB1bmRlZmluZWQ7XG5cblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVVwbG9hZFBsdWdpbikge1xuXHRcdHJldHVybiA8QWN0aW9uc1BsYWNlaG9sZGVyIGlkPXtgJHt0YWJsZS5jb250ZW50SWR9LXVwbG9hZEJ1dHRvbmB9IHBsYWNlaG9sZGVyRm9yPVwiVXBsb2FkQnV0dG9uUGxhY2Vob2xkZXJcIiAvPjtcblx0fSBlbHNlIGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDcmVhdGV8cHJlc3NcIlxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YSxcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGFcblx0XHRcdFx0XHRcdFx0XHRwcmlvcml0eT17c3RhbmRhcmRBY3Rpb24ucHJpb3JpdHl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXA9e3N0YW5kYXJkQWN0aW9uLmdyb3VwfVxuXHRcdFx0XHRcdFx0XHQ+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q3JlYXRlOjpDb250ZXh0TWVudXxwcmVzc1wiXG5cdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldENyZWF0ZU1lbnUoXG5cdHN0YW5kYXJkQWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gY29sbGVjdGlvbkVudGl0eS5uYW1lO1xuXHRjb25zdCBidXR0b25UZXh0ID0gdGFibGUuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX0NPTU1PTl9UQUJMRV9DUkVBVEVcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdGNvbnN0IHZhbHVlcyA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlIS52YWx1ZXM7XG5cdGNvbnN0IGhhc0N1c3RvbUNyZWF0ZUVuYWJsZW1lbnQgPSB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50ICE9PSB1bmRlZmluZWQ7XG5cblx0Y29uc3QgbWVudUl0ZW1zID0gdmFsdWVzLm1hcCgoYWxsb3dlZFZhbHVlLCBpbmRleCkgPT4ge1xuXHRcdGNvbnN0IG1vZGVsTmFtZSA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiO1xuXG5cdFx0Y29uc3QgaXNFbmFibGVkID0gaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudFxuXHRcdFx0PyBub3RFcXVhbChwYXRoSW5Nb2RlbChgJHttb2RlbE5hbWV9Y3JlYXRlRW5hYmxlbWVudC9DcmVhdGVfJHtpbmRleH1gLCBcImludGVybmFsXCIpLCBmYWxzZSlcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGlkID0gZm9yQ29udGV4dE1lbnVcblx0XHRcdD8gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWxsb3dlZFZhbHVlLnZhbHVlLCBcIkNvbnRleHRNZW51XCJdKVxuXHRcdFx0OiBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhbGxvd2VkVmFsdWUudmFsdWVdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0dGV4dD17YWxsb3dlZFZhbHVlLnRleHR9XG5cdFx0XHRcdGVuYWJsZWQ9e2lzRW5hYmxlZCA/IGNvbXBpbGVFeHByZXNzaW9uKGlzRW5hYmxlZCkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuZ2V0Q3JlYXRlTWVudUl0ZW1QcmVzc0hhbmRsZXIoaW5kZXgsIGZvckNvbnRleHRNZW51KX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fSk7XG5cblx0aWYgKGZvckNvbnRleHRNZW51KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0aXRlbXM6IG1lbnVJdGVtcyAhPT0gdW5kZWZpbmVkICYmIG1lbnVJdGVtcy5sZW5ndGggPiAwID8gbWVudUl0ZW1zIDogdW5kZWZpbmVkXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9IGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIj5cblx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdG1lbnVQb3NpdGlvbj1cIkJlZ2luQm90dG9tXCJcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleV0pfVxuXHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXldKSldLFxuXHRcdFx0XHRcdG1lbnU6IDxNZW51PnttZW51SXRlbXN9PC9NZW51Pixcblx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVxuXHRcdFx0XHRcdFx0XHRwcmlvcml0eT17c3RhbmRhcmRBY3Rpb24ucHJpb3JpdHl9XG5cdFx0XHRcdFx0XHRcdGdyb3VwPXtzdGFuZGFyZEFjdGlvbi5ncm91cH1cblx0XHRcdFx0XHRcdD48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51QnV0dG9uPlxuXHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBkZWxldGUgYnV0dG9uLlxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uIFN0YW5kYXJkIGFjdGlvbnMgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIGZvciB0aGUgZGVsZXRlIGJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXREZWxldGVCdXR0b24oXG5cdHN0YW5kYXJkQWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGNvbGxlY3Rpb25FbnRpdHkubmFtZTtcblx0Y29uc3QgYnV0dG9uVGV4dCA9IHRhYmxlLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9DT01NT05fVEFCTEVfREVMRVRFXCIsIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpEZWxldGVFbnRyeXxwcmVzc1wiXG5cdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRhcmlhSGFzUG9wdXA9XCJEaWFsb2dcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGFcblx0XHRcdFx0XHRcdFx0XHRwcmlvcml0eT17c3RhbmRhcmRBY3Rpb24ucHJpb3JpdHl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXA9e3N0YW5kYXJkQWN0aW9uLmdyb3VwfVxuXHRcdFx0XHRcdFx0XHQ+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9e2J1dHRvblRleHR9XG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkRlbGV0ZUVudHJ5OjpDb250ZXh0TWVudXxwcmVzc1wiXG5cdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciBzdGFuZGFyZCBhY3Rpb25zIGJhc2VkIG9uIHRoZSBrZXkgb2YgdGhlIHN0YW5kYXJkIGFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIGFjdGlvbiB0byB0ZW1wbGF0ZVxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhbmRhcmQgYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uKFxuXHRhY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKGFjdGlvbi5pc1RlbXBsYXRlZCA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwgJiYgYWN0aW9uLmtleSAhPT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSkge1xuXHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHRcdGFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51ID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSlcblx0XHQpO1xuXHR9XG5cblx0c3dpdGNoIChhY3Rpb24ua2V5KSB7XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlOlxuXHRcdFx0aWYgKFxuXHRcdFx0XHQhdGFibGUudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIHx8XG5cdFx0XHRcdC8vIFdlIG9ubHkgaGF2ZSBDcmVhdGUgb24gdGhlIENvbnRleHRNZW51IG9uIHRoZSBUcmVlVGFibGVcblx0XHRcdFx0KHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVHJlZVRhYmxlXCIgJiYgZm9yQ29udGV4dE1lbnUpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSBpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIGdldENyZWF0ZU1lbnUoYWN0aW9uLCB0YWJsZSwgY29sbGVjdGlvbkVudGl0eSwgZm9yQ29udGV4dE1lbnUsIGhhbmRsZXJQcm92aWRlcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZ2V0Q3JlYXRlQnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uRW50aXR5KTtcblx0XHRcdH1cblxuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLkRlbGV0ZTpcblx0XHRcdHJldHVybiBnZXREZWxldGVCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLkN1dDpcblx0XHRcdHJldHVybiBnZXRDdXRCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdGNhc2UgU3RhbmRhcmRBY3Rpb25LZXlzLkNvcHk6XG5cdFx0XHRyZXR1cm4gZ2V0Q29weUJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuUGFzdGU6XG5cdFx0XHRyZXR1cm4gZ2V0UGFzdGVCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUpO1xuXG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuTWFzc0VkaXQ6XG5cdFx0XHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkKSB7XG5cdFx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleSwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfTUFTU0VESVR9XCJcblx0XHRcdFx0XHRcdFx0XHRwcmVzcz17aGFuZGxlclByb3ZpZGVyLmdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyKGZhbHNlKX1cblx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdyb3VwPXthY3Rpb24uZ3JvdXB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfTUFTU0VESVR9XCJcblx0XHRcdFx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5nZXRNYXNzRWRpdEJ1dHRvblByZXNzSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5JbnNpZ2h0czpcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSU5TSUdIVFNfQ0FSRH1cIlxuXHRcdFx0XHRcdFx0XHRwcmVzcz17aGFuZGxlclByb3ZpZGVyLmFkZENhcmRUb0luc2lnaHRzUHJlc3N9XG5cdFx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHkgPz8gXCJBbHdheXNPdmVyZmxvd1wifSBncm91cD17YWN0aW9uLmdyb3VwfSAvPlxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXA6XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd246XG5cdFx0XHRyZXR1cm4gZ2V0TW92ZVVwRG93bkJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3Igc3RhbmRhcmQsIGFubm90YXRpb24sIGFuZCBjdXN0b20gYWN0aW9ucyBvZiB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25zKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdIHtcblx0Ly8gQXBwbHkgcHJpbWFyeSBhY3Rpb24gb3ZlcmZsb3cgcHJvdGVjdGlvbiBiZWZvcmUgcHJvY2Vzc2luZ1xuXHRjb25zdCBhY3Rpb25zV2l0aE92ZXJmbG93UHJvdGVjdGlvbiA9IEFjdGlvbkhlbHBlci5lbnN1cmVQcmltYXJ5QWN0aW9uTmV2ZXJPdmVyZmxvd3ModGFibGUudGFibGVEZWZpbml0aW9uLmFjdGlvbnMpO1xuXG5cdHJldHVybiBhY3Rpb25zV2l0aE92ZXJmbG93UHJvdGVjdGlvblxuXHRcdC5tYXAoKGFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdFx0c3dpdGNoIChhY3Rpb24udHlwZSkge1xuXHRcdFx0XHRjYXNlIEFjdGlvblR5cGUuU3RhbmRhcmQ6XG5cdFx0XHRcdFx0cmV0dXJuIGdldFN0YW5kYXJkQWN0aW9uKGFjdGlvbiBhcyBTdGFuZGFyZEFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciwgY29sbGVjdGlvbkVudGl0eSk7XG5cdFx0XHRcdGNhc2UgQWN0aW9uVHlwZS5Db3B5OlxuXHRcdFx0XHRcdHJldHVybiBnZXRDb3B5QWN0aW9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0XHRcdGNhc2UgQWN0aW9uVHlwZS5TZXBhcmF0b3I6XG5cdFx0XHRcdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PFRvb2xiYXJTZXBhcmF0b3I+XG5cdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHQ8L1Rvb2xiYXJTZXBhcmF0b3I+XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHJldHVybiBnZXRBY3Rpb24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uICE9PSB1bmRlZmluZWQpIGFzIChBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCBBY3Rpb25zUGxhY2Vob2xkZXIpW107XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciBCYXNpY1NlYXJjaC5cbiAqIEBwYXJhbSB1c2VCYXNpY1NlYXJjaFxuICogQHBhcmFtIGZpbHRlckJhcklkXG4gKiBAcGFyYW0gX2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZFxuICogQHBhcmFtIGlzU2VhcmNoYWJsZVxuICogQHJldHVybnMgVGhlIGNvbnRyb2wgb2YgdGhlIEJhc2ljU2VhcmNoXG4gKi9cbmZ1bmN0aW9uIGdldEJhc2ljU2VhcmNoKFxuXHR1c2VCYXNpY1NlYXJjaDogYm9vbGVhbixcblx0ZmlsdGVyQmFySWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0X2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZDogYm9vbGVhbixcblx0aXNTZWFyY2hhYmxlOiBib29sZWFuXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKHVzZUJhc2ljU2VhcmNoKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbZmlsdGVyQmFySWQsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGxhYmVsPVwie3NhcC5mZS5pMThuPk1fQkFTSUNfU0VBUkNIfVwiXG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGFjdGlvbjogPEJhc2ljU2VhcmNoTWFjcm8gaWQ9e2ZpbHRlckJhcklkfSB1c2VEcmFmdEVkaXRTdGF0ZT17X2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZH0gdmlzaWJsZT17aXNTZWFyY2hhYmxlfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRhYmxlIGZ1bGxzY3JlZW4gYnV0dG9uLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIG9mIHRoZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0RnVsbFNjcmVlbih0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMpOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZUZ1bGxTY3JlZW4pIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiU3RhbmRhcmRBY3Rpb25cIiwgXCJGdWxsU2NyZWVuXCIsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGxhYmVsPVwie3NhcC5mZS5pMThuPk1fRlVMTF9TQ1JFRU59XCJcblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiA8VGFibGVGdWxsU2NyZWVuQnV0dG9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlN0YW5kYXJkQWN0aW9uXCIsIFwiRnVsbFNjcmVlblwiXSl9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgWE1MIHN0cmluZyBmb3IgdGhlIEN1dCBCdXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmQgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgQ3V0IEJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRDdXRCdXR0b24oYWN0aW9uOiBTdGFuZGFyZEFjdGlvbiwgdGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkN1dFwiLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfSBkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCI+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDdXRcIl0pfVxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DVVR9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDdXR8cHJlc3NcIlxuXHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ3V0XCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ1VUfVwiXG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkN1dDo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciB0aGUgQ29weSBidXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmRBY3Rpb24uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSBUYWJsZSBidWlsZGluZyBibG9jay5cbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEN1dCBidXR0b24uXG4gKi9cbmZ1bmN0aW9uIGdldENvcHlCdXR0b24oYWN0aW9uOiBTdGFuZGFyZEFjdGlvbiwgdGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkNvcHlcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ29weVwiXSl9XG5cdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPUFl9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDb3B5fHByZXNzXCJcblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkNvcHlcIiwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DT1BZfVwiXG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkNvcHk6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRNb3ZlVXBEb3duQnV0dG9uKGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sIHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBmb3JNb3ZlVXAgPSBhY3Rpb24ua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZVVwO1xuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0dGV4dD17Zm9yTW92ZVVwID8gXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX1VQfVwiIDogXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX0RPV059XCJ9XG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9e2Zvck1vdmVVcCA/IFwiY21kOlRhYmxlTW92ZUVsZW1lbnRVcHxwcmVzc1wiIDogXCJjbWQ6VGFibGVNb3ZlRWxlbWVudERvd258cHJlc3NcIn1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17Zm9yTW92ZVVwID8gXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX1VQfVwiIDogXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9NT1ZFX0RPV059XCJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtmb3JNb3ZlVXAgPyBcImNtZDpUYWJsZU1vdmVFbGVtZW50VXA6OkNvbnRleHRNZW51fHByZXNzXCIgOiBcImNtZDpUYWJsZU1vdmVFbGVtZW50RG93bjo6Q29udGV4dE1lbnV8cHJlc3NcIn1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBQYXN0ZSBCdXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBQYXN0ZSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgUGFzdGUgQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldFBhc3RlQnV0dG9uKFxuXHRhY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24gaWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiUGFzdGVcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlBhc3RlXCJdKX1cblx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9QQVNURX1cIlxuXHRcdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6UGFzdGV8cHJlc3NcIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGZvciBDb250ZXh0IE1lbnVcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlBhc3RlXCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9QQVNURX1cIlxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOlBhc3RlOjpDb250ZXh0TWVudXxwcmVzc1wiXG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFhNTCBzdHJpbmcgZm9yIGFjdGlvbnMuXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFjdGlvbnNUZW1wbGF0ZShcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBDb250cm9sW10ge1xuXHRjb25zdCBfY29sbGVjdGlvbklzRHJhZnRFbmFibGVkID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoY29sbGVjdGlvbkVudGl0eSkgfHwgTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29sbGVjdGlvbkVudGl0eSk7XG5cdGxldCBzZWFyY2hhYmxlOiBib29sZWFuO1xuXHRpZiAodGFibGUuaXNTZWFyY2hhYmxlID09PSBmYWxzZSkge1xuXHRcdHNlYXJjaGFibGUgPSBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRzZWFyY2hhYmxlID0gdGFibGUudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uc2VhcmNoYWJsZTtcblx0fVxuXG5cdGNvbnN0IGFjdGlvbnM6IChBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCBBY3Rpb25zUGxhY2Vob2xkZXIpW10gPSBbXTtcblx0Y29uc3QgYmFzaWNTZWFyY2ggPSBnZXRCYXNpY1NlYXJjaCghIXRhYmxlLnVzZUJhc2ljU2VhcmNoLCB0YWJsZS5maWx0ZXJCYXIsIF9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQsIHNlYXJjaGFibGUpO1xuXHRpZiAoYmFzaWNTZWFyY2gpIHtcblx0XHRhY3Rpb25zLnB1c2goYmFzaWNTZWFyY2gpO1xuXHR9XG5cdGFjdGlvbnMucHVzaCguLi5nZXRBY3Rpb25zKHRhYmxlLCBmYWxzZSwgcGFyYW1ldGVycywgY29sbGVjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25FbnRpdHkpKTtcblx0Y29uc3QgZnVsbFNjcmVlbiA9IGdldEZ1bGxTY3JlZW4odGFibGUpO1xuXHRpZiAoZnVsbFNjcmVlbikge1xuXHRcdGFjdGlvbnMucHVzaChmdWxsU2NyZWVuKTtcblx0fVxuXG5cdHJldHVybiBhY3Rpb25zIGFzIENvbnRyb2xbXTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIGNvbnRleHQgbWVudSBhY3Rpb25zLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVDb250ZXh0TWVudVRlbXBsYXRlKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IE1lbnVJdGVtW10ge1xuXHRjb25zdCB0ZW1wbGF0ZTogTWVudUl0ZW1bXSA9IGdldEFjdGlvbnModGFibGUsIHRydWUsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSBhcyB1bmtub3duIGFzIE1lbnVJdGVtW107XG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0dGVtcGxhdGUucHVzaChnZXRFeHBhbmRlZENvbGxhcHNlQWN0aW9ucyh0YWJsZSwgdHJ1ZSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZXhwYW5kTm9kZSkpO1xuXHRcdHRlbXBsYXRlLnB1c2goZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnModGFibGUsIGZhbHNlLCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5jb2xsYXBzZU5vZGUpKTtcblx0fVxuXHRyZXR1cm4gdGVtcGxhdGU7XG59XG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkQ29sbGFwc2VBY3Rpb25zKHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZXhwYW5kOiBib29sZWFuLCBwcmVzc0hhbmRsZXI/OiAoZTogVUk1RXZlbnQpID0+IHZvaWQpOiBNZW51SXRlbSB7XG5cdGNvbnN0IGVuYWJsZUV4cHJlc3Npb24gPSBleHBhbmRcblx0XHQ/IGFuZChcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pc0V4cGFuZGFibGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpXG5cdFx0ICApXG5cdFx0OiBhbmQoXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaXNDb2xsYXBzYWJsZVwiLCBcImludGVybmFsXCIpLCB0cnVlKSxcblx0XHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSlcblx0XHQgICk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZXhwYW5kID8gXCJFeHBhbmRcIiA6IFwiQ29sbGFwc2VcIiwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHR0ZXh0PXtleHBhbmQgPyBcIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPTlRFWFRNRU5VX0VYUEFORH1cIiA6IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ09OVEVYVE1FTlVfQ09MTEFQU0V9XCJ9XG5cdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0ZW5hYmxlZD17ZW5hYmxlRXhwcmVzc2lvbn1cblx0XHQvPlxuXHQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQSxvQkFBb0JBLENBQzVCQyxTQUE2QixFQUM3QkMsTUFBb0QsRUFDcERDLGNBQTBCLEVBQzFCQyxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJDLGlCQUEwQixFQUMxQkMsVUFBcUMsRUFDZDtJQUN2QixJQUFJLENBQUNKLGNBQWMsQ0FBQ0ssY0FBYyxFQUFFO01BQ25DLE9BQU9DLFNBQVM7SUFDakI7SUFDQSxNQUFNQyxpQkFBaUIsR0FBR0MsWUFBWSxDQUFDQyxnQkFBZ0IsQ0FDdERMLFVBQVUsQ0FBQ00sU0FBUyxDQUFDQyxvQkFBb0IsQ0FBQ1gsY0FBYyxDQUFDSyxjQUFjLEdBQUcsU0FBUyxDQUNwRixDQUFDO0lBQ0QsTUFBTU8sYUFBYSxHQUFHUixVQUFVLENBQUNNLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNKLGlCQUFpQixDQUFFO0lBQ25GLE1BQU1NLDRCQUE0QixHQUFHRCxhQUFhLEdBQy9DRSxrQkFBa0IsQ0FBQ0MsMkJBQTJCLENBQUNILGFBQWEsRUFBRVQsaUJBQWlCLENBQUMsR0FDaEZHLFNBQVM7SUFDWixNQUFNVSxPQUFPLEdBQUdsQixTQUFTLENBQUNtQixZQUFZLEVBQUVELE9BQU87SUFDL0MsTUFBTUUsb0JBQW9CLEdBQUdwQixTQUFTLENBQUNtQixZQUFZLEVBQUVFLFdBQVcsRUFBRUMsSUFBSSxFQUFFQyxrQkFBa0IsRUFBRUMsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLO0lBQy9HLE1BQU1DLE9BQU8sR0FBRyxDQUFDckIsY0FBYyxHQUFHRixjQUFjLENBQUN1QixPQUFPLEdBQUd2QixjQUFjLENBQUN1QixPQUFPLEdBQUcsZUFBZTtJQUNuRyxNQUFNQyxlQUFlLEdBQUd0QixjQUFjLEdBQUcsYUFBYSxHQUFHLFlBQVk7SUFDckUsTUFBTXVCLFlBQVksR0FBR3pCLGNBQWMsQ0FBQ3VCLE9BQU8sR0FDeENqQixTQUFTLEdBQ1RGLFVBQVUsQ0FBQ3NCLGVBQWUsQ0FBQ0MsdUNBQXVDLENBQUM3QixTQUFTLEVBQUVFLGNBQWMsRUFBRUQsTUFBTSxFQUFFRyxjQUFjLENBQUM7SUFDeEgsTUFBTTBCLFlBQVksR0FBRzVCLGNBQWMsQ0FBQ3VCLE9BQU8sR0FBRyxPQUFPQSxPQUFPLFFBQVEsR0FBR2pCLFNBQVM7SUFFaEYsSUFBSXVCLE9BQTRELEdBQy9EN0IsY0FBYyxDQUFDNkIsT0FBTyxLQUFLdkIsU0FBUyxHQUNqQ04sY0FBYyxDQUFDNkIsT0FBTyxHQUN0QkMsV0FBVyxDQUFDQywyQkFBMkIsQ0FDdkM5QixLQUFLLENBQUMrQixlQUFlLEVBQ3JCbEMsU0FBUyxDQUFDbUMsTUFBTSxFQUNoQixDQUFDLENBQUNqQixPQUFPLEVBQ1RKLGFBQWEsQ0FBQ3NCLFNBQVMsQ0FBQyxDQUFDLEVBQ3pCbEMsY0FBYyxDQUFDbUMsY0FBYyxFQUM3QnRCLDRCQUE0QixFQUFFdUIsZ0JBQWdCLEVBQzlDbEMsY0FDQSxDQUFDO0lBRUwsSUFBSUQsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNDLHVCQUF1QixFQUFFQyxzQkFBc0IsSUFBSSxDQUFDLENBQUN2QixPQUFPLEVBQUU7TUFDL0ZhLE9BQU8sR0FBR1csaUJBQWlCLENBQUNDLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxvQkFBb0IsRUFBRUMsb0JBQW9CLENBQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekY7SUFDQSxJQUFJYixPQUFPLEtBQUssSUFBSSxJQUFJRSxvQkFBb0IsRUFBRTtNQUM3QyxNQUFNMkIsTUFBTSxHQUFHQyxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRS9DLGNBQWMsQ0FBQ2dELEdBQUcsRUFBRWpELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRXhCLGVBQWUsRUFBRTFCLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO01BQzNILE9BQ0NtRCxJQUFBLENBQUNDLFFBQVE7UUFDUkMsSUFBSSxFQUFFckQsU0FBUyxDQUFDc0QsS0FBTTtRQUN0QkMsRUFBRSxFQUFFUixNQUFPO1FBQ1hTLEtBQUssRUFBRTdCLFlBQWE7UUFDcEIsZUFBYUcsWUFBYTtRQUMxQkMsT0FBTyxFQUFFQSxPQUFRO1FBQ2pCMEIsT0FBTyxFQUFFdkQsY0FBYyxDQUFDdUQsT0FBUTtRQUFBQyxRQUFBLEVBRS9CO1VBQ0FDLFVBQVUsRUFBRSxDQUFDQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUViLE1BQU0sQ0FBQztRQUNsRDtNQUFDLENBQ1EsQ0FBQztJQUViLENBQUMsTUFBTTtNQUNOLE9BQU92QyxTQUFTO0lBQ2pCO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNxRCxtQ0FBbUNBLENBQzNDN0QsU0FBNEMsRUFDNUNFLGNBQTBCLEVBQzFCQyxLQUEyQixFQUtoQjtJQUFBLElBSlhDLGNBQWMsR0FBQTBELFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF0RCxTQUFBLEdBQUFzRCxTQUFBLE1BQUcsS0FBSztJQUFBLElBQ3RCekQsaUJBQTBCLEdBQUF5RCxTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBdEQsU0FBQTtJQUFBLElBQzFCUCxNQUFvRCxHQUFBNkQsU0FBQSxDQUFBQyxNQUFBLE9BQUFELFNBQUEsTUFBQXRELFNBQUE7SUFBQSxJQUNwRG9CLGVBQTBDLEdBQUFrQyxTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBdEQsU0FBQTtJQUUxQyxNQUFNbUIsWUFBWSxHQUFHekIsY0FBYyxDQUFDdUIsT0FBTyxHQUN4Q2pCLFNBQVMsR0FDVG9CLGVBQWUsQ0FBQ29DLDhCQUE4QixDQUFDOUQsY0FBYyxFQUFFRSxjQUFjLENBQUM7SUFDakYsTUFBTTBCLFlBQVksR0FBRzVCLGNBQWMsQ0FBQ3VCLE9BQU8sR0FBRyxPQUFPdkIsY0FBYyxDQUFDdUIsT0FBTyxRQUFRLEdBQUdqQixTQUFTO0lBRS9GLE1BQU11QixPQUFPLEdBQ1o3QixjQUFjLENBQUM2QixPQUFPLEtBQUt2QixTQUFTLEdBQ2pDTixjQUFjLENBQUM2QixPQUFPLEdBQ3RCQyxXQUFXLENBQUNpQyx3QkFBd0IsQ0FDcEM7TUFDQ0MsVUFBVSxFQUFFN0QsaUJBQWlCO01BQzdCNkIsZUFBZSxFQUFFL0IsS0FBSyxDQUFDK0I7SUFDeEIsQ0FBQyxFQUNEbEMsU0FBUyxFQUNUQSxTQUFTLENBQUNtRSxlQUFlLEVBQ3pCbkUsU0FBUyxDQUFDb0UsbUJBQW1CLEVBQzdCaEUsY0FDQSxDQUFDO0lBQ0wsTUFBTW1ELEVBQUUsR0FBR25ELGNBQWMsR0FDdEI0QyxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRS9DLGNBQWMsQ0FBQ2dELEdBQUcsRUFBRWpELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRWxELFNBQVMsRUFBRSwrQkFBK0IsRUFBRSxhQUFhLENBQUMsQ0FBQyxHQUN0SGdELFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFL0MsY0FBYyxDQUFDZ0QsR0FBRyxFQUFFakQsTUFBTSxDQUFDaUQsR0FBRyxFQUFFbEQsU0FBUyxFQUFFLCtCQUErQixDQUFDLENBQUM7SUFDMUcsT0FDQ21ELElBQUEsQ0FBQ0MsUUFBUTtNQUNSQyxJQUFJLEVBQUVyRCxTQUFTLENBQUNzRCxLQUFNO01BQ3RCQyxFQUFFLEVBQUVBLEVBQUc7TUFDUEMsS0FBSyxFQUFFN0IsWUFBYTtNQUNwQixlQUFhRyxZQUFhO01BQzFCQyxPQUFPLEVBQUVBLE9BQVE7TUFDakIwQixPQUFPLEVBQUV2RCxjQUFjLENBQUN1RCxPQUFRO01BQUFDLFFBQUEsRUFFL0I7UUFDQUMsVUFBVSxFQUFFLENBQ1gsQ0FBQzNELFNBQVMsQ0FBQ21FLGVBQWUsR0FDdkJQLGdCQUFnQixDQUFDLFNBQVMsRUFBRTtVQUFFUyxjQUFjLEVBQUVyRSxTQUFTLENBQUNzRSxjQUFjO1VBQUVyRSxNQUFNLEVBQUVELFNBQVMsQ0FBQ21DO1FBQU8sQ0FBQyxDQUFDLEdBQ25HM0IsU0FBUyxFQUNab0QsZ0JBQWdCLENBQUMsVUFBVSxFQUFFTCxFQUFFLENBQUM7TUFFbEM7SUFBQyxDQUNRLENBQUM7RUFFYjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNnQixXQUFXQSxDQUNuQnRFLE1BQW9ELEVBQ3BEQyxjQUEwQixFQUMxQkMsS0FBMkIsRUFDM0JDLGNBQXVCLEVBQ3ZCQyxpQkFBMEIsRUFDMUJDLFVBQXFDLEVBQ2Q7SUFDdkIsTUFBTU4sU0FBUyxHQUFHRSxjQUFjLENBQUNLLGNBQWMsR0FDM0NELFVBQVUsQ0FBQ2tFLGlCQUFpQixDQUFDQyxXQUFXLENBQUN2RSxjQUFjLENBQUNLLGNBQWMsQ0FBQyxDQUFDbUUsTUFBTSxHQUMvRWxFLFNBQVM7SUFFWixRQUFRUixTQUFTLElBQUlFLGNBQWMsQ0FBQ3lFLElBQUk7TUFDdkMsS0FBSyxXQUFXO1FBQ2YsSUFBSUMsb0JBQW9CLENBQUM1RSxTQUFTLENBQUMsRUFBRTtVQUNwQyxJQUNDLENBQUNJLGNBQWMsSUFDZEEsY0FBYyxJQUFJNEIsV0FBVyxDQUFDNkMsMEJBQTBCLENBQUMzRSxjQUFjLEVBQUVDLEtBQUssQ0FBQzJFLGlCQUFpQixDQUFFLEVBQ2xHO1lBQ0QsT0FBTy9FLG9CQUFvQixDQUFDQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsY0FBYyxFQUFFQyxLQUFLLEVBQUVDLGNBQWMsRUFBRUMsaUJBQWlCLEVBQUVDLFVBQVUsQ0FBQztVQUNySDtRQUNEO1FBQ0E7TUFDRCxLQUFLLGVBQWU7UUFDbkIsSUFDQ3lFLG1DQUFtQyxDQUFDL0UsU0FBVSxDQUFDLEtBQzlDLENBQUNJLGNBQWMsSUFBS0EsY0FBYyxJQUFJNEIsV0FBVyxDQUFDNkMsMEJBQTBCLENBQUMzRSxjQUFjLEVBQUVDLEtBQUssQ0FBQzJFLGlCQUFpQixDQUFFLENBQUMsRUFDdkg7VUFDRCxPQUFPakIsbUNBQW1DLENBQ3pDN0QsU0FBUyxFQUNURSxjQUFjLEVBQ2RDLEtBQUssRUFDTEMsY0FBYyxFQUNkQyxpQkFBaUIsRUFDakJKLE1BQU0sRUFDTkssVUFBVSxDQUFDc0IsZUFDWixDQUFDO1FBQ0Y7UUFDQTtNQUNEO0lBQ0Q7SUFFQSxNQUFNSCxPQUFPLEdBQUcsQ0FBQ3JCLGNBQWMsR0FBR0YsY0FBYyxDQUFDdUIsT0FBTyxHQUFHdkIsY0FBYyxDQUFDdUIsT0FBTyxHQUFHLGVBQWU7SUFDbkcsTUFBTUUsWUFBWSxHQUFHekIsY0FBYyxDQUFDdUIsT0FBTyxHQUN4Q2pCLFNBQVMsR0FDVEYsVUFBVSxDQUFDc0IsZUFBZSxDQUFDb0QsNkJBQTZCLENBQUM5RSxjQUFjLEVBQWtCRSxjQUFjLENBQUM7SUFDM0csTUFBTTBCLFlBQVksR0FBRzVCLGNBQWMsQ0FBQ3VCLE9BQU8sR0FBRyxPQUFPQSxPQUFPLFFBQVEsR0FBR2pCLFNBQVM7SUFDaEYsSUFBSXVCLE9BQU8sR0FBRyxDQUFDM0IsY0FBYyxHQUFHRixjQUFjLENBQUM2QixPQUFPLEdBQUk3QixjQUFjLENBQWtCK0UscUJBQXFCO0lBQy9HLElBQ0UvRSxjQUFjLENBQWtCZ0YsaUJBQWlCLElBQ2xEL0UsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNDLHVCQUF1QixFQUFFQyxzQkFBc0IsRUFDNUU7TUFDRFYsT0FBTyxHQUFHVyxpQkFBaUIsQ0FBQ0MsR0FBRyxDQUFDRyxvQkFBb0IsQ0FBQ2YsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFYSxFQUFFLENBQUNDLG9CQUFvQixDQUFDLENBQUM7SUFDL0Y7SUFDQSxNQUFNbkIsZUFBZSxHQUFHdEIsY0FBYyxHQUFHLGFBQWEsR0FBRyxZQUFZO0lBQ3JFLE1BQU0yQyxNQUFNLEdBQUdDLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFL0MsY0FBYyxDQUFDZ0QsR0FBRyxFQUFFeEIsZUFBZSxFQUFFekIsTUFBTSxDQUFDaUQsR0FBRyxFQUFFbEQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2xILE9BQ0NtRCxJQUFBLENBQUNDLFFBQVE7TUFDUixnQkFBYSx3Q0FBd0M7TUFDckRDLElBQUksRUFBRW5ELGNBQWMsRUFBRW1ELElBQUs7TUFDM0JFLEVBQUUsRUFBRVIsTUFBTztNQUNYUyxLQUFLLEVBQUU3QixZQUFhO01BQ3BCLGVBQWFHLFlBQWE7TUFDMUIyQixPQUFPLEVBQUV2RCxjQUFjLENBQUN1RCxPQUFRO01BQ2hDMUIsT0FBTyxFQUFFQSxPQUFRO01BQUEyQixRQUFBLEVBRWhCO1FBQ0FDLFVBQVUsRUFBRSxDQUFDQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUViLE1BQU0sQ0FBQztNQUNsRDtJQUFDLENBQ1EsQ0FBQztFQUViOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU29DLDJCQUEyQkEsQ0FDbkNuRixTQUE2QixFQUM3QkMsTUFBb0QsRUFDcERFLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QkMsaUJBQTBCLEVBQzFCQyxVQUFxQyxFQUNqQjtJQUNwQixNQUFNOEUsc0JBQXNCLEdBQUc5RSxVQUFVLENBQUNNLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNaLE1BQU0sQ0FBQ00sY0FBYyxHQUFHLFNBQVMsQ0FBRTtJQUM1RyxNQUFNRSxpQkFBaUIsR0FBR0MsWUFBWSxDQUFDQyxnQkFBZ0IsQ0FBQ3lFLHNCQUFzQixDQUFDO0lBQy9FLE1BQU10RSxhQUFhLEdBQUdSLFVBQVUsQ0FBQ00sU0FBUyxDQUFDQyxvQkFBb0IsQ0FBQ0osaUJBQWlCLENBQUU7SUFDbkYsTUFBTU0sNEJBQTRCLEdBQUdELGFBQWEsR0FDL0NFLGtCQUFrQixDQUFDQywyQkFBMkIsQ0FBU0gsYUFBYSxFQUFFVCxpQkFBaUIsQ0FBQyxHQUN4RkcsU0FBUztJQUNaLE1BQU1VLE9BQU8sR0FBR2xCLFNBQVMsQ0FBQ21CLFlBQVksRUFBRUQsT0FBTztJQUMvQyxNQUFNTyxPQUFPLEdBQUcsQ0FBQ3JCLGNBQWMsR0FBR0gsTUFBTSxDQUFDd0IsT0FBTyxHQUFHeEIsTUFBTSxDQUFDd0IsT0FBTyxHQUFHLGVBQWU7SUFDbkYsTUFBTUUsWUFBWSxHQUFHMUIsTUFBTSxDQUFDd0IsT0FBTyxHQUNoQ2pCLFNBQVMsR0FDVEYsVUFBVSxDQUFDc0IsZUFBZSxDQUFDQyx1Q0FBdUMsQ0FBQzdCLFNBQVMsRUFBRUMsTUFBTSxFQUFFTyxTQUFTLEVBQUVKLGNBQWMsQ0FBQztJQUNuSCxNQUFNMEIsWUFBWSxHQUFHN0IsTUFBTSxDQUFDd0IsT0FBTyxHQUFHLE9BQU9BLE9BQU8sUUFBUSxHQUFHakIsU0FBUztJQUN4RSxNQUFNdUIsT0FBTyxHQUNaOUIsTUFBTSxDQUFDOEIsT0FBTyxLQUFLdkIsU0FBUyxHQUN6QlAsTUFBTSxDQUFDOEIsT0FBTyxHQUNkQyxXQUFXLENBQUNDLDJCQUEyQixDQUN2QzlCLEtBQUssQ0FBQytCLGVBQWUsRUFDckJsQyxTQUFTLENBQUNtQyxNQUFNLEVBQ2hCLENBQUMsQ0FBQ2pCLE9BQU8sRUFDVEosYUFBYSxDQUFDc0IsU0FBUyxDQUFDLENBQUMsRUFDekJuQyxNQUFNLENBQUNvQyxjQUFjLEVBQ3JCdEIsNEJBQTRCLEVBQUV1QixnQkFBZ0IsRUFDOUNsQyxjQUNBLENBQUM7SUFDTCxNQUFNaUYsSUFBSSxHQUFHcEYsTUFBTSxDQUFDcUYsYUFBYSxLQUFLLElBQUksR0FBR0MsTUFBTSxHQUFHL0UsU0FBUztJQUMvRCxJQUFJLENBQUNKLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE1BQU1vRixlQUFlLEdBQUd4QyxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWpELFNBQVMsQ0FBQyxDQUFDO01BQzlELE9BQ0NtRCxJQUFBLENBQUNzQyxNQUFNO1FBQ05sQyxFQUFFLEVBQUVpQyxlQUFnQjtRQUNwQm5DLElBQUksRUFBRXJELFNBQVMsQ0FBQ3NELEtBQU07UUFDdEIrQixJQUFJLEVBQUVBLElBQUs7UUFDWEssWUFBWSxFQUFFQyxrQkFBa0IsQ0FBQzNGLFNBQVMsQ0FBRTtRQUM1Q3dELEtBQUssRUFBRTdCLFlBQWE7UUFDcEIsZUFBYUcsWUFBYTtRQUMxQjZDLElBQUksRUFBRWlCLFVBQVUsQ0FBQ0MsV0FBWTtRQUM3QjlELE9BQU8sRUFBRUEsT0FBUTtRQUNqQjBCLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQVE7UUFDeEJxQyxlQUFlLEVBQUU3RixNQUFNLENBQUNxRixhQUFhLEtBQUssSUFBSSxHQUFHLENBQUMsd0JBQXdCLENBQUMsR0FBRzlFLFNBQVU7UUFBQWtELFFBQUEsRUFFdkY7VUFDQUMsVUFBVSxFQUFFLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTRCLGVBQWUsQ0FBQyxDQUFDO1VBQzNETyxVQUFVLEVBQUU1QyxJQUFBLENBQUM2Qyx5QkFBeUI7WUFBQ0MsUUFBUSxFQUFFaEcsTUFBTSxDQUFDZ0csUUFBUztZQUFDQyxLQUFLLEVBQUVqRyxNQUFNLENBQUNpRztVQUFNLENBQTRCO1FBQ25IO01BQUMsQ0FDTSxDQUFDO0lBRVgsQ0FBQyxNQUFNO01BQ047TUFDQSxNQUFNQyx3QkFBd0IsR0FBR25ELFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFakQsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO01BQ3RGLE9BQ0NtRCxJQUFBLENBQUNDLFFBQVE7UUFDUkcsRUFBRSxFQUFFNEMsd0JBQXlCO1FBQzdCOUMsSUFBSSxFQUFFckQsU0FBUyxDQUFDc0QsS0FBTTtRQUN0QitCLElBQUksRUFBRUEsSUFBSztRQUNYN0IsS0FBSyxFQUFFN0IsWUFBYTtRQUNwQixlQUFhRyxZQUFhO1FBQzFCQyxPQUFPLEVBQUVBLE9BQVE7UUFBQTJCLFFBQUEsRUFFaEI7VUFDQUMsVUFBVSxFQUFFLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRXVDLHdCQUF3QixDQUFDO1FBQ3BFO01BQUMsQ0FDUSxDQUFDO0lBRWI7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLDBDQUEwQ0EsQ0FDbERwRyxTQUE0QyxFQUM1Q0MsTUFBb0QsRUFDcERFLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QkMsaUJBQTBCLEVBQzFCdUIsZUFBMEMsRUFDdEI7SUFDcEIsTUFBTUgsT0FBTyxHQUFHLENBQUNyQixjQUFjLEdBQUdILE1BQU0sQ0FBQ3dCLE9BQU8sR0FBR3hCLE1BQU0sQ0FBQ3dCLE9BQU8sR0FBRyxlQUFlO0lBQ25GLE1BQU1FLFlBQVksR0FBRzFCLE1BQU0sQ0FBQ3dCLE9BQU8sR0FBR2pCLFNBQVMsR0FBR29CLGVBQWUsQ0FBQ29DLDhCQUE4QixDQUFDL0QsTUFBTSxFQUFFRyxjQUFjLENBQUM7SUFDeEgsTUFBTTBCLFlBQVksR0FBRzdCLE1BQU0sQ0FBQ3dCLE9BQU8sR0FBRyxPQUFPQSxPQUFPLFFBQVEsR0FBR2pCLFNBQVM7SUFDeEUsTUFBTXVCLE9BQU8sR0FDWjlCLE1BQU0sQ0FBQzhCLE9BQU8sS0FBS3ZCLFNBQVMsR0FDekJQLE1BQU0sQ0FBQzhCLE9BQU8sR0FDZEMsV0FBVyxDQUFDaUMsd0JBQXdCLENBQ3BDO01BQ0NDLFVBQVUsRUFBRTdELGlCQUFpQjtNQUM3QjZCLGVBQWUsRUFBRS9CLEtBQUssQ0FBQytCO0lBQ3hCLENBQUMsRUFDRGxDLFNBQVMsRUFDVEEsU0FBUyxDQUFDbUUsZUFBZSxFQUN6Qm5FLFNBQVMsQ0FBQ29FLG1CQUFtQixFQUM3QmhFLGNBQ0EsQ0FBQztJQUNMLE1BQU1pRyxPQUFPLEdBQUcsQ0FBQ3JHLFNBQVMsQ0FBQ21FLGVBQWUsR0FBRztNQUFFRSxjQUFjLEVBQUVyRSxTQUFTLENBQUNzRSxjQUFjO01BQUVyRSxNQUFNLEVBQUVELFNBQVMsQ0FBQ21DO0lBQU8sQ0FBQyxHQUFHM0IsU0FBUztJQUMvSCxJQUFJLENBQUNKLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE1BQU1vRixlQUFlLEdBQUd4QyxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWpELFNBQVMsQ0FBQyxDQUFDO01BQzlELE9BQ0NtRCxJQUFBLENBQUNzQyxNQUFNO1FBQ05sQyxFQUFFLEVBQUVpQyxlQUFnQjtRQUNwQm5DLElBQUksRUFBRXJELFNBQVMsQ0FBQ3NELEtBQU07UUFDdEJFLEtBQUssRUFBRTdCLFlBQWE7UUFDcEIsZUFBYUcsWUFBYTtRQUMxQjZDLElBQUksRUFBRWlCLFVBQVUsQ0FBQ0MsV0FBWTtRQUM3QjlELE9BQU8sRUFBRUEsT0FBUTtRQUNqQjBCLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQVE7UUFBQUMsUUFBQSxFQUV2QjtVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsU0FBUyxFQUFFeUMsT0FBTyxDQUFDLEVBQUV6QyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU0QixlQUFlLENBQUM7UUFDakc7TUFBQyxDQUNNLENBQUM7SUFFWCxDQUFDLE1BQU07TUFDTjtNQUNBLE1BQU1XLHdCQUF3QixHQUFHbkQsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVqRCxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDdEYsT0FDQ21ELElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUU0Qyx3QkFBeUI7UUFDN0I5QyxJQUFJLEVBQUVyRCxTQUFTLENBQUNzRCxLQUFNO1FBQ3RCRSxLQUFLLEVBQUU3QixZQUFhO1FBQ3BCLGVBQWFHLFlBQWE7UUFDMUJDLE9BQU8sRUFBRUEsT0FBUTtRQUFBMkIsUUFBQSxFQUVoQjtVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsU0FBUyxFQUFFeUMsT0FBTyxDQUFDLEVBQUV6QyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUV1Qyx3QkFBd0IsQ0FBQztRQUMxRztNQUFDLENBQ1EsQ0FBQztJQUViO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0csa0JBQWtCQSxDQUMxQnJHLE1BQW9ELEVBQ3BERSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJDLGlCQUEwQixFQUMxQkMsVUFBcUMsRUFDUTtJQUM3QyxNQUFNTixTQUFTLEdBQUdDLE1BQU0sQ0FBQ00sY0FBYyxHQUNuQ0QsVUFBVSxDQUFDa0UsaUJBQWlCLENBQUNDLFdBQVcsQ0FBQ3hFLE1BQU0sQ0FBQ00sY0FBYyxDQUFDLENBQUNtRSxNQUFNLEdBQ3ZFbEUsU0FBUztJQUNaLElBQUkrRixRQUF1QztJQUMzQyxJQUFJLENBQUN2RyxTQUFTLEVBQUU7TUFDZixPQUFPUSxTQUFTO0lBQ2pCO0lBQ0EsUUFBUVAsTUFBTSxDQUFDMEUsSUFBSTtNQUNsQixLQUFLLFdBQVc7UUFDZixJQUFJQyxvQkFBb0IsQ0FBQzVFLFNBQVMsQ0FBQyxFQUFFO1VBQ3BDLE1BQU1rQixPQUFPLEdBQUdsQixTQUFTLENBQUNtQixZQUFZLEVBQUVELE9BQU87VUFDL0MsSUFBSSxDQUFDLENBQUNBLE9BQU8sSUFBSWYsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNDLHVCQUF1QixFQUFFQyxzQkFBc0IsRUFBRTtZQUMvRnhDLE1BQU0sR0FBR3VHLFNBQVMsQ0FBQ3ZHLE1BQU0sQ0FBQztZQUMxQkEsTUFBTSxDQUFDOEIsT0FBTyxHQUFHVyxpQkFBaUIsQ0FBQ0MsR0FBRyxDQUFDRyxvQkFBb0IsQ0FBQzdDLE1BQU0sQ0FBQzhCLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRWEsRUFBRSxDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDO1VBQzdHO1VBQ0EsTUFBTXpCLG9CQUFvQixHQUFHcEIsU0FBUyxDQUFDbUIsWUFBWSxFQUFFRSxXQUFXLEVBQUVDLElBQUksRUFBRUMsa0JBQWtCLEVBQUVDLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSztVQUMvRztVQUNBLElBQUksQ0FBQ3BCLGNBQWMsSUFBSTRCLFdBQVcsQ0FBQzZDLDBCQUEwQixDQUFDNUUsTUFBTSxFQUFFRSxLQUFLLENBQUMyRSxpQkFBaUIsQ0FBQyxFQUFFO1lBQy9GLElBQUk1RCxPQUFPLEtBQUssSUFBSSxJQUFJRSxvQkFBb0IsRUFBRTtjQUM3Q21GLFFBQVEsR0FBR3BCLDJCQUEyQixDQUFDbkYsU0FBUyxFQUFFQyxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxFQUFFQyxpQkFBaUIsRUFBRUMsVUFBVSxDQUFDO1lBQ2hIO1VBQ0Q7UUFDRDtRQUNBO01BQ0QsS0FBSyxlQUFlO1FBQ25CLElBQ0N5RSxtQ0FBbUMsQ0FBQy9FLFNBQVMsQ0FBQyxLQUM3QyxDQUFDSSxjQUFjLElBQUk0QixXQUFXLENBQUM2QywwQkFBMEIsQ0FBQzVFLE1BQU0sRUFBRUUsS0FBSyxDQUFDMkUsaUJBQWlCLENBQUMsQ0FBQyxFQUMzRjtVQUNEeUIsUUFBUSxHQUFHSCwwQ0FBMEMsQ0FDcERwRyxTQUFTLEVBQ1RDLE1BQU0sRUFDTkUsS0FBSyxFQUNMQyxjQUFjLEVBQ2RDLGlCQUFpQixFQUNqQkMsVUFBVSxDQUFDc0IsZUFDWixDQUFDO1FBQ0Y7UUFDQTtNQUNEO0lBQ0Q7SUFFQSxJQUFJMkUsUUFBUSxLQUFLL0YsU0FBUyxFQUFFO01BQzNCLE9BQU9BLFNBQVM7SUFDakI7SUFFQSxJQUFJLENBQUNKLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE9BQ0MrQyxJQUFBLENBQUNzRCxtQkFBbUI7UUFDbkJsRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDc0QsRUFBRSxFQUFFdkQsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFDN0UsaUJBQWVDLE1BQU0sQ0FBQ3dELE9BQU8sS0FBSyxNQUFNLElBQUl4RCxNQUFNLENBQUN3RCxPQUFPLEtBQUssT0FBTyxHQUFHakQsU0FBUyxHQUFHLDBCQUEyQjtRQUFBa0QsUUFBQSxFQUUvRztVQUNBekQsTUFBTSxFQUFFc0c7UUFDVDtNQUFDLENBQ21CLENBQUM7SUFFeEIsQ0FBQyxNQUFNO01BQ047TUFDQSxPQUFPQSxRQUFRO0lBQ2hCO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTRywwQkFBMEJBLENBQ2xDQyxhQUF1QyxFQUN2Q0MseUJBQTZGLEVBQzdGdEcsVUFBcUMsRUFDbUI7SUFDeEQsSUFBSSxDQUFDcUcsYUFBYSxFQUFFO01BQ25CLE9BQU8sQ0FBQyxDQUFDO0lBQ1Y7SUFFQSxJQUFJO01BQ0gsUUFBUUEsYUFBYSxDQUFDaEMsSUFBSTtRQUN6QixLQUFLLFdBQVc7VUFDZixPQUFPO1lBQ05rQyxPQUFPLEVBQUV2RyxVQUFVLENBQUNzQixlQUFlLENBQUNDLHVDQUF1QyxDQUMxRStFLHlCQUF5QixFQUN6QkQsYUFBYSxFQUNibkcsU0FBUyxFQUNULEtBQ0Q7VUFDRCxDQUFDO1FBRUYsS0FBSyxlQUFlO1VBQ25CLE9BQU87WUFDTnFHLE9BQU8sRUFBRXZHLFVBQVUsQ0FBQ3NCLGVBQWUsQ0FBQ29DLDhCQUE4QixDQUFDMkMsYUFBYSxFQUFFLEtBQUs7VUFDeEYsQ0FBQztRQUVGO1VBQVM7WUFDUixJQUFJQSxhQUFhLENBQUNsRixPQUFPLEVBQUU7Y0FDMUIsT0FBTztnQkFDTkEsT0FBTyxFQUFFLE9BQU9rRixhQUFhLENBQUNsRixPQUFPO2NBQ3RDLENBQUM7WUFDRixDQUFDLE1BQU07Y0FDTixPQUFPO2dCQUNOb0YsT0FBTyxFQUFFdkcsVUFBVSxDQUFDc0IsZUFBZSxDQUFDb0QsNkJBQTZCLENBQUMyQixhQUFhLEVBQUUsS0FBSztjQUN2RixDQUFDO1lBQ0Y7VUFDRDtNQUNEO0lBQ0QsQ0FBQyxDQUFDLE9BQU9HLENBQUMsRUFBRTtNQUNYLE9BQU8sQ0FBQyxDQUFDO0lBQ1Y7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyxhQUFhQSxDQUNyQjlHLE1BQW9ELEVBQ3BERSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJDLGlCQUEwQixFQUMxQkMsVUFBcUMsRUFDUTtJQUM3QyxJQUFLTCxNQUFNLENBQWtCaUYsaUJBQWlCLElBQUkvRSxLQUFLLENBQUMrQixlQUFlLENBQUNLLE9BQU8sQ0FBQ0MsdUJBQXVCLEVBQUVDLHNCQUFzQixFQUFFO01BQ2hJeEMsTUFBTSxHQUFHdUcsU0FBUyxDQUFDdkcsTUFBTSxDQUFDO01BQzFCQSxNQUFNLENBQUM4QixPQUFPLEdBQUdXLGlCQUFpQixDQUFDQyxHQUFHLENBQUNHLG9CQUFvQixDQUFDN0MsTUFBTSxDQUFDOEIsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFYSxFQUFFLENBQUNDLG9CQUFvQixDQUFDLENBQUM7SUFDN0c7SUFDQSxNQUFNd0MsSUFBSSxHQUFHcEYsTUFBTSxDQUFDcUYsYUFBYSxLQUFLLElBQUksR0FBR0MsTUFBTSxHQUFHL0UsU0FBUztJQUMvRCxJQUFJLENBQUNKLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE1BQU11RyxhQUFhLEdBQUkxRyxNQUFNLENBQWtCMEcsYUFBeUM7TUFDeEYsTUFBTUMseUJBQXlCLEdBQUdELGFBQWEsRUFBRXBHLGNBQWMsR0FDNURELFVBQVUsQ0FBQ2tFLGlCQUFpQixDQUFDQyxXQUFXLENBQXlEa0MsYUFBYSxDQUFDcEcsY0FBYyxDQUFDLENBQzdIbUUsTUFBTSxHQUNQbEUsU0FBUztNQUNaLE1BQU13RyxxQkFBcUIsR0FBR04sMEJBQTBCLENBQUNDLGFBQWEsRUFBRUMseUJBQXlCLEVBQUV0RyxVQUFVLENBQUM7TUFDOUcsTUFBTTJHLFNBQVMsR0FBR2hILE1BQU0sQ0FBQ2lILElBQUksRUFDMUJDLE1BQU0sQ0FBRWpILGNBQWMsSUFBSyxPQUFPQSxjQUFjLEtBQUssUUFBUSxDQUFDLENBQy9Ea0gsR0FBRyxDQUFFbEgsY0FBYyxJQUFLO1FBQ3hCLE9BQU9xRSxXQUFXLENBQUN0RSxNQUFNLEVBQUVDLGNBQWMsRUFBRUMsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxVQUFVLENBQUM7TUFDakcsQ0FBQyxDQUFDLENBQ0Q2RyxNQUFNLENBQUVFLElBQUksSUFBS0EsSUFBSSxLQUFLN0csU0FBUyxDQUFDO01BRXRDLElBQUl5RyxTQUFTLEVBQUVsRCxNQUFNLEVBQUU7UUFDdEIsTUFBTXVELE1BQU0sR0FBR3RFLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDc0QsRUFBRSxDQUFDLENBQUM7UUFDckQsT0FDQ0osSUFBQSxDQUFDc0QsbUJBQW1CO1VBQ25CbEQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ3NELEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1VBQ2xFLGlCQUFldEQsTUFBTSxDQUFDd0QsT0FBTyxLQUFLLE1BQU0sSUFBSXhELE1BQU0sQ0FBQ3dELE9BQU8sS0FBSyxPQUFPLEdBQUdqRCxTQUFTLEdBQUcsMEJBQTJCO1VBQUFrRCxRQUFBLEVBRWhIUCxJQUFBLENBQUNvRSxVQUFVO1lBQ1ZsRSxJQUFJLEVBQUVwRCxNQUFNLENBQUNvRCxJQUFLO1lBQ2xCc0IsSUFBSSxFQUFFaUIsVUFBVSxDQUFDQyxXQUFZO1lBQzdCMkIsWUFBWSxFQUFFQyxLQUFLLENBQUNDLElBQUksQ0FBQ0MsV0FBWTtZQUNyQ3BFLEVBQUUsRUFBRStELE1BQU87WUFDWDdELE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQVE7WUFDeEIxQixPQUFPLEVBQUU5QixNQUFNLENBQUM4QixPQUFRO1lBQ3hCNkYsb0JBQW9CLEVBQUUsQ0FBQyxDQUFFM0gsTUFBTSxDQUFxQjBHLGFBQWM7WUFDbEV0QixJQUFJLEVBQUVBLElBQUs7WUFDWHdDLFVBQVUsRUFBRzVILE1BQU0sQ0FBcUIwRyxhQUFhLEdBQUdtQixjQUFjLENBQUNDLEtBQUssR0FBR0QsY0FBYyxDQUFDRSxPQUFRO1lBQ3RHckIsYUFBYSxFQUFFSyxxQkFBcUIsQ0FBQ0gsT0FBUTtZQUM3QyxlQUFhRyxxQkFBcUIsQ0FBQ3ZGLE9BQVE7WUFDM0NxRSxlQUFlLEVBQUU3RixNQUFNLENBQUNxRixhQUFhLEtBQUssSUFBSSxHQUFHLENBQUMsd0JBQXdCLENBQUMsR0FBRzlFLFNBQVU7WUFBQWtELFFBQUEsRUFFdkY7Y0FDQUMsVUFBVSxFQUFFLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTBELE1BQU0sQ0FBQyxDQUFDO2NBQ2xESixJQUFJLEVBQUUvRCxJQUFBLENBQUM4RSxJQUFJO2dCQUFBdkUsUUFBQSxFQUFFdUQ7Y0FBUyxDQUFPLENBQUM7Y0FDOUJsQixVQUFVLEVBQ1Q1QyxJQUFBLENBQUM2Qyx5QkFBeUI7Z0JBQUNDLFFBQVEsRUFBRWhHLE1BQU0sQ0FBQ2dHLFFBQVM7Z0JBQUNDLEtBQUssRUFBRWpHLE1BQU0sQ0FBQ2lHO2NBQU0sQ0FBNEI7WUFFeEc7VUFBQyxDQUNVO1FBQUMsQ0FDTyxDQUFDO01BRXhCLENBQUMsTUFBTTtRQUNOLE9BQU8xRixTQUFTO01BQ2pCO0lBQ0QsQ0FBQyxNQUFNO01BQ047TUFDQSxNQUFNMEgsdUJBQXFDLEdBQUcsRUFBRTtNQUNoRGpJLE1BQU0sQ0FBQ2lILElBQUksRUFBRWlCLE9BQU8sQ0FBRWpJLGNBQWMsSUFBSztRQUN4QyxJQUFJLE9BQU9BLGNBQWMsS0FBSyxRQUFRLElBQUk4QixXQUFXLENBQUM2QywwQkFBMEIsQ0FBQzNFLGNBQWMsRUFBRUMsS0FBSyxDQUFDMkUsaUJBQWlCLENBQUMsRUFBRTtVQUMxSG9ELHVCQUF1QixFQUFFRSxJQUFJLENBQUNsSSxjQUFjLENBQUM7UUFDOUM7TUFDRCxDQUFDLENBQUM7TUFFRixNQUFNK0csU0FBUyxHQUFHaUIsdUJBQXVCLENBQ3ZDZixNQUFNLENBQUVqSCxjQUFjLElBQUssT0FBT0EsY0FBYyxLQUFLLFFBQVEsQ0FBQyxDQUM5RGtILEdBQUcsQ0FBRWxILGNBQWMsSUFBSztRQUN4QixPQUFPcUUsV0FBVyxDQUFDdEUsTUFBTSxFQUFFQyxjQUFjLEVBQUVDLEtBQUssRUFBRUMsY0FBYyxFQUFFQyxpQkFBaUIsRUFBRUMsVUFBVSxDQUFDO01BQ2pHLENBQUMsQ0FBQyxDQUNENkcsTUFBTSxDQUFFRSxJQUFJLElBQUtBLElBQUksS0FBSzdHLFNBQVMsQ0FBQztNQUV0QyxJQUFJeUcsU0FBUyxFQUFFbEQsTUFBTSxFQUFFO1FBQ3RCLE9BQ0NaLElBQUEsQ0FBQ0MsUUFBUTtVQUNSQyxJQUFJLEVBQUVwRCxNQUFNLENBQUNvRCxJQUFLO1VBQ2xCRSxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDc0QsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFFO1VBQzFEeEIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDZ0YscUJBQXNCO1VBQ3RDSSxJQUFJLEVBQUVBLElBQUs7VUFBQTNCLFFBQUEsRUFFVjtZQUNBMkUsS0FBSyxFQUFFcEI7VUFDUjtRQUFDLENBQ1EsQ0FBQztNQUViLENBQUMsTUFBTTtRQUNOLE9BQU96RyxTQUFTO01BQ2pCO0lBQ0Q7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUzhILGdCQUFnQkEsQ0FDeEJySSxNQUFvQixFQUNwQkUsS0FBMkIsRUFDM0JDLGNBQXVCLEVBQ3ZCd0IsZUFBMEMsRUFDRztJQUM3QyxNQUFNSCxPQUFPLEdBQUcsQ0FBQ3JCLGNBQWMsR0FBR0gsTUFBTSxDQUFDd0IsT0FBTyxHQUFHeEIsTUFBTSxDQUFDd0IsT0FBTyxHQUFHLGVBQWU7SUFDbkYsTUFBTUUsWUFBWSxHQUFHMUIsTUFBTSxDQUFDd0IsT0FBTyxHQUFHakIsU0FBUyxHQUFHb0IsZUFBZSxDQUFDb0QsNkJBQTZCLENBQUMvRSxNQUFNLEVBQUVHLGNBQWMsQ0FBQztJQUN2SCxNQUFNMEIsWUFBWSxHQUFHN0IsTUFBTSxDQUFDd0IsT0FBTyxHQUFHLE9BQU9BLE9BQU8sUUFBUSxHQUFHakIsU0FBUztJQUV4RSxJQUFJUCxNQUFNLENBQUNpRixpQkFBaUIsSUFBSS9FLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDQyx1QkFBdUIsRUFBRUMsc0JBQXNCLEVBQUU7TUFDOUd4QyxNQUFNLEdBQUd1RyxTQUFTLENBQUN2RyxNQUFNLENBQUM7TUFDMUJBLE1BQU0sQ0FBQzhCLE9BQU8sR0FBR1csaUJBQWlCLENBQUNDLEdBQUcsQ0FBQ0csb0JBQW9CLENBQUM3QyxNQUFNLENBQUM4QixPQUFPLElBQUksRUFBRSxDQUFDLEVBQUVhLEVBQUUsQ0FBQ0Msb0JBQW9CLENBQUMsQ0FBQztNQUM1RzVDLE1BQU0sQ0FBQ2dGLHFCQUFxQixHQUFHdkMsaUJBQWlCLENBQy9DQyxHQUFHLENBQUNHLG9CQUFvQixDQUFDN0MsTUFBTSxDQUFDZ0YscUJBQXFCLElBQUksRUFBRSxDQUFDLEVBQUVyQyxFQUFFLENBQUNDLG9CQUFvQixDQUN0RixDQUFDO0lBQ0Y7SUFDQSxJQUFJLENBQUN6QyxjQUFjLEVBQUU7TUFDcEI7TUFDQSxPQUNDK0MsSUFBQSxDQUFDc0QsbUJBQW1CO1FBQ25CbEQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ3NELEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1FBQ2xFLGlCQUFldEQsTUFBTSxDQUFDd0QsT0FBTyxLQUFLLE1BQU0sSUFBSXhELE1BQU0sQ0FBQ3dELE9BQU8sS0FBSyxPQUFPLEdBQUdqRCxTQUFTLEdBQUcsMEJBQTJCO1FBQUFrRCxRQUFBLEVBRWhIUCxJQUFBLENBQUNzQyxNQUFNO1VBQ04sZ0JBQWEsd0NBQXdDO1VBQ3JEbEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ3NELEVBQUUsQ0FBQyxDQUFFO1VBQzNDRixJQUFJLEVBQUVwRCxNQUFNLENBQUNvRCxJQUFLO1VBQ2xCRyxLQUFLLEVBQUU3QixZQUFhO1VBQ3BCLGVBQWFHLFlBQWE7VUFDMUI2QyxJQUFJLEVBQUVpQixVQUFVLENBQUNDLFdBQVk7VUFDN0JwQyxPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUFRO1VBQ3hCMUIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDOEIsT0FBUTtVQUN4QnNELElBQUksRUFBRXBGLE1BQU0sQ0FBQ3FGLGFBQWEsS0FBSyxJQUFJLEdBQUdDLE1BQU0sR0FBRy9FLFNBQVU7VUFDekRzRixlQUFlLEVBQUU3RixNQUFNLENBQUNxRixhQUFhLEtBQUssSUFBSSxHQUFHLENBQUMsd0JBQXdCLENBQUMsR0FBRzlFLFNBQVU7VUFBQWtELFFBQUEsRUFFdkY7WUFDQUMsVUFBVSxFQUFFLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRVosUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVoRCxNQUFNLENBQUNzRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEZ3QyxVQUFVLEVBQUU1QyxJQUFBLENBQUM2Qyx5QkFBeUI7Y0FBQ0MsUUFBUSxFQUFFaEcsTUFBTSxDQUFDZ0csUUFBUztjQUFDQyxLQUFLLEVBQUVqRyxNQUFNLENBQUNpRztZQUFNLENBQTRCO1VBQ25IO1FBQUMsQ0FDTTtNQUFDLENBQ1csQ0FBQztJQUV4QixDQUFDLE1BQU0sSUFBSWxFLFdBQVcsQ0FBQzZDLDBCQUEwQixDQUFDNUUsTUFBTSxFQUFFRSxLQUFLLENBQUMyRSxpQkFBaUIsQ0FBQyxFQUFFO01BQ25GLE1BQU1xQix3QkFBd0IsR0FBR25ELFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDc0QsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO01BQ3RGO01BQ0EsT0FDQ0osSUFBQSxDQUFDQyxRQUFRO1FBQ1IsZ0JBQWEsd0NBQXdDO1FBQ3JERyxFQUFFLEVBQUU0Qyx3QkFBeUI7UUFDN0I5QyxJQUFJLEVBQUVwRCxNQUFNLENBQUNvRCxJQUFLO1FBQ2xCRyxLQUFLLEVBQUU3QixZQUFhO1FBQ3BCLGVBQWFHLFlBQWE7UUFDMUJDLE9BQU8sRUFBRTlCLE1BQU0sQ0FBQ2dGLHFCQUFzQjtRQUFBdkIsUUFBQSxFQUVyQztVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFdUMsd0JBQXdCLENBQUM7UUFDcEU7TUFBQyxDQUNRLENBQUM7SUFFYixDQUFDLE1BQU07TUFDTixPQUFPM0YsU0FBUztJQUNqQjtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVMrSCxTQUFTQSxDQUNqQnRJLE1BQWtCLEVBQ2xCRSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJDLGlCQUEwQixFQUMxQkMsVUFBcUMsRUFDUTtJQUM3QyxRQUFRTCxNQUFNLENBQUMwRSxJQUFJO01BQ2xCLEtBQUssU0FBUztRQUNiLElBQUksUUFBUSxJQUFJMUUsTUFBTSxFQUFFO1VBQ3ZCLE9BQU9xSSxnQkFBZ0IsQ0FBQ3JJLE1BQU0sRUFBa0JFLEtBQUssRUFBRUMsY0FBYyxFQUFFRSxVQUFVLENBQUNzQixlQUFlLENBQUM7UUFDbkc7UUFDQTtNQUNELEtBQUssTUFBTTtRQUNWLE9BQU9tRixhQUFhLENBQUM5RyxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxFQUFFQyxpQkFBaUIsRUFBRUMsVUFBVSxDQUFDO01BQ25GO0lBQ0Q7SUFDQSxPQUFPZ0csa0JBQWtCLENBQUNyRyxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxFQUFFQyxpQkFBaUIsRUFBRUMsVUFBVSxDQUFDO0VBQ3hGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNrSSxhQUFhQSxDQUNyQnZJLE1BQWtCLEVBQ2xCRSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJDLGlCQUEwQixFQUMxQkMsVUFBcUMsRUFDSjtJQUNqQyxNQUFNTixTQUFTLEdBQUdDLE1BQU0sQ0FBQ00sY0FBYyxHQUNuQ0QsVUFBVSxDQUFDa0UsaUJBQWlCLENBQUNDLFdBQVcsQ0FBQ3hFLE1BQU0sQ0FBQ00sY0FBYyxDQUFDLENBQUNtRSxNQUFNLEdBQ3ZFbEUsU0FBUztJQUNaLE1BQU1DLGlCQUFpQixHQUFHQyxZQUFZLENBQUNDLGdCQUFnQixDQUFDTCxVQUFVLENBQUNNLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNaLE1BQU0sQ0FBQ00sY0FBYyxHQUFHLFNBQVMsQ0FBRSxDQUFDO0lBQ3RJLE1BQU1rSSxrQkFBa0IsR0FBR3pJLFNBQVMsRUFBRW1CLFlBQVksRUFBRUUsV0FBVyxFQUFFQyxJQUFJLEVBQUVDLGtCQUFrQixLQUFLZixTQUFTO0lBQ3ZHLE1BQU1NLGFBQWEsR0FBR1IsVUFBVSxDQUFDTSxTQUFTLENBQUNDLG9CQUFvQixDQUFDSixpQkFBaUIsQ0FBRTtJQUNuRixNQUFNTSw0QkFBNEIsR0FBR0QsYUFBYSxHQUMvQ0Usa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDSCxhQUFhLEVBQUVULGlCQUFpQixDQUFDLEdBQ2hGRyxTQUFTO0lBQ1osTUFBTVUsT0FBTyxHQUFHbEIsU0FBUyxFQUFFbUIsWUFBWSxFQUFFRCxPQUFPO0lBQ2hELE1BQU1zQyxLQUFLLEdBQUd4RCxTQUFTLEdBQ3BCTSxVQUFVLENBQUNzQixlQUFlLENBQUNDLHVDQUF1QyxDQUFDN0IsU0FBUyxFQUFFQyxNQUFNLEVBQUVPLFNBQVMsRUFBRUosY0FBYyxDQUFDLEdBQ2hISSxTQUFTO0lBRVosSUFBSXVCLE9BQTRELEdBQUcwRyxrQkFBa0IsR0FDbEZ6RyxXQUFXLENBQUNDLDJCQUEyQixDQUN2QzlCLEtBQUssQ0FBQytCLGVBQWUsRUFDckJsQyxTQUFTLENBQUNtQyxNQUFNLEVBQ2hCLENBQUMsQ0FBQ2pCLE9BQU8sRUFDVEosYUFBYSxDQUFDc0IsU0FBUyxDQUFDLENBQUMsRUFDekJuQyxNQUFNLENBQUNvQyxjQUFjLEVBQ3JCdEIsNEJBQTRCLEVBQUV1QixnQkFBZ0IsRUFDOUNsQyxjQUFjLEVBQ2QsSUFDQSxDQUFDLEdBQ0QsTUFBTXNJLFlBQVksQ0FBQ0MsNkJBQTZCLENBQUMsUUFBUSxFQUFFdkksY0FBYyxDQUFDLEdBQUc7SUFDaEYsSUFBSUQsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNDLHVCQUF1QixFQUFFQyxzQkFBc0IsRUFBRTtNQUNsRlYsT0FBTyxHQUFHVyxpQkFBaUIsQ0FBQ0MsR0FBRyxDQUFDRyxvQkFBb0IsQ0FBQ2YsT0FBTyxDQUFDLEVBQUVhLEVBQUUsQ0FBQ0Msb0JBQW9CLENBQUMsQ0FBQztJQUN6RjtJQUVBLElBQUksQ0FBQ3pDLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE9BQ0MrQyxJQUFBLENBQUNzRCxtQkFBbUI7UUFDbkJsRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFakQsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFDbEUsaUJBQWVDLE1BQU0sQ0FBQ3dELE9BQU8sS0FBSyxNQUFNLElBQUl4RCxNQUFNLENBQUN3RCxPQUFPLEtBQUssT0FBTyxHQUFHakQsU0FBUyxHQUFHLDBCQUEyQjtRQUFBa0QsUUFBQSxFQUVoSFAsSUFBQSxDQUFDc0MsTUFBTTtVQUNObEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWpELFNBQVMsQ0FBQyxDQUFFO1VBQzNDcUQsSUFBSSxFQUFFcEQsTUFBTSxDQUFDb0QsSUFBSztVQUNsQkcsS0FBSyxFQUFFQSxLQUFNO1VBQ2JtQixJQUFJLEVBQUVpQixVQUFVLENBQUNDLFdBQVk7VUFDN0JwQyxPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUFRO1VBQ3hCMUIsT0FBTyxFQUFFQSxPQUFRO1VBQUEyQixRQUFBLEVBRWhCO1lBQ0FDLFVBQVUsRUFBRSxDQUFDQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUVaLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFakQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xGK0YsVUFBVSxFQUFFNUMsSUFBQSxDQUFDNkMseUJBQXlCO2NBQUNDLFFBQVEsRUFBRWhHLE1BQU0sQ0FBQ2dHLFFBQVM7Y0FBQ0MsS0FBSyxFQUFFakcsTUFBTSxDQUFDaUc7WUFBTSxDQUE0QjtVQUNuSDtRQUFDLENBQ007TUFBQyxDQUNXLENBQUM7SUFFeEIsQ0FBQyxNQUFNO01BQ047TUFDQSxPQUNDL0MsSUFBQSxDQUFDQyxRQUFRO1FBQ1JHLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVqRCxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUU7UUFDMURxRCxJQUFJLEVBQUVwRCxNQUFNLENBQUNvRCxJQUFLO1FBQ2xCRyxLQUFLLEVBQUVBLEtBQU07UUFDYnpCLE9BQU8sRUFBRVcsaUJBQWlCLENBQUNrRyxLQUFLLENBQUNDLFdBQVcsQ0FBQyxzQ0FBc0MsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBd0I7UUFBQW5GLFFBQUEsRUFFM0g7VUFDQUMsVUFBVSxFQUFFLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRVosUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVqRCxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUNqRztNQUFDLENBQ1EsQ0FBQztJQUViO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVM4SSxlQUFlQSxDQUN2QkMsY0FBOEIsRUFDOUI1SSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkI0SSxnQkFBZ0QsRUFDTTtJQUN0RCxNQUFNQyxpQkFBaUIsR0FBR0QsZ0JBQWdCLENBQUNFLElBQUk7SUFDL0MsTUFBTUMsVUFBVSxHQUFHaEosS0FBSyxDQUFDaUosaUJBQWlCLENBQUMsdUJBQXVCLEVBQUU1SSxTQUFTLEVBQUV5SSxpQkFBaUIsQ0FBQztJQUNqRyxNQUFNSSxvQkFBb0IsR0FBSWxKLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ29ILFVBQVUsQ0FBQ0MsTUFBTSxDQUE0QkMsY0FBYztJQUMvRyxNQUFNN0YsVUFBVSxHQUFHMEYsb0JBQW9CLEdBQ3BDekYsZ0JBQWdCLENBQUMsU0FBUyxFQUFFO01BQUVTLGNBQWMsRUFBRWdGLG9CQUFvQixDQUFDaEYsY0FBYztNQUFFcEUsTUFBTSxFQUFFb0osb0JBQW9CLENBQUNwSjtJQUFPLENBQUMsQ0FBQyxHQUN6SE8sU0FBUztJQUVaLElBQUlMLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDa0gsa0JBQWtCLEVBQUU7TUFDckQsT0FBT3RHLElBQUEsQ0FBQ3VHLGtCQUFrQjtRQUFDbkcsRUFBRSxFQUFFLEdBQUdwRCxLQUFLLENBQUM4QyxTQUFTLGVBQWdCO1FBQUMwRyxjQUFjLEVBQUM7TUFBeUIsQ0FBRSxDQUFDO0lBQzlHLENBQUMsTUFBTSxJQUFJLENBQUN2SixjQUFjLEVBQUU7TUFDM0IsT0FDQytDLElBQUEsQ0FBQ3NELG1CQUFtQjtRQUNuQmxELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUU4RixjQUFjLENBQUM3RixHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBRTtRQUMzRSxpQkFBYyxvQkFBb0I7UUFBQVEsUUFBQSxFQUVsQ1AsSUFBQSxDQUFDc0MsTUFBTTtVQUNObEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRThGLGNBQWMsQ0FBQzdGLEdBQUcsQ0FBQyxDQUFFO1VBQ3BERyxJQUFJLEVBQUU4RixVQUFXO1VBQ2pCLGVBQVksa0JBQWtCO1VBQzlCeEUsSUFBSSxFQUFFaUIsVUFBVSxDQUFDQyxXQUFZO1VBQzdCcEMsT0FBTyxFQUFFc0YsY0FBYyxDQUFDdEYsT0FBOEI7VUFDdEQxQixPQUFPLEVBQUVnSCxjQUFjLENBQUNoSCxPQUE4QjtVQUFBMkIsUUFBQSxFQUVyRDtZQUNBQyxVQUFVO1lBQ1ZvQyxVQUFVLEVBQ1Q1QyxJQUFBLENBQUM2Qyx5QkFBeUI7Y0FDekJDLFFBQVEsRUFBRThDLGNBQWMsQ0FBQzlDLFFBQVM7Y0FDbENDLEtBQUssRUFBRTZDLGNBQWMsQ0FBQzdDO1lBQU0sQ0FDRDtVQUU5QjtRQUFDLENBQ007TUFBQyxDQUNXLENBQUM7SUFFeEIsQ0FBQyxNQUFNO01BQ04sT0FDQy9DLElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFOEYsY0FBYyxDQUFDN0YsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFFO1FBQ25FRyxJQUFJLEVBQUU4RixVQUFXO1FBQ2pCLGVBQVksK0JBQStCO1FBQzNDMUYsT0FBTyxFQUFFc0YsY0FBYyxDQUFDdEYsT0FBOEI7UUFDdEQxQixPQUFPLEVBQUVnSCxjQUFjLENBQUM5RDtNQUE0QyxDQUNwRSxDQUFDO0lBRUo7RUFDRDtFQUVBLFNBQVMyRSxhQUFhQSxDQUNyQmIsY0FBOEIsRUFDOUI1SSxLQUEyQixFQUMzQjZJLGdCQUFnRCxFQUNoRDVJLGNBQXVCLEVBQ3ZCd0IsZUFBMEMsRUFDVDtJQUNqQyxNQUFNcUgsaUJBQWlCLEdBQUdELGdCQUFnQixDQUFDRSxJQUFJO0lBQy9DLE1BQU1DLFVBQVUsR0FBR2hKLEtBQUssQ0FBQ2lKLGlCQUFpQixDQUFDLHVCQUF1QixFQUFFNUksU0FBUyxFQUFFeUksaUJBQWlCLENBQUM7SUFDakcsTUFBTVksTUFBTSxHQUFHMUosS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUN1SCxRQUFRLENBQUVELE1BQU07SUFDN0QsTUFBTUUseUJBQXlCLEdBQUc1SixLQUFLLENBQUMrQixlQUFlLENBQUNLLE9BQU8sQ0FBQ3lILGdCQUFnQixLQUFLeEosU0FBUztJQUU5RixNQUFNeUcsU0FBUyxHQUFHNEMsTUFBTSxDQUFDekMsR0FBRyxDQUFDLENBQUM2QyxZQUFZLEVBQUVDLEtBQUssS0FBSztNQUNyRCxNQUFNQyxTQUFTLEdBQUcsQ0FBQy9KLGNBQWMsR0FBRyxFQUFFLEdBQUcsY0FBYztNQUV2RCxNQUFNZ0ssU0FBUyxHQUFHTCx5QkFBeUIsR0FDeENNLFFBQVEsQ0FBQ3hCLFdBQVcsQ0FBQyxHQUFHc0IsU0FBUywyQkFBMkJELEtBQUssRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUN4RjFKLFNBQVM7TUFDWixNQUFNK0MsRUFBRSxHQUFHbkQsY0FBYyxHQUN0QjRDLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFZ0gsWUFBWSxDQUFDSyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsR0FDOUR0SCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWdILFlBQVksQ0FBQ0ssS0FBSyxDQUFDLENBQUM7TUFDbEQsT0FDQ25ILElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUVBLEVBQUc7UUFDUEYsSUFBSSxFQUFFNEcsWUFBWSxDQUFDNUcsSUFBSztRQUN4QnRCLE9BQU8sRUFBRXFJLFNBQVMsR0FBRzFILGlCQUFpQixDQUFDMEgsU0FBUyxDQUFDLEdBQUc1SixTQUFVO1FBQzlEZ0QsS0FBSyxFQUFFNUIsZUFBZSxDQUFDMkksNkJBQTZCLENBQUNMLEtBQUssRUFBRTlKLGNBQWM7TUFBRSxDQUM1RSxDQUFDO0lBRUosQ0FBQyxDQUFDO0lBRUYsSUFBSUEsY0FBYyxFQUFFO01BQ25CLE9BQ0MrQyxJQUFBLENBQUNDLFFBQVE7UUFDUkcsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRThGLGNBQWMsQ0FBQzdGLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBRTtRQUNuRUcsSUFBSSxFQUFFOEYsVUFBVztRQUNqQjFGLE9BQU8sRUFBRXNGLGNBQWMsQ0FBQ3RGLE9BQThCO1FBQ3REMUIsT0FBTyxFQUFFZ0gsY0FBYyxDQUFDOUQscUJBQTRDO1FBQUF2QixRQUFBLEVBRW5FO1VBQ0EyRSxLQUFLLEVBQUVwQixTQUFTLEtBQUt6RyxTQUFTLElBQUl5RyxTQUFTLENBQUNsRCxNQUFNLEdBQUcsQ0FBQyxHQUFHa0QsU0FBUyxHQUFHekc7UUFDdEU7TUFBQyxDQUNRLENBQUM7SUFFYjtJQUVBLE9BQ0MyQyxJQUFBLENBQUNzRCxtQkFBbUI7TUFBQ2xELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUU4RixjQUFjLENBQUM3RixHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBRTtNQUFDLGlCQUFjLG9CQUFvQjtNQUFBUSxRQUFBLEVBQ2xJUCxJQUFBLENBQUNvRSxVQUFVO1FBQ1ZsRSxJQUFJLEVBQUU4RixVQUFXO1FBQ2pCeEUsSUFBSSxFQUFFaUIsVUFBVSxDQUFDQyxXQUFZO1FBQzdCMkIsWUFBWSxFQUFDLGFBQWE7UUFDMUJqRSxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFOEYsY0FBYyxDQUFDN0YsR0FBRyxDQUFDLENBQUU7UUFDcERPLE9BQU8sRUFBRXNGLGNBQWMsQ0FBQ3RGLE9BQThCO1FBQ3REMUIsT0FBTyxFQUFFZ0gsY0FBYyxDQUFDaEgsT0FBOEI7UUFBQTJCLFFBQUEsRUFFckQ7VUFDQUMsVUFBVSxFQUFFLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRVosUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUU4RixjQUFjLENBQUM3RixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDM0ZnRSxJQUFJLEVBQUUvRCxJQUFBLENBQUM4RSxJQUFJO1lBQUF2RSxRQUFBLEVBQUV1RDtVQUFTLENBQU8sQ0FBQztVQUM5QmxCLFVBQVUsRUFDVDVDLElBQUEsQ0FBQzZDLHlCQUF5QjtZQUN6QkMsUUFBUSxFQUFFOEMsY0FBYyxDQUFDOUMsUUFBUztZQUNsQ0MsS0FBSyxFQUFFNkMsY0FBYyxDQUFDN0M7VUFBTSxDQUNEO1FBRTlCO01BQUMsQ0FDVTtJQUFDLENBQ08sQ0FBQztFQUV4Qjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3NFLGVBQWVBLENBQ3ZCekIsY0FBOEIsRUFDOUI1SSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkI0SSxnQkFBZ0QsRUFDZjtJQUNqQyxNQUFNQyxpQkFBaUIsR0FBR0QsZ0JBQWdCLENBQUNFLElBQUk7SUFDL0MsTUFBTUMsVUFBVSxHQUFHaEosS0FBSyxDQUFDaUosaUJBQWlCLENBQUMsdUJBQXVCLEVBQUU1SSxTQUFTLEVBQUV5SSxpQkFBaUIsQ0FBQztJQUNqRyxJQUFJLENBQUM3SSxjQUFjLEVBQUU7TUFDcEI7TUFDQSxPQUNDK0MsSUFBQSxDQUFDc0QsbUJBQW1CO1FBQ25CbEQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRThGLGNBQWMsQ0FBQzdGLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1FBQzNFLGlCQUFjLG9CQUFvQjtRQUFBUSxRQUFBLEVBRWxDUCxJQUFBLENBQUNzQyxNQUFNO1VBQ05sQyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFOEYsY0FBYyxDQUFDN0YsR0FBRyxDQUFDLENBQUU7VUFDcERHLElBQUksRUFBRThGLFVBQVc7VUFDakIsZUFBWSx1QkFBdUI7VUFDbkN4RSxJQUFJLEVBQUVpQixVQUFVLENBQUNDLFdBQVk7VUFDN0JwQyxPQUFPLEVBQUVzRixjQUFjLENBQUN0RixPQUE4QjtVQUN0RDFCLE9BQU8sRUFBRWdILGNBQWMsQ0FBQ2hILE9BQThCO1VBQ3REMkQsWUFBWSxFQUFDLFFBQVE7VUFBQWhDLFFBQUEsRUFFcEI7WUFDQXFDLFVBQVUsRUFDVDVDLElBQUEsQ0FBQzZDLHlCQUF5QjtjQUN6QkMsUUFBUSxFQUFFOEMsY0FBYyxDQUFDOUMsUUFBUztjQUNsQ0MsS0FBSyxFQUFFNkMsY0FBYyxDQUFDN0M7WUFBTSxDQUNEO1VBRTlCO1FBQUMsQ0FDTTtNQUFDLENBQ1csQ0FBQztJQUV4QixDQUFDLE1BQU07TUFDTjtNQUNBLE9BQ0MvQyxJQUFBLENBQUNDLFFBQVE7UUFDUkcsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRThGLGNBQWMsQ0FBQzdGLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBRTtRQUNuRUcsSUFBSSxFQUFFOEYsVUFBVztRQUNqQixlQUFZLG9DQUFvQztRQUNoRDFGLE9BQU8sRUFBRXNGLGNBQWMsQ0FBQ3RGLE9BQThCO1FBQ3REMUIsT0FBTyxFQUFFZ0gsY0FBYyxDQUFDOUQ7TUFBNEMsQ0FDcEUsQ0FBQztJQUVKO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3dGLGlCQUFpQkEsQ0FDekJ4SyxNQUFzQixFQUN0QkUsS0FBMkIsRUFDM0JDLGNBQXVCLEVBQ3ZCd0IsZUFBMEMsRUFDMUNvSCxnQkFBZ0QsRUFDa0I7SUFDbEUsSUFBSS9JLE1BQU0sQ0FBQ3lLLFdBQVcsS0FBSyxPQUFPLEVBQUU7TUFDbkMsT0FBT2xLLFNBQVM7SUFDakI7SUFDQSxJQUFJTCxLQUFLLENBQUMrQixlQUFlLENBQUNLLE9BQU8sQ0FBQ0MsdUJBQXVCLEVBQUVDLHNCQUFzQixJQUFJeEMsTUFBTSxDQUFDaUQsR0FBRyxLQUFLeUgsa0JBQWtCLENBQUNDLE1BQU0sRUFBRTtNQUM5SDNLLE1BQU0sR0FBR3VHLFNBQVMsQ0FBQ3ZHLE1BQU0sQ0FBQztNQUMxQkEsTUFBTSxDQUFDOEIsT0FBTyxHQUFHVyxpQkFBaUIsQ0FBQ0MsR0FBRyxDQUFDRyxvQkFBb0IsQ0FBQzdDLE1BQU0sQ0FBQzhCLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRWEsRUFBRSxDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDO01BQzVHNUMsTUFBTSxDQUFDZ0YscUJBQXFCLEdBQUd2QyxpQkFBaUIsQ0FDL0NDLEdBQUcsQ0FBQ0csb0JBQW9CLENBQUM3QyxNQUFNLENBQUNnRixxQkFBcUIsSUFBSSxFQUFFLENBQUMsRUFBRXJDLEVBQUUsQ0FBQ0Msb0JBQW9CLENBQ3RGLENBQUM7SUFDRjtJQUVBLFFBQVE1QyxNQUFNLENBQUNpRCxHQUFHO01BQ2pCLEtBQUt5SCxrQkFBa0IsQ0FBQ0MsTUFBTTtRQUM3QixJQUNDLENBQUN6SyxLQUFLLENBQUMrQixlQUFlLENBQUNvSCxVQUFVLENBQUN1Qiw4QkFBOEI7UUFDaEU7UUFDQzFLLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDb0MsSUFBSSxLQUFLLFdBQVcsSUFBSXZFLGNBQWUsRUFDckU7VUFDRCxPQUFPSSxTQUFTO1FBQ2pCLENBQUMsTUFBTSxJQUFJTCxLQUFLLENBQUMrQixlQUFlLENBQUNLLE9BQU8sQ0FBQ3VILFFBQVEsRUFBRTtVQUNsRCxPQUFPRixhQUFhLENBQUMzSixNQUFNLEVBQUVFLEtBQUssRUFBRTZJLGdCQUFnQixFQUFFNUksY0FBYyxFQUFFd0IsZUFBZSxDQUFDO1FBQ3ZGLENBQUMsTUFBTTtVQUNOLE9BQU9rSCxlQUFlLENBQUM3SSxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxFQUFFNEksZ0JBQWdCLENBQUM7UUFDeEU7TUFFRCxLQUFLMkIsa0JBQWtCLENBQUNHLE1BQU07UUFDN0IsT0FBT04sZUFBZSxDQUFDdkssTUFBTSxFQUFFRSxLQUFLLEVBQUVDLGNBQWMsRUFBRTRJLGdCQUFnQixDQUFDO01BQ3hFLEtBQUsyQixrQkFBa0IsQ0FBQ0ksR0FBRztRQUMxQixPQUFPQyxZQUFZLENBQUMvSyxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxDQUFDO01BQ25ELEtBQUt1SyxrQkFBa0IsQ0FBQ00sSUFBSTtRQUMzQixPQUFPQyxhQUFhLENBQUNqTCxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxDQUFDO01BQ3BELEtBQUt1SyxrQkFBa0IsQ0FBQ1EsS0FBSztRQUM1QixPQUFPQyxjQUFjLENBQUNuTCxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxDQUFDO01BRXJELEtBQUt1SyxrQkFBa0IsQ0FBQ1UsUUFBUTtRQUMvQixJQUFJbEwsS0FBSyxDQUFDK0IsZUFBZSxDQUFDb0gsVUFBVSxDQUFDdUIsOEJBQThCLEVBQUU7VUFDcEUsSUFBSSxDQUFDekssY0FBYyxFQUFFO1lBQ3BCO1lBQ0EsT0FDQytDLElBQUEsQ0FBQ3NELG1CQUFtQjtjQUNuQmxELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVoRCxNQUFNLENBQUNpRCxHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBRTtjQUNuRSxpQkFBYyxvQkFBb0I7Y0FBQVEsUUFBQSxFQUVsQ1AsSUFBQSxDQUFDc0MsTUFBTTtnQkFDTmxDLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVoRCxNQUFNLENBQUNpRCxHQUFHLENBQUMsQ0FBRTtnQkFDNUNHLElBQUksRUFBQyx1Q0FBdUM7Z0JBQzVDRyxLQUFLLEVBQUU1QixlQUFlLENBQUMwSiw2QkFBNkIsQ0FBQyxLQUFLLENBQUU7Z0JBQzVEN0gsT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBOEI7Z0JBQzlDMUIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDOEIsT0FBOEI7Z0JBQUEyQixRQUFBLEVBRTdDO2tCQUNBcUMsVUFBVSxFQUNUNUMsSUFBQSxDQUFDNkMseUJBQXlCO29CQUN6QkMsUUFBUSxFQUFFaEcsTUFBTSxDQUFDZ0csUUFBUztvQkFDMUJDLEtBQUssRUFBRWpHLE1BQU0sQ0FBQ2lHO2tCQUFNLENBQ087Z0JBRTlCO2NBQUMsQ0FDTTtZQUFDLENBQ1csQ0FBQztVQUV4QixDQUFDLE1BQU07WUFDTjtZQUNBLE9BQ0MvQyxJQUFBLENBQUNDLFFBQVE7Y0FDUkcsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBRTtjQUMzREcsSUFBSSxFQUFDLHVDQUF1QztjQUM1Q0csS0FBSyxFQUFFNUIsZUFBZSxDQUFDMEosNkJBQTZCLENBQUMsSUFBSSxDQUFFO2NBQzNEdkosT0FBTyxFQUFFOUIsTUFBTSxDQUFDZ0Y7WUFBNEMsQ0FDNUQsQ0FBQztVQUVKO1FBQ0Q7UUFDQSxPQUFPekUsU0FBUztNQUVqQixLQUFLbUssa0JBQWtCLENBQUNZLFFBQVE7UUFDL0IsSUFBSSxDQUFDbkwsY0FBYyxFQUFFO1VBQ3BCO1VBQ0EsT0FDQytDLElBQUEsQ0FBQ3NELG1CQUFtQjtZQUNuQmxELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVoRCxNQUFNLENBQUNpRCxHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBRTtZQUNuRSxpQkFBZWpELE1BQU0sQ0FBQ3dELE9BQU8sS0FBSyxNQUFNLElBQUl4RCxNQUFNLENBQUN3RCxPQUFPLEtBQUssT0FBTyxHQUFHakQsU0FBUyxHQUFHLDBCQUEyQjtZQUNoSGlELE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQVE7WUFBQUMsUUFBQSxFQUV4QlAsSUFBQSxDQUFDc0MsTUFBTTtjQUNObEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsQ0FBQyxDQUFFO2NBQzVDRyxJQUFJLEVBQUMsc0NBQXNDO2NBQzNDRyxLQUFLLEVBQUU1QixlQUFlLENBQUM0SixzQkFBdUI7Y0FDOUMvSCxPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUE4QjtjQUM5QzFCLE9BQU8sRUFBRTlCLE1BQU0sQ0FBQzhCLE9BQThCO2NBQUEyQixRQUFBLEVBRTdDO2dCQUNBcUMsVUFBVSxFQUNUNUMsSUFBQSxDQUFDNkMseUJBQXlCO2tCQUFDQyxRQUFRLEVBQUVoRyxNQUFNLENBQUNnRyxRQUFRLElBQUksZ0JBQWlCO2tCQUFDQyxLQUFLLEVBQUVqRyxNQUFNLENBQUNpRztnQkFBTSxDQUFFO2NBRWxHO1lBQUMsQ0FDTTtVQUFDLENBQ1csQ0FBQztRQUV4QjtRQUNBLE9BQU8xRixTQUFTO01BRWpCLEtBQUttSyxrQkFBa0IsQ0FBQ2MsTUFBTTtNQUM5QixLQUFLZCxrQkFBa0IsQ0FBQ2UsUUFBUTtRQUMvQixPQUFPQyxtQkFBbUIsQ0FBQzFMLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLENBQUM7TUFFMUQ7UUFDQyxPQUFPSSxTQUFTO0lBQ2xCO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU29MLFVBQVVBLENBQ3pCekwsS0FBMkIsRUFDM0JDLGNBQXVCLEVBQ3ZCRSxVQUFxQyxFQUNyQ0QsaUJBQTBCLEVBQzFCMkksZ0JBQWdELEVBQ1U7SUFDMUQ7SUFDQSxNQUFNNkMsNkJBQTZCLEdBQUduRCxZQUFZLENBQUNvRCxpQ0FBaUMsQ0FBQzNMLEtBQUssQ0FBQytCLGVBQWUsQ0FBQzZKLE9BQU8sQ0FBQztJQUVuSCxPQUFPRiw2QkFBNkIsQ0FDbEN6RSxHQUFHLENBQUVuSCxNQUFrQixJQUFLO01BQzVCLFFBQVFBLE1BQU0sQ0FBQzBFLElBQUk7UUFDbEIsS0FBS3FILFVBQVUsQ0FBQ0MsUUFBUTtVQUN2QixPQUFPeEIsaUJBQWlCLENBQUN4SyxNQUFNLEVBQW9CRSxLQUFLLEVBQUVDLGNBQWMsRUFBRUUsVUFBVSxDQUFDc0IsZUFBZSxFQUFFb0gsZ0JBQWdCLENBQUM7UUFDeEgsS0FBS2dELFVBQVUsQ0FBQ2YsSUFBSTtVQUNuQixPQUFPekMsYUFBYSxDQUFDdkksTUFBTSxFQUFFRSxLQUFLLEVBQUVDLGNBQWMsRUFBRUMsaUJBQWlCLEVBQUVDLFVBQVUsQ0FBQztRQUNuRixLQUFLMEwsVUFBVSxDQUFDRSxTQUFTO1VBQ3hCLElBQUksQ0FBQzlMLGNBQWMsRUFBRTtZQUNwQixPQUNDK0MsSUFBQSxDQUFDZ0osZ0JBQWdCO2NBQUF6SSxRQUFBLEVBQ2Y7Z0JBQ0FxQyxVQUFVLEVBQUU1QyxJQUFBLENBQUM2Qyx5QkFBeUI7a0JBQUNFLEtBQUssRUFBRWpHLE1BQU0sQ0FBQ2lHO2dCQUFNLENBQTRCO2NBQ3hGO1lBQUMsQ0FDZ0IsQ0FBQztVQUVyQjtVQUNBLE9BQU8xRixTQUFTO1FBQ2pCO1VBQ0MsT0FBTytILFNBQVMsQ0FBQ3RJLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxVQUFVLENBQUM7TUFDaEY7SUFDRCxDQUFDLENBQUMsQ0FDRDZHLE1BQU0sQ0FBRWxILE1BQU0sSUFBS0EsTUFBTSxLQUFLTyxTQUFTLENBQUM7RUFDM0M7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVBBNEwsUUFBQSxDQUFBUixVQUFBLEdBQUFBLFVBQUE7RUFRQSxTQUFTUyxjQUFjQSxDQUN0QkMsY0FBdUIsRUFDdkJDLFdBQStCLEVBQy9CQyx5QkFBa0MsRUFDbENDLFlBQXFCLEVBQ2E7SUFDbEMsSUFBSUgsY0FBYyxFQUFFO01BQ25CLE9BQ0NuSixJQUFBLENBQUNzRCxtQkFBbUI7UUFDbkJsRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDdUosV0FBVyxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFDbkRHLEtBQUssRUFBQyw4QkFBOEI7UUFDcEMsaUJBQWMsb0JBQW9CO1FBQUFoSixRQUFBLEVBRWpDO1VBQ0F6RCxNQUFNLEVBQUVrRCxJQUFBLENBQUN3SixnQkFBZ0I7WUFBQ3BKLEVBQUUsRUFBRWdKLFdBQVk7WUFBQ0ssaUJBQWlCLEVBQUVKLHlCQUEwQjtZQUFDL0ksT0FBTyxFQUFFZ0o7VUFBYSxDQUFFO1FBQ2xIO01BQUMsQ0FDbUIsQ0FBQztJQUV4QjtJQUNBLE9BQU9qTSxTQUFTO0VBQ2pCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTcU0sYUFBYUEsQ0FBQzFNLEtBQTJCLEVBQW1DO0lBQ3BGLElBQUlBLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDdUssZ0JBQWdCLEVBQUU7TUFDbkQsT0FDQzNKLElBQUEsQ0FBQ3NELG1CQUFtQjtRQUNuQmxELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFDdkZ5SixLQUFLLEVBQUMsNkJBQTZCO1FBQ25DLGlCQUFjLG9CQUFvQjtRQUFBaEosUUFBQSxFQUVqQztVQUNBekQsTUFBTSxFQUFFa0QsSUFBQSxDQUFDNEoscUJBQXFCO1lBQUN4SixFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQztVQUFFLENBQUU7UUFDbEc7TUFBQyxDQUNtQixDQUFDO0lBRXhCO0lBQ0EsT0FBT3pDLFNBQVM7RUFDakI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTd0ssWUFBWUEsQ0FBQy9LLE1BQXNCLEVBQUVFLEtBQTJCLEVBQTBEO0lBQUEsSUFBeERDLGNBQWMsR0FBQTBELFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF0RCxTQUFBLEdBQUFzRCxTQUFBLE1BQUcsS0FBSztJQUNoRyxJQUFJLENBQUMxRCxjQUFjLEVBQUU7TUFDcEI7TUFDQSxPQUNDK0MsSUFBQSxDQUFDc0QsbUJBQW1CO1FBQUNsRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1FBQUMsaUJBQWMsb0JBQW9CO1FBQUFTLFFBQUEsRUFDckhQLElBQUEsQ0FBQ3NDLE1BQU07VUFDTmxDLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUU7VUFDdkNJLElBQUksRUFBQywyQkFBMkI7VUFDaEMsZUFBWSxlQUFlO1VBQzNCSSxPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUE4QjtVQUM5QzFCLE9BQU8sRUFBRTlCLE1BQU0sQ0FBQzhCLE9BQThCO1VBQUEyQixRQUFBLEVBRTdDO1lBQ0FxQyxVQUFVLEVBQUU1QyxJQUFBLENBQUM2Qyx5QkFBeUI7Y0FBQ0MsUUFBUSxFQUFFaEcsTUFBTSxDQUFDZ0csUUFBUztjQUFDQyxLQUFLLEVBQUVqRyxNQUFNLENBQUNpRztZQUFNLENBQTRCO1VBQ25IO1FBQUMsQ0FDTTtNQUFDLENBQ1csQ0FBQztJQUV4QixDQUFDLE1BQU07TUFDTjtNQUNBLE9BQ0MvQyxJQUFBLENBQUNDLFFBQVE7UUFDUkcsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUU7UUFDdERJLElBQUksRUFBQywyQkFBMkI7UUFDaEMsZUFBWSw0QkFBNEI7UUFDeENJLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQThCO1FBQzlDMUIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDZ0Y7TUFBNEMsQ0FDNUQsQ0FBQztJQUVKO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTaUcsYUFBYUEsQ0FBQ2pMLE1BQXNCLEVBQUVFLEtBQTJCLEVBQTBEO0lBQUEsSUFBeERDLGNBQWMsR0FBQTBELFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF0RCxTQUFBLEdBQUFzRCxTQUFBLE1BQUcsS0FBSztJQUNqRyxJQUFJLENBQUMxRCxjQUFjLEVBQUU7TUFDcEI7TUFDQSxPQUNDK0MsSUFBQSxDQUFDc0QsbUJBQW1CO1FBQUNsRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1FBQUMsaUJBQWMsb0JBQW9CO1FBQUFTLFFBQUEsRUFDdEhQLElBQUEsQ0FBQ3NDLE1BQU07VUFDTmxDLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUU7VUFDeENJLElBQUksRUFBQyw0QkFBNEI7VUFDakMsZUFBWSxnQkFBZ0I7VUFDNUJJLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQThCO1VBQzlDMUIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDOEIsT0FBOEI7VUFBQTJCLFFBQUEsRUFFN0M7WUFDQXFDLFVBQVUsRUFBRTVDLElBQUEsQ0FBQzZDLHlCQUF5QjtjQUFDQyxRQUFRLEVBQUVoRyxNQUFNLENBQUNnRyxRQUFTO2NBQUNDLEtBQUssRUFBRWpHLE1BQU0sQ0FBQ2lHO1lBQU0sQ0FBNEI7VUFDbkg7UUFBQyxDQUNNO01BQUMsQ0FDVyxDQUFDO0lBRXhCLENBQUMsTUFBTTtNQUNOO01BQ0EsT0FDQy9DLElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBRTtRQUN2REksSUFBSSxFQUFDLDRCQUE0QjtRQUNqQyxlQUFZLDZCQUE2QjtRQUN6Q0ksT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBOEI7UUFDOUMxQixPQUFPLEVBQUU5QixNQUFNLENBQUNnRjtNQUE0QyxDQUM1RCxDQUFDO0lBRUo7RUFDRDtFQUVBLFNBQVMwRyxtQkFBbUJBLENBQUMxTCxNQUFzQixFQUFFRSxLQUEyQixFQUFFQyxjQUF1QixFQUFrQztJQUMxSSxNQUFNNE0sU0FBUyxHQUFHL00sTUFBTSxDQUFDaUQsR0FBRyxLQUFLeUgsa0JBQWtCLENBQUNjLE1BQU07SUFDMUQsSUFBSSxDQUFDckwsY0FBYyxFQUFFO01BQ3BCO01BQ0EsT0FDQytDLElBQUEsQ0FBQ3NELG1CQUFtQjtRQUNuQmxELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVoRCxNQUFNLENBQUNpRCxHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBRTtRQUNuRU8sT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBUTtRQUN4QixpQkFBYyxvQkFBb0I7UUFBQUMsUUFBQSxFQUVsQ1AsSUFBQSxDQUFDc0MsTUFBTTtVQUNObEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsQ0FBQyxDQUFFO1VBQzVDRyxJQUFJLEVBQUUySixTQUFTLEdBQUcsK0JBQStCLEdBQUcsaUNBQWtDO1VBQ3RGLGVBQWFBLFNBQVMsR0FBRyw4QkFBOEIsR0FBRyxnQ0FBaUM7VUFDM0Z2SixPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUE4QjtVQUM5QzFCLE9BQU8sRUFBRTlCLE1BQU0sQ0FBQzhCLE9BQThCO1VBQUEyQixRQUFBLEVBRTdDO1lBQ0FxQyxVQUFVLEVBQUU1QyxJQUFBLENBQUM2Qyx5QkFBeUI7Y0FBQ0MsUUFBUSxFQUFFaEcsTUFBTSxDQUFDZ0csUUFBUztjQUFDQyxLQUFLLEVBQUVqRyxNQUFNLENBQUNpRztZQUFNLENBQTRCO1VBQ25IO1FBQUMsQ0FDTTtNQUFDLENBQ1csQ0FBQztJQUV4QixDQUFDLE1BQU07TUFDTjtNQUNBLE9BQ0MvQyxJQUFBLENBQUNDLFFBQVE7UUFDUkcsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBRTtRQUMzREcsSUFBSSxFQUFFMkosU0FBUyxHQUFHLCtCQUErQixHQUFHLGlDQUFrQztRQUN0RixlQUFhQSxTQUFTLEdBQUcsMkNBQTJDLEdBQUcsNkNBQThDO1FBQ3JIdkosT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBOEI7UUFDOUMxQixPQUFPLEVBQUU5QixNQUFNLENBQUNnRjtNQUE0QyxDQUM1RCxDQUFDO0lBRUo7RUFDRDtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU21HLGNBQWNBLENBQ3RCbkwsTUFBc0IsRUFDdEJFLEtBQTJCLEVBRWtCO0lBQUEsSUFEN0NDLGNBQWMsR0FBQTBELFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUF0RCxTQUFBLEdBQUFzRCxTQUFBLE1BQUcsS0FBSztJQUV0QixNQUFNbUosU0FBUyxHQUFHOU0sS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNvQyxJQUFJO0lBQ3BELElBQUlzSSxTQUFTLEtBQUssV0FBVyxFQUFFO01BQzlCLElBQUksQ0FBQzdNLGNBQWMsRUFBRTtRQUNwQjtRQUNBLE9BQ0MrQyxJQUFBLENBQUNzRCxtQkFBbUI7VUFBQ2xELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUU7VUFBQyxpQkFBYyxvQkFBb0I7VUFBQVMsUUFBQSxFQUN2SFAsSUFBQSxDQUFDc0MsTUFBTTtZQUNObEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBRTtZQUN6Q0ksSUFBSSxFQUFDLHVCQUF1QjtZQUM1QixlQUFZLGlCQUFpQjtZQUM3QkksT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBOEI7WUFDOUMxQixPQUFPLEVBQUU5QixNQUFNLENBQUM4QixPQUE4QjtZQUFBMkIsUUFBQSxFQUU3QztjQUNBcUMsVUFBVSxFQUNUNUMsSUFBQSxDQUFDNkMseUJBQXlCO2dCQUFDQyxRQUFRLEVBQUVoRyxNQUFNLENBQUNnRyxRQUFTO2dCQUFDQyxLQUFLLEVBQUVqRyxNQUFNLENBQUNpRztjQUFNLENBQTRCO1lBRXhHO1VBQUMsQ0FDTTtRQUFDLENBQ1csQ0FBQztNQUV4QixDQUFDLE1BQU07UUFDTjtRQUNBLE9BQ0MvQyxJQUFBLENBQUNDLFFBQVE7VUFDUkcsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUU7VUFDeERJLElBQUksRUFBQyx1QkFBdUI7VUFDNUIsZUFBWSw4QkFBOEI7VUFDMUNJLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQThCO1VBQzlDMUIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDZ0Y7UUFBNEMsQ0FDNUQsQ0FBQztNQUVKO0lBQ0Q7SUFDQSxPQUFPekUsU0FBUztFQUNqQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBUzBNLHVCQUF1QkEsQ0FDdEMvTSxLQUEyQixFQUMzQkcsVUFBcUMsRUFDckNELGlCQUEwQixFQUMxQjJJLGdCQUFnRCxFQUNwQztJQUNaLE1BQU13RCx5QkFBeUIsR0FBR1csV0FBVyxDQUFDQyxXQUFXLENBQUNwRSxnQkFBZ0IsQ0FBQyxJQUFJbUUsV0FBVyxDQUFDRSxXQUFXLENBQUNyRSxnQkFBZ0IsQ0FBQztJQUN4SCxJQUFJc0UsVUFBbUI7SUFDdkIsSUFBSW5OLEtBQUssQ0FBQ3NNLFlBQVksS0FBSyxLQUFLLEVBQUU7TUFDakNhLFVBQVUsR0FBRyxLQUFLO0lBQ25CLENBQUMsTUFBTTtNQUNOQSxVQUFVLEdBQUduTixLQUFLLENBQUMrQixlQUFlLENBQUNvSCxVQUFVLENBQUNnRSxVQUFVO0lBQ3pEO0lBRUEsTUFBTXZCLE9BQWdFLEdBQUcsRUFBRTtJQUMzRSxNQUFNd0IsV0FBVyxHQUFHbEIsY0FBYyxDQUFDLENBQUMsQ0FBQ2xNLEtBQUssQ0FBQ21NLGNBQWMsRUFBRW5NLEtBQUssQ0FBQ3FOLFNBQVMsRUFBRWhCLHlCQUF5QixFQUFFYyxVQUFVLENBQUM7SUFDbEgsSUFBSUMsV0FBVyxFQUFFO01BQ2hCeEIsT0FBTyxDQUFDM0QsSUFBSSxDQUFDbUYsV0FBVyxDQUFDO0lBQzFCO0lBQ0F4QixPQUFPLENBQUMzRCxJQUFJLENBQUMsR0FBR3dELFVBQVUsQ0FBQ3pMLEtBQUssRUFBRSxLQUFLLEVBQUVHLFVBQVUsRUFBRUQsaUJBQWlCLEVBQUUySSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFGLE1BQU15RSxVQUFVLEdBQUdaLGFBQWEsQ0FBQzFNLEtBQUssQ0FBQztJQUN2QyxJQUFJc04sVUFBVSxFQUFFO01BQ2YxQixPQUFPLENBQUMzRCxJQUFJLENBQUNxRixVQUFVLENBQUM7SUFDekI7SUFFQSxPQUFPMUIsT0FBTztFQUNmOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQUssUUFBQSxDQUFBYyx1QkFBQSxHQUFBQSx1QkFBQTtFQVFPLFNBQVNRLDJCQUEyQkEsQ0FDMUN2TixLQUEyQixFQUMzQkcsVUFBcUMsRUFDckNELGlCQUEwQixFQUMxQjJJLGdCQUFnRCxFQUNuQztJQUNiLE1BQU16QyxRQUFvQixHQUFHcUYsVUFBVSxDQUFDekwsS0FBSyxFQUFFLElBQUksRUFBRUcsVUFBVSxFQUFFRCxpQkFBaUIsRUFBRTJJLGdCQUFnQixDQUEwQjtJQUM5SCxJQUFJN0ksS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNvQyxJQUFJLEtBQUssV0FBVyxFQUFFO01BQ3ZENEIsUUFBUSxDQUFDNkIsSUFBSSxDQUFDdUYsMEJBQTBCLENBQUN4TixLQUFLLEVBQUUsSUFBSSxFQUFFRyxVQUFVLENBQUNzQixlQUFlLENBQUNnTSxVQUFVLENBQUMsQ0FBQztNQUM3RnJILFFBQVEsQ0FBQzZCLElBQUksQ0FBQ3VGLDBCQUEwQixDQUFDeE4sS0FBSyxFQUFFLEtBQUssRUFBRUcsVUFBVSxDQUFDc0IsZUFBZSxDQUFDaU0sWUFBWSxDQUFDLENBQUM7SUFDakc7SUFDQSxPQUFPdEgsUUFBUTtFQUNoQjtFQUFDNkYsUUFBQSxDQUFBc0IsMkJBQUEsR0FBQUEsMkJBQUE7RUFFRCxTQUFTQywwQkFBMEJBLENBQUN4TixLQUEyQixFQUFFMk4sTUFBZSxFQUFFbk0sWUFBb0MsRUFBWTtJQUNqSSxNQUFNb00sZ0JBQWdCLEdBQUdELE1BQU0sR0FDNUJuTCxHQUFHLENBQ0hpRyxLQUFLLENBQUNDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsRUFDaEVELEtBQUssQ0FBQ0MsV0FBVyxDQUFDLHNDQUFzQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FDeEUsQ0FBQyxHQUNEbEcsR0FBRyxDQUNIaUcsS0FBSyxDQUFDQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQ2pFRCxLQUFLLENBQUNDLFdBQVcsQ0FBQyxzQ0FBc0MsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQ3hFLENBQUM7SUFDSixPQUNDMUYsSUFBQSxDQUFDQyxRQUFRO01BQ1JHLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUU2SyxNQUFNLEdBQUcsUUFBUSxHQUFHLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBRTtNQUMvRXpLLElBQUksRUFBRXlLLE1BQU0sR0FBRywwQ0FBMEMsR0FBRyw0Q0FBNkM7TUFDekd0SyxLQUFLLEVBQUU3QixZQUFhO01BQ3BCSSxPQUFPLEVBQUVnTTtJQUFpQixDQUMxQixDQUFDO0VBRUo7RUFBQyxPQUFBM0IsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119