@sapui5/sap.fe.core 1.113.0 → 1.115.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 (375) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime-dbg.js +68 -5
  4. package/src/sap/fe/core/ActionRuntime.js +1 -1
  5. package/src/sap/fe/core/ActionRuntime.js.map +1 -1
  6. package/src/sap/fe/core/ActionRuntime.ts +120 -4
  7. package/src/sap/fe/core/AppComponent-dbg.js +8 -2
  8. package/src/sap/fe/core/AppComponent.js +1 -1
  9. package/src/sap/fe/core/AppComponent.js.map +1 -1
  10. package/src/sap/fe/core/AppComponent.ts +19 -3
  11. package/src/sap/fe/core/AppStateHandler-dbg.js +14 -10
  12. package/src/sap/fe/core/AppStateHandler.js +1 -1
  13. package/src/sap/fe/core/AppStateHandler.js.map +1 -1
  14. package/src/sap/fe/core/AppStateHandler.ts +17 -11
  15. package/src/sap/fe/core/BaseController-dbg.js +1 -1
  16. package/src/sap/fe/core/BaseController.ts +13 -2
  17. package/src/sap/fe/core/CommonUtils-dbg.js +74 -317
  18. package/src/sap/fe/core/CommonUtils.js +1 -1
  19. package/src/sap/fe/core/CommonUtils.js.map +1 -1
  20. package/src/sap/fe/core/CommonUtils.ts +96 -473
  21. package/src/sap/fe/core/ExtensionAPI-dbg.js +1 -1
  22. package/src/sap/fe/core/ExtensionAPI.ts +2 -2
  23. package/src/sap/fe/core/StateFilterToSelectionVariant-dbg.js +263 -0
  24. package/src/sap/fe/core/StateFilterToSelectionVariant.js +6 -0
  25. package/src/sap/fe/core/StateFilterToSelectionVariant.js.map +1 -0
  26. package/src/sap/fe/core/StateFilterToSelectionVariant.ts +316 -0
  27. package/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
  28. package/src/sap/fe/core/TemplateComponent.ts +6 -0
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +10 -3
  30. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
  31. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
  32. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +8 -1
  33. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +1 -1
  34. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +1 -0
  35. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +8 -8
  36. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
  37. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +7 -7
  38. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +1 -1
  39. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +1 -1
  40. package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +68 -36
  41. package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
  42. package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
  43. package/src/sap/fe/core/controllerextensions/EditFlow.ts +83 -43
  44. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +12 -11
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  46. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +17 -21
  48. package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +233 -133
  49. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
  50. package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +260 -145
  52. package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +1 -1
  53. package/src/sap/fe/core/controllerextensions/MassEdit.ts +3 -3
  54. package/src/sap/fe/core/controllerextensions/Routing-dbg.js +5 -3
  55. package/src/sap/fe/core/controllerextensions/Routing.js.map +1 -1
  56. package/src/sap/fe/core/controllerextensions/Routing.ts +5 -4
  57. package/src/sap/fe/core/controllerextensions/Share-dbg.js +3 -2
  58. package/src/sap/fe/core/controllerextensions/Share.js +1 -1
  59. package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
  60. package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
  61. package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +19 -14
  62. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  63. package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
  64. package/src/sap/fe/core/controllerextensions/SideEffects.ts +25 -18
  65. package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +40 -26
  66. package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  67. package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
  68. package/src/sap/fe/core/controllerextensions/ViewState.ts +59 -33
  69. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +8 -8
  70. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
  71. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
  72. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +23 -25
  73. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +7 -45
  74. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
  75. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
  76. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +5 -48
  77. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +2 -2
  78. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  79. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -1
  80. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -3
  81. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +73 -90
  82. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
  83. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
  84. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +88 -101
  85. package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +26 -4
  86. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
  87. package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
  88. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +29 -3
  89. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +13 -10
  90. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +1 -1
  91. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
  92. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +7 -20
  93. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +64 -4
  94. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
  95. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
  96. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +91 -8
  97. package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +2 -4
  98. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
  99. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
  100. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +3 -5
  101. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +9 -9
  102. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
  103. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
  104. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +8 -8
  105. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -0
  106. package/src/sap/fe/core/controls/CommandExecution-dbg.js +4 -9
  107. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  108. package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
  109. package/src/sap/fe/core/controls/CommandExecution.ts +0 -8
  110. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block-dbg.js +335 -0
  111. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +6 -0
  112. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js.map +1 -0
  113. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +336 -0
  114. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  115. package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +3 -28
  116. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
  117. package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -1
  118. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +8 -29
  119. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters-dbg.js +435 -0
  120. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.js +6 -0
  121. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.js.map +1 -0
  122. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.ts +532 -0
  123. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +30 -1
  124. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  125. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
  126. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +38 -0
  127. package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
  128. package/src/sap/fe/core/converters/ManifestSettings.ts +7 -5
  129. package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +36 -4
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  131. package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
  132. package/src/sap/fe/core/converters/MetaModelConverter.ts +45 -4
  133. package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -3
  134. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  135. package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
  136. package/src/sap/fe/core/converters/TemplateConverter.ts +1 -6
  137. package/src/sap/fe/core/converters/annotations/DataField-dbg.js +18 -3
  138. package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  139. package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
  140. package/src/sap/fe/core/converters/annotations/DataField.ts +18 -2
  141. package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +679 -676
  142. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
  143. package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
  144. package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +32 -20
  145. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  146. package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
  147. package/src/sap/fe/core/converters/controls/Common/Chart.ts +30 -18
  148. package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +4 -5
  149. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
  150. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
  151. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +6 -37
  152. package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +100 -72
  153. package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  154. package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
  155. package/src/sap/fe/core/converters/controls/Common/Table.ts +146 -99
  156. package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +37 -10
  157. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  158. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
  159. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +49 -16
  160. package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +47 -18
  161. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  162. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
  163. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +74 -20
  164. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +26 -9
  165. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
  166. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
  167. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +24 -8
  168. package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +28 -2
  169. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  170. package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
  171. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -9
  172. package/src/sap/fe/core/converters/helpers/InsightsHelpers-dbg.js +39 -0
  173. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +6 -0
  174. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js.map +1 -0
  175. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +45 -0
  176. package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +13 -15
  177. package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  178. package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
  179. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +18 -54
  180. package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +12 -12
  181. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  182. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
  183. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +16 -11
  184. package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +17 -33
  185. package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
  186. package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -1
  187. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +27 -22
  188. package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +5 -11
  189. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  190. package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
  191. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -25
  192. package/src/sap/fe/core/fpm/Component-dbg.js +3 -1
  193. package/src/sap/fe/core/fpm/Component.js +1 -1
  194. package/src/sap/fe/core/fpm/Component.js.map +1 -1
  195. package/src/sap/fe/core/fpm/Component.ts +3 -1
  196. package/src/sap/fe/core/fpm/manifest.json +1 -1
  197. package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +74 -26
  198. package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
  199. package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
  200. package/src/sap/fe/core/helpers/BindingToolkit.ts +116 -33
  201. package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +82 -37
  202. package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
  203. package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
  204. package/src/sap/fe/core/helpers/DeleteHelper.ts +109 -56
  205. package/src/sap/fe/core/helpers/KeepAliveHelper-dbg.js +1 -1
  206. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +7 -5
  207. package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +13 -3
  208. package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
  209. package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
  210. package/src/sap/fe/core/helpers/MassEditHelper.ts +28 -18
  211. package/src/sap/fe/core/helpers/MessageStrip-dbg.js +1 -1
  212. package/src/sap/fe/core/helpers/MessageStrip.ts +2 -1
  213. package/src/sap/fe/core/helpers/ModelHelper-dbg.js +1 -1
  214. package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
  215. package/src/sap/fe/core/helpers/RecommendationHelper-dbg.js +71 -0
  216. package/src/sap/fe/core/helpers/RecommendationHelper.js +6 -0
  217. package/src/sap/fe/core/helpers/RecommendationHelper.js.map +1 -0
  218. package/src/sap/fe/core/helpers/RecommendationHelper.ts +94 -0
  219. package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +5 -2
  220. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
  221. package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
  222. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +5 -0
  223. package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +24 -2
  224. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  225. package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
  226. package/src/sap/fe/core/helpers/StableIdHelper.ts +23 -1
  227. package/src/sap/fe/core/helpers/TitleHelper-dbg.js +239 -0
  228. package/src/sap/fe/core/helpers/TitleHelper.js +6 -0
  229. package/src/sap/fe/core/helpers/TitleHelper.js.map +1 -0
  230. package/src/sap/fe/core/helpers/TitleHelper.ts +295 -0
  231. package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +4 -1
  232. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +1 -1
  233. package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -1
  234. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +3 -0
  235. package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +41 -17
  236. package/src/sap/fe/core/jsx-runtime/jsx-control.js +1 -1
  237. package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -1
  238. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +45 -21
  239. package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +1 -1
  240. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -0
  241. package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +8 -4
  242. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +1 -1
  243. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -1
  244. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +7 -2
  245. package/src/sap/fe/core/library-dbg.js +4 -3
  246. package/src/sap/fe/core/library-preload.js +91 -74
  247. package/src/sap/fe/core/library-preload.js.map +1 -1
  248. package/src/sap/fe/core/library.js +1 -1
  249. package/src/sap/fe/core/library.js.map +1 -1
  250. package/src/sap/fe/core/library.ts +1 -1
  251. package/src/sap/fe/core/manifest.json +1 -1
  252. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +4 -3
  253. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  254. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
  255. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +3 -2
  256. package/src/sap/fe/core/messagebundle.properties +12 -8
  257. package/src/sap/fe/core/messagebundle_ar.properties +7 -5
  258. package/src/sap/fe/core/messagebundle_bg.properties +7 -5
  259. package/src/sap/fe/core/messagebundle_ca.properties +7 -5
  260. package/src/sap/fe/core/messagebundle_cs.properties +7 -5
  261. package/src/sap/fe/core/messagebundle_cy.properties +7 -5
  262. package/src/sap/fe/core/messagebundle_da.properties +7 -5
  263. package/src/sap/fe/core/messagebundle_de.properties +7 -5
  264. package/src/sap/fe/core/messagebundle_el.properties +7 -5
  265. package/src/sap/fe/core/messagebundle_en.properties +7 -5
  266. package/src/sap/fe/core/messagebundle_en_GB.properties +6 -4
  267. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -4
  268. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +6 -4
  269. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +7 -4
  270. package/src/sap/fe/core/messagebundle_es.properties +7 -5
  271. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -5
  272. package/src/sap/fe/core/messagebundle_et.properties +7 -5
  273. package/src/sap/fe/core/messagebundle_fi.properties +7 -5
  274. package/src/sap/fe/core/messagebundle_fr.properties +7 -5
  275. package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -6
  276. package/src/sap/fe/core/messagebundle_hi.properties +7 -5
  277. package/src/sap/fe/core/messagebundle_hr.properties +7 -5
  278. package/src/sap/fe/core/messagebundle_hu.properties +7 -5
  279. package/src/sap/fe/core/messagebundle_id.properties +7 -5
  280. package/src/sap/fe/core/messagebundle_it.properties +8 -6
  281. package/src/sap/fe/core/messagebundle_iw.properties +7 -5
  282. package/src/sap/fe/core/messagebundle_ja.properties +7 -5
  283. package/src/sap/fe/core/messagebundle_kk.properties +7 -5
  284. package/src/sap/fe/core/messagebundle_ko.properties +7 -5
  285. package/src/sap/fe/core/messagebundle_lt.properties +7 -5
  286. package/src/sap/fe/core/messagebundle_lv.properties +7 -5
  287. package/src/sap/fe/core/messagebundle_ms.properties +7 -5
  288. package/src/sap/fe/core/messagebundle_nl.properties +7 -5
  289. package/src/sap/fe/core/messagebundle_no.properties +7 -5
  290. package/src/sap/fe/core/messagebundle_pl.properties +7 -5
  291. package/src/sap/fe/core/messagebundle_pt.properties +7 -5
  292. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -5
  293. package/src/sap/fe/core/messagebundle_ro.properties +7 -5
  294. package/src/sap/fe/core/messagebundle_ru.properties +7 -5
  295. package/src/sap/fe/core/messagebundle_sh.properties +7 -5
  296. package/src/sap/fe/core/messagebundle_sk.properties +7 -5
  297. package/src/sap/fe/core/messagebundle_sl.properties +7 -5
  298. package/src/sap/fe/core/messagebundle_sv.properties +7 -5
  299. package/src/sap/fe/core/messagebundle_th.properties +7 -5
  300. package/src/sap/fe/core/messagebundle_tr.properties +7 -5
  301. package/src/sap/fe/core/messagebundle_uk.properties +7 -5
  302. package/src/sap/fe/core/messagebundle_vi.properties +7 -5
  303. package/src/sap/fe/core/messagebundle_zh_CN.properties +7 -5
  304. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -5
  305. package/src/sap/fe/core/operationsHelper-dbg.js +1 -1
  306. package/src/sap/fe/core/operationsHelper.ts +1 -1
  307. package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +8 -2
  308. package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
  309. package/src/sap/fe/core/rootView/Fcl.controller.js.map +1 -1
  310. package/src/sap/fe/core/rootView/Fcl.controller.ts +8 -1
  311. package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +8 -2
  312. package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
  313. package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -1
  314. package/src/sap/fe/core/rootView/NavContainer.controller.ts +10 -3
  315. package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +16 -6
  316. package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
  317. package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
  318. package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -4
  319. package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +54 -5
  320. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  321. package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
  322. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +52 -6
  323. package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +31 -14
  324. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  325. package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
  326. package/src/sap/fe/core/services/NavigationServiceFactory.ts +15 -1
  327. package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +10 -4
  328. package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  329. package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
  330. package/src/sap/fe/core/services/RoutingServiceFactory.ts +29 -7
  331. package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +5 -2
  332. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  333. package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
  334. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +9 -5
  335. package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +1 -2
  336. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
  337. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +2 -18
  338. package/src/sap/fe/core/templating/CommonFormatters-dbg.js +8 -8
  339. package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
  340. package/src/sap/fe/core/templating/CommonFormatters.ts +9 -9
  341. package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +1 -1
  342. package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
  343. package/src/sap/fe/core/templating/DataFieldFormatters-dbg.js +38 -2
  344. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
  345. package/src/sap/fe/core/templating/DataFieldFormatters.js.map +1 -1
  346. package/src/sap/fe/core/templating/DataFieldFormatters.ts +40 -0
  347. package/src/sap/fe/core/templating/FieldControlHelper-dbg.js +5 -6
  348. package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
  349. package/src/sap/fe/core/templating/FieldControlHelper.js.map +1 -1
  350. package/src/sap/fe/core/templating/FieldControlHelper.ts +13 -11
  351. package/src/sap/fe/core/templating/FilterHelper-dbg.js +13 -1
  352. package/src/sap/fe/core/templating/FilterHelper.js +1 -1
  353. package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
  354. package/src/sap/fe/core/templating/FilterHelper.ts +13 -1
  355. package/src/sap/fe/core/templating/PropertyHelper-dbg.js +1 -1
  356. package/src/sap/fe/core/templating/PropertyHelper.ts +7 -7
  357. package/src/sap/fe/core/templating/UIFormatters-dbg.js +5 -6
  358. package/src/sap/fe/core/templating/UIFormatters.js +1 -1
  359. package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
  360. package/src/sap/fe/core/templating/UIFormatters.ts +6 -7
  361. package/src/sap/fe/core/type/TypeUtil-dbg.js +2 -2
  362. package/src/sap/fe/core/type/TypeUtil.js +1 -1
  363. package/src/sap/fe/core/type/TypeUtil.js.map +1 -1
  364. package/src/sap/fe/core/type/TypeUtil.ts +2 -2
  365. package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +0 -243
  366. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +0 -6
  367. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +0 -1
  368. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +0 -283
  369. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +0 -121
  370. package/src/sap/fe/core/controllerextensions/collaboration/UserDetails.fragment.xml +0 -11
  371. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +0 -59
  372. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +0 -171
  373. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +0 -6
  374. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +0 -1
  375. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +0 -184
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2023 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/KeepAliveHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/navigation/library", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "sap/ui/fl/apply/api/ControlVariantApplyAPI", "sap/ui/mdc/p13n/StateUtil"], function (Log, mergeObjects, CommonUtils, ClassSupport, KeepAliveHelper, ModelHelper, NavLibrary, ControllerExtension, OverrideExecution, ControlVariantApplyAPI, StateUtil) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/KeepAliveHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/navigation/library", "sap/ui/core/mvc/ControllerExtension", "sap/ui/core/mvc/OverrideExecution", "sap/ui/fl/apply/api/ControlVariantApplyAPI", "sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters", "sap/ui/mdc/p13n/StateUtil"], function (Log, mergeObjects, CommonUtils, ClassSupport, KeepAliveHelper, ModelHelper, NavLibrary, ControllerExtension, OverrideExecution, ControlVariantApplyAPI, SelectionVariantToStateFilters, StateUtil) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _dec23, _dec24, _dec25, _dec26, _dec27, _dec28, _dec29, _dec30, _dec31, _dec32, _dec33, _dec34, _dec35, _dec36, _dec37, _dec38, _dec39, _dec40, _dec41, _dec42, _dec43, _dec44, _dec45, _dec46, _dec47, _class, _class2;
@@ -23,7 +23,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
23
23
  /**
24
24
  * Definition of a custom action to be used inside the table toolbar
25
25
  *
26
- * @alias sap.fe.core.controllerextensions.NavigationParameter
26
+ * @alias sap.fe.core.controllerextensions.ViewState.NavigationParameter
27
27
  * @public
28
28
  */
29
29
 
@@ -101,16 +101,30 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
101
101
  });
102
102
  return this._getControlState(controlStateKey, filterBarState);
103
103
  },
