@sapui5/sap.fe.core 1.94.0 → 1.96.3

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 (182) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +3 -3
  4. package/src/sap/fe/core/AppComponent.js +10 -41
  5. package/src/sap/fe/core/AppStateHandler.js +18 -4
  6. package/src/sap/fe/core/BaseController.js +1 -1
  7. package/src/sap/fe/core/BusyLocker.js +13 -1
  8. package/src/sap/fe/core/CommonUtils.js +372 -9
  9. package/src/sap/fe/core/ExtensionAPI.js +1 -1
  10. package/src/sap/fe/core/PageController.js +11 -3
  11. package/src/sap/fe/core/RouterProxy.js +59 -69
  12. package/src/sap/fe/core/Synchronization.js +1 -1
  13. package/src/sap/fe/core/TemplateComponent.js +9 -3
  14. package/src/sap/fe/core/TemplateModel.js +1 -1
  15. package/src/sap/fe/core/TransactionHelper.js +157 -111
  16. package/src/sap/fe/core/actions/draft.js +1 -1
  17. package/src/sap/fe/core/actions/messageHandling.js +1 -1
  18. package/src/sap/fe/core/actions/nonDraft.js +1 -1
  19. package/src/sap/fe/core/actions/operations.js +25 -3
  20. package/src/sap/fe/core/actions/sticky.js +1 -1
  21. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +1 -1
  22. package/src/sap/fe/core/controllerextensions/EditFlow.js +89 -54
  23. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
  24. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +14 -7
  25. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +128 -25
  26. package/src/sap/fe/core/controllerextensions/InternalRouting.js +197 -210
  27. package/src/sap/fe/core/controllerextensions/KPIManagement.js +844 -168
  28. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +903 -189
  29. package/src/sap/fe/core/controllerextensions/MessageHandler.js +1 -1
  30. package/src/sap/fe/core/controllerextensions/PageReady.js +31 -17
  31. package/src/sap/fe/core/controllerextensions/PageReady.ts +50 -15
  32. package/src/sap/fe/core/controllerextensions/Paginator.js +20 -4
  33. package/src/sap/fe/core/controllerextensions/Placeholder.js +134 -271
  34. package/src/sap/fe/core/controllerextensions/Routing.js +1 -1
  35. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  36. package/src/sap/fe/core/controllerextensions/Share.js +20 -7
  37. package/src/sap/fe/core/controllerextensions/SideEffects.js +2 -3
  38. package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -12
  39. package/src/sap/fe/core/controllerextensions/ViewState.js +174 -7
  40. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +39 -34
  41. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +35 -0
  42. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  43. package/src/sap/fe/core/controls/ConditionalWrapper.js +1 -1
  44. package/src/sap/fe/core/controls/CustomQuickViewPage.js +4 -1
  45. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
  46. package/src/sap/fe/core/controls/FieldWrapper.js +1 -1
  47. package/src/sap/fe/core/controls/FilterBar.js +1 -1
  48. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  49. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +45 -0
  50. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +5 -8
  51. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +83 -23
  52. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -6
  53. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +25 -18
  54. package/src/sap/fe/core/converters/ConverterContext.js +18 -4
  55. package/src/sap/fe/core/converters/ConverterContext.ts +13 -3
  56. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  57. package/src/sap/fe/core/converters/ManifestSettings.ts +4 -1
  58. package/src/sap/fe/core/converters/MetaModelConverter.js +855 -868
  59. package/src/sap/fe/core/converters/MetaModelConverter.ts +763 -826
  60. package/src/sap/fe/core/converters/annotations/DataField.js +52 -2
  61. package/src/sap/fe/core/converters/annotations/DataField.ts +52 -2
  62. package/src/sap/fe/core/converters/controls/Common/Action.js +6 -1
  63. package/src/sap/fe/core/converters/controls/Common/Action.ts +3 -0
  64. package/src/sap/fe/core/converters/controls/Common/Chart.js +85 -6
  65. package/src/sap/fe/core/converters/controls/Common/Chart.ts +80 -2
  66. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -16
  67. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +16 -30
  68. package/src/sap/fe/core/converters/controls/Common/Form.js +17 -8
  69. package/src/sap/fe/core/converters/controls/Common/Form.ts +11 -3
  70. package/src/sap/fe/core/converters/controls/Common/KPI.js +287 -109
  71. package/src/sap/fe/core/converters/controls/Common/KPI.ts +314 -139
  72. package/src/sap/fe/core/converters/controls/Common/Table.js +273 -105
  73. package/src/sap/fe/core/converters/controls/Common/Table.ts +319 -111
  74. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +8 -20
  75. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +11 -15
  76. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +44 -15
  77. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +41 -19
  78. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +74 -0
  79. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +50 -0
  80. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +15 -7
  81. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +27 -6
  82. package/src/sap/fe/core/converters/helpers/Aggregation.js +18 -30
  83. package/src/sap/fe/core/converters/helpers/Aggregation.ts +17 -28
  84. package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
  85. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +2 -2
  86. package/src/sap/fe/core/converters/helpers/ID.js +1 -1
  87. package/src/sap/fe/core/converters/helpers/ID.ts +2 -2
  88. package/src/sap/fe/core/converters/helpers/IssueManager.js +3 -3
  89. package/src/sap/fe/core/converters/helpers/IssueManager.ts +2 -2
  90. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +11 -6
  91. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +9 -5
  92. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +15 -2
  93. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +14 -14
  94. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +2 -2
  95. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +1 -1
  96. package/src/sap/fe/core/converters/templates/ListReportConverter.js +73 -8
  97. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +70 -10
  98. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +82 -16
  99. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +100 -17
  100. package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
  101. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  102. package/src/sap/fe/core/formatters/FPMFormatter.ts +8 -3
  103. package/src/sap/fe/core/fpm/Component.js +2 -2
  104. package/src/sap/fe/core/helpers/BindingExpression.js +17 -2
  105. package/src/sap/fe/core/helpers/BindingExpression.ts +14 -1
  106. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  107. package/src/sap/fe/core/helpers/EditState.js +1 -1
  108. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -3
  109. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  110. package/src/sap/fe/core/helpers/ModelHelper.js +28 -1
  111. package/src/sap/fe/core/helpers/PasteHelper.js +7 -1
  112. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  113. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  114. package/src/sap/fe/core/helpers/StableIdHelper.js +2 -2
  115. package/src/sap/fe/core/helpers/StableIdHelper.ts +1 -1
  116. package/src/sap/fe/core/library.js +2 -2
  117. package/src/sap/fe/core/library.support.js +1 -1
  118. package/src/sap/fe/core/messagebundle.properties +30 -1
  119. package/src/sap/fe/core/messagebundle_ar.properties +14 -0
  120. package/src/sap/fe/core/messagebundle_bg.properties +14 -0
  121. package/src/sap/fe/core/messagebundle_ca.properties +15 -1
  122. package/src/sap/fe/core/messagebundle_cs.properties +14 -0
  123. package/src/sap/fe/core/messagebundle_cy.properties +14 -0
  124. package/src/sap/fe/core/messagebundle_da.properties +14 -0
  125. package/src/sap/fe/core/messagebundle_de.properties +14 -0
  126. package/src/sap/fe/core/messagebundle_el.properties +14 -0
  127. package/src/sap/fe/core/messagebundle_en.properties +14 -0
  128. package/src/sap/fe/core/messagebundle_en_GB.properties +14 -0
  129. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +14 -0
  130. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +20 -2
  131. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +14 -0
  132. package/src/sap/fe/core/messagebundle_es.properties +21 -7
  133. package/src/sap/fe/core/messagebundle_es_MX.properties +15 -1
  134. package/src/sap/fe/core/messagebundle_et.properties +14 -0
  135. package/src/sap/fe/core/messagebundle_fi.properties +14 -0
  136. package/src/sap/fe/core/messagebundle_fr.properties +18 -4
  137. package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -0
  138. package/src/sap/fe/core/messagebundle_hi.properties +14 -0
  139. package/src/sap/fe/core/messagebundle_hr.properties +14 -0
  140. package/src/sap/fe/core/messagebundle_hu.properties +14 -0
  141. package/src/sap/fe/core/messagebundle_id.properties +14 -0
  142. package/src/sap/fe/core/messagebundle_it.properties +14 -0
  143. package/src/sap/fe/core/messagebundle_iw.properties +15 -1
  144. package/src/sap/fe/core/messagebundle_ja.properties +14 -0
  145. package/src/sap/fe/core/messagebundle_kk.properties +14 -0
  146. package/src/sap/fe/core/messagebundle_ko.properties +14 -0
  147. package/src/sap/fe/core/messagebundle_lt.properties +14 -0
  148. package/src/sap/fe/core/messagebundle_lv.properties +14 -0
  149. package/src/sap/fe/core/messagebundle_ms.properties +14 -0
  150. package/src/sap/fe/core/messagebundle_nl.properties +18 -4
  151. package/src/sap/fe/core/messagebundle_no.properties +15 -1
  152. package/src/sap/fe/core/messagebundle_pl.properties +15 -1
  153. package/src/sap/fe/core/messagebundle_pt.properties +14 -0
  154. package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -0
  155. package/src/sap/fe/core/messagebundle_ro.properties +14 -0
  156. package/src/sap/fe/core/messagebundle_ru.properties +14 -0
  157. package/src/sap/fe/core/messagebundle_sh.properties +14 -0
  158. package/src/sap/fe/core/messagebundle_sk.properties +14 -0
  159. package/src/sap/fe/core/messagebundle_sl.properties +14 -0
  160. package/src/sap/fe/core/messagebundle_sv.properties +14 -0
  161. package/src/sap/fe/core/messagebundle_th.properties +14 -0
  162. package/src/sap/fe/core/messagebundle_tr.properties +14 -0
  163. package/src/sap/fe/core/messagebundle_uk.properties +14 -0
  164. package/src/sap/fe/core/messagebundle_vi.properties +14 -0
  165. package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -0
  166. package/src/sap/fe/core/messagebundle_zh_TW.properties +14 -0
  167. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  168. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  169. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  170. package/src/sap/fe/core/services/RoutingServiceFactory.js +114 -44
  171. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +2 -2
  172. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +1 -1
  173. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +12 -2
  174. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  175. package/src/sap/fe/core/templating/DataModelPathHelper.js +3 -14
  176. package/src/sap/fe/core/templating/DataModelPathHelper.ts +3 -10
  177. package/src/sap/fe/core/templating/EntitySetHelper.js +13 -3
  178. package/src/sap/fe/core/templating/EntitySetHelper.ts +4 -0
  179. package/src/sap/fe/core/templating/FilterHelper.js +2 -2
  180. package/src/sap/fe/core/templating/FilterHelper.ts +1 -1
  181. package/src/sap/fe/core/templating/UIFormatters.js +41 -3
  182. package/src/sap/fe/core/templating/UIFormatters.ts +74 -2
@@ -35,9 +35,11 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
35
35
  var sMeasure = chartAnnotation === null || chartAnnotation === void 0 ? void 0 : (_chartAnnotation$$tar = chartAnnotation.$target) === null || _chartAnnotation$$tar === void 0 ? void 0 : (_chartAnnotation$$tar2 = _chartAnnotation$$tar.Measures[0]) === null || _chartAnnotation$$tar2 === void 0 ? void 0 : _chartAnnotation$$tar2.value;
36
36
  var sDimension = chartAnnotation === null || chartAnnotation === void 0 ? void 0 : (_chartAnnotation$$tar3 = chartAnnotation.$target) === null || _chartAnnotation$$tar3 === void 0 ? void 0 : (_chartAnnotation$$tar4 = _chartAnnotation$$tar3.Dimensions[0]) === null || _chartAnnotation$$tar4 === void 0 ? void 0 : _chartAnnotation$$tar4.value;
37
37
  var customAggregates = aggregationHelper.getCustomAggregateDefinitions();
38
- var aTransAggregations = converterContext.getAnnotationsByTerm("Analytics", "com.sap.vocabularies.Analytics.v1.AggregatedProperties", [converterContext.getEntityContainer(), converterContext.getEntityType()]);
38
+ var aTransAggregations = aggregationHelper.getTransAggregations();
39
39
 
