@sapui5/sap.fe.core 1.99.0 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/package.json +4 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +1 -69
  4. package/src/sap/fe/core/AnnotationHelper.ts +0 -70
  5. package/src/sap/fe/core/AppComponent.js +388 -399
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +127 -158
  8. package/src/sap/fe/core/BaseController.js +82 -58
  9. package/src/sap/fe/core/BaseController.ts +68 -0
  10. package/src/sap/fe/core/CommonUtils.js +111 -20
  11. package/src/sap/fe/core/CommonUtils.ts +131 -32
  12. package/src/sap/fe/core/ExtensionAPI.js +278 -274
  13. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  14. package/src/sap/fe/core/PageController.js +157 -29
  15. package/src/sap/fe/core/PageController.ts +60 -32
  16. package/src/sap/fe/core/RouterProxy.js +694 -756
  17. package/src/sap/fe/core/RouterProxy.ts +11 -9
  18. package/src/sap/fe/core/Synchronization.js +21 -31
  19. package/src/sap/fe/core/TemplateComponent.js +1 -1
  20. package/src/sap/fe/core/TemplateComponent.ts +10 -3
  21. package/src/sap/fe/core/TemplateModel.js +20 -38
  22. package/src/sap/fe/core/TemplateModel.ts +1 -1
  23. package/src/sap/fe/core/TransactionHelper.js +1354 -1370
  24. package/src/sap/fe/core/TransactionHelper.ts +33 -22
  25. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  27. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  29. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  30. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  31. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  32. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  33. package/src/sap/fe/core/actions/draft.js +30 -68
  34. package/src/sap/fe/core/actions/draft.ts +44 -71
  35. package/src/sap/fe/core/actions/messageHandling.js +55 -36
  36. package/src/sap/fe/core/actions/messageHandling.ts +66 -46
  37. package/src/sap/fe/core/actions/operations.js +34 -15
  38. package/src/sap/fe/core/actions/operations.ts +48 -18
  39. package/src/sap/fe/core/actions/sticky.js +17 -4
  40. package/src/sap/fe/core/actions/sticky.ts +21 -4
  41. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +69 -66
  42. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  43. package/src/sap/fe/core/controllerextensions/EditFlow.js +1593 -1669
  44. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  47. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +718 -779
  48. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  49. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
  50. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1004 -1005
  52. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  53. package/src/sap/fe/core/controllerextensions/KPIManagement.js +487 -521
  54. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  55. package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
  56. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  57. package/src/sap/fe/core/controllerextensions/MessageHandler.js +233 -244
  58. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  59. package/src/sap/fe/core/controllerextensions/PageReady.js +301 -336
  60. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  61. package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
  62. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  63. package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
  64. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  65. package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
  66. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  67. package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
  68. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  69. package/src/sap/fe/core/controllerextensions/Share.js +230 -268
  70. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  71. package/src/sap/fe/core/controllerextensions/SideEffects.js +592 -633
  72. package/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  73. package/src/sap/fe/core/controllerextensions/ViewState.js +788 -806
  74. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  75. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  76. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  77. package/src/sap/fe/core/controls/CommandExecution.js +67 -66
  78. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  79. package/src/sap/fe/core/controls/ConditionalWrapper.js +90 -75
  80. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  81. package/src/sap/fe/core/controls/CustomQuickViewPage.js +130 -125
  82. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  83. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +103 -112
  84. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  85. package/src/sap/fe/core/controls/FieldWrapper.js +122 -135
  86. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  87. package/src/sap/fe/core/controls/FilterBar.js +162 -159
  88. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  89. package/src/sap/fe/core/controls/FormElementWrapper.js +45 -39
  90. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  91. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
  92. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  93. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +126 -116
  94. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  95. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +241 -255
  96. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  97. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +150 -141
  98. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  99. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
  100. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  101. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +74 -74
  102. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  103. package/src/sap/fe/core/converters/ConverterContext.js +348 -379
  104. package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  105. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  106. package/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  107. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
  108. package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  109. package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
  110. package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  111. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  112. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  113. package/src/sap/fe/core/converters/annotations/DataField.js +26 -12
  114. package/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  115. package/src/sap/fe/core/converters/controls/Common/Form.js +2 -2
  116. package/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  117. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  119. package/src/sap/fe/core/converters/controls/Common/Table.js +130 -23
  120. package/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  121. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +118 -53
  122. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  123. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +161 -207
  124. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  125. package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
  126. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  127. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  128. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  129. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  130. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  131. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  132. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +25 -4
  133. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  134. package/src/sap/fe/core/converters/templates/ListReportConverter.js +10 -4
  135. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  136. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  137. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  138. package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
  139. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  141. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  142. package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
  143. package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  144. package/src/sap/fe/core/fpm/Component.js +50 -54
  145. package/src/sap/fe/core/fpm/Component.ts +48 -0
  146. package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
  147. package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  148. package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
  149. package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  150. package/src/sap/fe/core/helpers/ClassSupport.js +186 -62
  151. package/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  152. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
  153. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  154. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  155. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  156. package/src/sap/fe/core/helpers/MassEditHelper.js +601 -684
  157. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  158. package/src/sap/fe/core/helpers/ModelHelper.js +25 -1
  159. package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  160. package/src/sap/fe/core/helpers/SemanticDateOperators.js +5 -1
  161. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  162. package/src/sap/fe/core/library.js +426 -451
  163. package/src/sap/fe/core/library.support.js +22 -33
  164. package/src/sap/fe/core/library.support.ts +23 -0
  165. package/src/sap/fe/core/library.ts +420 -0
  166. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
  167. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  168. package/src/sap/fe/core/messagebundle.properties +22 -5
  169. package/src/sap/fe/core/messagebundle_ar.properties +27 -7
  170. package/src/sap/fe/core/messagebundle_bg.properties +27 -7
  171. package/src/sap/fe/core/messagebundle_ca.properties +27 -7
  172. package/src/sap/fe/core/messagebundle_cs.properties +27 -7
  173. package/src/sap/fe/core/messagebundle_cy.properties +27 -7
  174. package/src/sap/fe/core/messagebundle_da.properties +27 -7
  175. package/src/sap/fe/core/messagebundle_de.properties +27 -7
  176. package/src/sap/fe/core/messagebundle_el.properties +27 -7
  177. package/src/sap/fe/core/messagebundle_en.properties +27 -7
  178. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  179. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  180. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  181. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  182. package/src/sap/fe/core/messagebundle_es.properties +27 -7
  183. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  184. package/src/sap/fe/core/messagebundle_et.properties +27 -7
  185. package/src/sap/fe/core/messagebundle_fi.properties +28 -8
  186. package/src/sap/fe/core/messagebundle_fr.properties +28 -8
  187. package/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  188. package/src/sap/fe/core/messagebundle_hi.properties +27 -7
  189. package/src/sap/fe/core/messagebundle_hr.properties +27 -7
  190. package/src/sap/fe/core/messagebundle_hu.properties +27 -7
  191. package/src/sap/fe/core/messagebundle_id.properties +27 -7
  192. package/src/sap/fe/core/messagebundle_it.properties +27 -7
  193. package/src/sap/fe/core/messagebundle_iw.properties +27 -7
  194. package/src/sap/fe/core/messagebundle_ja.properties +26 -6
  195. package/src/sap/fe/core/messagebundle_kk.properties +27 -7
  196. package/src/sap/fe/core/messagebundle_ko.properties +27 -7
  197. package/src/sap/fe/core/messagebundle_lt.properties +27 -7
  198. package/src/sap/fe/core/messagebundle_lv.properties +28 -8
  199. package/src/sap/fe/core/messagebundle_ms.properties +27 -7
  200. package/src/sap/fe/core/messagebundle_nl.properties +27 -7
  201. package/src/sap/fe/core/messagebundle_no.properties +27 -7
  202. package/src/sap/fe/core/messagebundle_pl.properties +27 -7
  203. package/src/sap/fe/core/messagebundle_pt.properties +28 -8
  204. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  205. package/src/sap/fe/core/messagebundle_ro.properties +27 -7
  206. package/src/sap/fe/core/messagebundle_ru.properties +27 -7
  207. package/src/sap/fe/core/messagebundle_sh.properties +27 -7
  208. package/src/sap/fe/core/messagebundle_sk.properties +27 -7
  209. package/src/sap/fe/core/messagebundle_sl.properties +27 -7
  210. package/src/sap/fe/core/messagebundle_sv.properties +27 -7
  211. package/src/sap/fe/core/messagebundle_th.properties +26 -6
  212. package/src/sap/fe/core/messagebundle_tr.properties +30 -10
  213. package/src/sap/fe/core/messagebundle_uk.properties +27 -7
  214. package/src/sap/fe/core/messagebundle_vi.properties +27 -7
  215. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  216. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  217. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  218. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +154 -192
  219. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  220. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +66 -92
  221. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  222. package/src/sap/fe/core/services/NavigationServiceFactory.js +284 -339
  223. package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  224. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +67 -102
  225. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  226. package/src/sap/fe/core/services/RoutingServiceFactory.js +754 -814
  227. package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  228. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -736
  229. package/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  230. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +567 -592
  231. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  232. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +354 -386
  233. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  234. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  235. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  236. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  237. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  238. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  239. package/src/sap/fe/core/templating/DataModelPathHelper.js +93 -85
  240. package/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  241. package/src/sap/fe/core/templating/FilterHelper.js +25 -32
  242. package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  243. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  244. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  245. package/src/sap/fe/core/templating/UIFormatters.js +32 -26
  246. package/src/sap/fe/core/templating/UIFormatters.ts +37 -24