104
- apply: async function (filterBar, controlState) {
104
+ apply: async function (filterBar, controlState, navParameter) {
105
105
  try {
106
106
  if (controlState) {
107
- const isInitialStateApplicable = (controlState === null || controlState === void 0 ? void 0 : controlState.initialState) && this.invalidateInitialStateForApply.indexOf(filterBar.getId()) === -1 && this.controlsVariantIdUnavailable.indexOf(filterBar.getId()) === -1;
107
+ const isInitialStateApplicable = this._isInitialStatesApplicable(controlState === null || controlState === void 0 ? void 0 : controlState.initialState, filterBar);
108
+ const navigationType = navParameter.navigationType;
109
+ //Whwn navigation type is hybrid, we override the filter conditions in IAppState with SV received from XappState
110
+ if (navigationType === NavType.hybrid && controlState.fullState !== undefined) {
111
+ const filterBarPropertyInfos = await SelectionVariantToStateFilters.getFilterBarSupportedFields(filterBar),
112
+ filterBarInfoForConversion = SelectionVariantToStateFilters.getFilterBarInfoForConversion(filterBar),
113
+ xAppStateFilters = SelectionVariantToStateFilters.getConditionsFromSV(navParameter.selectionVariant, filterBarInfoForConversion, filterBarPropertyInfos);
114
+ const mergedFullState = {
115
+ ...controlState.fullState,
116
+ filter: {
117
+ ...controlState.fullState.filter,
118
+ ...xAppStateFilters
119
+ }
120
+ };
121
+ return StateUtil.applyExternalState(filterBar, mergedFullState);
122
+ }
108
123
  if (isInitialStateApplicable) {
109
124
  const diffState = await StateUtil.diffState(filterBar, controlState.initialState, controlState.fullState);
110
125
  return StateUtil.applyExternalState(filterBar, diffState);
111
- } else {
112
- return StateUtil.applyExternalState(filterBar, (controlState === null || controlState === void 0 ? void 0 : controlState.fullState) ?? controlState);
113
126
  }
127
+ return StateUtil.applyExternalState(filterBar, (controlState === null || controlState === void 0 ? void 0 : controlState.fullState) ?? controlState);
114
128
  }
115
129
  } catch (error) {
116
130
  Log.error(error);
@@ -123,11 +137,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
123
137
  const tableState = await StateUtil.retrieveExternalState(table);
124
138
  return this._getControlState(controlStateKey, tableState);
125
139
  },
126
- apply: async function (table, controlState) {
140
+ apply: async function (table, controlState, navParameters) {
127
141
  try {
128
142
  if (controlState) {
129
143
  // Extra condition added to apply the diff state logic for mdc control
130
- const isInitialStateApplicable = (controlState === null || controlState === void 0 ? void 0 : controlState.initialState) && this.invalidateInitialStateForApply.indexOf(table.getId()) === -1 && this.controlsVariantIdUnavailable.indexOf(table.getId()) === -1;
144
+ const isInitialStateApplicable = this._isInitialStatesApplicable(controlState === null || controlState === void 0 ? void 0 : controlState.initialState, table, navParameters.navigationType !== NavType.hybrid);
131
145
  if (isInitialStateApplicable) {
132
146
  var _controlState$initial;
133
147
  if (controlState.initialState && !((_controlState$initial = controlState.initialState) !== null && _controlState$initial !== void 0 && _controlState$initial.supplementaryConfig)) {
@@ -251,18 +265,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
251
265
  }
252
266
  }
253
267
  },
254
- "sap.fe.macros.table.QuickFilterContainer": {
255
- retrieve: function (oQuickFilter) {
256
- return {
257
- selectedKey: oQuickFilter.getSelectorKey()
258
- };
259
- },
260
- apply: function (oQuickFilter, oControlState) {
261
- if (oControlState !== null && oControlState !== void 0 && oControlState.selectedKey) {
262
- oQuickFilter.setSelectorKey(oControlState.selectedKey);
263
- }
264
- }
265
- },
266
268
  "sap.m.SegmentedButton": {
267
269
  retrieve: function (oSegmentedButton) {
268
270
  return {
@@ -270,8 +272,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
270
272
  };
271
273
  },
272
274
  apply: function (oSegmentedButton, oControlState) {
273
- if (oControlState !== null && oControlState !== void 0 && oControlState.selectedKey) {
275
+ if (oControlState !== null && oControlState !== void 0 && oControlState.selectedKey && oControlState.selectedKey !== oSegmentedButton.getSelectedKey()) {
276
+ var _oSegmentedButton$get;
274
277
  oSegmentedButton.setSelectedKey(oControlState.selectedKey);
278
+ if ((_oSegmentedButton$get = oSegmentedButton.getParent()) !== null && _oSegmentedButton$get !== void 0 && _oSegmentedButton$get.isA("sap.ui.mdc.ActionToolbar")) {
279
+ oSegmentedButton.fireEvent("selectionChange");
280
+ }
275
281
  }
276
282
  }
277
283
  },
@@ -282,8 +288,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
282
288
  };
283
289
  },
284
290
  apply: function (oSelect, oControlState) {
285
- if (oControlState !== null && oControlState !== void 0 && oControlState.selectedKey) {
291
+ if (oControlState !== null && oControlState !== void 0 && oControlState.selectedKey && oControlState.selectedKey !== oSelect.getSelectedKey()) {
292
+ var _oSelect$getParent;
286
293
  oSelect.setSelectedKey(oControlState.selectedKey);
294
+ if ((_oSelect$getParent = oSelect.getParent()) !== null && _oSelect$getParent !== void 0 && _oSelect$getParent.isA("sap.ui.mdc.ActionToolbar")) {
295
+ oSelect.fireEvent("change");
296
+ }
287
297
  }
288
298
  }
289
299
  },
@@ -699,7 +709,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
699
709
  return;
700
710
  }
701
711
  try {
702
- await this.collectResults(this.base.viewState.onBeforeStateApplied);
712
+ await this.collectResults(this.base.viewState.onBeforeStateApplied, [], oNavParameter.navigationType);
703
713
  const aControls = await this.collectResults(this.base.viewState.adaptStateControls);
704
714
  this.viewStateControls = aControls;
705
715
  let oPromiseChain = Promise.resolve();
@@ -730,7 +740,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
730
740
  oPromiseChain = oPromiseChain.then(this.applyControlState.bind(this, oControl, oViewState ? oViewState[sKey] : undefined, oNavParameter));
731
741
  });
732
742
  await oPromiseChain;
733
- if (oNavParameter.navigationType === NavType.iAppState) {
743
+ if (oNavParameter.navigationType === NavType.iAppState || oNavParameter.navigationType === NavType.hybrid) {
734
744
  await this.collectResults(this.base.viewState.applyAdditionalStates, oViewState ? oViewState[ADDITIONAL_STATES_KEY] : undefined);
735
745
  } else {
736
746
  await this.collectResults(this.base.viewState.applyNavigationParameters, oNavParameter);
@@ -773,12 +783,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
773
783
  * The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
774
784
  *
775
785
  * @param aPromises Extensible array of promises to be resolved before continuing
786
+ * @param navigationType Navigation type responsible for the applying the state
776
787
  * @alias sap.fe.core.controllerextensions.ViewState#onBeforeStateApplied
777
788
  * @protected
778
789
  */;
779
790
  _proto.
780
791
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
781
- onBeforeStateApplied = function onBeforeStateApplied(aPromises) {
792
+ onBeforeStateApplied = function onBeforeStateApplied(aPromises, navigationType) {
782
793
  // to be overriden
783
794
  }
784
795
 
@@ -905,8 +916,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
905
916
  }
906
917
  });
907
918
  };
919
+ _proto._isInitialStatesApplicable = function _isInitialStatesApplicable(initialState, control, isNavHybrid) {
920
+ return initialState && this.invalidateInitialStateForApply.indexOf(control.getId()) === -1 && this.controlsVariantIdUnavailable.indexOf(control.getId()) === -1 && (isNavHybrid ?? true);
921
+ };
908
922
  return ViewState;
909
923
  }(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "refreshViewBindings", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshViewBindings"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshControls", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "refreshControlBinding", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshControlBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlRefreshBindingHandler", [_dec8, _dec9], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlRefreshBindingHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshHandler", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onSuspend", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "onSuspend"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRestore", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onRestore"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "collectResults", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "collectResults"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptControlStateHandler", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlStateHandler", [_dec20, _dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptStateControls", [_dec22, _dec23], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptStateControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getStateKey", [_dec24, _dec25], Object.getOwnPropertyDescriptor(_class2.prototype, "getStateKey"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveViewState", [_dec26, _dec27], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveAdditionalStates", [_dec28, _dec29], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveControlState", [_dec30, _dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveControlState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyInitialStateOnly", [_dec32, _dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "applyInitialStateOnly"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyViewState", [_dec34, _dec35], Object.getOwnPropertyDescriptor(_class2.prototype, "applyViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable", [_dec36], Object.getOwnPropertyDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeStateApplied", [_dec37, _dec38], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterStateApplied", [_dec39, _dec40], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyAdditionalStates", [_dec41, _dec42], Object.getOwnPropertyDescriptor(_class2.prototype, "applyAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_applyNavigationParametersToFilterbar", [_dec43], Object.getOwnPropertyDescriptor(_class2.prototype, "_applyNavigationParametersToFilterbar"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyNavigationParameters", [_dec44, _dec45], Object.getOwnPropertyDescriptor(_class2.prototype, "applyNavigationParameters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyControlState", [_dec46, _dec47], Object.getOwnPropertyDescriptor(_class2.prototype, "applyControlState"), _class2.prototype)), _class2)) || _class);
910
924
  return ViewState;
911
925
  }, false);