40
- if (customAggregates[sMeasure]) {
40
+ if (customAggregates.some(function (custAgg) {
41
+ return custAgg.qualifier === sMeasure;
42
+ })) {
41
43
  sMeasurePath = sMeasure;
42
44
  } else if (aTransAggregations && aTransAggregations[0]) {
43
45
  var aAggregations = aTransAggregations[0];
@@ -99,12 +101,11 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
99
101
  * @param converterContext The chart annotation
100
102
  * @param sPropertyPath The aggregation helper
101
103
  * @param FilterFields The aggregation helper
102
- * @param parameterEntityType
103
104
  * @returns {VisualFilters | undefined }
104
105
  */
105
106
 
106
107
 
107
- function getVisualFilters(entityType, converterContext, sPropertyPath, FilterFields, parameterEntityType) {
108
+ function getVisualFilters(entityType, converterContext, sPropertyPath, FilterFields) {
108
109
  var _oVisualFilter$visual;
109
110
 
110
111
  var visualFilter = {};
@@ -134,10 +135,12 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
134
135
  collectionPathConverterContext = resolvedTarget.converterContext;
135
136
  }
136
137
 
138
+ var parameterEntityType = collectionPathConverterContext.getParameterEntityType();
139
+ aParameters = parameterEntityType ? parameterEntityType.keys.map(function (key) {
140
+ return key.name;
141
+ }) : [];
142
+
137
143
  if (converterContext.getContextPath() === collectionPathConverterContext.getContextPath()) {
138
- aParameters = parameterEntityType ? parameterEntityType.keys.map(function (key) {
139
- return key.name;
140
- }) : [];
141
144
  aParameters.forEach(function (parameter) {
142
145
  inParameters.push({
143
146
  localDataProperty: parameter,
@@ -243,7 +246,7 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
243
246
  if (bDimensionHidden === true || bDimensionHiddenFilter === true) {
244
247
  return;
245
248
  } else if (aVisualizations && aVisualizations.length) {
246
- var _collectionPathConver5, _collectionPathConver6, _outParameter, _outParameter$LocalDa, _collectionPathConver10, _entitySetAnnotations, _entitySetAnnotations2, _visualFilter$require, _chartAnnotation3, _chartAnnotation3$$ta, _chartAnnotation3$$ta2, _chartAnnotation3$$ta3;
249
+ var _collectionPathConver5, _collectionPathConver6, _outParameter, _outParameter$LocalDa, _requiredProperties, _visualFilter$require, _chartAnnotation3, _chartAnnotation3$$ta, _chartAnnotation3$$ta2, _chartAnnotation3$$ta3;
247
250
 
248
251
  visualFilter.chartAnnotation = chartAnnotation ? (_collectionPathConver5 = collectionPathConverterContext) === null || _collectionPathConver5 === void 0 ? void 0 : _collectionPathConver5.getAbsoluteAnnotationPath(chartAnnotation.fullyQualifiedName + "/$AnnotationPath/") : undefined;
249
252
  visualFilter.presentationAnnotation = pvAnnotation ? (_collectionPathConver6 = collectionPathConverterContext) === null || _collectionPathConver6 === void 0 ? void 0 : _collectionPathConver6.getAbsoluteAnnotationPath(pvAnnotation.fullyQualifiedName + "/") : undefined;
@@ -267,11 +270,33 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
267
270
  visualFilter.selectionVariantAnnotation = svAnnotation ? (_collectionPathConver9 = collectionPathConverterContext) === null || _collectionPathConver9 === void 0 ? void 0 : _collectionPathConver9.getAbsoluteAnnotationPath(svAnnotation.fullyQualifiedName + "/") : undefined;
268
271
  }
269
272
 
270
- var entitySetAnnotations = (_collectionPathConver10 = collectionPathConverterContext.getEntitySet()) === null || _collectionPathConver10 === void 0 ? void 0 : _collectionPathConver10.annotations;
273
+ var requiredProperties = [];
274
+
275
+ if (parameterEntityType) {
276
+ var _oEntitySetConverterC, _oEntitySetConverterC2, _oEntitySetConverterC3, _oEntitySetConverterC4, _oRestrictedProperty$;
277
+
278
+ var sEntitySet = collectionPath.split("/")[0];
279
+ var sNavigationProperty = collectionPath.split("/")[1];
280
+ var oEntitySetConverterContext = converterContext.getConverterContextFor("/" + sEntitySet);
281
+ var aRestrictedProperties = oEntitySetConverterContext === null || oEntitySetConverterContext === void 0 ? void 0 : (_oEntitySetConverterC = oEntitySetConverterContext.getDataModelObjectPath().startingEntitySet) === null || _oEntitySetConverterC === void 0 ? void 0 : (_oEntitySetConverterC2 = _oEntitySetConverterC.annotations) === null || _oEntitySetConverterC2 === void 0 ? void 0 : (_oEntitySetConverterC3 = _oEntitySetConverterC2.Capabilities) === null || _oEntitySetConverterC3 === void 0 ? void 0 : (_oEntitySetConverterC4 = _oEntitySetConverterC3.NavigationRestrictions) === null || _oEntitySetConverterC4 === void 0 ? void 0 : _oEntitySetConverterC4.RestrictedProperties;
282
+ var oRestrictedProperty = aRestrictedProperties === null || aRestrictedProperties === void 0 ? void 0 : aRestrictedProperties.find(function (restrictedNavProp) {
283
+ var _restrictedNavProp$Na;
284
+
285
+ if (((_restrictedNavProp$Na = restrictedNavProp.NavigationProperty) === null || _restrictedNavProp$Na === void 0 ? void 0 : _restrictedNavProp$Na.type) === "NavigationPropertyPath") {
286
+ return restrictedNavProp.NavigationProperty.value === sNavigationProperty;
287
+ }
288
+ });
289
+ requiredProperties = oRestrictedProperty === null || oRestrictedProperty === void 0 ? void 0 : (_oRestrictedProperty$ = oRestrictedProperty.FilterRestrictions) === null || _oRestrictedProperty$ === void 0 ? void 0 : _oRestrictedProperty$.RequiredProperties;
290
+ } else {
291
+ var _collectionPathConver10, _entitySetAnnotations, _entitySetAnnotations2;
292
+
293
+ var entitySetAnnotations = (_collectionPathConver10 = collectionPathConverterContext.getEntitySet()) === null || _collectionPathConver10 === void 0 ? void 0 : _collectionPathConver10.annotations;
294
+ requiredProperties = entitySetAnnotations === null || entitySetAnnotations === void 0 ? void 0 : (_entitySetAnnotations = entitySetAnnotations.Capabilities) === null || _entitySetAnnotations === void 0 ? void 0 : (_entitySetAnnotations2 = _entitySetAnnotations.FilterRestrictions) === null || _entitySetAnnotations2 === void 0 ? void 0 : _entitySetAnnotations2.RequiredProperties;
295
+ }
296
+
271
297
  var requiredPropertyPaths = [];
272
- var requiredProperties = entitySetAnnotations === null || entitySetAnnotations === void 0 ? void 0 : (_entitySetAnnotations = entitySetAnnotations.Capabilities) === null || _entitySetAnnotations === void 0 ? void 0 : (_entitySetAnnotations2 = _entitySetAnnotations.FilterRestrictions) === null || _entitySetAnnotations2 === void 0 ? void 0 : _entitySetAnnotations2.RequiredProperties;
273
298
 
274
- if (requiredProperties !== null && requiredProperties !== void 0 && requiredProperties.length) {
299
+ if ((_requiredProperties = requiredProperties) !== null && _requiredProperties !== void 0 && _requiredProperties.length) {
275
300
  requiredProperties.forEach(function (oRequireProperty) {
276
301
  requiredPropertyPaths.push(oRequireProperty.value);
277
302
  });
@@ -285,11 +310,15 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
285
310
  if (!visualFilter.selectionVariantAnnotation) {
286
311
  visualFilter.showOverlayInitially = true;
287
312
  } else {
288
- var _svAnnotation;
313
+ var _svAnnotation, _svAnnotation$SelectO, _svAnnotation2, _svAnnotation2$Parame;
289
314
 
290
- var selectOptions = (_svAnnotation = svAnnotation) === null || _svAnnotation === void 0 ? void 0 : _svAnnotation.SelectOptions.map(function (oSelectOption) {
315
+ var selectOptions = ((_svAnnotation = svAnnotation) === null || _svAnnotation === void 0 ? void 0 : (_svAnnotation$SelectO = _svAnnotation.SelectOptions) === null || _svAnnotation$SelectO === void 0 ? void 0 : _svAnnotation$SelectO.map(function (oSelectOption) {
291
316
  return oSelectOption.PropertyName.value;
292
- });
317
+ })) || [];
318
+ var parameterOptions = ((_svAnnotation2 = svAnnotation) === null || _svAnnotation2 === void 0 ? void 0 : (_svAnnotation2$Parame = _svAnnotation2.Parameters) === null || _svAnnotation2$Parame === void 0 ? void 0 : _svAnnotation2$Parame.map(function (oParameterOption) {
319
+ return oParameterOption.PropertyName.value;
320
+ })) || [];
321
+ selectOptions = selectOptions.concat(parameterOptions);
293
322
  requiredPropertyPaths = requiredPropertyPaths.sort();
294
323
  selectOptions = selectOptions.sort();
295
324
  visualFilter.showOverlayInitially = requiredPropertyPaths.some(function (sPath) {
@@ -332,4 +361,4 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
332
361
  _exports.getVisualFilters = getVisualFilters;
333
362
  return _exports;
334
363
  }, false);
335
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlcnMudHMiXSwibmFtZXMiOlsiX2NoZWNrVkZBZ2dyZWdhdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsInNNZWFzdXJlUGF0aCIsImJHcm91cGFibGUiLCJiQWdncmVnYXRhYmxlIiwic01lYXN1cmUiLCIkdGFyZ2V0IiwiTWVhc3VyZXMiLCJ2YWx1ZSIsInNEaW1lbnNpb24iLCJEaW1lbnNpb25zIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJnZXRFbnRpdHlDb250YWluZXIiLCJnZXRFbnRpdHlUeXBlIiwiYUFnZ3JlZ2F0aW9ucyIsInNvbWUiLCJvQWdncmVnYXRlIiwiTmFtZSIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsImxlbmd0aCIsImFnZ3JlZ2F0YWJsZVByb3AiLCJQcm9wZXJ0eSIsImdyb3VwYWJsZVByb3AiLCJnZXRWaXN1YWxGaWx0ZXJzIiwiZW50aXR5VHlwZSIsInNQcm9wZXJ0eVBhdGgiLCJGaWx0ZXJGaWVsZHMiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwidmlzdWFsRmlsdGVyIiwib1Zpc3VhbEZpbHRlciIsInZhbHVlTGlzdCIsIm9WRlBhdGgiLCJhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQiLCJzcGxpdCIsInF1YWxpZmllclZMIiwicHJvcGVydHkiLCJyZXNvbHZlUGF0aCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiY29sbGVjdGlvblBhdGgiLCJDb2xsZWN0aW9uUGF0aCIsImNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRFbnRpdHlTZXQiLCJuYW1lIiwidmFsdWVMaXN0UGFyYW1zIiwiUGFyYW1ldGVycyIsIm91dFBhcmFtZXRlciIsImluUGFyYW1ldGVycyIsImFQYXJhbWV0ZXJzIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldEVudGl0eVNldCIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJnZXRDb250ZXh0UGF0aCIsImtleXMiLCJtYXAiLCJrZXkiLCJmb3JFYWNoIiwicGFyYW1ldGVyIiwicHVzaCIsImxvY2FsRGF0YVByb3BlcnR5IiwidmFsdWVMaXN0UHJvcGVydHkiLCJ2YWx1ZUxpc3RQYXJhbSIsIkxvY2FsRGF0YVByb3BlcnR5IiwiVmFsdWVMaXN0UHJvcGVydHkiLCIkVHlwZSIsImJOb3RGaWx0ZXJhYmxlIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJvSW5QYXJhbWV0ZXIiLCJtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJjb21waWxlQmluZGluZyIsImNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJ2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiIsIkVycm9yIiwicHZRdWFsaWZpZXIiLCJQcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyIiwic3ZRdWFsaWZpZXIiLCJTZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyIiwicHZBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJhVmlzdWFsaXphdGlvbnMiLCJWaXN1YWxpemF0aW9ucyIsImNvbnRleHRQYXRoIiwidmlzdWFsaXphdGlvbiIsInRlcm0iLCJfYmdldFZGQWdncmVnYXRpb24iLCJiRGltZW5zaW9uSGlkZGVuIiwiVUkiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiYkRpbWVuc2lvbkhpZGRlbkZpbHRlciIsIkhpZGRlbkZpbHRlciIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInVuZGVmaW5lZCIsInByZXNlbnRhdGlvbkFubm90YXRpb24iLCJiSXNSYW5nZSIsImJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb24iLCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQiLCJyZXF1aXJlZCIsImdldElzUmVxdWlyZWQiLCJzdkFubm90YXRpb24iLCJzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiIsImVudGl0eVNldEFubm90YXRpb25zIiwicmVxdWlyZWRQcm9wZXJ0eVBhdGhzIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiQ2FwYWJpbGl0aWVzIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwib1JlcXVpcmVQcm9wZXJ0eSIsImNvbmNhdCIsInNob3dPdmVybGF5SW5pdGlhbGx5Iiwic2VsZWN0T3B0aW9ucyIsIlNlbGVjdE9wdGlvbnMiLCJvU2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic29ydCIsInNQYXRoIiwiaW5kZXhPZiIsInNEaW1lbnNpb25UeXBlIiwidHlwZSIsIkNoYXJ0VHlwZSIsInJlbmRlckxpbmVDaGFydCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMiLCJDSEFSVCIsIlBSRVNFTlRBVElPTlZBUklBTlQiLCJWQUxVRUxJU1QiLCJNYW5pZmVzdCIsIk9iamVjdCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNQSxtQkFBbUIsR0FBRyxVQUMzQkMsZ0JBRDJCLEVBRTNCQyxlQUYyQixFQUczQkMsaUJBSDJCLEVBSUw7QUFBQTs7QUFDdEIsUUFBSUMsWUFBSixFQUFrQkMsVUFBbEIsRUFBOEJDLGFBQTlCO0FBQ0EsUUFBTUMsUUFBZ0IsR0FBR0wsZUFBSCxhQUFHQSxlQUFILGdEQUFHQSxlQUFlLENBQUVNLE9BQXBCLG9GQUFHLHNCQUEwQkMsUUFBMUIsQ0FBbUMsQ0FBbkMsQ0FBSCwyREFBRyx1QkFBdUNDLEtBQWhFO0FBQ0EsUUFBTUMsVUFBa0IsR0FBR1QsZUFBSCxhQUFHQSxlQUFILGlEQUFHQSxlQUFlLENBQUVNLE9BQXBCLHFGQUFHLHVCQUEwQkksVUFBMUIsQ0FBcUMsQ0FBckMsQ0FBSCwyREFBRyx1QkFBeUNGLEtBQXBFO0FBQ0EsUUFBTUcsZ0JBQWdCLEdBQUdWLGlCQUFpQixDQUFDVyw2QkFBbEIsRUFBekI7QUFDQSxRQUFNQyxrQkFBa0IsR0FBR2QsZ0JBQWdCLENBQUNlLG9CQUFqQixDQUMxQixXQUQwQixFQUUxQix3REFGMEIsRUFHMUIsQ0FBQ2YsZ0JBQWdCLENBQUNnQixrQkFBakIsRUFBRCxFQUF3Q2hCLGdCQUFnQixDQUFDaUIsYUFBakIsRUFBeEMsQ0FIMEIsQ0FBM0I7O0FBS0EsUUFBSUwsZ0JBQWdCLENBQUNOLFFBQUQsQ0FBcEIsRUFBZ0M7QUFDL0JILE1BQUFBLFlBQVksR0FBR0csUUFBZjtBQUNBLEtBRkQsTUFFTyxJQUFJUSxrQkFBa0IsSUFBSUEsa0JBQWtCLENBQUMsQ0FBRCxDQUE1QyxFQUFpRDtBQUN2RCxVQUFNSSxhQUFhLEdBQUdKLGtCQUFrQixDQUFDLENBQUQsQ0FBeEM7QUFDQUksTUFBQUEsYUFBYSxDQUFDQyxJQUFkLENBQW1CLFVBQVNDLFVBQVQsRUFBMEI7QUFDNUMsWUFBSUEsVUFBVSxDQUFDQyxJQUFYLEtBQW9CZixRQUF4QixFQUFrQztBQUNqQ0gsVUFBQUEsWUFBWSxHQUFHaUIsVUFBSCxhQUFHQSxVQUFILHVCQUFHQSxVQUFVLENBQUVFLG9CQUFaLENBQWlDYixLQUFoRDtBQUNBO0FBQ0QsT0FKRDtBQUtBOztBQUNELFFBQU1jLCtCQUErQixHQUFHckIsaUJBQWlCLENBQUNzQix5QkFBbEIsRUFBeEM7QUFDQSxRQUFNQyw0QkFBNEIsR0FBR3ZCLGlCQUFpQixDQUFDd0Isc0JBQWxCLEVBQXJDOztBQUNBLFFBQUlILCtCQUErQixJQUFJQSwrQkFBK0IsQ0FBQ0ksTUFBdkUsRUFBK0U7QUFBQSxpREFDL0NKLCtCQUQrQztBQUFBOztBQUFBO0FBQzlFLDREQUFnRTtBQUFBOztBQUFBLGNBQXJESyxnQkFBcUQ7O0FBQy9ELGNBQUksQ0FBQUEsZ0JBQWdCLFNBQWhCLElBQUFBLGdCQUFnQixXQUFoQixxQ0FBQUEsZ0JBQWdCLENBQUVDLFFBQWxCLGdGQUE0QnBCLEtBQTVCLE1BQXNDTixZQUExQyxFQUF3RDtBQUN2REUsWUFBQUEsYUFBYSxHQUFHLElBQWhCO0FBQ0E7QUFDRDtBQUw2RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTTlFOztBQUNELFFBQUlvQiw0QkFBNEIsSUFBSUEsNEJBQTRCLENBQUNFLE1BQWpFLEVBQXlFO0FBQUEsa0RBQzVDRiw0QkFENEM7QUFBQTs7QUFBQTtBQUN4RSwrREFBMEQ7QUFBQSxjQUEvQ0ssYUFBK0M7O0FBQ3pELGNBQUksQ0FBQUEsYUFBYSxTQUFiLElBQUFBLGFBQWEsV0FBYixZQUFBQSxhQUFhLENBQUVyQixLQUFmLE1BQXlCQyxVQUE3QixFQUF5QztBQUN4Q04sWUFBQUEsVUFBVSxHQUFHLElBQWI7QUFDQTtBQUNEO0FBTHVFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNeEU7O0FBQ0QsV0FBT0MsYUFBYSxJQUFJRCxVQUF4QjtBQUNBLEdBekNEO0FBMkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sV0FBUzJCLGdCQUFULENBQ05DLFVBRE0sRUFFTmhDLGdCQUZNLEVBR05pQyxhQUhNLEVBSU5DLFlBSk0sRUFLTkMsbUJBTE0sRUFNc0I7QUFBQTs7QUFDNUIsUUFBTUMsWUFBMkIsR0FBRyxFQUFwQztBQUNBLFFBQU1DLGFBQStDLEdBQUdILFlBQVksQ0FBQ0QsYUFBRCxDQUFwRTs7QUFDQSxRQUFJSSxhQUFhLElBQUlBLGFBQUosYUFBSUEsYUFBSixlQUFJQSxhQUFhLENBQUVELFlBQWhDLElBQWdEQyxhQUFoRCxhQUFnREEsYUFBaEQsd0NBQWdEQSxhQUFhLENBQUVELFlBQS9ELGtEQUFnRCxzQkFBNkJFLFNBQWpGLEVBQTRGO0FBQUE7O0FBQzNGLFVBQU1DLE9BQU8sR0FBR0YsYUFBSCxhQUFHQSxhQUFILGlEQUFHQSxhQUFhLENBQUVELFlBQWxCLDJEQUFHLHVCQUE2QkUsU0FBN0M7QUFDQSxVQUFNRSx3QkFBd0IsR0FBR0QsT0FBTyxDQUFDRSxLQUFSLENBQWMsR0FBZCxDQUFqQztBQUNBLFVBQU1DLFdBQVcsR0FBR0Ysd0JBQXdCLENBQUNiLE1BQXpCLEdBQWtDLENBQWxDLEdBQXNDLGVBQWVhLHdCQUF3QixDQUFDLENBQUQsQ0FBN0UsR0FBbUZBLHdCQUF3QixDQUFDLENBQUQsQ0FBL0g7QUFDQSxVQUFNRyxRQUFRLEdBQUdYLFVBQVUsQ0FBQ1ksV0FBWCxDQUF1QlgsYUFBdkIsQ0FBakI7QUFDQSxVQUFNSyxTQUFjLEdBQUdLLFFBQUgsYUFBR0EsUUFBSCxnREFBR0EsUUFBUSxDQUFFRSxXQUFiLDBEQUFHLHNCQUF1QkMsTUFBdkIsQ0FBOEJKLFdBQTlCLENBQXZCOztBQUNBLFVBQUlKLFNBQUosRUFBZTtBQUFBOztBQUNkLFlBQU1TLGNBQWMsR0FBR1QsU0FBSCxhQUFHQSxTQUFILHVCQUFHQSxTQUFTLENBQUVVLGNBQWxDO0FBQ0EsWUFBSUMsOEJBQThCLEdBQUdqRCxnQkFBZ0IsQ0FBQ2tELHNCQUFqQixDQUNwQyxPQUFPSCxjQUFjLDhCQUFJL0MsZ0JBQWdCLENBQUNtRCxZQUFqQixFQUFKLDBEQUFJLHNCQUFpQ0MsSUFBckMsQ0FBckIsQ0FEb0MsQ0FBckM7QUFHQSxZQUFNQyxlQUFlLEdBQUdmLFNBQUgsYUFBR0EsU0FBSCx1QkFBR0EsU0FBUyxDQUFFZ0IsVUFBbkM7QUFDQSxZQUFJQyxZQUFKO0FBQ0EsWUFBTUMsWUFBMkIsR0FBRyxFQUFwQztBQUNBLFlBQUlDLFdBQTBCLEdBQUcsRUFBakM7O0FBQ0EsWUFBSSxDQUFDUiw4QkFBOEIsQ0FBQ1Msc0JBQS9CLEdBQXdEQyxlQUE3RCxFQUE4RTtBQUM3RSxjQUFNQyxjQUFjLEdBQUdYLDhCQUE4QixDQUFDWSx1QkFBL0IsQ0FBdUQsRUFBdkQsQ0FBdkI7QUFDQVosVUFBQUEsOEJBQThCLEdBQUdXLGNBQWMsQ0FBQzVELGdCQUFoRDtBQUNBOztBQUNELFlBQUlBLGdCQUFnQixDQUFDOEQsY0FBakIsT0FBc0NiLDhCQUE4QixDQUFDYSxjQUEvQixFQUExQyxFQUEyRjtBQUMxRkwsVUFBQUEsV0FBVyxHQUFHdEIsbUJBQW1CLEdBQzlCQSxtQkFBbUIsQ0FBQzRCLElBQXBCLENBQXlCQyxHQUF6QixDQUE2QixVQUFTQyxHQUFULEVBQWM7QUFDM0MsbUJBQU9BLEdBQUcsQ0FBQ2IsSUFBWDtBQUNDLFdBRkQsQ0FEOEIsR0FJOUIsRUFKSDtBQUtBSyxVQUFBQSxXQUFXLENBQUNTLE9BQVosQ0FBb0IsVUFBU0MsU0FBVCxFQUF5QjtBQUM1Q1gsWUFBQUEsWUFBWSxDQUFDWSxJQUFiLENBQWtCO0FBQ2pCQyxjQUFBQSxpQkFBaUIsRUFBRUYsU0FERjtBQUVqQkcsY0FBQUEsaUJBQWlCLEVBQUVIO0FBRkYsYUFBbEI7QUFJQSxXQUxEO0FBTUE7O0FBQ0QsWUFBSWQsZUFBSixFQUFxQjtBQUFBLHNEQUNTQSxlQURUO0FBQUE7O0FBQUE7QUFDcEIsbUVBQThDO0FBQUE7O0FBQUEsa0JBQW5Da0IsY0FBbUM7QUFDN0Msa0JBQU1GLGlCQUFpQix5QkFBSUUsY0FBRCxDQUF3QkMsaUJBQTNCLHVEQUFHLG1CQUEyQy9ELEtBQXJFO0FBQ0Esa0JBQU02RCxpQkFBaUIsR0FBSUMsY0FBRCxDQUF3QkUsaUJBQWxEOztBQUNBLGtCQUNDLENBQUMsQ0FBQUYsY0FBYyxTQUFkLElBQUFBLGNBQWMsV0FBZCxZQUFBQSxjQUFjLENBQUVHLEtBQWhCLE1BQTBCLHdEQUExQixJQUNBLENBQUFILGNBQWMsU0FBZCxJQUFBQSxjQUFjLFdBQWQsWUFBQUEsY0FBYyxDQUFFRyxLQUFoQixNQUEwQixzREFEM0IsS0FFQXpDLGFBQWEsS0FBS29DLGlCQUhuQixFQUlFO0FBQ0RkLGdCQUFBQSxZQUFZLEdBQUdnQixjQUFmO0FBQ0E7O0FBQ0Qsa0JBQ0MsQ0FBQyxDQUFBQSxjQUFjLFNBQWQsSUFBQUEsY0FBYyxXQUFkLFlBQUFBLGNBQWMsQ0FBRUcsS0FBaEIsTUFBMEIsd0RBQTFCLElBQ0EsQ0FBQUgsY0FBYyxTQUFkLElBQUFBLGNBQWMsV0FBZCxZQUFBQSxjQUFjLENBQUVHLEtBQWhCLE1BQTBCLHFEQUQzQixLQUVBekMsYUFBYSxLQUFLb0MsaUJBSG5CLEVBSUU7QUFDRCxvQkFBTU0sY0FBYyxHQUFHQyxvQkFBb0IsQ0FBQzNCLDhCQUFELEVBQWlDcUIsaUJBQWpDLENBQTNDOztBQUNBLG9CQUFJLENBQUNLLGNBQUwsRUFBcUI7QUFDcEJuQixrQkFBQUEsWUFBWSxDQUFDWSxJQUFiLENBQWtCO0FBQ2pCQyxvQkFBQUEsaUJBQWlCLEVBQUVBLGlCQURGO0FBRWpCQyxvQkFBQUEsaUJBQWlCLEVBQUVBO0FBRkYsbUJBQWxCO0FBSUE7QUFDRDtBQUNEO0FBeEJtQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJwQjs7QUFDRCxZQUFJZCxZQUFZLElBQUlBLFlBQVksQ0FBQzdCLE1BQWpDLEVBQXlDO0FBQ3hDNkIsVUFBQUEsWUFBWSxDQUFDVSxPQUFiLENBQXFCLFVBQVNXLFlBQVQsRUFBNEI7QUFDaEQsZ0JBQU1DLHVDQUF1QyxHQUFHQyxjQUFjLENBQzdEQyxpQ0FBaUMsQ0FDaENoRixnQkFBZ0IsQ0FDZGtELHNCQURGLENBQ3lCbEQsZ0JBQWdCLENBQUNpRix5QkFBakIsQ0FBMkNKLFlBQTNDLGFBQTJDQSxZQUEzQyx1QkFBMkNBLFlBQVksQ0FBRVIsaUJBQXpELENBRHpCLEVBRUVYLHNCQUZGLEVBRGdDLEVBSWhDLENBQUMsYUFBRCxDQUpnQyxDQUQ0QixDQUE5RDtBQVFBLGdCQUFNd0IsNENBQTRDLEdBQUdILGNBQWMsQ0FDbEVDLGlDQUFpQyxDQUNoQy9CLDhCQUE4QixDQUM1QkMsc0JBREYsQ0FFRUQsOEJBQThCLENBQUNnQyx5QkFBL0IsQ0FBeURKLFlBQXpELGFBQXlEQSxZQUF6RCx1QkFBeURBLFlBQVksQ0FBRVAsaUJBQXZFLENBRkYsRUFJRVosc0JBSkYsRUFEZ0MsRUFNaEMsQ0FBQyxhQUFELENBTmdDLENBRGlDLENBQW5FOztBQVVBLGdCQUFJd0IsNENBQTRDLEtBQUssTUFBakQsSUFBMkRKLHVDQUF1QyxLQUFLLE9BQTNHLEVBQW9IO0FBQ25ILG9CQUFNLElBQUlLLEtBQUosQ0FDTCwyQkFBMkJsRCxhQUEzQixHQUEyQyx3REFEdEMsQ0FBTjtBQUdBO0FBQ0QsV0F4QkQ7QUF5QkE7O0FBQ0QsWUFBTW1ELFdBQVcsR0FBRzlDLFNBQUgsYUFBR0EsU0FBSCx1QkFBR0EsU0FBUyxDQUFFK0MsNEJBQS9CO0FBQ0EsWUFBTUMsV0FBVyxHQUFHaEQsU0FBSCxhQUFHQSxTQUFILHVCQUFHQSxTQUFTLENBQUVpRCx5QkFBL0I7QUFDQSxZQUFNQyxZQUFpQiw0QkFBR3ZDLDhCQUFILG9GQUFHLHNCQUFnQ1ksdUJBQWhDLENBQXdELDZCQUE2QnVCLFdBQXJGLENBQUgsMkRBQUcsdUJBQ3ZCSyxVQURIO0FBRUEsWUFBTXZGLGlCQUFpQixHQUFHLElBQUl3RixpQkFBSixDQUFzQnpDLDhCQUE4QixDQUFDaEMsYUFBL0IsRUFBdEIsRUFBc0VnQyw4QkFBdEUsQ0FBMUI7O0FBQ0EsWUFBSSxDQUFDL0MsaUJBQWlCLENBQUN5RixvQkFBbEIsRUFBTCxFQUErQztBQUM5QztBQUNBOztBQUNELFlBQUlILFlBQUosRUFBa0I7QUFBQTs7QUFDakIsY0FBTUksZUFBZSxHQUFHSixZQUFILGFBQUdBLFlBQUgsdUJBQUdBLFlBQVksQ0FBRUssY0FBdEM7QUFDQSxjQUFNQyxXQUFXLEdBQUcsT0FBTXhELFNBQU4sYUFBTUEsU0FBTix1QkFBTUEsU0FBUyxDQUFFVSxjQUFqQixLQUFtQyxpQ0FBTUMsOEJBQU4scUZBQU0sdUJBQWdDRSxZQUFoQyxFQUFOLDJEQUFNLHVCQUFnREMsSUFBdEQsQ0FBdkQ7QUFDQWhCLFVBQUFBLFlBQVksQ0FBQzBELFdBQWIsR0FBMkJBLFdBQTNCO0FBQ0EsY0FBSTdGLGVBQUo7O0FBSmlCLHNEQUtXMkYsZUFMWDtBQUFBOztBQUFBO0FBS2pCLG1FQUE2QztBQUFBOztBQUFBLGtCQUFsQ0csYUFBa0M7O0FBQzVDLGtCQUFJLDBCQUFBQSxhQUFhLENBQUN4RixPQUFkLGdGQUF1QnlGLElBQXZCLE1BQWdDLGtDQUFwQyxFQUF3RTtBQUN2RS9GLGdCQUFBQSxlQUFlLEdBQUc4RixhQUFsQjtBQUNBO0FBQ0E7QUFDRDtBQVZnQjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQVdqQixjQUFJOUYsZUFBSixFQUFxQjtBQUFBOztBQUNwQixnQkFBTWdHLGtCQUF1QyxHQUFHbEcsbUJBQW1CLENBQ2xFa0QsOEJBRGtFLEVBRWxFaEQsZUFGa0UsRUFHbEVDLGlCQUhrRSxDQUFuRTs7QUFLQSxnQkFBSSxDQUFDK0Ysa0JBQUwsRUFBeUI7QUFDeEI7QUFDQTs7QUFDRCxnQkFBTUMsZ0JBQXlCLHVCQUFHakcsZUFBSCwrRUFBRyxpQkFBaUJNLE9BQXBCLHFGQUFHLHVCQUEwQkksVUFBMUIsQ0FBcUMsQ0FBckMsQ0FBSCxxRkFBRyx1QkFBeUNKLE9BQTVDLHFGQUFHLHVCQUFrRHNDLFdBQXJELHFGQUFHLHVCQUErRHNELEVBQWxFLHNGQUFHLHVCQUFtRUMsTUFBdEUsNERBQUcsd0JBQTJFQyxPQUEzRSxFQUFsQztBQUNBLGdCQUFNQyxzQkFBK0Isd0JBQUdyRyxlQUFILCtFQUFHLGtCQUFpQk0sT0FBcEIsb0ZBQUcsc0JBQTBCSSxVQUExQixDQUFxQyxDQUFyQyxDQUFILHFGQUFHLHVCQUF5Q0osT0FBNUMscUZBQUcsdUJBQWtEc0MsV0FBckQscUZBQUcsdUJBQStEc0QsRUFBbEUscUZBQUcsdUJBQW1FSSxZQUF0RSwyREFBRyx1QkFBaUZGLE9BQWpGLEVBQXhDOztBQUNBLGdCQUFJSCxnQkFBZ0IsS0FBSyxJQUFyQixJQUE2Qkksc0JBQXNCLEtBQUssSUFBNUQsRUFBa0U7QUFDakU7QUFDQSxhQUZELE1BRU8sSUFBSVYsZUFBZSxJQUFJQSxlQUFlLENBQUNqRSxNQUF2QyxFQUErQztBQUFBOztBQUNyRFMsY0FBQUEsWUFBWSxDQUFDbkMsZUFBYixHQUErQkEsZUFBZSw2QkFDM0NnRCw4QkFEMkMsMkRBQzNDLHVCQUFnQ2dDLHlCQUFoQyxDQUNBaEYsZUFBZSxDQUFDdUcsa0JBQWhCLEdBQXFDLG1CQURyQyxDQUQyQyxHQUkzQ0MsU0FKSDtBQUtBckUsY0FBQUEsWUFBWSxDQUFDc0Usc0JBQWIsR0FBc0NsQixZQUFZLDZCQUMvQ3ZDLDhCQUQrQywyREFDL0MsdUJBQWdDZ0MseUJBQWhDLENBQTBETyxZQUFZLENBQUNnQixrQkFBYixHQUFrQyxHQUE1RixDQUQrQyxHQUUvQ0MsU0FGSDtBQUdBckUsY0FBQUEsWUFBWSxDQUFDbUIsWUFBYixvQkFBNEJBLFlBQTVCLDJFQUE0QixjQUFjaUIsaUJBQTFDLDBEQUE0QixzQkFBaUMvRCxLQUE3RDtBQUNBMkIsY0FBQUEsWUFBWSxDQUFDb0IsWUFBYixHQUE0QkEsWUFBNUI7QUFDQSxrQkFBTW1ELFFBQVEsR0FBRzNCLGlDQUFpQyxDQUNqRGhGLGdCQUFnQixDQUNka0Qsc0JBREYsQ0FDeUJsRCxnQkFBZ0IsQ0FBQ2lGLHlCQUFqQixDQUEyQ2hELGFBQTNDLENBRHpCLEVBRUV5QixzQkFGRixFQURpRCxFQUlqRCxDQUFDLGFBQUQsRUFBZ0IsWUFBaEIsQ0FKaUQsQ0FBbEQ7O0FBT0Esa0JBQUlxQixjQUFjLENBQUM0QixRQUFELENBQWQsS0FBNkIsTUFBakMsRUFBeUM7QUFDeEMsc0JBQU0sSUFBSXhCLEtBQUosQ0FBVSw2REFBVixDQUFOO0FBQ0E7O0FBRUQsa0JBQU15QiwrQkFBb0MsR0FBRzVCLGlDQUFpQyxDQUM3RWhGLGdCQUFnQixDQUNka0Qsc0JBREYsQ0FDeUJsRCxnQkFBZ0IsQ0FBQ2lGLHlCQUFqQixDQUEyQ2hELGFBQTNDLENBRHpCLEVBRUV5QixzQkFGRixFQUQ2RSxFQUk3RSxDQUFDLGFBQUQsQ0FKNkUsQ0FBOUU7QUFNQXRCLGNBQUFBLFlBQVksQ0FBQ3lFLHdCQUFiLEdBQXdDOUIsY0FBYyxDQUFDLENBQUM2QiwrQkFBK0IsQ0FBQ25HLEtBQWxDLENBQXREO0FBQ0EyQixjQUFBQSxZQUFZLENBQUMwRSxRQUFiLEdBQXdCQyxhQUFhLENBQUMvRyxnQkFBRCxFQUFtQmlDLGFBQW5CLENBQXJDO0FBQ0Esa0JBQUkrRSxZQUFKOztBQUNBLGtCQUFJMUIsV0FBSixFQUFpQjtBQUFBOztBQUNoQjBCLGdCQUFBQSxZQUFZLDZCQUFHL0QsOEJBQUgscUZBQUcsdUJBQWdDWSx1QkFBaEMsQ0FBd0QsMEJBQTBCeUIsV0FBbEYsQ0FBSCwyREFBRyx1QkFDWkcsVUFESDtBQUVBckQsZ0JBQUFBLFlBQVksQ0FBQzZFLDBCQUFiLEdBQTBDRCxZQUFZLDZCQUNuRC9ELDhCQURtRCwyREFDbkQsdUJBQWdDZ0MseUJBQWhDLENBQTBEK0IsWUFBWSxDQUFDUixrQkFBYixHQUFrQyxHQUE1RixDQURtRCxHQUVuREMsU0FGSDtBQUdBOztBQUNELGtCQUFNUyxvQkFBb0IsOEJBQUdqRSw4QkFBOEIsQ0FBQ0UsWUFBL0IsRUFBSCw0REFBRyx3QkFBK0NOLFdBQTVFO0FBQ0Esa0JBQUlzRSxxQkFBb0MsR0FBRyxFQUEzQztBQUNBLGtCQUFNQyxrQkFBa0IsR0FBR0Ysb0JBQUgsYUFBR0Esb0JBQUgsZ0RBQUdBLG9CQUFvQixDQUFFRyxZQUF6QixvRkFBRyxzQkFBb0NDLGtCQUF2QywyREFBRyx1QkFBd0RDLGtCQUFuRjs7QUFDQSxrQkFBSUgsa0JBQUosYUFBSUEsa0JBQUosZUFBSUEsa0JBQWtCLENBQUV6RixNQUF4QixFQUFnQztBQUMvQnlGLGdCQUFBQSxrQkFBa0IsQ0FBQ2xELE9BQW5CLENBQTJCLFVBQVNzRCxnQkFBVCxFQUFnQztBQUMxREwsa0JBQUFBLHFCQUFxQixDQUFDL0MsSUFBdEIsQ0FBMkJvRCxnQkFBZ0IsQ0FBQy9HLEtBQTVDO0FBQ0EsaUJBRkQ7QUFHQTs7QUFDRDBHLGNBQUFBLHFCQUFxQixHQUFHQSxxQkFBcUIsQ0FBQ00sTUFBdEIsQ0FBNkJoRSxXQUE3QixDQUF4QjtBQUNBckIsY0FBQUEsWUFBWSxDQUFDZ0Ysa0JBQWIsR0FBa0NELHFCQUFsQzs7QUFDQSwyQ0FBSS9FLFlBQVksQ0FBQ2dGLGtCQUFqQixrREFBSSxzQkFBaUN6RixNQUFyQyxFQUE2QztBQUM1QyxvQkFBSSxDQUFDUyxZQUFZLENBQUNvQixZQUFkLElBQThCLENBQUNwQixZQUFZLENBQUNvQixZQUFiLENBQTBCN0IsTUFBN0QsRUFBcUU7QUFDcEUsc0JBQUksQ0FBQ1MsWUFBWSxDQUFDNkUsMEJBQWxCLEVBQThDO0FBQzdDN0Usb0JBQUFBLFlBQVksQ0FBQ3NGLG9CQUFiLEdBQW9DLElBQXBDO0FBQ0EsbUJBRkQsTUFFTztBQUFBOztBQUNOLHdCQUFJQyxhQUFvQixvQkFBR1gsWUFBSCxrREFBRyxjQUFjWSxhQUFkLENBQTRCNUQsR0FBNUIsQ0FDMUIsVUFBQzZELGFBQUQ7QUFBQSw2QkFBd0JBLGFBQWEsQ0FBQ0MsWUFBZCxDQUEyQnJILEtBQW5EO0FBQUEscUJBRDBCLENBQTNCO0FBR0EwRyxvQkFBQUEscUJBQXFCLEdBQUdBLHFCQUFxQixDQUFDWSxJQUF0QixFQUF4QjtBQUNBSixvQkFBQUEsYUFBYSxHQUFHQSxhQUFhLENBQUNJLElBQWQsRUFBaEI7QUFDQTNGLG9CQUFBQSxZQUFZLENBQUNzRixvQkFBYixHQUFvQ1AscUJBQXFCLENBQUNoRyxJQUF0QixDQUEyQixVQUFTNkcsS0FBVCxFQUFnQjtBQUM5RSw2QkFBT0wsYUFBYSxDQUFDTSxPQUFkLENBQXNCRCxLQUF0QixNQUFpQyxDQUFDLENBQXpDO0FBQ0EscUJBRm1DLENBQXBDO0FBR0E7QUFDRCxpQkFiRCxNQWFPO0FBQ041RixrQkFBQUEsWUFBWSxDQUFDc0Ysb0JBQWIsR0FBb0MsS0FBcEM7QUFDQTtBQUNELGVBakJELE1BaUJPO0FBQ050RixnQkFBQUEsWUFBWSxDQUFDc0Ysb0JBQWIsR0FBb0MsS0FBcEM7QUFDQTs7QUFDRCxrQkFBTVEsY0FBYyx3QkFBR2pJLGVBQUgsK0VBQUcsa0JBQWlCTSxPQUFwQixvRkFBRyxzQkFBMEJJLFVBQTFCLENBQXFDLENBQXJDLENBQUgscUZBQUcsdUJBQXlDSixPQUE1QywyREFBRyx1QkFBa0Q0SCxJQUF6RTs7QUFDQSxrQkFDQyxFQUNDRCxjQUFjLEtBQUssb0JBQW5CLElBQ0FBLGNBQWMsS0FBSyxVQURuQixJQUVBQSxjQUFjLEtBQUssZUFIcEIsS0FLQWpJLGVBQWUsQ0FBQ00sT0FBaEIsQ0FBd0I2SCxTQUF4QixLQUFzQyxtQkFOdkMsRUFPRTtBQUNEaEcsZ0JBQUFBLFlBQVksQ0FBQ2lHLGVBQWIsR0FBK0IsS0FBL0I7QUFDQSxlQVRELE1BU087QUFDTmpHLGdCQUFBQSxZQUFZLENBQUNpRyxlQUFiLEdBQStCLElBQS9CO0FBQ0E7QUFDRDtBQUNELFdBL0ZELE1BK0ZPO0FBQ05ySSxZQUFBQSxnQkFBZ0IsQ0FDZHNJLGNBREYsR0FFRUMsUUFGRixDQUVXQyxhQUFhLENBQUNDLFVBRnpCLEVBRXFDQyxhQUFhLENBQUNDLElBRm5ELEVBRXlEQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDQyxLQUYzRjtBQUdBO0FBQ0QsU0EvR0QsTUErR087QUFDTjlJLFVBQUFBLGdCQUFnQixDQUNkc0ksY0FERixHQUVFQyxRQUZGLENBRVdDLGFBQWEsQ0FBQ0MsVUFGekIsRUFFcUNDLGFBQWEsQ0FBQ0MsSUFGbkQsRUFFeURDLFNBQVMsQ0FBQ0MsdUJBQVYsQ0FBa0NFLG1CQUYzRjtBQUdBO0FBQ0QsT0EzTUQsTUEyTU87QUFDTi9JLFFBQUFBLGdCQUFnQixDQUNkc0ksY0FERixHQUVFQyxRQUZGLENBRVdDLGFBQWEsQ0FBQ0MsVUFGekIsRUFFcUNDLGFBQWEsQ0FBQ0MsSUFGbkQsRUFFeURDLFNBQVMsQ0FBQ0MsdUJBQVYsQ0FBa0NHLFNBRjNGO0FBR0E7QUFDRCxLQXRORCxNQXNOTztBQUNOaEosTUFBQUEsZ0JBQWdCLENBQUNzSSxjQUFqQixHQUFrQ0MsUUFBbEMsQ0FBMkNDLGFBQWEsQ0FBQ1MsUUFBekQsRUFBbUVQLGFBQWEsQ0FBQ0MsSUFBakYsRUFBdUZDLFNBQVMsQ0FBQ0MsdUJBQVYsQ0FBa0NHLFNBQXpIO0FBQ0E7O0FBQ0QsUUFBSUUsTUFBTSxDQUFDbkYsSUFBUCxDQUFZM0IsWUFBWixFQUEwQlQsTUFBMUIsR0FBbUMsQ0FBdkMsRUFBMEM7QUFDekMsYUFBT1MsWUFBUDtBQUNBO0FBQ0QiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSwgZ2V0SXNSZXF1aXJlZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpbHRlclRlbXBsYXRpbmdcIjtcbmltcG9ydCB7IGNvbXBpbGVCaW5kaW5nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgSXNzdWVUeXBlLCBJc3N1ZVNldmVyaXR5LCBJc3N1ZUNhdGVnb3J5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcblxuZXhwb3J0IHR5cGUgVmlzdWFsRmlsdGVycyA9IHtcblx0ZGltZW5zaW9uUGF0aD86IHN0cmluZztcblx0bWVhc3VyZVBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRjaGFydEFubm90YXRpb24/OiBzdHJpbmc7XG5cdHByZXNlbnRhdGlvbkFubm90YXRpb24/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRvdXRQYXJhbWV0ZXI/OiBzdHJpbmc7XG5cdGluUGFyYW1ldGVycz86IG9iamVjdFtdO1xuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0c2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24/OiBzdHJpbmc7XG5cdG11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZD86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0c2hvd092ZXJsYXlJbml0aWFsbHk/OiBib29sZWFuO1xuXHRyZW5kZXJMaW5lQ2hhcnQ/OiBib29sZWFuO1xuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBvYmplY3RbXTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgbWVhc3VyZXMgYW5kIGRpbWVuc2lvbnMgb2YgdGhlIHZpc3VhbCBmaWx0ZXIgY2hhcnQgY2FuIGJlIGFnZ3JlZ2F0ZWQgYW5kIGdyb3VwZWQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjaGFydEFubm90YXRpb24gVGhlIGNoYXJ0IGFubm90YXRpb25cbiAqIEBwYXJhbSBhZ2dyZWdhdGlvbkhlbHBlciBUaGUgYWdncmVnYXRpb24gaGVscGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbiB8IHVuZGVmaW5lZCB9XG4gKi9cbmNvbnN0IF9jaGVja1ZGQWdncmVnYXRpb24gPSBmdW5jdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0Y2hhcnRBbm5vdGF0aW9uOiBhbnksXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBhbnlcbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRsZXQgc01lYXN1cmVQYXRoLCBiR3JvdXBhYmxlLCBiQWdncmVnYXRhYmxlO1xuXHRjb25zdCBzTWVhc3VyZTogc3RyaW5nID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5NZWFzdXJlc1swXT8udmFsdWU7XG5cdGNvbnN0IHNEaW1lbnNpb246IHN0cmluZyA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8udmFsdWU7XG5cdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBhVHJhbnNBZ2dyZWdhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFwiQW5hbHl0aWNzXCIsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnRpZXNcIixcblx0XHRbY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCldXG5cdCk7XG5cdGlmIChjdXN0b21BZ2dyZWdhdGVzW3NNZWFzdXJlXSkge1xuXHRcdHNNZWFzdXJlUGF0aCA9IHNNZWFzdXJlO1xuXHR9IGVsc2UgaWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucyAmJiBhVHJhbnNBZ2dyZWdhdGlvbnNbMF0pIHtcblx0XHRjb25zdCBhQWdncmVnYXRpb25zID0gYVRyYW5zQWdncmVnYXRpb25zWzBdO1xuXHRcdGFBZ2dyZWdhdGlvbnMuc29tZShmdW5jdGlvbihvQWdncmVnYXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQWdncmVnYXRlLk5hbWUgPT09IHNNZWFzdXJlKSB7XG5cdFx0XHRcdHNNZWFzdXJlUGF0aCA9IG9BZ2dyZWdhdGU/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzKCk7XG5cdGNvbnN0IGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRHcm91cGFibGVQcm9wZXJ0aWVzKCk7XG5cdGlmIChhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyICYmIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGFibGVQcm9wIG9mIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdGlmIChhZ2dyZWdhdGFibGVQcm9wPy5Qcm9wZXJ0eT8udmFsdWUgPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRiQWdncmVnYXRhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGdyb3VwYWJsZVByb3Agb2YgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGdyb3VwYWJsZVByb3A/LnZhbHVlID09PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRcdGJHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYkFnZ3JlZ2F0YWJsZSAmJiBiR3JvdXBhYmxlO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZ2V0IHRoZSB2aXN1YWwgZmlsdGVycyBvYmplY3QgZm9yIGEgcHJvcGVydHkuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gc1Byb3BlcnR5UGF0aCBUaGUgYWdncmVnYXRpb24gaGVscGVyXG4gKiBAcGFyYW0gRmlsdGVyRmllbGRzIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEBwYXJhbSBwYXJhbWV0ZXJFbnRpdHlUeXBlXG4gKiBAcmV0dXJucyB7VmlzdWFsRmlsdGVycyB8IHVuZGVmaW5lZCB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXN1YWxGaWx0ZXJzKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRzUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+LFxuXHRwYXJhbWV0ZXJFbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBWaXN1YWxGaWx0ZXJzIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdmlzdWFsRmlsdGVyOiBWaXN1YWxGaWx0ZXJzID0ge307XG5cdGNvbnN0IG9WaXN1YWxGaWx0ZXI6IEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uID0gRmlsdGVyRmllbGRzW3NQcm9wZXJ0eVBhdGhdO1xuXHRpZiAob1Zpc3VhbEZpbHRlciAmJiBvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXIgJiYgb1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyPy52YWx1ZUxpc3QpIHtcblx0XHRjb25zdCBvVkZQYXRoID0gb1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyPy52YWx1ZUxpc3Q7XG5cdFx0Y29uc3QgYW5ub3RhdGlvblF1YWxpZmllclNwbGl0ID0gb1ZGUGF0aC5zcGxpdChcIiNcIik7XG5cdFx0Y29uc3QgcXVhbGlmaWVyVkwgPSBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQubGVuZ3RoID4gMSA/IFwiVmFsdWVMaXN0I1wiICsgYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzFdIDogYW5ub3RhdGlvblF1YWxpZmllclNwbGl0WzBdO1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChzUHJvcGVydHlQYXRoKTtcblx0XHRjb25zdCB2YWx1ZUxpc3Q6IGFueSA9IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uW3F1YWxpZmllclZMXTtcblx0XHRpZiAodmFsdWVMaXN0KSB7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uUGF0aCA9IHZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGg7XG5cdFx0XHRsZXQgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFxuXHRcdFx0XHRcIi9cIiArIChjb2xsZWN0aW9uUGF0aCB8fCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5uYW1lKVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IHZhbHVlTGlzdFBhcmFtcyA9IHZhbHVlTGlzdD8uUGFyYW1ldGVycztcblx0XHRcdGxldCBvdXRQYXJhbWV0ZXI6IGFueTtcblx0XHRcdGNvbnN0IGluUGFyYW1ldGVyczogQXJyYXk8b2JqZWN0PiA9IFtdO1xuXHRcdFx0bGV0IGFQYXJhbWV0ZXJzOiBBcnJheTxzdHJpbmc+ID0gW107XG5cdFx0XHRpZiAoIWNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5U2V0KSB7XG5cdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKFwiXCIpO1xuXHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIHtcblx0XHRcdFx0YVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJFbnRpdHlUeXBlXG5cdFx0XHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmtleXMubWFwKGZ1bmN0aW9uKGtleSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHRcdFx0ICB9KVxuXHRcdFx0XHRcdDogW107XG5cdFx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0XHRpblBhcmFtZXRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eTogcGFyYW1ldGVyLFxuXHRcdFx0XHRcdFx0dmFsdWVMaXN0UHJvcGVydHk6IHBhcmFtZXRlclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZUxpc3RQYXJhbSBvZiB2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbERhdGFQcm9wZXJ0eSA9ICh2YWx1ZUxpc3RQYXJhbSBhcyBhbnkpLkxvY2FsRGF0YVByb3BlcnR5Py52YWx1ZTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eSA9ICh2YWx1ZUxpc3RQYXJhbSBhcyBhbnkpLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIikgJiZcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggPT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvdXRQYXJhbWV0ZXIgPSB2YWx1ZUxpc3RQYXJhbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluXCIpICYmXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoICE9PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYk5vdEZpbHRlcmFibGUgPSBpc1Byb3BlcnR5RmlsdGVyYWJsZShjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsIHZhbHVlTGlzdFByb3BlcnR5KTtcblx0XHRcdFx0XHRcdGlmICghYk5vdEZpbHRlcmFibGUpIHtcblx0XHRcdFx0XHRcdFx0aW5QYXJhbWV0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBsb2NhbERhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogdmFsdWVMaXN0UHJvcGVydHlcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoaW5QYXJhbWV0ZXJzICYmIGluUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdFx0aW5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ob0luUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LmxvY2FsRGF0YVByb3BlcnR5KSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LnZhbHVlTGlzdFByb3BlcnR5KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID09PSBcInRydWVcIiAmJiBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRcIkZpbHRlclJlc3RyaWN0aW9ucyBvZiBcIiArIHNQcm9wZXJ0eVBhdGggKyBcIiBpbiBNYWluRW50aXR5U2V0IGFuZCBWYWx1ZUxpc3RFbnRpdHlTZXQgYXJlIGRpZmZlcmVudFwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwdlF1YWxpZmllciA9IHZhbHVlTGlzdD8uUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHN2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5TZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3QgcHZBbm5vdGF0aW9uOiBhbnkgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKFwiQFVJLlByZXNlbnRhdGlvblZhcmlhbnQjXCIgKyBwdlF1YWxpZmllcilcblx0XHRcdFx0Py5hbm5vdGF0aW9uO1xuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAocHZBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFWaXN1YWxpemF0aW9ucyA9IHB2QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gXCIvXCIgKyB2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRoIHx8IFwiL1wiICsgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKT8ubmFtZTtcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmNvbnRleHRQYXRoID0gY29udGV4dFBhdGg7XG5cdFx0XHRcdGxldCBjaGFydEFubm90YXRpb247XG5cdFx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBhVmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi4kdGFyZ2V0Py50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpIHtcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IF9iZ2V0VkZBZ2dyZWdhdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IF9jaGVja1ZGQWdncmVnYXRpb24oXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlclxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKCFfYmdldFZGQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYkRpbWVuc2lvbkhpZGRlbjogYm9vbGVhbiA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKTtcblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuRmlsdGVyOiBib29sZWFuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGlmIChiRGltZW5zaW9uSGlkZGVuID09PSB0cnVlIHx8IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFWaXN1YWxpemF0aW9ucyAmJiBhVmlzdWFsaXphdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuY2hhcnRBbm5vdGF0aW9uID0gY2hhcnRBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSArIFwiLyRBbm5vdGF0aW9uUGF0aC9cIlxuXHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IHB2QW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChwdkFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lICsgXCIvXCIpXG5cdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLm91dFBhcmFtZXRlciA9IG91dFBhcmFtZXRlcj8uTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycyA9IGluUGFyYW1ldGVycztcblx0XHRcdFx0XHRcdGNvbnN0IGJJc1JhbmdlID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVJhbmdlXCIsIFwiTXVsdGlSYW5nZVwiXVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKGNvbXBpbGVCaW5kaW5nKGJJc1JhbmdlKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUmFuZ2UgQWxsb3dlZEV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdmlzdWFsIGZpbHRlcnNcIik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb246IGFueSA9IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChzUHJvcGVydHlQYXRoKSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5tdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQgPSBjb21waWxlQmluZGluZyghYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbi52YWx1ZSkgYXMgYW55O1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkID0gZ2V0SXNSZXF1aXJlZChjb252ZXJ0ZXJDb250ZXh0LCBzUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdGxldCBzdkFubm90YXRpb246IGFueTtcblx0XHRcdFx0XHRcdGlmIChzdlF1YWxpZmllcikge1xuXHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKFwiQFVJLlNlbGVjdGlvblZhcmlhbnQjXCIgKyBzdlF1YWxpZmllcilcblx0XHRcdFx0XHRcdFx0XHQ/LmFubm90YXRpb247XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA9IHN2QW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHN2QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgKyBcIi9cIilcblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IGVudGl0eVNldEFubm90YXRpb25zID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucztcblx0XHRcdFx0XHRcdGxldCByZXF1aXJlZFByb3BlcnR5UGF0aHM6IEFycmF5PG9iamVjdD4gPSBbXTtcblx0XHRcdFx0XHRcdGNvbnN0IHJlcXVpcmVkUHJvcGVydGllcyA9IGVudGl0eVNldEFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzIGFzIGFueVtdO1xuXHRcdFx0XHRcdFx0aWYgKHJlcXVpcmVkUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKG9SZXF1aXJlUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocy5wdXNoKG9SZXF1aXJlUHJvcGVydHkudmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5jb25jYXQoYVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHRcdGlmICh2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzIHx8ICF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0T3B0aW9uczogYW55W10gPSBzdkFubm90YXRpb24/LlNlbGVjdE9wdGlvbnMubWFwKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQob1NlbGVjdE9wdGlvbjogYW55KSA9PiBvU2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS52YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5zb3J0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5zb3J0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuc29tZShmdW5jdGlvbihzUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VsZWN0T3B0aW9ucy5pbmRleE9mKHNQYXRoKSA9PT0gLTE7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0RpbWVuc2lvblR5cGUgPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LnR5cGU7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdCEoXG5cdFx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIgfHxcblx0XHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiXG5cdFx0XHRcdFx0XHRcdCkgJiZcblx0XHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLiR0YXJnZXQuQ2hhcnRUeXBlID09PSBcIlVJLkNoYXJ0VHlwZS9MaW5lXCJcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVuZGVyTGluZUNoYXJ0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVuZGVyTGluZUNoYXJ0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLkNIQVJUKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuUFJFU0VOVEFUSU9OVkFSSUFOVCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuTWFuaWZlc3QsIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdH1cblx0aWYgKE9iamVjdC5rZXlzKHZpc3VhbEZpbHRlcikubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB2aXN1YWxGaWx0ZXI7XG5cdH1cbn1cbiJdfQ==
364
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlcnMudHMiXSwibmFtZXMiOlsiX2NoZWNrVkZBZ2dyZWdhdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsInNNZWFzdXJlUGF0aCIsImJHcm91cGFibGUiLCJiQWdncmVnYXRhYmxlIiwic01lYXN1cmUiLCIkdGFyZ2V0IiwiTWVhc3VyZXMiLCJ2YWx1ZSIsInNEaW1lbnNpb24iLCJEaW1lbnNpb25zIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJzb21lIiwiY3VzdEFnZyIsInF1YWxpZmllciIsImFBZ2dyZWdhdGlvbnMiLCJvQWdncmVnYXRlIiwiTmFtZSIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsImxlbmd0aCIsImFnZ3JlZ2F0YWJsZVByb3AiLCJQcm9wZXJ0eSIsImdyb3VwYWJsZVByb3AiLCJnZXRWaXN1YWxGaWx0ZXJzIiwiZW50aXR5VHlwZSIsInNQcm9wZXJ0eVBhdGgiLCJGaWx0ZXJGaWVsZHMiLCJ2aXN1YWxGaWx0ZXIiLCJvVmlzdWFsRmlsdGVyIiwidmFsdWVMaXN0Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInNwbGl0IiwicXVhbGlmaWVyVkwiLCJwcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJjb2xsZWN0aW9uUGF0aCIsIkNvbGxlY3Rpb25QYXRoIiwiY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEVudGl0eVNldCIsIm5hbWUiLCJ2YWx1ZUxpc3RQYXJhbXMiLCJQYXJhbWV0ZXJzIiwib3V0UGFyYW1ldGVyIiwiaW5QYXJhbWV0ZXJzIiwiYVBhcmFtZXRlcnMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInBhcmFtZXRlckVudGl0eVR5cGUiLCJnZXRQYXJhbWV0ZXJFbnRpdHlUeXBlIiwia2V5cyIsIm1hcCIsImtleSIsImdldENvbnRleHRQYXRoIiwiZm9yRWFjaCIsInBhcmFtZXRlciIsInB1c2giLCJsb2NhbERhdGFQcm9wZXJ0eSIsInZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0UGFyYW0iLCJMb2NhbERhdGFQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5IiwiJFR5cGUiLCJiTm90RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwib0luUGFyYW1ldGVyIiwibWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiY29tcGlsZUJpbmRpbmciLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwidmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJFcnJvciIsInB2UXVhbGlmaWVyIiwiUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllciIsInN2UXVhbGlmaWVyIiwiU2VsZWN0aW9uVmFyaWFudFF1YWxpZmllciIsInB2QW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwidGVybSIsIl9iZ2V0VkZBZ2dyZWdhdGlvbiIsImJEaW1lbnNpb25IaWRkZW4iLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwiSGlkZGVuRmlsdGVyIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidW5kZWZpbmVkIiwicHJlc2VudGF0aW9uQW5ub3RhdGlvbiIsImJJc1JhbmdlIiwiYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsInJlcXVpcmVkIiwiZ2V0SXNSZXF1aXJlZCIsInN2QW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwic0VudGl0eVNldCIsInNOYXZpZ2F0aW9uUHJvcGVydHkiLCJvRW50aXR5U2V0Q29udmVydGVyQ29udGV4dCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsInN0YXJ0aW5nRW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsImZpbmQiLCJyZXN0cmljdGVkTmF2UHJvcCIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsInR5cGUiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJlbnRpdHlTZXRBbm5vdGF0aW9ucyIsInJlcXVpcmVkUHJvcGVydHlQYXRocyIsIm9SZXF1aXJlUHJvcGVydHkiLCJjb25jYXQiLCJzaG93T3ZlcmxheUluaXRpYWxseSIsInNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwib1NlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInBhcmFtZXRlck9wdGlvbnMiLCJvUGFyYW1ldGVyT3B0aW9uIiwic29ydCIsInNQYXRoIiwiaW5kZXhPZiIsInNEaW1lbnNpb25UeXBlIiwiQ2hhcnRUeXBlIiwicmVuZGVyTGluZUNoYXJ0IiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfVklTVUFMRklMVEVSUyIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIlZBTFVFTElTVCIsIk1hbmlmZXN0IiwiT2JqZWN0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1BLG1CQUFtQixHQUFHLFVBQzNCQyxnQkFEMkIsRUFFM0JDLGVBRjJCLEVBRzNCQyxpQkFIMkIsRUFJTDtBQUFBOztBQUN0QixRQUFJQyxZQUFKLEVBQWtCQyxVQUFsQixFQUE4QkMsYUFBOUI7QUFDQSxRQUFNQyxRQUFnQixHQUFHTCxlQUFILGFBQUdBLGVBQUgsZ0RBQUdBLGVBQWUsQ0FBRU0sT0FBcEIsb0ZBQUcsc0JBQTBCQyxRQUExQixDQUFtQyxDQUFuQyxDQUFILDJEQUFHLHVCQUF1Q0MsS0FBaEU7QUFDQSxRQUFNQyxVQUFrQixHQUFHVCxlQUFILGFBQUdBLGVBQUgsaURBQUdBLGVBQWUsQ0FBRU0sT0FBcEIscUZBQUcsdUJBQTBCSSxVQUExQixDQUFxQyxDQUFyQyxDQUFILDJEQUFHLHVCQUF5Q0YsS0FBcEU7QUFDQSxRQUFNRyxnQkFBZ0IsR0FBR1YsaUJBQWlCLENBQUNXLDZCQUFsQixFQUF6QjtBQUNBLFFBQU1DLGtCQUFrQixHQUFHWixpQkFBaUIsQ0FBQ2Esb0JBQWxCLEVBQTNCOztBQUVBLFFBQ0NILGdCQUFnQixDQUFDSSxJQUFqQixDQUFzQixVQUFTQyxPQUFULEVBQW1EO0FBQ3hFLGFBQU9BLE9BQU8sQ0FBQ0MsU0FBUixLQUFzQlosUUFBN0I7QUFDQSxLQUZELENBREQsRUFJRTtBQUNESCxNQUFBQSxZQUFZLEdBQUdHLFFBQWY7QUFDQSxLQU5ELE1BTU8sSUFBSVEsa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDLENBQUQsQ0FBNUMsRUFBaUQ7QUFD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RXlEQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDQyxLQUYzRjtBQUdBO0FBQ0QsU0FsSUQsTUFrSU87QUFDTjdKLFVBQUFBLGdCQUFnQixDQUNkcUosY0FERixHQUVFQyxRQUZGLENBRVdDLGFBQWEsQ0FBQ0MsVUFGekIsRUFFcUNDLGFBQWEsQ0FBQ0MsSUFGbkQsRUFFeURDLFNBQVMsQ0FBQ0MsdUJBQVYsQ0FBa0NFLG1CQUYzRjtBQUdBO0FBQ0QsT0EvTkQsTUErTk87QUFDTjlKLFFBQUFBLGdCQUFnQixDQUNkcUosY0FERixHQUVFQyxRQUZGLENBRVdDLGFBQWEsQ0FBQ0MsVUFGekIsRUFFcUNDLGFBQWEsQ0FBQ0MsSUFGbkQsRUFFeURDLFNBQVMsQ0FBQ0MsdUJBQVYsQ0FBa0NHLFNBRjNGO0FBR0E7QUFDRCxLQTFPRCxNQTBPTztBQUNOL0osTUFBQUEsZ0JBQWdCLENBQUNxSixjQUFqQixHQUFrQ0MsUUFBbEMsQ0FBMkNDLGFBQWEsQ0FBQ1MsUUFBekQsRUFBbUVQLGFBQWEsQ0FBQ0MsSUFBakYsRUFBdUZDLFNBQVMsQ0FBQ0MsdUJBQVYsQ0FBa0NHLFNBQXpIO0FBQ0E7O0FBQ0QsUUFBSUUsTUFBTSxDQUFDbEcsSUFBUCxDQUFZNUIsWUFBWixFQUEwQlIsTUFBMUIsR0FBbUMsQ0FBdkMsRUFBMEM7QUFDekMsYUFBT1EsWUFBUDtBQUNBO0FBQ0QiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSwgZ2V0SXNSZXF1aXJlZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpbHRlclRlbXBsYXRpbmdcIjtcbmltcG9ydCB7IGNvbXBpbGVCaW5kaW5nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgSXNzdWVUeXBlLCBJc3N1ZVNldmVyaXR5LCBJc3N1ZUNhdGVnb3J5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9uVGVybSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQWdncmVnYXRlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0FnZ3JlZ2F0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIFZpc3VhbEZpbHRlcnMgPSB7XG5cdGRpbWVuc2lvblBhdGg/OiBzdHJpbmc7XG5cdG1lYXN1cmVQYXRoPzogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0Y2hhcnRBbm5vdGF0aW9uPzogc3RyaW5nO1xuXHRwcmVzZW50YXRpb25Bbm5vdGF0aW9uPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0b3V0UGFyYW1ldGVyPzogc3RyaW5nO1xuXHRpblBhcmFtZXRlcnM/OiBvYmplY3RbXTtcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogc3RyaW5nO1xuXHRtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQ/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdHNob3dPdmVybGF5SW5pdGlhbGx5PzogYm9vbGVhbjtcblx0cmVuZGVyTGluZUNoYXJ0PzogYm9vbGVhbjtcblx0cmVxdWlyZWRQcm9wZXJ0aWVzPzogb2JqZWN0W107XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IG1lYXN1cmVzIGFuZCBkaW1lbnNpb25zIG9mIHRoZSB2aXN1YWwgZmlsdGVyIGNoYXJ0IGNhbiBiZSBhZ2dyZWdhdGVkIGFuZCBncm91cGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9uIFRoZSBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYWdncmVnYXRpb25IZWxwZXIgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMge2Jvb2xlYW4gfCB1bmRlZmluZWQgfVxuICovXG5jb25zdCBfY2hlY2tWRkFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNoYXJ0QW5ub3RhdGlvbjogYW55LFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogYW55XG4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNNZWFzdXJlUGF0aCwgYkdyb3VwYWJsZSwgYkFnZ3JlZ2F0YWJsZTtcblx0Y29uc3Qgc01lYXN1cmU6IHN0cmluZyA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXNbMF0/LnZhbHVlO1xuXHRjb25zdCBzRGltZW5zaW9uOiBzdHJpbmcgPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LnZhbHVlO1xuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0Y29uc3QgYVRyYW5zQWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblxuXHRpZiAoXG5cdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uKGN1c3RBZ2c6IEFubm90YXRpb25UZXJtPEN1c3RvbUFnZ3JlZ2F0ZT4pIHtcblx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gc01lYXN1cmU7XG5cdFx0fSlcblx0KSB7XG5cdFx0c01lYXN1cmVQYXRoID0gc01lYXN1cmU7XG5cdH0gZWxzZSBpZiAoYVRyYW5zQWdncmVnYXRpb25zICYmIGFUcmFuc0FnZ3JlZ2F0aW9uc1swXSkge1xuXHRcdGNvbnN0IGFBZ2dyZWdhdGlvbnMgPSBhVHJhbnNBZ2dyZWdhdGlvbnNbMF07XG5cdFx0YUFnZ3JlZ2F0aW9ucy5zb21lKGZ1bmN0aW9uKG9BZ2dyZWdhdGU6IGFueSkge1xuXHRcdFx0aWYgKG9BZ2dyZWdhdGUuTmFtZSA9PT0gc01lYXN1cmUpIHtcblx0XHRcdFx0c01lYXN1cmVQYXRoID0gb0FnZ3JlZ2F0ZT8uQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Y29uc3QgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKTtcblx0Y29uc3QgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEdyb3VwYWJsZVByb3BlcnRpZXMoKTtcblx0aWYgKGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3Agb2YgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGFnZ3JlZ2F0YWJsZVByb3A/LlByb3BlcnR5Py52YWx1ZSA9PT0gc01lYXN1cmVQYXRoKSB7XG5cdFx0XHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciAmJiBhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyLmxlbmd0aCkge1xuXHRcdGZvciAoY29uc3QgZ3JvdXBhYmxlUHJvcCBvZiBhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyKSB7XG5cdFx0XHRpZiAoZ3JvdXBhYmxlUHJvcD8udmFsdWUgPT09IHNEaW1lbnNpb24pIHtcblx0XHRcdFx0Ykdyb3VwYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBiQWdncmVnYXRhYmxlICYmIGJHcm91cGFibGU7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgdGhlIHZpc3VhbCBmaWx0ZXJzIG9iamVjdCBmb3IgYSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNoYXJ0IGFubm90YXRpb25cbiAqIEBwYXJhbSBzUHJvcGVydHlQYXRoIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEBwYXJhbSBGaWx0ZXJGaWVsZHMgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMge1Zpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQgfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzdWFsRmlsdGVycyhcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c1Byb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uPlxuKTogVmlzdWFsRmlsdGVycyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHZpc3VhbEZpbHRlcjogVmlzdWFsRmlsdGVycyA9IHt9O1xuXHRjb25zdCBvVmlzdWFsRmlsdGVyOiBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IEZpbHRlckZpZWxkc1tzUHJvcGVydHlQYXRoXTtcblx0aWYgKG9WaXN1YWxGaWx0ZXIgJiYgb1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyICYmIG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0KSB7XG5cdFx0Y29uc3Qgb1ZGUGF0aCA9IG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0O1xuXHRcdGNvbnN0IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdCA9IG9WRlBhdGguc3BsaXQoXCIjXCIpO1xuXHRcdGNvbnN0IHF1YWxpZmllclZMID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0Lmxlbmd0aCA+IDEgPyBcIlZhbHVlTGlzdCNcIiArIGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFsxXSA6IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFswXTtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgoc1Byb3BlcnR5UGF0aCk7XG5cdFx0Y29uc3QgdmFsdWVMaXN0OiBhbnkgPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbltxdWFsaWZpZXJWTF07XG5cdFx0aWYgKHZhbHVlTGlzdCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSB2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRoO1xuXHRcdFx0bGV0IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XCIvXCIgKyAoY29sbGVjdGlvblBhdGggfHwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8ubmFtZSlcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbXMgPSB2YWx1ZUxpc3Q/LlBhcmFtZXRlcnM7XG5cdFx0XHRsZXQgb3V0UGFyYW1ldGVyOiBhbnk7XG5cdFx0XHRjb25zdCBpblBhcmFtZXRlcnM6IEFycmF5PG9iamVjdD4gPSBbXTtcblx0XHRcdGxldCBhUGFyYW1ldGVyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXHRcdFx0aWYgKCFjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihcIlwiKTtcblx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpO1xuXHRcdFx0YVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJFbnRpdHlUeXBlXG5cdFx0XHRcdD8gcGFyYW1ldGVyRW50aXR5VHlwZS5rZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBrZXkubmFtZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIHtcblx0XHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXI6IGFueSkge1xuXHRcdFx0XHRcdGluUGFyYW1ldGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogcGFyYW1ldGVyXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlTGlzdFBhcmFtcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlTGlzdFBhcmFtIG9mIHZhbHVlTGlzdFBhcmFtcykge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsRGF0YVByb3BlcnR5ID0gKHZhbHVlTGlzdFBhcmFtIGFzIGFueSkuTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnR5ID0gKHZhbHVlTGlzdFBhcmFtIGFzIGFueSkuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5UGF0aCA9PT0gbG9jYWxEYXRhUHJvcGVydHlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG91dFBhcmFtZXRlciA9IHZhbHVlTGlzdFBhcmFtO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQodmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiIHx8XG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5cIikgJiZcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggIT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBiTm90RmlsdGVyYWJsZSA9IGlzUHJvcGVydHlGaWx0ZXJhYmxlKGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCwgdmFsdWVMaXN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0aWYgKCFiTm90RmlsdGVyYWJsZSkge1xuXHRcdFx0XHRcdFx0XHRpblBhcmFtZXRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHk6IGxvY2FsRGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFByb3BlcnR5OiB2YWx1ZUxpc3RQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChpblBhcmFtZXRlcnMgJiYgaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRpblBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihvSW5QYXJhbWV0ZXI6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8ubG9jYWxEYXRhUHJvcGVydHkpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8udmFsdWVMaXN0UHJvcGVydHkpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAodmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwidHJ1ZVwiICYmIG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdFwiRmlsdGVyUmVzdHJpY3Rpb25zIG9mIFwiICsgc1Byb3BlcnR5UGF0aCArIFwiIGluIE1haW5FbnRpdHlTZXQgYW5kIFZhbHVlTGlzdEVudGl0eVNldCBhcmUgZGlmZmVyZW50XCJcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHB2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5QcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3Qgc3ZRdWFsaWZpZXIgPSB2YWx1ZUxpc3Q/LlNlbGVjdGlvblZhcmlhbnRRdWFsaWZpZXI7XG5cdFx0XHRjb25zdCBwdkFubm90YXRpb246IGFueSA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJAVUkuUHJlc2VudGF0aW9uVmFyaWFudCNcIiArIHB2UXVhbGlmaWVyKVxuXHRcdFx0XHQ/LmFubm90YXRpb247XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChwdkFubm90YXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYVZpc3VhbGl6YXRpb25zID0gcHZBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucztcblx0XHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBcIi9cIiArIHZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGggfHwgXCIvXCIgKyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVNldCgpPy5uYW1lO1xuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aDtcblx0XHRcdFx0bGV0IGNoYXJ0QW5ub3RhdGlvbjtcblx0XHRcdFx0Zm9yIChjb25zdCB2aXN1YWxpemF0aW9uIG9mIGFWaXN1YWxpemF0aW9ucykge1xuXHRcdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLiR0YXJnZXQ/LnRlcm0gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIikge1xuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uID0gdmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0Y29uc3QgX2JnZXRWRkFnZ3JlZ2F0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gX2NoZWNrVkZBZ2dyZWdhdGlvbihcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoIV9iZ2V0VkZBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuOiBib29sZWFuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXI6IGJvb2xlYW4gPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCk7XG5cdFx0XHRcdFx0aWYgKGJEaW1lbnNpb25IaWRkZW4gPT09IHRydWUgfHwgYkRpbWVuc2lvbkhpZGRlbkZpbHRlciA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYVZpc3VhbGl6YXRpb25zICYmIGFWaXN1YWxpemF0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5jaGFydEFubm90YXRpb24gPSBjaGFydEFubm90YXRpb25cblx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lICsgXCIvJEFubm90YXRpb25QYXRoL1wiXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5wcmVzZW50YXRpb25Bbm5vdGF0aW9uID0gcHZBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHB2QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgKyBcIi9cIilcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIub3V0UGFyYW1ldGVyID0gb3V0UGFyYW1ldGVyPy5Mb2NhbERhdGFQcm9wZXJ0eT8udmFsdWU7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzID0gaW5QYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0Y29uc3QgYklzUmFuZ2UgPSBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc1Byb3BlcnR5UGF0aCkpXG5cdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCJdXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoY29tcGlsZUJpbmRpbmcoYklzUmFuZ2UpID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJSYW5nZSBBbGxvd2VkRXhwcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB2aXN1YWwgZmlsdGVyc1wiKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbjogYW55ID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCA9IGNvbXBpbGVCaW5kaW5nKCFiSXNNYWluRW50aXR5U2V0U2luZ2xlU2VsZWN0aW9uLnZhbHVlKSBhcyBhbnk7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVxdWlyZWQgPSBnZXRJc1JlcXVpcmVkKGNvbnZlcnRlckNvbnRleHQsIHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdFx0bGV0IHN2QW5ub3RhdGlvbjogYW55O1xuXHRcdFx0XHRcdFx0aWYgKHN2UXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJAVUkuU2VsZWN0aW9uVmFyaWFudCNcIiArIHN2UXVhbGlmaWVyKVxuXHRcdFx0XHRcdFx0XHRcdD8uYW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gc3ZBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc3ZBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSArIFwiL1wiKVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydGllcyA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVswXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc05hdmlnYXRpb25Qcm9wZXJ0eSA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXCIvXCIgKyBzRW50aXR5U2V0KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID0gb0VudGl0eVNldENvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5zdGFydGluZ0VudGl0eVNldFxuXHRcdFx0XHRcdFx0XHRcdD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucz8uUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9SZXN0cmljdGVkUHJvcGVydHkgPSBhUmVzdHJpY3RlZFByb3BlcnRpZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0KHJlc3RyaWN0ZWROYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5Py50eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5LnZhbHVlID09PSBzTmF2aWdhdGlvblByb3BlcnR5O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gb1Jlc3RyaWN0ZWRQcm9wZXJ0eT8uRmlsdGVyUmVzdHJpY3Rpb25zPy5SZXF1aXJlZFByb3BlcnRpZXMgYXMgYW55W107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXRBbm5vdGF0aW9ucyA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9IGVudGl0eVNldEFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzIGFzIGFueVtdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydHlQYXRoczogQXJyYXk8b2JqZWN0PiA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHJlcXVpcmVkUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKG9SZXF1aXJlUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocy5wdXNoKG9SZXF1aXJlUHJvcGVydHkudmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5jb25jYXQoYVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHRcdGlmICh2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzIHx8ICF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0T3B0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uU2VsZWN0T3B0aW9ucz8ubWFwKChvU2VsZWN0T3B0aW9uOiBhbnkpID0+IG9TZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lLnZhbHVlKSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtZXRlck9wdGlvbnMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24/LlBhcmFtZXRlcnM/Lm1hcCgob1BhcmFtZXRlck9wdGlvbjogYW55KSA9PiBvUGFyYW1ldGVyT3B0aW9uLlByb3BlcnR5TmFtZS52YWx1ZSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQocGFyYW1ldGVyT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvbWUoZnVuY3Rpb24oc1BhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGVjdE9wdGlvbnMuaW5kZXhPZihzUGF0aCkgPT09IC0xO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHNEaW1lbnNpb25UeXBlID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py50eXBlO1xuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQhKFxuXHRcdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5UaW1lT2ZEYXlcIlxuXHRcdFx0XHRcdFx0XHQpICYmXG5cdFx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0LkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlbmRlckxpbmVDaGFydCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlbmRlckxpbmVDaGFydCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5DSEFSVCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlBSRVNFTlRBVElPTlZBUklBTlQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHR9XG5cdGlmIChPYmplY3Qua2V5cyh2aXN1YWxGaWx0ZXIpLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gdmlzdWFsRmlsdGVyO1xuXHR9XG59XG4iXX0=
@@ -6,6 +6,9 @@ import { compileBinding } from "sap/fe/core/helpers/BindingExpression";
6
6
  import { checkFilterExpressionRestrictions } from "sap/fe/core/templating/DataModelPathHelper";
7
7
  import { AggregationHelper } from "sap/fe/core/converters/helpers/Aggregation";
8
8
  import { IssueType, IssueSeverity, IssueCategory } from "sap/fe/core/converters/helpers/IssueManager";
9
+ import { NavigationPropertyRestrictionTypes } from "@sap-ux/vocabularies-types/dist/generated/Capabilities";
10
+ import { AnnotationTerm } from "@sap-ux/vocabularies-types";
11
+ import { CustomAggregate } from "@sap-ux/vocabularies-types/dist/generated/Aggregation";
9
12
 
10
13
  export type VisualFilters = {
11
14
  dimensionPath?: string;
@@ -41,12 +44,13 @@ const _checkVFAggregation = function(
41
44
  const sMeasure: string = chartAnnotation?.$target?.Measures[0]?.value;
42
45
  const sDimension: string = chartAnnotation?.$target?.Dimensions[0]?.value;
43
46
  const customAggregates = aggregationHelper.getCustomAggregateDefinitions();
44
- const aTransAggregations = converterContext.getAnnotationsByTerm(
45
- "Analytics",
46
- "com.sap.vocabularies.Analytics.v1.AggregatedProperties",
47
- [converterContext.getEntityContainer(), converterContext.getEntityType()]
48
- );
49
- if (customAggregates[sMeasure]) {
47
+ const aTransAggregations = aggregationHelper.getTransAggregations();
48
+
49
+ if (
50
+ customAggregates.some(function(custAgg: AnnotationTerm<CustomAggregate>) {
51
+ return custAgg.qualifier === sMeasure;
52
+ })
53
+ ) {
50
54
  sMeasurePath = sMeasure;
51
55
  } else if (aTransAggregations && aTransAggregations[0]) {
52
56
  const aAggregations = aTransAggregations[0];
@@ -81,15 +85,13 @@ const _checkVFAggregation = function(
81
85
  * @param converterContext The chart annotation
82
86
  * @param sPropertyPath The aggregation helper
83
87
  * @param FilterFields The aggregation helper
84
- * @param parameterEntityType
85
88
  * @returns {VisualFilters | undefined }
86
89
  */
87
90
  export function getVisualFilters(
88
91
  entityType: EntityType,
89
92
  converterContext: ConverterContext,
90
93
  sPropertyPath: string,
91
- FilterFields: Record<string, FilterFieldManifestConfiguration>,
92
- parameterEntityType: EntityType
94
+ FilterFields: Record<string, FilterFieldManifestConfiguration>
93
95
  ): VisualFilters | undefined {
94
96
  const visualFilter: VisualFilters = {};
95
97
  const oVisualFilter: FilterFieldManifestConfiguration = FilterFields[sPropertyPath];
@@ -112,12 +114,13 @@ export function getVisualFilters(
112
114
  const resolvedTarget = collectionPathConverterContext.getEntityTypeAnnotation("");
113
115
  collectionPathConverterContext = resolvedTarget.converterContext;
114
116
  }
117
+ const parameterEntityType = collectionPathConverterContext.getParameterEntityType();
118
+ aParameters = parameterEntityType
119
+ ? parameterEntityType.keys.map(function(key) {
120
+ return key.name;
121
+ })
122
+ : [];
115
123
  if (converterContext.getContextPath() === collectionPathConverterContext.getContextPath()) {
116
- aParameters = parameterEntityType
117
- ? parameterEntityType.keys.map(function(key) {
118
- return key.name;
119
- })
120
- : [];
121
124
  aParameters.forEach(function(parameter: any) {
122
125
  inParameters.push({
123
126
  localDataProperty: parameter,
@@ -248,9 +251,26 @@ export function getVisualFilters(
248
251
  ? collectionPathConverterContext?.getAbsoluteAnnotationPath(svAnnotation.fullyQualifiedName + "/")
249
252
  : undefined;
250
253
  }
251
- const entitySetAnnotations = collectionPathConverterContext.getEntitySet()?.annotations;
254
+ let requiredProperties = [];
255
+ if (parameterEntityType) {
256
+ const sEntitySet = collectionPath.split("/")[0];
257
+ const sNavigationProperty = collectionPath.split("/")[1];
258
+ const oEntitySetConverterContext = converterContext.getConverterContextFor("/" + sEntitySet);
259
+ const aRestrictedProperties = oEntitySetConverterContext?.getDataModelObjectPath().startingEntitySet
260
+ ?.annotations?.Capabilities?.NavigationRestrictions?.RestrictedProperties;
261
+ const oRestrictedProperty = aRestrictedProperties?.find(
262
+ (restrictedNavProp: NavigationPropertyRestrictionTypes) => {
263
+ if (restrictedNavProp.NavigationProperty?.type === "NavigationPropertyPath") {
264
+ return restrictedNavProp.NavigationProperty.value === sNavigationProperty;
265
+ }
266
+ }
267
+ );
268
+ requiredProperties = oRestrictedProperty?.FilterRestrictions?.RequiredProperties as any[];
269
+ } else {
270
+ const entitySetAnnotations = collectionPathConverterContext.getEntitySet()?.annotations;
271
+ requiredProperties = entitySetAnnotations?.Capabilities?.FilterRestrictions?.RequiredProperties as any[];
272
+ }
252
273
  let requiredPropertyPaths: Array<object> = [];
253
- const requiredProperties = entitySetAnnotations?.Capabilities?.FilterRestrictions?.RequiredProperties as any[];
254
274
  if (requiredProperties?.length) {
255
275
  requiredProperties.forEach(function(oRequireProperty: any) {
256
276
  requiredPropertyPaths.push(oRequireProperty.value);
@@ -263,9 +283,11 @@ export function getVisualFilters(
263
283
  if (!visualFilter.selectionVariantAnnotation) {
264
284
  visualFilter.showOverlayInitially = true;
265
285
  } else {
266
- let selectOptions: any[] = svAnnotation?.SelectOptions.map(
267
- (oSelectOption: any) => oSelectOption.PropertyName.value
268
- );
286
+ let selectOptions =
287
+ svAnnotation?.SelectOptions?.map((oSelectOption: any) => oSelectOption.PropertyName.value) || [];
288
+ const parameterOptions =
289
+ svAnnotation?.Parameters?.map((oParameterOption: any) => oParameterOption.PropertyName.value) || [];
290
+ selectOptions = selectOptions.concat(parameterOptions);
269
291
  requiredPropertyPaths = requiredPropertyPaths.sort();
270
292
  selectOptions = selectOptions.sort();
271
293
  visualFilter.showOverlayInitially = requiredPropertyPaths.some(function(sPath) {
@@ -0,0 +1,74 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpression) {
6
+ "use strict";
7
+
8
+ var _exports = {};
9
+ var compileBinding = BindingExpression.compileBinding;
10
+ var annotationExpression = BindingExpression.annotationExpression;
11
+
12
+ var AvatarShape;
13
+
14
+ (function (AvatarShape) {
15
+ AvatarShape["Circle"] = "Circle";
16
+ AvatarShape["Square"] = "Square";
17
+ })(AvatarShape || (AvatarShape = {}));
18
+
19
+ var isNaturalPerson = function (converterContext) {
20
+ var _converterContext$get, _converterContext$get2;
21
+
22
+ return ((_converterContext$get = converterContext.getEntityType().annotations.Common) === null || _converterContext$get === void 0 ? void 0 : (_converterContext$get2 = _converterContext$get.IsNaturalPerson) === null || _converterContext$get2 === void 0 ? void 0 : _converterContext$get2.valueOf()) === true;
23
+ };
24
+
25
+ var getFallBackIcon = function (converterContext) {
26
+ var _converterContext$get3, _converterContext$get4;
27
+
28
+ var headerInfo = (_converterContext$get3 = converterContext.getEntityType().annotations) === null || _converterContext$get3 === void 0 ? void 0 : (_converterContext$get4 = _converterContext$get3.UI) === null || _converterContext$get4 === void 0 ? void 0 : _converterContext$get4.HeaderInfo;
29
+
30
+ if (!headerInfo || headerInfo && !headerInfo.ImageUrl && !headerInfo.TypeImageUrl) {
31
+ return undefined;
32
+ }
33
+
34
+ if (headerInfo.ImageUrl && headerInfo.TypeImageUrl) {
35
+ return compileBinding(annotationExpression(headerInfo.TypeImageUrl));
36
+ }
37
+
38
+ return compileBinding(isNaturalPerson(converterContext) ? "sap-icon://person-placeholder" : "sap-icon://product");
39
+ };
40
+
41
+ var getSource = function (converterContext) {
42
+ var _converterContext$get5, _converterContext$get6;
43
+
44
+ var headerInfo = (_converterContext$get5 = converterContext.getEntityType().annotations) === null || _converterContext$get5 === void 0 ? void 0 : (_converterContext$get6 = _converterContext$get5.UI) === null || _converterContext$get6 === void 0 ? void 0 : _converterContext$get6.HeaderInfo;
45
+
46
+ if (!headerInfo || !(headerInfo.ImageUrl || headerInfo.TypeImageUrl)) {
47
+ return undefined;
48
+ }
49
+
50
+ return compileBinding(annotationExpression(headerInfo.ImageUrl || headerInfo.TypeImageUrl));
51
+ };
52
+
53
+ var getAvatar = function (converterContext) {
54
+ var _converterContext$get7, _converterContext$get8;
55
+
56
+ var headerInfo = (_converterContext$get7 = converterContext.getEntityType().annotations) === null || _converterContext$get7 === void 0 ? void 0 : (_converterContext$get8 = _converterContext$get7.UI) === null || _converterContext$get8 === void 0 ? void 0 : _converterContext$get8.HeaderInfo;
57
+ var oSource = headerInfo && (headerInfo.ImageUrl || headerInfo.TypeImageUrl || headerInfo.Initials);
58
+
59
+ if (!oSource) {
60
+ return undefined;
61
+ }
62
+
63
+ return {
64
+ src: getSource(converterContext),
65
+ initials: compileBinding(annotationExpression((headerInfo === null || headerInfo === void 0 ? void 0 : headerInfo.Initials) || "")),
66
+ fallbackIcon: getFallBackIcon(converterContext),
67
+ displayShape: compileBinding(isNaturalPerson(converterContext) ? AvatarShape.Circle : AvatarShape.Square)
68
+ };
69
+ };
70
+
71
+ _exports.getAvatar = getAvatar;
72
+ return _exports;
73
+ }, false);
74
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkF2YXRhci50cyJdLCJuYW1lcyI6WyJBdmF0YXJTaGFwZSIsImlzTmF0dXJhbFBlcnNvbiIsImNvbnZlcnRlckNvbnRleHQiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJJc05hdHVyYWxQZXJzb24iLCJ2YWx1ZU9mIiwiZ2V0RmFsbEJhY2tJY29uIiwiaGVhZGVySW5mbyIsIlVJIiwiSGVhZGVySW5mbyIsIkltYWdlVXJsIiwiVHlwZUltYWdlVXJsIiwidW5kZWZpbmVkIiwiY29tcGlsZUJpbmRpbmciLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsImdldFNvdXJjZSIsImdldEF2YXRhciIsIm9Tb3VyY2UiLCJJbml0aWFscyIsInNyYyIsImluaXRpYWxzIiwiZmFsbGJhY2tJY29uIiwiZGlzcGxheVNoYXBlIiwiQ2lyY2xlIiwiU3F1YXJlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7OztNQUFLQSxXOzthQUFBQSxXO0FBQUFBLElBQUFBLFc7QUFBQUEsSUFBQUEsVztLQUFBQSxXLEtBQUFBLFc7O0FBWUwsTUFBTUMsZUFBZSxHQUFHLFVBQUNDLGdCQUFELEVBQWlEO0FBQUE7O0FBQ3hFLFdBQU8sMEJBQUFBLGdCQUFnQixDQUFDQyxhQUFqQixHQUFpQ0MsV0FBakMsQ0FBNkNDLE1BQTdDLDBHQUFxREMsZUFBckQsa0ZBQXNFQyxPQUF0RSxRQUFvRixJQUEzRjtBQUNBLEdBRkQ7O0FBSUEsTUFBTUMsZUFBZSxHQUFHLFVBQUNOLGdCQUFELEVBQStFO0FBQUE7O0FBQ3RHLFFBQU1PLFVBQVUsNkJBQUdQLGdCQUFnQixDQUFDQyxhQUFqQixHQUFpQ0MsV0FBcEMscUZBQUcsdUJBQThDTSxFQUFqRCwyREFBRyx1QkFBa0RDLFVBQXJFOztBQUNBLFFBQUksQ0FBQ0YsVUFBRCxJQUFnQkEsVUFBVSxJQUFJLENBQUNBLFVBQVUsQ0FBQ0csUUFBMUIsSUFBc0MsQ0FBQ0gsVUFBVSxDQUFDSSxZQUF0RSxFQUFxRjtBQUNwRixhQUFPQyxTQUFQO0FBQ0E7O0FBQ0QsUUFBSUwsVUFBVSxDQUFDRyxRQUFYLElBQXVCSCxVQUFVLENBQUNJLFlBQXRDLEVBQW9EO0FBQ25ELGFBQU9FLGNBQWMsQ0FBQ0Msb0JBQW9CLENBQUNQLFVBQVUsQ0FBQ0ksWUFBWixDQUFyQixDQUFyQjtBQUNBOztBQUNELFdBQU9FLGNBQWMsQ0FBQ2QsZUFBZSxDQUFDQyxnQkFBRCxDQUFmLEdBQW9DLCtCQUFwQyxHQUFzRSxvQkFBdkUsQ0FBckI7QUFDQSxHQVREOztBQVdBLE1BQU1lLFNBQVMsR0FBRyxVQUFDZixnQkFBRCxFQUErRTtBQUFBOztBQUNoRyxRQUFNTyxVQUFVLDZCQUFHUCxnQkFBZ0IsQ0FBQ0MsYUFBakIsR0FBaUNDLFdBQXBDLHFGQUFHLHVCQUE4Q00sRUFBakQsMkRBQUcsdUJBQWtEQyxVQUFyRTs7QUFDQSxRQUFJLENBQUNGLFVBQUQsSUFBZSxFQUFFQSxVQUFVLENBQUNHLFFBQVgsSUFBdUJILFVBQVUsQ0FBQ0ksWUFBcEMsQ0FBbkIsRUFBc0U7QUFDckUsYUFBT0MsU0FBUDtBQUNBOztBQUNELFdBQU9DLGNBQWMsQ0FBQ0Msb0JBQW9CLENBQUNQLFVBQVUsQ0FBQ0csUUFBWCxJQUF1QkgsVUFBVSxDQUFDSSxZQUFuQyxDQUFyQixDQUFyQjtBQUNBLEdBTkQ7O0FBUU8sTUFBTUssU0FBUyxHQUFHLFVBQUNoQixnQkFBRCxFQUE0RDtBQUFBOztBQUNwRixRQUFNTyxVQUFVLDZCQUFHUCxnQkFBZ0IsQ0FBQ0MsYUFBakIsR0FBaUNDLFdBQXBDLHFGQUFHLHVCQUE4Q00sRUFBakQsMkRBQUcsdUJBQWtEQyxVQUFyRTtBQUNBLFFBQU1RLE9BQVksR0FBR1YsVUFBVSxLQUFLQSxVQUFVLENBQUNHLFFBQVgsSUFBdUJILFVBQVUsQ0FBQ0ksWUFBbEMsSUFBa0RKLFVBQVUsQ0FBQ1csUUFBbEUsQ0FBL0I7O0FBQ0EsUUFBSSxDQUFDRCxPQUFMLEVBQWM7QUFDYixhQUFPTCxTQUFQO0FBQ0E7O0FBQ0QsV0FBTztBQUNOTyxNQUFBQSxHQUFHLEVBQUVKLFNBQVMsQ0FBQ2YsZ0JBQUQsQ0FEUjtBQUVOb0IsTUFBQUEsUUFBUSxFQUFFUCxjQUFjLENBQUNDLG9CQUFvQixDQUFDLENBQUFQLFVBQVUsU0FBVixJQUFBQSxVQUFVLFdBQVYsWUFBQUEsVUFBVSxDQUFFVyxRQUFaLEtBQXdCLEVBQXpCLENBQXJCLENBRmxCO0FBR05HLE1BQUFBLFlBQVksRUFBRWYsZUFBZSxDQUFDTixnQkFBRCxDQUh2QjtBQUlOc0IsTUFBQUEsWUFBWSxFQUFFVCxjQUFjLENBQUNkLGVBQWUsQ0FBQ0MsZ0JBQUQsQ0FBZixHQUFvQ0YsV0FBVyxDQUFDeUIsTUFBaEQsR0FBeUR6QixXQUFXLENBQUMwQixNQUF0RTtBQUp0QixLQUFQO0FBTUEsR0FaTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IGFubm90YXRpb25FeHByZXNzaW9uLCBCaW5kaW5nRXhwcmVzc2lvbiwgY29tcGlsZUJpbmRpbmcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuZW51bSBBdmF0YXJTaGFwZSB7XG5cdENpcmNsZSA9IFwiQ2lyY2xlXCIsXG5cdFNxdWFyZSA9IFwiU3F1YXJlXCJcbn1cblxuZXhwb3J0IHR5cGUgQXZhdGFyID0ge1xuXHRzcmM/OiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRpbml0aWFsczogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPjtcblx0ZmFsbGJhY2tJY29uPzogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPjtcblx0ZGlzcGxheVNoYXBlOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xufTtcblxuY29uc3QgaXNOYXR1cmFsUGVyc29uID0gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCb29sZWFuID0+IHtcblx0cmV0dXJuIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zLkNvbW1vbj8uSXNOYXR1cmFsUGVyc29uPy52YWx1ZU9mKCkgPT09IHRydWU7XG59O1xuXG5jb25zdCBnZXRGYWxsQmFja0ljb24gPSAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCBoZWFkZXJJbmZvID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvO1xuXHRpZiAoIWhlYWRlckluZm8gfHwgKGhlYWRlckluZm8gJiYgIWhlYWRlckluZm8uSW1hZ2VVcmwgJiYgIWhlYWRlckluZm8uVHlwZUltYWdlVXJsKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGhlYWRlckluZm8uSW1hZ2VVcmwgJiYgaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwpIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwpKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoaXNOYXR1cmFsUGVyc29uKGNvbnZlcnRlckNvbnRleHQpID8gXCJzYXAtaWNvbjovL3BlcnNvbi1wbGFjZWhvbGRlclwiIDogXCJzYXAtaWNvbjovL3Byb2R1Y3RcIik7XG59O1xuXG5jb25zdCBnZXRTb3VyY2UgPSAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCBoZWFkZXJJbmZvID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvO1xuXHRpZiAoIWhlYWRlckluZm8gfHwgIShoZWFkZXJJbmZvLkltYWdlVXJsIHx8IGhlYWRlckluZm8uVHlwZUltYWdlVXJsKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKGhlYWRlckluZm8uSW1hZ2VVcmwgfHwgaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBdmF0YXIgPSAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEF2YXRhciB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IGhlYWRlckluZm8gPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm87XG5cdGNvbnN0IG9Tb3VyY2U6IGFueSA9IGhlYWRlckluZm8gJiYgKGhlYWRlckluZm8uSW1hZ2VVcmwgfHwgaGVhZGVySW5mby5UeXBlSW1hZ2VVcmwgfHwgaGVhZGVySW5mby5Jbml0aWFscyk7XG5cdGlmICghb1NvdXJjZSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRzcmM6IGdldFNvdXJjZShjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRpbml0aWFsczogY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oaGVhZGVySW5mbz8uSW5pdGlhbHMgfHwgXCJcIikpLFxuXHRcdGZhbGxiYWNrSWNvbjogZ2V0RmFsbEJhY2tJY29uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGRpc3BsYXlTaGFwZTogY29tcGlsZUJpbmRpbmcoaXNOYXR1cmFsUGVyc29uKGNvbnZlcnRlckNvbnRleHQpID8gQXZhdGFyU2hhcGUuQ2lyY2xlIDogQXZhdGFyU2hhcGUuU3F1YXJlKVxuXHR9O1xufTtcbiJdfQ==
@@ -0,0 +1,50 @@
1
+ import ConverterContext from "../../ConverterContext";
2
+ import { annotationExpression, BindingExpression, compileBinding } from "sap/fe/core/helpers/BindingExpression";
3
+ enum AvatarShape {
4
+ Circle = "Circle",
5
+ Square = "Square"
6
+ }
7
+
8
+ export type Avatar = {
9
+ src?: BindingExpression<string>;
10
+ initials: BindingExpression<string>;
11
+ fallbackIcon?: BindingExpression<string>;
12
+ displayShape: BindingExpression<string>;
13
+ };
14
+
15
+ const isNaturalPerson = (converterContext: ConverterContext): Boolean => {
16
+ return converterContext.getEntityType().annotations.Common?.IsNaturalPerson?.valueOf() === true;
17
+ };
18
+
19
+ const getFallBackIcon = (converterContext: ConverterContext): BindingExpression<string> | undefined => {
20
+ const headerInfo = converterContext.getEntityType().annotations?.UI?.HeaderInfo;
21
+ if (!headerInfo || (headerInfo && !headerInfo.ImageUrl && !headerInfo.TypeImageUrl)) {
22
+ return undefined;
23
+ }
24
+ if (headerInfo.ImageUrl && headerInfo.TypeImageUrl) {
25
+ return compileBinding(annotationExpression(headerInfo.TypeImageUrl));
26
+ }
27
+ return compileBinding(isNaturalPerson(converterContext) ? "sap-icon://person-placeholder" : "sap-icon://product");
28
+ };
29
+
30
+ const getSource = (converterContext: ConverterContext): BindingExpression<string> | undefined => {
31
+ const headerInfo = converterContext.getEntityType().annotations?.UI?.HeaderInfo;
32
+ if (!headerInfo || !(headerInfo.ImageUrl || headerInfo.TypeImageUrl)) {
33
+ return undefined;
34
+ }
35
+ return compileBinding(annotationExpression(headerInfo.ImageUrl || headerInfo.TypeImageUrl));
36
+ };
37
+
38
+ export const getAvatar = (converterContext: ConverterContext): Avatar | undefined => {
39
+ const headerInfo = converterContext.getEntityType().annotations?.UI?.HeaderInfo;
40
+ const oSource: any = headerInfo && (headerInfo.ImageUrl || headerInfo.TypeImageUrl || headerInfo.Initials);
41
+ if (!oSource) {
42
+ return undefined;
43
+ }
44
+ return {
45
+ src: getSource(converterContext),
46
+ initials: compileBinding(annotationExpression(headerInfo?.Initials || "")),
47
+ fallbackIcon: getFallBackIcon(converterContext),
48
+ displayShape: compileBinding(isNaturalPerson(converterContext) ? AvatarShape.Circle : AvatarShape.Square)
49
+ };
50
+ };