@@ -7,12 +7,6 @@ sap.ui.define([], function () {
7
7
 
8
8
  var _exports = {};
9
9
 
10
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11
-
12
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
13
-
14
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
15
-
16
10
  /**
17
11
  * helper class for Aggregation annotations.
18
12
  */
@@ -26,8 +20,6 @@ sap.ui.define([], function () {
26
20
  function AggregationHelper(entityType, converterContext) {
27
21
  var _this$_oAggregationAn, _this$_oAggregationAn4, _this$_oAggregationAn7, _this$oTargetAggregat;
28
22
 
29
- _classCallCheck(this, AggregationHelper);
30
-
31
23
  this._entityType = entityType;
32
24
  this._converterContext = converterContext;
33
25
  this._oAggregationAnnotationTarget = this._determineAggregationAnnotationTarget();
@@ -64,139 +56,129 @@ sap.ui.define([], function () {
64
56
 
65
57
 
66
58
  _exports.AggregationHelper = AggregationHelper;
59
+ var _proto = AggregationHelper.prototype;
67
60
 
68
- _createClass(AggregationHelper, [{
69
- key: "_determineAggregationAnnotationTarget",
70
- value: function _determineAggregationAnnotationTarget() {
71
- var _this$_converterConte, _this$_converterConte2, _this$_converterConte3, _this$_converterConte4, _this$_converterConte5;
72
-
73
- var bIsParameterized = (_this$_converterConte = this._converterContext.getDataModelObjectPath()) !== null && _this$_converterConte !== void 0 && (_this$_converterConte2 = _this$_converterConte.targetEntitySet) !== null && _this$_converterConte2 !== void 0 && (_this$_converterConte3 = _this$_converterConte2.entityType) !== null && _this$_converterConte3 !== void 0 && (_this$_converterConte4 = _this$_converterConte3.annotations) !== null && _this$_converterConte4 !== void 0 && (_this$_converterConte5 = _this$_converterConte4.Common) !== null && _this$_converterConte5 !== void 0 && _this$_converterConte5.ResultContext ? true : false;
74
- var oAggregationAnnotationSource; // find ApplySupported
75
-
76
- if (bIsParameterized) {
77
- var _oNavigationPropertyO, _oNavigationPropertyO2, _oEntityTypeObject$an, _oEntityTypeObject$an2;
78
-
79
- // if this is a parameterized view then applysupported can be found at either the navProp pointing to the result set or entityType.
80
- // If applySupported is present at both the navProp and the entityType then navProp is more specific so take annotations from there
81
- // targetObject in the converter context for a parameterized view is the navigation property pointing to th result set
82
- var oDataModelObjectPath = this._converterContext.getDataModelObjectPath();
83
-
84
- var oNavigationPropertyObject = oDataModelObjectPath === null || oDataModelObjectPath === void 0 ? void 0 : oDataModelObjectPath.targetObject;
85
- var oEntityTypeObject = oDataModelObjectPath === null || oDataModelObjectPath === void 0 ? void 0 : oDataModelObjectPath.targetEntityType;
86
-
87
- if (oNavigationPropertyObject !== null && oNavigationPropertyObject !== void 0 && (_oNavigationPropertyO = oNavigationPropertyObject.annotations) !== null && _oNavigationPropertyO !== void 0 && (_oNavigationPropertyO2 = _oNavigationPropertyO.Aggregation) !== null && _oNavigationPropertyO2 !== void 0 && _oNavigationPropertyO2.ApplySupported) {
88
- oAggregationAnnotationSource = oNavigationPropertyObject;
89
- } else if (oEntityTypeObject !== null && oEntityTypeObject !== void 0 && (_oEntityTypeObject$an = oEntityTypeObject.annotations) !== null && _oEntityTypeObject$an !== void 0 && (_oEntityTypeObject$an2 = _oEntityTypeObject$an.Aggregation) !== null && _oEntityTypeObject$an2 !== void 0 && _oEntityTypeObject$an2.ApplySupported) {
90
- oAggregationAnnotationSource = oEntityTypeObject;
91
- }
92
- } else {
93
- // For the time being, we ignore annotations at the container level, until the vocabulary is stabilized
94
- oAggregationAnnotationSource = this._converterContext.getEntitySet();
95
- }
61
+ _proto._determineAggregationAnnotationTarget = function _determineAggregationAnnotationTarget() {
62
+ var _this$_converterConte, _this$_converterConte2, _this$_converterConte3, _this$_converterConte4, _this$_converterConte5;
96
63
 
97
- return oAggregationAnnotationSource;
98
- }
99
- /**
100
- * Checks if the entity supports analytical queries.
101
- *
102
- * @returns `true` if analytical queries are supported, false otherwise.
103
- */
104
-
105
- }, {
106
- key: "isAnalyticsSupported",
107
- value: function isAnalyticsSupported() {
108
- return this._bApplySupported;
109
- }
110
- /**
111
- * Checks if a property is groupable.
112
- *
113
- * @param property The property to check
114
- * @returns `undefined` if the entity doesn't support analytical queries, true or false otherwise
115
- */
116
-
117
- }, {
118
- key: "isPropertyGroupable",
119
- value: function isPropertyGroupable(property) {
120
- if (!this._bApplySupported) {
121
- return undefined;
122
- } else if (!this._aGroupableProperties || this._aGroupableProperties.length === 0) {
123
- // No groupableProperties --> all properties are groupable
124
- return true;
125
- } else {
126
- return this._aGroupableProperties.findIndex(function (path) {
127
- return path.$target.fullyQualifiedName === property.fullyQualifiedName;
128
- }) >= 0;
129
- }
130
- }
131
- /**
132
- * Checks if a property is aggregatable.
133
- *
134
- * @param property The property to check
135
- * @returns `undefined` if the entity doesn't support analytical queries, true or false otherwise
136
- */
137
-
138
- }, {
139
- key: "isPropertyAggregatable",
140
- value: function isPropertyAggregatable(property) {
141
- if (!this._bApplySupported) {
142
- return undefined;
143
- } else {
144
- // Get the custom aggregates
145
- var aCustomAggregateAnnotations = this._converterContext.getAnnotationsByTerm("Aggregation", "Org.OData.Aggregation.V1.CustomAggregate", [this._oAggregationAnnotationTarget]); // Check if a custom aggregate has a qualifier that corresponds to the property name
146
-
147
-
148
- return aCustomAggregateAnnotations.some(function (annotation) {
149
- return property.name === annotation.qualifier;
150
- });
64
+ var bIsParameterized = (_this$_converterConte = this._converterContext.getDataModelObjectPath()) !== null && _this$_converterConte !== void 0 && (_this$_converterConte2 = _this$_converterConte.targetEntitySet) !== null && _this$_converterConte2 !== void 0 && (_this$_converterConte3 = _this$_converterConte2.entityType) !== null && _this$_converterConte3 !== void 0 && (_this$_converterConte4 = _this$_converterConte3.annotations) !== null && _this$_converterConte4 !== void 0 && (_this$_converterConte5 = _this$_converterConte4.Common) !== null && _this$_converterConte5 !== void 0 && _this$_converterConte5.ResultContext ? true : false;
65
+ var oAggregationAnnotationSource; // find ApplySupported
66
+
67
+ if (bIsParameterized) {
68
+ var _oNavigationPropertyO, _oNavigationPropertyO2, _oEntityTypeObject$an, _oEntityTypeObject$an2;
69
+
70
+ // if this is a parameterized view then applysupported can be found at either the navProp pointing to the result set or entityType.
71
+ // If applySupported is present at both the navProp and the entityType then navProp is more specific so take annotations from there
72
+ // targetObject in the converter context for a parameterized view is the navigation property pointing to th result set
73
+ var oDataModelObjectPath = this._converterContext.getDataModelObjectPath();
74
+
75
+ var oNavigationPropertyObject = oDataModelObjectPath === null || oDataModelObjectPath === void 0 ? void 0 : oDataModelObjectPath.targetObject;
76
+ var oEntityTypeObject = oDataModelObjectPath === null || oDataModelObjectPath === void 0 ? void 0 : oDataModelObjectPath.targetEntityType;
77
+
78
+ if (oNavigationPropertyObject !== null && oNavigationPropertyObject !== void 0 && (_oNavigationPropertyO = oNavigationPropertyObject.annotations) !== null && _oNavigationPropertyO !== void 0 && (_oNavigationPropertyO2 = _oNavigationPropertyO.Aggregation) !== null && _oNavigationPropertyO2 !== void 0 && _oNavigationPropertyO2.ApplySupported) {
79
+ oAggregationAnnotationSource = oNavigationPropertyObject;
80
+ } else if (oEntityTypeObject !== null && oEntityTypeObject !== void 0 && (_oEntityTypeObject$an = oEntityTypeObject.annotations) !== null && _oEntityTypeObject$an !== void 0 && (_oEntityTypeObject$an2 = _oEntityTypeObject$an.Aggregation) !== null && _oEntityTypeObject$an2 !== void 0 && _oEntityTypeObject$an2.ApplySupported) {
81
+ oAggregationAnnotationSource = oEntityTypeObject;
151
82
  }
83
+ } else {
84
+ // For the time being, we ignore annotations at the container level, until the vocabulary is stabilized
85
+ oAggregationAnnotationSource = this._converterContext.getEntitySet();
152
86
  }
153
- }, {
154
- key: "getGroupableProperties",
155
- value: function getGroupableProperties() {
156
- return this._aGroupableProperties;
157
- }
158
- }, {
159
- key: "getAggregatableProperties",
160
- value: function getAggregatableProperties() {
161
- return this._aAggregatableProperties;
162
- }
163
- }, {
164
- key: "getTransAggregations",
165
- value: function getTransAggregations() {
166
- var aTransAggregationAnnotations = this._converterContext.getAnnotationsByTerm("Analytics", "com.sap.vocabularies.Analytics.v1.AggregatedProperties", [this._converterContext.getEntityContainer(), this._converterContext.getEntityType()]);
167
87
 
168
- return aTransAggregationAnnotations;
88
+ return oAggregationAnnotationSource;
89
+ }
90
+ /**
91
+ * Checks if the entity supports analytical queries.
92
+ *
93
+ * @returns `true` if analytical queries are supported, false otherwise.
94
+ */
95
+ ;
96
+
97
+ _proto.isAnalyticsSupported = function isAnalyticsSupported() {
98
+ return this._bApplySupported;
99
+ }
100
+ /**
101
+ * Checks if a property is groupable.
102
+ *
103
+ * @param property The property to check
104
+ * @returns `undefined` if the entity doesn't support analytical queries, true or false otherwise
105
+ */
106
+ ;
107
+
108
+ _proto.isPropertyGroupable = function isPropertyGroupable(property) {
109
+ if (!this._bApplySupported) {
110
+ return undefined;
111
+ } else if (!this._aGroupableProperties || this._aGroupableProperties.length === 0) {
112
+ // No groupableProperties --> all properties are groupable
113
+ return true;
114
+ } else {
115
+ return this._aGroupableProperties.findIndex(function (path) {
116
+ return path.$target.fullyQualifiedName === property.fullyQualifiedName;
117
+ }) >= 0;
169
118
  }
170
- /**
171
- * Returns the list of custom aggregate definitions for the entity type.
172
- *
173
- * @returns A map (propertyName --> array of context-defining property names) for each custom aggregate corresponding to a property. The array of
174
- * context-defining property names is empty if the custom aggregate doesn't have any context-defining property.
175
- */
176
-
177
- }, {
178
- key: "getCustomAggregateDefinitions",
179
- value: function getCustomAggregateDefinitions() {
119
+ }
120
+ /**
121
+ * Checks if a property is aggregatable.
122
+ *
123
+ * @param property The property to check
124
+ * @returns `undefined` if the entity doesn't support analytical queries, true or false otherwise
125
+ */
126
+ ;
127
+
128
+ _proto.isPropertyAggregatable = function isPropertyAggregatable(property) {
129
+ if (!this._bApplySupported) {
130
+ return undefined;
131
+ } else {
180
132
  // Get the custom aggregates
181
- var aCustomAggregateAnnotations = this._converterContext.getAnnotationsByTerm("Aggregation", "Org.OData.Aggregation.V1.CustomAggregate", [this._oAggregationAnnotationTarget]);
133
+ var aCustomAggregateAnnotations = this._converterContext.getAnnotationsByTerm("Aggregation", "Org.OData.Aggregation.V1.CustomAggregate", [this._oAggregationAnnotationTarget]); // Check if a custom aggregate has a qualifier that corresponds to the property name
182
134
 
183
- return aCustomAggregateAnnotations;
184
- }
185
- /**
186
- * Returns the list of allowed transformations in the $apply.
187
- * First look at the current EntitySet, then look at the default values provided at the container level.
188
- *
189
- * @returns The list of transformations, or undefined if no list is found
190
- */
191
-
192
- }, {
193
- key: "getAllowedTransformations",
194
- value: function getAllowedTransformations() {
195
- var _this$oTargetAggregat6, _this$oTargetAggregat7, _this$oContainerAggre, _this$oContainerAggre2;
196
-
197
- return ((_this$oTargetAggregat6 = this.oTargetAggregationAnnotations) === null || _this$oTargetAggregat6 === void 0 ? void 0 : (_this$oTargetAggregat7 = _this$oTargetAggregat6.ApplySupported) === null || _this$oTargetAggregat7 === void 0 ? void 0 : _this$oTargetAggregat7.Transformations) || ((_this$oContainerAggre = this.oContainerAggregationAnnotation) === null || _this$oContainerAggre === void 0 ? void 0 : (_this$oContainerAggre2 = _this$oContainerAggre.ApplySupportedDefaults) === null || _this$oContainerAggre2 === void 0 ? void 0 : _this$oContainerAggre2.Transformations);
135
+
136
+ return aCustomAggregateAnnotations.some(function (annotation) {
137
+ return property.name === annotation.qualifier;
138
+ });
198
139
  }
199
- }]);
140
+ };
141
+
142
+ _proto.getGroupableProperties = function getGroupableProperties() {
143
+ return this._aGroupableProperties;
144
+ };
145
+
146
+ _proto.getAggregatableProperties = function getAggregatableProperties() {
147
+ return this._aAggregatableProperties;
148
+ };
149
+
150
+ _proto.getTransAggregations = function getTransAggregations() {
151
+ var aTransAggregationAnnotations = this._converterContext.getAnnotationsByTerm("Analytics", "com.sap.vocabularies.Analytics.v1.AggregatedProperties", [this._converterContext.getEntityContainer(), this._converterContext.getEntityType()]);
152
+
153
+ return aTransAggregationAnnotations;
154
+ }
155
+ /**
156
+ * Returns the list of custom aggregate definitions for the entity type.
157
+ *
158
+ * @returns A map (propertyName --> array of context-defining property names) for each custom aggregate corresponding to a property. The array of
159
+ * context-defining property names is empty if the custom aggregate doesn't have any context-defining property.
160
+ */
161
+ ;
162
+
163
+ _proto.getCustomAggregateDefinitions = function getCustomAggregateDefinitions() {
164
+ // Get the custom aggregates
165
+ var aCustomAggregateAnnotations = this._converterContext.getAnnotationsByTerm("Aggregation", "Org.OData.Aggregation.V1.CustomAggregate", [this._oAggregationAnnotationTarget]);
166
+
167
+ return aCustomAggregateAnnotations;
168
+ }
169
+ /**
170
+ * Returns the list of allowed transformations in the $apply.
171
+ * First look at the current EntitySet, then look at the default values provided at the container level.
172
+ *
173
+ * @returns The list of transformations, or undefined if no list is found
174
+ */
175
+ ;
176
+
177
+ _proto.getAllowedTransformations = function getAllowedTransformations() {
178
+ var _this$oTargetAggregat6, _this$oTargetAggregat7, _this$oContainerAggre, _this$oContainerAggre2;
179
+
180
+ return ((_this$oTargetAggregat6 = this.oTargetAggregationAnnotations) === null || _this$oTargetAggregat6 === void 0 ? void 0 : (_this$oTargetAggregat7 = _this$oTargetAggregat6.ApplySupported) === null || _this$oTargetAggregat7 === void 0 ? void 0 : _this$oTargetAggregat7.Transformations) || ((_this$oContainerAggre = this.oContainerAggregationAnnotation) === null || _this$oContainerAggre === void 0 ? void 0 : (_this$oContainerAggre2 = _this$oContainerAggre.ApplySupportedDefaults) === null || _this$oContainerAggre2 === void 0 ? void 0 : _this$oContainerAggre2.Transformations);
181
+ };
200
182
 
201
183
  return AggregationHelper;
202
184
  }();
@@ -204,4 +186,4 @@ sap.ui.define([], function () {
204
186
  _exports.AggregationHelper = AggregationHelper;
205
187
  return _exports;
206
188
  }, false);
207
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFnZ3JlZ2F0aW9uLnRzIl0sIm5hbWVzIjpbIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZW50aXR5VHlwZSIsImNvbnZlcnRlckNvbnRleHQiLCJfZW50aXR5VHlwZSIsIl9jb252ZXJ0ZXJDb250ZXh0IiwiX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQiLCJfZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0IiwiX3R5cGUiLCJvVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJfYkFwcGx5U3VwcG9ydGVkIiwiQXBwbHlTdXBwb3J0ZWQiLCJfYUdyb3VwYWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwiX2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIm9Db250YWluZXJBZ2dyZWdhdGlvbkFubm90YXRpb24iLCJnZXRFbnRpdHlDb250YWluZXIiLCJiSXNQYXJhbWV0ZXJpemVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldEVudGl0eVNldCIsIkNvbW1vbiIsIlJlc3VsdENvbnRleHQiLCJvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0IiwidGFyZ2V0T2JqZWN0Iiwib0VudGl0eVR5cGVPYmplY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZ2V0RW50aXR5U2V0IiwicHJvcGVydHkiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJmaW5kSW5kZXgiLCJwYXRoIiwiJHRhcmdldCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyIsImdldEFubm90YXRpb25zQnlUZXJtIiwic29tZSIsImFubm90YXRpb24iLCJuYW1lIiwicXVhbGlmaWVyIiwiYVRyYW5zQWdncmVnYXRpb25Bbm5vdGF0aW9ucyIsImdldEVudGl0eVR5cGUiLCJUcmFuc2Zvcm1hdGlvbnMiLCJBcHBseVN1cHBvcnRlZERlZmF1bHRzIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7TUFDYUEsaUI7QUFjWjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQywrQkFBWUMsVUFBWixFQUFvQ0MsZ0JBQXBDLEVBQXdFO0FBQUE7O0FBQUE7O0FBQ3ZFLFdBQUtDLFdBQUwsR0FBbUJGLFVBQW5CO0FBQ0EsV0FBS0csaUJBQUwsR0FBeUJGLGdCQUF6QjtBQUVBLFdBQUtHLDZCQUFMLEdBQXFDLEtBQUtDLHFDQUFMLEVBQXJDOztBQUNBLFVBQUksK0JBQUtELDZCQUFMLGdGQUFvQ0UsS0FBcEMsTUFBOEMsb0JBQWxELEVBQXdFO0FBQUE7O0FBQ3ZFLGFBQUtDLDZCQUFMLDZCQUFxQyxLQUFLSCw2QkFBMUMscUZBQXFDLHVCQUFvQ0ksV0FBekUsMkRBQXFDLHVCQUNsQ0MsV0FESDtBQUVBLE9BSEQsTUFHTyxJQUFJLGdDQUFLTCw2QkFBTCxrRkFBb0NFLEtBQXBDLE1BQThDLFlBQWxELEVBQWdFO0FBQUE7O0FBQ3RFLGFBQUtDLDZCQUFMLDZCQUFxQyxLQUFLSCw2QkFBMUMscUZBQXFDLHVCQUFvQ0ksV0FBekUsMkRBQXFDLHVCQUNsQ0MsV0FESDtBQUVBLE9BSE0sTUFHQSxJQUFJLGdDQUFLTCw2QkFBTCxrRkFBb0NFLEtBQXBDLE1BQThDLFdBQWxELEVBQStEO0FBQUE7O0FBQ3JFLGFBQUtDLDZCQUFMLDZCQUFxQyxLQUFLSCw2QkFBMUMscUZBQXFDLHVCQUFvQ0ksV0FBekUsMkRBQXFDLHVCQUNsQ0MsV0FESDtBQUVBOztBQUNELFdBQUtDLGdCQUFMLEdBQXdCLDhCQUFLSCw2QkFBTCx3RUFBb0NJLGNBQXBDLEdBQXFELElBQXJELEdBQTRELEtBQXBGOztBQUVBLFVBQUksS0FBS0QsZ0JBQVQsRUFBMkI7QUFBQTs7QUFDMUIsYUFBS0UscUJBQUwsNkJBQTZCLEtBQUtM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QixDQUFpQyxVQUFBQyxVQUFVLEVBQUk7QUFDckQsbUJBQU9WLFFBQVEsQ0FBQ1csSUFBVCxLQUFrQkQsVUFBVSxDQUFDRSxTQUFwQztBQUNBLFdBRk0sQ0FBUDtBQUdBO0FBQ0Q7OzthQUVELGtDQUFnQztBQUMvQixlQUFPLEtBQUs5QixxQkFBWjtBQUNBOzs7YUFFRCxxQ0FBbUM7QUFDbEMsZUFBTyxLQUFLRSx3QkFBWjtBQUNBOzs7YUFFRCxnQ0FBOEI7QUFDN0IsWUFBTTZCLDRCQUE0QixHQUFHLEtBQUt4QyxpQkFBTCxDQUF1Qm1DLG9CQUF2QixDQUNwQyxXQURvQyxFQUVwQyx3REFGb0MsRUFHcEMsQ0FBQyxLQUFLbkMsaUJBQUwsQ0FBdUJjLGtCQUF2QixFQUFELEVBQThDLEtBQUtkLGlCQUFMLENBQXVCeUMsYUFBdkIsRUFBOUMsQ0FIb0MsQ0FBckM7O0FBS0EsZUFBT0QsNEJBQVA7QUFDQTtBQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OzthQUNDLHlDQUF1QztBQUN0QztBQUNBLFlBQU1OLDJCQUE4RCxHQUFHLEtBQUtsQyxpQkFBTCxDQUF1Qm1DLG9CQUF2QixDQUN0RSxhQURzRSw4Q0FHdEUsQ0FBQyxLQUFLbEMsNkJBQU4sQ0FIc0UsQ0FBdkU7O0FBTUEsZUFBT2lDLDJCQUFQO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7YUFDQyxxQ0FBeUQ7QUFBQTs7QUFDeEQsZUFDQywyQkFBQyxLQUFLOUIsNkJBQU4scUZBQUMsdUJBQW9DSSxjQUFyQywyREFBQyx1QkFBb0RrQyxlQUFyRCwrQkFDQyxLQUFLN0IsK0JBRE4sb0ZBQ0Msc0JBQXNDOEIsc0JBRHZDLDJEQUNDLHVCQUE4REQsZUFEL0QsQ0FERDtBQUlBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlUeXBlLCBQcm9wZXJ0eSwgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgQW5ub3RhdGlvblRlcm0gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRlcm1zLCBDdXN0b21BZ2dyZWdhdGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L0VkbVwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25Bbm5vdGF0aW9uc19BZ2dyZWdhdGlvbixcblx0RW50aXR5VHlwZUFubm90YXRpb25zX0FnZ3JlZ2F0aW9uLFxuXHRFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbixcblx0RW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0FnZ3JlZ2F0aW9uX0VkbVwiO1xuXG4vKipcbiAqIGhlbHBlciBjbGFzcyBmb3IgQWdncmVnYXRpb24gYW5ub3RhdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBZ2dyZWdhdGlvbkhlbHBlciB7XG5cdF9lbnRpdHlUeXBlOiBFbnRpdHlUeXBlO1xuXHRfY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDtcblx0X2JBcHBseVN1cHBvcnRlZDogYm9vbGVhbjtcblx0X2FHcm91cGFibGVQcm9wZXJ0aWVzPzogUHJvcGVydHlQYXRoW107XG5cdF9hQWdncmVnYXRhYmxlUHJvcGVydGllcz87XG5cdF9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0OiBFbnRpdHlUeXBlIHwgRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5O1xuXHRvVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz86XG5cdFx0fCBDb2xsZWN0aW9uQW5ub3RhdGlvbnNfQWdncmVnYXRpb25cblx0XHR8IEVudGl0eVR5cGVBbm5vdGF0aW9uc19BZ2dyZWdhdGlvblxuXHRcdHwgRW50aXR5U2V0QW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cblx0b0NvbnRhaW5lckFnZ3JlZ2F0aW9uQW5ub3RhdGlvbj86IEVudGl0eUNvbnRhaW5lckFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgaGVscGVyIGZvciBhIHNwZWNpZmljIGVudGl0eSB0eXBlIGFuZCBhIGNvbnZlcnRlciBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgRW50aXR5VHlwZVxuXHQgKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgQ29udmVydGVyQ29udGV4dFxuXHQgKi9cblx0Y29uc3RydWN0b3IoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRcdHRoaXMuX2VudGl0eVR5cGUgPSBlbnRpdHlUeXBlO1xuXHRcdHRoaXMuX2NvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0O1xuXG5cdFx0dGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCA9IHRoaXMuX2RldGVybWluZUFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCgpO1xuXHRcdGlmICh0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIikge1xuXHRcdFx0dGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyA9IHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/LmFubm90YXRpb25zXG5cdFx0XHRcdD8uQWdncmVnYXRpb24gYXMgQ29sbGVjdGlvbkFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uX3R5cGUgPT09IFwiRW50aXR5VHlwZVwiKSB7XG5cdFx0XHR0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zID0gdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uYW5ub3RhdGlvbnNcblx0XHRcdFx0Py5BZ2dyZWdhdGlvbiBhcyBFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5fdHlwZSA9PT0gXCJFbnRpdHlTZXRcIikge1xuXHRcdFx0dGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyA9IHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/LmFubm90YXRpb25zXG5cdFx0XHRcdD8uQWdncmVnYXRpb24gYXMgRW50aXR5U2V0QW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cdFx0fVxuXHRcdHRoaXMuX2JBcHBseVN1cHBvcnRlZCA9IHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0aWYgKHRoaXMuX2JBcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0dGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMgPSB0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uR3JvdXBhYmxlUHJvcGVydGllcyBhcyBQcm9wZXJ0eVBhdGhbXTtcblx0XHRcdHRoaXMuX2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gdGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz8uQXBwbHlTdXBwb3J0ZWQ/LkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM7XG5cblx0XHRcdHRoaXMub0NvbnRhaW5lckFnZ3JlZ2F0aW9uQW5ub3RhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCkuYW5ub3RhdGlvbnNcblx0XHRcdFx0LkFnZ3JlZ2F0aW9uIGFzIEVudGl0eUNvbnRhaW5lckFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgbW9zdCBhcHByb3ByaWF0ZSB0YXJnZXQgZm9yIHRoZSBhZ2dyZWdhdGlvbiBhbm5vdGF0aW9ucy5cblx0ICpcblx0ICogQHJldHVybnMgIEVudGl0eVR5cGUsIEVudGl0eVNldCBvciBOYXZpZ2F0aW9uUHJvcGVydHkgd2hlcmUgYWdncmVnYXRpb24gYW5ub3RhdGlvbnMgc2hvdWxkIGJlIHJlYWQgZnJvbS5cblx0ICovXG5cdHByaXZhdGUgX2RldGVybWluZUFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCgpOiBFbnRpdHlUeXBlIHwgRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5IHtcblx0XHRjb25zdCBiSXNQYXJhbWV0ZXJpemVkID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk/LnRhcmdldEVudGl0eVNldD8uZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vblxuXHRcdFx0Py5SZXN1bHRDb250ZXh0XG5cdFx0XHQ/IHRydWVcblx0XHRcdDogZmFsc2U7XG5cdFx0bGV0IG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2U7XG5cblx0XHQvLyBmaW5kIEFwcGx5U3VwcG9ydGVkXG5cdFx0aWYgKGJJc1BhcmFtZXRlcml6ZWQpIHtcblx0XHRcdC8vIGlmIHRoaXMgaXMgYSBwYXJhbWV0ZXJpemVkIHZpZXcgdGhlbiBhcHBseXN1cHBvcnRlZCBjYW4gYmUgZm91bmQgYXQgZWl0aGVyIHRoZSBuYXZQcm9wIHBvaW50aW5nIHRvIHRoZSByZXN1bHQgc2V0IG9yIGVudGl0eVR5cGUuXG5cdFx0XHQvLyBJZiBhcHBseVN1cHBvcnRlZCBpcyBwcmVzZW50IGF0IGJvdGggdGhlIG5hdlByb3AgYW5kIHRoZSBlbnRpdHlUeXBlIHRoZW4gbmF2UHJvcCBpcyBtb3JlIHNwZWNpZmljIHNvIHRha2UgYW5ub3RhdGlvbnMgZnJvbSB0aGVyZVxuXHRcdFx0Ly8gdGFyZ2V0T2JqZWN0IGluIHRoZSBjb252ZXJ0ZXIgY29udGV4dCBmb3IgYSBwYXJhbWV0ZXJpemVkIHZpZXcgaXMgdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgcG9pbnRpbmcgdG8gdGggcmVzdWx0IHNldFxuXHRcdFx0Y29uc3Qgb0RhdGFNb2RlbE9iamVjdFBhdGggPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0XHRcdGNvbnN0IG9OYXZpZ2F0aW9uUHJvcGVydHlPYmplY3QgPSBvRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0O1xuXHRcdFx0Y29uc3Qgb0VudGl0eVR5cGVPYmplY3QgPSBvRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZTtcblx0XHRcdGlmIChvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0Py5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSBvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0O1xuXHRcdFx0fSBlbHNlIGlmIChvRW50aXR5VHlwZU9iamVjdD8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5BcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0XHRvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlID0gb0VudGl0eVR5cGVPYmplY3Q7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEZvciB0aGUgdGltZSBiZWluZywgd2UgaWdub3JlIGFubm90YXRpb25zIGF0IHRoZSBjb250YWluZXIgbGV2ZWwsIHVudGlsIHRoZSB2b2NhYnVsYXJ5IGlzIHN0YWJpbGl6ZWRcblx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGVudGl0eSBzdXBwb3J0cyBhbmFseXRpY2FsIHF1ZXJpZXMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBhbmFseXRpY2FsIHF1ZXJpZXMgYXJlIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzQW5hbHl0aWNzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9iQXBwbHlTdXBwb3J0ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgaXMgZ3JvdXBhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBzdXBwb3J0IGFuYWx5dGljYWwgcXVlcmllcywgdHJ1ZSBvciBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHB1YmxpYyBpc1Byb3BlcnR5R3JvdXBhYmxlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5fYkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzIHx8IHRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Ly8gTm8gZ3JvdXBhYmxlUHJvcGVydGllcyAtLT4gYWxsIHByb3BlcnRpZXMgYXJlIGdyb3VwYWJsZVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcy5maW5kSW5kZXgocGF0aCA9PiBwYXRoLiR0YXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lID09PSBwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUpID49IDA7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHByb3BlcnR5IGlzIGFnZ3JlZ2F0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMsIHRydWUgb3IgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwdWJsaWMgaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZShwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuX2JBcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gR2V0IHRoZSBjdXN0b20gYWdncmVnYXRlc1xuXHRcdFx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zOiBBbm5vdGF0aW9uVGVybTxcblx0XHRcdFx0Q3VzdG9tQWdncmVnYXRlXG5cdFx0XHQ+W10gPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiQWdncmVnYXRpb25cIiwgQWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMuQ3VzdG9tQWdncmVnYXRlLCBbXG5cdFx0XHRcdHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXRcblx0XHRcdF0pO1xuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGN1c3RvbSBhZ2dyZWdhdGUgaGFzIGEgcXVhbGlmaWVyIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHByb3BlcnR5IG5hbWVcblx0XHRcdHJldHVybiBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMuc29tZShhbm5vdGF0aW9uID0+IHtcblx0XHRcdFx0cmV0dXJuIHByb3BlcnR5Lm5hbWUgPT09IGFubm90YXRpb24ucXVhbGlmaWVyO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdldEdyb3VwYWJsZVByb3BlcnRpZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzO1xuXHR9XG5cblx0cHVibGljIGdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzO1xuXHR9XG5cblx0cHVibGljIGdldFRyYW5zQWdncmVnYXRpb25zKCkge1xuXHRcdGNvbnN0IGFUcmFuc0FnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMgPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFx0XCJBbmFseXRpY3NcIixcblx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzXCIsXG5cdFx0XHRbdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKSwgdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCldXG5cdFx0KTtcblx0XHRyZXR1cm4gYVRyYW5zQWdncmVnYXRpb25Bbm5vdGF0aW9ucztcblx0fVxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGlzdCBvZiBjdXN0b20gYWdncmVnYXRlIGRlZmluaXRpb25zIGZvciB0aGUgZW50aXR5IHR5cGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgbWFwIChwcm9wZXJ0eU5hbWUgLS0+IGFycmF5IG9mIGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydHkgbmFtZXMpIGZvciBlYWNoIGN1c3RvbSBhZ2dyZWdhdGUgY29ycmVzcG9uZGluZyB0byBhIHByb3BlcnR5LiBUaGUgYXJyYXkgb2Zcblx0ICogY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0eSBuYW1lcyBpcyBlbXB0eSBpZiB0aGUgY3VzdG9tIGFnZ3JlZ2F0ZSBkb2Vzbid0IGhhdmUgYW55IGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydHkuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKSB7XG5cdFx0Ly8gR2V0IHRoZSBjdXN0b20gYWdncmVnYXRlc1xuXHRcdGNvbnN0IGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9uczogQW5ub3RhdGlvblRlcm08Q3VzdG9tQWdncmVnYXRlPltdID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcblx0XHRcdFwiQWdncmVnYXRpb25cIixcblx0XHRcdEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRlcm1zLkN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdFt0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0XVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGxpc3Qgb2YgYWxsb3dlZCB0cmFuc2Zvcm1hdGlvbnMgaW4gdGhlICRhcHBseS5cblx0ICogRmlyc3QgbG9vayBhdCB0aGUgY3VycmVudCBFbnRpdHlTZXQsIHRoZW4gbG9vayBhdCB0aGUgZGVmYXVsdCB2YWx1ZXMgcHJvdmlkZWQgYXQgdGhlIGNvbnRhaW5lciBsZXZlbC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGxpc3Qgb2YgdHJhbnNmb3JtYXRpb25zLCBvciB1bmRlZmluZWQgaWYgbm8gbGlzdCBpcyBmb3VuZFxuXHQgKi9cblx0cHVibGljIGdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMoKTogU3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiAoXG5cdFx0XHQodGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz8uQXBwbHlTdXBwb3J0ZWQ/LlRyYW5zZm9ybWF0aW9ucyBhcyBTdHJpbmdbXSkgfHxcblx0XHRcdCh0aGlzLm9Db250YWluZXJBZ2dyZWdhdGlvbkFubm90YXRpb24/LkFwcGx5U3VwcG9ydGVkRGVmYXVsdHM/LlRyYW5zZm9ybWF0aW9ucyBhcyBTdHJpbmdbXSlcblx0XHQpO1xuXHR9XG59XG4iXX0=
189
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFnZ3JlZ2F0aW9uLnRzIl0sIm5hbWVzIjpbIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZW50aXR5VHlwZSIsImNvbnZlcnRlckNvbnRleHQiLCJfZW50aXR5VHlwZSIsIl9jb252ZXJ0ZXJDb250ZXh0IiwiX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQiLCJfZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0IiwiX3R5cGUiLCJvVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJfYkFwcGx5U3VwcG9ydGVkIiwiQXBwbHlTdXBwb3J0ZWQiLCJfYUdyb3VwYWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwiX2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIm9Db250YWluZXJBZ2dyZWdhdGlvbkFubm90YXRpb24iLCJnZXRFbnRpdHlDb250YWluZXIiLCJiSXNQYXJhbWV0ZXJpemVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldEVudGl0eVNldCIsIkNvbW1vbiIsIlJlc3VsdENvbnRleHQiLCJvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0IiwidGFyZ2V0T2JqZWN0Iiwib0VudGl0eVR5cGVPYmplY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZ2V0RW50aXR5U2V0IiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJpc1Byb3BlcnR5R3JvdXBhYmxlIiwicHJvcGVydHkiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJmaW5kSW5kZXgiLCJwYXRoIiwiJHRhcmdldCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzUHJvcGVydHlBZ2dyZWdhdGFibGUiLCJhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsInNvbWUiLCJhbm5vdGF0aW9uIiwibmFtZSIsInF1YWxpZmllciIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJhVHJhbnNBZ2dyZWdhdGlvbkFubm90YXRpb25zIiwiZ2V0RW50aXR5VHlwZSIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsIlRyYW5zZm9ybWF0aW9ucyIsIkFwcGx5U3VwcG9ydGVkRGVmYXVsdHMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQVVBO0FBQ0E7QUFDQTtNQUNhQSxpQjtBQWNaO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDLCtCQUFZQyxVQUFaLEVBQW9DQyxnQkFBcEMsRUFBd0U7QUFBQTs7QUFDdkUsV0FBS0MsV0FBTCxHQUFtQkYsVUFBbkI7QUFDQSxXQUFLRyxpQkFBTCxHQUF5QkYsZ0JBQXpCO0FBRUEsV0FBS0csNkJBQUwsR0FBcUMsS0FBS0MscUNBQUwsRUFBckM7O0FBQ0EsVUFBSSwrQkFBS0QsNkJBQUwsZ0ZBQW9DRSxLQUFwQyxNQUE4QyxvQkFBbEQsRUFBd0U7QUFBQTs7QUFDdkUsYUFBS0MsNkJBQUwsNkJBQXFDLEtBQUtILDZCQUExQyxxRkFBcUMsdUJBQW9DSSxXQUF6RSwyREFBcUMsdUJBQ2xDQyxXQURIO0FBRUEsT0FIRCxNQUdPLElBQUksZ0NBQUtMLDZCQUFMLGtGQUFvQ0UsS0FBcEMsTUFBOEMsWUFBbEQsRUFBZ0U7QUFBQTs7QUFDdEUsYUFBS0MsNkJBQUwsNkJBQXFDLEtBQUtILDZCQUExQyxxRkFBcUMsdUJBQW9DSSxXQUF6RSwyREFBcUMsdUJBQ2xDQyxXQURIO0FBRUEsT0FITSxNQUdBLElBQUksZ0NBQUtMLDZCQUFMLGtGQUFvQ0UsS0FBcEMsTUFBOEMsV0FBbEQsRUFBK0Q7QUFBQTs7QUFDckUsYUFBS0MsNkJBQUwsNkJBQXFDLEtBQUtI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QywyQkFBQyxLQUFLN0MsNkJBQU4scUZBQUMsdUJBQW9DSSxjQUFyQywyREFBQyx1QkFBb0QwQyxlQUFyRCwrQkFDQyxLQUFLckMsK0JBRE4sb0ZBQ0Msc0JBQXNDc0Msc0JBRHZDLDJEQUNDLHVCQUE4REQsZUFEL0QsQ0FERDtBQUlBLEsiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVR5cGUsIFByb3BlcnR5LCBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9uVGVybSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMsIEN1c3RvbUFnZ3JlZ2F0ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvRWRtXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkFubm90YXRpb25zX0FnZ3JlZ2F0aW9uLFxuXHRFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQWdncmVnYXRpb24sXG5cdEVudGl0eVNldEFubm90YXRpb25zX0FnZ3JlZ2F0aW9uLFxuXHRFbnRpdHlDb250YWluZXJBbm5vdGF0aW9uc19BZ2dyZWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQWdncmVnYXRpb25fRWRtXCI7XG5cbi8qKlxuICogaGVscGVyIGNsYXNzIGZvciBBZ2dyZWdhdGlvbiBhbm5vdGF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0aW9uSGVscGVyIHtcblx0X2VudGl0eVR5cGU6IEVudGl0eVR5cGU7XG5cdF9jb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0O1xuXHRfYkFwcGx5U3VwcG9ydGVkOiBib29sZWFuO1xuXHRfYUdyb3VwYWJsZVByb3BlcnRpZXM/OiBQcm9wZXJ0eVBhdGhbXTtcblx0X2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzPztcblx0X29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ6IEVudGl0eVR5cGUgfCBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdG9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPzpcblx0XHR8IENvbGxlY3Rpb25Bbm5vdGF0aW9uc19BZ2dyZWdhdGlvblxuXHRcdHwgRW50aXR5VHlwZUFubm90YXRpb25zX0FnZ3JlZ2F0aW9uXG5cdFx0fCBFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblxuXHRvQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uPzogRW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGEgc3BlY2lmaWMgZW50aXR5IHR5cGUgYW5kIGEgY29udmVydGVyIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBFbnRpdHlUeXBlXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBDb252ZXJ0ZXJDb250ZXh0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0dGhpcy5fZW50aXR5VHlwZSA9IGVudGl0eVR5cGU7XG5cdFx0dGhpcy5fY29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQ7XG5cblx0XHR0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0ID0gdGhpcy5fZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KCk7XG5cdFx0aWYgKHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHR0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zID0gdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uYW5ub3RhdGlvbnNcblx0XHRcdFx0Py5BZ2dyZWdhdGlvbiBhcyBDb2xsZWN0aW9uQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5fdHlwZSA9PT0gXCJFbnRpdHlUeXBlXCIpIHtcblx0XHRcdHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMgPSB0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5hbm5vdGF0aW9uc1xuXHRcdFx0XHQ/LkFnZ3JlZ2F0aW9uIGFzIEVudGl0eVR5cGVBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/Ll90eXBlID09PSBcIkVudGl0eVNldFwiKSB7XG5cdFx0XHR0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zID0gdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uYW5ub3RhdGlvbnNcblx0XHRcdFx0Py5BZ2dyZWdhdGlvbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9XG5cdFx0dGhpcy5fYkFwcGx5U3VwcG9ydGVkID0gdGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz8uQXBwbHlTdXBwb3J0ZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRpZiAodGhpcy5fYkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHR0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcyA9IHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkPy5Hcm91cGFibGVQcm9wZXJ0aWVzIGFzIFByb3BlcnR5UGF0aFtdO1xuXHRcdFx0dGhpcy5fYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPSB0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uQWdncmVnYXRhYmxlUHJvcGVydGllcztcblxuXHRcdFx0dGhpcy5vQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKS5hbm5vdGF0aW9uc1xuXHRcdFx0XHQuQWdncmVnYXRpb24gYXMgRW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHRhcmdldCBmb3IgdGhlIGFnZ3JlZ2F0aW9uIGFubm90YXRpb25zLlxuXHQgKlxuXHQgKiBAcmV0dXJucyAgRW50aXR5VHlwZSwgRW50aXR5U2V0IG9yIE5hdmlnYXRpb25Qcm9wZXJ0eSB3aGVyZSBhZ2dyZWdhdGlvbiBhbm5vdGF0aW9ucyBzaG91bGQgYmUgcmVhZCBmcm9tLlxuXHQgKi9cblx0cHJpdmF0ZSBfZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KCk6IEVudGl0eVR5cGUgfCBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRcdGNvbnN0IGJJc1BhcmFtZXRlcml6ZWQgPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKT8udGFyZ2V0RW50aXR5U2V0Py5lbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uXG5cdFx0XHQ/LlJlc3VsdENvbnRleHRcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0XHRsZXQgb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZTtcblxuXHRcdC8vIGZpbmQgQXBwbHlTdXBwb3J0ZWRcblx0XHRpZiAoYklzUGFyYW1ldGVyaXplZCkge1xuXHRcdFx0Ly8gaWYgdGhpcyBpcyBhIHBhcmFtZXRlcml6ZWQgdmlldyB0aGVuIGFwcGx5c3VwcG9ydGVkIGNhbiBiZSBmb3VuZCBhdCBlaXRoZXIgdGhlIG5hdlByb3AgcG9pbnRpbmcgdG8gdGhlIHJlc3VsdCBzZXQgb3IgZW50aXR5VHlwZS5cblx0XHRcdC8vIElmIGFwcGx5U3VwcG9ydGVkIGlzIHByZXNlbnQgYXQgYm90aCB0aGUgbmF2UHJvcCBhbmQgdGhlIGVudGl0eVR5cGUgdGhlbiBuYXZQcm9wIGlzIG1vcmUgc3BlY2lmaWMgc28gdGFrZSBhbm5vdGF0aW9ucyBmcm9tIHRoZXJlXG5cdFx0XHQvLyB0YXJnZXRPYmplY3QgaW4gdGhlIGNvbnZlcnRlciBjb250ZXh0IGZvciBhIHBhcmFtZXRlcml6ZWQgdmlldyBpcyB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBwb2ludGluZyB0byB0aCByZXN1bHQgc2V0XG5cdFx0XHRjb25zdCBvRGF0YU1vZGVsT2JqZWN0UGF0aCA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25Qcm9wZXJ0eU9iamVjdCA9IG9EYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q7XG5cdFx0XHRjb25zdCBvRW50aXR5VHlwZU9iamVjdCA9IG9EYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlO1xuXHRcdFx0aWYgKG9OYXZpZ2F0aW9uUHJvcGVydHlPYmplY3Q/LmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IG9OYXZpZ2F0aW9uUHJvcGVydHlPYmplY3Q7XG5cdFx0XHR9IGVsc2UgaWYgKG9FbnRpdHlUeXBlT2JqZWN0Py5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSBvRW50aXR5VHlwZU9iamVjdDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nLCB3ZSBpZ25vcmUgYW5ub3RhdGlvbnMgYXQgdGhlIGNvbnRhaW5lciBsZXZlbCwgdW50aWwgdGhlIHZvY2FidWxhcnkgaXMgc3RhYmlsaXplZFxuXHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0fVxuXHRcdHJldHVybiBvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgZW50aXR5IHN1cHBvcnRzIGFuYWx5dGljYWwgcXVlcmllcy5cblx0ICpcblx0ICogQHJldHVybnMgYHRydWVgIGlmIGFuYWx5dGljYWwgcXVlcmllcyBhcmUgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRwdWJsaWMgaXNBbmFseXRpY3NTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2JBcHBseVN1cHBvcnRlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBpcyBncm91cGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gY2hlY2tcblx0ICogQHJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLCB0cnVlIG9yIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0cHVibGljIGlzUHJvcGVydHlHcm91cGFibGUocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLl9iQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMgfHwgdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQvLyBObyBncm91cGFibGVQcm9wZXJ0aWVzIC0tPiBhbGwgcHJvcGVydGllcyBhcmUgZ3JvdXBhYmxlXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzLmZpbmRJbmRleChwYXRoID0+IHBhdGguJHRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUgPT09IHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSkgPj0gMDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBzdXBwb3J0IGFuYWx5dGljYWwgcXVlcmllcywgdHJ1ZSBvciBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHB1YmxpYyBpc1Byb3BlcnR5QWdncmVnYXRhYmxlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5fYkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBHZXQgdGhlIGN1c3RvbSBhZ2dyZWdhdGVzXG5cdFx0XHRjb25zdCBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM6IEFubm90YXRpb25UZXJtPFxuXHRcdFx0XHRDdXN0b21BZ2dyZWdhdGVcblx0XHRcdD5bXSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJBZ2dyZWdhdGlvblwiLCBBZ2dyZWdhdGlvbkFubm90YXRpb25UZXJtcy5DdXN0b21BZ2dyZWdhdGUsIFtcblx0XHRcdFx0dGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldFxuXHRcdFx0XSk7XG5cblx0XHRcdC8vIENoZWNrIGlmIGEgY3VzdG9tIGFnZ3JlZ2F0ZSBoYXMgYSBxdWFsaWZpZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcHJvcGVydHkgbmFtZVxuXHRcdFx0cmV0dXJuIGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5zb21lKGFubm90YXRpb24gPT4ge1xuXHRcdFx0XHRyZXR1cm4gcHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0R3JvdXBhYmxlUHJvcGVydGllcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKSB7XG5cdFx0Y29uc3QgYVRyYW5zQWdncmVnYXRpb25Bbm5vdGF0aW9ucyA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XHRcIkFuYWx5dGljc1wiLFxuXHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnRpZXNcIixcblx0XHRcdFt0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eUNvbnRhaW5lcigpLCB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKV1cblx0XHQpO1xuXHRcdHJldHVybiBhVHJhbnNBZ2dyZWdhdGlvbkFubm90YXRpb25zO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGN1c3RvbSBhZ2dyZWdhdGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBlbnRpdHkgdHlwZS5cblx0ICpcblx0ICogQHJldHVybnMgQSBtYXAgKHByb3BlcnR5TmFtZSAtLT4gYXJyYXkgb2YgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0eSBuYW1lcykgZm9yIGVhY2ggY3VzdG9tIGFnZ3JlZ2F0ZSBjb3JyZXNwb25kaW5nIHRvIGEgcHJvcGVydHkuIFRoZSBhcnJheSBvZlxuXHQgKiBjb250ZXh0LWRlZmluaW5nIHByb3BlcnR5IG5hbWVzIGlzIGVtcHR5IGlmIHRoZSBjdXN0b20gYWdncmVnYXRlIGRvZXNuJ3QgaGF2ZSBhbnkgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0eS5cblx0ICovXG5cdHB1YmxpYyBnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpIHtcblx0XHQvLyBHZXQgdGhlIGN1c3RvbSBhZ2dyZWdhdGVzXG5cdFx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zOiBBbm5vdGF0aW9uVGVybTxDdXN0b21BZ2dyZWdhdGU+W10gPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFx0XCJBZ2dyZWdhdGlvblwiLFxuXHRcdFx0QWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMuQ3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0W3RoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXRdXG5cdFx0KTtcblxuXHRcdHJldHVybiBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGlzdCBvZiBhbGxvd2VkIHRyYW5zZm9ybWF0aW9ucyBpbiB0aGUgJGFwcGx5LlxuXHQgKiBGaXJzdCBsb29rIGF0IHRoZSBjdXJyZW50IEVudGl0eVNldCwgdGhlbiBsb29rIGF0IHRoZSBkZWZhdWx0IHZhbHVlcyBwcm92aWRlZCBhdCB0aGUgY29udGFpbmVyIGxldmVsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiB0cmFuc2Zvcm1hdGlvbnMsIG9yIHVuZGVmaW5lZCBpZiBubyBsaXN0IGlzIGZvdW5kXG5cdCAqL1xuXHRwdWJsaWMgZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpOiBTdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCh0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uVHJhbnNmb3JtYXRpb25zIGFzIFN0cmluZ1tdKSB8fFxuXHRcdFx0KHRoaXMub0NvbnRhaW5lckFnZ3JlZ2F0aW9uQW5ub3RhdGlvbj8uQXBwbHlTdXBwb3J0ZWREZWZhdWx0cz8uVHJhbnNmb3JtYXRpb25zIGFzIFN0cmluZ1tdKVxuXHRcdCk7XG5cdH1cbn1cbiJdfQ==
@@ -32,25 +32,39 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
32
32
  IsNewObject: and(not(Entity.HasActive), not(Entity.IsActive)),
33
33
  HasNoDraftForCurrentUser: or(not(Entity.HasDraft), and(Entity.HasDraft, not(bindingExpression("DraftAdministrativeData/DraftIsCreatedByMe"))))
34
34
  };
35
+ /**
36
+ * Gets a singleton based on the fully qualified name.
37
+ *
38
+ * @param convertedTypes The converted types
39
+ * @param {string} fullyQualifiedName The fully qualified name of the singleton
40
+ * @returns {Singleton | undefined} The singleton instance.
41
+ */
42
+
43
+ _exports.Draft = Draft;
44
+
45
+ function getSingleton(convertedTypes, fullyQualifiedName) {
46
+ return convertedTypes.singletons.find(function (singleton) {
47
+ return singleton.fullyQualifiedName === fullyQualifiedName;
48
+ });
49
+ }
35
50
  /**
36
51
  * Function to adjust singleton paths in the annotation.
37
52
  * The absolute path via EntityContainer needs to be shortened to /SingletonName/PropertyName.
38
53
  *
39
54
  * @param {string} path The path configured in the annotation
40
- * @param {ConverterContext} converterContext The instance of the converter context
55
+ * @param {ConverterOutput} convertedTypes The instance of the converter context
41
56
  * @param {string[]} visitedNavigationPaths The array of visited navigation paths
42
57
  * @returns {string} The adjusted path for the reference of the singleton property, otherwise the input path itself.
43
58
  */
44
59
 
45
- _exports.Draft = Draft;
46
60
 
47
- var singletonPathVisitor = function (path, converterContext, visitedNavigationPaths) {
61
+ var singletonPathVisitor = function (path, convertedTypes, visitedNavigationPaths) {
48
62
  // Determine whether the path is absolute and whether it points to a singleton.
49
63
  if (path.indexOf("/") === 0) {
50
64
  var parts = path.split("/").filter(Boolean),
51
65
  propertyName = parts.pop(),
52
66
  entitySetName = parts.join("/"),
53
- singleton = converterContext.getSingleton(entitySetName);
67
+ singleton = getSingleton(convertedTypes, entitySetName);
54
68
 
55
69
  if (singleton) {
56
70
  // Set the absolute binding path to access the singleton property
@@ -88,10 +102,10 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
88
102
  return path.substring(bindingParameterPrefix.length);
89
103
  }
90
104
 
91
- return singletonPathVisitor(path, converterContext, []);
105
+ return singletonPathVisitor(path, converterContext.getConvertedTypes(), []);
92
106
  }
93
107
 
94
108
  _exports.bindingContextPathVisitor = bindingContextPathVisitor;
95
109
  return _exports;
96
110
  }, false);
97
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJpbmRpbmdIZWxwZXIudHMiXSwibmFtZXMiOlsiVUkiLCJJc0NyZWF0ZU1vZGUiLCJiaW5kaW5nRXhwcmVzc2lvbiIsIklzQ3JlYXRlTW9kZVN0aWNreSIsIklzRWRpdGFibGUiLCJJc1RyYW5zaWVudEJpbmRpbmciLCJlcXVhbCIsIklzVG90YWwiLCJJc0V4cGFuZGVkIiwiTm9kZUxldmVsIiwiRW50aXR5IiwiSGFzRHJhZnQiLCJIYXNBY3RpdmUiLCJJc0FjdGl2ZSIsIkRyYWZ0IiwiSXNOZXdPYmplY3QiLCJhbmQiLCJub3QiLCJIYXNOb0RyYWZ0Rm9yQ3VycmVudFVzZXIiLCJvciIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwicGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwiaW5kZXhPZiIsInBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwicHJvcGVydHlOYW1lIiwicG9wIiwiZW50aXR5U2V0TmFtZSIsImpvaW4iLCJzaW5nbGV0b24iLCJnZXRTaW5nbGV0b24iLCJuYW1lIiwibG9jYWxQYXRoIiwiY29uY2F0IiwicHVzaCIsImJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IiLCJiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUiLCJiaW5kaW5nUGFyYW1ldGVyUHJlZml4Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJzdGFydHNXaXRoIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQUNPLE1BQU1BLEVBQUUsR0FBRztBQUNqQkMsSUFBQUEsWUFBWSxFQUFFQyxpQkFBaUIsQ0FBQyxZQUFELEVBQWUsSUFBZixDQURkO0FBRWpCQyxJQUFBQSxrQkFBa0IsRUFBRUQsaUJBQWlCLENBQUMsa0JBQUQsRUFBcUIsSUFBckIsQ0FGcEI7QUFHakJFLElBQUFBLFVBQVUsRUFBRUYsaUJBQWlCLENBQUMsYUFBRCxFQUFnQixJQUFoQixDQUhaO0FBSWpCRyxJQUFB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O0FBQzVDLGFBQU9wQixJQUFJLENBQUNxQixTQUFMLENBQWVELHNCQUFzQixDQUFDSSxNQUF0QyxDQUFQO0FBQ0E7O0FBQ0QsV0FBT3pCLG9CQUFvQixDQUFDQyxJQUFELEVBQU9DLGdCQUFQLEVBQXlCLEVBQXpCLENBQTNCO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuZCwgYmluZGluZ0V4cHJlc3Npb24sIGVxdWFsLCBFeHByZXNzaW9uLCBub3QsIG9yIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IGNvbnN0IFVJID0ge1xuXHRJc0NyZWF0ZU1vZGU6IGJpbmRpbmdFeHByZXNzaW9uKFwiY3JlYXRlTW9kZVwiLCBcInVpXCIpIGFzIEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdElzQ3JlYXRlTW9kZVN0aWNreTogYmluZGluZ0V4cHJlc3Npb24oXCJjcmVhdGVNb2RlU3RpY2t5XCIsIFwidWlcIikgYXMgRXhwcmVzc2lvbjxib29sZWFuPixcblx0SXNFZGl0YWJsZTogYmluZGluZ0V4cHJlc3Npb24oXCIvaXNFZGl0YWJsZVwiLCBcInVpXCIpIGFzIEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdElzVHJhbnNpZW50QmluZGluZzogZXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCJAJHVpNS5jb250ZXh0LmlzVHJhbnNpZW50XCIpLCB0cnVlKSxcblx0SXNUb3RhbDogZXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCJAJHVpNS5ub2RlLmlzVG90YWxcIiksIHRydWUpLFxuXHRJc0V4cGFuZGVkOiBlcXVhbChiaW5kaW5nRXhwcmVzc2lvbihcIkAkdWk1Lm5vZGUuaXNFeHBhbmRlZFwiKSwgdHJ1ZSksXG5cdE5vZGVMZXZlbDogYmluZGluZ0V4cHJlc3Npb24oXCJAJHVpNS5ub2RlLmxldmVsXCIpXG59O1xuXG5leHBvcnQgY29uc3QgRW50aXR5ID0ge1xuXHRIYXNEcmFmdDogYmluZGluZ0V4cHJlc3Npb24oXCJIYXNEcmFmdEVudGl0eVwiKSxcblx0SGFzQWN0aXZlOiBiaW5kaW5nRXhwcmVzc2lvbihcIkhhc0FjdGl2ZUVudGl0eVwiKSxcblx0SXNBY3RpdmU6IGJpbmRpbmdFeHByZXNzaW9uKFwiSXNBY3RpdmVFbnRpdHlcIilcbn07XG5cbmV4cG9ydCBjb25zdCBEcmFmdCA9IHtcblx0SXNOZXdPYmplY3Q6IGFuZChub3QoRW50aXR5Lkhhc0FjdGl2ZSksIG5vdChFbnRpdHkuSXNBY3RpdmUpKSxcblx0SGFzTm9EcmFmdEZvckN1cnJlbnRVc2VyOiBvcihcblx0XHRub3QoRW50aXR5Lkhhc0RyYWZ0KSxcblx0XHRhbmQoRW50aXR5Lkhhc0RyYWZ0LCBub3QoYmluZGluZ0V4cHJlc3Npb24oXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdElzQ3JlYXRlZEJ5TWVcIikgYXMgRXhwcmVzc2lvbjxib29sZWFuPikpXG5cdClcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gYWRqdXN0IHNpbmdsZXRvbiBwYXRocyBpbiB0aGUgYW5ub3RhdGlvbi5cbiAqIFRoZSBhYnNvbHV0ZSBwYXRoIHZpYSBFbnRpdHlDb250YWluZXIgbmVlZHMgdG8gYmUgc2hvcnRlbmVkIHRvIC9TaW5nbGV0b25OYW1lL1Byb3BlcnR5TmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBjb25maWd1cmVkIGluIHRoZSBhbm5vdGF0aW9uXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHtzdHJpbmdbXX0gdmlzaXRlZE5hdmlnYXRpb25QYXRocyBUaGUgYXJyYXkgb2YgdmlzaXRlZCBuYXZpZ2F0aW9uIHBhdGhzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYWRqdXN0ZWQgcGF0aCBmb3IgdGhlIHJlZmVyZW5jZSBvZiB0aGUgc2luZ2xldG9uIHByb3BlcnR5LCBvdGhlcndpc2UgdGhlIGlucHV0IHBhdGggaXRzZWxmLlxuICovXG5leHBvcnQgY29uc3Qgc2luZ2xldG9uUGF0aFZpc2l0b3IgPSBmdW5jdGlvbihwYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Ly8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHBhdGggaXMgYWJzb2x1dGUgYW5kIHdoZXRoZXIgaXQgcG9pbnRzIHRvIGEgc2luZ2xldG9uLlxuXHRpZiAocGF0aC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLFxuXHRcdFx0cHJvcGVydHlOYW1lID0gcGFydHMucG9wKCksXG5cdFx0XHRlbnRpdHlTZXROYW1lID0gcGFydHMuam9pbihcIi9cIiksXG5cdFx0XHRzaW5nbGV0b24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldFNpbmdsZXRvbihlbnRpdHlTZXROYW1lKTtcblx0XHRpZiAoc2luZ2xldG9uKSB7XG5cdFx0XHQvLyBTZXQgdGhlIGFic29sdXRlIGJpbmRpbmcgcGF0aCB0byBhY2Nlc3MgdGhlIHNpbmdsZXRvbiBwcm9wZXJ0eVxuXHRcdFx0cGF0aCA9IFwiL1wiICsgc2luZ2xldG9uLm5hbWUgKyBcIi9cIiArIHByb3BlcnR5TmFtZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gTm90IGEgc2luZ2xldG9uIHJlZmVyZW5jZS5cblx0XHQvLyBQcmVmaXggdGhlIG5hdmlnYXRpb24gcGF0aCB0byB0aGUgcHJvcGVydHkgcGF0aFxuXHRcdGNvbnN0IGxvY2FsUGF0aCA9IHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMuY29uY2F0KCk7XG5cdFx0bG9jYWxQYXRoLnB1c2gocGF0aCk7XG5cdFx0cGF0aCA9IGxvY2FsUGF0aC5qb2luKFwiL1wiKTtcblx0fVxuXHRyZXR1cm4gcGF0aDtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gYWRqdXN0IHByb3BlcnR5IHBhdGhzIGRlZmluZWQgaW4gdGhlIGJpbmRpbmcgb2YgYW4gYWN0aW9uLlxuICpcbiAqIFRoZSBiaW5kaW5nIHBhcmFtZXRlciBuYW1lIG5lZWRzIHRvIGJlIHJlbW92ZWQuIFNpbmdsZXRvbiBwYXRocyBuZWVkIHRvIGJlIHJlc29sdmVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIGNvbmZpZ3VyZWQgaW4gdGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgYmluZGluZyBwYXJhbWV0ZXJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhZGp1c3RlZCBwcm9wZXJ0eSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yKHBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lOiBzdHJpbmcpIHtcblx0Y29uc3QgYmluZGluZ1BhcmFtZXRlclByZWZpeCA9IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZT8uc3Vic3RyaW5nKGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSArIFwiL1wiO1xuXHQvLyBTdHJpcCB0aGUgYmluZGluZyBwYXJhbWV0ZXIgbmFtZSBmcm9tIE9wZXJhdGlvbkF2YWlsYWJsZSBwYXRoXG5cdC8vIEZvciBlLmcuIF9pdC9wcm9wZXJ0eTEgLS0+IHByb3BlcnR5MVxuXHRpZiAocGF0aC5zdGFydHNXaXRoKGJpbmRpbmdQYXJhbWV0ZXJQcmVmaXgpKSB7XG5cdFx0cmV0dXJuIHBhdGguc3Vic3RyaW5nKGJpbmRpbmdQYXJhbWV0ZXJQcmVmaXgubGVuZ3RoKTtcblx0fVxuXHRyZXR1cm4gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dCwgW10pO1xufVxuIl19
111
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJpbmRpbmdIZWxwZXIudHMiXSwibmFtZXMiOlsiVUkiLCJJc0NyZWF0ZU1vZGUiLCJiaW5kaW5nRXhwcmVzc2lvbiIsIklzQ3JlYXRlTW9kZVN0aWNreSIsIklzRWRpdGFibGUiLCJJc1RyYW5zaWVudEJpbmRpbmciLCJlcXVhbCIsIklzVG90YWwiLCJJc0V4cGFuZGVkIiwiTm9kZUxldmVsIiwiRW50aXR5IiwiSGFzRHJhZnQiLCJIYXNBY3RpdmUiLCJJc0FjdGl2ZSIsIkRyYWZ0IiwiSXNOZXdPYmplY3QiLCJhbmQiLCJub3QiLCJIYXNOb0RyYWZ0Rm9yQ3VycmVudFVzZXIiLCJvciIsImdldFNpbmdsZXRvbiIsImNvbnZlcnRlZFR5cGVzIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwic2luZ2xldG9ucyIsImZpbmQiLCJzaW5nbGV0b24iLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsInBhdGgiLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwiaW5kZXhPZiIsInBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwicHJvcGVydHlOYW1lIiwicG9wIiwiZW50aXR5U2V0TmFtZSIsImpvaW4iLCJuYW1lIiwibG9jYWxQYXRoIiwiY29uY2F0IiwicHVzaCIsImJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lIiwiYmluZGluZ1BhcmFtZXRlclByZWZpeCIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwic3RhcnRzV2l0aCIsImxlbmd0aCIsImdldENvbnZlcnRlZFR5cGVzIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQUVPLE1BQU1BLEVBQUUsR0FBRztBQUNqQkMsSUFBQUEsWUFBWSxFQUFFQyxpQkFBaUIsQ0FBQyxZQUFELEVBQWUsSUFBZixDQURkO0FBRWpCQyxJQUFBQSxrQkFBa0IsRUFBRUQsaUJBQWlCLENBQUMsa0JBQUQsRUFBcUIsSUFB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QUFTZSx5QkFBVCxDQUFtQ2YsSUFBbkMsRUFBaURnQixnQkFBakQsRUFBcUZDLHdCQUFyRixFQUF1SDtBQUM3SCxRQUFNQyxzQkFBc0IsR0FBRyxDQUFBRCx3QkFBd0IsU0FBeEIsSUFBQUEsd0JBQXdCLFdBQXhCLFlBQUFBLHdCQUF3QixDQUFFRSxTQUExQixDQUFvQ0Ysd0JBQXdCLENBQUNHLFdBQXpCLENBQXFDLEdBQXJDLElBQTRDLENBQWhGLEtBQXFGLEdBQXBILENBRDZILENBRTdIO0FBQ0E7O0FBQ0EsUUFBSXBCLElBQUksQ0FBQ3FCLFVBQUwsQ0FBZ0JILHNCQUFoQixDQUFKLEVBQTZDO0FBQzVDLGFBQU9sQixJQUFJLENBQUNtQixTQUFMLENBQWVELHNCQUFzQixDQUFDSSxNQUF0QyxDQUFQO0FBQ0E7O0FBQ0QsV0FBT3ZCLG9CQUFvQixDQUFDQyxJQUFELEVBQU9nQixnQkFBZ0IsQ0FBQ08saUJBQWpCLEVBQVAsRUFBNkMsRUFBN0MsQ0FBM0I7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5kLCBiaW5kaW5nRXhwcmVzc2lvbiwgZXF1YWwsIEV4cHJlc3Npb24sIG5vdCwgb3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgQ29udmVydGVyT3V0cHV0LCBTaW5nbGV0b24gfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuXG5leHBvcnQgY29uc3QgVUkgPSB7XG5cdElzQ3JlYXRlTW9kZTogYmluZGluZ0V4cHJlc3Npb24oXCJjcmVhdGVNb2RlXCIsIFwidWlcIikgYXMgRXhwcmVzc2lvbjxib29sZWFuPixcblx0SXNDcmVhdGVNb2RlU3RpY2t5OiBiaW5kaW5nRXhwcmVzc2lvbihcImNyZWF0ZU1vZGVTdGlja3lcIiwgXCJ1aVwiKSBhcyBFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRJc0VkaXRhYmxlOiBiaW5kaW5nRXhwcmVzc2lvbihcIi9pc0VkaXRhYmxlXCIsIFwidWlcIikgYXMgRXhwcmVzc2lvbjxib29sZWFuPixcblx0SXNUcmFuc2llbnRCaW5kaW5nOiBlcXVhbChiaW5kaW5nRXhwcmVzc2lvbihcIkAkdWk1LmNvbnRleHQuaXNUcmFuc2llbnRcIiksIHRydWUpLFxuXHRJc1RvdGFsOiBlcXVhbChiaW5kaW5nRXhwcmVzc2lvbihcIkAkdWk1Lm5vZGUuaXNUb3RhbFwiKSwgdHJ1ZSksXG5cdElzRXhwYW5kZWQ6IGVxdWFsKGJpbmRpbmdFeHByZXNzaW9uKFwiQCR1aTUubm9kZS5pc0V4cGFuZGVkXCIpLCB0cnVlKSxcblx0Tm9kZUxldmVsOiBiaW5kaW5nRXhwcmVzc2lvbihcIkAkdWk1Lm5vZGUubGV2ZWxcIilcbn07XG5cbmV4cG9ydCBjb25zdCBFbnRpdHkgPSB7XG5cdEhhc0RyYWZ0OiBiaW5kaW5nRXhwcmVzc2lvbihcIkhhc0RyYWZ0RW50aXR5XCIpLFxuXHRIYXNBY3RpdmU6IGJpbmRpbmdFeHByZXNzaW9uKFwiSGFzQWN0aXZlRW50aXR5XCIpLFxuXHRJc0FjdGl2ZTogYmluZGluZ0V4cHJlc3Npb24oXCJJc0FjdGl2ZUVudGl0eVwiKVxufTtcblxuZXhwb3J0IGNvbnN0IERyYWZ0ID0ge1xuXHRJc05ld09iamVjdDogYW5kKG5vdChFbnRpdHkuSGFzQWN0aXZlKSwgbm90KEVudGl0eS5Jc0FjdGl2ZSkpLFxuXHRIYXNOb0RyYWZ0Rm9yQ3VycmVudFVzZXI6IG9yKFxuXHRcdG5vdChFbnRpdHkuSGFzRHJhZnQpLFxuXHRcdGFuZChFbnRpdHkuSGFzRHJhZnQsIG5vdChiaW5kaW5nRXhwcmVzc2lvbihcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0SXNDcmVhdGVkQnlNZVwiKSBhcyBFeHByZXNzaW9uPGJvb2xlYW4+KSlcblx0KVxufTtcblxuLyoqXG4gKiBHZXRzIGEgc2luZ2xldG9uIGJhc2VkIG9uIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVkVHlwZXMgVGhlIGNvbnZlcnRlZCB0eXBlc1xuICogQHBhcmFtIHtzdHJpbmd9IGZ1bGx5UXVhbGlmaWVkTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNpbmdsZXRvblxuICogQHJldHVybnMge1NpbmdsZXRvbiB8IHVuZGVmaW5lZH0gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2luZ2xldG9uKGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZXJPdXRwdXQsIGZ1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nKTogU2luZ2xldG9uIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGNvbnZlcnRlZFR5cGVzLnNpbmdsZXRvbnMuZmluZChzaW5nbGV0b24gPT4gc2luZ2xldG9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gZnVsbHlRdWFsaWZpZWROYW1lKTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBhZGp1c3Qgc2luZ2xldG9uIHBhdGhzIGluIHRoZSBhbm5vdGF0aW9uLlxuICogVGhlIGFic29sdXRlIHBhdGggdmlhIEVudGl0eUNvbnRhaW5lciBuZWVkcyB0byBiZSBzaG9ydGVuZWQgdG8gL1NpbmdsZXRvbk5hbWUvUHJvcGVydHlOYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIGNvbmZpZ3VyZWQgaW4gdGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSB7Q29udmVydGVyT3V0cHV0fSBjb252ZXJ0ZWRUeXBlcyBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBhcnJheSBvZiB2aXNpdGVkIG5hdmlnYXRpb24gcGF0aHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhZGp1c3RlZCBwYXRoIGZvciB0aGUgcmVmZXJlbmNlIG9mIHRoZSBzaW5nbGV0b24gcHJvcGVydHksIG90aGVyd2lzZSB0aGUgaW5wdXQgcGF0aCBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjb25zdCBzaW5nbGV0b25QYXRoVmlzaXRvciA9IGZ1bmN0aW9uKHBhdGg6IHN0cmluZywgY29udmVydGVkVHlwZXM6IENvbnZlcnRlck91dHB1dCwgdmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHQvLyBEZXRlcm1pbmUgd2hldGhlciB0aGUgcGF0aCBpcyBhYnNvbHV0ZSBhbmQgd2hldGhlciBpdCBwb2ludHMgdG8gYSBzaW5nbGV0b24uXG5cdGlmIChwYXRoLmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbiksXG5cdFx0XHRwcm9wZXJ0eU5hbWUgPSBwYXJ0cy5wb3AoKSxcblx0XHRcdGVudGl0eVNldE5hbWUgPSBwYXJ0cy5qb2luKFwiL1wiKSxcblx0XHRcdHNpbmdsZXRvbiA9IGdldFNpbmdsZXRvbihjb252ZXJ0ZWRUeXBlcywgZW50aXR5U2V0TmFtZSk7XG5cdFx0aWYgKHNpbmdsZXRvbikge1xuXHRcdFx0Ly8gU2V0IHRoZSBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggdG8gYWNjZXNzIHRoZSBzaW5nbGV0b24gcHJvcGVydHlcblx0XHRcdHBhdGggPSBcIi9cIiArIHNpbmdsZXRvbi5uYW1lICsgXCIvXCIgKyBwcm9wZXJ0eU5hbWU7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE5vdCBhIHNpbmdsZXRvbiByZWZlcmVuY2UuXG5cdFx0Ly8gUHJlZml4IHRoZSBuYXZpZ2F0aW9uIHBhdGggdG8gdGhlIHByb3BlcnR5IHBhdGhcblx0XHRjb25zdCBsb2NhbFBhdGggPSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLmNvbmNhdCgpO1xuXHRcdGxvY2FsUGF0aC5wdXNoKHBhdGgpO1xuXHRcdHBhdGggPSBsb2NhbFBhdGguam9pbihcIi9cIik7XG5cdH1cblx0cmV0dXJuIHBhdGg7XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGFkanVzdCBwcm9wZXJ0eSBwYXRocyBkZWZpbmVkIGluIHRoZSBiaW5kaW5nIG9mIGFuIGFjdGlvbi5cbiAqXG4gKiBUaGUgYmluZGluZyBwYXJhbWV0ZXIgbmFtZSBuZWVkcyB0byBiZSByZW1vdmVkLiBTaW5nbGV0b24gcGF0aHMgbmVlZCB0byBiZSByZXNvbHZlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBjb25maWd1cmVkIGluIHRoZSBhbm5vdGF0aW9uXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGJpbmRpbmcgcGFyYW1ldGVyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYWRqdXN0ZWQgcHJvcGVydHkgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvcihwYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZTogc3RyaW5nKSB7XG5cdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJQcmVmaXggPSBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWU/LnN1YnN0cmluZyhiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSkgKyBcIi9cIjtcblx0Ly8gU3RyaXAgdGhlIGJpbmRpbmcgcGFyYW1ldGVyIG5hbWUgZnJvbSBPcGVyYXRpb25BdmFpbGFibGUgcGF0aFxuXHQvLyBGb3IgZS5nLiBfaXQvcHJvcGVydHkxIC0tPiBwcm9wZXJ0eTFcblx0aWYgKHBhdGguc3RhcnRzV2l0aChiaW5kaW5nUGFyYW1ldGVyUHJlZml4KSkge1xuXHRcdHJldHVybiBwYXRoLnN1YnN0cmluZyhiaW5kaW5nUGFyYW1ldGVyUHJlZml4Lmxlbmd0aCk7XG5cdH1cblx0cmV0dXJuIHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pO1xufVxuIl19
@@ -1,5 +1,6 @@
1
1
  import { and, bindingExpression, equal, Expression, not, or } from "sap/fe/core/helpers/BindingExpression";
2
2
  import ConverterContext from "sap/fe/core/converters/ConverterContext";
3
+ import { ConverterOutput, Singleton } from "@sap-ux/annotation-converter";
3
4
 
4
5
  export const UI = {
5
6
  IsCreateMode: bindingExpression("createMode", "ui") as Expression<boolean>,
@@ -25,22 +26,33 @@ export const Draft = {
25
26
  )
26
27
  };
27
28
 
29
+ /**
30
+ * Gets a singleton based on the fully qualified name.
31
+ *
32
+ * @param convertedTypes The converted types
33
+ * @param {string} fullyQualifiedName The fully qualified name of the singleton
34
+ * @returns {Singleton | undefined} The singleton instance.
35
+ */
36
+ function getSingleton(convertedTypes: ConverterOutput, fullyQualifiedName: string): Singleton | undefined {
37
+ return convertedTypes.singletons.find(singleton => singleton.fullyQualifiedName === fullyQualifiedName);
38
+ }
39
+
28
40
  /**
29
41
  * Function to adjust singleton paths in the annotation.
30
42
  * The absolute path via EntityContainer needs to be shortened to /SingletonName/PropertyName.
31
43
  *
32
44
  * @param {string} path The path configured in the annotation
33
- * @param {ConverterContext} converterContext The instance of the converter context
45
+ * @param {ConverterOutput} convertedTypes The instance of the converter context
34
46
  * @param {string[]} visitedNavigationPaths The array of visited navigation paths
35
47
  * @returns {string} The adjusted path for the reference of the singleton property, otherwise the input path itself.
36
48
  */
37
- export const singletonPathVisitor = function(path: string, converterContext: ConverterContext, visitedNavigationPaths: string[]): string {
49
+ export const singletonPathVisitor = function(path: string, convertedTypes: ConverterOutput, visitedNavigationPaths: string[]): string {
38
50
  // Determine whether the path is absolute and whether it points to a singleton.
39
51
  if (path.indexOf("/") === 0) {
40
52
  const parts = path.split("/").filter(Boolean),
41
53
  propertyName = parts.pop(),
42
54
  entitySetName = parts.join("/"),
43
- singleton = converterContext.getSingleton(entitySetName);
55
+ singleton = getSingleton(convertedTypes, entitySetName);
44
56
  if (singleton) {
45
57
  // Set the absolute binding path to access the singleton property
46
58
  path = "/" + singleton.name + "/" + propertyName;
@@ -72,5 +84,5 @@ export function bindingContextPathVisitor(path: string, converterContext: Conver
72
84
  if (path.startsWith(bindingParameterPrefix)) {
73
85
  return path.substring(bindingParameterPrefix.length);
74
86
  }
75
- return singletonPathVisitor(path, converterContext, []);
87
+ return singletonPathVisitor(path, converterContext.getConvertedTypes(), []);
76
88
  }
@@ -120,6 +120,17 @@ sap.ui.define([], function () {
120
120
  /**
121
121
  * Insert a set of custom elements in the right position in an original collection.
122
122
  *
123
+ * Parameters for overwritableKeys and their implications:
124
+ * "overwrite": The whole object gets overwritten - if the customElements include a default, this will overrule the whole rootElements configuration.
125
+ * "merge": This is similar to calling insertCustomElements itself. You must include the
126
+ * full CustomElement syntax within the customElements, including anchors, for example.
127
+ * "ignore": There are no additions and no combinations. Only the rootElements object is used.
128
+ *
129
+ * Note - Proceed as follows in case you have defined customElements and do not want to overwrite their values with defaults:
130
+ * Hand the rootElements into the creation function of the customElement.
131
+ * Depending on the existence of both rootElement-configuration and customElement-configuration,
132
+ * you must set the customElements property, for which the "overwrite"-property is set, explicitly to undefined.
133
+ *
123
134
  * @template T
124
135
  * @param rootElements A list of "ConfigurableObject" which means object that have a unique "key"
125
136
  * @param customElements An object containing extra object to add, they are indexed by a key and have a "position" object
@@ -214,4 +225,4 @@ sap.ui.define([], function () {
214
225
  _exports.insertCustomElements = insertCustomElements;
215
226
  return _exports;
216
227
  }, false);
217
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbmZpZ3VyYWJsZU9iamVjdC50cyJdLCJuYW1lcyI6WyJQbGFjZW1lbnQiLCJvcmRlclBvc2l0aW9uaW5nSXRlbVJlY3Vyc2l2ZWx5IiwicG9zaXRpb25pbmdJdGVtcyIsImFuY2hvciIsInNvcnRlZCIsInZpc2l0ZWQiLCJpbnNlcnRJbmRleCIsImluZGV4T2YiLCJhbmNob3JJdGVtIiwidW5kZWZpbmVkIiwiRXJyb3IiLCJwbGFjZW1lbnQiLCJCZWZvcmUiLCJsZW5ndGgiLCJzcGxpY2UiLCJpc0FycmF5Q29uZmlnIiwiY29uZmlnIiwiYXBwbHlPdmVycmlkZSIsIm92ZXJ3cml0YWJsZUtleXMiLCJzb3VyY2VJdGVtIiwiY3VzdG9tRWxlbWVudCIsIm91dEl0ZW0iLCJvdmVyd3JpdGFibGVLZXkiLCJPYmplY3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJvdmVycmlkZUNvbmZpZyIsInN1Ykl0ZW0iLCJzdWJDb25maWciLCJBcnJheSIsImlzQXJyYXkiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsInJvb3RFbGVtZW50cyIsImN1c3RvbUVsZW1lbnRzIiwiZmlyc3RBbmNob3IiLCJrZXkiLCJyb290RWxlbWVudHNXaXRob3V0TGFzdCIsImZpbHRlciIsInJvb3RFbGVtZW50IiwicG9zaXRpb24iLCJFbmQiLCJsYXN0QW5jaG9yIiwiZW5kRWxlbWVudCIsIml0ZW1zUGVyS2V5IiwiZm9yRWFjaCIsIkFmdGVyIiwia2V5cyIsImN1c3RvbUVsZW1lbnRLZXkiLCJwb3RlbnRpYWxBbmNob3IiLCJtZW51IiwibWFwIiwic29ydGVkS2V5cyIsInBvc2l0aW9uSXRlbUtleSIsIm91dEVsZW1lbnRzIiwicHVzaCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7O01BR1lBLFM7O2FBQUFBLFM7QUFBQUEsSUFBQUEsUztBQUFBQSxJQUFBQSxTO0FBQUFBLElBQUFBLFM7S0FBQUEsUyxLQUFBQSxTOzs7O0FBcUJaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LEdBQWYsQ0FBaEIsR0FBc0NRLFdBQVcsQ0FBQ3ZCLGFBQWEsQ0FBQ2UsR0FBZixDQUFYLENBQStCSSxRQUFyRTtBQUNBO0FBQ0Q7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFDRyxPQVpELE1BWU87QUFDTkksUUFBQUEsV0FBVyxDQUFDdkIsYUFBYSxDQUFDZSxHQUFmLENBQVgsR0FBaUNsQixhQUFhLENBQUNDLGdCQUFELEVBQW1CLElBQW5CLEVBQXlCRSxhQUF6QixDQUE5QztBQUNBbEIsUUFBQUEsZ0JBQWdCLENBQUNrQixhQUFhLENBQUNlLEdBQWYsQ0FBaEIsR0FBc0NmLGFBQWEsQ0FBQ21CLFFBQXBEO0FBQ0E7QUFDRCxLQWxDRDtBQW1DQSxRQUFNWSxVQUFvQixHQUFHLEVBQTdCO0FBRUE1QixJQUFBQSxNQUFNLENBQUN1QixJQUFQLENBQVk1QyxnQkFBWixFQUE4QjBDLE9BQTlCLENBQXNDLFVBQUFRLGVBQWUsRUFBSTtBQUN4RG5ELE1BQUFBLCtCQUErQixDQUFDQyxnQkFBRCxFQUFtQmtELGVBQW5CLEVBQW9DRCxVQUFwQyxFQUFnRCxFQUFoRCxDQUEvQjtBQUNBLEtBRkQ7QUFJQSxRQUFNRSxXQUFXLEdBQUdGLFVBQVUsQ0FBQ0QsR0FBWCxDQUFlLFVBQUFmLEdBQUc7QUFBQSxhQUFJUSxXQUFXLENBQUNSLEdBQUQsQ0FBZjtBQUFBLEtBQWxCLENBQXBCOztBQUNBLFFBQUlPLFVBQUosRUFBZ0I7QUFDZlcsTUFBQUEsV0FBVyxDQUFDQyxJQUFaLENBQWlCWixVQUFqQjtBQUNBOztBQUNELFdBQU9XLFdBQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgUG9zaXRpb24gPSB7XG5cdGFuY2hvcj86IHN0cmluZztcblx0cGxhY2VtZW50OiBQbGFjZW1lbnQ7XG59O1xuXG5leHBvcnQgZW51bSBQbGFjZW1lbnQge1xuXHRBZnRlciA9IFwiQWZ0ZXJcIixcblx0QmVmb3JlID0gXCJCZWZvcmVcIixcblx0RW5kID0gXCJFbmRcIlxufVxuZXhwb3J0IHR5cGUgQ29uZmlndXJhYmxlT2JqZWN0S2V5ID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgQ29uZmlndXJhYmxlT2JqZWN0ID0gUG9zaXRpb25hYmxlICYge1xuXHRrZXk6IENvbmZpZ3VyYWJsZU9iamVjdEtleTtcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUVsZW1lbnQ8VCBleHRlbmRzIENvbmZpZ3VyYWJsZU9iamVjdD4gPSBUICYge1xuXHRwb3NpdGlvbjogUG9zaXRpb247XG5cdG1lbnU/OiBhbnlbXSB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFBvc2l0aW9uYWJsZSA9IHtcblx0cG9zaXRpb24/OiBQb3NpdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbmZpZ3VyYWJsZVJlY29yZDxUPiA9IFJlY29yZDxDb25maWd1cmFibGVPYmplY3RLZXksIFQ+O1xuXG4vKipcbiAqIFJlY3Vyc2l2ZSBtZXRob2QgdGhhdCBvcmRlciB0aGUga2V5cyBiYXNlZCBvbiBhIHBvc2l0aW9uIGluZm9ybWF0aW9uLlxuICpcbiAqIEBwYXJhbSBwb3NpdGlvbmluZ0l0ZW1zXG4gKiBAcGFyYW0gYW5jaG9yXG4gKiBAcGFyYW0gc29ydGVkXG4gKiBAcGFyYW0gdmlzaXRlZFxuICogQHJldHVybnMge251bWJlcn0gVGhlIG9yZGVyIG9mIHRoZSBjdXJyZW50IGl0ZW1cbiAqL1xuY29uc3Qgb3JkZXJQb3NpdGlvbmluZ0l0ZW1SZWN1cnNpdmVseSA9IChcblx0cG9zaXRpb25pbmdJdGVtczogUmVjb3JkPHN0cmluZywgUmVxdWlyZWQ8UG9zaXRpb24+Pixcblx0YW5jaG9yOiBzdHJpbmcsXG5cdHNvcnRlZDogc3RyaW5nW10sXG5cdHZpc2l0ZWQ6IFJlY29yZDxzdHJpbmcsIFJlcXVpcmVkPFBvc2l0aW9uPj5cbik6IG51bWJlciA9PiB7XG5cdGxldCBpbnNlcnRJbmRleCA9IHNvcnRlZC5pbmRleE9mKGFuY2hvcik7XG5cdGlmIChpbnNlcnRJbmRleCAhPT0gLTEpIHtcblx0XHRyZXR1cm4gaW5zZXJ0SW5kZXg7XG5cdH1cblx0Y29uc3QgYW5jaG9ySXRlbTogUmVxdWlyZWQ8UG9zaXRpb24+ID0gcG9zaXRpb25pbmdJdGVtc1thbmNob3JdO1xuXHRpZiAoYW5jaG9ySXRlbSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly9yZXR1cm4gc29ydGVkLmxlbmd0aDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwb3NpdGlvbiBhbmNob3Igbm90IGZvdW5kOiBcIiArIGFuY2hvcik7XG5cdH1cblxuXHR2aXNpdGVkW2FuY2hvcl0gPSBhbmNob3JJdGVtO1xuXHRpZiAoYW5jaG9ySXRlbSAmJiAhKGFuY2hvckl0ZW0uYW5jaG9yIGluIHZpc2l0ZWQpKSB7XG5cdFx0aW5zZXJ0SW5kZXggPSBvcmRlclBvc2l0aW9uaW5nSXRlbVJlY3Vyc2l2ZWx5KHBvc2l0aW9uaW5nSXRlbXMsIGFuY2hvckl0ZW0uYW5jaG9yLCBzb3J0ZWQsIHZpc2l0ZWQpO1xuXHRcdGlmIChhbmNob3JJdGVtLnBsYWNlbWVudCAhPT0gUGxhY2VtZW50LkJlZm9yZSkge1xuXHRcdFx0KytpbnNlcnRJbmRleDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aW5zZXJ0SW5kZXggPSBzb3J0ZWQubGVuZ3RoO1xuXHR9XG5cblx0c29ydGVkLnNwbGljZShpbnNlcnRJbmRleCwgMCwgYW5jaG9yKTtcblx0cmV0dXJuIGluc2VydEluZGV4O1xufTtcblxudHlwZSBPdmVycmlkZVR5cGUgPSBcIm1lcmdlXCIgfCBcIm92ZXJ3cml0ZVwiIHwgXCJpZ25vcmVcIjtcbnR5cGUgQXJyYXlPdmVycmlkZVR5cGU8QXJyYXlUeXBlPiA9IE92ZXJyaWRlS2V5czxBcnJheVR5cGU+O1xuXG50eXBlIEVsZW1lbnRUeXBlPFQ+ID0gVCBleHRlbmRzIGFueVtdID8gVFtudW1iZXJdIDogVDtcbnR5cGUgT3ZlcnJpZGVLZXlzPFQ+ID0ge1xuXHRbUCBpbiBrZXlvZiBUXT86IE92ZXJyaWRlVHlwZSB8IEFycmF5T3ZlcnJpZGVUeXBlPEVsZW1lbnRUeXBlPFRbUF0+Pjtcbn07XG5cbmZ1bmN0aW9uIGlzQXJyYXlDb25maWc8VD4oY29uZmlnOiBPdmVycmlkZVR5cGUgfCBBcnJheU92ZXJyaWRlVHlwZTxUPiB8IHVuZGVmaW5lZCk6IGNvbmZpZyBpcyBBcnJheU92ZXJyaWRlVHlwZTxUPiB7XG5cdHJldHVybiB0eXBlb2YgY29uZmlnID09PSBcIm9iamVjdFwiO1xufVxuXG5mdW5jdGlvbiBhcHBseU92ZXJyaWRlPFQgZXh0ZW5kcyBPYmplY3Q+KG92ZXJ3cml0YWJsZUtleXM6IE92ZXJyaWRlS2V5czxUPiwgc291cmNlSXRlbTogVCB8IG51bGwsIGN1c3RvbUVsZW1lbnQ6IFQpOiBUIHtcblx0Y29uc3Qgb3V0SXRlbTogVCA9IHNvdXJjZUl0ZW0gfHwgY3VzdG9tRWxlbWVudDtcblx0Zm9yIChjb25zdCBvdmVyd3JpdGFibGVLZXkgaW4gb3ZlcndyaXRhYmxlS2V5cykge1xuXHRcdGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChvdmVyd3JpdGFibGVLZXlzLCBvdmVyd3JpdGFibGVLZXkpKSB7XG5cdFx0XHRjb25zdCBvdmVycmlkZUNvbmZpZyA9IG92ZXJ3cml0YWJsZUtleXNbb3ZlcndyaXRhYmxlS2V5XTtcblx0XHRcdGlmIChzb3VyY2VJdGVtICE9PSBudWxsKSB7XG5cdFx0XHRcdHN3aXRjaCAob3ZlcnJpZGVDb25maWcpIHtcblx0XHRcdFx0XHRjYXNlIFwib3ZlcndyaXRlXCI6XG5cdFx0XHRcdFx0XHRpZiAoY3VzdG9tRWxlbWVudC5oYXNPd25Qcm9wZXJ0eShvdmVyd3JpdGFibGVLZXkpICYmIGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdHNvdXJjZUl0ZW1bb3ZlcndyaXRhYmxlS2V5XSA9IGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJtZXJnZVwiOlxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjb25zdCBzdWJJdGVtID0gc291cmNlSXRlbVtvdmVyd3JpdGFibGVLZXldIHx8IChbXSBhcyBhbnlbXSk7XG5cdFx0XHRcdFx0XHRsZXQgc3ViQ29uZmlnID0ge307XG5cdFx0XHRcdFx0XHRpZiAoaXNBcnJheUNvbmZpZyhvdmVycmlkZUNvbmZpZykpIHtcblx0XHRcdFx0XHRcdFx0c3ViQ29uZmlnID0gb3ZlcnJpZGVDb25maWc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShzdWJJdGVtKSkge1xuXHRcdFx0XHRcdFx0XHRzb3VyY2VJdGVtW292ZXJ3cml0YWJsZUtleV0gPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRcdFx0XHRcdFx0XHRzdWJJdGVtLFxuXHRcdFx0XHRcdFx0XHRcdChjdXN0b21FbGVtZW50ICYmIChjdXN0b21FbGVtZW50W292ZXJ3cml0YWJsZUtleV0gYXMgUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudDxhbnk+PikpIHx8IHt9LFxuXHRcdFx0XHRcdFx0XHRcdHN1YkNvbmZpZ1xuXHRcdFx0XHRcdFx0XHQpIGFzIGFueTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzd2l0Y2ggKG92ZXJyaWRlQ29uZmlnKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIm92ZXJ3cml0ZVwiOlxuXHRcdFx0XHRcdFx0aWYgKGN1c3RvbUVsZW1lbnQuaGFzT3duUHJvcGVydHkob3ZlcndyaXRhYmxlS2V5KSAmJiBjdXN0b21FbGVtZW50W292ZXJ3cml0YWJsZUtleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRvdXRJdGVtW292ZXJ3cml0YWJsZUtleV0gPSBjdXN0b21FbGVtZW50W292ZXJ3cml0YWJsZUtleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwibWVyZ2VcIjpcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0bGV0IHN1YkNvbmZpZyA9IHt9O1xuXHRcdFx0XHRcdFx0aWYgKGlzQXJyYXlDb25maWcob3ZlcnJpZGVDb25maWcpKSB7XG5cdFx0XHRcdFx0XHRcdHN1YkNvbmZpZyA9IG92ZXJyaWRlQ29uZmlnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b3V0SXRlbVtvdmVyd3JpdGFibGVLZXldID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0XHRcdFx0XHRcdFtdIGFzIGFueVtdLFxuXHRcdFx0XHRcdFx0XHQoY3VzdG9tRWxlbWVudCAmJiAoY3VzdG9tRWxlbWVudFtvdmVyd3JpdGFibGVLZXldIGFzIFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnQ8YW55Pj4pKSB8fCB7fSxcblx0XHRcdFx0XHRcdFx0c3ViQ29uZmlnXG5cdFx0XHRcdFx0XHQpIGFzIGFueTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvdXRJdGVtO1xufVxuXG4vKipcbiAqIEluc2VydCBhIHNldCBvZiBjdXN0b20gZWxlbWVudHMgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uIGluIGFuIG9yaWdpbmFsIGNvbGxlY3Rpb24uXG4gKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSByb290RWxlbWVudHMgQSBsaXN0IG9mIFwiQ29uZmlndXJhYmxlT2JqZWN0XCIgd2hpY2ggbWVhbnMgb2JqZWN0IHRoYXQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiXG4gKiBAcGFyYW0gY3VzdG9tRWxlbWVudHMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZXh0cmEgb2JqZWN0IHRvIGFkZCwgdGhleSBhcmUgaW5kZXhlZCBieSBhIGtleSBhbmQgaGF2ZSBhIFwicG9zaXRpb25cIiBvYmplY3RcbiAqIEBwYXJhbSBvdmVyd3JpdGFibGVLZXlzIFRoZSBsaXN0IG9mIGtleXMgZnJvbSB0aGUgb3JpZ2luYWwgb2JqZWN0IHRoYXQgY2FuIGJlIG92ZXJ3cml0dGVuIGluIGNhc2UgYSBjdXN0b20gZWxlbWVudCBoYXMgdGhlIHNhbWUgXCJrZXlcIlxuICogQHJldHVybnMge1RbXX0gQW4gb3JkZXJlZCBhcnJheSBvZiBlbGVtZW50cyBpbmNsdWRpbmcgdGhlIGN1c3RvbSBvbmVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRDdXN0b21FbGVtZW50czxUIGV4dGVuZHMgQ29uZmlndXJhYmxlT2JqZWN0Pihcblx0cm9vdEVsZW1lbnRzOiBUW10sXG5cdGN1c3RvbUVsZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50PFQ+Pixcblx0b3ZlcndyaXRhYmxlS2V5czogT3ZlcnJpZGVLZXlzPFQ+ID0ge31cbik6IFRbXSB7XG5cdGNvbnN0IGZpcnN0QW5jaG9yID0gcm9vdEVsZW1lbnRzLmxlbmd0aCA/IHJvb3RFbGVtZW50c1swXS5rZXkgOiBudWxsO1xuXHRjb25zdCByb290RWxlbWVudHNXaXRob3V0TGFzdCA9IHJvb3RFbGVtZW50cy5maWx0ZXIocm9vdEVsZW1lbnQgPT4ge1xuXHRcdHJldHVybiByb290RWxlbWVudC5wb3NpdGlvbj8ucGxhY2VtZW50ICE9PSBQbGFjZW1lbnQuRW5kO1xuXHR9KTtcblx0Y29uc3QgbGFzdEFuY2hvciA9IHJvb3RFbGVtZW50cy5sZW5ndGggPyByb290RWxlbWVudHNbcm9vdEVsZW1lbnRzV2l0aG91dExhc3QubGVuZ3RoIC0gMV0ua2V5IDogbnVsbDtcblx0bGV0IGVuZEVsZW1lbnQ6IFQgfCB1bmRlZmluZWQ7XG5cdGNvbnN0IHBvc2l0aW9uaW5nSXRlbXM6IFJlY29yZDxzdHJpbmcsIFJlcXVpcmVkPFBvc2l0aW9uPj4gPSB7fTtcblx0Y29uc3QgaXRlbXNQZXJLZXk6IFJlY29yZDxzdHJpbmcsIFQ+ID0ge307XG5cdHJvb3RFbGVtZW50cy5mb3JFYWNoKHJvb3RFbGVtZW50ID0+IHtcblx0XHRpZiAocm9vdEVsZW1lbnQucG9zaXRpb24/LnBsYWNlbWVudCA9PT0gUGxhY2VtZW50LkVuZCAmJiAhZW5kRWxlbWVudCkge1xuXHRcdFx0ZW5kRWxlbWVudCA9IHJvb3RFbGVtZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwb3NpdGlvbmluZ0l0ZW1zW3Jvb3RFbGVtZW50LmtleV0gPSB7XG5cdFx0XHRcdGFuY2hvcjogcm9vdEVsZW1lbnQucG9zaXRpb24/LmFuY2hvciB8fCByb290RWxlbWVudC5rZXksXG5cdFx0XHRcdHBsYWNlbWVudDogcm9vdEVsZW1lbnQucG9zaXRpb24/LnBsYWNlbWVudCB8fCBQbGFjZW1lbnQuQWZ0ZXJcblx0XHRcdH07XG5cdFx0fVxuXHRcdGl0ZW1zUGVyS2V5W3Jvb3RFbGVtZW50LmtleV0gPSByb290RWxlbWVudDtcblx0fSk7XG5cdE9iamVjdC5rZXlzKGN1c3RvbUVsZW1lbnRzKS5mb3JFYWNoKGN1c3RvbUVsZW1lbnRLZXkgPT4ge1xuXHRcdGNvbnN0IGN1c3RvbUVsZW1lbnQgPSBjdXN0b21FbGVtZW50c1tjdXN0b21FbGVtZW50S2V5XTtcblx0XHRjb25zdCBhbmNob3IgPSBjdXN0b21FbGVtZW50LnBvc2l0aW9uLmFuY2hvcjtcblx0XHQvLyBJZiBubyBwbGFjZW1lbnQgZGVmaW5lZCB3ZSBhcmUgQWZ0ZXJcblx0XHRpZiAoIWN1c3RvbUVsZW1lbnQucG9zaXRpb24ucGxhY2VtZW50KSB7XG5cdFx0XHRjdXN0b21FbGVtZW50LnBvc2l0aW9uLnBsYWNlbWVudCA9IFBsYWNlbWVudC5BZnRlcjtcblx0XHR9XG5cdFx0Ly8gSWYgbm8gYW5jaG9yIHdlJ3JlIGVpdGhlciBBZnRlciB0aGUgbGFzdCBhbmNob3Igb3IgQmVmb3JlIHRoZSBmaXJzdFxuXHRcdGlmICghYW5jaG9yKSB7XG5cdFx0XHRjb25zdCBwb3RlbnRpYWxBbmNob3IgPSBjdXN0b21FbGVtZW50LnBvc2l0aW9uLnBsYWNlbWVudCA9PT0gUGxhY2VtZW50LkFmdGVyID8gbGFzdEFuY2hvciA6IGZpcnN0QW5jaG9yO1xuXHRcdFx0Y3VzdG9tRWxlbWVudC5wb3NpdGlvbi5hbmNob3IgPSBwb3RlbnRpYWxBbmNob3IgPyBwb3RlbnRpYWxBbmNob3IgOiBjdXN0b21FbGVtZW50S2V5O1xuXHRcdH1cblxuXHRcdC8vIEFkZGluZyBib3VuZC91bmJvdW5kIGFjdGlvbnMgdG8gbWVudVxuXHRcdGN1c3RvbUVsZW1lbnQubWVudSA9IGN1c3RvbUVsZW1lbnQ/Lm1lbnU/Lm1hcChtZW51ID0+IHtcblx0XHRcdHJldHVybiBpdGVtc1BlcktleVttZW51LmtleV0gPz8gbWVudTtcblx0XHR9KTtcblxuXHRcdGlmIChpdGVtc1BlcktleVtjdXN0b21FbGVtZW50LmtleV0pIHtcblx0XHRcdGl0ZW1zUGVyS2V5W2N1c3RvbUVsZW1lbnQua2V5XSA9IGFwcGx5T3ZlcnJpZGUob3ZlcndyaXRhYmxlS2V5cywgaXRlbXNQZXJLZXlbY3VzdG9tRWxlbWVudC5rZXldLCBjdXN0b21FbGVtZW50KTtcblxuXHRcdFx0Ly9Qb3NpdGlvbiBpcyBvdmVyd3JpdHRlbiBmb3IgZmlsdGVyIGZpZWxkcyBpZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBtYW5pZmVzdFxuXHRcdFx0aWYgKGFuY2hvciAmJiBjdXN0b21FbGVtZW50LnBvc2l0aW9uICYmIG92ZXJ3cml0YWJsZUtleXMucG9zaXRpb24gJiYgb3ZlcndyaXRhYmxlS2V5cy5wb3NpdGlvbiA9PT0gXCJvdmVyd3JpdGVcIikge1xuXHRcdFx0XHRwb3NpdGlvbmluZ0l0ZW1zW2N1c3RvbUVsZW1lbnQua2V5XSA9IGl0ZW1zUGVyS2V5W2N1c3RvbUVsZW1lbnQua2V5XS5wb3NpdGlvbiBhcyBSZXF1aXJlZDxQb3NpdGlvbj47XG5cdFx0XHR9XG5cdFx0XHQvKipcblx0XHRcdCAqIGFuY2hvciBjaGVjayBpcyBhZGRlZCB0byBtYWtlIHN1cmUgY2hhbmdlIGluIHByb3BlcnRpZXMgaW4gdGhlIG1hbmlmZXN0IGRvZXMgbm90IGFmZmVjdCB0aGUgcG9zaXRpb24gb2YgdGhlIGZpZWxkLlxuXHRcdFx0ICogT3RoZXJ3aXNlLCB3aGVuIG5vIHBvc2l0aW9uIGlzIG1lbnRpb25lZCBpbiBtYW5pZmVzdCBmb3IgYW4gYWx0ZXJlZCBmaWVsZCwgdGhlIHBvc2l0aW9uIGlzIGNoYW5nZWQgYXNcblx0XHRcdCAqIHBlciB0aGUgcG90ZW50aWFsIGFuY2hvclxuXHRcdFx0ICovXG5cdFx0fSBlbHNlIHtcblx0XHRcdGl0ZW1zUGVyS2V5W2N1c3RvbUVsZW1lbnQua2V5XSA9IGFwcGx5T3ZlcnJpZGUob3ZlcndyaXRhYmxlS2V5cywgbnVsbCwgY3VzdG9tRWxlbWVudCk7XG5cdFx0XHRwb3NpdGlvbmluZ0l0ZW1zW2N1c3RvbUVsZW1lbnQua2V5XSA9IGN1c3RvbUVsZW1lbnQucG9zaXRpb24gYXMgUmVxdWlyZWQ8UG9zaXRpb24+O1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHNvcnRlZEtleXM6IHN0cmluZ1tdID0gW107XG5cblx0T2JqZWN0LmtleXMocG9zaXRpb25pbmdJdGVtcykuZm9yRWFjaChwb3NpdGlvbkl0ZW1LZXkgPT4ge1xuXHRcdG9yZGVyUG9zaXRpb25pbmdJdGVtUmVjdXJzaXZlbHkocG9zaXRpb25pbmdJdGVtcywgcG9zaXRpb25JdGVtS2V5LCBzb3J0ZWRLZXlzLCB7fSk7XG5cdH0pO1xuXG5cdGNvbnN0IG91dEVsZW1lbnRzID0gc29ydGVkS2V5cy5tYXAoa2V5ID0+IGl0ZW1zUGVyS2V5W2tleV0pO1xuXHRpZiAoZW5kRWxlbWVudCkge1xuXHRcdG91dEVsZW1lbnRzLnB1c2goZW5kRWxlbWVudCk7XG5cdH1cblx0cmV0dXJuIG91dEVsZW1lbnRzO1xufVxuIl19
228
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbmZpZ3VyYWJsZU9iamVjdC50cyJdLCJuYW1lcyI6WyJQbGFjZW1lbnQiLCJvcmRlclBvc2l0aW9uaW5nSXRlbVJlY3Vyc2l2ZWx5IiwicG9zaXRpb25pbmdJdGVtcyIsImFuY2hvciIsInNvcnRlZCIsInZpc2l0ZWQiLCJpbnNlcnRJbmRleCIsImluZGV4T2YiLCJhbmNob3JJdGVtIiwidW5kZWZpbmVkIiwiRXJyb3IiLCJwbGFjZW1lbnQiLCJCZWZvcmUiLCJsZW5ndGgiLCJzcGxpY2UiLCJpc0FycmF5Q29uZmlnIiwiY29uZmlnIiwiYXBwbHlPdmVycmlkZSIsIm92ZXJ3cml0YWJsZUtleXMiLCJzb3VyY2VJdGVtIiwiY3VzdG9tRWxlbWVudCIsIm91dEl0ZW0iLCJvdmVyd3JpdGFibGVLZXkiLCJPYmplY3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJvdmVycmlkZUNvbmZpZyIsInN1Ykl0ZW0iLCJzdWJDb25maWciLCJBcnJheSIsImlzQXJyYXkiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsInJvb3RFbGVtZW50cyIsImN1c3RvbUVsZW1lbnRzIiwiZmlyc3RBbmNob3IiLCJrZXkiLCJyb290RWxlbWVudHNXaXRob3V0TGFzdCIsImZpbHRlciIsInJvb3RFbGVtZW50IiwicG9zaXRpb24iLCJFbmQiLCJsYXN0QW5jaG9yIiwiZW5kRWxlbWVudCIsIml0ZW1zUGVyS2V5IiwiZm9yRWFjaCIsIkFmdGVyIiwia2V5cyIsImN1c3RvbUVsZW1lbnRLZXkiLCJwb3RlbnRpYWxBbmNob3IiLCJtZW51IiwibWFwIiwic29ydGVkS2V5cyIsInBvc2l0aW9uSXRlbUtleSIsIm91dEVsZW1lbnRzIiwicHVzaCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7O01BR1lBLFM7O2FBQUFBLFM7QUFBQUEsSUFBQUEsUztBQUFBQSxJQUFBQSxTO0FBQUFBLElBQUFBLFM7S0FBQUEsUyxLQUFBQSxTOzs7O0FBcUJaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUE4QixXQUFuRyxFQUFnSDtBQUMvR3JDLFVBQUFBLGdCQUFnQixDQUFDa0IsYUFBYSxDQUFDZSxHQUFmLENBQWhCLEdBQXNDUSxXQUFXLENBQUN2QixhQUFhLENBQUNlLEdBQWYsQ0FBWCxDQUErQkksUUFBckU7QUFDQTtBQUNEO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBQ0csT0FaRCxNQVlPO0FBQ05JLFFBQUFBLFdBQVcsQ0FBQ3ZCLGFBQWEsQ0FBQ2UsR0FBZixDQUFYLEdBQWlDbEIsYUFBYSxDQUFDQyxnQkFBRCxFQUFtQixJQUFuQixFQUF5QkUsYUFBekIsQ0FBOUM7QUFDQWxCLFFBQUFBLGdCQUFnQixDQUFDa0IsYUFBYSxDQUFDZSxHQUFmLENBQWhCLEdBQXNDZixhQUFhLENBQUNtQixRQUFwRDtBQUNBO0FBQ0QsS0FsQ0Q7QUFtQ0EsUUFBTVksVUFBb0IsR0FBRyxFQUE3QjtBQUVBNUIsSUFBQUEsTUFBTSxDQUFDdUIsSUFBUCxDQUFZNUMsZ0JBQVosRUFBOEIwQyxPQUE5QixDQUFzQyxVQUFBUSxlQUFlLEVBQUk7QUFDeERuRCxNQUFBQSwrQkFBK0IsQ0FBQ0MsZ0JBQUQsRUFBbUJrRCxlQUFuQixFQUFvQ0QsVUFBcEMsRUFBZ0QsRUFBaEQsQ0FBL0I7QUFDQSxLQUZEO0FBSUEsUUFBTUUsV0FBVyxHQUFHRixVQUFVLENBQUNELEdBQVgsQ0FBZSxVQUFBZixHQUFHO0FBQUEsYUFBSVEsV0FBVyxDQUFDUixHQUFELENBQWY7QUFBQSxLQUFsQixDQUFwQjs7QUFDQSxRQUFJTyxVQUFKLEVBQWdCO0FBQ2ZXLE1BQUFBLFdBQVcsQ0FBQ0MsSUFBWixDQUFpQlosVUFBakI7QUFDQTs7QUFDRCxXQUFPVyxXQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFBvc2l0aW9uID0ge1xuXHRhbmNob3I/OiBzdHJpbmc7XG5cdHBsYWNlbWVudDogUGxhY2VtZW50O1xufTtcblxuZXhwb3J0IGVudW0gUGxhY2VtZW50IHtcblx0QWZ0ZXIgPSBcIkFmdGVyXCIsXG5cdEJlZm9yZSA9IFwiQmVmb3JlXCIsXG5cdEVuZCA9IFwiRW5kXCJcbn1cbmV4cG9ydCB0eXBlIENvbmZpZ3VyYWJsZU9iamVjdEtleSA9IHN0cmluZztcbmV4cG9ydCB0eXBlIENvbmZpZ3VyYWJsZU9iamVjdCA9IFBvc2l0aW9uYWJsZSAmIHtcblx0a2V5OiBDb25maWd1cmFibGVPYmplY3RLZXk7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50PFQgZXh0ZW5kcyBDb25maWd1cmFibGVPYmplY3Q+ID0gVCAmIHtcblx0cG9zaXRpb246IFBvc2l0aW9uO1xuXHRtZW51PzogYW55W10gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBQb3NpdGlvbmFibGUgPSB7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBDb25maWd1cmFibGVSZWNvcmQ8VD4gPSBSZWNvcmQ8Q29uZmlndXJhYmxlT2JqZWN0S2V5LCBUPjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgbWV0aG9kIHRoYXQgb3JkZXIgdGhlIGtleXMgYmFzZWQgb24gYSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0gcG9zaXRpb25pbmdJdGVtc1xuICogQHBhcmFtIGFuY2hvclxuICogQHBhcmFtIHNvcnRlZFxuICogQHBhcmFtIHZpc2l0ZWRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBvcmRlciBvZiB0aGUgY3VycmVudCBpdGVtXG4gKi9cbmNvbnN0IG9yZGVyUG9zaXRpb25pbmdJdGVtUmVjdXJzaXZlbHkgPSAoXG5cdHBvc2l0aW9uaW5nSXRlbXM6IFJlY29yZDxzdHJpbmcsIFJlcXVpcmVkPFBvc2l0aW9uPj4sXG5cdGFuY2hvcjogc3RyaW5nLFxuXHRzb3J0ZWQ6IHN0cmluZ1tdLFxuXHR2aXNpdGVkOiBSZWNvcmQ8c3RyaW5nLCBSZXF1aXJlZDxQb3NpdGlvbj4+XG4pOiBudW1iZXIgPT4ge1xuXHRsZXQgaW5zZXJ0SW5kZXggPSBzb3J0ZWQuaW5kZXhPZihhbmNob3IpO1xuXHRpZiAoaW5zZXJ0SW5kZXggIT09IC0xKSB7XG5cdFx0cmV0dXJuIGluc2VydEluZGV4O1xuXHR9XG5cdGNvbnN0IGFuY2hvckl0ZW06IFJlcXVpcmVkPFBvc2l0aW9uPiA9IHBvc2l0aW9uaW5nSXRlbXNbYW5jaG9yXTtcblx0aWYgKGFuY2hvckl0ZW0gPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vcmV0dXJuIHNvcnRlZC5sZW5ndGg7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwicG9zaXRpb24gYW5jaG9yIG5vdCBmb3VuZDogXCIgKyBhbmNob3IpO1xuXHR9XG5cblx0dmlzaXRlZFthbmNob3JdID0gYW5jaG9ySXRlbTtcblx0aWYgKGFuY2hvckl0ZW0gJiYgIShhbmNob3JJdGVtLmFuY2hvciBpbiB2aXNpdGVkKSkge1xuXHRcdGluc2VydEluZGV4ID0gb3JkZXJQb3NpdGlvbmluZ0l0ZW1SZWN1cnNpdmVseShwb3NpdGlvbmluZ0l0ZW1zLCBhbmNob3JJdGVtLmFuY2hvciwgc29ydGVkLCB2aXNpdGVkKTtcblx0XHRpZiAoYW5jaG9ySXRlbS5wbGFjZW1lbnQgIT09IFBsYWNlbWVudC5CZWZvcmUpIHtcblx0XHRcdCsraW5zZXJ0SW5kZXg7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGluc2VydEluZGV4ID0gc29ydGVkLmxlbmd0aDtcblx0fVxuXG5cdHNvcnRlZC5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIGFuY2hvcik7XG5cdHJldHVybiBpbnNlcnRJbmRleDtcbn07XG5cbnR5cGUgT3ZlcnJpZGVUeXBlID0gXCJtZXJnZVwiIHwgXCJvdmVyd3JpdGVcIiB8IFwiaWdub3JlXCI7XG50eXBlIEFycmF5T3ZlcnJpZGVUeXBlPEFycmF5VHlwZT4gPSBPdmVycmlkZUtleXM8QXJyYXlUeXBlPjtcblxudHlwZSBFbGVtZW50VHlwZTxUPiA9IFQgZXh0ZW5kcyBhbnlbXSA/IFRbbnVtYmVyXSA6IFQ7XG50eXBlIE92ZXJyaWRlS2V5czxUPiA9IHtcblx0W1AgaW4ga2V5b2YgVF0/OiBPdmVycmlkZVR5cGUgfCBBcnJheU92ZXJyaWRlVHlwZTxFbGVtZW50VHlwZTxUW1BdPj47XG59O1xuXG5mdW5jdGlvbiBpc0FycmF5Q29uZmlnPFQ+KGNvbmZpZzogT3ZlcnJpZGVUeXBlIHwgQXJyYXlPdmVycmlkZVR5cGU8VD4gfCB1bmRlZmluZWQpOiBjb25maWcgaXMgQXJyYXlPdmVycmlkZVR5cGU8VD4ge1xuXHRyZXR1cm4gdHlwZW9mIGNvbmZpZyA9PT0gXCJvYmplY3RcIjtcbn1cblxuZnVuY3Rpb24gYXBwbHlPdmVycmlkZTxUIGV4dGVuZHMgT2JqZWN0PihvdmVyd3JpdGFibGVLZXlzOiBPdmVycmlkZUtleXM8VD4sIHNvdXJjZUl0ZW06IFQgfCBudWxsLCBjdXN0b21FbGVtZW50OiBUKTogVCB7XG5cdGNvbnN0IG91dEl0ZW06IFQgPSBzb3VyY2VJdGVtIHx8IGN1c3RvbUVsZW1lbnQ7XG5cdGZvciAoY29uc3Qgb3ZlcndyaXRhYmxlS2V5IGluIG92ZXJ3cml0YWJsZUtleXMpIHtcblx0XHRpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob3ZlcndyaXRhYmxlS2V5cywgb3ZlcndyaXRhYmxlS2V5KSkge1xuXHRcdFx0Y29uc3Qgb3ZlcnJpZGVDb25maWcgPSBvdmVyd3JpdGFibGVLZXlzW292ZXJ3cml0YWJsZUtleV07XG5cdFx0XHRpZiAoc291cmNlSXRlbSAhPT0gbnVsbCkge1xuXHRcdFx0XHRzd2l0Y2ggKG92ZXJyaWRlQ29uZmlnKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIm92ZXJ3cml0ZVwiOlxuXHRcdFx0XHRcdFx0aWYgKGN1c3RvbUVsZW1lbnQuaGFzT3duUHJvcGVydHkob3ZlcndyaXRhYmxlS2V5KSAmJiBjdXN0b21FbGVtZW50W292ZXJ3cml0YWJsZUtleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRzb3VyY2VJdGVtW292ZXJ3cml0YWJsZUtleV0gPSBjdXN0b21FbGVtZW50W292ZXJ3cml0YWJsZUtleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwibWVyZ2VcIjpcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Y29uc3Qgc3ViSXRlbSA9IHNvdXJjZUl0ZW1bb3ZlcndyaXRhYmxlS2V5XSB8fCAoW10gYXMgYW55W10pO1xuXHRcdFx0XHRcdFx0bGV0IHN1YkNvbmZpZyA9IHt9O1xuXHRcdFx0XHRcdFx0aWYgKGlzQXJyYXlDb25maWcob3ZlcnJpZGVDb25maWcpKSB7XG5cdFx0XHRcdFx0XHRcdHN1YkNvbmZpZyA9IG92ZXJyaWRlQ29uZmlnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoc3ViSXRlbSkpIHtcblx0XHRcdFx0XHRcdFx0c291cmNlSXRlbVtvdmVyd3JpdGFibGVLZXldID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0XHRcdFx0XHRcdFx0c3ViSXRlbSxcblx0XHRcdFx0XHRcdFx0XHQoY3VzdG9tRWxlbWVudCAmJiAoY3VzdG9tRWxlbWVudFtvdmVyd3JpdGFibGVLZXldIGFzIFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnQ8YW55Pj4pKSB8fCB7fSxcblx0XHRcdFx0XHRcdFx0XHRzdWJDb25maWdcblx0XHRcdFx0XHRcdFx0KSBhcyBhbnk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3dpdGNoIChvdmVycmlkZUNvbmZpZykge1xuXHRcdFx0XHRcdGNhc2UgXCJvdmVyd3JpdGVcIjpcblx0XHRcdFx0XHRcdGlmIChjdXN0b21FbGVtZW50Lmhhc093blByb3BlcnR5KG92ZXJ3cml0YWJsZUtleSkgJiYgY3VzdG9tRWxlbWVudFtvdmVyd3JpdGFibGVLZXldICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b3V0SXRlbVtvdmVyd3JpdGFibGVLZXldID0gY3VzdG9tRWxlbWVudFtvdmVyd3JpdGFibGVLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIm1lcmdlXCI6XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGxldCBzdWJDb25maWcgPSB7fTtcblx0XHRcdFx0XHRcdGlmIChpc0FycmF5Q29uZmlnKG92ZXJyaWRlQ29uZmlnKSkge1xuXHRcdFx0XHRcdFx0XHRzdWJDb25maWcgPSBvdmVycmlkZUNvbmZpZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG91dEl0ZW1bb3ZlcndyaXRhYmxlS2V5XSA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0XHRcdFx0XHRbXSBhcyBhbnlbXSxcblx0XHRcdFx0XHRcdFx0KGN1c3RvbUVsZW1lbnQgJiYgKGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50PGFueT4+KSkgfHwge30sXG5cdFx0XHRcdFx0XHRcdHN1YkNvbmZpZ1xuXHRcdFx0XHRcdFx0KSBhcyBhbnk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb3V0SXRlbTtcbn1cblxuLyoqXG4gKiBJbnNlcnQgYSBzZXQgb2YgY3VzdG9tIGVsZW1lbnRzIGluIHRoZSByaWdodCBwb3NpdGlvbiBpbiBhbiBvcmlnaW5hbCBjb2xsZWN0aW9uLlxuICpcbiAqIFBhcmFtZXRlcnMgZm9yIG92ZXJ3cml0YWJsZUtleXMgYW5kIHRoZWlyIGltcGxpY2F0aW9uczpcbiAqIFwib3ZlcndyaXRlXCI6IFRoZSB3aG9sZSBvYmplY3QgZ2V0cyBvdmVyd3JpdHRlbiAtIGlmIHRoZSBjdXN0b21FbGVtZW50cyBpbmNsdWRlIGEgZGVmYXVsdCwgdGhpcyB3aWxsIG92ZXJydWxlIHRoZSB3aG9sZSByb290RWxlbWVudHMgY29uZmlndXJhdGlvbi5cbiAqIFwibWVyZ2VcIjogVGhpcyBpcyBzaW1pbGFyIHRvIGNhbGxpbmcgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgaXRzZWxmLiBZb3UgbXVzdCBpbmNsdWRlIHRoZVxuICogZnVsbCBDdXN0b21FbGVtZW50IHN5bnRheCB3aXRoaW4gdGhlIGN1c3RvbUVsZW1lbnRzLCBpbmNsdWRpbmcgYW5jaG9ycywgZm9yIGV4YW1wbGUuXG4gKiBcImlnbm9yZVwiOiBUaGVyZSBhcmUgbm8gYWRkaXRpb25zIGFuZCBubyBjb21iaW5hdGlvbnMuIE9ubHkgdGhlIHJvb3RFbGVtZW50cyBvYmplY3QgaXMgdXNlZC5cbiAqXG4gKiBOb3RlIC0gUHJvY2VlZCBhcyBmb2xsb3dzIGluIGNhc2UgeW91IGhhdmUgZGVmaW5lZCBjdXN0b21FbGVtZW50cyBhbmQgZG8gbm90IHdhbnQgdG8gb3ZlcndyaXRlIHRoZWlyIHZhbHVlcyB3aXRoIGRlZmF1bHRzOlxuICogSGFuZCB0aGUgcm9vdEVsZW1lbnRzIGludG8gdGhlIGNyZWF0aW9uIGZ1bmN0aW9uIG9mIHRoZSBjdXN0b21FbGVtZW50LlxuICogRGVwZW5kaW5nIG9uIHRoZSBleGlzdGVuY2Ugb2YgYm90aCByb290RWxlbWVudC1jb25maWd1cmF0aW9uIGFuZCBjdXN0b21FbGVtZW50LWNvbmZpZ3VyYXRpb24sXG4gKiB5b3UgbXVzdCBzZXQgdGhlIGN1c3RvbUVsZW1lbnRzIHByb3BlcnR5LCBmb3Igd2hpY2ggdGhlIFwib3ZlcndyaXRlXCItcHJvcGVydHkgaXMgc2V0LCBleHBsaWNpdGx5IHRvIHVuZGVmaW5lZC5cbiAqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHJvb3RFbGVtZW50cyBBIGxpc3Qgb2YgXCJDb25maWd1cmFibGVPYmplY3RcIiB3aGljaCBtZWFucyBvYmplY3QgdGhhdCBoYXZlIGEgdW5pcXVlIFwia2V5XCJcbiAqIEBwYXJhbSBjdXN0b21FbGVtZW50cyBBbiBvYmplY3QgY29udGFpbmluZyBleHRyYSBvYmplY3QgdG8gYWRkLCB0aGV5IGFyZSBpbmRleGVkIGJ5IGEga2V5IGFuZCBoYXZlIGEgXCJwb3NpdGlvblwiIG9iamVjdFxuICogQHBhcmFtIG92ZXJ3cml0YWJsZUtleXMgVGhlIGxpc3Qgb2Yga2V5cyBmcm9tIHRoZSBvcmlnaW5hbCBvYmplY3QgdGhhdCBjYW4gYmUgb3ZlcndyaXR0ZW4gaW4gY2FzZSBhIGN1c3RvbSBlbGVtZW50IGhhcyB0aGUgc2FtZSBcImtleVwiXG4gKiBAcmV0dXJucyB7VFtdfSBBbiBvcmRlcmVkIGFycmF5IG9mIGVsZW1lbnRzIGluY2x1ZGluZyB0aGUgY3VzdG9tIG9uZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc2VydEN1c3RvbUVsZW1lbnRzPFQgZXh0ZW5kcyBDb25maWd1cmFibGVPYmplY3Q+KFxuXHRyb290RWxlbWVudHM6IFRbXSxcblx0Y3VzdG9tRWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnQ8VD4+LFxuXHRvdmVyd3JpdGFibGVLZXlzOiBPdmVycmlkZUtleXM8VD4gPSB7fVxuKTogVFtdIHtcblx0Y29uc3QgZmlyc3RBbmNob3IgPSByb290RWxlbWVudHMubGVuZ3RoID8gcm9vdEVsZW1lbnRzWzBdLmtleSA6IG51bGw7XG5cdGNvbnN0IHJvb3RFbGVtZW50c1dpdGhvdXRMYXN0ID0gcm9vdEVsZW1lbnRzLmZpbHRlcihyb290RWxlbWVudCA9PiB7XG5cdFx0cmV0dXJuIHJvb3RFbGVtZW50LnBvc2l0aW9uPy5wbGFjZW1lbnQgIT09IFBsYWNlbWVudC5FbmQ7XG5cdH0pO1xuXHRjb25zdCBsYXN0QW5jaG9yID0gcm9vdEVsZW1lbnRzLmxlbmd0aCA/IHJvb3RFbGVtZW50c1tyb290RWxlbWVudHNXaXRob3V0TGFzdC5sZW5ndGggLSAxXS5rZXkgOiBudWxsO1xuXHRsZXQgZW5kRWxlbWVudDogVCB8IHVuZGVmaW5lZDtcblx0Y29uc3QgcG9zaXRpb25pbmdJdGVtczogUmVjb3JkPHN0cmluZywgUmVxdWlyZWQ8UG9zaXRpb24+PiA9IHt9O1xuXHRjb25zdCBpdGVtc1BlcktleTogUmVjb3JkPHN0cmluZywgVD4gPSB7fTtcblx0cm9vdEVsZW1lbnRzLmZvckVhY2gocm9vdEVsZW1lbnQgPT4ge1xuXHRcdGlmIChyb290RWxlbWVudC5wb3NpdGlvbj8ucGxhY2VtZW50ID09PSBQbGFjZW1lbnQuRW5kICYmICFlbmRFbGVtZW50KSB7XG5cdFx0XHRlbmRFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBvc2l0aW9uaW5nSXRlbXNbcm9vdEVsZW1lbnQua2V5XSA9IHtcblx0XHRcdFx0YW5jaG9yOiByb290RWxlbWVudC5wb3NpdGlvbj8uYW5jaG9yIHx8IHJvb3RFbGVtZW50LmtleSxcblx0XHRcdFx0cGxhY2VtZW50OiByb290RWxlbWVudC5wb3NpdGlvbj8ucGxhY2VtZW50IHx8IFBsYWNlbWVudC5BZnRlclxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aXRlbXNQZXJLZXlbcm9vdEVsZW1lbnQua2V5XSA9IHJvb3RFbGVtZW50O1xuXHR9KTtcblx0T2JqZWN0LmtleXMoY3VzdG9tRWxlbWVudHMpLmZvckVhY2goY3VzdG9tRWxlbWVudEtleSA9PiB7XG5cdFx0Y29uc3QgY3VzdG9tRWxlbWVudCA9IGN1c3RvbUVsZW1lbnRzW2N1c3RvbUVsZW1lbnRLZXldO1xuXHRcdGNvbnN0IGFuY2hvciA9IGN1c3RvbUVsZW1lbnQucG9zaXRpb24uYW5jaG9yO1xuXHRcdC8vIElmIG5vIHBsYWNlbWVudCBkZWZpbmVkIHdlIGFyZSBBZnRlclxuXHRcdGlmICghY3VzdG9tRWxlbWVudC5wb3NpdGlvbi5wbGFjZW1lbnQpIHtcblx0XHRcdGN1c3RvbUVsZW1lbnQucG9zaXRpb24ucGxhY2VtZW50ID0gUGxhY2VtZW50LkFmdGVyO1xuXHRcdH1cblx0XHQvLyBJZiBubyBhbmNob3Igd2UncmUgZWl0aGVyIEFmdGVyIHRoZSBsYXN0IGFuY2hvciBvciBCZWZvcmUgdGhlIGZpcnN0XG5cdFx0aWYgKCFhbmNob3IpIHtcblx0XHRcdGNvbnN0IHBvdGVudGlhbEFuY2hvciA9IGN1c3RvbUVsZW1lbnQucG9zaXRpb24ucGxhY2VtZW50ID09PSBQbGFjZW1lbnQuQWZ0ZXIgPyBsYXN0QW5jaG9yIDogZmlyc3RBbmNob3I7XG5cdFx0XHRjdXN0b21FbGVtZW50LnBvc2l0aW9uLmFuY2hvciA9IHBvdGVudGlhbEFuY2hvciA/IHBvdGVudGlhbEFuY2hvciA6IGN1c3RvbUVsZW1lbnRLZXk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkaW5nIGJvdW5kL3VuYm91bmQgYWN0aW9ucyB0byBtZW51XG5cdFx0Y3VzdG9tRWxlbWVudC5tZW51ID0gY3VzdG9tRWxlbWVudD8ubWVudT8ubWFwKG1lbnUgPT4ge1xuXHRcdFx0cmV0dXJuIGl0ZW1zUGVyS2V5W21lbnUua2V5XSA/PyBtZW51O1xuXHRcdH0pO1xuXG5cdFx0aWYgKGl0ZW1zUGVyS2V5W2N1c3RvbUVsZW1lbnQua2V5XSkge1xuXHRcdFx0aXRlbXNQZXJLZXlbY3VzdG9tRWxlbWVudC5rZXldID0gYXBwbHlPdmVycmlkZShvdmVyd3JpdGFibGVLZXlzLCBpdGVtc1BlcktleVtjdXN0b21FbGVtZW50LmtleV0sIGN1c3RvbUVsZW1lbnQpO1xuXG5cdFx0XHQvL1Bvc2l0aW9uIGlzIG92ZXJ3cml0dGVuIGZvciBmaWx0ZXIgZmllbGRzIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIG1hbmlmZXN0XG5cdFx0XHRpZiAoYW5jaG9yICYmIGN1c3RvbUVsZW1lbnQucG9zaXRpb24gJiYgb3ZlcndyaXRhYmxlS2V5cy5wb3NpdGlvbiAmJiBvdmVyd3JpdGFibGVLZXlzLnBvc2l0aW9uID09PSBcIm92ZXJ3cml0ZVwiKSB7XG5cdFx0XHRcdHBvc2l0aW9uaW5nSXRlbXNbY3VzdG9tRWxlbWVudC5rZXldID0gaXRlbXNQZXJLZXlbY3VzdG9tRWxlbWVudC5rZXldLnBvc2l0aW9uIGFzIFJlcXVpcmVkPFBvc2l0aW9uPjtcblx0XHRcdH1cblx0XHRcdC8qKlxuXHRcdFx0ICogYW5jaG9yIGNoZWNrIGlzIGFkZGVkIHRvIG1ha2Ugc3VyZSBjaGFuZ2UgaW4gcHJvcGVydGllcyBpbiB0aGUgbWFuaWZlc3QgZG9lcyBub3QgYWZmZWN0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZmllbGQuXG5cdFx0XHQgKiBPdGhlcndpc2UsIHdoZW4gbm8gcG9zaXRpb24gaXMgbWVudGlvbmVkIGluIG1hbmlmZXN0IGZvciBhbiBhbHRlcmVkIGZpZWxkLCB0aGUgcG9zaXRpb24gaXMgY2hhbmdlZCBhc1xuXHRcdFx0ICogcGVyIHRoZSBwb3RlbnRpYWwgYW5jaG9yXG5cdFx0XHQgKi9cblx0XHR9IGVsc2Uge1xuXHRcdFx0aXRlbXNQZXJLZXlbY3VzdG9tRWxlbWVudC5rZXldID0gYXBwbHlPdmVycmlkZShvdmVyd3JpdGFibGVLZXlzLCBudWxsLCBjdXN0b21FbGVtZW50KTtcblx0XHRcdHBvc2l0aW9uaW5nSXRlbXNbY3VzdG9tRWxlbWVudC5rZXldID0gY3VzdG9tRWxlbWVudC5wb3NpdGlvbiBhcyBSZXF1aXJlZDxQb3NpdGlvbj47XG5cdFx0fVxuXHR9KTtcblx0Y29uc3Qgc29ydGVkS2V5czogc3RyaW5nW10gPSBbXTtcblxuXHRPYmplY3Qua2V5cyhwb3NpdGlvbmluZ0l0ZW1zKS5mb3JFYWNoKHBvc2l0aW9uSXRlbUtleSA9PiB7XG5cdFx0b3JkZXJQb3NpdGlvbmluZ0l0ZW1SZWN1cnNpdmVseShwb3NpdGlvbmluZ0l0ZW1zLCBwb3NpdGlvbkl0ZW1LZXksIHNvcnRlZEtleXMsIHt9KTtcblx0fSk7XG5cblx0Y29uc3Qgb3V0RWxlbWVudHMgPSBzb3J0ZWRLZXlzLm1hcChrZXkgPT4gaXRlbXNQZXJLZXlba2V5XSk7XG5cdGlmIChlbmRFbGVtZW50KSB7XG5cdFx0b3V0RWxlbWVudHMucHVzaChlbmRFbGVtZW50KTtcblx0fVxuXHRyZXR1cm4gb3V0RWxlbWVudHM7XG59XG4iXX0=