@sapui5/sap.fe.macros 1.139.0 → 1.139.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Chart.js +1 -1
  4. package/src/sap/fe/macros/Chart.tsx +1 -1
  5. package/src/sap/fe/macros/RichTextEditor.js +1 -2
  6. package/src/sap/fe/macros/RichTextEditor.tsx +0 -1
  7. package/src/sap/fe/macros/ValueHelp.js +4 -28
  8. package/src/sap/fe/macros/ValueHelp.tsx +2 -42
  9. package/src/sap/fe/macros/chart/MdcChartTemplate.js +2 -4
  10. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +1 -4
  11. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  12. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  13. package/src/sap/fe/macros/controls/FilterBar.js +39 -3
  14. package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
  15. package/src/sap/fe/macros/controls/Section.js +3 -2
  16. package/src/sap/fe/macros/controls/Section.ts +2 -1
  17. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +2 -2
  18. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +1 -1
  19. package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
  20. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
  21. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  22. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  23. package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
  24. package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
  25. package/src/sap/fe/macros/form/Form.block.js +6 -2
  26. package/src/sap/fe/macros/form/Form.block.ts +4 -1
  27. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  28. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  29. package/src/sap/fe/macros/internal/field/DisplayStyle.js +4 -2
  30. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +3 -1
  31. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  32. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
  33. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +5 -1
  34. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +4 -0
  35. package/src/sap/fe/macros/library.js +1 -1
  36. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +5 -5
  37. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +5 -4
  38. package/src/sap/fe/macros/table/MdcTableTemplate.js +3 -1
  39. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +2 -1
  40. package/src/sap/fe/macros/table/Table.js +7 -1
  41. package/src/sap/fe/macros/table/Table.tsx +7 -1
  42. package/src/sap/fe/macros/table/TableAPI.js +8 -1
  43. package/src/sap/fe/macros/table/TableAPI.ts +15 -2
  44. package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
  45. package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
  46. package/src/sap/fe/macros/table/TreeTable.js +7 -1
  47. package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
  48. package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -2
  49. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +10 -3
  50. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  51. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  52. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
  53. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
  54. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +27 -3
  55. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +28 -2
@@ -47,6 +47,39 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
47
47
  }
48
48
  return sCurrentHash;
49
49
  },