912
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBRERJVElPTkFMX1NUQVRFU19LRVkiLCJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIl9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCIsInJldHJpZXZlIiwib1ZNIiwidmFyaWFudElkIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJhcHBseSIsImNvbnRyb2xTdGF0ZSIsInVuZGVmaW5lZCIsImlzVmFyaWFudElkQXZhaWxhYmxlIiwiX2NoZWNrSWZWYXJpYW50SWRJc0F2YWlsYWJsZSIsInNWYXJpYW50UmVmZXJlbmNlIiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiY29udHJvbHNWYXJpYW50SWRVbmF2YWlsYWJsZSIsInB1c2giLCJnZXRGb3IiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJfc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZSIsImVycm9yIiwiTG9nIiwiaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5Iiwib1RhYkJhciIsInNlbGVjdGVkS2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJvQ29udHJvbFN0YXRlIiwib1NlbGVjdGVkSXRlbSIsImdldEl0ZW1zIiwiZmluZCIsIm9JdGVtIiwiZ2V0S2V5Iiwic2V0U2VsZWN0ZWRJdGVtIiwiZmlsdGVyQmFyIiwiY29udHJvbFN0YXRlS2V5IiwiZ2V0U3RhdGVLZXkiLCJmaWx0ZXJCYXJTdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsInByb3BlcnRpZXNJbmZvIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwiZmlsdGVyIiwiUHJvcGVydHlJbmZvIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInBhdGgiLCJyZW1vdmVGcm9tQXBwU3RhdGUiLCJmb3JFYWNoIiwiX2dldENvbnRyb2xTdGF0ZSIsImlzSW5pdGlhbFN0YXRlQXBwbGljYWJsZSIsImluaXRpYWxTdGF0ZSIsImluZGV4T2YiLCJnZXRJZCIsImRpZmZTdGF0ZSIsImZ1bGxTdGF0ZSIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsInRhYmxlIiwidGFibGVTdGF0ZSIsInN1cHBsZW1lbnRhcnlDb25maWciLCJvRGlmZlN0YXRlIiwicmVmcmVzaEJpbmRpbmciLCJvVGFibGUiLCJvVGFibGVCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsIm9Sb290QmluZGluZyIsImdldFJvb3RCaW5kaW5nIiwicmVmcmVzaCIsIm9IZWFkZXJDb250ZXh0IiwiZ2V0SGVhZGVyQ29udGV4dCIsInNHcm91cElkIiwiZ2V0R3JvdXBJZCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiaW5mbyIsIm9DaGFydCIsIm9PUExheW91dCIsInNlbGVjdGVkU2VjdGlvbiIsImdldFNlbGVjdGVkU2VjdGlvbiIsInNldFNlbGVjdGVkU2VjdGlvbiIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib0JpbmRpbmciLCJnZXRCaW5kaW5nIiwic01ldGFQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJzU3RyYXRlZ3kiLCJLZWVwQWxpdmVIZWxwZXIiLCJnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvTmF2aWdhdGlvblByb3BlcnRpZXMiLCJDb21tb25VdGlscyIsImdldENvbnRleHRQYXRoUHJvcGVydGllcyIsIiRraW5kIiwiYU5hdlByb3BlcnRpZXNUb1JlcXVlc3QiLCJyZWR1Y2UiLCJhUHJldiIsInNOYXZQcm9wIiwiJGlzQ29sbGVjdGlvbiIsImFQcm9wZXJ0aWVzIiwiJFByb3BlcnR5UGF0aCIsImNvbmNhdCIsIm9RdWlja0ZpbHRlciIsImdldFNlbGVjdG9yS2V5Iiwic2V0U2VsZWN0b3JLZXkiLCJvU2VnbWVudGVkQnV0dG9uIiwic2V0U2VsZWN0ZWRLZXkiLCJvU2VsZWN0Iiwib0R5bmFtaWNQYWdlIiwiaGVhZGVyRXhwYW5kZWQiLCJnZXRIZWFkZXJFeHBhbmRlZCIsInNldEhlYWRlckV4cGFuZGVkIiwib1ZpZXciLCJvQ29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJyZXRyaWV2ZVZpZXdTdGF0ZSIsIm9OYXZQYXJhbWV0ZXJzIiwiYXBwbHlWaWV3U3RhdGUiLCJyZWZyZXNoVmlld0JpbmRpbmdzIiwib0NvbXBvbmVudENvbnRhaW5lciIsIm9Db21wb25lbnQiLCJnZXRDb21wb25lbnRJbnN0YW5jZSIsInJldHJpZXZlQ29udHJvbFN0YXRlIiwiZ2V0Um9vdENvbnRyb2wiLCJhcHBseUNvbnRyb2xTdGF0ZSIsIlZpZXdTdGF0ZSIsImRlZmluZVVJNUNsYXNzIiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsInByaXZhdGVFeHRlbnNpb24iLCJJbnN0ZWFkIiwiaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXIiLCJ2aWV3U3RhdGVDb250cm9scyIsInZhcmlhbnRNYW5hZ2VtZW50IiwiYWRhcHRDb250cm9scyIsImV4dGVybmFsU3RhdGVQcm9taXNlcyIsImluaXRpYWxDb250cm9sU3RhdGVzIiwidmFyaWFudENvbnRyb2xzIiwiY29udHJvbCIsImlzQSIsIl9hZGRFdmVudExpc3RlbmVyc1RvVmFyaWFudE1hbmFnZW1lbnQiLCJleHRlcm5hbFN0YXRlUHJvbWlzZSIsIlByb21pc2UiLCJhbGwiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiaSIsImUiLCJfaVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIiLCJfcEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJyZXNvbHZlIiwiX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSIsImFDb250cm9scyIsImNvbGxlY3RSZXN1bHRzIiwiYmFzZSIsImFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyIsIm9Qcm9taXNlQ2hhaW4iLCJvQ29udHJvbCIsInRoZW4iLCJyZWZyZXNoQ29udHJvbEJpbmRpbmciLCJiaW5kIiwiYUNvbGxlY3RlZENvbnRyb2xzIiwib0NvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIiLCJnZXRDb250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwib1JlZnJlc2hCaW5kaW5nSGFuZGxlciIsInNUeXBlIiwiYWRhcHRCaW5kaW5nUmVmcmVzaEhhbmRsZXIiLCJvQ29udHJvbEhhbmRsZXIiLCJvblN1c3BlbmQiLCJvblJlc3RvcmUiLCJkZXN0cm95IiwiZm5DYWxsIiwiYVJlc3VsdHMiLCJhcmdzIiwiYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyIiwiYUNvbnRyb2xIYW5kbGVyIiwiZ2V0Q29udHJvbFN0YXRlSGFuZGxlciIsImFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlciIsImFzc2lnbiIsImFkYXB0U3RhdGVDb250cm9scyIsImdldFZpZXciLCJnZXRMb2NhbElkIiwib1ZpZXdTdGF0ZSIsImFSZXNvbHZlZFN0YXRlcyIsIm1hcCIsInZSZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsIm9TdGF0ZXMiLCJtU3RhdGUiLCJvQ3VycmVudFN0YXRlIiwibWVyZ2VPYmplY3RzIiwibUFkZGl0aW9uYWxTdGF0ZXMiLCJfcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwicmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwiYUNvbnRyb2xTdGF0ZUhhbmRsZXJzIiwibUNvbnRyb2xTdGF0ZUhhbmRsZXIiLCJFcnJvciIsImNhbGwiLCJhU3RhdGVzIiwib0ZpbmFsU3RhdGUiLCJhcHBseUluaXRpYWxTdGF0ZU9ubHkiLCJvTmF2UGFyYW1ldGVyIiwiX2dldEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJvbkJlZm9yZVN0YXRlQXBwbGllZCIsImhhc1ZhcmlhbnRNYW5hZ2VtZW50Iiwic29ydGVkQWRhcHRTdGF0ZUNvbnRyb2xzIiwibW9kaWZpZWRDb250cm9scyIsImlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sIiwic0tleSIsIm5hdmlnYXRpb25UeXBlIiwiaUFwcFN0YXRlIiwiYXBwbHlBZGRpdGlvbmFsU3RhdGVzIiwiYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIl9hcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzVG9GaWx0ZXJiYXIiLCJvbkFmdGVyU3RhdGVBcHBsaWVkIiwiX3NldEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJzVmFyaWFudElkIiwiYVZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlIiwib1ZhcmlhbnQiLCJwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUiLCJhUHJvbWlzZXMiLCJfb05hdlBhcmFtZXRlciIsIl9hUHJvbWlzZXMiLCJnZXRJbnRlcmZhY2UiLCJvUGF5bG9hZCIsInZhcmlhbnRNYW5hZ2VkQ29udHJvbHMiLCJmbkV2ZW50IiwiX3VwZGF0ZUluaXRpYWxTdGF0ZXNPblZhcmlhbnRDaGFuZ2UiLCJhdHRhY2hTYXZlIiwiYXR0YWNoU2VsZWN0Iiwidm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0IiwiY29udHJvbEtleSIsInZtQXNzb2NpYXRlZGNvbnRyb2xLZXkiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJWaWV3U3RhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEtlZXBBbGl2ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgTmF2TGlicmFyeSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgQ29udHJvbFZhcmlhbnRBcHBseUFQSSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCI7XG5pbXBvcnQgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuLy8gaW1wb3J0IENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJCYXNlIGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL3VpL21kYy91dGlsL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbE5hdlByb3BlcnR5IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG4vLyBhZGRpdGlvbmFsU3RhdGVzIGFyZSBzdG9yZWQgbmV4dCB0byBjb250cm9sIElEcywgc28gbmFtZSBjbGFzaCBhdm9pZGFuY2UgbmVlZGVkLiBGb3J0dW5hdGVseSBJRHMgaGF2ZSByZXN0cmljdGlvbnM6XG4vLyBcIkFsbG93ZWQgaXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIChjYXBpdGFsL2xvd2VyY2FzZSksIGRpZ2l0cywgdW5kZXJzY29yZXMsIGRhc2hlcywgcG9pbnRzIGFuZC9vciBjb2xvbnMuXCJcbi8vIFRoZXJlZm9yZSBhZGRpbmcgYSBzeW1ib2wgbGlrZSAjIG9yIEBcbmNvbnN0IEFERElUSU9OQUxfU1RBVEVTX0tFWSA9IFwiI2FkZGl0aW9uYWxTdGF0ZXNcIixcblx0TmF2VHlwZSA9IE5hdkxpYnJhcnkuTmF2VHlwZTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgY3VzdG9tIGFjdGlvbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgdGFibGUgdG9vbGJhclxuICpcbiAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5OYXZpZ2F0aW9uUGFyYW1ldGVyXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIE5hdmlnYXRpb25QYXJhbWV0ZXIgPSB7XG5cdC8qKlxuXHQgKiAgVGhlIGFjdHVhbCBuYXZpZ2F0aW9uIHR5cGUuXG5cdCAqXG5cdCAqICBAcHVibGljXG5cdCAqL1xuXHRuYXZpZ2F0aW9uVHlwZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGlvblZhcmlhbnQgZnJvbSB0aGUgbmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2VsZWN0aW9uVmFyaWFudD86IG9iamVjdDtcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3Rpb25WYXJpYW50IGRlZmF1bHRzIGZyb20gdGhlIG5hdmlnYXRpb25cblx0ICpcblx0ICogIEBwdWJsaWNcblx0ICovXG5cdHNlbGVjdGlvblZhcmlhbnREZWZhdWx0cz86IG9iamVjdDtcblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciB0aGUgc3RhbmRhcmQgdmFyaWFudCBtdXN0IGJlIHVzZWQgaW4gdmFyaWFudCBtYW5hZ2VtZW50XG5cdCAqXG5cdCAqICBAcHVibGljXG5cdCAqL1xuXHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBDb250cm9sU3RhdGUgPVxuXHR8ICh7XG5cdFx0XHRpbml0aWFsU3RhdGU/OiB7XG5cdFx0XHRcdHN1cHBsZW1lbnRhcnlDb25maWc6IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0XHRmdWxsU3RhdGU/OiBvYmplY3Q7XG5cdCAgfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuXHR8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgRmlsdGVyQmFyU3RhdGUgPSB7XG5cdGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIEFycmF5PG9iamVjdD4+O1xufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBtZXRob2RzIHRvIHJldHJpZXZlICYgYXBwbHkgc3RhdGVzIGZvciB0aGUgZGlmZmVyZW50IGNvbnRyb2xzIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmNvbnN0IF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcDogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcblx0XCJzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnRcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1ZNOiBWYXJpYW50TWFuYWdlbWVudCk6IHsgdmFyaWFudElkOiBzdHJpbmcgfCBudWxsIH0ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFyaWFudElkOiBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgY29udHJvbFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSAmJiBjb250cm9sU3RhdGUudmFyaWFudElkICE9PSB1bmRlZmluZWQgJiYgY29udHJvbFN0YXRlLnZhcmlhbnRJZCAhPT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpIHtcblx0XHRcdFx0XHRjb25zdCBpc1ZhcmlhbnRJZEF2YWlsYWJsZSA9IHRoaXMuX2NoZWNrSWZWYXJpYW50SWRJc0F2YWlsYWJsZShvVk0sIGNvbnRyb2xTdGF0ZS52YXJpYW50SWQpO1xuXHRcdFx0XHRcdGxldCBzVmFyaWFudFJlZmVyZW5jZTtcblx0XHRcdFx0XHRpZiAoaXNWYXJpYW50SWRBdmFpbGFibGUpIHtcblx0XHRcdFx0XHRcdHNWYXJpYW50UmVmZXJlbmNlID0gY29udHJvbFN0YXRlLnZhcmlhbnRJZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c1ZhcmlhbnRSZWZlcmVuY2UgPSBvVk0uZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUucHVzaCguLi5vVk0uZ2V0Rm9yKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0YXdhaXQgQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50OiBvVk0sXG5cdFx0XHRcdFx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlIGFzIHN0cmluZ1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlKG9WTSk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkucHVzaCguLi5vVk0uZ2V0Rm9yKCkpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZShvVk0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlKG9WTSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAubS5JY29uVGFiQmFyXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9UYWJCYXI6IGFueSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG9UYWJCYXIuZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAob1RhYkJhcjogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlICYmIG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkSXRlbSA9IG9UYWJCYXIuZ2V0SXRlbXMoKS5maW5kKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9JdGVtLmdldEtleSgpID09PSBvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5O1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZEl0ZW0pIHtcblx0XHRcdFx0XHRvVGFiQmFyLnNldFNlbGVjdGVkSXRlbShvU2VsZWN0ZWRJdGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkubWRjLkZpbHRlckJhclwiOiB7XG5cdFx0cmV0cmlldmU6IGFzeW5jIGZ1bmN0aW9uIChmaWx0ZXJCYXI6IEZpbHRlckJhckJhc2UpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2xTdGF0ZUtleSA9IHRoaXMuZ2V0U3RhdGVLZXkoZmlsdGVyQmFyKTtcblx0XHRcdGNvbnN0IGZpbHRlckJhclN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIpO1xuXHRcdFx0Ly8gcmVtb3ZlIHNlbnNpdGl2ZSBvciB2aWV3IHN0YXRlIGlycmVsZXZhbnQgZmllbGRzXG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzSW5mbyA9IGZpbHRlckJhci5nZXRQcm9wZXJ0eUluZm9TZXQoKTtcblx0XHRcdGNvbnN0IGZpbHRlciA9IGZpbHRlckJhclN0YXRlLmZpbHRlciB8fCB7fTtcblx0XHRcdHByb3BlcnRpZXNJbmZvXG5cdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKFByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKGZpbHRlcikubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdFx0UHJvcGVydHlJbmZvLnBhdGggJiZcblx0XHRcdFx0XHRcdGZpbHRlcltQcm9wZXJ0eUluZm8ucGF0aF0gJiZcblx0XHRcdFx0XHRcdChQcm9wZXJ0eUluZm8ucmVtb3ZlRnJvbUFwcFN0YXRlIHx8IGZpbHRlcltQcm9wZXJ0eUluZm8ucGF0aF0ubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChQcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRcdGlmIChQcm9wZXJ0eUluZm8ucGF0aCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGZpbHRlcltQcm9wZXJ0eUluZm8ucGF0aF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlS2V5LCBmaWx0ZXJCYXJTdGF0ZSk7XG5cdFx0fSxcblx0XHRhcHBseTogYXN5bmMgZnVuY3Rpb24gKGZpbHRlckJhcjogRmlsdGVyQmFyLCBjb250cm9sU3RhdGU6IENvbnRyb2xTdGF0ZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRcdGNvbnN0IGlzSW5pdGlhbFN0YXRlQXBwbGljYWJsZSA9XG5cdFx0XHRcdFx0XHRjb250cm9sU3RhdGU/LmluaXRpYWxTdGF0ZSAmJlxuXHRcdFx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkuaW5kZXhPZihmaWx0ZXJCYXIuZ2V0SWQoKSkgPT09IC0xICYmXG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5kZXhPZihmaWx0ZXJCYXIuZ2V0SWQoKSkgPT09IC0xO1xuXG5cdFx0XHRcdFx0aWYgKGlzSW5pdGlhbFN0YXRlQXBwbGljYWJsZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGlmZlN0YXRlOiBvYmplY3QgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKFxuXHRcdFx0XHRcdFx0XHRmaWx0ZXJCYXIsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5pbml0aWFsU3RhdGUgYXMgb2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRjb250cm9sU3RhdGUuZnVsbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKGZpbHRlckJhciwgZGlmZlN0YXRlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUoZmlsdGVyQmFyLCBjb250cm9sU3RhdGU/LmZ1bGxTdGF0ZSA/PyBjb250cm9sU3RhdGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5tZGMuVGFibGVcIjoge1xuXHRcdHJldHJpZXZlOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKSB7XG5cdFx0XHRjb25zdCBjb250cm9sU3RhdGVLZXkgPSB0aGlzLmdldFN0YXRlS2V5KHRhYmxlKTtcblx0XHRcdGNvbnN0IHRhYmxlU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRhYmxlKTtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlS2V5LCB0YWJsZVN0YXRlKTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlLCBjb250cm9sU3RhdGU6IENvbnRyb2xTdGF0ZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRcdC8vIEV4dHJhIGNvbmRpdGlvbiBhZGRlZCB0byBhcHBseSB0aGUgZGlmZiBzdGF0ZSBsb2dpYyBmb3IgbWRjIGNvbnRyb2xcblx0XHRcdFx0XHRjb25zdCBpc0luaXRpYWxTdGF0ZUFwcGxpY2FibGUgPVxuXHRcdFx0XHRcdFx0Y29udHJvbFN0YXRlPy5pbml0aWFsU3RhdGUgJiZcblx0XHRcdFx0XHRcdHRoaXMuaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5LmluZGV4T2YodGFibGUuZ2V0SWQoKSkgPT09IC0xICYmXG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5kZXhPZih0YWJsZS5nZXRJZCgpKSA9PT0gLTE7XG5cblx0XHRcdFx0XHRpZiAoaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlKSB7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZSAmJiAhY29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZT8uc3VwcGxlbWVudGFyeUNvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRjb250cm9sU3RhdGUuaW5pdGlhbFN0YXRlLnN1cHBsZW1lbnRhcnlDb25maWcgPSB7fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IG9EaWZmU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKFxuXHRcdFx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRcdFx0Y29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5mdWxsU3RhdGUgYXMgb2JqZWN0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGFibGUsIG9EaWZmU3RhdGUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoIWNvbnRyb2xTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnID0ge307XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0YWJsZSwgY29udHJvbFN0YXRlPy5mdWxsU3RhdGUgPz8gY29udHJvbFN0YXRlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVmcmVzaEJpbmRpbmc6IGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0Y29uc3Qgb1RhYmxlQmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlQmluZGluZykge1xuXHRcdFx0XHRjb25zdCBvUm9vdEJpbmRpbmcgPSBvVGFibGVCaW5kaW5nLmdldFJvb3RCaW5kaW5nKCk7XG5cdFx0XHRcdGlmIChvUm9vdEJpbmRpbmcgPT09IG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0XHQvLyBhYnNvbHV0ZSBiaW5kaW5nXG5cdFx0XHRcdFx0b1RhYmxlQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gcmVsYXRpdmUgYmluZGluZ1xuXHRcdFx0XHRcdGNvbnN0IG9IZWFkZXJDb250ZXh0ID0gb1RhYmxlQmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0Y29uc3Qgc0dyb3VwSWQgPSBvVGFibGVCaW5kaW5nLmdldEdyb3VwSWQoKTtcblxuXHRcdFx0XHRcdGlmIChvSGVhZGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0b0hlYWRlckNvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKFt7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBcIlwiIH1dLCBzR3JvdXBJZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cuaW5mbyhgVGFibGU6ICR7b1RhYmxlLmdldElkKCl9IHdhcyBub3QgcmVmcmVzaGVkLiBObyBiaW5kaW5nIGZvdW5kIWApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkubWRjLkNoYXJ0XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9DaGFydDogYW55KSB7XG5cdFx0XHRyZXR1cm4gU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvQ2hhcnQpO1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvQ2hhcnQ6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZShvQ2hhcnQsIG9Db250cm9sU3RhdGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBUT0RPOiB1bmNvbW1lbnQgYWZ0ZXIgbWRjIGZpeCBpcyBtZXJnZWRcblx0XHQvKiByZXRyaWV2ZTogYXN5bmMgZnVuY3Rpb24gKGNoYXJ0OiBDaGFydCkge1xuXHRcdFx0Y29uc3QgY29udHJvbFN0YXRlS2V5ID0gdGhpcy5nZXRTdGF0ZUtleShjaGFydCk7XG5cdFx0XHRjb25zdCBjaGFydFN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShjaGFydCk7XG5cblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlS2V5LCBjaGFydFN0YXRlKTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAoY2hhcnQ6IENoYXJ0LCBjb250cm9sU3RhdGU6IENvbnRyb2xTdGF0ZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRcdC8vIEV4dHJhIGNvbmRpdGlvbiBhZGRlZCB0byBhcHBseSB0aGUgZGlmZiBzdGF0ZSBsb2dpYyBmb3IgbWRjIGNvbnRyb2xcblx0XHRcdFx0XHRjb25zdCBpc0luaXRpYWxTdGF0ZUFwcGxpY2FibGUgPSBjb250cm9sU3RhdGU/LmluaXRpYWxTdGF0ZSAmJiB0aGlzLmludmFsaWRhdGVJbml0aWFsU3RhdGVGb3JBcHBseS5pbmRleE9mKGNoYXJ0LmdldElkKCkpID09PSAtMSAmJiB0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5kZXhPZihjaGFydC5nZXRJZCgpKSA9PT0gLTE7XG5cblx0XHRcdFx0XHRpZiAoaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBkaWZmU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKFxuXHRcdFx0XHRcdFx0XHRjaGFydCxcblx0XHRcdFx0XHRcdFx0Y29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5mdWxsU3RhdGUgYXMgb2JqZWN0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUoY2hhcnQsIGRpZmZTdGF0ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKGNoYXJ0LCBjb250cm9sU3RhdGU/LmZ1bGxTdGF0ZSA/PyBjb250cm9sU3RhdGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSAqL1xuXHR9LFxuXHRcInNhcC51eGFwLk9iamVjdFBhZ2VMYXlvdXRcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob09QTGF5b3V0OiBhbnkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkU2VjdGlvbjogb09QTGF5b3V0LmdldFNlbGVjdGVkU2VjdGlvbigpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvT1BMYXlvdXQ6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRvT1BMYXlvdXQuc2V0U2VsZWN0ZWRTZWN0aW9uKG9Db250cm9sU3RhdGUuc2VsZWN0ZWRTZWN0aW9uKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlZnJlc2hCaW5kaW5nOiBmdW5jdGlvbiAob09QTGF5b3V0OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PUExheW91dC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSBvQmluZGluZ0NvbnRleHQgJiYgb0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdGlmIChvQmluZGluZykge1xuXHRcdFx0XHRjb25zdCBzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0Y29uc3Qgc1N0cmF0ZWd5ID0gS2VlcEFsaXZlSGVscGVyLmdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aChvT1BMYXlvdXQsIHNNZXRhUGF0aCk7XG5cdFx0XHRcdGlmIChzU3RyYXRlZ3kgPT09IFwic2VsZlwiKSB7XG5cdFx0XHRcdFx0Ly8gUmVmcmVzaCBtYWluIGNvbnRleHQgYW5kIDEtMSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgb3IgT1Bcblx0XHRcdFx0XHRjb25zdCBvTW9kZWwgPSBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRvTmF2aWdhdGlvblByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbE5hdlByb3BlcnR5PiA9XG5cdFx0XHRcdFx0XHRcdChDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbCwgc01ldGFQYXRoLCB7XG5cdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiTmF2aWdhdGlvblByb3BlcnR5XCJcblx0XHRcdFx0XHRcdFx0fSkgYXMgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsTmF2UHJvcGVydHk+KSB8fCB7fSxcblx0XHRcdFx0XHRcdGFOYXZQcm9wZXJ0aWVzVG9SZXF1ZXN0ID0gT2JqZWN0LmtleXMob05hdmlnYXRpb25Qcm9wZXJ0aWVzKS5yZWR1Y2UoZnVuY3Rpb24gKGFQcmV2OiBhbnlbXSwgc05hdlByb3A6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAob05hdmlnYXRpb25Qcm9wZXJ0aWVzW3NOYXZQcm9wXS4kaXNDb2xsZWN0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0YVByZXYucHVzaCh7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzTmF2UHJvcCB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYVByZXY7XG5cdFx0XHRcdFx0XHR9LCBbXSksXG5cdFx0XHRcdFx0XHRhUHJvcGVydGllcyA9IFt7ICRQcm9wZXJ0eVBhdGg6IFwiKlwiIH1dLFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQgPSBvQmluZGluZy5nZXRHcm91cElkKCk7XG5cblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKGFQcm9wZXJ0aWVzLmNvbmNhdChhTmF2UHJvcGVydGllc1RvUmVxdWVzdCksIHNHcm91cElkKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzU3RyYXRlZ3kgPT09IFwiaW5jbHVkaW5nRGVwZW5kZW50c1wiKSB7XG5cdFx0XHRcdFx0Ly8gQ29tcGxldGUgcmVmcmVzaFxuXHRcdFx0XHRcdG9CaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmluZm8oYE9iamVjdFBhZ2U6ICR7b09QTGF5b3V0LmdldElkKCl9IHdhcyBub3QgcmVmcmVzaGVkLiBObyBiaW5kaW5nIGZvdW5kIWApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAuZmUubWFjcm9zLnRhYmxlLlF1aWNrRmlsdGVyQ29udGFpbmVyXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9RdWlja0ZpbHRlcjogYW55KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1F1aWNrRmlsdGVyLmdldFNlbGVjdG9yS2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9RdWlja0ZpbHRlcjogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlPy5zZWxlY3RlZEtleSkge1xuXHRcdFx0XHRvUXVpY2tGaWx0ZXIuc2V0U2VsZWN0b3JLZXkob0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5tLlNlZ21lbnRlZEJ1dHRvblwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvU2VnbWVudGVkQnV0dG9uOiBhbnkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBvU2VnbWVudGVkQnV0dG9uLmdldFNlbGVjdGVkS2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9TZWdtZW50ZWRCdXR0b246IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZT8uc2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0b1NlZ21lbnRlZEJ1dHRvbi5zZXRTZWxlY3RlZEtleShvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLm0uU2VsZWN0XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9TZWxlY3Q6IGFueSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG9TZWxlY3QuZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAob1NlbGVjdDogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlPy5zZWxlY3RlZEtleSkge1xuXHRcdFx0XHRvU2VsZWN0LnNldFNlbGVjdGVkS2V5KG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAuZi5EeW5hbWljUGFnZVwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvRHluYW1pY1BhZ2U6IGFueSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aGVhZGVyRXhwYW5kZWQ6IG9EeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvRHluYW1pY1BhZ2U6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQob0NvbnRyb2xTdGF0ZS5oZWFkZXJFeHBhbmRlZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5jb3JlLm12Yy5WaWV3XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9WaWV3OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKG9Db250cm9sbGVyICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIudmlld1N0YXRlLnJldHJpZXZlVmlld1N0YXRlKG9Db250cm9sbGVyLnZpZXdTdGF0ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9WaWV3OiBhbnksIG9Db250cm9sU3RhdGU6IGFueSwgb05hdlBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbGxlci52aWV3U3RhdGUuYXBwbHlWaWV3U3RhdGUob0NvbnRyb2xTdGF0ZSwgb05hdlBhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVmcmVzaEJpbmRpbmc6IGZ1bmN0aW9uIChvVmlldzogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChvQ29udHJvbGxlciAmJiBvQ29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5yZWZyZXNoVmlld0JpbmRpbmdzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvQ29tcG9uZW50Q29udGFpbmVyOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29tcG9uZW50Q29udGFpbmVyLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0XHRpZiAob0NvbXBvbmVudCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvQ29tcG9uZW50Q29udGFpbmVyOiBhbnksIG9Db250cm9sU3RhdGU6IGFueSwgb05hdlBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db21wb25lbnRDb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdGlmIChvQ29tcG9uZW50KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwcGx5Q29udHJvbFN0YXRlKG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSwgb0NvbnRyb2xTdGF0ZSwgb05hdlBhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBmb3Igc3RhdGUgaGFuZGxpbmdcbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBtYWludGFpbiBhIHNwZWNpZmljIHN0YXRlIGZvciB5b3VyIGFwcGxpY2F0aW9uLCB5b3UgY2FuIHVzZSB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuODUuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGVcIilcbmNsYXNzIFZpZXdTdGF0ZSBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIF9pUmV0cmlldmluZ1N0YXRlQ291bnRlcjogbnVtYmVyO1xuXG5cdHByaXZhdGUgX3BJbml0aWFsU3RhdGVBcHBsaWVkOiBQcm9taXNlPHVua25vd24+O1xuXG5cdHByaXZhdGUgX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZT86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdGNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGU6IHN0cmluZ1tdID0gW107XG5cblx0aW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5OiBzdHJpbmdbXSA9IFtdO1xuXG5cdHZpZXdTdGF0ZUNvbnRyb2xzOiBNYW5hZ2VkT2JqZWN0W10gPSBbXTtcblxuXHQvKipcblx0ICogQ29uc3RydWN0b3IuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyID0gMDtcblx0XHR0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJlZnJlc2hWaWV3QmluZGluZ3MoKSB7XG5cdFx0Y29uc3QgYUNvbnRyb2xzID0gYXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRhQ29udHJvbHNcblx0XHRcdC5maWx0ZXIoKG9Db250cm9sOiBhbnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0fSlcblx0XHRcdC5mb3JFYWNoKChvQ29udHJvbDogYW55KSA9PiB7XG5cdFx0XHRcdG9Qcm9taXNlQ2hhaW4gPSBvUHJvbWlzZUNoYWluLnRoZW4odGhpcy5yZWZyZXNoQ29udHJvbEJpbmRpbmcuYmluZCh0aGlzLCBvQ29udHJvbCkpO1xuXHRcdFx0fSk7XG5cdFx0cmV0dXJuIG9Qcm9taXNlQ2hhaW47XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYWRkIGFsbCBjb250cm9scyByZWxldmFudCBmb3IgcmVmcmVzaGluZyB0byB0aGUgcHJvdmlkZWQgY29udHJvbCBhcnJheS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIGFDb2xsZWN0ZWRDb250cm9scyBUaGUgY29sbGVjdGVkIGNvbnRyb2xzXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhZGFwdEJpbmRpbmdSZWZyZXNoQ29udHJvbHMoYUNvbGxlY3RlZENvbnRyb2xzOiBNYW5hZ2VkT2JqZWN0W10pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmVmcmVzaENvbnRyb2xCaW5kaW5nKG9Db250cm9sOiBhbnkpIHtcblx0XHRjb25zdCBvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciA9IHRoaXMuZ2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRpZiAodHlwZW9mIG9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyLnJlZnJlc2hCaW5kaW5nICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdExvZy5pbmZvKGByZWZyZXNoQmluZGluZyBoYW5kbGVyIGZvciBjb250cm9sOiAke29Db250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfSBpcyBub3QgcHJvdmlkZWRgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlci5yZWZyZXNoQmluZGluZy5iaW5kKHRoaXMsIG9Db250cm9sKSk7XG5cdFx0fVxuXHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+IGZ1bmN0aW9uIGZvciBhIGNlcnRhaW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0fSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHJldHVybnMge29iamVjdH0gQSBwbGFpbiBvYmplY3Qgd2l0aCBvbmUgZnVuY3Rpb246IDxjb2RlPnJlZnJlc2hCaW5kaW5nPC9jb2RlPlxuXHQgKi9cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldENvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIob0NvbnRyb2w6IGFueSk6IGFueSB7XG5cdFx0Y29uc3Qgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcjogYW55ID0ge307XG5cdFx0aWYgKG9Db250cm9sKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNUeXBlIGluIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCkge1xuXHRcdFx0XHRpZiAob0NvbnRyb2wuaXNBKHNUeXBlKSkge1xuXHRcdFx0XHRcdC8vIHBhc3Mgb25seSB0aGUgcmVmcmVzaEJpbmRpbmcgaGFuZGxlciBpbiBhbiBvYmplY3Qgc28gdGhhdCA6XG5cdFx0XHRcdFx0Ly8gMS4gQXBwbGljYXRpb24gaGFzIGFjY2VzcyBvbmx5IHRvIHJlZnJlc2hCaW5kaW5nIGFuZCBub3QgYXBwbHkgYW5kIHJldGVyaXZlIGF0IHRoaXMgc3RhZ2Vcblx0XHRcdFx0XHQvLyAyLiBBcHBsaWNhdGlvbiBtb2RpZmljYXRpb25zIHRvIHRoZSBvYmplY3Qgd2lsbCBiZSByZWZsZWN0ZWQgaGVyZSAoYXMgd2UgcGFzcyBieSByZWZlcmVuY2UpXG5cdFx0XHRcdFx0b1JlZnJlc2hCaW5kaW5nSGFuZGxlcltcInJlZnJlc2hCaW5kaW5nXCJdID0gX21Db250cm9sU3RhdGVIYW5kbGVyTWFwW3NUeXBlXS5yZWZyZXNoQmluZGluZyB8fCB7fTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyKG9Db250cm9sLCBvUmVmcmVzaEJpbmRpbmdIYW5kbGVyKTtcblx0XHRyZXR1cm4gb1JlZnJlc2hCaW5kaW5nSGFuZGxlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDdXN0b21pemUgdGhlIDxjb2RlPnJlZnJlc2hCaW5kaW5nPC9jb2RlPiBmdW5jdGlvbiBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgY29udHJvbCBmb3Igd2hpY2ggdGhlIHJlZnJlc2ggaGFuZGxlciBpcyBhZGFwdGVkLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2xIYW5kbGVyIEEgcGxhaW4gb2JqZWN0IHdoaWNoIGNhbiBoYXZlIG9uZSBmdW5jdGlvbjogPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+XG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYWRhcHRCaW5kaW5nUmVmcmVzaEhhbmRsZXJcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBvQ29udHJvbEhhbmRsZXI6IGFueVtdKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIHN1c3BlbmRlZCBkdWUgdG8ga2VlcC1hbGl2ZSBtb2RlLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI29uU3VzcGVuZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uU3VzcGVuZCgpIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgcmVzdG9yZWQgZHVlIHRvIGtlZXAtYWxpdmUgbW9kZS5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNvblJlc3RvcmVcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblJlc3RvcmUoKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJ1Y3RvciBtZXRob2QgZm9yIG9iamVjdHMuXG5cdCAqL1xuXHRkZXN0cm95KCkge1xuXHRcdGRlbGV0ZSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0c3VwZXIuZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBmdW5jdGlvbiB0byBlbmFibGUgbXVsdGkgb3ZlcnJpZGUuIEl0IGlzIGFkZGluZyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciAoYXJyYXkpIHRvIHRoZSBwcm92aWRlZFxuXHQgKiBmdW5jdGlvbiAoYW5kIGl0cyBwYXJhbWV0ZXJzKSwgdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCB2aWEgPGNvZGU+UHJvbWlzZS5hbGw8L2NvZGU+LlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5DYWxsIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcblx0ICogQHBhcmFtIGFyZ3Ncblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJlc29sdmVkIHdpdGggdGhlIHJlc3VsdCBvZiBhbGwgb3ZlcnJpZGVzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGNvbGxlY3RSZXN1bHRzKGZuQ2FsbDogRnVuY3Rpb24sIC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0Y29uc3QgYVJlc3VsdHM6IGFueVtdID0gW107XG5cdFx0YXJncy5wdXNoKGFSZXN1bHRzKTtcblx0XHRmbkNhbGwuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXN1bHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDdXN0b21pemUgdGhlIDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+IGZ1bmN0aW9ucyBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHBhcmFtIGFDb250cm9sSGFuZGxlciBBIGxpc3Qgb2YgcGxhaW4gb2JqZWN0cyB3aXRoIHR3byBmdW5jdGlvbnM6IDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+XG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhZGFwdENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsIGFDb250cm9sSGFuZGxlcjogb2JqZWN0W10pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgPGNvZGU+cmV0cmlldmU8L2NvZGU+IGFuZCA8Y29kZT5hcHBseTwvY29kZT4gZnVuY3Rpb25zIGZvciBhIGNlcnRhaW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBoYW5kbGVyIGZvclxuXHQgKiBAcmV0dXJucyBBIHBsYWluIG9iamVjdCB3aXRoIHR3byBmdW5jdGlvbnM6IDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+XG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2w6IGFueSkge1xuXHRcdGNvbnN0IGFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIgPSBbXSxcblx0XHRcdGFDdXN0b21Db250cm9sU3RhdGVIYW5kbGVyOiBhbnlbXSA9IFtdO1xuXHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0Zm9yIChjb25zdCBzVHlwZSBpbiBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXApIHtcblx0XHRcdFx0aWYgKG9Db250cm9sLmlzQShzVHlwZSkpIHtcblx0XHRcdFx0XHQvLyBhdm9pZCBkaXJlY3QgbWFuaXB1bGF0aW9uIG9mIGludGVybmFsIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcFxuXHRcdFx0XHRcdGFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIucHVzaChPYmplY3QuYXNzaWduKHt9LCBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXBbc1R5cGVdKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wsIGFDdXN0b21Db250cm9sU3RhdGVIYW5kbGVyKTtcblx0XHRyZXR1cm4gYUludGVybmFsQ29udHJvbFN0YXRlSGFuZGxlci5jb25jYXQoYUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFkZCBhbGwgY29udHJvbHMgZm9yIGdpdmVuIHZpZXcgdGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgdGhlIHN0YXRlIGhhbmRsaW5nIHRvIHRoZSBwcm92aWRlZCBjb250cm9sIGFycmF5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gYUNvbGxlY3RlZENvbnRyb2xzIFRoZSBjb2xsZWN0ZWQgY29udHJvbHNcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNhZGFwdFN0YXRlQ29udHJvbHNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFkYXB0U3RhdGVDb250cm9scyhhQ29sbGVjdGVkQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUga2V5IHRvIGJlIHVzZWQgZm9yIGdpdmVuIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUga2V5IGZvclxuXHQgKiBAcmV0dXJucyBUaGUga2V5IHRvIGJlIHVzZWQgZm9yIHN0b3JpbmcgdGhlIGNvbnRyb2xzIHN0YXRlXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0U3RhdGVLZXkob0NvbnRyb2w6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRMb2NhbElkKG9Db250cm9sLmdldElkKCkpIHx8IG9Db250cm9sLmdldElkKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHZpZXcgc3RhdGUgb2YgdGhpcyBleHRlbnNpb25zIHZpZXcuXG5cdCAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgYmVmb3JlIGZpbmlzaGluZywgYWxsIGJ1dCB0aGUgZmluYWwgcmVzcG9uc2Ugd2lsbCByZXNvbHZlIHRvIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4uXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdGhlIHZpZXcgc3RhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNyZXRyaWV2ZVZpZXdTdGF0ZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgcmV0cmlldmVWaWV3U3RhdGUoKSB7XG5cdFx0Kyt0aGlzLl9pUmV0cmlldmluZ1N0YXRlQ291bnRlcjtcblx0XHRsZXQgb1ZpZXdTdGF0ZTogYW55O1xuXG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkO1xuXHRcdFx0Y29uc3QgYUNvbnRyb2xzOiAoTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZClbXSA9IGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdFN0YXRlQ29udHJvbHMpO1xuXHRcdFx0Y29uc3QgYVJlc29sdmVkU3RhdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdGFDb250cm9sc1xuXHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdFwiKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5tYXAoKG9Db250cm9sOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnJldHJpZXZlQ29udHJvbFN0YXRlKG9Db250cm9sKS50aGVuKCh2UmVzdWx0OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRrZXk6IHRoaXMuZ2V0U3RhdGVLZXkob0NvbnRyb2wpLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB2UmVzdWx0XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRcdG9WaWV3U3RhdGUgPSBhUmVzb2x2ZWRTdGF0ZXMucmVkdWNlKGZ1bmN0aW9uIChvU3RhdGVzOiBhbnksIG1TdGF0ZTogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9DdXJyZW50U3RhdGU6IGFueSA9IHt9O1xuXHRcdFx0XHRvQ3VycmVudFN0YXRlW21TdGF0ZS5rZXldID0gbVN0YXRlLnZhbHVlO1xuXHRcdFx0XHRyZXR1cm4gbWVyZ2VPYmplY3RzKG9TdGF0ZXMsIG9DdXJyZW50U3RhdGUpO1xuXHRcdFx0fSwge30pO1xuXHRcdFx0Y29uc3QgbUFkZGl0aW9uYWxTdGF0ZXMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUodGhpcy5fcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKCkpO1xuXHRcdFx0aWYgKG1BZGRpdGlvbmFsU3RhdGVzICYmIE9iamVjdC5rZXlzKG1BZGRpdGlvbmFsU3RhdGVzKS5sZW5ndGgpIHtcblx0XHRcdFx0b1ZpZXdTdGF0ZVtBRERJVElPTkFMX1NUQVRFU19LRVldID0gbUFkZGl0aW9uYWxTdGF0ZXM7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdC0tdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyID09PSAwID8gb1ZpZXdTdGF0ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHRlbmQgdGhlIG1hcCBvZiBhZGRpdGlvbmFsIHN0YXRlcyAobm90IGNvbnRyb2wgYm91bmQpIHRvIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IHZpZXcgc3RhdGUgb2YgdGhlIGdpdmVuIHZpZXcuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBtQWRkaXRpb25hbFN0YXRlcyBUaGUgYWRkaXRpb25hbCBzdGF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI3JldHJpZXZlQWRkaXRpb25hbFN0YXRlc1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKG1BZGRpdGlvbmFsU3RhdGVzOiBvYmplY3QpIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgYWRkaXRpb25hbCBzdGF0ZXMgKG5vdCBjb250cm9sIGJvdW5kKSB0byBiZSBhZGRlZCB0byB0aGUgY3VycmVudCB2aWV3IHN0YXRlIG9mIHRoZSBnaXZlbiB2aWV3LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBBZGRpdGlvbmFsIHZpZXcgc3RhdGVzXG5cdCAqL1xuXHRfcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKCkge1xuXHRcdGNvbnN0IG1BZGRpdGlvbmFsU3RhdGVzID0ge307XG5cdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5yZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMobUFkZGl0aW9uYWxTdGF0ZXMpO1xuXHRcdHJldHVybiBtQWRkaXRpb25hbFN0YXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBvYmplY3QgdG8gZ2V0IHRoZSBzdGF0ZSBmb3Jcblx0ICogQHJldHVybnMgVGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29udHJvbFxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29udHJvbDogYW55KSB7XG5cdFx0Y29uc3QgYUNvbnRyb2xTdGF0ZUhhbmRsZXJzID0gdGhpcy5nZXRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRhQ29udHJvbFN0YXRlSGFuZGxlcnMubWFwKChtQ29udHJvbFN0YXRlSGFuZGxlcjogYW55KSA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2YgbUNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY29udHJvbFN0YXRlSGFuZGxlci5yZXRyaWV2ZSBpcyBub3QgYSBmdW5jdGlvbiBmb3IgY29udHJvbDogJHtvQ29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbUNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUuY2FsbCh0aGlzLCBvQ29udHJvbCk7XG5cdFx0XHR9KVxuXHRcdCkudGhlbigoYVN0YXRlczogYW55W10pID0+IHtcblx0XHRcdHJldHVybiBhU3RhdGVzLnJlZHVjZShmdW5jdGlvbiAob0ZpbmFsU3RhdGU6IGFueSwgb0N1cnJlbnRTdGF0ZTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBtZXJnZU9iamVjdHMob0ZpbmFsU3RhdGUsIG9DdXJyZW50U3RhdGUpO1xuXHRcdFx0fSwge30pO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciB0aGUgdmlldyBzdGF0ZSBzaG91bGQgb25seSBiZSBhcHBsaWVkIG9uY2UgaW5pdGlhbGx5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZH0uXG5cdCAqXG5cdCAqIEltcG9ydGFudDpcblx0ICogWW91IHNob3VsZCBvbmx5IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGZvciBjdXN0b20gcGFnZXMgYW5kIG5vdCBmb3IgdGhlIHN0YW5kYXJkIExpc3RSZXBvcnRQYWdlIGFuZCBPYmplY3RQYWdlIVxuXHQgKlxuXHQgKiBAcmV0dXJucyBJZiA8Y29kZT50cnVlPC9jb2RlPiwgb25seSB0aGUgaW5pdGlhbCB2aWV3IHN0YXRlIGlzIGFwcGxpZWQgb25jZSxcblx0ICogZWxzZSBhbnkgbmV3IHZpZXcgc3RhdGUgaXMgYWxzbyBhcHBsaWVkIG9uIGZvbGxvdy11cCBjYWxscyAoZGVmYXVsdClcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNhcHBseUluaXRpYWxTdGF0ZU9ubHlcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdGFwcGx5SW5pdGlhbFN0YXRlT25seSgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIHRoZSBnaXZlbiB2aWV3IHN0YXRlIHRvIHRoaXMgZXh0ZW5zaW9ucyB2aWV3LlxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZpZXdTdGF0ZSBUaGUgdmlldyBzdGF0ZSB0byBhcHBseSAoY2FuIGJlIHVuZGVmaW5lZClcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIgVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUgVGhlIGFjdHVhbCBuYXZpZ2F0aW9uIHR5cGVcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudCBUaGUgc2VsZWN0aW9uVmFyaWFudCBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnREZWZhdWx0cyBUaGUgc2VsZWN0aW9uVmFyaWFudCBkZWZhdWx0cyBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLnJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IERlZmluZXMgd2hldGhlciB0aGUgc3RhbmRhcmQgdmFyaWFudCBtdXN0IGJlIHVzZWQgaW4gdmFyaWFudCBtYW5hZ2VtZW50XG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jIHN0YXRlIGhhbmRsaW5nXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYXBwbHlWaWV3U3RhdGVcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGFwcGx5Vmlld1N0YXRlKG9WaWV3U3RhdGU6IGFueSwgb05hdlBhcmFtZXRlcjogTmF2aWdhdGlvblBhcmFtZXRlcik6IFByb21pc2U8YW55PiB7XG5cdFx0aWYgKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlJbml0aWFsU3RhdGVPbmx5KCkgJiYgdGhpcy5fZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5vbkJlZm9yZVN0YXRlQXBwbGllZCk7XG5cdFx0XHRjb25zdCBhQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSA9IGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdFN0YXRlQ29udHJvbHMpO1xuXHRcdFx0dGhpcy52aWV3U3RhdGVDb250cm9scyA9IGFDb250cm9scztcblx0XHRcdGxldCBvUHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRsZXQgaGFzVmFyaWFudE1hbmFnZW1lbnQgPSBmYWxzZTtcblx0XHRcdC8qKlxuXHRcdFx0ICogdGhpcyBlbnN1cmVzIHRoYXQgdmFyaWFudE1hbmFnZW1lbnQgY29udHJvbCBpcyBhcHBsaWVkIGZpcnN0IHRvIGNhbGN1bGF0ZSBpbml0aWFsIHN0YXRlIGZvciBkZWx0YSBsb2dpY1xuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBzb3J0ZWRBZGFwdFN0YXRlQ29udHJvbHMgPSBhQ29udHJvbHMucmVkdWNlKChtb2RpZmllZENvbnRyb2xzOiBNYW5hZ2VkT2JqZWN0W10sIGNvbnRyb2wpID0+IHtcblx0XHRcdFx0aWYgKCFjb250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1vZGlmaWVkQ29udHJvbHM7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgaXNWYXJpYW50TWFuYWdlbWVudENvbnRyb2wgPSBjb250cm9sLmlzQShcInNhcC51aS5mbC52YXJpYW50cy5WYXJpYW50TWFuYWdlbWVudFwiKTtcblx0XHRcdFx0aWYgKCFoYXNWYXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0XHRcdGhhc1ZhcmlhbnRNYW5hZ2VtZW50ID0gaXNWYXJpYW50TWFuYWdlbWVudENvbnRyb2w7XG5cdFx0XHRcdH1cblx0XHRcdFx0bW9kaWZpZWRDb250cm9scyA9IGlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sID8gW2NvbnRyb2wsIC4uLm1vZGlmaWVkQ29udHJvbHNdIDogWy4uLm1vZGlmaWVkQ29udHJvbHMsIGNvbnRyb2xdO1xuXHRcdFx0XHRyZXR1cm4gbW9kaWZpZWRDb250cm9scztcblx0XHRcdH0sIFtdKTtcblxuXHRcdFx0Ly8gSW4gY2FzZSBvZiBubyBWYXJpYW50IE1hbmFnZW1lbnQsIHRoaXMgZW5zdXJlcyB0aGF0IGluaXRpYWwgc3RhdGVzIGlzIHNldFxuXHRcdFx0aWYgKCFoYXNWYXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0XHR0aGlzLl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHNvcnRlZEFkYXB0U3RhdGVDb250cm9sc1xuXHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBvQ29udHJvbC5pc0EoXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZm9yRWFjaCgob0NvbnRyb2wpID0+IHtcblx0XHRcdFx0XHRjb25zdCBzS2V5ID0gdGhpcy5nZXRTdGF0ZUtleShvQ29udHJvbCk7XG5cdFx0XHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihcblx0XHRcdFx0XHRcdHRoaXMuYXBwbHlDb250cm9sU3RhdGUuYmluZCh0aGlzLCBvQ29udHJvbCwgb1ZpZXdTdGF0ZSA/IG9WaWV3U3RhdGVbc0tleV0gOiB1bmRlZmluZWQsIG9OYXZQYXJhbWV0ZXIpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGF3YWl0IG9Qcm9taXNlQ2hhaW47XG5cdFx0XHRpZiAob05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSA9PT0gTmF2VHlwZS5pQXBwU3RhdGUpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyhcblx0XHRcdFx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFwcGx5QWRkaXRpb25hbFN0YXRlcyxcblx0XHRcdFx0XHRvVmlld1N0YXRlID8gb1ZpZXdTdGF0ZVtBRERJVElPTkFMX1NUQVRFU19LRVldIDogdW5kZWZpbmVkXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycywgb05hdlBhcmFtZXRlcik7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5fYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVyc1RvRmlsdGVyYmFyLCBvTmF2UGFyYW1ldGVyKTtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLm9uQWZ0ZXJTdGF0ZUFwcGxpZWQpO1xuXHRcdFx0XHR0aGlzLl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkKCk7XG5cdFx0XHR9IGNhdGNoIChlOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0X2NoZWNrSWZWYXJpYW50SWRJc0F2YWlsYWJsZShvVk06IGFueSwgc1ZhcmlhbnRJZDogYW55KSB7XG5cdFx0Y29uc3QgYVZhcmlhbnRzID0gb1ZNLmdldFZhcmlhbnRzKCk7XG5cdFx0bGV0IGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUgPSBmYWxzZTtcblx0XHRhVmFyaWFudHMuZm9yRWFjaChmdW5jdGlvbiAob1ZhcmlhbnQ6IGFueSkge1xuXHRcdFx0aWYgKG9WYXJpYW50LmtleSA9PT0gc1ZhcmlhbnRJZCkge1xuXHRcdFx0XHRiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZTtcblx0fVxuXG5cdF9zZXRJbml0aWFsU3RhdGVBcHBsaWVkKCkge1xuXHRcdGlmICh0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUpIHtcblx0XHRcdGNvbnN0IHBJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSA9IHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZTtcblx0XHRcdGRlbGV0ZSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0XHRwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpIHtcblx0XHRyZXR1cm4gIXRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IGJlZm9yZSBhIHN0YXRlIGZvciBnaXZlbiB2aWV3IGlzIGFwcGxpZWQuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI29uQmVmb3JlU3RhdGVBcHBsaWVkXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkJlZm9yZVN0YXRlQXBwbGllZChhUHJvbWlzZXM6IFByb21pc2U8YW55Pikge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gcmVhY3Qgd2hlbiBzdGF0ZSBmb3IgZ2l2ZW4gdmlldyB3YXMgYXBwbGllZC5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIGFQcm9taXNlcyBFeHRlbnNpYmxlIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjb25BZnRlclN0YXRlQXBwbGllZFxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25BZnRlclN0YXRlQXBwbGllZChhUHJvbWlzZXM6IFByb21pc2U8YW55Pikge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5aW5nIGFkZGl0aW9uYWwsIG5vdCBjb250cm9sIHJlbGF0ZWQsIHN0YXRlcyAtIGlzIGNhbGxlZCBvbmx5IGlmIG5hdmlnYXRpb24gdHlwZSBpcyBpQXBwU3RhdGUuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvVmlld1N0YXRlIFRoZSBjdXJyZW50IHZpZXcgc3RhdGVcblx0ICogQHBhcmFtIGFQcm9taXNlcyBFeHRlbnNpYmxlIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYXBwbHlBZGRpdGlvbmFsU3RhdGVzXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhcHBseUFkZGl0aW9uYWxTdGF0ZXMob1ZpZXdTdGF0ZTogb2JqZWN0LCBhUHJvbWlzZXM6IFByb21pc2U8YW55Pikge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdF9hcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzVG9GaWx0ZXJiYXIoXG5cdFx0X29OYXZQYXJhbWV0ZXI6IHtcblx0XHRcdG5hdmlnYXRpb25UeXBlOiBhbnk7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50Pzogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudERlZmF1bHRzPzogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdH0sXG5cdFx0X2FQcm9taXNlczogUHJvbWlzZTxhbnk+XG5cdCkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogQXBwbHkgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGlzIG5vdCBjYWxsZWQgaWYgdGhlIG5hdmlnYXRpb24gdHlwZSBpcyBpQXBwU3RhdGVcblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIgVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUgVGhlIGFjdHVhbCBuYXZpZ2F0aW9uIHR5cGVcblx0ICogQHBhcmFtIFtvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnRdIFRoZSBzZWxlY3Rpb25WYXJpYW50IGZyb20gdGhlIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIFtvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnREZWZhdWx0c10gVGhlIHNlbGVjdGlvblZhcmlhbnQgZGVmYXVsdHMgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW29OYXZQYXJhbWV0ZXIucmVxdWlyZXNTdGFuZGFyZFZhcmlhbnRdIERlZmluZXMgd2hldGhlciB0aGUgc3RhbmRhcmQgdmFyaWFudCBtdXN0IGJlIHVzZWQgaW4gdmFyaWFudCBtYW5hZ2VtZW50XG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzKFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRvTmF2UGFyYW1ldGVyOiB7XG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogYW55O1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudD86IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnREZWZhdWx0cz86IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0XHRcdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHR9LFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRhUHJvbWlzZXM6IFByb21pc2U8YW55PlxuXHQpIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5aW5nIHRoZSBnaXZlbiBzdGF0ZSB0byB0aGUgZ2l2ZW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBvYmplY3QgdG8gYXBwbHkgdGhlIGdpdmVuIHN0YXRlXG5cdCAqIEBwYXJhbSBvQ29udHJvbFN0YXRlIFRoZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRyb2xcblx0ICogQHBhcmFtIFtvTmF2UGFyYW1ldGVyc10gVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIFJldHVybiBhIHByb21pc2UgZm9yIGFzeW5jIHN0YXRlIGhhbmRsaW5nXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFwcGx5Q29udHJvbFN0YXRlKG9Db250cm9sOiBhbnksIG9Db250cm9sU3RhdGU6IG9iamVjdCwgb05hdlBhcmFtZXRlcnM/OiBvYmplY3QpIHtcblx0XHRjb25zdCBhQ29udHJvbFN0YXRlSGFuZGxlcnMgPSB0aGlzLmdldENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wpO1xuXHRcdGxldCBvUHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0YUNvbnRyb2xTdGF0ZUhhbmRsZXJzLmZvckVhY2goKG1Db250cm9sU3RhdGVIYW5kbGVyOiBhbnkpID0+IHtcblx0XHRcdGlmICh0eXBlb2YgbUNvbnRyb2xTdGF0ZUhhbmRsZXIuYXBwbHkgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNvbnRyb2xTdGF0ZUhhbmRsZXIuYXBwbHkgaXMgbm90IGEgZnVuY3Rpb24gZm9yIGNvbnRyb2w6ICR7b0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0XHR9XG5cdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKG1Db250cm9sU3RhdGVIYW5kbGVyLmFwcGx5LmJpbmQodGhpcywgb0NvbnRyb2wsIG9Db250cm9sU3RhdGUsIG9OYXZQYXJhbWV0ZXJzKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9Qcm9taXNlQ2hhaW47XG5cdH1cblxuXHRnZXRJbnRlcmZhY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvLyBtZXRob2QgdG8gZ2V0IHRoZSBjb250cm9sIHN0YXRlIGZvciBtZGMgY29udHJvbHMgYXBwbHlpbmcgdGhlIGRlbHRhIGxvZ2ljXG5cdF9nZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlS2V5OiBzdHJpbmcsIGNvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlKSB7XG5cdFx0Y29uc3QgaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXIgPSB0aGlzLmluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyO1xuXHRcdGlmIChPYmplY3Qua2V5cyhpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcikubGVuZ3RoID4gMCAmJiBpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sU3RhdGVLZXldKSB7XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMoaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbFN0YXRlS2V5XSBhcyBvYmplY3QpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sU3RhdGVLZXldID0geyAuLi5jb250cm9sU3RhdGUgfTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7IGZ1bGxTdGF0ZTogY29udHJvbFN0YXRlLCBpbml0aWFsU3RhdGU6IGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0gfTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xTdGF0ZTtcblx0fVxuXG5cdC8vbWV0aG9kIHRvIHN0b3JlIHRoZSBpbml0aWFsIHN0YXRlcyBmb3IgZGVsdGEgY29tcHV0YXRpb24gb2YgbWRjIGNvbnRyb2xzXG5cdF9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlID0gYXN5bmMgKHZhcmlhbnRNYW5hZ2VtZW50PzogVmFyaWFudE1hbmFnZW1lbnQpID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgYWRhcHRDb250cm9scyA9IHRoaXMudmlld1N0YXRlQ29udHJvbHM7XG5cblx0XHRcdGNvbnN0IGV4dGVybmFsU3RhdGVQcm9taXNlczogUHJvbWlzZTxvYmplY3Q+W10gPSBbXTtcblx0XHRcdGNvbnN0IGNvbnRyb2xTdGF0ZUtleTogc3RyaW5nW10gPSBbXTtcblx0XHRcdGxldCBpbml0aWFsQ29udHJvbFN0YXRlczogb2JqZWN0W10gPSBbXTtcblx0XHRcdGNvbnN0IHZhcmlhbnRDb250cm9sczogc3RyaW5nW10gPSB2YXJpYW50TWFuYWdlbWVudD8uZ2V0Rm9yKCkgPz8gW107XG5cblx0XHRcdGFkYXB0Q29udHJvbHNcblx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoY29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRjb250cm9sICYmXG5cdFx0XHRcdFx0XHQoIXZhcmlhbnRNYW5hZ2VtZW50IHx8IHZhcmlhbnRDb250cm9scy5pbmRleE9mKGNvbnRyb2wuZ2V0SWQoKSkgPiAtMSkgJiZcblx0XHRcdFx0XHRcdChjb250cm9sLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgfHxcblx0XHRcdFx0XHRcdFx0KGNvbnRyb2wgYXMgQmFzZU9iamVjdCkuaXNBKFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIikgfHxcblx0XHRcdFx0XHRcdFx0KGNvbnRyb2wgYXMgQmFzZU9iamVjdCkuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnNUb1ZhcmlhbnRNYW5hZ2VtZW50KHZhcmlhbnRNYW5hZ2VtZW50LCB2YXJpYW50Q29udHJvbHMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsU3RhdGVQcm9taXNlID0gU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShjb250cm9sIGFzIG9iamVjdCk7XG5cdFx0XHRcdFx0ZXh0ZXJuYWxTdGF0ZVByb21pc2VzLnB1c2goZXh0ZXJuYWxTdGF0ZVByb21pc2UpO1xuXHRcdFx0XHRcdGNvbnRyb2xTdGF0ZUtleS5wdXNoKHRoaXMuZ2V0U3RhdGVLZXkoY29udHJvbCkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0aW5pdGlhbENvbnRyb2xTdGF0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChleHRlcm5hbFN0YXRlUHJvbWlzZXMpO1xuXHRcdFx0aW5pdGlhbENvbnRyb2xTdGF0ZXMuZm9yRWFjaCgoaW5pdGlhbENvbnRyb2xTdGF0ZTogb2JqZWN0LCBpOiBudW1iZXIpID0+IHtcblx0XHRcdFx0dGhpcy5pbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sU3RhdGVLZXlbaV1dID0gaW5pdGlhbENvbnRyb2xTdGF0ZTtcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIEF0dGFjaCBldmVudCB0byBzYXZlIGFuZCBzZWxlY3Qgb2YgVmFyaWFudCBNYW5hZ2VtZW50IHRvIHVwZGF0ZSB0aGUgaW5pdGlhbCBDb250cm9sIFN0YXRlcyBvbiB2YXJpYW50IGNoYW5nZVxuXHRfYWRkRXZlbnRMaXN0ZW5lcnNUb1ZhcmlhbnRNYW5hZ2VtZW50KHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCwgdmFyaWFudENvbnRyb2xzOiBzdHJpbmdbXSkge1xuXHRcdGNvbnN0IG9QYXlsb2FkID0geyB2YXJpYW50TWFuYWdlZENvbnRyb2xzOiB2YXJpYW50Q29udHJvbHMgfTtcblx0XHRjb25zdCBmbkV2ZW50ID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5fdXBkYXRlSW5pdGlhbFN0YXRlc09uVmFyaWFudENoYW5nZSh2YXJpYW50Q29udHJvbHMpO1xuXHRcdH07XG5cdFx0dmFyaWFudE1hbmFnZW1lbnQuYXR0YWNoU2F2ZShvUGF5bG9hZCwgZm5FdmVudCwge30pO1xuXHRcdHZhcmlhbnRNYW5hZ2VtZW50LmF0dGFjaFNlbGVjdChvUGF5bG9hZCwgZm5FdmVudCwge30pO1xuXHR9XG5cblx0X3VwZGF0ZUluaXRpYWxTdGF0ZXNPblZhcmlhbnRDaGFuZ2Uodm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0OiBzdHJpbmdbXSkge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcjtcblx0XHRPYmplY3Qua2V5cyhpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcikuZm9yRWFjaCgoY29udHJvbEtleSkgPT4ge1xuXHRcdFx0Zm9yIChjb25zdCB2bUFzc29jaWF0ZWRjb250cm9sS2V5IG9mIHZtQXNzb2NpYXRlZENvbnRyb2xzVG9SZXNldCkge1xuXHRcdFx0XHRpZiAodm1Bc3NvY2lhdGVkY29udHJvbEtleS5pbmRleE9mKGNvbnRyb2xLZXkpID4gLTEpIHtcblx0XHRcdFx0XHRpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sS2V5XSA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlld1N0YXRlO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7O0VBc0JBO0VBQ0E7RUFDQTtFQUNBLE1BQU1BLHFCQUFxQixHQUFHLG1CQUFtQjtJQUNoREMsT0FBTyxHQUFHQyxVQUFVLENBQUNELE9BQU87O0VBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUF5Q0E7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
926
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBRERJVElPTkFMX1NUQVRFU19LRVkiLCJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIl9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCIsInJldHJpZXZlIiwib1ZNIiwidmFyaWFudElkIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJhcHBseSIsImNvbnRyb2xTdGF0ZSIsInVuZGVmaW5lZCIsImlzVmFyaWFudElkQXZhaWxhYmxlIiwiX2NoZWNrSWZWYXJpYW50SWRJc0F2YWlsYWJsZSIsInNWYXJpYW50UmVmZXJlbmNlIiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiY29udHJvbHNWYXJpYW50SWRVbmF2YWlsYWJsZSIsInB1c2giLCJnZXRGb3IiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJfc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZSIsImVycm9yIiwiTG9nIiwiaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5Iiwib1RhYkJhciIsInNlbGVjdGVkS2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJvQ29udHJvbFN0YXRlIiwib1NlbGVjdGVkSXRlbSIsImdldEl0ZW1zIiwiZmluZCIsIm9JdGVtIiwiZ2V0S2V5Iiwic2V0U2VsZWN0ZWRJdGVtIiwiZmlsdGVyQmFyIiwiY29udHJvbFN0YXRlS2V5IiwiZ2V0U3RhdGVLZXkiLCJmaWx0ZXJCYXJTdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsInByb3BlcnRpZXNJbmZvIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwiZmlsdGVyIiwiUHJvcGVydHlJbmZvIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInBhdGgiLCJyZW1vdmVGcm9tQXBwU3RhdGUiLCJmb3JFYWNoIiwiX2dldENvbnRyb2xTdGF0ZSIsIm5hdlBhcmFtZXRlciIsImlzSW5pdGlhbFN0YXRlQXBwbGljYWJsZSIsIl9pc0luaXRpYWxTdGF0ZXNBcHBsaWNhYmxlIiwiaW5pdGlhbFN0YXRlIiwibmF2aWdhdGlvblR5cGUiLCJoeWJyaWQiLCJmdWxsU3RhdGUiLCJmaWx0ZXJCYXJQcm9wZXJ0eUluZm9zIiwiU2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzIiwiZ2V0RmlsdGVyQmFyU3VwcG9ydGVkRmllbGRzIiwiZmlsdGVyQmFySW5mb0ZvckNvbnZlcnNpb24iLCJnZXRGaWx0ZXJCYXJJbmZvRm9yQ29udmVyc2lvbiIsInhBcHBTdGF0ZUZpbHRlcnMiLCJnZXRDb25kaXRpb25zRnJvbVNWIiwic2VsZWN0aW9uVmFyaWFudCIsIm1lcmdlZEZ1bGxTdGF0ZSIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsImRpZmZTdGF0ZSIsInRhYmxlIiwidGFibGVTdGF0ZSIsIm5hdlBhcmFtZXRlcnMiLCJzdXBwbGVtZW50YXJ5Q29uZmlnIiwib0RpZmZTdGF0ZSIsInJlZnJlc2hCaW5kaW5nIiwib1RhYmxlIiwib1RhYmxlQmluZGluZyIsImdldFJvd0JpbmRpbmciLCJvUm9vdEJpbmRpbmciLCJnZXRSb290QmluZGluZyIsInJlZnJlc2giLCJvSGVhZGVyQ29udGV4dCIsImdldEhlYWRlckNvbnRleHQiLCJzR3JvdXBJZCIsImdldEdyb3VwSWQiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImluZm8iLCJnZXRJZCIsIm9DaGFydCIsIm9PUExheW91dCIsInNlbGVjdGVkU2VjdGlvbiIsImdldFNlbGVjdGVkU2VjdGlvbiIsInNldFNlbGVjdGVkU2VjdGlvbiIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib0JpbmRpbmciLCJnZXRCaW5kaW5nIiwic01ldGFQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJzU3RyYXRlZ3kiLCJLZWVwQWxpdmVIZWxwZXIiLCJnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvTmF2aWdhdGlvblByb3BlcnRpZXMiLCJDb21tb25VdGlscyIsImdldENvbnRleHRQYXRoUHJvcGVydGllcyIsIiRraW5kIiwiYU5hdlByb3BlcnRpZXNUb1JlcXVlc3QiLCJyZWR1Y2UiLCJhUHJldiIsInNOYXZQcm9wIiwiJGlzQ29sbGVjdGlvbiIsImFQcm9wZXJ0aWVzIiwiJFByb3BlcnR5UGF0aCIsImNvbmNhdCIsIm9TZWdtZW50ZWRCdXR0b24iLCJzZXRTZWxlY3RlZEtleSIsImdldFBhcmVudCIsImlzQSIsImZpcmVFdmVudCIsIm9TZWxlY3QiLCJvRHluYW1pY1BhZ2UiLCJoZWFkZXJFeHBhbmRlZCIsImdldEhlYWRlckV4cGFuZGVkIiwic2V0SGVhZGVyRXhwYW5kZWQiLCJvVmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsInJldHJpZXZlVmlld1N0YXRlIiwib05hdlBhcmFtZXRlcnMiLCJhcHBseVZpZXdTdGF0ZSIsInJlZnJlc2hWaWV3QmluZGluZ3MiLCJvQ29tcG9uZW50Q29udGFpbmVyIiwib0NvbXBvbmVudCIsImdldENvbXBvbmVudEluc3RhbmNlIiwicmV0cmlldmVDb250cm9sU3RhdGUiLCJnZXRSb290Q29udHJvbCIsImFwcGx5Q29udHJvbFN0YXRlIiwiVmlld1N0YXRlIiwiZGVmaW5lVUk1Q2xhc3MiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwicHJpdmF0ZUV4dGVuc2lvbiIsIkluc3RlYWQiLCJpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlciIsInZpZXdTdGF0ZUNvbnRyb2xzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJhZGFwdENvbnRyb2xzIiwiZXh0ZXJuYWxTdGF0ZVByb21pc2VzIiwiaW5pdGlhbENvbnRyb2xTdGF0ZXMiLCJ2YXJpYW50Q29udHJvbHMiLCJjb250cm9sIiwiaW5kZXhPZiIsIl9hZGRFdmVudExpc3RlbmVyc1RvVmFyaWFudE1hbmFnZW1lbnQiLCJleHRlcm5hbFN0YXRlUHJvbWlzZSIsIlByb21pc2UiLCJhbGwiLCJpbml0aWFsQ29udHJvbFN0YXRlIiwiaSIsImUiLCJfaVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIiLCJfcEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJyZXNvbHZlIiwiX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSIsImFDb250cm9scyIsImNvbGxlY3RSZXN1bHRzIiwiYmFzZSIsImFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyIsIm9Qcm9taXNlQ2hhaW4iLCJvQ29udHJvbCIsInRoZW4iLCJyZWZyZXNoQ29udHJvbEJpbmRpbmciLCJiaW5kIiwiYUNvbGxlY3RlZENvbnRyb2xzIiwib0NvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIiLCJnZXRDb250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwib1JlZnJlc2hCaW5kaW5nSGFuZGxlciIsInNUeXBlIiwiYWRhcHRCaW5kaW5nUmVmcmVzaEhhbmRsZXIiLCJvQ29udHJvbEhhbmRsZXIiLCJvblN1c3BlbmQiLCJvblJlc3RvcmUiLCJkZXN0cm95IiwiZm5DYWxsIiwiYVJlc3VsdHMiLCJhcmdzIiwiYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyIiwiYUNvbnRyb2xIYW5kbGVyIiwiZ2V0Q29udHJvbFN0YXRlSGFuZGxlciIsImFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlciIsImFzc2lnbiIsImFkYXB0U3RhdGVDb250cm9scyIsImdldFZpZXciLCJnZXRMb2NhbElkIiwib1ZpZXdTdGF0ZSIsImFSZXNvbHZlZFN0YXRlcyIsIm1hcCIsInZSZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsIm9TdGF0ZXMiLCJtU3RhdGUiLCJvQ3VycmVudFN0YXRlIiwibWVyZ2VPYmplY3RzIiwibUFkZGl0aW9uYWxTdGF0ZXMiLCJfcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwicmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwiYUNvbnRyb2xTdGF0ZUhhbmRsZXJzIiwibUNvbnRyb2xTdGF0ZUhhbmRsZXIiLCJFcnJvciIsImNhbGwiLCJhU3RhdGVzIiwib0ZpbmFsU3RhdGUiLCJhcHBseUluaXRpYWxTdGF0ZU9ubHkiLCJvTmF2UGFyYW1ldGVyIiwiX2dldEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJvbkJlZm9yZVN0YXRlQXBwbGllZCIsImhhc1ZhcmlhbnRNYW5hZ2VtZW50Iiwic29ydGVkQWRhcHRTdGF0ZUNvbnRyb2xzIiwibW9kaWZpZWRDb250cm9scyIsImlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sIiwic0tleSIsImlBcHBTdGF0ZSIsImFwcGx5QWRkaXRpb25hbFN0YXRlcyIsImFwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnMiLCJfYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVyc1RvRmlsdGVyYmFyIiwib25BZnRlclN0YXRlQXBwbGllZCIsIl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwic1ZhcmlhbnRJZCIsImFWYXJpYW50cyIsImdldFZhcmlhbnRzIiwiYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSIsIm9WYXJpYW50IiwicEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlIiwiYVByb21pc2VzIiwiX29OYXZQYXJhbWV0ZXIiLCJfYVByb21pc2VzIiwiZ2V0SW50ZXJmYWNlIiwib1BheWxvYWQiLCJ2YXJpYW50TWFuYWdlZENvbnRyb2xzIiwiZm5FdmVudCIsIl91cGRhdGVJbml0aWFsU3RhdGVzT25WYXJpYW50Q2hhbmdlIiwiYXR0YWNoU2F2ZSIsImF0dGFjaFNlbGVjdCIsInZtQXNzb2NpYXRlZENvbnRyb2xzVG9SZXNldCIsImNvbnRyb2xLZXkiLCJ2bUFzc29jaWF0ZWRjb250cm9sS2V5IiwiaXNOYXZIeWJyaWQiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJWaWV3U3RhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEtlZXBBbGl2ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgTmF2TGlicmFyeSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgQ29udHJvbFZhcmlhbnRBcHBseUFQSSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCI7XG5pbXBvcnQgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuLy8gaW1wb3J0IENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9maWx0ZXJiYXIvYWRhcHRlci9TZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnNcIjtcbmltcG9ydCBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJCYXNlIGZyb20gXCJzYXAvdWkvbWRjL2ZpbHRlcmJhci9GaWx0ZXJCYXJCYXNlXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL3VpL21kYy91dGlsL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbE5hdlByb3BlcnR5IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG4vLyBhZGRpdGlvbmFsU3RhdGVzIGFyZSBzdG9yZWQgbmV4dCB0byBjb250cm9sIElEcywgc28gbmFtZSBjbGFzaCBhdm9pZGFuY2UgbmVlZGVkLiBGb3J0dW5hdGVseSBJRHMgaGF2ZSByZXN0cmljdGlvbnM6XG4vLyBcIkFsbG93ZWQgaXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIChjYXBpdGFsL2xvd2VyY2FzZSksIGRpZ2l0cywgdW5kZXJzY29yZXMsIGRhc2hlcywgcG9pbnRzIGFuZC9vciBjb2xvbnMuXCJcbi8vIFRoZXJlZm9yZSBhZGRpbmcgYSBzeW1ib2wgbGlrZSAjIG9yIEBcbmNvbnN0IEFERElUSU9OQUxfU1RBVEVTX0tFWSA9IFwiI2FkZGl0aW9uYWxTdGF0ZXNcIixcblx0TmF2VHlwZSA9IE5hdkxpYnJhcnkuTmF2VHlwZTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgY3VzdG9tIGFjdGlvbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgdGFibGUgdG9vbGJhclxuICpcbiAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUuTmF2aWdhdGlvblBhcmFtZXRlclxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uUGFyYW1ldGVyID0ge1xuXHQvKipcblx0ICogIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlLlxuXHQgKlxuXHQgKiAgQHB1YmxpY1xuXHQgKi9cblx0bmF2aWdhdGlvblR5cGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3Rpb25WYXJpYW50IGZyb20gdGhlIG5hdmlnYXRpb24uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNlbGVjdGlvblZhcmlhbnQ/OiBvYmplY3Q7XG5cdC8qKlxuXHQgKiBUaGUgc2VsZWN0aW9uVmFyaWFudCBkZWZhdWx0cyBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqXG5cdCAqICBAcHVibGljXG5cdCAqL1xuXHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM/OiBvYmplY3Q7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIHZhcmlhbnQgbWFuYWdlbWVudFxuXHQgKlxuXHQgKiAgQHB1YmxpY1xuXHQgKi9cblx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQ29udHJvbFN0YXRlID1cblx0fCAoe1xuXHRcdFx0aW5pdGlhbFN0YXRlPzoge1xuXHRcdFx0XHRzdXBwbGVtZW50YXJ5Q29uZmlnOiBvYmplY3QgfCB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdFx0ZnVsbFN0YXRlPzoge1xuXHRcdFx0XHRmaWx0ZXI6IG9iamVjdDtcblx0XHRcdH07XG5cdCAgfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuXHR8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgRmlsdGVyQmFyU3RhdGUgPSB7XG5cdGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIEFycmF5PG9iamVjdD4+O1xufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBtZXRob2RzIHRvIHJldHJpZXZlICYgYXBwbHkgc3RhdGVzIGZvciB0aGUgZGlmZmVyZW50IGNvbnRyb2xzIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmNvbnN0IF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcDogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcblx0XCJzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnRcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1ZNOiBWYXJpYW50TWFuYWdlbWVudCk6IHsgdmFyaWFudElkOiBzdHJpbmcgfCBudWxsIH0ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFyaWFudElkOiBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgY29udHJvbFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSAmJiBjb250cm9sU3RhdGUudmFyaWFudElkICE9PSB1bmRlZmluZWQgJiYgY29udHJvbFN0YXRlLnZhcmlhbnRJZCAhPT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpIHtcblx0XHRcdFx0XHRjb25zdCBpc1ZhcmlhbnRJZEF2YWlsYWJsZSA9IHRoaXMuX2NoZWNrSWZWYXJpYW50SWRJc0F2YWlsYWJsZShvVk0sIGNvbnRyb2xTdGF0ZS52YXJpYW50SWQpO1xuXHRcdFx0XHRcdGxldCBzVmFyaWFudFJlZmVyZW5jZTtcblx0XHRcdFx0XHRpZiAoaXNWYXJpYW50SWRBdmFpbGFibGUpIHtcblx0XHRcdFx0XHRcdHNWYXJpYW50UmVmZXJlbmNlID0gY29udHJvbFN0YXRlLnZhcmlhbnRJZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c1ZhcmlhbnRSZWZlcmVuY2UgPSBvVk0uZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUucHVzaCguLi5vVk0uZ2V0Rm9yKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0YXdhaXQgQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50OiBvVk0sXG5cdFx0XHRcdFx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlIGFzIHN0cmluZ1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlKG9WTSk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkucHVzaCguLi5vVk0uZ2V0Rm9yKCkpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZShvVk0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlKG9WTSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAubS5JY29uVGFiQmFyXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9UYWJCYXI6IGFueSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG9UYWJCYXIuZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAob1RhYkJhcjogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlICYmIG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkSXRlbSA9IG9UYWJCYXIuZ2V0SXRlbXMoKS5maW5kKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9JdGVtLmdldEtleSgpID09PSBvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5O1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZEl0ZW0pIHtcblx0XHRcdFx0XHRvVGFiQmFyLnNldFNlbGVjdGVkSXRlbShvU2VsZWN0ZWRJdGVtKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkubWRjLkZpbHRlckJhclwiOiB7XG5cdFx0cmV0cmlldmU6IGFzeW5jIGZ1bmN0aW9uIChmaWx0ZXJCYXI6IEZpbHRlckJhckJhc2UpIHtcblx0XHRcdGNvbnN0IGNvbnRyb2xTdGF0ZUtleSA9IHRoaXMuZ2V0U3RhdGVLZXkoZmlsdGVyQmFyKTtcblx0XHRcdGNvbnN0IGZpbHRlckJhclN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIpO1xuXHRcdFx0Ly8gcmVtb3ZlIHNlbnNpdGl2ZSBvciB2aWV3IHN0YXRlIGlycmVsZXZhbnQgZmllbGRzXG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzSW5mbyA9IGZpbHRlckJhci5nZXRQcm9wZXJ0eUluZm9TZXQoKTtcblx0XHRcdGNvbnN0IGZpbHRlciA9IGZpbHRlckJhclN0YXRlLmZpbHRlciB8fCB7fTtcblx0XHRcdHByb3BlcnRpZXNJbmZvXG5cdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKFByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKGZpbHRlcikubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdFx0UHJvcGVydHlJbmZvLnBhdGggJiZcblx0XHRcdFx0XHRcdGZpbHRlcltQcm9wZXJ0eUluZm8ucGF0aF0gJiZcblx0XHRcdFx0XHRcdChQcm9wZXJ0eUluZm8ucmVtb3ZlRnJvbUFwcFN0YXRlIHx8IGZpbHRlcltQcm9wZXJ0eUluZm8ucGF0aF0ubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChQcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRcdGlmIChQcm9wZXJ0eUluZm8ucGF0aCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGZpbHRlcltQcm9wZXJ0eUluZm8ucGF0aF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlS2V5LCBmaWx0ZXJCYXJTdGF0ZSk7XG5cdFx0fSxcblx0XHRhcHBseTogYXN5bmMgZnVuY3Rpb24gKGZpbHRlckJhcjogRmlsdGVyQmFyLCBjb250cm9sU3RhdGU6IENvbnRyb2xTdGF0ZSwgbmF2UGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoY29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlID0gdGhpcy5faXNJbml0aWFsU3RhdGVzQXBwbGljYWJsZShjb250cm9sU3RhdGU/LmluaXRpYWxTdGF0ZSwgZmlsdGVyQmFyKTtcblx0XHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uVHlwZSA9IG5hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZTtcblx0XHRcdFx0XHQvL1dod24gbmF2aWdhdGlvbiB0eXBlIGlzIGh5YnJpZCwgd2Ugb3ZlcnJpZGUgdGhlIGZpbHRlciBjb25kaXRpb25zIGluIElBcHBTdGF0ZSB3aXRoIFNWIHJlY2VpdmVkIGZyb20gWGFwcFN0YXRlXG5cdFx0XHRcdFx0aWYgKG5hdmlnYXRpb25UeXBlID09PSBOYXZUeXBlLmh5YnJpZCAmJiBjb250cm9sU3RhdGUuZnVsbFN0YXRlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlckJhclByb3BlcnR5SW5mb3MgPSBhd2FpdCBTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMuZ2V0RmlsdGVyQmFyU3VwcG9ydGVkRmllbGRzKGZpbHRlckJhciksXG5cdFx0XHRcdFx0XHRcdGZpbHRlckJhckluZm9Gb3JDb252ZXJzaW9uID0gU2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzLmdldEZpbHRlckJhckluZm9Gb3JDb252ZXJzaW9uKGZpbHRlckJhciksXG5cdFx0XHRcdFx0XHRcdHhBcHBTdGF0ZUZpbHRlcnMgPSBTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMuZ2V0Q29uZGl0aW9uc0Zyb21TVihcblx0XHRcdFx0XHRcdFx0XHRuYXZQYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudCBhcyBTZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRcdFx0XHRcdGZpbHRlckJhckluZm9Gb3JDb252ZXJzaW9uLFxuXHRcdFx0XHRcdFx0XHRcdGZpbHRlckJhclByb3BlcnR5SW5mb3Ncblx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgbWVyZ2VkRnVsbFN0YXRlID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5jb250cm9sU3RhdGUuZnVsbFN0YXRlLFxuXHRcdFx0XHRcdFx0XHRmaWx0ZXI6IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5jb250cm9sU3RhdGUuZnVsbFN0YXRlLmZpbHRlcixcblx0XHRcdFx0XHRcdFx0XHQuLi54QXBwU3RhdGVGaWx0ZXJzXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdHJldHVybiBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKGZpbHRlckJhciwgbWVyZ2VkRnVsbFN0YXRlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBkaWZmU3RhdGU6IG9iamVjdCA9IGF3YWl0IFN0YXRlVXRpbC5kaWZmU3RhdGUoXG5cdFx0XHRcdFx0XHRcdGZpbHRlckJhcixcblx0XHRcdFx0XHRcdFx0Y29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5mdWxsU3RhdGUgYXMgb2JqZWN0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUoZmlsdGVyQmFyLCBkaWZmU3RhdGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIsIGNvbnRyb2xTdGF0ZT8uZnVsbFN0YXRlID8/IGNvbnRyb2xTdGF0ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkubWRjLlRhYmxlXCI6IHtcblx0XHRyZXRyaWV2ZTogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSkge1xuXHRcdFx0Y29uc3QgY29udHJvbFN0YXRlS2V5ID0gdGhpcy5nZXRTdGF0ZUtleSh0YWJsZSk7XG5cdFx0XHRjb25zdCB0YWJsZVN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZSh0YWJsZSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbFN0YXRlKGNvbnRyb2xTdGF0ZUtleSwgdGFibGVTdGF0ZSk7XG5cdFx0fSxcblx0XHRhcHBseTogYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUsIG5hdlBhcmFtZXRlcnM6IE5hdmlnYXRpb25QYXJhbWV0ZXIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChjb250cm9sU3RhdGUpIHtcblx0XHRcdFx0XHQvLyBFeHRyYSBjb25kaXRpb24gYWRkZWQgdG8gYXBwbHkgdGhlIGRpZmYgc3RhdGUgbG9naWMgZm9yIG1kYyBjb250cm9sXG5cdFx0XHRcdFx0Y29uc3QgaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlID0gdGhpcy5faXNJbml0aWFsU3RhdGVzQXBwbGljYWJsZShcblx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZT8uaW5pdGlhbFN0YXRlLFxuXHRcdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0XHRuYXZQYXJhbWV0ZXJzLm5hdmlnYXRpb25UeXBlICE9PSBOYXZUeXBlLmh5YnJpZFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRpZiAoaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlKSB7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZSAmJiAhY29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZT8uc3VwcGxlbWVudGFyeUNvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRjb250cm9sU3RhdGUuaW5pdGlhbFN0YXRlLnN1cHBsZW1lbnRhcnlDb25maWcgPSB7fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IG9EaWZmU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKFxuXHRcdFx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRcdFx0Y29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5mdWxsU3RhdGUgYXMgb2JqZWN0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGFibGUsIG9EaWZmU3RhdGUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoIWNvbnRyb2xTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnID0ge307XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0YWJsZSwgY29udHJvbFN0YXRlPy5mdWxsU3RhdGUgPz8gY29udHJvbFN0YXRlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVmcmVzaEJpbmRpbmc6IGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0Y29uc3Qgb1RhYmxlQmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlQmluZGluZykge1xuXHRcdFx0XHRjb25zdCBvUm9vdEJpbmRpbmcgPSBvVGFibGVCaW5kaW5nLmdldFJvb3RCaW5kaW5nKCk7XG5cdFx0XHRcdGlmIChvUm9vdEJpbmRpbmcgPT09IG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0XHQvLyBhYnNvbHV0ZSBiaW5kaW5nXG5cdFx0XHRcdFx0b1RhYmxlQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gcmVsYXRpdmUgYmluZGluZ1xuXHRcdFx0XHRcdGNvbnN0IG9IZWFkZXJDb250ZXh0ID0gb1RhYmxlQmluZGluZy5nZXRIZWFkZXJDb250ZXh0KCk7XG5cdFx0XHRcdFx0Y29uc3Qgc0dyb3VwSWQgPSBvVGFibGVCaW5kaW5nLmdldEdyb3VwSWQoKTtcblxuXHRcdFx0XHRcdGlmIChvSGVhZGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0b0hlYWRlckNvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKFt7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBcIlwiIH1dLCBzR3JvdXBJZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cuaW5mbyhgVGFibGU6ICR7b1RhYmxlLmdldElkKCl9IHdhcyBub3QgcmVmcmVzaGVkLiBObyBiaW5kaW5nIGZvdW5kIWApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkubWRjLkNoYXJ0XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9DaGFydDogYW55KSB7XG5cdFx0XHRyZXR1cm4gU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvQ2hhcnQpO1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvQ2hhcnQ6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZShvQ2hhcnQsIG9Db250cm9sU3RhdGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBUT0RPOiB1bmNvbW1lbnQgYWZ0ZXIgbWRjIGZpeCBpcyBtZXJnZWRcblx0XHQvKiByZXRyaWV2ZTogYXN5bmMgZnVuY3Rpb24gKGNoYXJ0OiBDaGFydCkge1xuXHRcdFx0Y29uc3QgY29udHJvbFN0YXRlS2V5ID0gdGhpcy5nZXRTdGF0ZUtleShjaGFydCk7XG5cdFx0XHRjb25zdCBjaGFydFN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShjaGFydCk7XG5cblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlS2V5LCBjaGFydFN0YXRlKTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAoY2hhcnQ6IENoYXJ0LCBjb250cm9sU3RhdGU6IENvbnRyb2xTdGF0ZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRcdC8vIEV4dHJhIGNvbmRpdGlvbiBhZGRlZCB0byBhcHBseSB0aGUgZGlmZiBzdGF0ZSBsb2dpYyBmb3IgbWRjIGNvbnRyb2xcblx0XHRcdFx0XHRjb25zdCBpc0luaXRpYWxTdGF0ZUFwcGxpY2FibGUgPSBjb250cm9sU3RhdGU/LmluaXRpYWxTdGF0ZSAmJiB0aGlzLmludmFsaWRhdGVJbml0aWFsU3RhdGVGb3JBcHBseS5pbmRleE9mKGNoYXJ0LmdldElkKCkpID09PSAtMSAmJiB0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5kZXhPZihjaGFydC5nZXRJZCgpKSA9PT0gLTE7XG5cblx0XHRcdFx0XHRpZiAoaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBkaWZmU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKFxuXHRcdFx0XHRcdFx0XHRjaGFydCxcblx0XHRcdFx0XHRcdFx0Y29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5mdWxsU3RhdGUgYXMgb2JqZWN0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUoY2hhcnQsIGRpZmZTdGF0ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKGNoYXJ0LCBjb250cm9sU3RhdGU/LmZ1bGxTdGF0ZSA/PyBjb250cm9sU3RhdGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSAqL1xuXHR9LFxuXHRcInNhcC51eGFwLk9iamVjdFBhZ2VMYXlvdXRcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob09QTGF5b3V0OiBhbnkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkU2VjdGlvbjogb09QTGF5b3V0LmdldFNlbGVjdGVkU2VjdGlvbigpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvT1BMYXlvdXQ6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRvT1BMYXlvdXQuc2V0U2VsZWN0ZWRTZWN0aW9uKG9Db250cm9sU3RhdGUuc2VsZWN0ZWRTZWN0aW9uKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlZnJlc2hCaW5kaW5nOiBmdW5jdGlvbiAob09QTGF5b3V0OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PUExheW91dC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSBvQmluZGluZ0NvbnRleHQgJiYgb0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdGlmIChvQmluZGluZykge1xuXHRcdFx0XHRjb25zdCBzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0Y29uc3Qgc1N0cmF0ZWd5ID0gS2VlcEFsaXZlSGVscGVyLmdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aChvT1BMYXlvdXQsIHNNZXRhUGF0aCk7XG5cdFx0XHRcdGlmIChzU3RyYXRlZ3kgPT09IFwic2VsZlwiKSB7XG5cdFx0XHRcdFx0Ly8gUmVmcmVzaCBtYWluIGNvbnRleHQgYW5kIDEtMSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgb3IgT1Bcblx0XHRcdFx0XHRjb25zdCBvTW9kZWwgPSBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRvTmF2aWdhdGlvblByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbE5hdlByb3BlcnR5PiA9XG5cdFx0XHRcdFx0XHRcdChDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbCwgc01ldGFQYXRoLCB7XG5cdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiTmF2aWdhdGlvblByb3BlcnR5XCJcblx0XHRcdFx0XHRcdFx0fSkgYXMgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsTmF2UHJvcGVydHk+KSB8fCB7fSxcblx0XHRcdFx0XHRcdGFOYXZQcm9wZXJ0aWVzVG9SZXF1ZXN0ID0gT2JqZWN0LmtleXMob05hdmlnYXRpb25Qcm9wZXJ0aWVzKS5yZWR1Y2UoZnVuY3Rpb24gKGFQcmV2OiBhbnlbXSwgc05hdlByb3A6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAob05hdmlnYXRpb25Qcm9wZXJ0aWVzW3NOYXZQcm9wXS4kaXNDb2xsZWN0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0YVByZXYucHVzaCh7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzTmF2UHJvcCB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYVByZXY7XG5cdFx0XHRcdFx0XHR9LCBbXSksXG5cdFx0XHRcdFx0XHRhUHJvcGVydGllcyA9IFt7ICRQcm9wZXJ0eVBhdGg6IFwiKlwiIH1dLFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQgPSBvQmluZGluZy5nZXRHcm91cElkKCk7XG5cblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKGFQcm9wZXJ0aWVzLmNvbmNhdChhTmF2UHJvcGVydGllc1RvUmVxdWVzdCksIHNHcm91cElkKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzU3RyYXRlZ3kgPT09IFwiaW5jbHVkaW5nRGVwZW5kZW50c1wiKSB7XG5cdFx0XHRcdFx0Ly8gQ29tcGxldGUgcmVmcmVzaFxuXHRcdFx0XHRcdG9CaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmluZm8oYE9iamVjdFBhZ2U6ICR7b09QTGF5b3V0LmdldElkKCl9IHdhcyBub3QgcmVmcmVzaGVkLiBObyBiaW5kaW5nIGZvdW5kIWApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAubS5TZWdtZW50ZWRCdXR0b25cIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1NlZ21lbnRlZEJ1dHRvbjogYW55KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1NlZ21lbnRlZEJ1dHRvbi5nZXRTZWxlY3RlZEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvU2VnbWVudGVkQnV0dG9uOiBhbnksIG9Db250cm9sU3RhdGU6IGFueSkge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGU/LnNlbGVjdGVkS2V5ICYmIG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkgIT09IG9TZWdtZW50ZWRCdXR0b24uZ2V0U2VsZWN0ZWRLZXkoKSkge1xuXHRcdFx0XHRvU2VnbWVudGVkQnV0dG9uLnNldFNlbGVjdGVkS2V5KG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdFx0XHRpZiAob1NlZ21lbnRlZEJ1dHRvbi5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5BY3Rpb25Ub29sYmFyXCIpKSB7XG5cdFx0XHRcdFx0b1NlZ21lbnRlZEJ1dHRvbi5maXJlRXZlbnQoXCJzZWxlY3Rpb25DaGFuZ2VcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLm0uU2VsZWN0XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9TZWxlY3Q6IGFueSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG9TZWxlY3QuZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAob1NlbGVjdDogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlPy5zZWxlY3RlZEtleSAmJiBvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5ICE9PSBvU2VsZWN0LmdldFNlbGVjdGVkS2V5KCkpIHtcblx0XHRcdFx0b1NlbGVjdC5zZXRTZWxlY3RlZEtleShvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5KTtcblx0XHRcdFx0aWYgKG9TZWxlY3QuZ2V0UGFyZW50KCk/LmlzQShcInNhcC51aS5tZGMuQWN0aW9uVG9vbGJhclwiKSkge1xuXHRcdFx0XHRcdG9TZWxlY3QuZmlyZUV2ZW50KFwiY2hhbmdlXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5mLkR5bmFtaWNQYWdlXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9EeW5hbWljUGFnZTogYW55KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRoZWFkZXJFeHBhbmRlZDogb0R5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9EeW5hbWljUGFnZTogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChvQ29udHJvbFN0YXRlLmhlYWRlckV4cGFuZGVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1ZpZXc6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbGxlci52aWV3U3RhdGUucmV0cmlldmVWaWV3U3RhdGUob0NvbnRyb2xsZXIudmlld1N0YXRlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAob1ZpZXc6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55LCBvTmF2UGFyYW1ldGVyczogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChvQ29udHJvbGxlciAmJiBvQ29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5hcHBseVZpZXdTdGF0ZShvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZWZyZXNoQmluZGluZzogZnVuY3Rpb24gKG9WaWV3OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKG9Db250cm9sbGVyICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIudmlld1N0YXRlLnJlZnJlc2hWaWV3QmluZGluZ3MoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9Db21wb25lbnRDb250YWluZXI6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db21wb25lbnRDb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdGlmIChvQ29tcG9uZW50KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJldHJpZXZlQ29udHJvbFN0YXRlKG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9Db21wb25lbnRDb250YWluZXI6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55LCBvTmF2UGFyYW1ldGVyczogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbXBvbmVudENvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdFx0aWYgKG9Db21wb25lbnQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBwbHlDb250cm9sU3RhdGUob0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpLCBvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuLyoqXG4gKiBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9mZmVyaW5nIGhvb2tzIGZvciBzdGF0ZSBoYW5kbGluZ1xuICpcbiAqIElmIHlvdSBuZWVkIHRvIG1haW50YWluIGEgc3BlY2lmaWMgc3RhdGUgZm9yIHlvdXIgYXBwbGljYXRpb24sIHlvdSBjYW4gdXNlIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbi5cbiAqXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS44NS4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZVwiKVxuY2xhc3MgVmlld1N0YXRlIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyOiBudW1iZXI7XG5cblx0cHJpdmF0ZSBfcEluaXRpYWxTdGF0ZUFwcGxpZWQ6IFByb21pc2U8dW5rbm93bj47XG5cblx0cHJpdmF0ZSBfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlPzogRnVuY3Rpb247XG5cblx0cHJvdGVjdGVkIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuXHRjb250cm9sc1ZhcmlhbnRJZFVuYXZhaWxhYmxlOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGludmFsaWRhdGVJbml0aWFsU3RhdGVGb3JBcHBseTogc3RyaW5nW10gPSBbXTtcblxuXHR2aWV3U3RhdGVDb250cm9sczogTWFuYWdlZE9iamVjdFtdID0gW107XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9pUmV0cmlldmluZ1N0YXRlQ291bnRlciA9IDA7XG5cdFx0dGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyByZWZyZXNoVmlld0JpbmRpbmdzKCkge1xuXHRcdGNvbnN0IGFDb250cm9scyA9IGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdEJpbmRpbmdSZWZyZXNoQ29udHJvbHMpO1xuXHRcdGxldCBvUHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0YUNvbnRyb2xzXG5cdFx0XHQuZmlsdGVyKChvQ29udHJvbDogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdFwiKTtcblx0XHRcdH0pXG5cdFx0XHQuZm9yRWFjaCgob0NvbnRyb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKHRoaXMucmVmcmVzaENvbnRyb2xCaW5kaW5nLmJpbmQodGhpcywgb0NvbnRyb2wpKTtcblx0XHRcdH0pO1xuXHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFkZCBhbGwgY29udHJvbHMgcmVsZXZhbnQgZm9yIHJlZnJlc2hpbmcgdG8gdGhlIHByb3ZpZGVkIGNvbnRyb2wgYXJyYXkuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBhQ29sbGVjdGVkQ29udHJvbHMgVGhlIGNvbGxlY3RlZCBjb250cm9sc1xuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FkYXB0QmluZGluZ1JlZnJlc2hDb250cm9sc1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzKGFDb2xsZWN0ZWRDb250cm9sczogTWFuYWdlZE9iamVjdFtdKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHJlZnJlc2hDb250cm9sQmluZGluZyhvQ29udHJvbDogYW55KSB7XG5cdFx0Y29uc3Qgb0NvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIgPSB0aGlzLmdldENvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIob0NvbnRyb2wpO1xuXHRcdGxldCBvUHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0aWYgKHR5cGVvZiBvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlci5yZWZyZXNoQmluZGluZyAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRMb2cuaW5mbyhgcmVmcmVzaEJpbmRpbmcgaGFuZGxlciBmb3IgY29udHJvbDogJHtvQ29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX0gaXMgbm90IHByb3ZpZGVkYCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9Qcm9taXNlQ2hhaW4gPSBvUHJvbWlzZUNoYWluLnRoZW4ob0NvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIucmVmcmVzaEJpbmRpbmcuYmluZCh0aGlzLCBvQ29udHJvbCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1Byb21pc2VDaGFpbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIDxjb2RlPnJlZnJlc2hCaW5kaW5nPC9jb2RlPiBmdW5jdGlvbiBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdH0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGhhbmRsZXIgZm9yXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEEgcGxhaW4gb2JqZWN0IHdpdGggb25lIGZ1bmN0aW9uOiA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT5cblx0ICovXG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyKG9Db250cm9sOiBhbnkpOiBhbnkge1xuXHRcdGNvbnN0IG9SZWZyZXNoQmluZGluZ0hhbmRsZXI6IGFueSA9IHt9O1xuXHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0Zm9yIChjb25zdCBzVHlwZSBpbiBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXApIHtcblx0XHRcdFx0aWYgKG9Db250cm9sLmlzQShzVHlwZSkpIHtcblx0XHRcdFx0XHQvLyBwYXNzIG9ubHkgdGhlIHJlZnJlc2hCaW5kaW5nIGhhbmRsZXIgaW4gYW4gb2JqZWN0IHNvIHRoYXQgOlxuXHRcdFx0XHRcdC8vIDEuIEFwcGxpY2F0aW9uIGhhcyBhY2Nlc3Mgb25seSB0byByZWZyZXNoQmluZGluZyBhbmQgbm90IGFwcGx5IGFuZCByZXRlcml2ZSBhdCB0aGlzIHN0YWdlXG5cdFx0XHRcdFx0Ly8gMi4gQXBwbGljYXRpb24gbW9kaWZpY2F0aW9ucyB0byB0aGUgb2JqZWN0IHdpbGwgYmUgcmVmbGVjdGVkIGhlcmUgKGFzIHdlIHBhc3MgYnkgcmVmZXJlbmNlKVxuXHRcdFx0XHRcdG9SZWZyZXNoQmluZGluZ0hhbmRsZXJbXCJyZWZyZXNoQmluZGluZ1wiXSA9IF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcFtzVHlwZV0ucmVmcmVzaEJpbmRpbmcgfHwge307XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlcihvQ29udHJvbCwgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcik7XG5cdFx0cmV0dXJuIG9SZWZyZXNoQmluZGluZ0hhbmRsZXI7XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT4gZnVuY3Rpb24gZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgZm9yIHdoaWNoIHRoZSByZWZyZXNoIGhhbmRsZXIgaXMgYWRhcHRlZC5cblx0ICogQHBhcmFtIG9Db250cm9sSGFuZGxlciBBIHBsYWluIG9iamVjdCB3aGljaCBjYW4gaGF2ZSBvbmUgZnVuY3Rpb246IDxjb2RlPnJlZnJlc2hCaW5kaW5nPC9jb2RlPlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlcihvQ29udHJvbDogTWFuYWdlZE9iamVjdCwgb0NvbnRyb2xIYW5kbGVyOiBhbnlbXSkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBzdXNwZW5kZWQgZHVlIHRvIGtlZXAtYWxpdmUgbW9kZS5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNvblN1c3BlbmRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblN1c3BlbmQoKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIHJlc3RvcmVkIGR1ZSB0byBrZWVwLWFsaXZlIG1vZGUuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjb25SZXN0b3JlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25SZXN0b3JlKCkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIERlc3RydWN0b3IgbWV0aG9kIGZvciBvYmplY3RzLlxuXHQgKi9cblx0ZGVzdHJveSgpIHtcblx0XHRkZWxldGUgdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHRcdHN1cGVyLmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZW5hYmxlIG11bHRpIG92ZXJyaWRlLiBJdCBpcyBhZGRpbmcgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgKGFycmF5KSB0byB0aGUgcHJvdmlkZWRcblx0ICogZnVuY3Rpb24gKGFuZCBpdHMgcGFyYW1ldGVycyksIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgdmlhIDxjb2RlPlByb21pc2UuYWxsPC9jb2RlPi5cblx0ICpcblx0ICogQHBhcmFtIGZuQ2FsbCBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG5cdCAqIEBwYXJhbSBhcmdzXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0byBiZSByZXNvbHZlZCB3aXRoIHRoZSByZXN1bHQgb2YgYWxsIG92ZXJyaWRlc1xuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRjb2xsZWN0UmVzdWx0cyhmbkNhbGw6IEZ1bmN0aW9uLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRcdGNvbnN0IGFSZXN1bHRzOiBhbnlbXSA9IFtdO1xuXHRcdGFyZ3MucHVzaChhUmVzdWx0cyk7XG5cdFx0Zm5DYWxsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPiBmdW5jdGlvbnMgZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGhhbmRsZXIgZm9yXG5cdCAqIEBwYXJhbSBhQ29udHJvbEhhbmRsZXIgQSBsaXN0IG9mIHBsYWluIG9iamVjdHMgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FkYXB0Q29udHJvbFN0YXRlSGFuZGxlclxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YWRhcHRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBhQ29udHJvbEhhbmRsZXI6IG9iamVjdFtdKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+IGZ1bmN0aW9ucyBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHJldHVybnMgQSBwbGFpbiBvYmplY3Qgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBhbnkpIHtcblx0XHRjb25zdCBhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyID0gW10sXG5cdFx0XHRhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcjogYW55W10gPSBbXTtcblx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdGZvciAoY29uc3Qgc1R5cGUgaW4gX21Db250cm9sU3RhdGVIYW5kbGVyTWFwKSB7XG5cdFx0XHRcdGlmIChvQ29udHJvbC5pc0Eoc1R5cGUpKSB7XG5cdFx0XHRcdFx0Ly8gYXZvaWQgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiBpbnRlcm5hbCBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXBcblx0XHRcdFx0XHRhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgX21Db250cm9sU3RhdGVIYW5kbGVyTWFwW3NUeXBlXSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sLCBhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcik7XG5cdFx0cmV0dXJuIGFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIuY29uY2F0KGFDdXN0b21Db250cm9sU3RhdGVIYW5kbGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhZGQgYWxsIGNvbnRyb2xzIGZvciBnaXZlbiB2aWV3IHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIHRoZSBzdGF0ZSBoYW5kbGluZyB0byB0aGUgcHJvdmlkZWQgY29udHJvbCBhcnJheS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIGFDb2xsZWN0ZWRDb250cm9scyBUaGUgY29sbGVjdGVkIGNvbnRyb2xzXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYWRhcHRTdGF0ZUNvbnRyb2xzXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhZGFwdFN0YXRlQ29udHJvbHMoYUNvbGxlY3RlZENvbnRyb2xzOiBNYW5hZ2VkT2JqZWN0W10pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGtleSB0byBiZSB1c2VkIGZvciBnaXZlbiBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGtleSBmb3Jcblx0ICogQHJldHVybnMgVGhlIGtleSB0byBiZSB1c2VkIGZvciBzdG9yaW5nIHRoZSBjb250cm9scyBzdGF0ZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFN0YXRlS2V5KG9Db250cm9sOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0TG9jYWxJZChvQ29udHJvbC5nZXRJZCgpKSB8fCBvQ29udHJvbC5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSB2aWV3IHN0YXRlIG9mIHRoaXMgZXh0ZW5zaW9ucyB2aWV3LlxuXHQgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGJlZm9yZSBmaW5pc2hpbmcsIGFsbCBidXQgdGhlIGZpbmFsIHJlc3BvbnNlIHdpbGwgcmVzb2x2ZSB0byA8Y29kZT51bmRlZmluZWQ8L2NvZGU+LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRoZSB2aWV3IHN0YXRlXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjcmV0cmlldmVWaWV3U3RhdGVcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJldHJpZXZlVmlld1N0YXRlKCkge1xuXHRcdCsrdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI7XG5cdFx0bGV0IG9WaWV3U3RhdGU6IGFueTtcblxuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZDtcblx0XHRcdGNvbnN0IGFDb250cm9sczogKE1hbmFnZWRPYmplY3QgfCB1bmRlZmluZWQpW10gPSBhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRTdGF0ZUNvbnRyb2xzKTtcblx0XHRcdGNvbnN0IGFSZXNvbHZlZFN0YXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRhQ29udHJvbHNcblx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChvQ29udHJvbDogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBICYmIG9Db250cm9sLmlzQShcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIik7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQubWFwKChvQ29udHJvbDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29udHJvbCkudGhlbigodlJlc3VsdDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0a2V5OiB0aGlzLmdldFN0YXRlS2V5KG9Db250cm9sKSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdlJlc3VsdFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHRvVmlld1N0YXRlID0gYVJlc29sdmVkU3RhdGVzLnJlZHVjZShmdW5jdGlvbiAob1N0YXRlczogYW55LCBtU3RhdGU6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ3VycmVudFN0YXRlOiBhbnkgPSB7fTtcblx0XHRcdFx0b0N1cnJlbnRTdGF0ZVttU3RhdGUua2V5XSA9IG1TdGF0ZS52YWx1ZTtcblx0XHRcdFx0cmV0dXJuIG1lcmdlT2JqZWN0cyhvU3RhdGVzLCBvQ3VycmVudFN0YXRlKTtcblx0XHRcdH0sIHt9KTtcblx0XHRcdGNvbnN0IG1BZGRpdGlvbmFsU3RhdGVzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcygpKTtcblx0XHRcdGlmIChtQWRkaXRpb25hbFN0YXRlcyAmJiBPYmplY3Qua2V5cyhtQWRkaXRpb25hbFN0YXRlcykubGVuZ3RoKSB7XG5cdFx0XHRcdG9WaWV3U3RhdGVbQURESVRJT05BTF9TVEFURVNfS0VZXSA9IG1BZGRpdGlvbmFsU3RhdGVzO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHQtLXRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9pUmV0cmlldmluZ1N0YXRlQ291bnRlciA9PT0gMCA/IG9WaWV3U3RhdGUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogRXh0ZW5kIHRoZSBtYXAgb2YgYWRkaXRpb25hbCBzdGF0ZXMgKG5vdCBjb250cm9sIGJvdW5kKSB0byBiZSBhZGRlZCB0byB0aGUgY3VycmVudCB2aWV3IHN0YXRlIG9mIHRoZSBnaXZlbiB2aWV3LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gbUFkZGl0aW9uYWxTdGF0ZXMgVGhlIGFkZGl0aW9uYWwgc3RhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNyZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyhtQWRkaXRpb25hbFN0YXRlczogb2JqZWN0KSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIGFkZGl0aW9uYWwgc3RhdGVzIChub3QgY29udHJvbCBib3VuZCkgdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmlldyBzdGF0ZSBvZiB0aGUgZ2l2ZW4gdmlldy5cblx0ICpcblx0ICogQHJldHVybnMgQWRkaXRpb25hbCB2aWV3IHN0YXRlc1xuXHQgKi9cblx0X3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcygpIHtcblx0XHRjb25zdCBtQWRkaXRpb25hbFN0YXRlcyA9IHt9O1xuXHRcdHRoaXMuYmFzZS52aWV3U3RhdGUucmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKG1BZGRpdGlvbmFsU3RhdGVzKTtcblx0XHRyZXR1cm4gbUFkZGl0aW9uYWxTdGF0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgb2JqZWN0IHRvIGdldCB0aGUgc3RhdGUgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRyb2xcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmV0cmlldmVDb250cm9sU3RhdGUob0NvbnRyb2w6IGFueSkge1xuXHRcdGNvbnN0IGFDb250cm9sU3RhdGVIYW5kbGVycyA9IHRoaXMuZ2V0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0YUNvbnRyb2xTdGF0ZUhhbmRsZXJzLm1hcCgobUNvbnRyb2xTdGF0ZUhhbmRsZXI6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIG1Db250cm9sU3RhdGVIYW5kbGVyLnJldHJpZXZlICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUgaXMgbm90IGEgZnVuY3Rpb24gZm9yIGNvbnRyb2w6ICR7b0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1Db250cm9sU3RhdGVIYW5kbGVyLnJldHJpZXZlLmNhbGwodGhpcywgb0NvbnRyb2wpO1xuXHRcdFx0fSlcblx0XHQpLnRoZW4oKGFTdGF0ZXM6IGFueVtdKSA9PiB7XG5cdFx0XHRyZXR1cm4gYVN0YXRlcy5yZWR1Y2UoZnVuY3Rpb24gKG9GaW5hbFN0YXRlOiBhbnksIG9DdXJyZW50U3RhdGU6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gbWVyZ2VPYmplY3RzKG9GaW5hbFN0YXRlLCBvQ3VycmVudFN0YXRlKTtcblx0XHRcdH0sIHt9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHZpZXcgc3RhdGUgc2hvdWxkIG9ubHkgYmUgYXBwbGllZCBvbmNlIGluaXRpYWxseS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWR9LlxuXHQgKlxuXHQgKiBJbXBvcnRhbnQ6XG5cdCAqIFlvdSBzaG91bGQgb25seSBvdmVycmlkZSB0aGlzIG1ldGhvZCBmb3IgY3VzdG9tIHBhZ2VzIGFuZCBub3QgZm9yIHRoZSBzdGFuZGFyZCBMaXN0UmVwb3J0UGFnZSBhbmQgT2JqZWN0UGFnZSFcblx0ICpcblx0ICogQHJldHVybnMgSWYgPGNvZGU+dHJ1ZTwvY29kZT4sIG9ubHkgdGhlIGluaXRpYWwgdmlldyBzdGF0ZSBpcyBhcHBsaWVkIG9uY2UsXG5cdCAqIGVsc2UgYW55IG5ldyB2aWV3IHN0YXRlIGlzIGFsc28gYXBwbGllZCBvbiBmb2xsb3ctdXAgY2FsbHMgKGRlZmF1bHQpXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYXBwbHlJbml0aWFsU3RhdGVPbmx5XG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRhcHBseUluaXRpYWxTdGF0ZU9ubHkoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgZ2l2ZW4gdmlldyBzdGF0ZSB0byB0aGlzIGV4dGVuc2lvbnMgdmlldy5cblx0ICpcblx0ICogQHBhcmFtIG9WaWV3U3RhdGUgVGhlIHZpZXcgc3RhdGUgdG8gYXBwbHkgKGNhbiBiZSB1bmRlZmluZWQpXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyIFRoZSBjdXJyZW50IG5hdmlnYXRpb24gcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvblZhcmlhbnQgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMgVGhlIHNlbGVjdGlvblZhcmlhbnQgZGVmYXVsdHMgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5yZXF1aXJlc1N0YW5kYXJkVmFyaWFudCBEZWZpbmVzIHdoZXRoZXIgdGhlIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIHZhcmlhbnQgbWFuYWdlbWVudFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGZvciBhc3luYyBzdGF0ZSBoYW5kbGluZ1xuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FwcGx5Vmlld1N0YXRlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBhcHBseVZpZXdTdGF0ZShvVmlld1N0YXRlOiBhbnksIG9OYXZQYXJhbWV0ZXI6IE5hdmlnYXRpb25QYXJhbWV0ZXIpOiBQcm9taXNlPGFueT4ge1xuXHRcdGlmICh0aGlzLmJhc2Uudmlld1N0YXRlLmFwcGx5SW5pdGlhbFN0YXRlT25seSgpICYmIHRoaXMuX2dldEluaXRpYWxTdGF0ZUFwcGxpZWQoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUub25CZWZvcmVTdGF0ZUFwcGxpZWQsIFtdLCBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlKTtcblx0XHRcdGNvbnN0IGFDb250cm9sczogTWFuYWdlZE9iamVjdFtdID0gYXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0U3RhdGVDb250cm9scyk7XG5cdFx0XHR0aGlzLnZpZXdTdGF0ZUNvbnRyb2xzID0gYUNvbnRyb2xzO1xuXHRcdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdGxldCBoYXNWYXJpYW50TWFuYWdlbWVudCA9IGZhbHNlO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiB0aGlzIGVuc3VyZXMgdGhhdCB2YXJpYW50TWFuYWdlbWVudCBjb250cm9sIGlzIGFwcGxpZWQgZmlyc3QgdG8gY2FsY3VsYXRlIGluaXRpYWwgc3RhdGUgZm9yIGRlbHRhIGxvZ2ljXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IHNvcnRlZEFkYXB0U3RhdGVDb250cm9scyA9IGFDb250cm9scy5yZWR1Y2UoKG1vZGlmaWVkQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSwgY29udHJvbCkgPT4ge1xuXHRcdFx0XHRpZiAoIWNvbnRyb2wpIHtcblx0XHRcdFx0XHRyZXR1cm4gbW9kaWZpZWRDb250cm9scztcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpc1ZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCA9IGNvbnRyb2wuaXNBKFwic2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50XCIpO1xuXHRcdFx0XHRpZiAoIWhhc1ZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdFx0aGFzVmFyaWFudE1hbmFnZW1lbnQgPSBpc1ZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRtb2RpZmllZENvbnRyb2xzID0gaXNWYXJpYW50TWFuYWdlbWVudENvbnRyb2wgPyBbY29udHJvbCwgLi4ubW9kaWZpZWRDb250cm9sc10gOiBbLi4ubW9kaWZpZWRDb250cm9scywgY29udHJvbF07XG5cdFx0XHRcdHJldHVybiBtb2RpZmllZENvbnRyb2xzO1xuXHRcdFx0fSwgW10pO1xuXG5cdFx0XHQvLyBJbiBjYXNlIG9mIG5vIFZhcmlhbnQgTWFuYWdlbWVudCwgdGhpcyBlbnN1cmVzIHRoYXQgaW5pdGlhbCBzdGF0ZXMgaXMgc2V0XG5cdFx0XHRpZiAoIWhhc1ZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdHRoaXMuX3NldEluaXRpYWxTdGF0ZXNGb3JEZWx0YUNvbXB1dGUoKTtcblx0XHRcdH1cblxuXHRcdFx0c29ydGVkQWRhcHRTdGF0ZUNvbnRyb2xzXG5cdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Db250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sLmlzQShcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIik7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mb3JFYWNoKChvQ29udHJvbCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNLZXkgPSB0aGlzLmdldFN0YXRlS2V5KG9Db250cm9sKTtcblx0XHRcdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKFxuXHRcdFx0XHRcdFx0dGhpcy5hcHBseUNvbnRyb2xTdGF0ZS5iaW5kKHRoaXMsIG9Db250cm9sLCBvVmlld1N0YXRlID8gb1ZpZXdTdGF0ZVtzS2V5XSA6IHVuZGVmaW5lZCwgb05hdlBhcmFtZXRlcilcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0YXdhaXQgb1Byb21pc2VDaGFpbjtcblx0XHRcdGlmIChvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlID09PSBOYXZUeXBlLmlBcHBTdGF0ZSB8fCBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlID09PSBOYXZUeXBlLmh5YnJpZCkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKFxuXHRcdFx0XHRcdHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlBZGRpdGlvbmFsU3RhdGVzLFxuXHRcdFx0XHRcdG9WaWV3U3RhdGUgPyBvVmlld1N0YXRlW0FERElUSU9OQUxfU1RBVEVTX0tFWV0gOiB1bmRlZmluZWRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5hcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzLCBvTmF2UGFyYW1ldGVyKTtcblx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLl9hcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzVG9GaWx0ZXJiYXIsIG9OYXZQYXJhbWV0ZXIpO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUub25BZnRlclN0YXRlQXBwbGllZCk7XG5cdFx0XHRcdHRoaXMuX3NldEluaXRpYWxTdGF0ZUFwcGxpZWQoKTtcblx0XHRcdH0gY2F0Y2ggKGU6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WTTogYW55LCBzVmFyaWFudElkOiBhbnkpIHtcblx0XHRjb25zdCBhVmFyaWFudHMgPSBvVk0uZ2V0VmFyaWFudHMoKTtcblx0XHRsZXQgYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IGZhbHNlO1xuXHRcdGFWYXJpYW50cy5mb3JFYWNoKGZ1bmN0aW9uIChvVmFyaWFudDogYW55KSB7XG5cdFx0XHRpZiAob1ZhcmlhbnQua2V5ID09PSBzVmFyaWFudElkKSB7XG5cdFx0XHRcdGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlO1xuXHR9XG5cblx0X3NldEluaXRpYWxTdGF0ZUFwcGxpZWQoKSB7XG5cdFx0aWYgKHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSkge1xuXHRcdFx0Y29uc3QgcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlID0gdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHRcdFx0ZGVsZXRlIHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZTtcblx0XHRcdHBJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRJbml0aWFsU3RhdGVBcHBsaWVkKCkge1xuXHRcdHJldHVybiAhdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gcmVhY3QgYmVmb3JlIGEgc3RhdGUgZm9yIGdpdmVuIHZpZXcgaXMgYXBwbGllZC5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIGFQcm9taXNlcyBFeHRlbnNpYmxlIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBOYXZpZ2F0aW9uIHR5cGUgcmVzcG9uc2libGUgZm9yIHRoZSBhcHBseWluZyB0aGUgc3RhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNvbkJlZm9yZVN0YXRlQXBwbGllZFxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25CZWZvcmVTdGF0ZUFwcGxpZWQoYVByb21pc2VzOiBQcm9taXNlPGFueT4sIG5hdmlnYXRpb25UeXBlPzogc3RyaW5nKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogSG9vayB0byByZWFjdCB3aGVuIHN0YXRlIGZvciBnaXZlbiB2aWV3IHdhcyBhcHBsaWVkLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gYVByb21pc2VzIEV4dGVuc2libGUgYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmdcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNvbkFmdGVyU3RhdGVBcHBsaWVkXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkFmdGVyU3RhdGVBcHBsaWVkKGFQcm9taXNlczogUHJvbWlzZTxhbnk+KSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogQXBwbHlpbmcgYWRkaXRpb25hbCwgbm90IGNvbnRyb2wgcmVsYXRlZCwgc3RhdGVzIC0gaXMgY2FsbGVkIG9ubHkgaWYgbmF2aWdhdGlvbiB0eXBlIGlzIGlBcHBTdGF0ZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIG9WaWV3U3RhdGUgVGhlIGN1cnJlbnQgdmlldyBzdGF0ZVxuXHQgKiBAcGFyYW0gYVByb21pc2VzIEV4dGVuc2libGUgYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmdcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNhcHBseUFkZGl0aW9uYWxTdGF0ZXNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFwcGx5QWRkaXRpb25hbFN0YXRlcyhvVmlld1N0YXRlOiBvYmplY3QsIGFQcm9taXNlczogUHJvbWlzZTxhbnk+KSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0X2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNUb0ZpbHRlcmJhcihcblx0XHRfb05hdlBhcmFtZXRlcjoge1xuXHRcdFx0bmF2aWdhdGlvblR5cGU6IGFueTtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ/OiBvYmplY3QgfCB1bmRlZmluZWQ7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM/OiBvYmplY3QgfCB1bmRlZmluZWQ7XG5cdFx0XHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0fSxcblx0XHRfYVByb21pc2VzOiBQcm9taXNlPGFueT5cblx0KSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgaXMgbm90IGNhbGxlZCBpZiB0aGUgbmF2aWdhdGlvbiB0eXBlIGlzIGlBcHBTdGF0ZVxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlciBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSBUaGUgYWN0dWFsIG5hdmlnYXRpb24gdHlwZVxuXHQgKiBAcGFyYW0gW29OYXZQYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudF0gVGhlIHNlbGVjdGlvblZhcmlhbnQgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW29OYXZQYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudERlZmF1bHRzXSBUaGUgc2VsZWN0aW9uVmFyaWFudCBkZWZhdWx0cyBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBbb05hdlBhcmFtZXRlci5yZXF1aXJlc1N0YW5kYXJkVmFyaWFudF0gRGVmaW5lcyB3aGV0aGVyIHRoZSBzdGFuZGFyZCB2YXJpYW50IG11c3QgYmUgdXNlZCBpbiB2YXJpYW50IG1hbmFnZW1lbnRcblx0ICogQHBhcmFtIGFQcm9taXNlcyBFeHRlbnNpYmxlIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdGFwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnMoXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdG9OYXZQYXJhbWV0ZXI6IHtcblx0XHRcdG5hdmlnYXRpb25UeXBlOiBhbnk7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50Pzogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudERlZmF1bHRzPzogb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRcdH0sXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRcdGFQcm9taXNlczogUHJvbWlzZTxhbnk+XG5cdCkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogQXBwbHlpbmcgdGhlIGdpdmVuIHN0YXRlIHRvIHRoZSBnaXZlbiBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIG9iamVjdCB0byBhcHBseSB0aGUgZ2l2ZW4gc3RhdGVcblx0ICogQHBhcmFtIG9Db250cm9sU3RhdGUgVGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29udHJvbFxuXHQgKiBAcGFyYW0gW29OYXZQYXJhbWV0ZXJzXSBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgUmV0dXJuIGEgcHJvbWlzZSBmb3IgYXN5bmMgc3RhdGUgaGFuZGxpbmdcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXBwbHlDb250cm9sU3RhdGUob0NvbnRyb2w6IGFueSwgb0NvbnRyb2xTdGF0ZTogb2JqZWN0LCBvTmF2UGFyYW1ldGVycz86IG9iamVjdCkge1xuXHRcdGNvbnN0IGFDb250cm9sU3RhdGVIYW5kbGVycyA9IHRoaXMuZ2V0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRhQ29udHJvbFN0YXRlSGFuZGxlcnMuZm9yRWFjaCgobUNvbnRyb2xTdGF0ZUhhbmRsZXI6IGFueSkgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBtQ29udHJvbFN0YXRlSGFuZGxlci5hcHBseSAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgY29udHJvbFN0YXRlSGFuZGxlci5hcHBseSBpcyBub3QgYSBmdW5jdGlvbiBmb3IgY29udHJvbDogJHtvQ29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gKTtcblx0XHRcdH1cblx0XHRcdG9Qcm9taXNlQ2hhaW4gPSBvUHJvbWlzZUNoYWluLnRoZW4obUNvbnRyb2xTdGF0ZUhhbmRsZXIuYXBwbHkuYmluZCh0aGlzLCBvQ29udHJvbCwgb0NvbnRyb2xTdGF0ZSwgb05hdlBhcmFtZXRlcnMpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gb1Byb21pc2VDaGFpbjtcblx0fVxuXG5cdGdldEludGVyZmFjZSgpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8vIG1ldGhvZCB0byBnZXQgdGhlIGNvbnRyb2wgc3RhdGUgZm9yIG1kYyBjb250cm9scyBhcHBseWluZyB0aGUgZGVsdGEgbG9naWNcblx0X2dldENvbnRyb2xTdGF0ZShjb250cm9sU3RhdGVLZXk6IHN0cmluZywgY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUpIHtcblx0XHRjb25zdCBpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlciA9IHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXI7XG5cdFx0aWYgKE9iamVjdC5rZXlzKGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyKS5sZW5ndGggPiAwICYmIGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0pIHtcblx0XHRcdGlmIChPYmplY3Qua2V5cyhpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sU3RhdGVLZXldIGFzIG9iamVjdCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0gPSB7IC4uLmNvbnRyb2xTdGF0ZSB9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgZnVsbFN0YXRlOiBjb250cm9sU3RhdGUsIGluaXRpYWxTdGF0ZTogaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbFN0YXRlS2V5XSB9O1xuXHRcdH1cblx0XHRyZXR1cm4gY29udHJvbFN0YXRlO1xuXHR9XG5cblx0Ly9tZXRob2QgdG8gc3RvcmUgdGhlIGluaXRpYWwgc3RhdGVzIGZvciBkZWx0YSBjb21wdXRhdGlvbiBvZiBtZGMgY29udHJvbHNcblx0X3NldEluaXRpYWxTdGF0ZXNGb3JEZWx0YUNvbXB1dGUgPSBhc3luYyAodmFyaWFudE1hbmFnZW1lbnQ/OiBWYXJpYW50TWFuYWdlbWVudCkgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBhZGFwdENvbnRyb2xzID0gdGhpcy52aWV3U3RhdGVDb250cm9scztcblxuXHRcdFx0Y29uc3QgZXh0ZXJuYWxTdGF0ZVByb21pc2VzOiBQcm9taXNlPG9iamVjdD5bXSA9IFtdO1xuXHRcdFx0Y29uc3QgY29udHJvbFN0YXRlS2V5OiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0bGV0IGluaXRpYWxDb250cm9sU3RhdGVzOiBvYmplY3RbXSA9IFtdO1xuXHRcdFx0Y29uc3QgdmFyaWFudENvbnRyb2xzOiBzdHJpbmdbXSA9IHZhcmlhbnRNYW5hZ2VtZW50Py5nZXRGb3IoKSA/PyBbXTtcblxuXHRcdFx0YWRhcHRDb250cm9sc1xuXHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChjb250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdGNvbnRyb2wgJiZcblx0XHRcdFx0XHRcdCghdmFyaWFudE1hbmFnZW1lbnQgfHwgdmFyaWFudENvbnRyb2xzLmluZGV4T2YoY29udHJvbC5nZXRJZCgpKSA+IC0xKSAmJlxuXHRcdFx0XHRcdFx0KGNvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSB8fFxuXHRcdFx0XHRcdFx0XHQoY29udHJvbCBhcyBCYXNlT2JqZWN0KS5pc0EoXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSB8fFxuXHRcdFx0XHRcdFx0XHQoY29udHJvbCBhcyBCYXNlT2JqZWN0KS5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mb3JFYWNoKChjb250cm9sKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9hZGRFdmVudExpc3RlbmVyc1RvVmFyaWFudE1hbmFnZW1lbnQodmFyaWFudE1hbmFnZW1lbnQsIHZhcmlhbnRDb250cm9scyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxTdGF0ZVByb21pc2UgPSBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKGNvbnRyb2wgYXMgb2JqZWN0KTtcblx0XHRcdFx0XHRleHRlcm5hbFN0YXRlUHJvbWlzZXMucHVzaChleHRlcm5hbFN0YXRlUHJvbWlzZSk7XG5cdFx0XHRcdFx0Y29udHJvbFN0YXRlS2V5LnB1c2godGhpcy5nZXRTdGF0ZUtleShjb250cm9sKSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRpbml0aWFsQ29udHJvbFN0YXRlcyA9IGF3YWl0IFByb21pc2UuYWxsKGV4dGVybmFsU3RhdGVQcm9taXNlcyk7XG5cdFx0XHRpbml0aWFsQ29udHJvbFN0YXRlcy5mb3JFYWNoKChpbml0aWFsQ29udHJvbFN0YXRlOiBvYmplY3QsIGk6IG51bWJlcikgPT4ge1xuXHRcdFx0XHR0aGlzLmluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleVtpXV0gPSBpbml0aWFsQ29udHJvbFN0YXRlO1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gQXR0YWNoIGV2ZW50IHRvIHNhdmUgYW5kIHNlbGVjdCBvZiBWYXJpYW50IE1hbmFnZW1lbnQgdG8gdXBkYXRlIHRoZSBpbml0aWFsIENvbnRyb2wgU3RhdGVzIG9uIHZhcmlhbnQgY2hhbmdlXG5cdF9hZGRFdmVudExpc3RlbmVyc1RvVmFyaWFudE1hbmFnZW1lbnQodmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50LCB2YXJpYW50Q29udHJvbHM6IHN0cmluZ1tdKSB7XG5cdFx0Y29uc3Qgb1BheWxvYWQgPSB7IHZhcmlhbnRNYW5hZ2VkQ29udHJvbHM6IHZhcmlhbnRDb250cm9scyB9O1xuXHRcdGNvbnN0IGZuRXZlbnQgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLl91cGRhdGVJbml0aWFsU3RhdGVzT25WYXJpYW50Q2hhbmdlKHZhcmlhbnRDb250cm9scyk7XG5cdFx0fTtcblx0XHR2YXJpYW50TWFuYWdlbWVudC5hdHRhY2hTYXZlKG9QYXlsb2FkLCBmbkV2ZW50LCB7fSk7XG5cdFx0dmFyaWFudE1hbmFnZW1lbnQuYXR0YWNoU2VsZWN0KG9QYXlsb2FkLCBmbkV2ZW50LCB7fSk7XG5cdH1cblxuXHRfdXBkYXRlSW5pdGlhbFN0YXRlc09uVmFyaWFudENoYW5nZSh2bUFzc29jaWF0ZWRDb250cm9sc1RvUmVzZXQ6IHN0cmluZ1tdKSB7XG5cdFx0Y29uc3QgaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXIgPSB0aGlzLmluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyO1xuXHRcdE9iamVjdC5rZXlzKGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyKS5mb3JFYWNoKChjb250cm9sS2V5KSA9PiB7XG5cdFx0XHRmb3IgKGNvbnN0IHZtQXNzb2NpYXRlZGNvbnRyb2xLZXkgb2Ygdm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0KSB7XG5cdFx0XHRcdGlmICh2bUFzc29jaWF0ZWRjb250cm9sS2V5LmluZGV4T2YoY29udHJvbEtleSkgPiAtMSkge1xuXHRcdFx0XHRcdGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xLZXldID0ge307XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdF9pc0luaXRpYWxTdGF0ZXNBcHBsaWNhYmxlKGluaXRpYWxTdGF0ZTogb2JqZWN0LCBjb250cm9sOiBGaWx0ZXJCYXIgfCBUYWJsZSwgaXNOYXZIeWJyaWQ/OiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdGluaXRpYWxTdGF0ZSAmJlxuXHRcdFx0dGhpcy5pbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkuaW5kZXhPZihjb250cm9sLmdldElkKCkpID09PSAtMSAmJlxuXHRcdFx0dGhpcy5jb250cm9sc1ZhcmlhbnRJZFVuYXZhaWxhYmxlLmluZGV4T2YoY29udHJvbC5nZXRJZCgpKSA9PT0gLTEgJiZcblx0XHRcdChpc05hdkh5YnJpZCA/PyB0cnVlKVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlld1N0YXRlO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7O0VBd0JBO0VBQ0E7RUFDQTtFQUNBLE1BQU1BLHFCQUFxQixHQUFHLG1CQUFtQjtJQUNoREMsT0FBTyxHQUFHQyxVQUFVLENBQUNELE9BQU87O0VBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUEyQ0E7RUFDQTtFQUNBOztFQUVBLE1BQU1FLHdCQUE2QyxHQUFHO0lBQ3JELHNDQUFzQyxFQUFFO01BQ3ZDQyxRQUFRLEVBQUUsVUFBVUMsR0FBc0IsRUFBZ0M7UUFDekUsT0FBTztVQUNOQyxTQUFTLEVBQUVELEdBQUcsQ0FBQ0Usb0JBQW9CO1FBQ3BDLENBQUM7TUFDRixDQUFDO01BQ0RDLEtBQUssRUFBRSxnQkFBZ0JILEdBQXNCLEVBQUVJLFlBQWlELEVBQWlCO1FBQ2hILElBQUk7VUFDSCxJQUFJQSxZQUFZLElBQUlBLFlBQVksQ0FBQ0gsU0FBUyxLQUFLSSxTQUFTLElBQUlELFlBQVksQ0FBQ0gsU0FBUyxLQUFLRCxHQUFHLENBQUNFLG9CQUFvQixFQUFFLEVBQUU7WUFDbEgsTUFBTUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDQyw0QkFBNEIsQ0FBQ1AsR0FBRyxFQUFFSSxZQUFZLENBQUNILFNBQVMsQ0FBQztZQUMzRixJQUFJTyxpQkFBaUI7WUFDckIsSUFBSUYsb0JBQW9CLEVBQUU7Y0FDekJFLGlCQUFpQixHQUFHSixZQUFZLENBQUNILFNBQVM7WUFDM0MsQ0FBQyxNQUFNO2NBQ05PLGlCQUFpQixHQUFHUixHQUFHLENBQUNTLHFCQUFxQixFQUFFO2NBQy9DLElBQUksQ0FBQ0MsNEJBQTRCLENBQUNDLElBQUksQ0FBQyxHQUFHWCxHQUFHLENBQUNZLE1BQU0sRUFBRSxDQUFDO1lBQ3hEO1lBQ0EsSUFBSTtjQUNILE1BQU1DLHNCQUFzQixDQUFD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