@sapui5/sap.fe.core 1.102.2 → 1.104.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +73 -30
  4. package/src/sap/fe/core/AppComponent.ts +65 -43
  5. package/src/sap/fe/core/AppStateHandler.js +82 -70
  6. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +227 -126
  10. package/src/sap/fe/core/CommonUtils.ts +240 -163
  11. package/src/sap/fe/core/ExtensionAPI.js +24 -27
  12. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  13. package/src/sap/fe/core/PageController.js +4 -4
  14. package/src/sap/fe/core/PageController.ts +4 -5
  15. package/src/sap/fe/core/TemplateComponent.js +1 -1
  16. package/src/sap/fe/core/TemplateComponent.ts +6 -6
  17. package/src/sap/fe/core/TemplateModel.js +1 -1
  18. package/src/sap/fe/core/TemplateModel.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +170 -139
  52. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  61. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
  64. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
  65. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
  66. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
  67. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
  68. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
  71. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
  72. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
  73. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
  74. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
  75. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
  76. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
  77. package/src/sap/fe/core/controls/Any.js +9 -5
  78. package/src/sap/fe/core/controls/Any.ts +10 -4
  79. package/src/sap/fe/core/controls/CommandExecution.js +11 -25
  80. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  81. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  82. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
  84. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  86. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  87. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  88. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  89. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  90. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  91. package/src/sap/fe/core/controls/FileWrapper.js +7 -2
  92. package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
  93. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  94. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  97. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  98. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  100. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  101. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  102. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  103. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  104. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  105. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  106. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  107. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  108. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  110. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  111. package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
  112. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  113. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
  114. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  115. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  116. package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
  117. package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
  118. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  119. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  120. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  121. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  122. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
  127. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  128. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
  130. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
  131. package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
  132. package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
  133. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  134. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  135. package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
  136. package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  138. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
  140. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  142. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  143. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  144. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  145. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  146. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  147. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
  148. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
  149. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  150. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  151. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  152. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  153. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  154. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  155. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  156. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  157. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  158. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  159. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  160. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  161. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  162. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  163. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  164. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  165. package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
  166. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
  167. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
  168. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
  169. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  170. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  171. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  172. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  173. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  174. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  175. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  176. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  177. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  178. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  179. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  180. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  181. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  182. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  183. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  184. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  185. package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
  186. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
  187. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  188. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  189. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  190. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  191. package/src/sap/fe/core/helpers/EditState.js +1 -6
  192. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  193. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  194. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  195. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  196. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  197. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  198. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  199. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  200. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  201. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  202. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  203. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  204. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  205. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  206. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  207. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  208. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  209. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  210. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  211. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  212. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  213. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  214. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  215. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  216. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  217. package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
  218. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
  219. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  220. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  221. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  222. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  223. package/src/sap/fe/core/library.js +42 -3
  224. package/src/sap/fe/core/library.ts +38 -0
  225. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  226. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  227. package/src/sap/fe/core/messagebundle.properties +39 -63
  228. package/src/sap/fe/core/messagebundle_ar.properties +25 -39
  229. package/src/sap/fe/core/messagebundle_bg.properties +25 -39
  230. package/src/sap/fe/core/messagebundle_ca.properties +25 -39
  231. package/src/sap/fe/core/messagebundle_cs.properties +25 -39
  232. package/src/sap/fe/core/messagebundle_cy.properties +25 -39
  233. package/src/sap/fe/core/messagebundle_da.properties +25 -39
  234. package/src/sap/fe/core/messagebundle_de.properties +25 -39
  235. package/src/sap/fe/core/messagebundle_el.properties +26 -40
  236. package/src/sap/fe/core/messagebundle_en.properties +25 -39
  237. package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
  238. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
  239. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
  240. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
  241. package/src/sap/fe/core/messagebundle_es.properties +27 -41
  242. package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
  243. package/src/sap/fe/core/messagebundle_et.properties +25 -39
  244. package/src/sap/fe/core/messagebundle_fi.properties +25 -39
  245. package/src/sap/fe/core/messagebundle_fr.properties +26 -40
  246. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
  247. package/src/sap/fe/core/messagebundle_hi.properties +25 -39
  248. package/src/sap/fe/core/messagebundle_hr.properties +25 -39
  249. package/src/sap/fe/core/messagebundle_hu.properties +25 -39
  250. package/src/sap/fe/core/messagebundle_id.properties +25 -39
  251. package/src/sap/fe/core/messagebundle_it.properties +41 -55
  252. package/src/sap/fe/core/messagebundle_iw.properties +25 -39
  253. package/src/sap/fe/core/messagebundle_ja.properties +25 -39
  254. package/src/sap/fe/core/messagebundle_kk.properties +25 -39
  255. package/src/sap/fe/core/messagebundle_ko.properties +30 -44
  256. package/src/sap/fe/core/messagebundle_lt.properties +25 -39
  257. package/src/sap/fe/core/messagebundle_lv.properties +25 -39
  258. package/src/sap/fe/core/messagebundle_ms.properties +25 -39
  259. package/src/sap/fe/core/messagebundle_nl.properties +27 -41
  260. package/src/sap/fe/core/messagebundle_no.properties +25 -39
  261. package/src/sap/fe/core/messagebundle_pl.properties +26 -40
  262. package/src/sap/fe/core/messagebundle_pt.properties +26 -40
  263. package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
  264. package/src/sap/fe/core/messagebundle_ro.properties +25 -39
  265. package/src/sap/fe/core/messagebundle_ru.properties +25 -39
  266. package/src/sap/fe/core/messagebundle_sh.properties +25 -39
  267. package/src/sap/fe/core/messagebundle_sk.properties +25 -39
  268. package/src/sap/fe/core/messagebundle_sl.properties +25 -39
  269. package/src/sap/fe/core/messagebundle_sv.properties +25 -39
  270. package/src/sap/fe/core/messagebundle_th.properties +25 -39
  271. package/src/sap/fe/core/messagebundle_tr.properties +25 -39
  272. package/src/sap/fe/core/messagebundle_uk.properties +25 -39
  273. package/src/sap/fe/core/messagebundle_vi.properties +25 -39
  274. package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
  275. package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
  276. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  278. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
  279. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
  280. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  281. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  282. package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
  283. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  284. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  285. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  286. package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
  287. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  288. package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
  289. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  290. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  291. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  292. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
  293. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
  294. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  295. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  296. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  297. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  298. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  299. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  300. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  301. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  302. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  303. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  304. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  305. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  306. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  307. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  308. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  309. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  310. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  311. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  312. package/src/sap/fe/core/templating/FilterHelper.js +16 -15
  313. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  314. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  315. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  316. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  317. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  318. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  319. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  320. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  321. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -2,22 +2,22 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/ID", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingExpression", "../../../helpers/StableIdHelper", "../Common/Form"], function (DataField, ConfigurableObject, ID, Key, BindingExpression, StableIdHelper, Form) {
5
+ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/ID", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingToolkit", "../../../helpers/StableIdHelper", "../Common/Form"], function (DataField, ConfigurableObject, ID, Key, BindingToolkit, StableIdHelper, Form) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
9
  var getFormElementsFromManifest = Form.getFormElementsFromManifest;
10
10
  var FormElementType = Form.FormElementType;
11
11
  var generate = StableIdHelper.generate;
12
- var not = BindingExpression.not;
13
- var equal = BindingExpression.equal;
14
- var compileBinding = BindingExpression.compileBinding;
15
- var annotationExpression = BindingExpression.annotationExpression;
12
+ var not = BindingToolkit.not;
13
+ var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
14
+ var equal = BindingToolkit.equal;
15
+ var compileExpression = BindingToolkit.compileExpression;
16
16
  var KeyHelper = Key.KeyHelper;
17
- var HeaderFacetID = ID.HeaderFacetID;
18
- var HeaderFacetFormID = ID.HeaderFacetFormID;
19
- var HeaderFacetContainerID = ID.HeaderFacetContainerID;
20
- var CustomHeaderFacetID = ID.CustomHeaderFacetID;
17
+ var getHeaderFacetID = ID.getHeaderFacetID;
18
+ var getHeaderFacetFormID = ID.getHeaderFacetFormID;
19
+ var getHeaderFacetContainerID = ID.getHeaderFacetContainerID;
20
+ var getCustomHeaderFacetID = ID.getCustomHeaderFacetID;
21
21
  var Placement = ConfigurableObject.Placement;
22
22
  var insertCustomElements = ConfigurableObject.insertCustomElements;
23
23
  var getSemanticObjectPath = DataField.getSemanticObjectPath;
@@ -86,9 +86,8 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
86
86
  /**
87
87
  * Retrieve header facets from annotations.
88
88
  *
89
- * @param {ConverterContext} converterContext
90
- *
91
- * @returns {ObjectPageHeaderFacet} Header facets from annotations
89
+ * @param converterContext
90
+ * @returns Header facets from annotations
92
91
  */
93
92
  function getHeaderFacetsFromAnnotations(converterContext) {
94
93
  var _converterContext$get, _converterContext$get2, _converterContext$get3;
@@ -106,9 +105,8 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
106
105
  /**
107
106
  * Retrieve custom header facets from manifest.
108
107
  *
109
- * @param {ConfigurableRecord<ManifestHeaderFacet>} manifestCustomHeaderFacets
110
- *
111
- * @returns {Record<string, CustomObjectPageHeaderFacet>} HeaderFacets from manifest
108
+ * @param manifestCustomHeaderFacets
109
+ * @returns HeaderFacets from manifest
112
110
  */
113
111
 
114
112
 
@@ -125,11 +123,10 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
125
123
  /**
126
124
  * Retrieve stashed settings for header facets from manifest.
127
125
  *
128
- * @param {FacetTypes} facetDefinition
129
- * @param {FacetTypes} collectionFacetDefinition
130
- * @param {ConverterContext} converterContext
131
- *
132
- * @returns {boolean} Stashed setting for header facet or false
126
+ * @param facetDefinition
127
+ * @param collectionFacetDefinition
128
+ * @param converterContext
129
+ * @returns Stashed setting for header facet or false
133
130
  */
134
131
 
135
132
 
@@ -153,11 +150,10 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
153
150
  /**
154
151
  * Retrieve flexibility designtime settings from manifest.
155
152
  *
156
- * @param {FacetTypes} facetDefinition
157
- * @param {FacetTypes} collectionFacetDefinition
158
- * @param {ConverterContext} converterContext
159
- *
160
- * @returns {FlexDesignTimeType} Designtime setting or default
153
+ * @param facetDefinition
154
+ * @param collectionFacetDefinition
155
+ * @param converterContext
156
+ * @returns Designtime setting or default
161
157
  */
162
158
 
163
159
 
@@ -184,6 +180,10 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
184
180
  case FlexDesignTimeType.NotAdaptableTree:
185
181
  case FlexDesignTimeType.NotAdaptableVisibility:
186
182
  designTimeMetadata = designTime;
183
+ break;
184
+
185
+ default:
186
+ break;
187
187
  }
188
188
  }
189
189
  }