50
+ /**
51
+ * Creates filters for ValueList requests based on ValueListParameterIn and ValueListParameterInOut annotations.
52
+ * @param valueListInfo The ValueList annotation information
53
+ * @param propertyId The ID property of the IdAndDesciption of the text arrangement annotation
54
+ * @param propertyValue The value for the propertyId property
55
+ * @param bindingContext The binding context to get values from
56
+ * @returns Array of filters for the ValueList request
57
+ */
58
+ createValueListFilters: function (valueListInfo, propertyId, propertyValue, bindingContext) {
59
+ // Start with the key filter
60
+ const filters = [new Filter({
61
+ path: propertyId,
62
+ operator: "EQ",
63
+ value1: propertyValue
64
+ })];
65
+ if (bindingContext && valueListInfo.Parameters) {
66
+ const relevantParameters = valueListInfo.Parameters.filter(parameter => {
67
+ const isInOrInOut = parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterIn" || parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterInOut";
68
+ return isInOrInOut && parameter.LocalDataProperty?.$PropertyPath && parameter.ValueListProperty && parameter.ValueListProperty !== propertyId;
69
+ });
70
+ relevantParameters.forEach(parameter => {
71
+ const localValue = bindingContext.getProperty(parameter.LocalDataProperty.$PropertyPath);
72
+ if (localValue !== undefined && localValue !== null && localValue !== "") {
73
+ filters.push(new Filter({
74
+ path: parameter.ValueListProperty,
75
+ operator: "EQ",
76
+ value1: localValue
77
+ }));
78
+ }
79
+ });
80
+ }
81
+ return filters;
82
+ },
50
83
  /**
51
84
  * Method to retrieve text from the value list for DataField.
52
85
  * This is a formatter in disguise.
@@ -62,6 +95,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
62
95
  if (sPropertyValue) {
63
96
  oMetaModel = this.getModel()?.getMetaModel() || CommonHelper.getMetaModel();
64
97
  sPropertyName = oMetaModel.getObject(`${sPropertyFullPath}@sapui.name`);
98
+ const bindingContext = this.getBindingContext();
65
99
  return oMetaModel.requestValueListInfo(sPropertyFullPath, true).then(function (mValueListInfo) {
66
100
  // take the "" one if exists, otherwise take the first one in the object TODO: to be discussed
67
101
  const oValueListInfo = mValueListInfo[mValueListInfo[""] ? "" : Object.keys(mValueListInfo)[0]];
@@ -76,15 +110,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
76
110
  const oTextAnnotation = oMetaModelValueList.getObject(`/${oValueListInfo.CollectionPath}/${oParamWithKey.ValueListProperty}@com.sap.vocabularies.Common.v1.Text`);
77
111
  if (oTextAnnotation && oTextAnnotation.$Path) {
78
112
  sTextProperty = oTextAnnotation.$Path;
79
- const oFilter = new Filter({
80
- path: oParamWithKey.ValueListProperty,
81
- operator: "EQ",
82
- value1: sPropertyValue
83
- });
84
- const oListBinding = oValueListModel.bindList(`/${oValueListInfo.CollectionPath}`, undefined, undefined, oFilter, {
113
+ const filters = FieldRuntime.createValueListFilters(oValueListInfo, oParamWithKey.ValueListProperty, sPropertyValue, bindingContext);
114
+ const listBinding = oValueListModel.bindList(`/${oValueListInfo.CollectionPath}`, undefined, undefined, filters, {
85
115
  $select: sTextProperty
86
116
  });
87
- return oListBinding.requestContexts(0, 2);
117
+ return listBinding.requestContexts(0, 2);
88
118
  } else {
89
119
  sDisplayFormat = "Value";
90
120
  return sPropertyValue;
@@ -186,4 +216,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUt
186
216
  ObjectPath.set("sap.fe.macros.field.FieldRuntime", FieldRuntime);
187
217
  return FieldRuntime;
188
218
  }, false);
189
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZFJ1bnRpbWUiLCJ1cGxvYWRQcm9taXNlcyIsImNyZWF0aW5nSW5hY3RpdmVSb3ciLCJpc0RyYWZ0SW5kaWNhdG9yVmlzaWJsZSIsInNQcm9wZXJ0eVBhdGgiLCJzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciIsIkhhc0RyYWZ0RW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJoaWRlRHJhZnRJbmZvIiwidW5kZWZpbmVkIiwib25WYWxpZGF0ZUZpZWxkR3JvdXAiLCJvRXZlbnQiLCJvU291cmNlRmllbGQiLCJnZXRTb3VyY2UiLCJ2aWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJvRkVDb250cm9sbGVyIiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RXh0ZW5zaW9uQ29udHJvbGxlciIsIl9zaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UiLCJfZm5GaXhIYXNoUXVlcnlTdHJpbmciLCJzQ3VycmVudEhhc2giLCJpbmNsdWRlcyIsInNwbGl0IiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsInNQcm9wZXJ0eVZhbHVlIiwic1Byb3BlcnR5RnVsbFBhdGgiLCJzRGlzcGxheUZvcm1hdCIsInNUZXh0UHJvcGVydHkiLCJvTWV0YU1vZGVsIiwic1Byb3BlcnR5TmFtZSIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiQ29tbW9uSGVscGVyIiwiZ2V0T2JqZWN0IiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJ0aGVuIiwibVZhbHVlTGlzdEluZm8iLCJvVmFsdWVMaXN0SW5mbyIsIk9iamVjdCIsImtleXMiLCJvVmFsdWVMaXN0TW9kZWwiLCIkbW9kZWwiLCJvTWV0YU1vZGVsVmFsdWVMaXN0Iiwib1BhcmFtV2l0aEtleSIsIlBhcmFtZXRlcnMiLCJmaW5kIiwib1BhcmFtZXRlciIsIkxvY2FsRGF0YVByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlTGlzdFByb3BlcnR5IiwiRXJyb3IiLCJvVGV4dEFubm90YXRpb24iLCJDb2xsZWN0aW9uUGF0aCIsIiRQYXRoIiwib0ZpbHRlciIsIkZpbHRlciIsInBhdGgiLCJvcGVyYXRvciIsInZhbHVlMSIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiJHNlbGVjdCIsInJlcXVlc3RDb250ZXh0cyIsImFDb250ZXh0cyIsInNEZXNjcmlwdGlvbiIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImdldFRleHQiLCJjYXRjaCIsIm9FcnJvciIsImVycm9yT2JqIiwic01zZyIsInN0YXR1cyIsIm1lc3NhZ2UiLCJMb2ciLCJlcnJvciIsImRpc3BsYXlBZ2dyZWdhdGVEZXRhaWxzIiwiZXZlbnQiLCJhZ2dyZWdhdGVkUHJvcGVydHlQYXRoIiwibGluayIsImFuYWx5dGljYWxUYWJsZSIsIkZQTUhlbHBlciIsImdldE1kY1RhYmxlIiwicm93Q29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwidGFibGVSb3dCaW5kaW5nIiwiZ2V0QmluZGluZyIsInJvd0NvbnRleHREYXRhIiwicm93U3BlY2lmaWNGaWx0ZXIiLCJyb3dGaWx0ZXIiLCJnZXRGaWx0ZXIiLCJwdXNoIiwiYWxsRmlsdGVycyIsImNvbmNhdCIsImdldEZpbHRlcnMiLCJhZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0aW9uIiwidW5pdE9yQ3VycmVuY3lOYW1lIiwiYWdncmVnYXRlIiwidW5pdCIsImdyb3VwIiwiZ3JhbmRUb3RhbCIsInN1YnRvdGFscyIsInRhYmxlSXRlbSIsImdldERlcGVuZGVudHMiLCJjbG9uZSIsImN1cnJlbmN5T3JRdWFudGl0eUVuYWJsZWRMYXlvdXQiLCJIQm94IiwicmVuZGVyVHlwZSIsImp1c3RpZnlDb250ZW50IiwiaXRlbXMiLCJhZ2dyZWdhdGlvblBhcmFtZXRlcnMiLCJzZWFyY2giLCJvSXRlbXNCaW5kaW5nSW5mbyIsImdldFJlc29sdmVkUGF0aCIsImZpbHRlcnMiLCJwYXJhbWV0ZXJzIiwiJCRhZ2dyZWdhdGlvbiIsInNvcnRlciIsIlNvcnRlciIsImlzUG9wb3ZlckZvckdyYW5kVG90YWwiLCJwb3BvdmVyIiwiVXRpbCIsImNyZWF0ZU9yVXBkYXRlTXVsdGlVbml0UG9wb3ZlciIsImdldElkIiwiY29udHJvbCIsIml0ZW1zQmluZGluZ0luZm8iLCJsaXN0SXRlbUNvbnRlbnRUZW1wbGF0ZSIsImFkZERlcGVuZGVudCIsImZuT25DbG9zZSIsInJlbW92ZURlcGVuZGVudCIsImRldGFjaEV2ZW50IiwiZGVzdHJveSIsImF0dGFjaEV2ZW50Iiwib3BlbkJ5IiwiT2JqZWN0UGF0aCIsInNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRSdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7ICRIQm94U2V0dGluZ3MgfSBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCB0eXBlIExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCB0eXBlIFJlc3BvbnNpdmVQb3BvdmVyIGZyb20gXCJzYXAvbS9SZXNwb25zaXZlUG9wb3ZlclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBVdGlsIH0gZnJvbSBcInNhcC9tL3RhYmxlL1V0aWxcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IEZpZWxkUnVudGltZUhlbHBlciBmcm9tIFwiLi9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcblxuLyoqXG4gKiBTdGF0aWMgY2xhc3MgdXNlZCBieSBcInNhcC51aS5tZGMuRmllbGRcIiBkdXJpbmcgcnVudGltZVxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgaW50ZXJuYWwvZXhwZXJpbWVudGFsIHVzZSFcbiAqL1xuY29uc3QgRmllbGRSdW50aW1lID0ge1xuXHR1cGxvYWRQcm9taXNlczoge30gYXMgUmVjb3JkPHN0cmluZywgeyByZXNvbHZlOiBGdW5jdGlvbjsgcmVqZWN0OiBGdW5jdGlvbiB9Pixcblx0Y3JlYXRpbmdJbmFjdGl2ZVJvdzogZmFsc2UsXG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBmb3JtYXR0ZXIgaW4gZGlzZ3Vpc2UuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlQYXRoXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclxuXHQgKiBAcGFyYW0gSGFzRHJhZnRFbnRpdHlcblx0ICogQHBhcmFtIElzQWN0aXZlRW50aXR5XG5cdCAqIEBwYXJhbSBoaWRlRHJhZnRJbmZvXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRyYWZ0IGluZGljYXRvciBzaG91bGQgYmUgZGlzcGxheWVkLlxuXHQgKi9cblx0aXNEcmFmdEluZGljYXRvclZpc2libGU6IGZ1bmN0aW9uIChcblx0XHRzUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0c1NlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3I6IHN0cmluZyxcblx0XHRIYXNEcmFmdEVudGl0eT86IGJvb2xlYW4sXG5cdFx0SXNBY3RpdmVFbnRpdHk/OiBib29sZWFuLFxuXHRcdGhpZGVEcmFmdEluZm8/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGlmIChJc0FjdGl2ZUVudGl0eSAhPT0gdW5kZWZpbmVkICYmIEhhc0RyYWZ0RW50aXR5ICE9PSB1bmRlZmluZWQgJiYgKCFJc0FjdGl2ZUVudGl0eSB8fCBIYXNEcmFmdEVudGl0eSkgJiYgIWhpZGVEcmFmdEluZm8pIHtcblx0XHRcdHJldHVybiBzUHJvcGVydHlQYXRoID09PSBzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIHZhbGlkYXRlRmllbGRHcm91cCBldmVudC5cblx0ICogQHBhcmFtIG9FdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgdmFsaWRhdGVGaWVsZEdyb3VwIGV2ZW50XG5cdCAqL1xuXHRvblZhbGlkYXRlRmllbGRHcm91cDogZnVuY3Rpb24gKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Tb3VyY2VGaWVsZCA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9Tb3VyY2VGaWVsZCksXG5cdFx0XHRjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBvRkVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIoY29udHJvbGxlcik7XG5cdFx0b0ZFQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRHcm91cENoYW5nZShvRXZlbnQpO1xuXHR9LFxuXG5cdF9mbkZpeEhhc2hRdWVyeVN0cmluZzogZnVuY3Rpb24gKHNDdXJyZW50SGFzaDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoc0N1cnJlbnRIYXNoPy5pbmNsdWRlcyhcIj9cIikpIHtcblx0XHRcdC8vIHNDdXJyZW50SGFzaCBjYW4gY29udGFpbiBxdWVyeSBzdHJpbmcsIGN1dCBpdCBvZmYhXG5cdFx0XHRzQ3VycmVudEhhc2ggPSBzQ3VycmVudEhhc2guc3BsaXQoXCI/XCIpWzBdO1xuXHRcdH1cblx0XHRyZXR1cm4gc0N1cnJlbnRIYXNoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmV0cmlldmUgdGV4dCBmcm9tIHRoZSB2YWx1ZSBsaXN0IGZvciBEYXRhRmllbGQuXG5cdCAqIFRoaXMgaXMgYSBmb3JtYXR0ZXIgaW4gZGlzZ3Vpc2UuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlWYWx1ZSBUaGUgcHJvcGVydHkgdmFsdWUgb2YgdGhlIGRhdGEgZmllbGQuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlGdWxsUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBpbiB0aGUgbWV0YWRhdGEuXG5cdCAqIEBwYXJhbSBzRGlzcGxheUZvcm1hdCBUaGUgZGlzcGxheSBmb3JtYXQgZm9yIHRoZSBkYXRhIGZpZWxkLlxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBkaXNwbGF5IGZvcm1hdC5cblx0ICovXG5cdHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHR0aGlzOiBDb250cm9sLFxuXHRcdHNQcm9wZXJ0eVZhbHVlOiBzdHJpbmcsXG5cdFx0c1Byb3BlcnR5RnVsbFBhdGg6IHN0cmluZyxcblx0XHRzRGlzcGxheUZvcm1hdDogc3RyaW5nXG5cdCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0bGV0IHNUZXh0UHJvcGVydHk6IHN0cmluZztcblx0XHRsZXQgb01ldGFNb2RlbDtcblx0XHRsZXQgc1Byb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdGlmIChzUHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0b01ldGFNb2RlbCA9ICh0aGlzLmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKSB8fCBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1Byb3BlcnR5RnVsbFBhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHRcdHJldHVybiBvTWV0YU1vZGVsXG5cdFx0XHRcdC5yZXF1ZXN0VmFsdWVMaXN0SW5mbyhzUHJvcGVydHlGdWxsUGF0aCwgdHJ1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1WYWx1ZUxpc3RJbmZvKSB7XG5cdFx0XHRcdFx0Ly8gdGFrZSB0aGUgXCJcIiBvbmUgaWYgZXhpc3RzLCBvdGhlcndpc2UgdGFrZSB0aGUgZmlyc3Qgb25lIGluIHRoZSBvYmplY3QgVE9ETzogdG8gYmUgZGlzY3Vzc2VkXG5cdFx0XHRcdFx0Y29uc3Qgb1ZhbHVlTGlzdEluZm8gPSBtVmFsdWVMaXN0SW5mb1ttVmFsdWVMaXN0SW5mb1tcIlwiXSA/IFwiXCIgOiBPYmplY3Qua2V5cyhtVmFsdWVMaXN0SW5mbylbMF1dO1xuXHRcdFx0XHRcdGNvbnN0IG9WYWx1ZUxpc3RNb2RlbCA9IG9WYWx1ZUxpc3RJbmZvLiRtb2RlbDtcblx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsVmFsdWVMaXN0ID0gb1ZhbHVlTGlzdE1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRcdGNvbnN0IG9QYXJhbVdpdGhLZXkgPSBvVmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbmQoZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IHtcblx0XHRcdFx0XHRcdExvY2FsRGF0YVByb3BlcnR5PzogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfTtcblx0XHRcdFx0XHR9KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eSAmJiBvUGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5LiRQcm9wZXJ0eVBhdGggPT09IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKG9QYXJhbVdpdGhLZXkgJiYgIW9QYXJhbVdpdGhLZXkuVmFsdWVMaXN0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW5jb25zaXN0ZW50IHZhbHVlIGhlbHAgYW5ub3RhdGlvbiBmb3IgJHtzUHJvcGVydHlOYW1lfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvTWV0YU1vZGVsVmFsdWVMaXN0LmdldE9iamVjdChcblx0XHRcdFx0XHRcdGAvJHtvVmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtvUGFyYW1XaXRoS2V5LlZhbHVlTGlzdFByb3BlcnR5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGBcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKG9UZXh0QW5ub3RhdGlvbiAmJiBvVGV4dEFubm90YXRpb24uJFBhdGgpIHtcblx0XHRcdFx0XHRcdHNUZXh0UHJvcGVydHkgPSBvVGV4dEFubm90YXRpb24uJFBhdGg7XG5cdFx0XHRcdFx0XHRjb25zdCBvRmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdFx0XHRcdHBhdGg6IG9QYXJhbVdpdGhLZXkuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdHZhbHVlMTogc1Byb3BlcnR5VmFsdWVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb1ZhbHVlTGlzdE1vZGVsLmJpbmRMaXN0KGAvJHtvVmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb0ZpbHRlciwge1xuXHRcdFx0XHRcdFx0XHQkc2VsZWN0OiBzVGV4dFByb3BlcnR5XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzRGlzcGxheUZvcm1hdCA9IFwiVmFsdWVcIjtcblx0XHRcdFx0XHRcdHJldHVybiBzUHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhQ29udGV4dHM6IENvbnRleHRbXSkge1xuXHRcdFx0XHRcdGNvbnN0IHNEZXNjcmlwdGlvbiA9IHNUZXh0UHJvcGVydHkgPyBhQ29udGV4dHNbMF0/LmdldE9iamVjdCgpW3NUZXh0UHJvcGVydHldIDogXCJcIjtcblx0XHRcdFx0XHRpZiAoIXNEZXNjcmlwdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNQcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzd2l0Y2ggKHNEaXNwbGF5Rm9ybWF0KSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNEZXNjcmlwdGlvbiB8fCBzUHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhLmdldFRleHQoXCJDX0ZPUk1BVF9GT1JfVEVYVF9BUlJBTkdFTUVOVFwiLCBbXG5cdFx0XHRcdFx0XHRcdFx0c0Rlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHNQcm9wZXJ0eVZhbHVlXG5cdFx0XHRcdFx0XHRcdF0pO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfRk9STUFUX0ZPUl9URVhUX0FSUkFOR0VNRU5UXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRzUHJvcGVydHlWYWx1ZSxcblx0XHRcdFx0XHRcdFx0XHRzRGVzY3JpcHRpb25cblx0XHRcdFx0XHRcdFx0XSk7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc1Byb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdGNvbnN0IGVycm9yT2JqID0gb0Vycm9yIGFzIHsgc3RhdHVzOiBudW1iZXI7IG1lc3NhZ2U6IHN0cmluZyB9O1xuXHRcdFx0XHRcdGNvbnN0IHNNc2cgPVxuXHRcdFx0XHRcdFx0ZXJyb3JPYmouc3RhdHVzICYmIGVycm9yT2JqLnN0YXR1cyA9PT0gNDA0XG5cdFx0XHRcdFx0XHRcdD8gYE1ldGFkYXRhIG5vdCBmb3VuZCAoJHtlcnJvck9iai5zdGF0dXN9KSBmb3IgdmFsdWUgaGVscCBvZiBwcm9wZXJ0eSAke3NQcm9wZXJ0eUZ1bGxQYXRofWBcblx0XHRcdFx0XHRcdFx0OiBlcnJvck9iai5tZXNzYWdlO1xuXHRcdFx0XHRcdExvZy5lcnJvcihzTXNnKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBzUHJvcGVydHlWYWx1ZTtcblx0fSxcblxuXHRkaXNwbGF5QWdncmVnYXRlRGV0YWlsczogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBFdmVudCwgYWdncmVnYXRlZFByb3BlcnR5UGF0aD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghYWdncmVnYXRlZFByb3BlcnR5UGF0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBsaW5rID0gZXZlbnQuZ2V0U291cmNlPExpbms+KCk7XG5cdFx0Y29uc3QgYW5hbHl0aWNhbFRhYmxlID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKGxpbmspITtcblxuXHRcdGNvbnN0IHJvd0NvbnRleHQgPSBsaW5rLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRjb25zdCB0YWJsZVJvd0JpbmRpbmcgPSByb3dDb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXG5cdFx0Ly8gR2V0IHRoZSBmaWx0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRvdGFsIHJvd1xuXHRcdGNvbnN0IHJvd0NvbnRleHREYXRhID0gcm93Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRjb25zdCByb3dTcGVjaWZpY0ZpbHRlcjogRmlsdGVyW10gPSBbXTtcblx0XHRjb25zdCByb3dGaWx0ZXIgPSByb3dDb250ZXh0LmdldEZpbHRlcigpO1xuXHRcdGlmIChyb3dGaWx0ZXIpIHtcblx0XHRcdHJvd1NwZWNpZmljRmlsdGVyLnB1c2gocm93RmlsdGVyKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIGZpbHRlcnMgYXBwbGllZCB0byB0aGUgb3JpZ2luYWwgdGFibGVcblx0XHRjb25zdCBhbGxGaWx0ZXJzID0gcm93U3BlY2lmaWNGaWx0ZXIuY29uY2F0KHRhYmxlUm93QmluZGluZy5nZXRGaWx0ZXJzKFwiQXBwbGljYXRpb25cIiksIHRhYmxlUm93QmluZGluZy5nZXRGaWx0ZXJzKFwiQ29udHJvbFwiKSk7XG5cblx0XHQvLyBDYWxjdWxhdGUgJCRhZ2dyZWdhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgdGFibGUgaW4gdGhlIHBvcG92ZXIgKGFnZ3JlZ2F0ZSBhbW91bnQsIGdyb3VwIGJ5IGN1cnJlbmN5L3VuaXQpXG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSB0YWJsZVJvd0JpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSBhcyB7XG5cdFx0XHRncm91cDogUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0XHRcdGFnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgeyB1bml0OiBzdHJpbmcgfT47XG5cdFx0XHRzZWFyY2g/OiBzdHJpbmc7XG5cdFx0fTtcblx0XHRjb25zdCB1bml0T3JDdXJyZW5jeU5hbWUgPSBhZ2dyZWdhdGlvbi5hZ2dyZWdhdGVbYWdncmVnYXRlZFByb3BlcnR5UGF0aF0udW5pdDtcblx0XHRjb25zdCBncm91cDogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRcdGdyb3VwW3VuaXRPckN1cnJlbmN5TmFtZV0gPSB7fTtcblx0XHRjb25zdCBhZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0XHRhZ2dyZWdhdGVbYWdncmVnYXRlZFByb3BlcnR5UGF0aF0gPSB7IGdyYW5kVG90YWw6IGZhbHNlLCBzdWJ0b3RhbHM6IGZhbHNlLCB1bml0OiB1bml0T3JDdXJyZW5jeU5hbWUgfTtcblxuXHRcdC8vIFRoZSBpdGVtIGRpc3BsYXllZCBpbiB0aGUgdGFibGUgaW4gdGhlIHBvcG92ZXIgaXMgYSBjb3B5IG9mIHRoZSBpdGVtIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcblx0XHRjb25zdCB0YWJsZUl0ZW0gPSBsaW5rLmdldERlcGVuZGVudHMoKVswXS5jbG9uZSgpO1xuXHRcdGNvbnN0IGN1cnJlbmN5T3JRdWFudGl0eUVuYWJsZWRMYXlvdXQgPSBuZXcgSEJveCh7XG5cdFx0XHRyZW5kZXJUeXBlOiBcIkJhcmVcIixcblx0XHRcdGp1c3RpZnlDb250ZW50OiBcIkVuZFwiLFxuXHRcdFx0aXRlbXM6IFt0YWJsZUl0ZW1dXG5cdFx0fSBhcyAkSEJveFNldHRpbmdzKTtcblxuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uUGFyYW1ldGVyczoge1xuXHRcdFx0Z3JvdXA6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdFx0XHRhZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdFx0XHRzZWFyY2g/OiBzdHJpbmc7XG5cdFx0fSA9IHsgZ3JvdXAsIGFnZ3JlZ2F0ZSB9O1xuXHRcdGlmIChhZ2dyZWdhdGlvbi5zZWFyY2gpIHtcblx0XHRcdGFnZ3JlZ2F0aW9uUGFyYW1ldGVycy5zZWFyY2ggPSBhZ2dyZWdhdGlvbi5zZWFyY2g7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0l0ZW1zQmluZGluZ0luZm8gPSB7XG5cdFx0XHRwYXRoOiB0YWJsZVJvd0JpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCksXG5cdFx0XHRmaWx0ZXJzOiBhbGxGaWx0ZXJzLFxuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHQkJGFnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdH0sXG5cdFx0XHRzb3J0ZXI6IG5ldyBTb3J0ZXIodW5pdE9yQ3VycmVuY3lOYW1lLCBmYWxzZSkgLy8gT3JkZXIgYnkgY3VycmVuY3lcblx0XHR9O1xuXG5cdFx0Y29uc3QgaXNQb3BvdmVyRm9yR3JhbmRUb3RhbCA9IHJvd0NvbnRleHREYXRhW1wiQCR1aTUubm9kZS5sZXZlbFwiXSA9PT0gMDtcblx0XHRjb25zdCBwb3BvdmVyOiBSZXNwb25zaXZlUG9wb3ZlciA9IGF3YWl0IFV0aWwuY3JlYXRlT3JVcGRhdGVNdWx0aVVuaXRQb3BvdmVyKGAke2FuYWx5dGljYWxUYWJsZS5nZXRJZCgpfS1tdWx0aVVuaXRQb3BvdmVyYCwge1xuXHRcdFx0Y29udHJvbDogYW5hbHl0aWNhbFRhYmxlLFxuXHRcdFx0Z3JhbmRUb3RhbDogaXNQb3BvdmVyRm9yR3JhbmRUb3RhbCxcblx0XHRcdGl0ZW1zQmluZGluZ0luZm86IG9JdGVtc0JpbmRpbmdJbmZvLFxuXHRcdFx0bGlzdEl0ZW1Db250ZW50VGVtcGxhdGU6IGN1cnJlbmN5T3JRdWFudGl0eUVuYWJsZWRMYXlvdXRcblx0XHR9KTtcblx0XHRhbmFseXRpY2FsVGFibGUuYWRkRGVwZW5kZW50KHBvcG92ZXIpO1xuXG5cdFx0Y29uc3QgZm5PbkNsb3NlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0YW5hbHl0aWNhbFRhYmxlLnJlbW92ZURlcGVuZGVudChwb3BvdmVyKTtcblx0XHRcdHBvcG92ZXIuZGV0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0XHRwb3BvdmVyLmRlc3Ryb3koKTtcblx0XHR9O1xuXHRcdHBvcG92ZXIuYXR0YWNoRXZlbnQoXCJhZnRlckNsb3NlXCIsIGZuT25DbG9zZSk7XG5cdFx0cG9wb3Zlci5vcGVuQnkobGluayk7XG5cdH1cbn07XG5cbk9iamVjdFBhdGguc2V0KFwic2FwLmZlLm1hY3Jvcy5maWVsZC5GaWVsZFJ1bnRpbWVcIiwgRmllbGRSdW50aW1lKTtcblxuZXhwb3J0IGRlZmF1bHQgRmllbGRSdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxZQUFZLEdBQUc7SUFDcEJDLGNBQWMsRUFBRSxDQUFDLENBQTREO0lBQzdFQyxtQkFBbUIsRUFBRSxLQUFLO0lBRTFCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDQyx1QkFBdUIsRUFBRSxTQUFBQSxDQUN4QkMsYUFBcUIsRUFDckJDLDZCQUFxQyxFQUNyQ0MsY0FBd0IsRUFDeEJDLGNBQXdCLEVBQ3hCQyxhQUF1QixFQUNiO01BQ1YsSUFBSUQsY0FBYyxLQUFLRSxTQUFTLElBQUlILGNB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
219
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWVsZFJ1bnRpbWUiLCJ1cGxvYWRQcm9taXNlcyIsImNyZWF0aW5nSW5hY3RpdmVSb3ciLCJpc0RyYWZ0SW5kaWNhdG9yVmlzaWJsZSIsInNQcm9wZXJ0eVBhdGgiLCJzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciIsIkhhc0RyYWZ0RW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJoaWRlRHJhZnRJbmZvIiwidW5kZWZpbmVkIiwib25WYWxpZGF0ZUZpZWxkR3JvdXAiLCJvRXZlbnQiLCJvU291cmNlRmllbGQiLCJnZXRTb3VyY2UiLCJ2aWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJvRkVDb250cm9sbGVyIiwiRmllbGRSdW50aW1lSGVscGVyIiwiZ2V0RXh0ZW5zaW9uQ29udHJvbGxlciIsIl9zaWRlRWZmZWN0cyIsImhhbmRsZUZpZWxkR3JvdXBDaGFuZ2UiLCJfZm5GaXhIYXNoUXVlcnlTdHJpbmciLCJzQ3VycmVudEhhc2giLCJpbmNsdWRlcyIsInNwbGl0IiwiY3JlYXRlVmFsdWVMaXN0RmlsdGVycyIsInZhbHVlTGlzdEluZm8iLCJwcm9wZXJ0eUlkIiwicHJvcGVydHlWYWx1ZSIsImJpbmRpbmdDb250ZXh0IiwiZmlsdGVycyIsIkZpbHRlciIsInBhdGgiLCJvcGVyYXRvciIsInZhbHVlMSIsIlBhcmFtZXRlcnMiLCJyZWxldmFudFBhcmFtZXRlcnMiLCJmaWx0ZXIiLCJwYXJhbWV0ZXIiLCJpc0luT3JJbk91dCIsIiRUeXBlIiwiTG9jYWxEYXRhUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiVmFsdWVMaXN0UHJvcGVydHkiLCJmb3JFYWNoIiwibG9jYWxWYWx1ZSIsImdldFByb3BlcnR5IiwicHVzaCIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJzUHJvcGVydHlWYWx1ZSIsInNQcm9wZXJ0eUZ1bGxQYXRoIiwic0Rpc3BsYXlGb3JtYXQiLCJzVGV4dFByb3BlcnR5Iiwib01ldGFNb2RlbCIsInNQcm9wZXJ0eU5hbWUiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIkNvbW1vbkhlbHBlciIsImdldE9iamVjdCIsImdldEJpbmRpbmdDb250ZXh0IiwicmVxdWVzdFZhbHVlTGlzdEluZm8iLCJ0aGVuIiwibVZhbHVlTGlzdEluZm8iLCJvVmFsdWVMaXN0SW5mbyIsIk9iamVjdCIsImtleXMiLCJvVmFsdWVMaXN0TW9kZWwiLCIkbW9kZWwiLCJvTWV0YU1vZGVsVmFsdWVMaXN0Iiwib1BhcmFtV2l0aEtleSIsImZpbmQiLCJvUGFyYW1ldGVyIiwiRXJyb3IiLCJvVGV4dEFubm90YXRpb24iLCJDb2xsZWN0aW9uUGF0aCIsIiRQYXRoIiwibGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsIiRzZWxlY3QiLCJyZXF1ZXN0Q29udGV4dHMiLCJhQ29udGV4dHMiLCJzRGVzY3JpcHRpb24iLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJnZXRUZXh0IiwiY2F0Y2giLCJvRXJyb3IiLCJlcnJvck9iaiIsInNNc2ciLCJzdGF0dXMiLCJtZXNzYWdlIiwiTG9nIiwiZXJyb3IiLCJkaXNwbGF5QWdncmVnYXRlRGV0YWlscyIsImV2ZW50IiwiYWdncmVnYXRlZFByb3BlcnR5UGF0aCIsImxpbmsiLCJhbmFseXRpY2FsVGFibGUiLCJGUE1IZWxwZXIiLCJnZXRNZGNUYWJsZSIsInJvd0NvbnRleHQiLCJ0YWJsZVJvd0JpbmRpbmciLCJnZXRCaW5kaW5nIiwicm93Q29udGV4dERhdGEiLCJyb3dTcGVjaWZpY0ZpbHRlciIsInJvd0ZpbHRlciIsImdldEZpbHRlciIsImFsbEZpbHRlcnMiLCJjb25jYXQiLCJnZXRGaWx0ZXJzIiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsInVuaXRPckN1cnJlbmN5TmFtZSIsImFnZ3JlZ2F0ZSIsInVuaXQiLCJncm91cCIsImdyYW5kVG90YWwiLCJzdWJ0b3RhbHMiLCJ0YWJsZUl0ZW0iLCJnZXREZXBlbmRlbnRzIiwiY2xvbmUiLCJjdXJyZW5jeU9yUXVhbnRpdHlFbmFibGVkTGF5b3V0IiwiSEJveCIsInJlbmRlclR5cGUiLCJqdXN0aWZ5Q29udGVudCIsIml0ZW1zIiwiYWdncmVnYXRpb25QYXJhbWV0ZXJzIiwic2VhcmNoIiwib0l0ZW1zQmluZGluZ0luZm8iLCJnZXRSZXNvbHZlZFBhdGgiLCJwYXJhbWV0ZXJzIiwiJCRhZ2dyZWdhdGlvbiIsInNvcnRlciIsIlNvcnRlciIsImlzUG9wb3ZlckZvckdyYW5kVG90YWwiLCJwb3BvdmVyIiwiVXRpbCIsImNyZWF0ZU9yVXBkYXRlTXVsdGlVbml0UG9wb3ZlciIsImdldElkIiwiY29udHJvbCIsIml0ZW1zQmluZGluZ0luZm8iLCJsaXN0SXRlbUNvbnRlbnRUZW1wbGF0ZSIsImFkZERlcGVuZGVudCIsImZuT25DbG9zZSIsInJlbW92ZURlcGVuZGVudCIsImRldGFjaEV2ZW50IiwiZGVzdHJveSIsImF0dGFjaEV2ZW50Iiwib3BlbkJ5IiwiT2JqZWN0UGF0aCIsInNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRSdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlTGlzdEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyAkSEJveFNldHRpbmdzIH0gZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgdHlwZSBMaW5rIGZyb20gXCJzYXAvbS9MaW5rXCI7XG5pbXBvcnQgdHlwZSBSZXNwb25zaXZlUG9wb3ZlciBmcm9tIFwic2FwL20vUmVzcG9uc2l2ZVBvcG92ZXJcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgVXRpbCB9IGZyb20gXCJzYXAvbS90YWJsZS9VdGlsXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSBCYXNlQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IEZpZWxkUnVudGltZUhlbHBlciBmcm9tIFwiLi9GaWVsZFJ1bnRpbWVIZWxwZXJcIjtcblxuLyoqXG4gKiBTdGF0aWMgY2xhc3MgdXNlZCBieSBcInNhcC51aS5tZGMuRmllbGRcIiBkdXJpbmcgcnVudGltZVxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgaW50ZXJuYWwvZXhwZXJpbWVudGFsIHVzZSFcbiAqL1xuY29uc3QgRmllbGRSdW50aW1lID0ge1xuXHR1cGxvYWRQcm9taXNlczoge30gYXMgUmVjb3JkPHN0cmluZywgeyByZXNvbHZlOiBGdW5jdGlvbjsgcmVqZWN0OiBGdW5jdGlvbiB9Pixcblx0Y3JlYXRpbmdJbmFjdGl2ZVJvdzogZmFsc2UsXG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBmb3JtYXR0ZXIgaW4gZGlzZ3Vpc2UuXG5cdCAqIEBwYXJhbSBzUHJvcGVydHlQYXRoXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclxuXHQgKiBAcGFyYW0gSGFzRHJhZnRFbnRpdHlcblx0ICogQHBhcmFtIElzQWN0aXZlRW50aXR5XG5cdCAqIEBwYXJhbSBoaWRlRHJhZnRJbmZvXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRyYWZ0IGluZGljYXRvciBzaG91bGQgYmUgZGlzcGxheWVkLlxuXHQgKi9cblx0aXNEcmFmdEluZGljYXRvclZpc2libGU6IGZ1bmN0aW9uIChcblx0XHRzUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0c1NlbWFudGljS2V5SGFzRHJhZnRJbmRpY2F0b3I6IHN0cmluZyxcblx0XHRIYXNEcmFmdEVudGl0eT86IGJvb2xlYW4sXG5cdFx0SXNBY3RpdmVFbnRpdHk/OiBib29sZWFuLFxuXHRcdGhpZGVEcmFmdEluZm8/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGlmIChJc0FjdGl2ZUVudGl0eSAhPT0gdW5kZWZpbmVkICYmIEhhc0RyYWZ0RW50aXR5ICE9PSB1bmRlZmluZWQgJiYgKCFJc0FjdGl2ZUVudGl0eSB8fCBIYXNEcmFmdEVudGl0eSkgJiYgIWhpZGVEcmFmdEluZm8pIHtcblx0XHRcdHJldHVybiBzUHJvcGVydHlQYXRoID09PSBzU2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIHZhbGlkYXRlRmllbGRHcm91cCBldmVudC5cblx0ICogQHBhcmFtIG9FdmVudCBUaGUgZXZlbnQgb2JqZWN0IHBhc3NlZCBieSB0aGUgdmFsaWRhdGVGaWVsZEdyb3VwIGV2ZW50XG5cdCAqL1xuXHRvblZhbGlkYXRlRmllbGRHcm91cDogZnVuY3Rpb24gKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Tb3VyY2VGaWVsZCA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9Tb3VyY2VGaWVsZCksXG5cdFx0XHRjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cblx0XHRjb25zdCBvRkVDb250cm9sbGVyID0gRmllbGRSdW50aW1lSGVscGVyLmdldEV4dGVuc2lvbkNvbnRyb2xsZXIoY29udHJvbGxlcik7XG5cdFx0b0ZFQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuaGFuZGxlRmllbGRHcm91cENoYW5nZShvRXZlbnQpO1xuXHR9LFxuXG5cdF9mbkZpeEhhc2hRdWVyeVN0cmluZzogZnVuY3Rpb24gKHNDdXJyZW50SGFzaDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoc0N1cnJlbnRIYXNoPy5pbmNsdWRlcyhcIj9cIikpIHtcblx0XHRcdC8vIHNDdXJyZW50SGFzaCBjYW4gY29udGFpbiBxdWVyeSBzdHJpbmcsIGN1dCBpdCBvZmYhXG5cdFx0XHRzQ3VycmVudEhhc2ggPSBzQ3VycmVudEhhc2guc3BsaXQoXCI/XCIpWzBdO1xuXHRcdH1cblx0XHRyZXR1cm4gc0N1cnJlbnRIYXNoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGZpbHRlcnMgZm9yIFZhbHVlTGlzdCByZXF1ZXN0cyBiYXNlZCBvbiBWYWx1ZUxpc3RQYXJhbWV0ZXJJbiBhbmQgVmFsdWVMaXN0UGFyYW1ldGVySW5PdXQgYW5ub3RhdGlvbnMuXG5cdCAqIEBwYXJhbSB2YWx1ZUxpc3RJbmZvIFRoZSBWYWx1ZUxpc3QgYW5ub3RhdGlvbiBpbmZvcm1hdGlvblxuXHQgKiBAcGFyYW0gcHJvcGVydHlJZCBUaGUgSUQgcHJvcGVydHkgb2YgdGhlIElkQW5kRGVzY2lwdGlvbiBvZiB0aGUgdGV4dCBhcnJhbmdlbWVudCBhbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlIFRoZSB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5SWQgcHJvcGVydHlcblx0ICogQHBhcmFtIGJpbmRpbmdDb250ZXh0IFRoZSBiaW5kaW5nIGNvbnRleHQgdG8gZ2V0IHZhbHVlcyBmcm9tXG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIGZpbHRlcnMgZm9yIHRoZSBWYWx1ZUxpc3QgcmVxdWVzdFxuXHQgKi9cblx0Y3JlYXRlVmFsdWVMaXN0RmlsdGVyczogZnVuY3Rpb24gKFxuXHRcdHZhbHVlTGlzdEluZm86IEFubm90YXRpb25WYWx1ZUxpc3RUeXBlLFxuXHRcdHByb3BlcnR5SWQ6IHN0cmluZyxcblx0XHRwcm9wZXJ0eVZhbHVlOiBzdHJpbmcsXG5cdFx0YmluZGluZ0NvbnRleHQ6IEJhc2VDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZFxuXHQpOiBGaWx0ZXJbXSB7XG5cdFx0Ly8gU3RhcnQgd2l0aCB0aGUga2V5IGZpbHRlclxuXHRcdGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW1xuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IHByb3BlcnR5SWQsXG5cdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCIsXG5cdFx0XHRcdHZhbHVlMTogcHJvcGVydHlWYWx1ZVxuXHRcdFx0fSlcblx0XHRdO1xuXG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0ICYmIHZhbHVlTGlzdEluZm8uUGFyYW1ldGVycykge1xuXHRcdFx0Y29uc3QgcmVsZXZhbnRQYXJhbWV0ZXJzID0gdmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbHRlcigocGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlzSW5PckluT3V0ID1cblx0XHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluXCIgfHxcblx0XHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCI7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0aXNJbk9ySW5PdXQgJiZcblx0XHRcdFx0XHRwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggJiZcblx0XHRcdFx0XHRwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkgJiZcblx0XHRcdFx0XHRwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHkgIT09IHByb3BlcnR5SWRcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZWxldmFudFBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGxvY2FsVmFsdWUgPSBiaW5kaW5nQ29udGV4dC5nZXRQcm9wZXJ0eShwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkhLiRQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRpZiAobG9jYWxWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGxvY2FsVmFsdWUgIT09IG51bGwgJiYgbG9jYWxWYWx1ZSAhPT0gXCJcIikge1xuXHRcdFx0XHRcdGZpbHRlcnMucHVzaChcblx0XHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0XHRwYXRoOiBwYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBcIkVRXCIsXG5cdFx0XHRcdFx0XHRcdHZhbHVlMTogbG9jYWxWYWx1ZVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmlsdGVycztcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHJldHJpZXZlIHRleHQgZnJvbSB0aGUgdmFsdWUgbGlzdCBmb3IgRGF0YUZpZWxkLlxuXHQgKiBUaGlzIGlzIGEgZm9ybWF0dGVyIGluIGRpc2d1aXNlLlxuXHQgKiBAcGFyYW0gc1Byb3BlcnR5VmFsdWUgVGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBkYXRhIGZpZWxkLlxuXHQgKiBAcGFyYW0gc1Byb3BlcnR5RnVsbFBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFkYXRhLlxuXHQgKiBAcGFyYW0gc0Rpc3BsYXlGb3JtYXQgVGhlIGRpc3BsYXkgZm9ybWF0IGZvciB0aGUgZGF0YSBmaWVsZC5cblx0ICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCB2YWx1ZSBiYXNlZCBvbiB0aGUgZGlzcGxheSBmb3JtYXQuXG5cdCAqL1xuXHRyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0dGhpczogQ29udHJvbCxcblx0XHRzUHJvcGVydHlWYWx1ZTogc3RyaW5nLFxuXHRcdHNQcm9wZXJ0eUZ1bGxQYXRoOiBzdHJpbmcsXG5cdFx0c0Rpc3BsYXlGb3JtYXQ6IHN0cmluZ1xuXHQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdGxldCBzVGV4dFByb3BlcnR5OiBzdHJpbmc7XG5cdFx0bGV0IG9NZXRhTW9kZWw7XG5cdFx0bGV0IHNQcm9wZXJ0eU5hbWU6IHN0cmluZztcblx0XHRpZiAoc1Byb3BlcnR5VmFsdWUpIHtcblx0XHRcdG9NZXRhTW9kZWwgPSAodGhpcy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCkgfHwgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0c1Byb3BlcnR5TmFtZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQcm9wZXJ0eUZ1bGxQYXRofUBzYXB1aS5uYW1lYCk7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdHJldHVybiBvTWV0YU1vZGVsXG5cdFx0XHRcdC5yZXF1ZXN0VmFsdWVMaXN0SW5mbyhzUHJvcGVydHlGdWxsUGF0aCwgdHJ1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG1WYWx1ZUxpc3RJbmZvKSB7XG5cdFx0XHRcdFx0Ly8gdGFrZSB0aGUgXCJcIiBvbmUgaWYgZXhpc3RzLCBvdGhlcndpc2UgdGFrZSB0aGUgZmlyc3Qgb25lIGluIHRoZSBvYmplY3QgVE9ETzogdG8gYmUgZGlzY3Vzc2VkXG5cdFx0XHRcdFx0Y29uc3Qgb1ZhbHVlTGlzdEluZm8gPSBtVmFsdWVMaXN0SW5mb1ttVmFsdWVMaXN0SW5mb1tcIlwiXSA/IFwiXCIgOiBPYmplY3Qua2V5cyhtVmFsdWVMaXN0SW5mbylbMF1dO1xuXHRcdFx0XHRcdGNvbnN0IG9WYWx1ZUxpc3RNb2RlbCA9IG9WYWx1ZUxpc3RJbmZvLiRtb2RlbDtcblx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsVmFsdWVMaXN0ID0gb1ZhbHVlTGlzdE1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRcdGNvbnN0IG9QYXJhbVdpdGhLZXkgPSBvVmFsdWVMaXN0SW5mby5QYXJhbWV0ZXJzLmZpbmQoZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IHtcblx0XHRcdFx0XHRcdExvY2FsRGF0YVByb3BlcnR5PzogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfTtcblx0XHRcdFx0XHR9KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eSAmJiBvUGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5LiRQcm9wZXJ0eVBhdGggPT09IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKG9QYXJhbVdpdGhLZXkgJiYgIW9QYXJhbVdpdGhLZXkuVmFsdWVMaXN0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW5jb25zaXN0ZW50IHZhbHVlIGhlbHAgYW5ub3RhdGlvbiBmb3IgJHtzUHJvcGVydHlOYW1lfWApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvTWV0YU1vZGVsVmFsdWVMaXN0LmdldE9iamVjdChcblx0XHRcdFx0XHRcdGAvJHtvVmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH0vJHtvUGFyYW1XaXRoS2V5LlZhbHVlTGlzdFByb3BlcnR5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGBcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKG9UZXh0QW5ub3RhdGlvbiAmJiBvVGV4dEFubm90YXRpb24uJFBhdGgpIHtcblx0XHRcdFx0XHRcdHNUZXh0UHJvcGVydHkgPSBvVGV4dEFubm90YXRpb24uJFBhdGg7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSBGaWVsZFJ1bnRpbWUuY3JlYXRlVmFsdWVMaXN0RmlsdGVycyhcblx0XHRcdFx0XHRcdFx0b1ZhbHVlTGlzdEluZm8sXG5cdFx0XHRcdFx0XHRcdG9QYXJhbVdpdGhLZXkuVmFsdWVMaXN0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdHNQcm9wZXJ0eVZhbHVlLFxuXHRcdFx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gb1ZhbHVlTGlzdE1vZGVsLmJpbmRMaXN0KGAvJHtvVmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmlsdGVycywge1xuXHRcdFx0XHRcdFx0XHQkc2VsZWN0OiBzVGV4dFByb3BlcnR5XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBsaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMik7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNEaXNwbGF5Rm9ybWF0ID0gXCJWYWx1ZVwiO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNQcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFDb250ZXh0czogQ29udGV4dFtdKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc0Rlc2NyaXB0aW9uID0gc1RleHRQcm9wZXJ0eSA/IGFDb250ZXh0c1swXT8uZ2V0T2JqZWN0KClbc1RleHRQcm9wZXJ0eV0gOiBcIlwiO1xuXHRcdFx0XHRcdGlmICghc0Rlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc1Byb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN3aXRjaCAoc0Rpc3BsYXlGb3JtYXQpIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc0Rlc2NyaXB0aW9uIHx8IHNQcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIkNfRk9STUFUX0ZPUl9URVhUX0FSUkFOR0VNRU5UXCIsIFtcblx0XHRcdFx0XHRcdFx0XHRzRGVzY3JpcHRpb24sXG5cdFx0XHRcdFx0XHRcdFx0c1Byb3BlcnR5VmFsdWVcblx0XHRcdFx0XHRcdFx0XSk7XG5cdFx0XHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiQ19GT1JNQVRfRk9SX1RFWFRfQVJSQU5HRU1FTlRcIiwgW1xuXHRcdFx0XHRcdFx0XHRcdHNQcm9wZXJ0eVZhbHVlLFxuXHRcdFx0XHRcdFx0XHRcdHNEZXNjcmlwdGlvblxuXHRcdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzUHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0Y29uc3QgZXJyb3JPYmogPSBvRXJyb3IgYXMgeyBzdGF0dXM6IG51bWJlcjsgbWVzc2FnZTogc3RyaW5nIH07XG5cdFx0XHRcdFx0Y29uc3Qgc01zZyA9XG5cdFx0XHRcdFx0XHRlcnJvck9iai5zdGF0dXMgJiYgZXJyb3JPYmouc3RhdHVzID09PSA0MDRcblx0XHRcdFx0XHRcdFx0PyBgTWV0YWRhdGEgbm90IGZvdW5kICgke2Vycm9yT2JqLnN0YXR1c30pIGZvciB2YWx1ZSBoZWxwIG9mIHByb3BlcnR5ICR7c1Byb3BlcnR5RnVsbFBhdGh9YFxuXHRcdFx0XHRcdFx0XHQ6IGVycm9yT2JqLm1lc3NhZ2U7XG5cdFx0XHRcdFx0TG9nLmVycm9yKHNNc2cpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHNQcm9wZXJ0eVZhbHVlO1xuXHR9LFxuXG5cdGRpc3BsYXlBZ2dyZWdhdGVEZXRhaWxzOiBhc3luYyBmdW5jdGlvbiAoZXZlbnQ6IEV2ZW50LCBhZ2dyZWdhdGVkUHJvcGVydHlQYXRoPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCFhZ2dyZWdhdGVkUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGxpbmsgPSBldmVudC5nZXRTb3VyY2U8TGluaz4oKTtcblx0XHRjb25zdCBhbmFseXRpY2FsVGFibGUgPSBGUE1IZWxwZXIuZ2V0TWRjVGFibGUobGluaykhO1xuXG5cdFx0Y29uc3Qgcm93Q29udGV4dCA9IGxpbmsuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGNvbnN0IHRhYmxlUm93QmluZGluZyA9IHJvd0NvbnRleHQuZ2V0QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cblx0XHQvLyBHZXQgdGhlIGZpbHRlcnMgY29ycmVzcG9uZGluZyB0byB0aGUgdG90YWwgcm93XG5cdFx0Y29uc3Qgcm93Q29udGV4dERhdGEgPSByb3dDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGNvbnN0IHJvd1NwZWNpZmljRmlsdGVyOiBGaWx0ZXJbXSA9IFtdO1xuXHRcdGNvbnN0IHJvd0ZpbHRlciA9IHJvd0NvbnRleHQuZ2V0RmlsdGVyKCk7XG5cdFx0aWYgKHJvd0ZpbHRlcikge1xuXHRcdFx0cm93U3BlY2lmaWNGaWx0ZXIucHVzaChyb3dGaWx0ZXIpO1xuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgZmlsdGVycyBhcHBsaWVkIHRvIHRoZSBvcmlnaW5hbCB0YWJsZVxuXHRcdGNvbnN0IGFsbEZpbHRlcnMgPSByb3dTcGVjaWZpY0ZpbHRlci5jb25jYXQodGFibGVSb3dCaW5kaW5nLmdldEZpbHRlcnMoXCJBcHBsaWNhdGlvblwiKSwgdGFibGVSb3dCaW5kaW5nLmdldEZpbHRlcnMoXCJDb250cm9sXCIpKTtcblxuXHRcdC8vIENhbGN1bGF0ZSAkJGFnZ3JlZ2F0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSB0YWJsZSBpbiB0aGUgcG9wb3ZlciAoYWdncmVnYXRlIGFtb3VudCwgZ3JvdXAgYnkgY3VycmVuY3kvdW5pdClcblx0XHRjb25zdCBhZ2dyZWdhdGlvbiA9IHRhYmxlUm93QmluZGluZy5nZXRBZ2dyZWdhdGlvbigpIGFzIHtcblx0XHRcdGdyb3VwOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuXHRcdFx0YWdncmVnYXRlOiBSZWNvcmQ8c3RyaW5nLCB7IHVuaXQ6IHN0cmluZyB9Pjtcblx0XHRcdHNlYXJjaD86IHN0cmluZztcblx0XHR9O1xuXHRcdGNvbnN0IHVuaXRPckN1cnJlbmN5TmFtZSA9IGFnZ3JlZ2F0aW9uLmFnZ3JlZ2F0ZVthZ2dyZWdhdGVkUHJvcGVydHlQYXRoXS51bml0O1xuXHRcdGNvbnN0IGdyb3VwOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdFx0Z3JvdXBbdW5pdE9yQ3VycmVuY3lOYW1lXSA9IHt9O1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRcdGFnZ3JlZ2F0ZVthZ2dyZWdhdGVkUHJvcGVydHlQYXRoXSA9IHsgZ3JhbmRUb3RhbDogZmFsc2UsIHN1YnRvdGFsczogZmFsc2UsIHVuaXQ6IHVuaXRPckN1cnJlbmN5TmFtZSB9O1xuXG5cdFx0Ly8gVGhlIGl0ZW0gZGlzcGxheWVkIGluIHRoZSB0YWJsZSBpbiB0aGUgcG9wb3ZlciBpcyBhIGNvcHkgb2YgdGhlIGl0ZW0gZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuXHRcdGNvbnN0IHRhYmxlSXRlbSA9IGxpbmsuZ2V0RGVwZW5kZW50cygpWzBdLmNsb25lKCk7XG5cdFx0Y29uc3QgY3VycmVuY3lPclF1YW50aXR5RW5hYmxlZExheW91dCA9IG5ldyBIQm94KHtcblx0XHRcdHJlbmRlclR5cGU6IFwiQmFyZVwiLFxuXHRcdFx0anVzdGlmeUNvbnRlbnQ6IFwiRW5kXCIsXG5cdFx0XHRpdGVtczogW3RhYmxlSXRlbV1cblx0XHR9IGFzICRIQm94U2V0dGluZ3MpO1xuXG5cdFx0Y29uc3QgYWdncmVnYXRpb25QYXJhbWV0ZXJzOiB7XG5cdFx0XHRncm91cDogUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0XHRcdGFnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0XHRcdHNlYXJjaD86IHN0cmluZztcblx0XHR9ID0geyBncm91cCwgYWdncmVnYXRlIH07XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uLnNlYXJjaCkge1xuXHRcdFx0YWdncmVnYXRpb25QYXJhbWV0ZXJzLnNlYXJjaCA9IGFnZ3JlZ2F0aW9uLnNlYXJjaDtcblx0XHR9XG5cblx0XHRjb25zdCBvSXRlbXNCaW5kaW5nSW5mbyA9IHtcblx0XHRcdHBhdGg6IHRhYmxlUm93QmluZGluZy5nZXRSZXNvbHZlZFBhdGgoKSxcblx0XHRcdGZpbHRlcnM6IGFsbEZpbHRlcnMsXG5cdFx0XHRwYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdCQkYWdncmVnYXRpb246IGFnZ3JlZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0fSxcblx0XHRcdHNvcnRlcjogbmV3IFNvcnRlcih1bml0T3JDdXJyZW5jeU5hbWUsIGZhbHNlKSAvLyBPcmRlciBieSBjdXJyZW5jeVxuXHRcdH07XG5cblx0XHRjb25zdCBpc1BvcG92ZXJGb3JHcmFuZFRvdGFsID0gcm93Q29udGV4dERhdGFbXCJAJHVpNS5ub2RlLmxldmVsXCJdID09PSAwO1xuXHRcdGNvbnN0IHBvcG92ZXI6IFJlc3BvbnNpdmVQb3BvdmVyID0gYXdhaXQgVXRpbC5jcmVhdGVPclVwZGF0ZU11bHRpVW5pdFBvcG92ZXIoYCR7YW5hbHl0aWNhbFRhYmxlLmdldElkKCl9LW11bHRpVW5pdFBvcG92ZXJgLCB7XG5cdFx0XHRjb250cm9sOiBhbmFseXRpY2FsVGFibGUsXG5cdFx0XHRncmFuZFRvdGFsOiBpc1BvcG92ZXJGb3JHcmFuZFRvdGFsLFxuXHRcdFx0aXRlbXNCaW5kaW5nSW5mbzogb0l0ZW1zQmluZGluZ0luZm8sXG5cdFx0XHRsaXN0SXRlbUNvbnRlbnRUZW1wbGF0ZTogY3VycmVuY3lPclF1YW50aXR5RW5hYmxlZExheW91dFxuXHRcdH0pO1xuXHRcdGFuYWx5dGljYWxUYWJsZS5hZGREZXBlbmRlbnQocG9wb3Zlcik7XG5cblx0XHRjb25zdCBmbk9uQ2xvc2UgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRhbmFseXRpY2FsVGFibGUucmVtb3ZlRGVwZW5kZW50KHBvcG92ZXIpO1xuXHRcdFx0cG9wb3Zlci5kZXRhY2hFdmVudChcImFmdGVyQ2xvc2VcIiwgZm5PbkNsb3NlKTtcblx0XHRcdHBvcG92ZXIuZGVzdHJveSgpO1xuXHRcdH07XG5cdFx0cG9wb3Zlci5hdHRhY2hFdmVudChcImFmdGVyQ2xvc2VcIiwgZm5PbkNsb3NlKTtcblx0XHRwb3BvdmVyLm9wZW5CeShsaW5rKTtcblx0fVxufTtcblxuT2JqZWN0UGF0aC5zZXQoXCJzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkUnVudGltZVwiLCBGaWVsZFJ1bnRpbWUpO1xuXG5leHBvcnQgZGVmYXVsdCBGaWVsZFJ1bnRpbWU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7RUF3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLE1BQU1BLFlBQVksR0FBRztJQUNwQkMsY0FBYyxFQUFFLENBQUMsQ0FBNEQ7SUFDN0VDLG1CQUFtQixFQUFFLEtBQUs7SUFFMUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLHVCQUF1QixFQUFFLFNBQUFBLENBQ3hCQyxhQUFxQixFQUNyQkMsNkJBQXFDLEVBQ3JDQyxjQUF3QixFQUN4QkMsY0FBd0IsRUFDeEJDLGFBQXVCLEVBQ2I7TUFDVixJQUFJRCxjQUFjLEtBQUtFLFNBQVMsSUFBSUgsY0FBYyxLQUFLRyxTQUFTLEtBQUssQ0FBQ0YsY0FBYyxJQUFJRCxjQUFjLENBQUMsSUFBSSxDQUFDRSxhQUFhLEVBQUU7UUFDMUgsT0FBT0osYUFBYSxLQUFLQyw2QkFBNkI7TUFDdkQsQ0FBQyxNQUFNO1FBQ04sT0FBTyxLQUFLO01BQ2I7SUFDRCxDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7SUFDQ0ssb0JBQW9CLEVBQUUsU0FBQUEsQ0FBVUMsTUFBdUMsRUFBUTtNQUM5RSxNQUFNQyxZQUFZLEdBQUdELE1BQU0sQ0FBQ0UsU0FBUyxDQUFDLENBQWtCO01BQ3hELE1BQU1DLElBQUksR0FBR0MsV0FBVyxDQUFDQyxhQUFhLENBQUNKLFlBQVksQ0FBQztRQUNuREssVUFBVSxHQUFHSCxJ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
@@ -3,6 +3,7 @@ import ObjectPath from "sap/base/util/ObjectPath";
3
3
  import CommonUtils from "sap/fe/core/CommonUtils";
4
4
  import FPMHelper from "sap/fe/core/helpers/FPMHelper";
5
5
  import CommonHelper from "sap/fe/macros/CommonHelper";
6
+ import type { AnnotationValueListType } from "sap/fe/macros/internal/valuehelp/ValueListHelper";
6
7
  import type { $HBoxSettings } from "sap/m/HBox";
7
8
  import HBox from "sap/m/HBox";
8
9
  import type Link from "sap/m/Link";
@@ -13,6 +14,7 @@ import type ManagedObject from "sap/ui/base/ManagedObject";
13
14
  import type Control from "sap/ui/core/Control";
14
15
  import type { Control$ValidateFieldGroupEvent } from "sap/ui/core/Control";
15
16
  import Library from "sap/ui/core/Lib";
17
+ import type BaseContext from "sap/ui/model/Context";
16
18
  import Filter from "sap/ui/model/Filter";
17
19
  import Sorter from "sap/ui/model/Sorter";
18
20
  import type Context from "sap/ui/model/odata/v4/Context";
@@ -73,6 +75,59 @@ const FieldRuntime = {
73
75
  return sCurrentHash;
74
76
  },
75
77
 
78
+ /**
79
+ * Creates filters for ValueList requests based on ValueListParameterIn and ValueListParameterInOut annotations.
80
+ * @param valueListInfo The ValueList annotation information
81
+ * @param propertyId The ID property of the IdAndDesciption of the text arrangement annotation
82
+ * @param propertyValue The value for the propertyId property
83
+ * @param bindingContext The binding context to get values from
84
+ * @returns Array of filters for the ValueList request
85
+ */
86
+ createValueListFilters: function (
87
+ valueListInfo: AnnotationValueListType,
88
+ propertyId: string,
89
+ propertyValue: string,
90
+ bindingContext: BaseContext | null | undefined
91
+ ): Filter[] {
92
+ // Start with the key filter
93
+ const filters: Filter[] = [
94
+ new Filter({
95
+ path: propertyId,
96
+ operator: "EQ",
97
+ value1: propertyValue
98
+ })
99
+ ];
100
+
101
+ if (bindingContext && valueListInfo.Parameters) {
102
+ const relevantParameters = valueListInfo.Parameters.filter((parameter) => {
103
+ const isInOrInOut =
104
+ parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterIn" ||
105
+ parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterInOut";
106
+ return (
107
+ isInOrInOut &&
108
+ parameter.LocalDataProperty?.$PropertyPath &&
109
+ parameter.ValueListProperty &&
110
+ parameter.ValueListProperty !== propertyId
111
+ );
112
+ });
113
+
114
+ relevantParameters.forEach((parameter) => {
115
+ const localValue = bindingContext.getProperty(parameter.LocalDataProperty!.$PropertyPath);
116
+ if (localValue !== undefined && localValue !== null && localValue !== "") {
117
+ filters.push(
118
+ new Filter({
119
+ path: parameter.ValueListProperty,
120
+ operator: "EQ",
121
+ value1: localValue
122
+ })
123
+ );
124
+ }
125
+ });
126
+ }
127
+
128
+ return filters;
129
+ },
130
+
76
131
  /**
77
132
  * Method to retrieve text from the value list for DataField.
78
133
  * This is a formatter in disguise.
@@ -93,6 +148,7 @@ const FieldRuntime = {
93
148
  if (sPropertyValue) {
94
149
  oMetaModel = (this.getModel()?.getMetaModel() as ODataMetaModel) || CommonHelper.getMetaModel();
95
150
  sPropertyName = oMetaModel.getObject(`${sPropertyFullPath}@sapui.name`);
151
+ const bindingContext = this.getBindingContext();
96
152
  return oMetaModel
97
153
  .requestValueListInfo(sPropertyFullPath, true)
98
154
  .then(function (mValueListInfo) {
@@ -114,15 +170,17 @@ const FieldRuntime = {
114
170
 
115
171
  if (oTextAnnotation && oTextAnnotation.$Path) {
116
172
  sTextProperty = oTextAnnotation.$Path;
117
- const oFilter = new Filter({
118
- path: oParamWithKey.ValueListProperty,
119
- operator: "EQ",
120
- value1: sPropertyValue
121
- });
122
- const oListBinding = oValueListModel.bindList(`/${oValueListInfo.CollectionPath}`, undefined, undefined, oFilter, {
173
+
174
+ const filters = FieldRuntime.createValueListFilters(
175
+ oValueListInfo,
176
+ oParamWithKey.ValueListProperty,
177
+ sPropertyValue,
178
+ bindingContext
179
+ );
180
+ const listBinding = oValueListModel.bindList(`/${oValueListInfo.CollectionPath}`, undefined, undefined, filters, {
123
181
  $select: sTextProperty
124
182
  });
125
- return oListBinding.requestContexts(0, 2);
183
+ return listBinding.requestContexts(0, 2);
126
184
  } else {
127
185
  sDisplayFormat = "Value";
128
186
  return sPropertyValue;