@@ -202,13 +202,13 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
202
202
  if (facetDefinition.$Type === "com.sap.vocabularies.UI.v1.ReferenceFacet" && !(((_facetDefinition$anno = facetDefinition.annotations) === null || _facetDefinition$anno === void 0 ? void 0 : (_facetDefinition$anno2 = _facetDefinition$anno.UI) === null || _facetDefinition$anno2 === void 0 ? void 0 : (_facetDefinition$anno3 = _facetDefinition$anno2.Hidden) === null || _facetDefinition$anno3 === void 0 ? void 0 : _facetDefinition$anno3.valueOf()) === true)) {
203
203
  var _annotations$UI, _annotations$UI$Hidde;
204
204
 
205
- var headerFacetID = HeaderFacetID({
205
+ var headerFacetID = getHeaderFacetID({
206
206
  Facet: facetDefinition
207
207
  }),
208
- getHeaderFacetKey = function (facetDefinition, fallback) {
209
- var _facetDefinition$ID, _facetDefinition$Labe;
208
+ getHeaderFacetKey = function (facetDefinitionToCheck, fallback) {
209
+ var _facetDefinitionToChe, _facetDefinitionToChe2;
210
210
 
211
- return ((_facetDefinition$ID = facetDefinition.ID) === null || _facetDefinition$ID === void 0 ? void 0 : _facetDefinition$ID.toString()) || ((_facetDefinition$Labe = facetDefinition.Label) === null || _facetDefinition$Labe === void 0 ? void 0 : _facetDefinition$Labe.toString()) || fallback;
211
+ return ((_facetDefinitionToChe = facetDefinitionToCheck.ID) === null || _facetDefinitionToChe === void 0 ? void 0 : _facetDefinitionToChe.toString()) || ((_facetDefinitionToChe2 = facetDefinitionToCheck.Label) === null || _facetDefinitionToChe2 === void 0 ? void 0 : _facetDefinitionToChe2.toString()) || fallback;
212
212
  },
213
213
  targetAnnotationValue = facetDefinition.Target.value,
214
214
  targetAnnotationType = getTargetAnnotationType(facetDefinition);
@@ -225,6 +225,9 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
225
225
  headerDataPointData = getDataPointData(facetDefinition);
226
226
  break;
227
227
  // ToDo: Handle other cases
228
+
229
+ default:
230
+ break;
228
231
  }
229
232
 
230
233
  var annotations = facetDefinition.annotations;
@@ -232,7 +235,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
232
235
  type: HeaderFacetType.Annotation,
233
236
  facetType: FacetType.Reference,
234
237
  id: headerFacetID,
235
- containerId: HeaderFacetContainerID({
238
+ containerId: getHeaderFacetContainerID({
236
239
  Facet: facetDefinition
237
240
  }),
238
241
  key: getHeaderFacetKey(facetDefinition, headerFacetID),
@@ -240,8 +243,8 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
240
243
  designtime: getDesignTimeMetadataSettingsForHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext)
241
244
  },
242
245
  stashed: getStashedSettingsForHeaderFacet(facetDefinition, collectionFacetDefinition, converterContext),
243
- visible: compileBinding(not(equal(annotationExpression(annotations === null || annotations === void 0 ? void 0 : (_annotations$UI = annotations.UI) === null || _annotations$UI === void 0 ? void 0 : (_annotations$UI$Hidde = _annotations$UI.Hidden) === null || _annotations$UI$Hidde === void 0 ? void 0 : _annotations$UI$Hidde.valueOf()), true))),
244
- annotationPath: converterContext.getEntitySetBasedAnnotationPath(facetDefinition.fullyQualifiedName) + "/",
246
+ visible: compileExpression(not(equal(getExpressionFromAnnotation(annotations === null || annotations === void 0 ? void 0 : (_annotations$UI = annotations.UI) === null || _annotations$UI === void 0 ? void 0 : (_annotations$UI$Hidde = _annotations$UI.Hidden) === null || _annotations$UI$Hidde === void 0 ? void 0 : _annotations$UI$Hidde.valueOf()), true))),
247
+ annotationPath: "".concat(converterContext.getEntitySetBasedAnnotationPath(facetDefinition.fullyQualifiedName), "/"),
245
248
  targetAnnotationValue: targetAnnotationValue,
246
249
  targetAnnotationType: targetAnnotationType,
247
250
  headerFormData: headerFormData,
@@ -257,13 +260,13 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
257
260
  var _collectionFacetDefin, _collectionFacetDefin2, _collectionFacetDefin3;
258
261
 
259
262
  var facets = [],
260
- headerFacetID = HeaderFacetID({
263
+ headerFacetID = getHeaderFacetID({
261
264
  Facet: collectionFacetDefinition
262
265
  }),
263
266
  getHeaderFacetKey = function (facetDefinition, fallback) {
264
- var _facetDefinition$ID2, _facetDefinition$Labe2;
267
+ var _facetDefinition$ID, _facetDefinition$Labe;
265
268
 
266
- return ((_facetDefinition$ID2 = facetDefinition.ID) === null || _facetDefinition$ID2 === void 0 ? void 0 : _facetDefinition$ID2.toString()) || ((_facetDefinition$Labe2 = facetDefinition.Label) === null || _facetDefinition$Labe2 === void 0 ? void 0 : _facetDefinition$Labe2.toString()) || fallback;
269
+ return ((_facetDefinition$ID = facetDefinition.ID) === null || _facetDefinition$ID === void 0 ? void 0 : _facetDefinition$ID.toString()) || ((_facetDefinition$Labe = facetDefinition.Label) === null || _facetDefinition$Labe === void 0 ? void 0 : _facetDefinition$Labe.toString()) || fallback;
267
270
  };
268
271
 
269
272
  collectionFacetDefinition.Facets.forEach(function (facetDefinition) {
@@ -277,7 +280,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
277
280
  type: HeaderFacetType.Annotation,
278
281
  facetType: FacetType.Collection,
279
282
  id: headerFacetID,
280
- containerId: HeaderFacetContainerID({
283
+ containerId: getHeaderFacetContainerID({
281
284
  Facet: collectionFacetDefinition
282
285
  }),
283
286
  key: getHeaderFacetKey(collectionFacetDefinition, headerFacetID),
@@ -285,8 +288,8 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
285
288
  designtime: getDesignTimeMetadataSettingsForHeaderFacet(collectionFacetDefinition, collectionFacetDefinition, converterContext)
286
289
  },
287
290
  stashed: getStashedSettingsForHeaderFacet(collectionFacetDefinition, collectionFacetDefinition, converterContext),
288
- visible: compileBinding(not(equal(annotationExpression((_collectionFacetDefin = collectionFacetDefinition.annotations) === null || _collectionFacetDefin === void 0 ? void 0 : (_collectionFacetDefin2 = _collectionFacetDefin.UI) === null || _collectionFacetDefin2 === void 0 ? void 0 : (_collectionFacetDefin3 = _collectionFacetDefin2.Hidden) === null || _collectionFacetDefin3 === void 0 ? void 0 : _collectionFacetDefin3.valueOf()), true))),
289
- annotationPath: converterContext.getEntitySetBasedAnnotationPath(collectionFacetDefinition.fullyQualifiedName) + "/",
291
+ visible: compileExpression(not(equal(getExpressionFromAnnotation((_collectionFacetDefin = collectionFacetDefinition.annotations) === null || _collectionFacetDefin === void 0 ? void 0 : (_collectionFacetDefin2 = _collectionFacetDefin.UI) === null || _collectionFacetDefin2 === void 0 ? void 0 : (_collectionFacetDefin3 = _collectionFacetDefin2.Hidden) === null || _collectionFacetDefin3 === void 0 ? void 0 : _collectionFacetDefin3.valueOf()), true))),
292
+ annotationPath: "".concat(converterContext.getEntitySetBasedAnnotationPath(collectionFacetDefinition.fullyQualifiedName), "/"),
290
293
  facets: facets
291
294
  };
292
295
  }
@@ -315,7 +318,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
315
318
  }
316
319
 
317
320
  function getFieldGroupFormData(facetDefinition, converterContext) {
318
- var _facetDefinition$Labe3;
321
+ var _facetDefinition$Labe2;
319
322
 
320
323
  // split in this from annotation + getFieldGroupFromDefault
321
324
  if (!facetDefinition) {
@@ -324,20 +327,19 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
324
327
 
325
328
  var formElements = insertCustomElements(getFormElementsFromAnnotations(facetDefinition, converterContext), getFormElementsFromManifest(facetDefinition, converterContext));
326
329
  return {
327
- id: HeaderFacetFormID({
330
+ id: getHeaderFacetFormID({
328
331
  Facet: facetDefinition
329
332
  }),
330
- label: (_facetDefinition$Labe3 = facetDefinition.Label) === null || _facetDefinition$Labe3 === void 0 ? void 0 : _facetDefinition$Labe3.toString(),
333
+ label: (_facetDefinition$Labe2 = facetDefinition.Label) === null || _facetDefinition$Labe2 === void 0 ? void 0 : _facetDefinition$Labe2.toString(),
331
334
  formElements: formElements
332
335
  };
333
336
  }
334
337
  /**
335
338
  * Creates an array of manifest-based FormElements.
336
339
  *
337
- * @param {FacetType} facetDefinition The definition of the facet
338
- * @param {ConverterContext} converterContext The converter context for the facet
339
- *
340
- * @returns {Array} Annotation-based FormElements
340
+ * @param facetDefinition The definition of the facet
341
+ * @param converterContext The converter context for the facet
342
+ * @returns Annotation-based FormElements
341
343
  */
342
344
 
343
345
 
@@ -361,12 +363,12 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
361
363
  isValueMultilineText: ((_dataField$Value = dataField.Value) === null || _dataField$Value === void 0 ? void 0 : (_dataField$Value$$tar = _dataField$Value.$target) === null || _dataField$Value$$tar === void 0 ? void 0 : (_dataField$Value$$tar2 = _dataField$Value$$tar.annotations) === null || _dataField$Value$$tar2 === void 0 ? void 0 : (_dataField$Value$$tar3 = _dataField$Value$$tar2.UI) === null || _dataField$Value$$tar3 === void 0 ? void 0 : (_dataField$Value$$tar4 = _dataField$Value$$tar3.MultiLineText) === null || _dataField$Value$$tar4 === void 0 ? void 0 : _dataField$Value$$tar4.valueOf()) === true,
362
364
  type: FormElementType.Annotation,
363
365
  key: KeyHelper.generateKeyFromDataField(dataField),
364
- visible: compileBinding(not(equal(annotationExpression(annotations === null || annotations === void 0 ? void 0 : (_annotations$UI2 = annotations.UI) === null || _annotations$UI2 === void 0 ? void 0 : (_annotations$UI2$Hidd = _annotations$UI2.Hidden) === null || _annotations$UI2$Hidd === void 0 ? void 0 : _annotations$UI2$Hidd.valueOf()), true))),
366
+ visible: compileExpression(not(equal(getExpressionFromAnnotation(annotations === null || annotations === void 0 ? void 0 : (_annotations$UI2 = annotations.UI) === null || _annotations$UI2 === void 0 ? void 0 : (_annotations$UI2$Hidd = _annotations$UI2.Hidden) === null || _annotations$UI2$Hidd === void 0 ? void 0 : _annotations$UI2$Hidd.valueOf()), true))),
365
367
  label: ((_dataField$Value2 = dataField.Value) === null || _dataField$Value2 === void 0 ? void 0 : (_dataField$Value2$$ta = _dataField$Value2.$target) === null || _dataField$Value2$$ta === void 0 ? void 0 : (_dataField$Value2$$ta2 = _dataField$Value2$$ta.annotations) === null || _dataField$Value2$$ta2 === void 0 ? void 0 : (_dataField$Value2$$ta3 = _dataField$Value2$$ta2.Common) === null || _dataField$Value2$$ta3 === void 0 ? void 0 : _dataField$Value2$$ta3.Label) || dataField.Label,
366
- idPrefix: HeaderFacetFormID({
368
+ idPrefix: getHeaderFacetFormID({
367
369
  Facet: facetDefinition
368
370
  }, dataField),
369
- annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName) + "/",
371
+ annotationPath: "".concat(converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName), "/"),
370
372
  semanticObjectPath: semanticObjectAnnotationPath
371
373
  });
372
374
  } else if (dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation") {
@@ -374,16 +376,16 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
374
376
 
375
377
  var _annotations = dataField.annotations;
376
378
  annotationBasedFormElements.push({
377
- // FIXME this is wrong
379
+ // FIXME this is wrong, the annotation should exist, so the target is not properly identified
378
380
  isValueMultilineText: ((_dataField$Target = dataField.Target) === null || _dataField$Target === void 0 ? void 0 : (_dataField$Target$$ta = _dataField$Target.$target) === null || _dataField$Target$$ta === void 0 ? void 0 : (_dataField$Target$$ta2 = _dataField$Target$$ta.annotations) === null || _dataField$Target$$ta2 === void 0 ? void 0 : (_dataField$Target$$ta3 = _dataField$Target$$ta2.UI) === null || _dataField$Target$$ta3 === void 0 ? void 0 : (_dataField$Target$$ta4 = _dataField$Target$$ta3.MultiLineText) === null || _dataField$Target$$ta4 === void 0 ? void 0 : _dataField$Target$$ta4.valueOf()) === true,
379
381
  type: FormElementType.Annotation,
380
382
  key: KeyHelper.generateKeyFromDataField(dataField),
381
- visible: compileBinding(not(equal(annotationExpression(_annotations === null || _annotations === void 0 ? void 0 : (_annotations$UI3 = _annotations.UI) === null || _annotations$UI3 === void 0 ? void 0 : (_annotations$UI3$Hidd = _annotations$UI3.Hidden) === null || _annotations$UI3$Hidd === void 0 ? void 0 : _annotations$UI3$Hidd.valueOf()), true))),
383
+ visible: compileExpression(not(equal(getExpressionFromAnnotation(_annotations === null || _annotations === void 0 ? void 0 : (_annotations$UI3 = _annotations.UI) === null || _annotations$UI3 === void 0 ? void 0 : (_annotations$UI3$Hidd = _annotations$UI3.Hidden) === null || _annotations$UI3$Hidd === void 0 ? void 0 : _annotations$UI3$Hidd.valueOf()), true))),
382
384
  label: ((_dataField$Target2 = dataField.Target) === null || _dataField$Target2 === void 0 ? void 0 : (_dataField$Target2$$t = _dataField$Target2.$target) === null || _dataField$Target2$$t === void 0 ? void 0 : (_dataField$Target2$$t2 = _dataField$Target2$$t.annotations) === null || _dataField$Target2$$t2 === void 0 ? void 0 : (_dataField$Target2$$t3 = _dataField$Target2$$t2.Common) === null || _dataField$Target2$$t3 === void 0 ? void 0 : (_dataField$Target2$$t4 = _dataField$Target2$$t3.Label) === null || _dataField$Target2$$t4 === void 0 ? void 0 : _dataField$Target2$$t4.toString()) || ((_dataField$Label = dataField.Label) === null || _dataField$Label === void 0 ? void 0 : _dataField$Label.toString()),
383
- idPrefix: HeaderFacetFormID({
385
+ idPrefix: getHeaderFacetFormID({
384
386
  Facet: facetDefinition
385
387
  }, dataField),
386
- annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName) + "/",
388
+ annotationPath: "".concat(converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName), "/"),
387
389
  semanticObjectPath: semanticObjectAnnotationPath
388
390
  });
389
391
  }
@@ -414,10 +416,9 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
414
416
  /**
415
417
  * Creates an annotation-based header facet.
416
418
  *
417
- * @param {FacetTypes} facetDefinition The definition of the facet
418
- * @param {ConverterContext} converterContext The converter context
419
- *
420
- * @returns {ObjectPageHeaderFacet} The created annotation-based header facet
419
+ * @param facetDefinition The definition of the facet
420
+ * @param converterContext The converter context
421
+ * @returns The created annotation-based header facet
421
422
  */
422
423
 
423
424
 
@@ -432,6 +433,9 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
432
433
  case "com.sap.vocabularies.UI.v1.CollectionFacet":
433
434
  headerFacet = createCollectionHeaderFacet(facetDefinition, converterContext);
434
435
  break;
436
+
437
+ default:
438
+ break;
435
439
  }
436
440
 
437
441
  return headerFacet;
@@ -445,21 +449,20 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
445
449
  return undefined;
446
450
  }
447
451
 
448
- var groupId = ["Heroes", "Decoration", "Workers", "LongRunners"].indexOf(requestGroupId) !== -1 ? "$auto." + requestGroupId : requestGroupId;
449
- return "{ path : '', parameters : { $$groupId : '" + groupId + "' } }";
452
+ var groupId = ["Heroes", "Decoration", "Workers", "LongRunners"].indexOf(requestGroupId) !== -1 ? "$auto.".concat(requestGroupId) : requestGroupId;
453
+ return "{ path : '', parameters : { $$groupId : '".concat(groupId, "' } }");
450
454
  }
451
455
  /**
452
456
  * Create a manifest based custom header facet.
453
457
  *
454
- * @param {ManifestHeaderFacet} customHeaderFacetDefinition
455
- * @param {string} headerFacetKey
456
- *
457
- * @returns {CustomObjectPageHeaderFacet} The manifest based custom header facet created
458
+ * @param customHeaderFacetDefinition
459
+ * @param headerFacetKey
460
+ * @returns The manifest based custom header facet created
458
461
  */
459
462
 
460
463
 
461
464
  function createCustomHeaderFacet(customHeaderFacetDefinition, headerFacetKey) {
462
- var customHeaderFacetID = CustomHeaderFacetID(headerFacetKey);
465
+ var customHeaderFacetID = getCustomHeaderFacetID(headerFacetKey);
463
466
  var position = customHeaderFacetDefinition.position;
464
467
 
465
468
  if (!position) {
@@ -492,4 +495,4 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
492
495
 
493
496
  return _exports;
494
497
  }, false);
495
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkhlYWRlckZhY2V0LnRzIl0sIm5hbWVzIjpbIkhlYWRlckZhY2V0VHlwZSIsIkZhY2V0VHlwZSIsIkZsZXhEZXNpZ25UaW1lVHlwZSIsIkhlYWRlckRhdGFQb2ludFR5cGUiLCJUYXJnZXRBbm5vdGF0aW9uVHlwZSIsImdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyIsImNvbnZlcnRlckNvbnRleHQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImZvckVhY2giLCJmYWNldCIsImhlYWRlckZhY2V0IiwiY3JlYXRlSGVhZGVyRmFjZXQiLCJwdXNoIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJPYmplY3QiLCJrZXlzIiwibWFuaWZlc3RIZWFkZXJGYWNldEtleSIsImN1c3RvbUhlYWRlckZhY2V0IiwiY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXQiLCJnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImZhY2V0RGVmaW5pdGlvbiIsImNvbGxlY3Rpb25GYWNldERlZmluaXRpb24iLCIkVHlwZSIsImhlYWRlckZhY2V0SUQiLCJnZW5lcmF0ZSIsIkZhY2V0IiwiaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEhlYWRlckZhY2V0cyIsInN0YXNoZWRTZXR0aW5nIiwic3Rhc2hlZCIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJkZXNpZ25UaW1lTWV0YWRhdGEiLCJEZWZhdWx0IiwiTm90QWRhcHRhYmxlVHJlZSIsImRlc2lnblRpbWUiLCJmbGV4U2V0dGluZ3MiLCJkZXNpZ250aW1lIiwiTm90QWRhcHRhYmxlIiwiTm90QWRhcHRhYmxlVmlzaWJpbGl0eSIsImNyZWF0ZVJlZmVyZW5jZUhlYWRlckZhY2V0IiwiSGlkZGVuIiwidmFsdWVPZiIsIkhlYWRlckZhY2V0SUQiLCJnZXRIZWFkZXJGYWNldEtleSIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwidGFyZ2V0QW5ub3RhdGlvblZhbHVlIiwiVGFyZ2V0IiwidmFsdWUiLCJ0YXJnZXRBbm5vdGF0aW9uVHlwZSIsImdldFRhcmdldEFubm90YXRpb25UeXBlIiwiaGVhZGVyRm9ybURhdGEiLCJoZWFkZXJEYXRhUG9pbnREYXRhIiwiRmllbGRHcm91cCIsImdldEZpZWxkR3JvdXBGb3JtRGF0YSIsIkRhdGFQb2ludCIsImdldERhdGFQb2ludERhdGEiLCJ0eXBlIiwiQW5ub3RhdGlvbiIsImZhY2V0VHlwZSIsIlJlZmVyZW5jZSIsImlkIiwiY29udGFpbmVySWQiLCJIZWFkZXJGYWNldENvbnRhaW5lcklEIiwia2V5IiwidmlzaWJsZSIsImNvbXBpbGVCaW5kaW5nIiwibm90IiwiZXF1YWwiLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInVuZGVmaW5lZCIsImNyZWF0ZUNvbGxlY3Rpb25IZWFkZXJGYWNldCIsImZhY2V0cyIsIkZhY2V0cyIsIkNvbGxlY3Rpb24iLCJhbm5vdGF0aW9uVHlwZSIsIk5vbmUiLCJhbm5vdGF0aW9uVHlwZU1hcCIsIkNoYXJ0IiwiSWRlbnRpZmljYXRpb24iLCJDb250YWN0IiwiQWRkcmVzcyIsIiR0YXJnZXQiLCJ0ZXJtIiwiRXJyb3IiLCJmb3JtRWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyIsImdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdCIsIkhlYWRlckZhY2V0Rm9ybUlEIiwibGFiZWwiLCJhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHMiLCJEYXRhIiwiZGF0YUZpZWxkIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImlzVmFsdWVNdWx0aWxpbmVUZXh0IiwiVmFsdWUiLCJNdWx0aUxpbmVUZXh0IiwiRm9ybUVsZW1lbnRUeXBlIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiQ29tbW9uIiwiaWRQcmVmaXgiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJDb250ZW50IiwiVmlzdWFsaXphdGlvbiIsIlByb2dyZXNzSW5kaWNhdG9yIiwiUmF0aW5nSW5kaWNhdG9yIiwiZ2VuZXJhdGVCaW5kaW5nIiwicmVxdWVzdEdyb3VwSWQiLCJncm91cElkIiwiaW5kZXhPZiIsImN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbiIsImhlYWRlckZhY2V0S2V5IiwiY3VzdG9tSGVhZGVyRmFjZXRJRCIsIkN1c3RvbUhlYWRlckZhY2V0SUQiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiZnJhZ21lbnROYW1lIiwidGVtcGxhdGUiLCJuYW1lIiwidGl0bGUiLCJzdWJUaXRsZSIsImJpbmRpbmciLCJ0ZW1wbGF0ZUVkaXQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQTtBQUNBO0FBQ0E7QUFDQTtNQUVZQSxlOzthQUFBQSxlO0FBQUFBLElBQUFBLGU7QUFBQUEsSUFBQUEsZTtLQUFBQSxlLEtBQUFBLGU7OztNQUtBQyxTOzthQUFBQSxTO0FBQUFBLElBQUFBLFM7QUFBQUEsSUFBQUEsUztLQUFBQSxTLEtBQUFBLFM7OztNQUtBQyxrQjs7YUFBQUEsa0I7QUFBQUEsSUFBQUEsa0I7QUFBQUEsSUFBQUEsa0I7QUFBQUEsSUFBQUEsa0I7QUFBQUEsSUFBQUEsa0I7S0FBQUEsa0IsS0FBQUEsa0I7OztNQWlCUEMsbUI7O2FBQUFBLG1CO0FBQUFBLElBQUFBLG1CO0FBQUFBLElBQUFBLG1CO0FBQUFBLElBQUFBLG1CO0tBQUFBLG1C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QWpDLE9BQVAsR0FBc0RzRiwyQkFBMkIsQ0FBQ25GLFlBQWxGLENBYk47QUFjTmdHLE1BQUFBLE9BQU8sRUFBRWpCLGVBQWUsQ0FBQ0ksMkJBQTJCLENBQUNILGNBQTdCLENBZGxCO0FBZU5pQixNQUFBQSxZQUFZLEVBQUVkLDJCQUEyQixDQUFDYztBQWZwQyxLQUFQO0FBaUJBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhUG9pbnQsXG5cdEZhY2V0VHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdFVJQW5ub3RhdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgZ2V0U2VtYW50aWNPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQge1xuXHRDb25maWd1cmFibGVPYmplY3QsXG5cdENvbmZpZ3VyYWJsZVJlY29yZCxcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5zZXJ0Q3VzdG9tRWxlbWVudHMsXG5cdFBsYWNlbWVudCxcblx0UG9zaXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IEN1c3RvbUhlYWRlckZhY2V0SUQsIEhlYWRlckZhY2V0Q29udGFpbmVySUQsIEhlYWRlckZhY2V0Rm9ybUlELCBIZWFkZXJGYWNldElEIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IE1hbmlmZXN0SGVhZGVyRmFjZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBhbm5vdGF0aW9uRXhwcmVzc2lvbiwgQmluZGluZ0V4cHJlc3Npb24sIGNvbXBpbGVCaW5kaW5nLCBlcXVhbCwgbm90IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcIi4uLy4uLy4uL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQsIEZvcm1FbGVtZW50LCBGb3JtRWxlbWVudFR5cGUsIGdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuXG4vLyByZWdpb24gZGVmaW5pdGlvbnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gRGVmaW5pdGlvbnM6IEhlYWRlciBGYWNldCBUeXBlcywgR2VuZXJpYyBPUCBIZWFkZXIgRmFjZXQsIE1hbmlmZXN0IFByb3BlcnRpZXMgZm9yIEN1c3RvbSBIZWFkZXIgRmFjZXRcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgZW51bSBIZWFkZXJGYWNldFR5cGUge1xuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFhNTEZyYWdtZW50ID0gXCJYTUxGcmFnbWVudFwiXG59XG5cbmV4cG9ydCBlbnVtIEZhY2V0VHlwZSB7XG5cdFJlZmVyZW5jZSA9IFwiUmVmZXJlbmNlXCIsXG5cdENvbGxlY3Rpb24gPSBcIkNvbGxlY3Rpb25cIlxufVxuXG5leHBvcnQgZW51bSBGbGV4RGVzaWduVGltZVR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdE5vdEFkYXB0YWJsZSA9IFwibm90LWFkYXB0YWJsZVwiLCAvLyBkaXNhYmxlIGFsbCBhY3Rpb25zIG9uIHRoYXQgaW5zdGFuY2Vcblx0Tm90QWRhcHRhYmxlVHJlZSA9IFwibm90LWFkYXB0YWJsZS10cmVlXCIsIC8vIGRpc2FibGUgYWxsIGFjdGlvbnMgb24gdGhhdCBpbnN0YW5jZSBhbmQgb24gYWxsIGNoaWxkcmVuIG9mIHRoYXQgaW5zdGFuY2Vcblx0Tm90QWRhcHRhYmxlVmlzaWJpbGl0eSA9IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCIgLy8gZGlzYWJsZSBhbGwgYWN0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGUgdmlzaWJpbGl0eSwgbmFtZWx5IHJldmVhbCBhbmQgcmVtb3ZlXG59XG5cbmV4cG9ydCB0eXBlIEZsZXhTZXR0aW5ncyA9IHtcblx0ZGVzaWdudGltZT86IEZsZXhEZXNpZ25UaW1lVHlwZTtcbn07XG5cbnR5cGUgSGVhZGVyRm9ybURhdGEgPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRmb3JtRWxlbWVudHM6IEZvcm1FbGVtZW50W107XG59O1xuXG5lbnVtIEhlYWRlckRhdGFQb2ludFR5cGUge1xuXHRQcm9ncmVzc0luZGljYXRvciA9IFwiUHJvZ3Jlc3NJbmRpY2F0b3JcIixcblx0UmF0aW5nSW5kaWNhdG9yID0gXCJSYXRpbmdJbmRpY2F0b3JcIixcblx0Q29udGVudCA9IFwiQ29udGVudFwiXG59XG5cbnR5cGUgSGVhZGVyRGF0YVBvaW50RGF0YSA9IHtcblx0dHlwZTogSGVhZGVyRGF0YVBvaW50VHlwZTtcbn07XG5cbmVudW0gVGFyZ2V0QW5ub3RhdGlvblR5cGUge1xuXHROb25lID0gXCJOb25lXCIsXG5cdERhdGFQb2ludCA9IFwiRGF0YVBvaW50XCIsXG5cdENoYXJ0ID0gXCJDaGFydFwiLFxuXHRJZGVudGlmaWNhdGlvbiA9IFwiSWRlbnRpZmljYXRpb25cIixcblx0Q29udGFjdCA9IFwiQ29udGFjdFwiLFxuXHRBZGRyZXNzID0gXCJBZGRyZXNzXCIsXG5cdEZpZWxkR3JvdXAgPSBcIkZpZWxkR3JvdXBcIlxufVxuXG50eXBlIEJhc2VIZWFkZXJGYWNldCA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0dHlwZT86IEhlYWRlckZhY2V0VHlwZTsgLy8gTWFuaWZlc3Qgb3IgTWV0YWRhdGFcblx0aWQ6IHN0cmluZztcblx0Y29udGFpbmVySWQ6IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGZsZXhTZXR0aW5nczogRmxleFNldHRpbmdzO1xuXHRzdGFzaGVkOiBib29sZWFuO1xuXHR2aXNpYmxlOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0dGFyZ2V0QW5ub3RhdGlvblZhbHVlPzogc3RyaW5nO1xuXHR0YXJnZXRBbm5vdGF0aW9uVHlwZT86IFRhcmdldEFubm90YXRpb25UeXBlO1xufTtcblxudHlwZSBCYXNlUmVmZXJlbmNlRmFjZXQgPSBCYXNlSGVhZGVyRmFjZXQgJiB7XG5cdGZhY2V0VHlwZTogRmFjZXRUeXBlLlJlZmVyZW5jZTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpZWxkR3JvdXBGYWNldCA9IEJhc2VSZWZlcmVuY2VGYWNldCAmIHtcblx0aGVhZGVyRm9ybURhdGE6IEhlYWRlckZvcm1EYXRhO1xufTtcblxudHlwZSBEYXRhUG9pbnRGYWNldCA9IEJhc2VSZWZlcmVuY2VGYWNldCAmIHtcblx0aGVhZGVyRGF0YVBvaW50RGF0YT86IEhlYWRlckRhdGFQb2ludERhdGE7XG59O1xuXG50eXBlIFJlZmVyZW5jZUZhY2V0ID0gRmllbGRHcm91cEZhY2V0IHwgRGF0YVBvaW50RmFjZXQ7XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25GYWNldCA9IEJhc2VIZWFkZXJGYWNldCAmIHtcblx0ZmFjZXRUeXBlOiBGYWNldFR5cGUuQ29sbGVjdGlvbjtcblx0ZmFjZXRzOiBSZWZlcmVuY2VGYWNldFtdO1xufTtcblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZUhlYWRlckZhY2V0ID0gUmVmZXJlbmNlRmFjZXQgfCBDb2xsZWN0aW9uRmFjZXQ7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCA9IEN1c3RvbUVsZW1lbnQ8T2JqZWN0UGFnZUhlYWRlckZhY2V0PiAmIHtcblx0ZnJhZ21lbnROYW1lPzogc3RyaW5nO1xuXHR0aXRsZT86IHN0cmluZztcblx0c3ViVGl0bGU/OiBzdHJpbmc7XG5cdHN0YXNoZWQ/OiBib29sZWFuO1xuXHRiaW5kaW5nPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZUVkaXQ/OiBzdHJpbmc7XG59O1xuXG4vLyBlbmRyZWdpb24gZGVmaW5pdGlvbnNcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBDb2xsZWN0IEFsbCBIZWFkZXIgRmFjZXRzOiBDdXN0b20gKHZpYSBNYW5pZmVzdCkgYW5kIEFubm90YXRpb24gQmFzZWQgKHZpYSBNZXRhbW9kZWwpXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuLyoqXG4gKiBSZXRyaWV2ZSBoZWFkZXIgZmFjZXRzIGZyb20gYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKlxuICogQHJldHVybnMge09iamVjdFBhZ2VIZWFkZXJGYWNldH0gSGVhZGVyIGZhY2V0cyBmcm9tIGFubm90YXRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJGYWNldHNGcm9tQW5ub3RhdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdIHtcblx0Y29uc3QgaGVhZGVyRmFjZXRzOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXSA9IFtdO1xuXHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckZhY2V0cz8uZm9yRWFjaCgoZmFjZXQpID0+IHtcblx0XHRjb25zdCBoZWFkZXJGYWNldDogT2JqZWN0UGFnZUhlYWRlckZhY2V0IHwgdW5kZWZpbmVkID0gY3JlYXRlSGVhZGVyRmFjZXQoZmFjZXQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGlmIChoZWFkZXJGYWNldCkge1xuXHRcdFx0aGVhZGVyRmFjZXRzLnB1c2goaGVhZGVyRmFjZXQpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGhlYWRlckZhY2V0cztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBjdXN0b20gaGVhZGVyIGZhY2V0cyBmcm9tIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSB7Q29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+fSBtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0c1xuICpcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+fSBIZWFkZXJGYWNldHMgZnJvbSBtYW5pZmVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KFxuXHRtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0czogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+IHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+ID0ge307XG5cblx0T2JqZWN0LmtleXMobWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHMpLmZvckVhY2goKG1hbmlmZXN0SGVhZGVyRmFjZXRLZXkpID0+IHtcblx0XHRjb25zdCBjdXN0b21IZWFkZXJGYWNldDogTWFuaWZlc3RIZWFkZXJGYWNldCA9IG1hbmlmZXN0Q3VzdG9tSGVhZGVyRmFjZXRzW21hbmlmZXN0SGVhZGVyRmFjZXRLZXldO1xuXHRcdGN1c3RvbUhlYWRlckZhY2V0c1ttYW5pZmVzdEhlYWRlckZhY2V0S2V5XSA9IGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0KGN1c3RvbUhlYWRlckZhY2V0LCBtYW5pZmVzdEhlYWRlckZhY2V0S2V5KTtcblx0fSk7XG5cblx0cmV0dXJuIGN1c3RvbUhlYWRlckZhY2V0cztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBzdGFzaGVkIHNldHRpbmdzIGZvciBoZWFkZXIgZmFjZXRzIGZyb20gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIHtGYWNldFR5cGVzfSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSB7RmFjZXRUeXBlc30gY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFN0YXNoZWQgc2V0dGluZyBmb3IgaGVhZGVyIGZhY2V0IG9yIGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBib29sZWFuIHtcblx0Ly8gV2hlbiBhIEhlYWRlckZhY2V0IGlzIG5lc3RlZCBpbnNpZGUgYSBDb2xsZWN0aW9uRmFjZXQsIHN0YXNoaW5nIGlzIG5vdCBzdXBwb3J0ZWRcblx0aWYgKFxuXHRcdGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQgJiZcblx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXRcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IGhlYWRlckZhY2V0SUQgPSBnZW5lcmF0ZShbeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH1dKTtcblx0Y29uc3QgaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKCk7XG5cdGNvbnN0IHN0YXNoZWRTZXR0aW5nID0gaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZ1toZWFkZXJGYWNldElEXT8uc3Rhc2hlZDtcblx0cmV0dXJuIHN0YXNoZWRTZXR0aW5nID09PSB0cnVlO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGZsZXhpYmlsaXR5IGRlc2lnbnRpbWUgc2V0dGluZ3MgZnJvbSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0ge0ZhY2V0VHlwZXN9IGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIHtGYWNldFR5cGVzfSBjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqXG4gKiBAcmV0dXJucyB7RmxleERlc2lnblRpbWVUeXBlfSBEZXNpZ250aW1lIHNldHRpbmcgb3IgZGVmYXVsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBGbGV4RGVzaWduVGltZVR5cGUge1xuXHRsZXQgZGVzaWduVGltZU1ldGFkYXRhOiBGbGV4RGVzaWduVGltZVR5cGUgPSBGbGV4RGVzaWduVGltZVR5cGUuRGVmYXVsdDtcblx0Y29uc3QgaGVhZGVyRmFjZXRJRCA9IGdlbmVyYXRlKFt7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfV0pO1xuXG5cdC8vIEZvciBIZWFkZXJGYWNldHMgbmVzdGVkIGluc2lkZSBDb2xsZWN0aW9uRmFjZXQgUlRBIHNob3VsZCBiZSBkaXNhYmxlZCwgdGhlcmVmb3JlIHNldCB0byBcIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdGlmIChcblx0XHRmYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0ICYmXG5cdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0XG5cdCkge1xuXHRcdGRlc2lnblRpbWVNZXRhZGF0YSA9IEZsZXhEZXNpZ25UaW1lVHlwZS5Ob3RBZGFwdGFibGVUcmVlO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGhlYWRlckZhY2V0c0NvbnRyb2xDb25maWcgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEhlYWRlckZhY2V0cygpO1xuXHRcdGlmIChoZWFkZXJGYWNldElEKSB7XG5cdFx0XHRjb25zdCBkZXNpZ25UaW1lID0gaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZ1toZWFkZXJGYWNldElEXT8uZmxleFNldHRpbmdzPy5kZXNpZ250aW1lO1xuXHRcdFx0c3dpdGNoIChkZXNpZ25UaW1lKSB7XG5cdFx0XHRcdGNhc2UgRmxleERlc2lnblRpbWVUeXBlLk5vdEFkYXB0YWJsZTpcblx0XHRcdFx0Y2FzZSBGbGV4RGVzaWduVGltZVR5cGUuTm90QWRhcHRhYmxlVHJlZTpcblx0XHRcdFx0Y2FzZSBGbGV4RGVzaWduVGltZVR5cGUuTm90QWRhcHRhYmxlVmlzaWJpbGl0eTpcblx0XHRcdFx0XHRkZXNpZ25UaW1lTWV0YWRhdGEgPSBkZXNpZ25UaW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVzaWduVGltZU1ldGFkYXRhO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIENvbnZlcnQgJiBCdWlsZCBBbm5vdGF0aW9uIEJhc2VkIEhlYWRlciBGYWNldHNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlSGVhZGVyRmFjZXQoXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVmZXJlbmNlRmFjZXQgfCB1bmRlZmluZWQge1xuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCAmJiAhKGZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlKSkge1xuXHRcdGNvbnN0IGhlYWRlckZhY2V0SUQgPSBIZWFkZXJGYWNldElEKHsgRmFjZXQ6IGZhY2V0RGVmaW5pdGlvbiB9KSxcblx0XHRcdGdldEhlYWRlckZhY2V0S2V5ID0gKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWNldERlZmluaXRpb24uSUQ/LnRvU3RyaW5nKCkgfHwgZmFjZXREZWZpbml0aW9uLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xuXHRcdFx0fSxcblx0XHRcdHRhcmdldEFubm90YXRpb25WYWx1ZSA9IGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUsXG5cdFx0XHR0YXJnZXRBbm5vdGF0aW9uVHlwZSA9IGdldFRhcmdldEFubm90YXRpb25UeXBlKGZhY2V0RGVmaW5pdGlvbik7XG5cblx0XHRsZXQgaGVhZGVyRm9ybURhdGE6IEhlYWRlckZvcm1EYXRhIHwgdW5kZWZpbmVkO1xuXHRcdGxldCBoZWFkZXJEYXRhUG9pbnREYXRhOiBIZWFkZXJEYXRhUG9pbnREYXRhIHwgdW5kZWZpbmVkO1xuXG5cdFx0c3dpdGNoICh0YXJnZXRBbm5vdGF0aW9uVHlwZSkge1xuXHRcdFx0Y2FzZSBUYXJnZXRBbm5vdGF0aW9uVHlwZS5GaWVsZEdyb3VwOlxuXHRcdFx0XHRoZWFkZXJGb3JtRGF0YSA9IGdldEZpZWxkR3JvdXBGb3JtRGF0YShmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBUYXJnZXRBbm5vdGF0aW9uVHlwZS5EYXRhUG9pbnQ6XG5cdFx0XHRcdGhlYWRlckRhdGFQb2ludERhdGEgPSBnZXREYXRhUG9pbnREYXRhKGZhY2V0RGVmaW5pdGlvbik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gVG9EbzogSGFuZGxlIG90aGVyIGNhc2VzXG5cdFx0fVxuXG5cdFx0Y29uc3QgeyBhbm5vdGF0aW9ucyB9ID0gZmFjZXREZWZpbml0aW9uO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBIZWFkZXJGYWNldFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGZhY2V0VHlwZTogRmFjZXRUeXBlLlJlZmVyZW5jZSxcblx0XHRcdGlkOiBoZWFkZXJGYWNldElELFxuXHRcdFx0Y29udGFpbmVySWQ6IEhlYWRlckZhY2V0Q29udGFpbmVySUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0pLFxuXHRcdFx0a2V5OiBnZXRIZWFkZXJGYWNldEtleShmYWNldERlZmluaXRpb24sIGhlYWRlckZhY2V0SUQpLFxuXHRcdFx0ZmxleFNldHRpbmdzOiB7XG5cdFx0XHRcdGRlc2lnbnRpbWU6IGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0fSxcblx0XHRcdHN0YXNoZWQ6IGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpICsgXCIvXCIsXG5cdFx0XHR0YXJnZXRBbm5vdGF0aW9uVmFsdWUsXG5cdFx0XHR0YXJnZXRBbm5vdGF0aW9uVHlwZSxcblx0XHRcdGhlYWRlckZvcm1EYXRhLFxuXHRcdFx0aGVhZGVyRGF0YVBvaW50RGF0YVxuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb2xsZWN0aW9uSGVhZGVyRmFjZXQoXG5cdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IENvbGxlY3Rpb25GYWNldCB8IHVuZGVmaW5lZCB7XG5cdGlmIChjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpIHtcblx0XHRjb25zdCBmYWNldHM6IFJlZmVyZW5jZUZhY2V0W10gPSBbXSxcblx0XHRcdGhlYWRlckZhY2V0SUQgPSBIZWFkZXJGYWNldElEKHsgRmFjZXQ6IGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24gfSksXG5cdFx0XHRnZXRIZWFkZXJGYWNldEtleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcblx0XHRcdH07XG5cblx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLkZhY2V0cy5mb3JFYWNoKChmYWNldERlZmluaXRpb24pID0+IHtcblx0XHRcdGNvbnN0IGZhY2V0OiBSZWZlcmVuY2VGYWNldCB8IHVuZGVmaW5lZCA9IGNyZWF0ZVJlZmVyZW5jZUhlYWRlckZhY2V0KFxuXHRcdFx0XHRmYWNldERlZmluaXRpb24sXG5cdFx0XHRcdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdCk7XG5cdFx0XHRpZiAoZmFjZXQpIHtcblx0XHRcdFx0ZmFjZXRzLnB1c2goZmFjZXQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEhlYWRlckZhY2V0VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0ZmFjZXRUeXBlOiBGYWNldFR5cGUuQ29sbGVjdGlvbixcblx0XHRcdGlkOiBoZWFkZXJGYWNldElELFxuXHRcdFx0Y29udGFpbmVySWQ6IEhlYWRlckZhY2V0Q29udGFpbmVySUQoeyBGYWNldDogY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiB9KSxcblx0XHRcdGtleTogZ2V0SGVhZGVyRmFjZXRLZXkoY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiwgaGVhZGVyRmFjZXRJRCksXG5cdFx0XHRmbGV4U2V0dGluZ3M6IHtcblx0XHRcdFx0ZGVzaWdudGltZTogZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChcblx0XHRcdFx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpXG5cdFx0XHR9LFxuXHRcdFx0c3Rhc2hlZDogZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiwgY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpICsgXCIvXCIsXG5cdFx0XHRmYWNldHNcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0QW5ub3RhdGlvblR5cGUoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzKTogVGFyZ2V0QW5ub3RhdGlvblR5cGUge1xuXHRsZXQgYW5ub3RhdGlvblR5cGUgPSBUYXJnZXRBbm5vdGF0aW9uVHlwZS5Ob25lO1xuXHRjb25zdCBhbm5vdGF0aW9uVHlwZU1hcDogUmVjb3JkPHN0cmluZywgVGFyZ2V0QW5ub3RhdGlvblR5cGU+ID0ge1xuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCI6IFRhcmdldEFubm90YXRpb25UeXBlLkRhdGFQb2ludCxcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCI6IFRhcmdldEFubm90YXRpb25UeXBlLkNoYXJ0LFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSWRlbnRpZmljYXRpb25cIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuSWRlbnRpZmljYXRpb24sXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuQ29udGFjdCxcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQWRkcmVzc1wiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5BZGRyZXNzLFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5GaWVsZEdyb3VwXG5cdH07XG5cdC8vIFJlZmVyZW5jZVVSTEZhY2V0IGFuZCBDb2xsZWN0aW9uRmFjZXQgZG8gbm90IGhhdmUgVGFyZ2V0IHByb3BlcnR5LlxuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldCAmJiBmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCkge1xuXHRcdGFubm90YXRpb25UeXBlID0gYW5ub3RhdGlvblR5cGVNYXBbZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldD8udGVybV0gfHwgVGFyZ2V0QW5ub3RhdGlvblR5cGUuTm9uZTtcblx0fVxuXG5cdHJldHVybiBhbm5vdGF0aW9uVHlwZTtcbn1cblxuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZvcm1EYXRhKGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEhlYWRlckZvcm1EYXRhIHtcblx0Ly8gc3BsaXQgaW4gdGhpcyBmcm9tIGFubm90YXRpb24gKyBnZXRGaWVsZEdyb3VwRnJvbURlZmF1bHRcblx0aWYgKCFmYWNldERlZmluaXRpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IEZpZWxkR3JvdXAgZm9ybSBkYXRhIHdpdGhvdXQgZmFjZXQgZGVmaW5pdGlvblwiKTtcblx0fVxuXG5cdGNvbnN0IGZvcm1FbGVtZW50cyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdChmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdCk7XG5cblx0cmV0dXJuIHtcblx0XHRpZDogSGVhZGVyRmFjZXRGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0pLFxuXHRcdGxhYmVsOiBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0Zm9ybUVsZW1lbnRzXG5cdH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBtYW5pZmVzdC1iYXNlZCBGb3JtRWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtGYWNldFR5cGV9IGZhY2V0RGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZmFjZXRcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBmYWNldFxuICpcbiAqIEByZXR1cm5zIHtBcnJheX0gQW5ub3RhdGlvbi1iYXNlZCBGb3JtRWxlbWVudHNcbiAqL1xuZnVuY3Rpb24gZ2V0Rm9ybUVsZW1lbnRzRnJvbUFubm90YXRpb25zKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEFubm90YXRpb25Gb3JtRWxlbWVudFtdIHtcblx0Y29uc3QgYW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzOiBBbm5vdGF0aW9uRm9ybUVsZW1lbnRbXSA9IFtdO1xuXG5cdC8vIFJlZmVyZW5jZVVSTEZhY2V0IGFuZCBDb2xsZWN0aW9uRmFjZXQgZG8gbm90IGhhdmUgVGFyZ2V0IHByb3BlcnR5LlxuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldCAmJiBmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCkge1xuXHRcdChmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApPy5EYXRhLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0aWYgKCEoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUpKSB7XG5cdFx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPSBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8XG5cdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGggfHxcblx0XHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24gfHxcblx0XHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb25cblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y29uc3QgeyBhbm5vdGF0aW9ucyB9ID0gZGF0YUZpZWxkO1xuXHRcdFx0XHRcdGFubm90YXRpb25CYXNlZEZvcm1FbGVtZW50cy5wdXNoKHtcblx0XHRcdFx0XHRcdGlzVmFsdWVNdWx0aWxpbmVUZXh0OiBkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlLFxuXHRcdFx0XHRcdFx0dHlwZTogRm9ybUVsZW1lbnRUeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihhbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsIHx8IGRhdGFGaWVsZC5MYWJlbCxcblx0XHRcdFx0XHRcdGlkUHJlZml4OiBIZWFkZXJGYWNldEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSkgKyBcIi9cIixcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IHsgYW5ub3RhdGlvbnMgfSA9IGRhdGFGaWVsZDtcblx0XHRcdFx0XHRhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHMucHVzaCh7XG5cdFx0XHRcdFx0XHQvLyBGSVhNRSB0aGlzIGlzIHdyb25nXG5cdFx0XHRcdFx0XHRpc1ZhbHVlTXVsdGlsaW5lVGV4dDogKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VSSBhcyBhbnkpPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkgPT09IHRydWUsXG5cdFx0XHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRcdGlkUHJlZml4OiBIZWFkZXJGYWNldEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSkgKyBcIi9cIixcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gYW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXREYXRhUG9pbnREYXRhKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyk6IEhlYWRlckRhdGFQb2ludERhdGEge1xuXHRsZXQgdHlwZSA9IEhlYWRlckRhdGFQb2ludFR5cGUuQ29udGVudDtcblx0aWYgKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRpZiAoKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9Qcm9ncmVzc1wiKSB7XG5cdFx0XHR0eXBlID0gSGVhZGVyRGF0YVBvaW50VHlwZS5Qcm9ncmVzc0luZGljYXRvcjtcblx0XHR9IGVsc2UgaWYgKChmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZpc3VhbGl6YXRpb24gPT09IFwiVUkuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRcdHR5cGUgPSBIZWFkZXJEYXRhUG9pbnRUeXBlLlJhdGluZ0luZGljYXRvcjtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyB0eXBlIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhbm5vdGF0aW9uLWJhc2VkIGhlYWRlciBmYWNldC5cbiAqXG4gKiBAcGFyYW0ge0ZhY2V0VHlwZXN9IGZhY2V0RGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZmFjZXRcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZUhlYWRlckZhY2V0fSBUaGUgY3JlYXRlZCBhbm5vdGF0aW9uLWJhc2VkIGhlYWRlciBmYWNldFxuICovXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJGYWNldChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfCB1bmRlZmluZWQge1xuXHRsZXQgaGVhZGVyRmFjZXQ6IE9iamVjdFBhZ2VIZWFkZXJGYWNldCB8IHVuZGVmaW5lZDtcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aGVhZGVyRmFjZXQgPSBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0aGVhZGVyRmFjZXQgPSBjcmVhdGVDb2xsZWN0aW9uSGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIGhlYWRlckZhY2V0O1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIENvbnZlcnQgJiBCdWlsZCBNYW5pZmVzdCBCYXNlZCBIZWFkZXIgRmFjZXRzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2VuZXJhdGVCaW5kaW5nKHJlcXVlc3RHcm91cElkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFyZXF1ZXN0R3JvdXBJZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgZ3JvdXBJZCA9XG5cdFx0W1wiSGVyb2VzXCIsIFwiRGVjb3JhdGlvblwiLCBcIldvcmtlcnNcIiwgXCJMb25nUnVubmVyc1wiXS5pbmRleE9mKHJlcXVlc3RHcm91cElkKSAhPT0gLTEgPyBcIiRhdXRvLlwiICsgcmVxdWVzdEdyb3VwSWQgOiByZXF1ZXN0R3JvdXBJZDtcblxuXHRyZXR1cm4gXCJ7IHBhdGggOiAnJywgcGFyYW1ldGVycyA6IHsgJCRncm91cElkIDogJ1wiICsgZ3JvdXBJZCArIFwiJyB9IH1cIjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtYW5pZmVzdCBiYXNlZCBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSB7TWFuaWZlc3RIZWFkZXJGYWNldH0gY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVyRmFjZXRLZXlcbiAqXG4gKiBAcmV0dXJucyB7Q3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0fSBUaGUgbWFuaWZlc3QgYmFzZWQgY3VzdG9tIGhlYWRlciBmYWNldCBjcmVhdGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0KGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbjogTWFuaWZlc3RIZWFkZXJGYWNldCwgaGVhZGVyRmFjZXRLZXk6IHN0cmluZyk6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldCB7XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0SUQgPSBDdXN0b21IZWFkZXJGYWNldElEKGhlYWRlckZhY2V0S2V5KTtcblxuXHRsZXQgcG9zaXRpb246IFBvc2l0aW9uIHwgdW5kZWZpbmVkID0gY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnBvc2l0aW9uO1xuXHRpZiAoIXBvc2l0aW9uKSB7XG5cdFx0cG9zaXRpb24gPSB7XG5cdFx0XHRwbGFjZW1lbnQ6IFBsYWNlbWVudC5BZnRlclxuXHRcdH07XG5cdH1cblx0Ly8gVE9ETyBmb3IgYW4gbm9uIGFubm90YXRpb24gZnJhZ21lbnQgdGhlIG5hbWUgaXMgbWFuZGF0b3J5IC0+IE5vdCBjaGVja2VkXG5cdHJldHVybiB7XG5cdFx0ZmFjZXRUeXBlOiBGYWNldFR5cGUuUmVmZXJlbmNlLFxuXHRcdGZhY2V0czogW10sXG5cdFx0dHlwZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnR5cGUsXG5cdFx0aWQ6IGN1c3RvbUhlYWRlckZhY2V0SUQsXG5cdFx0Y29udGFpbmVySWQ6IGN1c3RvbUhlYWRlckZhY2V0SUQsXG5cdFx0a2V5OiBoZWFkZXJGYWNldEtleSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0dmlzaWJsZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnZpc2libGUsXG5cdFx0ZnJhZ21lbnROYW1lOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24udGVtcGxhdGUgfHwgY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLm5hbWUsXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi50aXRsZSxcblx0XHRzdWJUaXRsZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnN1YlRpdGxlLFxuXHRcdHN0YXNoZWQ6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi5zdGFzaGVkIHx8IGZhbHNlLFxuXHRcdGZsZXhTZXR0aW5nczogeyAuLi57IGRlc2lnbnRpbWU6IEZsZXhEZXNpZ25UaW1lVHlwZS5EZWZhdWx0IH0sIC4uLmN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi5mbGV4U2V0dGluZ3MgfSxcblx0XHRiaW5kaW5nOiBnZW5lcmF0ZUJpbmRpbmcoY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnJlcXVlc3RHcm91cElkKSxcblx0XHR0ZW1wbGF0ZUVkaXQ6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi50ZW1wbGF0ZUVkaXRcblx0fTtcbn1cbiJdfQ==
498
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkhlYWRlckZhY2V0LnRzIl0sIm5hbWVzIjpbIkhlYWRlckZhY2V0VHlwZSIsIkZhY2V0VHlwZSIsIkZsZXhEZXNpZ25UaW1lVHlwZSIsIkhlYWRlckRhdGFQb2ludFR5cGUiLCJUYXJnZXRBbm5vdGF0aW9uVHlwZSIsImdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyIsImNvbnZlcnRlckNvbnRleHQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImZvckVhY2giLCJmYWNldCIsImhlYWRlckZhY2V0IiwiY3JlYXRlSGVhZGVyRmFjZXQiLCJwdXNoIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJPYmplY3QiLCJrZXlzIiwibWFuaWZlc3RIZWFkZXJGYWNldEtleSIsImN1c3RvbUhlYWRlckZhY2V0IiwiY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXQiLCJnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImZhY2V0RGVmaW5pdGlvbiIsImNvbGxlY3Rpb25GYWNldERlZmluaXRpb24iLCIkVHlwZSIsImhlYWRlckZhY2V0SUQiLCJnZW5lcmF0ZSIsIkZhY2V0IiwiaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEhlYWRlckZhY2V0cyIsInN0YXNoZWRTZXR0aW5nIiwic3Rhc2hlZCIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJkZXNpZ25UaW1lTWV0YWRhdGEiLCJEZWZhdWx0IiwiTm90QWRhcHRhYmxlVHJlZSIsImRlc2lnblRpbWUiLCJmbGV4U2V0dGluZ3MiLCJkZXNpZ250aW1lIiwiTm90QWRhcHRhYmxlIiwiTm90QWRhcHRhYmxlVmlzaWJpbGl0eSIsImNyZWF0ZVJlZmVyZW5jZUhlYWRlckZhY2V0IiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEhlYWRlckZhY2V0SUQiLCJnZXRIZWFkZXJGYWNldEtleSIsImZhY2V0RGVmaW5pdGlvblRvQ2hlY2siLCJmYWxsYmFjayIsIklEIiwidG9TdHJpbmciLCJMYWJlbCIsInRhcmdldEFubm90YXRpb25WYWx1ZSIsIlRhcmdldCIsInZhbHVlIiwidGFyZ2V0QW5ub3RhdGlvblR5cGUiLCJnZXRUYXJnZXRBbm5vdGF0aW9uVHlwZSIsImhlYWRlckZvcm1EYXRhIiwiaGVhZGVyRGF0YVBvaW50RGF0YSIsIkZpZWxkR3JvdXAiLCJnZXRGaWVsZEdyb3VwRm9ybURhdGEiLCJEYXRhUG9pbnQiLCJnZXREYXRhUG9pbnREYXRhIiwidHlwZSIsIkFubm90YXRpb24iLCJmYWNldFR5cGUiLCJSZWZlcmVuY2UiLCJpZCIsImNvbnRhaW5lcklkIiwiZ2V0SGVhZGVyRmFjZXRDb250YWluZXJJRCIsImtleSIsInZpc2libGUiLCJjb21waWxlRXhwcmVzc2lvbiIsIm5vdCIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidW5kZWZpbmVkIiwiY3JlYXRlQ29sbGVjdGlvbkhlYWRlckZhY2V0IiwiZmFjZXRzIiwiRmFjZXRzIiwiQ29sbGVjdGlvbiIsImFubm90YXRpb25UeXBlIiwiTm9uZSIsImFubm90YXRpb25UeXBlTWFwIiwiQ2hhcnQiLCJJZGVudGlmaWNhdGlvbiIsIkNvbnRhY3QiLCJBZGRyZXNzIiwiJHRhcmdldCIsInRlcm0iLCJFcnJvciIsImZvcm1FbGVtZW50cyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzRnJvbUFubm90YXRpb25zIiwiZ2V0Rm9ybUVsZW1lbnRzRnJvbU1hbmlmZXN0IiwiZ2V0SGVhZGVyRmFjZXRGb3JtSUQiLCJsYWJlbCIsImFubm90YXRpb25CYXNlZEZvcm1FbGVtZW50cyIsIkRhdGEiLCJkYXRhRmllbGQiLCJzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoIiwiZ2V0U2VtYW50aWNPYmplY3RQYXRoIiwiaXNWYWx1ZU11bHRpbGluZVRleHQiLCJWYWx1ZSIsIk11bHRpTGluZVRleHQiLCJGb3JtRWxlbWVudFR5cGUiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJDb21tb24iLCJpZFByZWZpeCIsInNlbWFudGljT2JqZWN0UGF0aCIsIkNvbnRlbnQiLCJWaXN1YWxpemF0aW9uIiwiUHJvZ3Jlc3NJbmRpY2F0b3IiLCJSYXRpbmdJbmRpY2F0b3IiLCJnZW5lcmF0ZUJpbmRpbmciLCJyZXF1ZXN0R3JvdXBJZCIsImdyb3VwSWQiLCJpbmRleE9mIiwiY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uIiwiaGVhZGVyRmFjZXRLZXkiLCJjdXN0b21IZWFkZXJGYWNldElEIiwiZ2V0Q3VzdG9tSGVhZGVyRmFjZXRJRCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJmcmFnbWVudE5hbWUiLCJ0ZW1wbGF0ZSIsIm5hbWUiLCJ0aXRsZSIsInN1YlRpdGxlIiwiYmluZGluZyIsInRlbXBsYXRlRWRpdCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBO0FBQ0E7QUFDQTtBQUNBO01BRVlBLGU7O2FBQUFBLGU7QUFBQUEsSUFBQUEsZTtBQUFBQSxJQUFBQSxlO0tBQUFBLGUsS0FBQUEsZTs7O01BS0FDLFM7O2FBQUFBLFM7QUFBQUEsSUFBQUEsUztBQUFBQSxJQUFBQSxTO0tBQUFBLFMsS0FBQUEsUzs7O01BS0FDLGtCOzthQUFBQSxrQjtBQUFBQSxJQUFBQSxrQjtBQUFBQSxJQUFBQSxrQjtBQUFBQSxJQUFBQSxrQjtBQUFBQSxJQUFBQSxrQjtLQUFBQSxrQixLQUFBQSxrQjs7O01BaUJQQyxtQjs7YUFBQUEsbUI7QUFBQUEs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QUFFQyxRQUFBQSxVQUFVLEVBQUV6QyxrQkFBa0IsQ0FBQ3FDO0FBQWpDLE9BQVAsR0FBc0R1RiwyQkFBMkIsQ0FBQ3BGLFlBQWxGLENBYk47QUFjTmlHLE1BQUFBLE9BQU8sRUFBRWpCLGVBQWUsQ0FBQ0ksMkJBQTJCLENBQUNILGNBQTdCLENBZGxCO0FBZU5pQixNQUFBQSxZQUFZLEVBQUVkLDJCQUEyQixDQUFDYztBQWZwQyxLQUFQO0FBaUJBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFQb2ludCxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0UmVmZXJlbmNlRmFjZXRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IGdldFNlbWFudGljT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIENvbmZpZ3VyYWJsZVJlY29yZCwgQ3VzdG9tRWxlbWVudCwgUG9zaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQge1xuXHRnZXRDdXN0b21IZWFkZXJGYWNldElELFxuXHRnZXRIZWFkZXJGYWNldENvbnRhaW5lcklELFxuXHRnZXRIZWFkZXJGYWNldEZvcm1JRCxcblx0Z2V0SGVhZGVyRmFjZXRJRFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdEhlYWRlckZhY2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgbm90IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcIi4uLy4uLy4uL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvbkZvcm1FbGVtZW50LCBGb3JtRWxlbWVudCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHsgRm9ybUVsZW1lbnRUeXBlLCBnZXRGb3JtRWxlbWVudHNGcm9tTWFuaWZlc3QgfSBmcm9tIFwiLi4vQ29tbW9uL0Zvcm1cIjtcblxuLy8gcmVnaW9uIGRlZmluaXRpb25zXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIERlZmluaXRpb25zOiBIZWFkZXIgRmFjZXQgVHlwZXMsIEdlbmVyaWMgT1AgSGVhZGVyIEZhY2V0LCBNYW5pZmVzdCBQcm9wZXJ0aWVzIGZvciBDdXN0b20gSGVhZGVyIEZhY2V0XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZXhwb3J0IGVudW0gSGVhZGVyRmFjZXRUeXBlIHtcblx0QW5ub3RhdGlvbiA9IFwiQW5ub3RhdGlvblwiLFxuXHRYTUxGcmFnbWVudCA9IFwiWE1MRnJhZ21lbnRcIlxufVxuXG5leHBvcnQgZW51bSBGYWNldFR5cGUge1xuXHRSZWZlcmVuY2UgPSBcIlJlZmVyZW5jZVwiLFxuXHRDb2xsZWN0aW9uID0gXCJDb2xsZWN0aW9uXCJcbn1cblxuZXhwb3J0IGVudW0gRmxleERlc2lnblRpbWVUeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHROb3RBZGFwdGFibGUgPSBcIm5vdC1hZGFwdGFibGVcIiwgLy8gZGlzYWJsZSBhbGwgYWN0aW9ucyBvbiB0aGF0IGluc3RhbmNlXG5cdE5vdEFkYXB0YWJsZVRyZWUgPSBcIm5vdC1hZGFwdGFibGUtdHJlZVwiLCAvLyBkaXNhYmxlIGFsbCBhY3Rpb25zIG9uIHRoYXQgaW5zdGFuY2UgYW5kIG9uIGFsbCBjaGlsZHJlbiBvZiB0aGF0IGluc3RhbmNlXG5cdE5vdEFkYXB0YWJsZVZpc2liaWxpdHkgPSBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwiIC8vIGRpc2FibGUgYWxsIGFjdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhlIHZpc2liaWxpdHksIG5hbWVseSByZXZlYWwgYW5kIHJlbW92ZVxufVxuXG5leHBvcnQgdHlwZSBGbGV4U2V0dGluZ3MgPSB7XG5cdGRlc2lnbnRpbWU/OiBGbGV4RGVzaWduVGltZVR5cGU7XG59O1xuXG50eXBlIEhlYWRlckZvcm1EYXRhID0ge1xuXHRpZDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0Zm9ybUVsZW1lbnRzOiBGb3JtRWxlbWVudFtdO1xufTtcblxuZW51bSBIZWFkZXJEYXRhUG9pbnRUeXBlIHtcblx0UHJvZ3Jlc3NJbmRpY2F0b3IgPSBcIlByb2dyZXNzSW5kaWNhdG9yXCIsXG5cdFJhdGluZ0luZGljYXRvciA9IFwiUmF0aW5nSW5kaWNhdG9yXCIsXG5cdENvbnRlbnQgPSBcIkNvbnRlbnRcIlxufVxuXG50eXBlIEhlYWRlckRhdGFQb2ludERhdGEgPSB7XG5cdHR5cGU6IEhlYWRlckRhdGFQb2ludFR5cGU7XG59O1xuXG5lbnVtIFRhcmdldEFubm90YXRpb25UeXBlIHtcblx0Tm9uZSA9IFwiTm9uZVwiLFxuXHREYXRhUG9pbnQgPSBcIkRhdGFQb2ludFwiLFxuXHRDaGFydCA9IFwiQ2hhcnRcIixcblx0SWRlbnRpZmljYXRpb24gPSBcIklkZW50aWZpY2F0aW9uXCIsXG5cdENvbnRhY3QgPSBcIkNvbnRhY3RcIixcblx0QWRkcmVzcyA9IFwiQWRkcmVzc1wiLFxuXHRGaWVsZEdyb3VwID0gXCJGaWVsZEdyb3VwXCJcbn1cblxudHlwZSBCYXNlSGVhZGVyRmFjZXQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBIZWFkZXJGYWNldFR5cGU7IC8vIE1hbmlmZXN0IG9yIE1ldGFkYXRhXG5cdGlkOiBzdHJpbmc7XG5cdGNvbnRhaW5lcklkOiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRmbGV4U2V0dGluZ3M6IEZsZXhTZXR0aW5ncztcblx0c3Rhc2hlZDogYm9vbGVhbjtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHRhcmdldEFubm90YXRpb25WYWx1ZT86IHN0cmluZztcblx0dGFyZ2V0QW5ub3RhdGlvblR5cGU/OiBUYXJnZXRBbm5vdGF0aW9uVHlwZTtcbn07XG5cbnR5cGUgQmFzZVJlZmVyZW5jZUZhY2V0ID0gQmFzZUhlYWRlckZhY2V0ICYge1xuXHRmYWNldFR5cGU6IEZhY2V0VHlwZS5SZWZlcmVuY2U7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZEdyb3VwRmFjZXQgPSBCYXNlUmVmZXJlbmNlRmFjZXQgJiB7XG5cdGhlYWRlckZvcm1EYXRhOiBIZWFkZXJGb3JtRGF0YTtcbn07XG5cbnR5cGUgRGF0YVBvaW50RmFjZXQgPSBCYXNlUmVmZXJlbmNlRmFjZXQgJiB7XG5cdGhlYWRlckRhdGFQb2ludERhdGE/OiBIZWFkZXJEYXRhUG9pbnREYXRhO1xufTtcblxudHlwZSBSZWZlcmVuY2VGYWNldCA9IEZpZWxkR3JvdXBGYWNldCB8IERhdGFQb2ludEZhY2V0O1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uRmFjZXQgPSBCYXNlSGVhZGVyRmFjZXQgJiB7XG5cdGZhY2V0VHlwZTogRmFjZXRUeXBlLkNvbGxlY3Rpb247XG5cdGZhY2V0czogUmVmZXJlbmNlRmFjZXRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VIZWFkZXJGYWNldCA9IFJlZmVyZW5jZUZhY2V0IHwgQ29sbGVjdGlvbkZhY2V0O1xuXG5leHBvcnQgdHlwZSBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQgPSBDdXN0b21FbGVtZW50PE9iamVjdFBhZ2VIZWFkZXJGYWNldD4gJiB7XG5cdGZyYWdtZW50TmFtZT86IHN0cmluZztcblx0dGl0bGU/OiBzdHJpbmc7XG5cdHN1YlRpdGxlPzogc3RyaW5nO1xuXHRzdGFzaGVkPzogYm9vbGVhbjtcblx0YmluZGluZz86IHN0cmluZztcblx0dGVtcGxhdGVFZGl0Pzogc3RyaW5nO1xufTtcblxuLy8gZW5kcmVnaW9uIGRlZmluaXRpb25zXG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQ29sbGVjdCBBbGwgSGVhZGVyIEZhY2V0czogQ3VzdG9tICh2aWEgTWFuaWZlc3QpIGFuZCBBbm5vdGF0aW9uIEJhc2VkICh2aWEgTWV0YW1vZGVsKVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi8qKlxuICogUmV0cmlldmUgaGVhZGVyIGZhY2V0cyBmcm9tIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBIZWFkZXIgZmFjZXRzIGZyb20gYW5ub3RhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZUhlYWRlckZhY2V0W10ge1xuXHRjb25zdCBoZWFkZXJGYWNldHM6IE9iamVjdFBhZ2VIZWFkZXJGYWNldFtdID0gW107XG5cdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzPy5mb3JFYWNoKChmYWNldCkgPT4ge1xuXHRcdGNvbnN0IGhlYWRlckZhY2V0OiBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfCB1bmRlZmluZWQgPSBjcmVhdGVIZWFkZXJGYWNldChmYWNldCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0aWYgKGhlYWRlckZhY2V0KSB7XG5cdFx0XHRoZWFkZXJGYWNldHMucHVzaChoZWFkZXJGYWNldCk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gaGVhZGVyRmFjZXRzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGN1c3RvbSBoZWFkZXIgZmFjZXRzIGZyb20gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0Q3VzdG9tSGVhZGVyRmFjZXRzXG4gKiBAcmV0dXJucyBIZWFkZXJGYWNldHMgZnJvbSBtYW5pZmVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0KFxuXHRtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0czogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0SGVhZGVyRmFjZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+IHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQ+ID0ge307XG5cblx0T2JqZWN0LmtleXMobWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHMpLmZvckVhY2goKG1hbmlmZXN0SGVhZGVyRmFjZXRLZXkpID0+IHtcblx0XHRjb25zdCBjdXN0b21IZWFkZXJGYWNldDogTWFuaWZlc3RIZWFkZXJGYWNldCA9IG1hbmlmZXN0Q3VzdG9tSGVhZGVyRmFjZXRzW21hbmlmZXN0SGVhZGVyRmFjZXRLZXldO1xuXHRcdGN1c3RvbUhlYWRlckZhY2V0c1ttYW5pZmVzdEhlYWRlckZhY2V0S2V5XSA9IGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0KGN1c3RvbUhlYWRlckZhY2V0LCBtYW5pZmVzdEhlYWRlckZhY2V0S2V5KTtcblx0fSk7XG5cblx0cmV0dXJuIGN1c3RvbUhlYWRlckZhY2V0cztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBzdGFzaGVkIHNldHRpbmdzIGZvciBoZWFkZXIgZmFjZXRzIGZyb20gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBTdGFzaGVkIHNldHRpbmcgZm9yIGhlYWRlciBmYWNldCBvciBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogYm9vbGVhbiB7XG5cdC8vIFdoZW4gYSBIZWFkZXJGYWNldCBpcyBuZXN0ZWQgaW5zaWRlIGEgQ29sbGVjdGlvbkZhY2V0LCBzdGFzaGluZyBpcyBub3Qgc3VwcG9ydGVkXG5cdGlmIChcblx0XHRmYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0ICYmXG5cdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0XG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRjb25zdCBoZWFkZXJGYWNldElEID0gZ2VuZXJhdGUoW3sgRmFjZXQ6IGZhY2V0RGVmaW5pdGlvbiB9XSk7XG5cdGNvbnN0IGhlYWRlckZhY2V0c0NvbnRyb2xDb25maWcgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEhlYWRlckZhY2V0cygpO1xuXHRjb25zdCBzdGFzaGVkU2V0dGluZyA9IGhlYWRlckZhY2V0c0NvbnRyb2xDb25maWdbaGVhZGVyRmFjZXRJRF0/LnN0YXNoZWQ7XG5cdHJldHVybiBzdGFzaGVkU2V0dGluZyA9PT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBmbGV4aWJpbGl0eSBkZXNpZ250aW1lIHNldHRpbmdzIGZyb20gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBEZXNpZ250aW1lIHNldHRpbmcgb3IgZGVmYXVsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBGbGV4RGVzaWduVGltZVR5cGUge1xuXHRsZXQgZGVzaWduVGltZU1ldGFkYXRhOiBGbGV4RGVzaWduVGltZVR5cGUgPSBGbGV4RGVzaWduVGltZVR5cGUuRGVmYXVsdDtcblx0Y29uc3QgaGVhZGVyRmFjZXRJRCA9IGdlbmVyYXRlKFt7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfV0pO1xuXG5cdC8vIEZvciBIZWFkZXJGYWNldHMgbmVzdGVkIGluc2lkZSBDb2xsZWN0aW9uRmFjZXQgUlRBIHNob3VsZCBiZSBkaXNhYmxlZCwgdGhlcmVmb3JlIHNldCB0byBcIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdGlmIChcblx0XHRmYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0ICYmXG5cdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0XG5cdCkge1xuXHRcdGRlc2lnblRpbWVNZXRhZGF0YSA9IEZsZXhEZXNpZ25UaW1lVHlwZS5Ob3RBZGFwdGFibGVUcmVlO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGhlYWRlckZhY2V0c0NvbnRyb2xDb25maWcgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEhlYWRlckZhY2V0cygpO1xuXHRcdGlmIChoZWFkZXJGYWNldElEKSB7XG5cdFx0XHRjb25zdCBkZXNpZ25UaW1lID0gaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZ1toZWFkZXJGYWNldElEXT8uZmxleFNldHRpbmdzPy5kZXNpZ250aW1lO1xuXHRcdFx0c3dpdGNoIChkZXNpZ25UaW1lKSB7XG5cdFx0XHRcdGNhc2UgRmxleERlc2lnblRpbWVUeXBlLk5vdEFkYXB0YWJsZTpcblx0XHRcdFx0Y2FzZSBGbGV4RGVzaWduVGltZVR5cGUuTm90QWRhcHRhYmxlVHJlZTpcblx0XHRcdFx0Y2FzZSBGbGV4RGVzaWduVGltZVR5cGUuTm90QWRhcHRhYmxlVmlzaWJpbGl0eTpcblx0XHRcdFx0XHRkZXNpZ25UaW1lTWV0YWRhdGEgPSBkZXNpZ25UaW1lO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVzaWduVGltZU1ldGFkYXRhO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIENvbnZlcnQgJiBCdWlsZCBBbm5vdGF0aW9uIEJhc2VkIEhlYWRlciBGYWNldHNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlSGVhZGVyRmFjZXQoXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVmZXJlbmNlRmFjZXQgfCB1bmRlZmluZWQge1xuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCAmJiAhKGZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlKSkge1xuXHRcdGNvbnN0IGhlYWRlckZhY2V0SUQgPSBnZXRIZWFkZXJGYWNldElEKHsgRmFjZXQ6IGZhY2V0RGVmaW5pdGlvbiB9KSxcblx0XHRcdGdldEhlYWRlckZhY2V0S2V5ID0gKGZhY2V0RGVmaW5pdGlvblRvQ2hlY2s6IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmFjZXREZWZpbml0aW9uVG9DaGVjay5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb25Ub0NoZWNrLkxhYmVsPy50b1N0cmluZygpIHx8IGZhbGxiYWNrO1xuXHRcdFx0fSxcblx0XHRcdHRhcmdldEFubm90YXRpb25WYWx1ZSA9IGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWUsXG5cdFx0XHR0YXJnZXRBbm5vdGF0aW9uVHlwZSA9IGdldFRhcmdldEFubm90YXRpb25UeXBlKGZhY2V0RGVmaW5pdGlvbik7XG5cblx0XHRsZXQgaGVhZGVyRm9ybURhdGE6IEhlYWRlckZvcm1EYXRhIHwgdW5kZWZpbmVkO1xuXHRcdGxldCBoZWFkZXJEYXRhUG9pbnREYXRhOiBIZWFkZXJEYXRhUG9pbnREYXRhIHwgdW5kZWZpbmVkO1xuXG5cdFx0c3dpdGNoICh0YXJnZXRBbm5vdGF0aW9uVHlwZSkge1xuXHRcdFx0Y2FzZSBUYXJnZXRBbm5vdGF0aW9uVHlwZS5GaWVsZEdyb3VwOlxuXHRcdFx0XHRoZWFkZXJGb3JtRGF0YSA9IGdldEZpZWxkR3JvdXBGb3JtRGF0YShmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBUYXJnZXRBbm5vdGF0aW9uVHlwZS5EYXRhUG9pbnQ6XG5cdFx0XHRcdGhlYWRlckRhdGFQb2ludERhdGEgPSBnZXREYXRhUG9pbnREYXRhKGZhY2V0RGVmaW5pdGlvbik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gVG9EbzogSGFuZGxlIG90aGVyIGNhc2VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRjb25zdCB7IGFubm90YXRpb25zIH0gPSBmYWNldERlZmluaXRpb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEhlYWRlckZhY2V0VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0ZmFjZXRUeXBlOiBGYWNldFR5cGUuUmVmZXJlbmNlLFxuXHRcdFx0aWQ6IGhlYWRlckZhY2V0SUQsXG5cdFx0XHRjb250YWluZXJJZDogZ2V0SGVhZGVyRmFjZXRDb250YWluZXJJRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSksXG5cdFx0XHRrZXk6IGdldEhlYWRlckZhY2V0S2V5KGZhY2V0RGVmaW5pdGlvbiwgaGVhZGVyRmFjZXRJRCksXG5cdFx0XHRmbGV4U2V0dGluZ3M6IHtcblx0XHRcdFx0ZGVzaWdudGltZTogZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHR9LFxuXHRcdFx0c3Rhc2hlZDogZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpfS9gLFxuXHRcdFx0dGFyZ2V0QW5ub3RhdGlvblZhbHVlLFxuXHRcdFx0dGFyZ2V0QW5ub3RhdGlvblR5cGUsXG5cdFx0XHRoZWFkZXJGb3JtRGF0YSxcblx0XHRcdGhlYWRlckRhdGFQb2ludERhdGFcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29sbGVjdGlvbkhlYWRlckZhY2V0KFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDb2xsZWN0aW9uRmFjZXQgfCB1bmRlZmluZWQge1xuXHRpZiAoY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSB7XG5cdFx0Y29uc3QgZmFjZXRzOiBSZWZlcmVuY2VGYWNldFtdID0gW10sXG5cdFx0XHRoZWFkZXJGYWNldElEID0gZ2V0SGVhZGVyRmFjZXRJRCh7IEZhY2V0OiBjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uIH0pLFxuXHRcdFx0Z2V0SGVhZGVyRmFjZXRLZXkgPSAoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRcdFx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvbi5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG5cdFx0XHR9O1xuXG5cdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZm9yRWFjaCgoZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBmYWNldDogUmVmZXJlbmNlRmFjZXQgfCB1bmRlZmluZWQgPSBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChcblx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKGZhY2V0KSB7XG5cdFx0XHRcdGZhY2V0cy5wdXNoKGZhY2V0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBIZWFkZXJGYWNldFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGZhY2V0VHlwZTogRmFjZXRUeXBlLkNvbGxlY3Rpb24sXG5cdFx0XHRpZDogaGVhZGVyRmFjZXRJRCxcblx0XHRcdGNvbnRhaW5lcklkOiBnZXRIZWFkZXJGYWNldENvbnRhaW5lcklEKHsgRmFjZXQ6IGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24gfSksXG5cdFx0XHRrZXk6IGdldEhlYWRlckZhY2V0S2V5KGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGhlYWRlckZhY2V0SUQpLFxuXHRcdFx0ZmxleFNldHRpbmdzOiB7XG5cdFx0XHRcdGRlc2lnbnRpbWU6IGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQoXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KVxuXHRcdFx0fSxcblx0XHRcdHN0YXNoZWQ6IGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpXG5cdFx0XHQpLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2AsXG5cdFx0XHRmYWNldHNcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0QW5ub3RhdGlvblR5cGUoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzKTogVGFyZ2V0QW5ub3RhdGlvblR5cGUge1xuXHRsZXQgYW5ub3RhdGlvblR5cGUgPSBUYXJnZXRBbm5vdGF0aW9uVHlwZS5Ob25lO1xuXHRjb25zdCBhbm5vdGF0aW9uVHlwZU1hcDogUmVjb3JkPHN0cmluZywgVGFyZ2V0QW5ub3RhdGlvblR5cGU+ID0ge1xuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCI6IFRhcmdldEFubm90YXRpb25UeXBlLkRhdGFQb2ludCxcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCI6IFRhcmdldEFubm90YXRpb25UeXBlLkNoYXJ0LFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSWRlbnRpZmljYXRpb25cIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuSWRlbnRpZmljYXRpb24sXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuQ29udGFjdCxcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQWRkcmVzc1wiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5BZGRyZXNzLFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5GaWVsZEdyb3VwXG5cdH07XG5cdC8vIFJlZmVyZW5jZVVSTEZhY2V0IGFuZCBDb2xsZWN0aW9uRmFjZXQgZG8gbm90IGhhdmUgVGFyZ2V0IHByb3BlcnR5LlxuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldCAmJiBmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCkge1xuXHRcdGFubm90YXRpb25UeXBlID0gYW5ub3RhdGlvblR5cGVNYXBbZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldD8udGVybV0gfHwgVGFyZ2V0QW5ub3RhdGlvblR5cGUuTm9uZTtcblx0fVxuXG5cdHJldHVybiBhbm5vdGF0aW9uVHlwZTtcbn1cblxuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZvcm1EYXRhKGZhY2V0RGVmaW5pdGlvbjogUmVmZXJlbmNlRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEhlYWRlckZvcm1EYXRhIHtcblx0Ly8gc3BsaXQgaW4gdGhpcyBmcm9tIGFubm90YXRpb24gKyBnZXRGaWVsZEdyb3VwRnJvbURlZmF1bHRcblx0aWYgKCFmYWNldERlZmluaXRpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IEZpZWxkR3JvdXAgZm9ybSBkYXRhIHdpdGhvdXQgZmFjZXQgZGVmaW5pdGlvblwiKTtcblx0fVxuXG5cdGNvbnN0IGZvcm1FbGVtZW50cyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdChmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdCk7XG5cblx0cmV0dXJuIHtcblx0XHRpZDogZ2V0SGVhZGVyRmFjZXRGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0pLFxuXHRcdGxhYmVsOiBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0Zm9ybUVsZW1lbnRzXG5cdH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBtYW5pZmVzdC1iYXNlZCBGb3JtRWxlbWVudHMuXG4gKlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dCBmb3IgdGhlIGZhY2V0XG4gKiBAcmV0dXJucyBBbm5vdGF0aW9uLWJhc2VkIEZvcm1FbGVtZW50c1xuICovXG5mdW5jdGlvbiBnZXRGb3JtRWxlbWVudHNGcm9tQW5ub3RhdGlvbnMoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQW5ub3RhdGlvbkZvcm1FbGVtZW50W10ge1xuXHRjb25zdCBhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHM6IEFubm90YXRpb25Gb3JtRWxlbWVudFtdID0gW107XG5cblx0Ly8gUmVmZXJlbmNlVVJMRmFjZXQgYW5kIENvbGxlY3Rpb25GYWNldCBkbyBub3QgaGF2ZSBUYXJnZXQgcHJvcGVydHkuXG5cdGlmIChmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0ICYmIGZhY2V0RGVmaW5pdGlvbi4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0KSB7XG5cdFx0KGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGEuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRpZiAoIShkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkpIHtcblx0XHRcdFx0Y29uc3Qgc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCA9IGdldFNlbWFudGljT2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCB8fFxuXHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbiB8fFxuXHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvblxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjb25zdCB7IGFubm90YXRpb25zIH0gPSBkYXRhRmllbGQ7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHRcdFx0aXNWYWx1ZU11bHRpbGluZVRleHQ6IGRhdGFGaWVsZC5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkgPT09IHRydWUsXG5cdFx0XHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihhbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsIHx8IGRhdGFGaWVsZC5MYWJlbCxcblx0XHRcdFx0XHRcdGlkUHJlZml4OiBnZXRIZWFkZXJGYWNldEZvcm1JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBgJHtjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2AsXG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGhcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRcdFx0XHRjb25zdCB7IGFubm90YXRpb25zIH0gPSBkYXRhRmllbGQ7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzLnB1c2goe1xuXHRcdFx0XHRcdFx0Ly8gRklYTUUgdGhpcyBpcyB3cm9uZywgdGhlIGFubm90YXRpb24gc2hvdWxkIGV4aXN0LCBzbyB0aGUgdGFyZ2V0IGlzIG5vdCBwcm9wZXJseSBpZGVudGlmaWVkXG5cdFx0XHRcdFx0XHRpc1ZhbHVlTXVsdGlsaW5lVGV4dDogKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VSSBhcyBhbnkpPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkgPT09IHRydWUsXG5cdFx0XHRcdFx0XHR0eXBlOiBGb3JtRWxlbWVudFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihhbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRpZFByZWZpeDogZ2V0SGVhZGVyRmFjZXRGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpfS9gLFxuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGdldERhdGFQb2ludERhdGEoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzKTogSGVhZGVyRGF0YVBvaW50RGF0YSB7XG5cdGxldCB0eXBlID0gSGVhZGVyRGF0YVBvaW50VHlwZS5Db250ZW50O1xuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdGlmICgoZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WaXN1YWxpemF0aW9uID09PSBcIlVJLlZpc3VhbGl6YXRpb25UeXBlL1Byb2dyZXNzXCIpIHtcblx0XHRcdHR5cGUgPSBIZWFkZXJEYXRhUG9pbnRUeXBlLlByb2dyZXNzSW5kaWNhdG9yO1xuXHRcdH0gZWxzZSBpZiAoKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdFx0dHlwZSA9IEhlYWRlckRhdGFQb2ludFR5cGUuUmF0aW5nSW5kaWNhdG9yO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHR5cGUgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFubm90YXRpb24tYmFzZWQgaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGFubm90YXRpb24tYmFzZWQgaGVhZGVyIGZhY2V0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VIZWFkZXJGYWNldCB8IHVuZGVmaW5lZCB7XG5cdGxldCBoZWFkZXJGYWNldDogT2JqZWN0UGFnZUhlYWRlckZhY2V0IHwgdW5kZWZpbmVkO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQ6XG5cdFx0XHRoZWFkZXJGYWNldCA9IGNyZWF0ZVJlZmVyZW5jZUhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRoZWFkZXJGYWNldCA9IGNyZWF0ZUNvbGxlY3Rpb25IZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIGhlYWRlckZhY2V0O1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIENvbnZlcnQgJiBCdWlsZCBNYW5pZmVzdCBCYXNlZCBIZWFkZXIgRmFjZXRzXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuZnVuY3Rpb24gZ2VuZXJhdGVCaW5kaW5nKHJlcXVlc3RHcm91cElkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFyZXF1ZXN0R3JvdXBJZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgZ3JvdXBJZCA9XG5cdFx0W1wiSGVyb2VzXCIsIFwiRGVjb3JhdGlvblwiLCBcIldvcmtlcnNcIiwgXCJMb25nUnVubmVyc1wiXS5pbmRleE9mKHJlcXVlc3RHcm91cElkKSAhPT0gLTEgPyBgJGF1dG8uJHtyZXF1ZXN0R3JvdXBJZH1gIDogcmVxdWVzdEdyb3VwSWQ7XG5cblx0cmV0dXJuIGB7IHBhdGggOiAnJywgcGFyYW1ldGVycyA6IHsgJCRncm91cElkIDogJyR7Z3JvdXBJZH0nIH0gfWA7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbWFuaWZlc3QgYmFzZWQgY3VzdG9tIGhlYWRlciBmYWNldC5cbiAqXG4gKiBAcGFyYW0gY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gaGVhZGVyRmFjZXRLZXlcbiAqIEByZXR1cm5zIFRoZSBtYW5pZmVzdCBiYXNlZCBjdXN0b20gaGVhZGVyIGZhY2V0IGNyZWF0ZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXQoY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uOiBNYW5pZmVzdEhlYWRlckZhY2V0LCBoZWFkZXJGYWNldEtleTogc3RyaW5nKTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0IHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRJRCA9IGdldEN1c3RvbUhlYWRlckZhY2V0SUQoaGVhZGVyRmFjZXRLZXkpO1xuXG5cdGxldCBwb3NpdGlvbjogUG9zaXRpb24gfCB1bmRlZmluZWQgPSBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24ucG9zaXRpb247XG5cdGlmICghcG9zaXRpb24pIHtcblx0XHRwb3NpdGlvbiA9IHtcblx0XHRcdHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyXG5cdFx0fTtcblx0fVxuXHQvLyBUT0RPIGZvciBhbiBub24gYW5ub3RhdGlvbiBmcmFnbWVudCB0aGUgbmFtZSBpcyBtYW5kYXRvcnkgLT4gTm90IGNoZWNrZWRcblx0cmV0dXJuIHtcblx0XHRmYWNldFR5cGU6IEZhY2V0VHlwZS5SZWZlcmVuY2UsXG5cdFx0ZmFjZXRzOiBbXSxcblx0XHR0eXBlOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24udHlwZSxcblx0XHRpZDogY3VzdG9tSGVhZGVyRmFjZXRJRCxcblx0XHRjb250YWluZXJJZDogY3VzdG9tSGVhZGVyRmFjZXRJRCxcblx0XHRrZXk6IGhlYWRlckZhY2V0S2V5LFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24udmlzaWJsZSxcblx0XHRmcmFnbWVudE5hbWU6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi50ZW1wbGF0ZSB8fCBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24ubmFtZSxcblx0XHR0aXRsZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnRpdGxlLFxuXHRcdHN1YlRpdGxlOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24uc3ViVGl0bGUsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnN0YXNoZWQgfHwgZmFsc2UsXG5cdFx0ZmxleFNldHRpbmdzOiB7IC4uLnsgZGVzaWdudGltZTogRmxleERlc2lnblRpbWVUeXBlLkRlZmF1bHQgfSwgLi4uY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLmZsZXhTZXR0aW5ncyB9LFxuXHRcdGJpbmRpbmc6IGdlbmVyYXRlQmluZGluZyhjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24ucmVxdWVzdEdyb3VwSWQpLFxuXHRcdHRlbXBsYXRlRWRpdDogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnRlbXBsYXRlRWRpdFxuXHR9O1xufVxuIl19