@sapui5/sap.fe.macros 1.120.23 → 1.120.25
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.
- package/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +10 -5
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +18 -6
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/messagebundle_de.properties +1 -1
- package/src/sap/fe/macros/messagebundle_uk.properties +1 -1
package/package.json
CHANGED
|
@@ -100,6 +100,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
100
100
|
const sortRestrictionsInfo = getSortRestrictionsInfo(entitySetAnnotations);
|
|
101
101
|
const filterRestrictions = entitySetAnnotations["@Org.OData.Capabilities.V1.FilterRestrictions"];
|
|
102
102
|
const filterRestrictionsInfo = getFilterRestrictionsInfo(filterRestrictions);
|
|
103
|
+
const filterFunctions = entitySetAnnotations["@Org.OData.Capabilities.V1.FilterFunctions"];
|
|
104
|
+
const caseSensitive = ModelHelper.isFilteringCaseSensitive(metaModel, filterFunctions);
|
|
103
105
|
const customDataForColumns = MacrosDelegateUtil.getCustomData(table, "columns");
|
|
104
106
|
const propertiesToBeCreated = {};
|
|
105
107
|
const dataModelEntityPath = getInvolvedDataModelObjects(table.getModel().getMetaModel().getContext(entitySetPath));
|
|
@@ -110,7 +112,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
110
112
|
sortable: isSortableProperty(sortRestrictionsInfo, columnDef),
|
|
111
113
|
filterable: isFilterableProperty(filterRestrictionsInfo, columnDef),
|
|
112
114
|
maxConditions: getPropertyMaxConditions(filterRestrictionsInfo, columnDef),
|
|
113
|
-
typeConfig: isTypeFilterable(columnDef.$Type) ? table.getTypeMap().getTypeConfig(columnDef.$Type) : undefined
|
|
115
|
+
typeConfig: isTypeFilterable(columnDef.$Type) ? table.getTypeMap().getTypeConfig(columnDef.$Type) : undefined,
|
|
116
|
+
caseSensitive
|
|
114
117
|
};
|
|
115
118
|
const dataModelPropertyPath = enhanceDataModelPath(dataModelEntityPath, columnDef.path);
|
|
116
119
|
const property = dataModelPropertyPath.targetObject;
|
|
@@ -147,7 +150,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
147
150
|
}
|
|
148
151
|
properties.push(propertyInfo);
|
|
149
152
|
});
|
|
150
|
-
const relatedColumns = createRelatedProperties(propertiesToBeCreated, properties, sortRestrictionsInfo, filterRestrictionsInfo);
|
|
153
|
+
const relatedColumns = createRelatedProperties(propertiesToBeCreated, properties, sortRestrictionsInfo, filterRestrictionsInfo, caseSensitive);
|
|
151
154
|
return properties.concat(relatedColumns);
|
|
152
155
|
});
|
|
153
156
|
};
|
|
@@ -338,10 +341,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
338
341
|
* @param existingColumns The list of columns created for properties defined on the Value List.
|
|
339
342
|
* @param sortRestrictionsInfo An object containing the sort restriction information
|
|
340
343
|
* @param filterRestrictionsInfo An object containing the filter restriction information
|
|
344
|
+
* @param caseSensitive Should filtering be case sensitive
|
|
341
345
|
* @returns The array of properties created.
|
|
342
346
|
* @private
|
|
343
347
|
*/
|
|
344
|
-
function createRelatedProperties(propertiesToBeCreated, existingColumns, sortRestrictionsInfo, filterRestrictionsInfo) {
|
|
348
|
+
function createRelatedProperties(propertiesToBeCreated, existingColumns, sortRestrictionsInfo, filterRestrictionsInfo, caseSensitive) {
|
|
345
349
|
const relatedPropertyNameMap = {},
|
|
346
350
|
relatedColumns = [];
|
|
347
351
|
Object.keys(propertiesToBeCreated).forEach(path => {
|
|
@@ -355,7 +359,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
355
359
|
label: getLabel(property),
|
|
356
360
|
path: path,
|
|
357
361
|
sortable: isSortableProperty(sortRestrictionsInfo, property),
|
|
358
|
-
filterable: isFilterableProperty(filterRestrictionsInfo, property)
|
|
362
|
+
filterable: isFilterableProperty(filterRestrictionsInfo, property),
|
|
363
|
+
caseSensitive
|
|
359
364
|
};
|
|
360
365
|
valueHelpTableColumn.maxConditions = getPropertyMaxConditions(filterRestrictionsInfo, valueHelpTableColumn);
|
|
361
366
|
if (isTypeFilterable(property.type)) {
|
|
@@ -415,4 +420,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/CommonUti
|
|
|
415
420
|
}
|
|
416
421
|
return ODataTableDelegate;
|
|
417
422
|
}, false);
|
|
418
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YVRhYmxlRGVsZWdhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJUYWJsZURlbGVnYXRlIiwiZmV0Y2hQcm9wZXJ0aWVzIiwidGFibGUiLCJtb2RlbCIsIl9nZXRNb2RlbCIsInByb3BlcnRpZXMiLCJfY3JlYXRlUHJvcGVydHlJbmZvcyIsImNyZWF0ZUludGVybmFsQmluZGluZ0NvbnRleHQiLCJNYWNyb3NEZWxlZ2F0ZVV0aWwiLCJzZXRDYWNoZWRQcm9wZXJ0aWVzIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzZXRQcm9wZXJ0eSIsImRpYWxvZyIsImlzQSIsImdldFBhcmVudCIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsImludGVybmFsQmluZGluZ0NvbnRleHQiLCJuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCIsImdldFBhdGgiLCJnZXRJZCIsImdldFByb3BlcnR5IiwibmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJkYXRhTW9kZWxQcm9wZXJ0eVBhdGgiLCJkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0QWRkaXRpb25hbFByb3BlcnR5IiwicmVsYXRlZFByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJhZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsInByb3BlcnR5IiwicHJvcGVydHlQYXRoIiwidGV4dEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsInRvU3RyaW5nIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsIm1ldGFkYXRhSW5mbyIsImdldERlbGVnYXRlIiwicGF5bG9hZCIsImVudGl0eVNldFBhdGgiLCJjb2xsZWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInJlcXVlc3RPYmplY3QiLCJ0aGVuIiwiZW50aXR5U2V0QW5ub3RhdGlvbnMiLCJzb3J0UmVzdHJpY3Rpb25zSW5mbyIsImdldFNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZmlsdGVyUmVzdHJpY3Rpb25zIiwiZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJjdXN0b21EYXRhRm9yQ29sdW1ucyIsImdldEN1c3RvbURhdGEiLCJwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQiLCJkYXRhTW9kZWxFbnRpdHlQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImN1c3RvbURhdGEiLCJmb3JFYWNoIiwiY29sdW1uRGVmIiwicHJvcGVydHlJbmZvIiwibmFtZSIsInBhdGgiLCJsYWJlbCIsInNvcnRhYmxlIiwiaXNTb3J0YWJsZVByb3BlcnR5IiwiZmlsdGVyYWJsZSIsImlzRmlsdGVyYWJsZVByb3BlcnR5IiwibWF4Q29uZGl0aW9ucyIsImdldFByb3BlcnR5TWF4Q29uZGl0aW9ucyIsInR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiJFR5cGUiLCJnZXRUeXBlTWFwIiwiZ2V0VHlwZUNvbmZpZyIsInVuZGVmaW5lZCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwidGFyZ2V0UHJvcGVydHlQYXRoIiwidHlwZSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImZldGNoVHlwZUNvbmZpZyIsIlR5cGVNYXAiLCJmb3JtYXRPcHRpb25zIiwiY29uc3RyYWludHMiLCJyZWxhdGVkUHJvcGVydGllc0luZm8iLCJyZWxhdGVkUHJvcGVydHlQYXRocyIsImtleXMiLCJsZW5ndGgiLCJwcm9wZXJ0eUluZm9zIiwiZmluZCIsInB1c2giLCJyZWxhdGVkQ29sdW1ucyIsImNyZWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzIiwiY29uY2F0IiwidXBkYXRlQmluZGluZ0luZm8iLCJvTURDVGFibGUiLCJvQmluZGluZ0luZm8iLCJhcHBseSIsIm9NZXRhZGF0YUluZm8iLCJjb2xsZWN0aW9uUGF0aCIsIm9GaWx0ZXIiLCJDb3JlIiwiYnlJZCIsImdldEZpbHRlciIsImJGaWx0ZXJFbmFibGVkIiwiaXNGaWx0ZXJpbmdFbmFibGVkIiwibUNvbmRpdGlvbnMiLCJvSW5uZXJGaWx0ZXJJbmZvIiwib091dGVyRmlsdGVySW5mbyIsImFGaWx0ZXJzIiwidGFibGVQcm9wZXJ0aWVzIiwiZ2V0Q2FjaGVkUHJvcGVydGllcyIsImdldENvbmRpdGlvbnMiLCJGaWx0ZXJVdGlsIiwiZ2V0RmlsdGVySW5mbyIsImZpbHRlcnMiLCJhUGFyYW1ldGVyTmFtZXMiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRQYXJhbWV0ZXJOYW1lcyIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJzUGFyYW1ldGVyUGF0aCIsImdldFBhcmFtZXRlcnNJbmZvIiwicGFyYW1ldGVycyIsIiRzZWFyY2giLCJDb21tb25VdGlscyIsIm5vcm1hbGl6ZVNlYXJjaFRlcm0iLCJnZXRTZWFyY2giLCIkJHNoYXJlZFJlcXVlc3QiLCJfYXBwbHlEZWZhdWx0U29ydGluZyIsIiRzZWxlY3QiLCJyZWR1Y2UiLCJzUXVlcnkiLCJvUHJvcGVydHkiLCJpbmRleE9mIiwiJGNvdW50IiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiRmlsdGVyIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSIsIlByb21pc2UiLCJyZXNvbHZlIiwiYXR0YWNoRXZlbnRPbmNlIiwib1BheWxvYWQiLCJzb3J0ZXIiLCJkZWZhdWx0U29ydFByb3BlcnR5TmFtZSIsIlNvcnRlciIsImFUYWJsZVByb3BlcnRpZXMiLCJhQ29uZGl0aW9uS2V5Iiwib01ldGFNb2RlbCIsImNvbmRpdGlvbktleSIsImZpbmRJbmRleCIsInRhYmxlUHJvcGVydHkiLCJvQ29sdW1uRGVmIiwiZ2V0T2JqZWN0IiwidXBkYXRlQmluZGluZyIsIm9UYWJsZSIsIm9CaW5kaW5nIiwiYk5lZWRNYW51YWxSZWZyZXNoIiwib0ludGVybmFsQmluZGluZ0NvbnRleHQiLCJzTWFudWFsVXBkYXRlUHJvcGVydHlLZXkiLCJzTGFzdFNlYXJjaCIsInNMYXN0RmlsdGVyIiwiYlBlbmRpbmdNYW51YWxVcGRhdGUiLCJsYXN0U2VhcmNoIiwibGFzdEZpbHRlciIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImRlZXBFcXVhbCIsInJlcXVlc3RSZWZyZXNoIiwiZ2V0R3JvdXBJZCIsImZpbmFsbHkiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiZmlyZUV2ZW50IiwiZXhpc3RpbmdDb2x1bW5zIiwicmVsYXRlZFByb3BlcnR5TmFtZU1hcCIsInJlbGF0ZWRDb2x1bW4iLCJjb2x1bW4iLCJuZXdOYW1lIiwidmFsdWVIZWxwVGFibGVDb2x1bW4iLCJnZXRMYWJlbCIsIm1hcCIsImNvbHVtbk5hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsImlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24iLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwiZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZURlbGVnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGZldGNoVHlwZUNvbmZpZyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU29ydFJlc3RyaWN0aW9uc0luZm9UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCB7IGdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8sIGdldFNvcnRSZXN0cmljdGlvbnNJbmZvLCBpc011bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoLFxuXHRnZXRMYWJlbFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEZWZhdWx0VHlwZUZvckVkbVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB7IGlzVHlwZUZpbHRlcmFibGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdHlwZS9FRE1cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgTWFjcm9zRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHsgZ2V0UGF0aCwgaXNGaWx0ZXJhYmxlUHJvcGVydHksIGlzU29ydGFibGVQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9UYWJsZURlbGVnYXRlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IFRhYmxlRGVsZWdhdGUgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVGFibGVEZWxlZ2F0ZVwiO1xuaW1wb3J0IFR5cGVNYXAgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC91dGlsL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBGaWx0ZXJVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3V0aWwvRmlsdGVyVXRpbFwiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTURDVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5cbmV4cG9ydCB0eXBlIFZhbHVlSGVscFRhYmxlQ29sdW1uID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0c29ydGFibGU/OiBib29sZWFuO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0ZmlsdGVyYWJsZT86IGJvb2xlYW47XG5cdHR5cGVDb25maWc/OiBPYmplY3Q7XG5cdG1heENvbmRpdGlvbnM/OiBudW1iZXI7XG59O1xudHlwZSBDb21wbGV4UHJvcGVydHlNYXAgPSBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT47XG5cbi8qKlxuICogVGVzdCBkZWxlZ2F0ZSBmb3IgT0RhdGEgVjQuXG4gKi9cbmNvbnN0IE9EYXRhVGFibGVEZWxlZ2F0ZSA9IE9iamVjdC5hc3NpZ24oe30sIFRhYmxlRGVsZWdhdGUpO1xuXG4vKipcbiAqIEZldGNoZXMgdGhlIHJlbGV2YW50IG1ldGFkYXRhIGZvciB0aGUgdGFibGUgYW5kIHJldHVybnMgcHJvcGVydHkgaW5mbyBhcnJheS5cbiAqXG4gKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG4gKiBAcmV0dXJucyBBcnJheSBvZiBwcm9wZXJ0eSBpbmZvXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5mZXRjaFByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTxQcm9wZXJ0eUluZm8+IHtcblx0Y29uc3QgbW9kZWwgPSBhd2FpdCB0aGlzLl9nZXRNb2RlbCh0YWJsZSk7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBhd2FpdCB0aGlzLl9jcmVhdGVQcm9wZXJ0eUluZm9zKHRhYmxlLCBtb2RlbCk7XG5cdE9EYXRhVGFibGVEZWxlZ2F0ZS5jcmVhdGVJbnRlcm5hbEJpbmRpbmdDb250ZXh0KHRhYmxlKTtcblx0TWFjcm9zRGVsZWdhdGVVdGlsLnNldENhY2hlZFByb3BlcnRpZXModGFibGUsIHByb3BlcnRpZXMpO1xuXHQodGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KS5zZXRQcm9wZXJ0eShcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCB0cnVlKTtcblx0cmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG5PRGF0YVRhYmxlRGVsZWdhdGUuY3JlYXRlSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpIHtcblx0bGV0IGRpYWxvZzogTWFuYWdlZE9iamVjdCB8IG51bGwgPSB0YWJsZTtcblx0d2hpbGUgKGRpYWxvZyAmJiAhZGlhbG9nLmlzQShcInNhcC51aS5tZGMudmFsdWVoZWxwLkRpYWxvZ1wiKSkge1xuXHRcdGRpYWxvZyA9IChkaWFsb2cgYXMgTWFuYWdlZE9iamVjdCkuZ2V0UGFyZW50KCk7XG5cdH1cblxuXHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGFibGUuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0aWYgKGRpYWxvZyAmJiBpbnRlcm5hbE1vZGVsKSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IGRpYWxvZy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGxldCBuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aDtcblx0XHRpZiAoaW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0bmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dFBhdGggPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSArIGA6OlZIRGlhbG9nOjoke2RpYWxvZy5nZXRJZCgpfTo6dGFibGVgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCA9IGAvYnVpbGRpbmdibG9ja3MvJHt0YWJsZS5nZXRJZCgpfWA7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL2J1aWxkaW5nYmxvY2tzXCIsIHsgLi4uaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9idWlsZGluZ2Jsb2Nrc1wiKSB9KTtcblx0XHR9XG5cdFx0Y29uc3QgbmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IGludGVybmFsTW9kZWwuYmluZENvbnRleHQobmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dFBhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdHRhYmxlLnNldEJpbmRpbmdDb250ZXh0KG5ld0ludGVybmFsQmluZGluZ0NvbnRleHQhLCBcImludGVybmFsXCIpO1xuXHR9XG59O1xuXG4vKipcbiAqIENvbGxlY3QgcmVsYXRlZCBwcm9wZXJ0aWVzIGZyb20gYSBwcm9wZXJ0eSdzIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBkYXRhTW9kZWxQcm9wZXJ0eVBhdGggVGhlIG1vZGVsIG9iamVjdCBwYXRoIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgdGhhdCB3ZXJlIGlkZW50aWZpZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoZGF0YU1vZGVsUHJvcGVydHlQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdGNvbnN0IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPSBnZXRBZGRpdGlvbmFsUHJvcGVydHkoZGF0YU1vZGVsUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eU1hcCA9IHt9O1xuXHRpZiAoZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aD8udGFyZ2V0T2JqZWN0KSB7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5ID0gZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aCwgdHJ1ZSk7XG5cblx0XHRjb25zdCBwcm9wZXJ0eSA9IGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxQcm9wZXJ0eVBhdGgsIHRydWUpO1xuXG5cdFx0Y29uc3QgdGV4dEFubm90YXRpb24gPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LFxuXHRcdFx0dGV4dEFycmFuZ2VtZW50ID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50Py50b1N0cmluZygpLFxuXHRcdFx0ZGlzcGxheU1vZGUgPSB0ZXh0QW5ub3RhdGlvbiAmJiB0ZXh0QXJyYW5nZW1lbnQgJiYgZ2V0RGlzcGxheU1vZGUocHJvcGVydHkpO1xuXG5cdFx0aWYgKGRpc3BsYXlNb2RlID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzW2FkZGl0aW9uYWxQcm9wZXJ0eVBhdGhdID0gYWRkaXRpb25hbFByb3BlcnR5O1xuXHRcdH0gZWxzZSBpZiAoKGRpc3BsYXlNb2RlICYmIGRpc3BsYXlNb2RlICE9PSBcIlZhbHVlXCIpIHx8ICF0ZXh0QW5ub3RhdGlvbikge1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXNbcHJvcGVydHlQYXRoXSA9IHByb3BlcnR5O1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXNbYWRkaXRpb25hbFByb3BlcnR5UGF0aF0gPSBhZGRpdGlvbmFsUHJvcGVydHk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuT0RhdGFUYWJsZURlbGVnYXRlLl9jcmVhdGVQcm9wZXJ0eUluZm9zID0gZnVuY3Rpb24gKHRhYmxlOiBhbnksIG1vZGVsOiBhbnkpIHtcblx0Y29uc3QgbWV0YWRhdGFJbmZvID0gdGFibGUuZ2V0RGVsZWdhdGUoKS5wYXlsb2FkO1xuXHRjb25zdCBwcm9wZXJ0aWVzOiBWYWx1ZUhlbHBUYWJsZUNvbHVtbltdID0gW107XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBgLyR7bWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25OYW1lfWA7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXG5cdHJldHVybiBtZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtlbnRpdHlTZXRQYXRofUBgKS50aGVuKGZ1bmN0aW9uIChlbnRpdHlTZXRBbm5vdGF0aW9uczogYW55KSB7XG5cdFx0Y29uc3Qgc29ydFJlc3RyaWN0aW9uc0luZm8gPSBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyhlbnRpdHlTZXRBbm5vdGF0aW9ucyk7XG5cdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zID0gZW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIl07XG5cdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyA9IGdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8oZmlsdGVyUmVzdHJpY3Rpb25zKTtcblxuXHRcdGNvbnN0IGN1c3RvbURhdGFGb3JDb2x1bW5zID0gTWFjcm9zRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEodGFibGUsIFwiY29sdW1uc1wiKTtcblx0XHRjb25zdCBwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5PiA9IHt9O1xuXHRcdGNvbnN0IGRhdGFNb2RlbEVudGl0eVBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHModGFibGUuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRDb250ZXh0KGVudGl0eVNldFBhdGgpKTtcblx0XHRjdXN0b21EYXRhRm9yQ29sdW1ucy5jdXN0b21EYXRhLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbkRlZjogYW55KSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUluZm86IFZhbHVlSGVscFRhYmxlQ29sdW1uID0ge1xuXHRcdFx0XHRuYW1lOiBjb2x1bW5EZWYucGF0aCxcblx0XHRcdFx0bGFiZWw6IGNvbHVtbkRlZi5sYWJlbCxcblx0XHRcdFx0c29ydGFibGU6IGlzU29ydGFibGVQcm9wZXJ0eShzb3J0UmVzdHJpY3Rpb25zSW5mbywgY29sdW1uRGVmKSxcblx0XHRcdFx0ZmlsdGVyYWJsZTogaXNGaWx0ZXJhYmxlUHJvcGVydHkoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgY29sdW1uRGVmKSxcblx0XHRcdFx0bWF4Q29uZGl0aW9uczogZ2V0UHJvcGVydHlNYXhDb25kaXRpb25zKGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIGNvbHVtbkRlZiksXG5cdFx0XHRcdHR5cGVDb25maWc6IGlzVHlwZUZpbHRlcmFibGUoY29sdW1uRGVmLiRUeXBlKSA/IHRhYmxlLmdldFR5cGVNYXAoKS5nZXRUeXBlQ29uZmlnKGNvbHVtbkRlZi4kVHlwZSkgOiB1bmRlZmluZWRcblx0XHRcdH07XG5cblx0XHRcdGNvbnN0IGRhdGFNb2RlbFByb3BlcnR5UGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFNb2RlbEVudGl0eVBhdGgsIGNvbHVtbkRlZi5wYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gZGF0YU1vZGVsUHJvcGVydHlQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0XHRcdGlmIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQcm9wZXJ0eVBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbFByb3BlcnR5UGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdGxldCB0eXBlQ29uZmlnO1xuXHRcdFx0XHRpZiAoaXNUeXBlRmlsdGVyYWJsZShwcm9wZXJ0eS50eXBlIGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGUpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlUeXBlQ29uZmlnID0gZmV0Y2hUeXBlQ29uZmlnKHByb3BlcnR5KTtcblx0XHRcdFx0XHR0eXBlQ29uZmlnID1cblx0XHRcdFx0XHRcdFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPz8gXCJcIixcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdFx0XHRcdFx0KSA/PyB0YWJsZS5nZXRUeXBlTWFwKCkuZ2V0VHlwZUNvbmZpZyhjb2x1bW5EZWYuJFR5cGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vQ2hlY2sgaWYgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSBsaW5rZWQgdG8gdGhlIHByb3BlcnR5IGFzIGEgVW5pdCwgQ3VycmVuY3ksIFRpbWV6b25lIG9yIHRleHRBcnJhbmdlbWVudFxuXHRcdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoZGF0YU1vZGVsUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5UGF0aHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvKTtcblxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5UGF0aHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHQvL0NvbXBsZXggcHJvcGVydGllcyBtdXN0IGJlIGhpZGRlbiBmb3Igc29ydGluZyBhbmQgZmlsdGVyaW5nXG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLnNvcnRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLmZpbHRlcmFibGUgPSBmYWxzZTtcblx0XHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdFx0XHRcdHByb3BlcnRpZXNUb0JlQ3JlYXRlZFtwYXRoXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mb1twYXRoXTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHQvLyBBbHNvIGFkZCBwcm9wZXJ0eSBmb3IgdGhlIGluT3V0IFBhcmFtZXRlcnMgb24gdGhlIFZhbHVlSGVscCB3aGVuIHRleHRBcnJhbmdlbWVudCBpcyBzZXQgdG8gI1RleHRPbmx5XG5cdFx0XHRcdFx0Ly8gSXQgd2lsbCBub3QgYmUgbGlua2VkIHRvIHRoZSBjb21wbGV4IFByb3BlcnR5IChCQ1AgMjI3MDE0MTE1NClcblx0XHRcdFx0XHRpZiAoIXJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmZpbmQoKHBhdGgpID0+IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mb1twYXRoXSA9PT0gcHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9CZUNyZWF0ZWRbdGFyZ2V0UHJvcGVydHlQYXRoXSA9IHByb3BlcnR5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCA9IGNvbHVtbkRlZi5wYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb3BlcnR5SW5mby50eXBlQ29uZmlnID0gcHJvcGVydHlJbmZvLnR5cGVDb25maWcgPyB0eXBlQ29uZmlnIDogdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5EZWYucGF0aDtcblx0XHRcdH1cblx0XHRcdHByb3BlcnRpZXMucHVzaChwcm9wZXJ0eUluZm8pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IHJlbGF0ZWRDb2x1bW5zID0gY3JlYXRlUmVsYXRlZFByb3BlcnRpZXMocHJvcGVydGllc1RvQmVDcmVhdGVkLCBwcm9wZXJ0aWVzLCBzb3J0UmVzdHJpY3Rpb25zSW5mbywgZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyk7XG5cdFx0cmV0dXJuIHByb3BlcnRpZXMuY29uY2F0KHJlbGF0ZWRDb2x1bW5zKTtcblx0fSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGJpbmRpbmcgaW5mbyB3aXRoIHRoZSByZWxldmFudCBwYXRoIGFuZCBtb2RlbCBmcm9tIHRoZSBtZXRhZGF0YS5cbiAqXG4gKiBAcGFyYW0gb01EQ1RhYmxlIFRoZSBNRENUYWJsZSBpbnN0YW5jZVxuICogQHBhcmFtIG9CaW5kaW5nSW5mbyBUaGUgYmluZGluZ0luZm8gb2YgdGhlIHRhYmxlXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS51cGRhdGVCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChvTURDVGFibGU6IGFueSwgb0JpbmRpbmdJbmZvOiBhbnkpIHtcblx0VGFibGVEZWxlZ2F0ZS51cGRhdGVCaW5kaW5nSW5mby5hcHBseSh0aGlzLCBbb01EQ1RhYmxlLCBvQmluZGluZ0luZm9dKTtcblx0aWYgKCFvTURDVGFibGUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBvTWV0YWRhdGFJbmZvID0gb01EQ1RhYmxlLmdldERlbGVnYXRlKCkucGF5bG9hZDtcblxuXHRpZiAob01ldGFkYXRhSW5mbyAmJiBvQmluZGluZ0luZm8pIHtcblx0XHRvQmluZGluZ0luZm8ucGF0aCA9IG9CaW5kaW5nSW5mby5wYXRoIHx8IG9NZXRhZGF0YUluZm8uY29sbGVjdGlvblBhdGggfHwgYC8ke29NZXRhZGF0YUluZm8uY29sbGVjdGlvbk5hbWV9YDtcblx0XHRvQmluZGluZ0luZm8ubW9kZWwgPSBvQmluZGluZ0luZm8ubW9kZWwgfHwgb01ldGFkYXRhSW5mby5tb2RlbDtcblx0fVxuXG5cdGlmICghb0JpbmRpbmdJbmZvKSB7XG5cdFx0b0JpbmRpbmdJbmZvID0ge307XG5cdH1cblxuXHRjb25zdCBvRmlsdGVyID0gQ29yZS5ieUlkKG9NRENUYWJsZS5nZXRGaWx0ZXIoKSkgYXMgYW55LFxuXHRcdGJGaWx0ZXJFbmFibGVkID0gb01EQ1RhYmxlLmlzRmlsdGVyaW5nRW5hYmxlZCgpO1xuXHRsZXQgbUNvbmRpdGlvbnM6IGFueTtcblx0bGV0IG9Jbm5lckZpbHRlckluZm8sIG9PdXRlckZpbHRlckluZm86IGFueTtcblx0Y29uc3QgYUZpbHRlcnMgPSBbXTtcblx0Y29uc3QgdGFibGVQcm9wZXJ0aWVzID0gTWFjcm9zRGVsZWdhdGVVdGlsLmdldENhY2hlZFByb3BlcnRpZXMob01EQ1RhYmxlKTtcblxuXHQvL1RPRE86IGNvbnNpZGVyIGEgbWVjaGFuaXNtICgnRmlsdGVyTWVyZ2VVdGlsJyBvciBlbmhhbmNlICdGaWx0ZXJVdGlsJykgdG8gYWxsb3cgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgZmlsdGVycylcblx0aWYgKGJGaWx0ZXJFbmFibGVkKSB7XG5cdFx0bUNvbmRpdGlvbnMgPSBvTURDVGFibGUuZ2V0Q29uZGl0aW9ucygpO1xuXHRcdG9Jbm5lckZpbHRlckluZm8gPSBGaWx0ZXJVdGlsLmdldEZpbHRlckluZm8ob01EQ1RhYmxlLCBtQ29uZGl0aW9ucywgdGFibGVQcm9wZXJ0aWVzISwgW10pIGFzIGFueTtcblx0XHRpZiAob0lubmVyRmlsdGVySW5mby5maWx0ZXJzKSB7XG5cdFx0XHRhRmlsdGVycy5wdXNoKG9Jbm5lckZpbHRlckluZm8uZmlsdGVycyk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9GaWx0ZXIpIHtcblx0XHRtQ29uZGl0aW9ucyA9IG9GaWx0ZXIuZ2V0Q29uZGl0aW9ucygpO1xuXHRcdGlmIChtQ29uZGl0aW9ucykge1xuXHRcdFx0Y29uc3QgYVBhcmFtZXRlck5hbWVzID0gRGVsZWdhdGVVdGlsLmdldFBhcmFtZXRlck5hbWVzKG9GaWx0ZXIpO1xuXHRcdFx0Ly8gVGhlIHRhYmxlIHByb3BlcnRpZXMgbmVlZHMgdG8gdXBkYXRlZCB3aXRoIHRoZSBmaWx0ZXIgZmllbGQgaWYgbm8gU2VsZWN0aW9uZmllcmxkcyBhcmUgYW5ub3RhdGVkIGFuZCBub3QgcGFydCBhcyB2YWx1ZSBoZWxwIHBhcmFtZXRlclxuXHRcdFx0T0RhdGFUYWJsZURlbGVnYXRlLl91cGRhdGVQcm9wZXJ0eUluZm8odGFibGVQcm9wZXJ0aWVzLCBvTURDVGFibGUsIG1Db25kaXRpb25zLCBvTWV0YWRhdGFJbmZvKTtcblx0XHRcdG9PdXRlckZpbHRlckluZm8gPSBGaWx0ZXJVdGlsLmdldEZpbHRlckluZm8ob0ZpbHRlciwgbUNvbmRpdGlvbnMsIHRhYmxlUHJvcGVydGllcyEsIGFQYXJhbWV0ZXJOYW1lcyk7XG5cblx0XHRcdGlmIChvT3V0ZXJGaWx0ZXJJbmZvLmZpbHRlcnMpIHtcblx0XHRcdFx0YUZpbHRlcnMucHVzaChvT3V0ZXJGaWx0ZXJJbmZvLmZpbHRlcnMpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzUGFyYW1ldGVyUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRQYXJhbWV0ZXJzSW5mbyhvRmlsdGVyLCBtQ29uZGl0aW9ucyk7XG5cdFx0XHRpZiAoc1BhcmFtZXRlclBhdGgpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLnBhdGggPSBzUGFyYW1ldGVyUGF0aDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBnZXQgdGhlIGJhc2ljIHNlYXJjaFxuXHRcdG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKG9GaWx0ZXIuZ2V0U2VhcmNoKCkpIHx8IHVuZGVmaW5lZDtcblx0fVxuXHQvLyBCQ1A6IDIzNzAwNzg2NjAgLSBzaGFyZWRSZXF1ZXN0IGlzIHNldCB0byBmYWxzZSBpbiBvcmRlciB0byBhdm9pZCBkZWFkbG9jayBzaXR1YXRpb24gd2hlcmUgdGhlIHRoZSBvRGF0YVxuXHQvLyBtb2RlbCBjYWNoZSBpcyBuZWl0aGVyIGNoYW5nZWFibGUgKHJlc3VsdCBvZiBMaXN0QmluZGluZy4kJHNoYXJlZFJlcXVlc3QgPSB0cnVlKSBub3IgZGVsZXRhYmxlXG5cdC8vIChyZXN1bHQgb2YgQ29udGV4dC5zZXRTZWxlY3RlZCh0cnVlKSAtPiBMaXN0QmluZGluZy5rZWVwQWxpdmUpXG5cdG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiQkc2hhcmVkUmVxdWVzdCA9IGZhbHNlO1xuXG5cdHRoaXMuX2FwcGx5RGVmYXVsdFNvcnRpbmcob0JpbmRpbmdJbmZvLCBvTURDVGFibGUuZ2V0RGVsZWdhdGUoKS5wYXlsb2FkKTtcblx0Ly8gYWRkIHNlbGVjdCB0byBvQmluZGluZ0luZm8gKEJDUCAyMTcwMTYzMDEyKVxuXHRvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VsZWN0ID0gdGFibGVQcm9wZXJ0aWVzPy5yZWR1Y2UoZnVuY3Rpb24gKHNRdWVyeTogc3RyaW5nLCBvUHJvcGVydHk6IGFueSkge1xuXHRcdC8vIE5hdmlnYXRpb24gcHJvcGVydGllcyAocmVwcmVzZW50ZWQgYnkgWC9ZKSBzaG91bGQgbm90IGJlIGFkZGVkIHRvICRzZWxlY3QuXG5cdFx0Ly8gVG9EbyA6IFRoZXkgc2hvdWxkIGJlIGFkZGVkIGFzICRleHBhbmQ9WCgkc2VsZWN0PVkpIGluc3RlYWRcblx0XHRpZiAob1Byb3BlcnR5LnBhdGggJiYgb1Byb3BlcnR5LnBhdGguaW5kZXhPZihcIi9cIikgPT09IC0xKSB7XG5cdFx0XHRzUXVlcnkgPSBzUXVlcnkgPyBgJHtzUXVlcnl9LCR7b1Byb3BlcnR5LnBhdGh9YCA6IG9Qcm9wZXJ0eS5wYXRoO1xuXHRcdH1cblx0XHRyZXR1cm4gc1F1ZXJ5O1xuXHR9LCBcIlwiKTtcblxuXHQvLyBBZGQgJGNvdW50XG5cdG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRjb3VudCA9IHRydWU7XG5cblx0Ly9JZiB0aGUgZW50aXR5IGlzIERyYWZ0RW5hYmxlZCBhZGQgYSBEcmFmdEZpbHRlclxuXHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChvTURDVGFibGUuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSwgb0JpbmRpbmdJbmZvLnBhdGgpKSB7XG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKFwiSXNBY3RpdmVFbnRpdHlcIiwgRmlsdGVyT3BlcmF0b3IuRVEsIHRydWUpKTtcblx0fVxuXG5cdG9CaW5kaW5nSW5mby5maWx0ZXJzID0gbmV3IEZpbHRlcihhRmlsdGVycywgdHJ1ZSk7XG59O1xuXG5PRGF0YVRhYmxlRGVsZWdhdGUuZ2V0VHlwZU1hcCA9IGZ1bmN0aW9uICgpOiBvYmplY3Qge1xuXHRyZXR1cm4gVHlwZU1hcDtcbn07XG5cbi8qKlxuICogR2V0IHRhYmxlIE1vZGVsLlxuICpcbiAqIEBwYXJhbSB0YWJsZSBJbnN0YW5jZSBvZiB0aGUgTURDdGFibGVcbiAqIEByZXR1cm5zIE1vZGVsXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5fZ2V0TW9kZWwgPSBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTxNb2RlbD4ge1xuXHRjb25zdCBtZXRhZGF0YUluZm8gPSAodGFibGUuZ2V0RGVsZWdhdGUoKSBhcyBhbnkpLnBheWxvYWQ7XG5cdGxldCBtb2RlbDogTW9kZWwgPSB0YWJsZS5nZXRNb2RlbChtZXRhZGF0YUluZm8ubW9kZWwpITtcblx0aWYgKCFtb2RlbCkge1xuXHRcdGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0YWJsZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgcmVzb2x2ZSk7XG5cdFx0fSk7XG5cdFx0bW9kZWwgPSB0YWJsZS5nZXRNb2RlbChtZXRhZGF0YUluZm8ubW9kZWwpITtcblx0fVxuXHRyZXR1cm4gbW9kZWw7XG59O1xuXG4vKipcbiAqIEFwcGxpZXMgYSBkZWZhdWx0IHNvcnQgb3JkZXIgaWYgbmVlZGVkLiBUaGlzIGlzIG9ubHkgdGhlIGNhc2UgaWYgdGhlIHJlcXVlc3QgaXMgbm90IGEgJHNlYXJjaCByZXF1ZXN0XG4gKiAobWVhbnMgdGhlIHBhcmFtZXRlciAkc2VhcmNoIG9mIHRoZSBiaW5kaW5nSW5mbyBpcyB1bmRlZmluZWQpIGFuZCBpZiBub3QgYWxyZWFkeSBhIHNvcnQgb3JkZXIgaXMgc2V0LFxuICogZS5nLiB2aWEgcHJlc2VudGF0aW9uIHZhcmlhbnQgb3IgbWFudWFsIGJ5IHRoZSB1c2VyLlxuICpcbiAqIEBwYXJhbSBvQmluZGluZ0luZm8gVGhlIGJpbmRpbmdJbmZvIG9mIHRoZSB0YWJsZVxuICogQHBhcmFtIG9QYXlsb2FkIFRoZSBwYXlsb2FkIG9mIHRoZSBUYWJsZURlbGVnYXRlXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5fYXBwbHlEZWZhdWx0U29ydGluZyA9IGZ1bmN0aW9uIChvQmluZGluZ0luZm86IGFueSwgb1BheWxvYWQ6IGFueSkge1xuXHRpZiAob0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMgJiYgb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9PSB1bmRlZmluZWQgJiYgb0JpbmRpbmdJbmZvLnNvcnRlciAmJiBvQmluZGluZ0luZm8uc29ydGVyLmxlbmd0aCA9PSAwKSB7XG5cdFx0Y29uc3QgZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUgPSBvUGF5bG9hZCA/IG9QYXlsb2FkLmRlZmF1bHRTb3J0UHJvcGVydHlOYW1lIDogdW5kZWZpbmVkO1xuXHRcdGlmIChkZWZhdWx0U29ydFByb3BlcnR5TmFtZSkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnNvcnRlci5wdXNoKG5ldyBTb3J0ZXIoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUsIGZhbHNlKSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHRhYmxlIHByb3BlcnRpZXMgd2l0aCBmaWx0ZXIgZmllbGQgaW5mb3MuXG4gKlxuICogQHBhcmFtIGFUYWJsZVByb3BlcnRpZXMgQXJyYXkgd2l0aCB0YWJsZSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gb01EQ1RhYmxlIFRoZSBNRENUYWJsZSBpbnN0YW5jZVxuICogQHBhcmFtIG1Db25kaXRpb25zIFRoZSBjb25kaXRpb25zIG9mIHRoZSB0YWJsZVxuICogQHBhcmFtIG9NZXRhZGF0YUluZm8gVGhlIG1ldGFkYXRhIGluZm8gb2YgdGhlIGZpbHRlciBmaWVsZFxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuX3VwZGF0ZVByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChcblx0YVRhYmxlUHJvcGVydGllczogYW55W10sXG5cdG9NRENUYWJsZTogTURDVGFibGUsXG5cdG1Db25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuXHRvTWV0YWRhdGFJbmZvOiBhbnlcbikge1xuXHRjb25zdCBhQ29uZGl0aW9uS2V5ID0gT2JqZWN0LmtleXMobUNvbmRpdGlvbnMpLFxuXHRcdG9NZXRhTW9kZWwgPSAob01EQ1RhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkhO1xuXHRhQ29uZGl0aW9uS2V5LmZvckVhY2goZnVuY3Rpb24gKGNvbmRpdGlvbktleTogYW55KSB7XG5cdFx0aWYgKFxuXHRcdFx0YVRhYmxlUHJvcGVydGllcy5maW5kSW5kZXgoZnVuY3Rpb24gKHRhYmxlUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gdGFibGVQcm9wZXJ0eS5wYXRoID09PSBjb25kaXRpb25LZXk7XG5cdFx0XHR9KSA9PT0gLTFcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9Db2x1bW5EZWYgPSB7XG5cdFx0XHRcdHBhdGg6IGNvbmRpdGlvbktleSxcblx0XHRcdFx0dHlwZUNvbmZpZzogb01EQ1RhYmxlXG5cdFx0XHRcdFx0LmdldFR5cGVNYXAoKVxuXHRcdFx0XHRcdC5nZXRUeXBlQ29uZmlnKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtvTWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25OYW1lfS8ke2NvbmRpdGlvbktleX1gKS4kVHlwZSlcblx0XHRcdH07XG5cdFx0XHRhVGFibGVQcm9wZXJ0aWVzLnB1c2gob0NvbHVtbkRlZik7XG5cdFx0fVxuXHR9KTtcbn07XG5cbk9EYXRhVGFibGVEZWxlZ2F0ZS51cGRhdGVCaW5kaW5nID0gZnVuY3Rpb24gKG9UYWJsZTogYW55LCBvQmluZGluZ0luZm86IGFueSwgb0JpbmRpbmc6IGFueSkge1xuXHRsZXQgYk5lZWRNYW51YWxSZWZyZXNoID0gZmFsc2U7XG5cdGNvbnN0IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IHNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSA9IFwicGVuZGluZ01hbnVhbEJpbmRpbmdVcGRhdGVcIjtcblx0Y29uc3Qgc0xhc3RTZWFyY2ggPSBcImxhc3RTZWFyY2hcIjtcblx0Y29uc3Qgc0xhc3RGaWx0ZXIgPSBcImxhc3RGaWx0ZXJcIjtcblx0Y29uc3QgYlBlbmRpbmdNYW51YWxVcGRhdGUgPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoc01hbnVhbFVwZGF0ZVByb3BlcnR5S2V5KTtcblx0Y29uc3QgbGFzdFNlYXJjaCA9IG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5nZXRQcm9wZXJ0eShzTGFzdFNlYXJjaCk7XG5cdGNvbnN0IGxhc3RGaWx0ZXIgPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoc0xhc3RGaWx0ZXIpO1xuXHRsZXQgb1Jvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXG5cdC8vb0JpbmRpbmc9bnVsbCBtZWFucyB0aGF0IGEgcmViaW5kaW5nIG5lZWRzIHRvIGJlIGZvcmNlZCB2aWEgdXBkYXRlQmluZGluZyBpbiBtZGMgVGFibGVEZWxlZ2F0ZVxuXHRUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmcuYXBwbHkoT0RhdGFUYWJsZURlbGVnYXRlLCBbb1RhYmxlLCBvQmluZGluZ0luZm8sIG9CaW5kaW5nXSk7XG5cdC8vZ2V0IHJvdyBiaW5kaW5nIGFmdGVyIHJlYmluZCBmcm9tIFRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZyBpbiBjYXNlIG9CaW5kaW5nIHdhcyBudWxsXG5cdGlmICghb1Jvd0JpbmRpbmcpIHtcblx0XHRvUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblx0aWYgKG9Sb3dCaW5kaW5nKSB7XG5cdFx0LyoqXG5cdFx0ICogTWFudWFsIHJlZnJlc2ggaWYgZmlsdGVycyBhcmUgbm90IGNoYW5nZWQgYnkgYmluZGluZy5yZWZyZXNoKCkgc2luY2UgdXBkYXRpbmcgdGhlIGJpbmRpbmdJbmZvXG5cdFx0ICogaXMgbm90IGVub3VnaCB0byB0cmlnZ2VyIGEgYmF0Y2ggcmVxdWVzdC5cblx0XHQgKiBJbiBjYXNlIHRoZXJlIGlzIG5vIGludGVybmFsQmluZGluZ0NvbnRleHQgKHNlZSBCQ1AgMjI4MDE2MTUyNCkgd2UgY2FuIG5vdCBkZXRlcm1pbmUgaWYgYSBtYW51YWxcblx0XHQgKiByZWZyZXNoIGlzIG5lZWRlZCBvciBub3QuIFRoZXJlZm9yZSwgd2UgYWx3YXlzIHJlZnJlc2ggaW4gdGhpcyBzcGVjaWFsIGNhc2Vcblx0XHQgKi9cblx0XHRiTmVlZE1hbnVhbFJlZnJlc2ggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dFxuXHRcdFx0PyBkZWVwRXF1YWwob0JpbmRpbmdJbmZvLmZpbHRlcnMsIGxhc3RGaWx0ZXIpICYmIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPT09IGxhc3RTZWFyY2ggJiYgIWJQZW5kaW5nTWFudWFsVXBkYXRlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNMYXN0U2VhcmNoLCBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoKTtcblx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNMYXN0RmlsdGVyLCBvQmluZGluZ0luZm8uZmlsdGVycyk7XG5cblx0aWYgKGJOZWVkTWFudWFsUmVmcmVzaCAmJiBvVGFibGUuZ2V0RmlsdGVyKCkpIHtcblx0XHRvSW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uc2V0UHJvcGVydHkoc01hbnVhbFVwZGF0ZVByb3BlcnR5S2V5LCB0cnVlKTtcblx0XHRvUm93QmluZGluZ1xuXHRcdFx0LnJlcXVlc3RSZWZyZXNoKG9Sb3dCaW5kaW5nLmdldEdyb3VwSWQoKSlcblx0XHRcdC5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgZmFsc2UpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVmcmVzaGluZyBhIGZpbHRlckJhciBWSCB0YWJsZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblx0b1RhYmxlLmZpcmVFdmVudChcImJpbmRpbmdVcGRhdGVkXCIpO1xuXHQvL25vIG5lZWQgdG8gY2hlY2sgZm9yIHNlbWFudGljIHRhcmdldHMgaGVyZSBzaW5jZSB3ZSBhcmUgaW4gYSBWSCBhbmQgZG9uJ3Qgd2FudCB0byBhbGxvdyBmdXJ0aGVyIG5hdmlnYXRpb25cbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNpbXBsZSBwcm9wZXJ0eSBmb3IgZWFjaCBpZGVudGlmaWVkIGNvbXBsZXggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXNUb0JlQ3JlYXRlZCBJZGVudGlmaWVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZXhpc3RpbmdDb2x1bW5zIFRoZSBsaXN0IG9mIGNvbHVtbnMgY3JlYXRlZCBmb3IgcHJvcGVydGllcyBkZWZpbmVkIG9uIHRoZSBWYWx1ZSBMaXN0LlxuICogQHBhcmFtIHNvcnRSZXN0cmljdGlvbnNJbmZvIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBzb3J0IHJlc3RyaWN0aW9uIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsdGVyIHJlc3RyaWN0aW9uIGluZm9ybWF0aW9uXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgb2YgcHJvcGVydGllcyBjcmVhdGVkLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVsYXRlZFByb3BlcnRpZXMoXG5cdHByb3BlcnRpZXNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRleGlzdGluZ0NvbHVtbnM6IFZhbHVlSGVscFRhYmxlQ29sdW1uW10sXG5cdHNvcnRSZXN0cmljdGlvbnNJbmZvOiBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUsXG5cdGZpbHRlclJlc3RyaWN0aW9uc0luZm86IGFueVxuKTogVmFsdWVIZWxwVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcblx0XHRyZWxhdGVkQ29sdW1uczogVmFsdWVIZWxwVGFibGVDb2x1bW5bXSA9IFtdO1xuXHRPYmplY3Qua2V5cyhwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQpLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNUb0JlQ3JlYXRlZFtwYXRoXSxcblx0XHRcdHJlbGF0ZWRDb2x1bW4gPSBleGlzdGluZ0NvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ucGF0aCA9PT0gcGF0aCk7IC8vIENvbXBsZXggcHJvcGVydGllcyBkb2Vzbid0IGdldCBwYXRoIHNvIG9ubHkgc2ltcGxlIGNvbHVtbiBhcmUgZm91bmRcblx0XHRpZiAoIXJlbGF0ZWRDb2x1bW4pIHtcblx0XHRcdGNvbnN0IG5ld05hbWUgPSBgUHJvcGVydHk6OiR7cGF0aH1gO1xuXHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwYXRoXSA9IG5ld05hbWU7XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBUYWJsZUNvbHVtbjogVmFsdWVIZWxwVGFibGVDb2x1bW4gPSB7XG5cdFx0XHRcdG5hbWU6IG5ld05hbWUsXG5cdFx0XHRcdGxhYmVsOiBnZXRMYWJlbChwcm9wZXJ0eSksXG5cdFx0XHRcdHBhdGg6IHBhdGgsXG5cdFx0XHRcdHNvcnRhYmxlOiBpc1NvcnRhYmxlUHJvcGVydHkoc29ydFJlc3RyaWN0aW9uc0luZm8sIHByb3BlcnR5KSxcblx0XHRcdFx0ZmlsdGVyYWJsZTogaXNGaWx0ZXJhYmxlUHJvcGVydHkoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgcHJvcGVydHkpXG5cdFx0XHR9O1xuXHRcdFx0dmFsdWVIZWxwVGFibGVDb2x1bW4ubWF4Q29uZGl0aW9ucyA9IGdldFByb3BlcnR5TWF4Q29uZGl0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLCB2YWx1ZUhlbHBUYWJsZUNvbHVtbik7XG5cdFx0XHRpZiAoaXNUeXBlRmlsdGVyYWJsZShwcm9wZXJ0eS50eXBlIGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0VHlwZUZvckVkbVR5cGUpKSB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9IGZldGNoVHlwZUNvbmZpZyhwcm9wZXJ0eSk7XG5cdFx0XHRcdHZhbHVlSGVscFRhYmxlQ29sdW1uLnR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPz8gXCJcIixcblx0XHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2godmFsdWVIZWxwVGFibGVDb2x1bW4pO1xuXHRcdH1cblx0fSk7XG5cdC8vIFRoZSBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHk6OicgZm9yIHVuaXF1ZW5lc3MuXG5cdC8vIFVwZGF0ZSB0aGUgc2FtZSBpbiBvdGhlciBwcm9wZXJ0eUluZm9zW10gcmVmZXJlbmNlcyB3aGljaCBwb2ludCB0byB0aGlzIHByb3BlcnR5LlxuXHRleGlzdGluZ0NvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0aWYgKGNvbHVtbi5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHRjb2x1bW4ucHJvcGVydHlJbmZvcyA9IGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5tYXAoKGNvbHVtbk5hbWUpID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbY29sdW1uTmFtZV0gPz8gY29sdW1uTmFtZSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHJlbGF0ZWRDb2x1bW5zO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIG1heENvbmRpdGlvbnMgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGZpbHRlclJlc3RyaWN0aW9uc0luZm8gVGhlIGZpbHRlciByZXN0cmljdGlvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZXN0cmljdGlvbiBhbm5vdGF0aW9uLlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHkuXG4gKiBAcmV0dXJucyBgLTFgIG9yIGAxYCBpZiB0aGUgcHJvcGVydHkgaXMgYSBNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbi5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlNYXhDb25kaXRpb25zKGZpbHRlclJlc3RyaWN0aW9uc0luZm86IGFueSwgcHJvcGVydHk6IFZhbHVlSGVscFRhYmxlQ29sdW1uIHwgUHJvcGVydHkpOiBudW1iZXIge1xuXHRjb25zdCBwcm9wZXJ0eVBhdGggPSBnZXRQYXRoKHByb3BlcnR5KTtcblx0cmV0dXJuIGZpbHRlclJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvPy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eVBhdGgpICYmXG5cdFx0cHJvcGVydHlQYXRoICYmXG5cdFx0aXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbihmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1twcm9wZXJ0eVBhdGhdKVxuXHRcdD8gLTFcblx0XHQ6IDE7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0eSB3aGljaCByZWZlcmVuY2VzIHRvIHRoZSB1bml0LCB0aW1lem9uZSwgdGV4dEFycmFuZ2VtZW50IG9yIGN1cnJlbmN5LlxuICpcbiAqIEBwYXJhbSBkYXRhTW9kZWxQcm9wZXJ0eVBhdGggVGhlIG1vZGVsIG9iamVjdCBwYXRoIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSBhZGRpdGlvbmFsIHByb3BlcnR5LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFByb3BlcnR5KGRhdGFNb2RlbFByb3BlcnR5UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IERhdGFNb2RlbE9iamVjdFBhdGggfCB1bmRlZmluZWQge1xuXHRjb25zdCBwcm9wZXJ0eSA9IGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3Q7XG5cdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPVxuXHRcdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHByb3BlcnR5KSB8fFxuXHRcdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aChwcm9wZXJ0eSkgfHxcblx0XHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aChwcm9wZXJ0eSkgfHxcblx0XHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgocHJvcGVydHkpO1xuXHRpZiAoIWFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eSA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFNb2RlbFByb3BlcnR5UGF0aCwgYWRkaXRpb25hbFByb3BlcnR5UGF0aCk7XG5cblx0Ly9BZGRpdGlvbmFsIFByb3BlcnR5IGNvdWxkIHJlZmVyIHRvIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eSwga2VlcCB0aGUgbmFtZSBhbmQgcGF0aCBhcyBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eSA9IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eS50YXJnZXRPYmplY3Q7XG5cdGlmICghYWRkaXRpb25hbFByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPRGF0YVRhYmxlRGVsZWdhdGU7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9EQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxrQkFBa0IsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVDLGFBQWEsQ0FBQzs7RUFFM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0FILGtCQUFrQixDQUFDSSxlQUFlLEdBQUcsZ0JBQWdCQyxLQUFZLEVBQXlCO0lBQ3pGLE1BQU1DLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQ0MsU0FBUyxDQUFDRixLQUFLLENBQUM7SUFDekMs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
|
|
423
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YVRhYmxlRGVsZWdhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJUYWJsZURlbGVnYXRlIiwiZmV0Y2hQcm9wZXJ0aWVzIiwidGFibGUiLCJtb2RlbCIsIl9nZXRNb2RlbCIsInByb3BlcnRpZXMiLCJfY3JlYXRlUHJvcGVydHlJbmZvcyIsImNyZWF0ZUludGVybmFsQmluZGluZ0NvbnRleHQiLCJNYWNyb3NEZWxlZ2F0ZVV0aWwiLCJzZXRDYWNoZWRQcm9wZXJ0aWVzIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzZXRQcm9wZXJ0eSIsImRpYWxvZyIsImlzQSIsImdldFBhcmVudCIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsImludGVybmFsQmluZGluZ0NvbnRleHQiLCJuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCIsImdldFBhdGgiLCJnZXRJZCIsImdldFByb3BlcnR5IiwibmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJkYXRhTW9kZWxQcm9wZXJ0eVBhdGgiLCJkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0QWRkaXRpb25hbFByb3BlcnR5IiwicmVsYXRlZFByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJhZGRpdGlvbmFsUHJvcGVydHlQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsInByb3BlcnR5IiwicHJvcGVydHlQYXRoIiwidGV4dEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJ0ZXh0QXJyYW5nZW1lbnQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsInRvU3RyaW5nIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsIm1ldGFkYXRhSW5mbyIsImdldERlbGVnYXRlIiwicGF5bG9hZCIsImVudGl0eVNldFBhdGgiLCJjb2xsZWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInJlcXVlc3RPYmplY3QiLCJ0aGVuIiwiZW50aXR5U2V0QW5ub3RhdGlvbnMiLCJzb3J0UmVzdHJpY3Rpb25zSW5mbyIsImdldFNvcnRSZXN0cmljdGlvbnNJbmZvIiwiZmlsdGVyUmVzdHJpY3Rpb25zIiwiZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJmaWx0ZXJGdW5jdGlvbnMiLCJjYXNlU2Vuc2l0aXZlIiwiTW9kZWxIZWxwZXIiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJjdXN0b21EYXRhRm9yQ29sdW1ucyIsImdldEN1c3RvbURhdGEiLCJwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQiLCJkYXRhTW9kZWxFbnRpdHlQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsImN1c3RvbURhdGEiLCJmb3JFYWNoIiwiY29sdW1uRGVmIiwicHJvcGVydHlJbmZvIiwibmFtZSIsInBhdGgiLCJsYWJlbCIsInNvcnRhYmxlIiwiaXNTb3J0YWJsZVByb3BlcnR5IiwiZmlsdGVyYWJsZSIsImlzRmlsdGVyYWJsZVByb3BlcnR5IiwibWF4Q29uZGl0aW9ucyIsImdldFByb3BlcnR5TWF4Q29uZGl0aW9ucyIsInR5cGVDb25maWciLCJpc1R5cGVGaWx0ZXJhYmxlIiwiJFR5cGUiLCJnZXRUeXBlTWFwIiwiZ2V0VHlwZUNvbmZpZyIsInVuZGVmaW5lZCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwidGFyZ2V0UHJvcGVydHlQYXRoIiwidHlwZSIsInByb3BlcnR5VHlwZUNvbmZpZyIsImZldGNoVHlwZUNvbmZpZyIsIlR5cGVNYXAiLCJmb3JtYXRPcHRpb25zIiwiY29uc3RyYWludHMiLCJyZWxhdGVkUHJvcGVydGllc0luZm8iLCJyZWxhdGVkUHJvcGVydHlQYXRocyIsImtleXMiLCJsZW5ndGgiLCJwcm9wZXJ0eUluZm9zIiwiZmluZCIsInB1c2giLCJyZWxhdGVkQ29sdW1ucyIsImNyZWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzIiwiY29uY2F0IiwidXBkYXRlQmluZGluZ0luZm8iLCJvTURDVGFibGUiLCJvQmluZGluZ0luZm8iLCJhcHBseSIsIm9NZXRhZGF0YUluZm8iLCJjb2xsZWN0aW9uUGF0aCIsIm9GaWx0ZXIiLCJDb3JlIiwiYnlJZCIsImdldEZpbHRlciIsImJGaWx0ZXJFbmFibGVkIiwiaXNGaWx0ZXJpbmdFbmFibGVkIiwibUNvbmRpdGlvbnMiLCJvSW5uZXJGaWx0ZXJJbmZvIiwib091dGVyRmlsdGVySW5mbyIsImFGaWx0ZXJzIiwidGFibGVQcm9wZXJ0aWVzIiwiZ2V0Q2FjaGVkUHJvcGVydGllcyIsImdldENvbmRpdGlvbnMiLCJGaWx0ZXJVdGlsIiwiZ2V0RmlsdGVySW5mbyIsImZpbHRlcnMiLCJhUGFyYW1ldGVyTmFtZXMiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRQYXJhbWV0ZXJOYW1lcyIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJzUGFyYW1ldGVyUGF0aCIsImdldFBhcmFtZXRlcnNJbmZvIiwicGFyYW1ldGVycyIsIiRzZWFyY2giLCJDb21tb25VdGlscyIsIm5vcm1hbGl6ZVNlYXJjaFRlcm0iLCJnZXRTZWFyY2giLCIkJHNoYXJlZFJlcXVlc3QiLCJfYXBwbHlEZWZhdWx0U29ydGluZyIsIiRzZWxlY3QiLCJyZWR1Y2UiLCJzUXVlcnkiLCJvUHJvcGVydHkiLCJpbmRleE9mIiwiJGNvdW50IiwiaXNEcmFmdFN1cHBvcnRlZCIsIkZpbHRlciIsIkZpbHRlck9wZXJhdG9yIiwiRVEiLCJQcm9taXNlIiwicmVzb2x2ZSIsImF0dGFjaEV2ZW50T25jZSIsIm9QYXlsb2FkIiwic29ydGVyIiwiZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUiLCJTb3J0ZXIiLCJhVGFibGVQcm9wZXJ0aWVzIiwiYUNvbmRpdGlvbktleSIsIm9NZXRhTW9kZWwiLCJjb25kaXRpb25LZXkiLCJmaW5kSW5kZXgiLCJ0YWJsZVByb3BlcnR5Iiwib0NvbHVtbkRlZiIsImdldE9iamVjdCIsInVwZGF0ZUJpbmRpbmciLCJvVGFibGUiLCJvQmluZGluZyIsImJOZWVkTWFudWFsUmVmcmVzaCIsIm9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Iiwic01hbnVhbFVwZGF0ZVByb3BlcnR5S2V5Iiwic0xhc3RTZWFyY2giLCJzTGFzdEZpbHRlciIsImJQZW5kaW5nTWFudWFsVXBkYXRlIiwibGFzdFNlYXJjaCIsImxhc3RGaWx0ZXIiLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJkZWVwRXF1YWwiLCJyZXF1ZXN0UmVmcmVzaCIsImdldEdyb3VwSWQiLCJmaW5hbGx5IiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZpcmVFdmVudCIsImV4aXN0aW5nQ29sdW1ucyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXAiLCJyZWxhdGVkQ29sdW1uIiwiY29sdW1uIiwibmV3TmFtZSIsInZhbHVlSGVscFRhYmxlQ29sdW1uIiwiZ2V0TGFiZWwiLCJtYXAiLCJjb2x1bW5OYW1lIiwiaGFzT3duUHJvcGVydHkiLCJpc011bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uIiwiZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCIsImRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEVxdWFsXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBmZXRjaFR5cGVDb25maWcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlclJlc3RyaWN0aW9uc0luZm9UeXBlLCBTb3J0UmVzdHJpY3Rpb25zSW5mb1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IHsgZ2V0RmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8sIGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgsXG5cdGdldExhYmVsXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHsgaXNUeXBlRmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBNYWNyb3NEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgeyBnZXRQYXRoLCBpc0ZpbHRlcmFibGVQcm9wZXJ0eSwgaXNTb3J0YWJsZVByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1RhYmxlRGVsZWdhdGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgVGFibGVEZWxlZ2F0ZSBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UYWJsZURlbGVnYXRlXCI7XG5pbXBvcnQgVHlwZU1hcCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L3V0aWwvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IEZpbHRlclV0aWwgZnJvbSBcInNhcC91aS9tZGMvdXRpbC9GaWx0ZXJVdGlsXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvY29udGVudC9NRENUYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwVGFibGVDb2x1bW4gPSB7XG5cdG5hbWU6IHN0cmluZztcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHRzb3J0YWJsZT86IGJvb2xlYW47XG5cdHBhdGg/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRmaWx0ZXJhYmxlPzogYm9vbGVhbjtcblx0dHlwZUNvbmZpZz86IE9iamVjdDtcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG59O1xudHlwZSBDb21wbGV4UHJvcGVydHlNYXAgPSBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT47XG5cbi8qKlxuICogVGVzdCBkZWxlZ2F0ZSBmb3IgT0RhdGEgVjQuXG4gKi9cbmNvbnN0IE9EYXRhVGFibGVEZWxlZ2F0ZSA9IE9iamVjdC5hc3NpZ24oe30sIFRhYmxlRGVsZWdhdGUpO1xuXG4vKipcbiAqIEZldGNoZXMgdGhlIHJlbGV2YW50IG1ldGFkYXRhIGZvciB0aGUgdGFibGUgYW5kIHJldHVybnMgcHJvcGVydHkgaW5mbyBhcnJheS5cbiAqXG4gKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG4gKiBAcmV0dXJucyBBcnJheSBvZiBwcm9wZXJ0eSBpbmZvXG4gKi9cbk9EYXRhVGFibGVEZWxlZ2F0ZS5mZXRjaFByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTxQcm9wZXJ0eUluZm8+IHtcblx0Y29uc3QgbW9kZWwgPSBhd2FpdCB0aGlzLl9nZXRNb2RlbCh0YWJsZSk7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBhd2FpdCB0aGlzLl9jcmVhdGVQcm9wZXJ0eUluZm9zKHRhYmxlLCBtb2RlbCk7XG5cdE9EYXRhVGFibGVEZWxlZ2F0ZS5jcmVhdGVJbnRlcm5hbEJpbmRpbmdDb250ZXh0KHRhYmxlKTtcblx0TWFjcm9zRGVsZWdhdGVVdGlsLnNldENhY2hlZFByb3BlcnRpZXModGFibGUsIHByb3BlcnRpZXMpO1xuXHQodGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KS5zZXRQcm9wZXJ0eShcInRhYmxlUHJvcGVydGllc0F2YWlsYWJsZVwiLCB0cnVlKTtcblx0cmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG5PRGF0YVRhYmxlRGVsZWdhdGUuY3JlYXRlSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpIHtcblx0bGV0IGRpYWxvZzogTWFuYWdlZE9iamVjdCB8IG51bGwgPSB0YWJsZTtcblx0d2hpbGUgKGRpYWxvZyAmJiAhZGlhbG9nLmlzQShcInNhcC51aS5tZGMudmFsdWVoZWxwLkRpYWxvZ1wiKSkge1xuXHRcdGRpYWxvZyA9IChkaWFsb2cgYXMgTWFuYWdlZE9iamVjdCkuZ2V0UGFyZW50KCk7XG5cdH1cblxuXHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGFibGUuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0aWYgKGRpYWxvZyAmJiBpbnRlcm5hbE1vZGVsKSB7XG5cdFx0Y29uc3QgaW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IGRpYWxvZy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGxldCBuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aDtcblx0XHRpZiAoaW50ZXJuYWxCaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0bmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dFBhdGggPSBpbnRlcm5hbEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSArIGA6OlZIRGlhbG9nOjoke2RpYWxvZy5nZXRJZCgpfTo6dGFibGVgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuZXdJbnRlcm5hbEJpbmRpbmdDb250ZXh0UGF0aCA9IGAvYnVpbGRpbmdibG9ja3MvJHt0YWJsZS5nZXRJZCgpfWA7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL2J1aWxkaW5nYmxvY2tzXCIsIHsgLi4uaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9idWlsZGluZ2Jsb2Nrc1wiKSB9KTtcblx0XHR9XG5cdFx0Y29uc3QgbmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IGludGVybmFsTW9kZWwuYmluZENvbnRleHQobmV3SW50ZXJuYWxCaW5kaW5nQ29udGV4dFBhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdHRhYmxlLnNldEJpbmRpbmdDb250ZXh0KG5ld0ludGVybmFsQmluZGluZ0NvbnRleHQhLCBcImludGVybmFsXCIpO1xuXHR9XG59O1xuXG4vKipcbiAqIENvbGxlY3QgcmVsYXRlZCBwcm9wZXJ0aWVzIGZyb20gYSBwcm9wZXJ0eSdzIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBkYXRhTW9kZWxQcm9wZXJ0eVBhdGggVGhlIG1vZGVsIG9iamVjdCBwYXRoIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgdGhhdCB3ZXJlIGlkZW50aWZpZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoZGF0YU1vZGVsUHJvcGVydHlQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdGNvbnN0IGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eVBhdGggPSBnZXRBZGRpdGlvbmFsUHJvcGVydHkoZGF0YU1vZGVsUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eU1hcCA9IHt9O1xuXHRpZiAoZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aD8udGFyZ2V0T2JqZWN0KSB7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5ID0gZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsQWRkaXRpb25hbFByb3BlcnR5UGF0aCwgdHJ1ZSk7XG5cblx0XHRjb25zdCBwcm9wZXJ0eSA9IGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxQcm9wZXJ0eVBhdGgsIHRydWUpO1xuXG5cdFx0Y29uc3QgdGV4dEFubm90YXRpb24gPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LFxuXHRcdFx0dGV4dEFycmFuZ2VtZW50ID0gdGV4dEFubm90YXRpb24/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50Py50b1N0cmluZygpLFxuXHRcdFx0ZGlzcGxheU1vZGUgPSB0ZXh0QW5ub3RhdGlvbiAmJiB0ZXh0QXJyYW5nZW1lbnQgJiYgZ2V0RGlzcGxheU1vZGUocHJvcGVydHkpO1xuXG5cdFx0aWYgKGRpc3BsYXlNb2RlID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzW2FkZGl0aW9uYWxQcm9wZXJ0eVBhdGhdID0gYWRkaXRpb25hbFByb3BlcnR5O1xuXHRcdH0gZWxzZSBpZiAoKGRpc3BsYXlNb2RlICYmIGRpc3BsYXlNb2RlICE9PSBcIlZhbHVlXCIpIHx8ICF0ZXh0QW5ub3RhdGlvbikge1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXNbcHJvcGVydHlQYXRoXSA9IHByb3BlcnR5O1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXNbYWRkaXRpb25hbFByb3BlcnR5UGF0aF0gPSBhZGRpdGlvbmFsUHJvcGVydHk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuT0RhdGFUYWJsZURlbGVnYXRlLl9jcmVhdGVQcm9wZXJ0eUluZm9zID0gZnVuY3Rpb24gKHRhYmxlOiBhbnksIG1vZGVsOiBhbnkpIHtcblx0Y29uc3QgbWV0YWRhdGFJbmZvID0gdGFibGUuZ2V0RGVsZWdhdGUoKS5wYXlsb2FkO1xuXHRjb25zdCBwcm9wZXJ0aWVzOiBWYWx1ZUhlbHBUYWJsZUNvbHVtbltdID0gW107XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBgLyR7bWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25OYW1lfWA7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXG5cdHJldHVybiBtZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtlbnRpdHlTZXRQYXRofUBgKS50aGVuKGZ1bmN0aW9uIChlbnRpdHlTZXRBbm5vdGF0aW9uczogYW55KSB7XG5cdFx0Y29uc3Qgc29ydFJlc3RyaWN0aW9uc0luZm8gPSBnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyhlbnRpdHlTZXRBbm5vdGF0aW9ucyk7XG5cdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zID0gZW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIl07XG5cdFx0Y29uc3QgZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyA9IGdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8oZmlsdGVyUmVzdHJpY3Rpb25zKTtcblx0XHRjb25zdCBmaWx0ZXJGdW5jdGlvbnMgPSBlbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckZ1bmN0aW9uc1wiXTtcblx0XHRjb25zdCBjYXNlU2Vuc2l0aXZlID0gTW9kZWxIZWxwZXIuaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKG1ldGFNb2RlbCwgZmlsdGVyRnVuY3Rpb25zKTtcblx0XHRjb25zdCBjdXN0b21EYXRhRm9yQ29sdW1ucyA9IE1hY3Jvc0RlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKHRhYmxlLCBcImNvbHVtbnNcIik7XG5cdFx0Y29uc3QgcHJvcGVydGllc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fTtcblx0XHRjb25zdCBkYXRhTW9kZWxFbnRpdHlQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKHRhYmxlLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0Q29udGV4dChlbnRpdHlTZXRQYXRoKSk7XG5cdFx0Y3VzdG9tRGF0YUZvckNvbHVtbnMuY3VzdG9tRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW5EZWY6IGFueSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlJbmZvOiBWYWx1ZUhlbHBUYWJsZUNvbHVtbiA9IHtcblx0XHRcdFx0bmFtZTogY29sdW1uRGVmLnBhdGgsXG5cdFx0XHRcdGxhYmVsOiBjb2x1bW5EZWYubGFiZWwsXG5cdFx0XHRcdHNvcnRhYmxlOiBpc1NvcnRhYmxlUHJvcGVydHkoc29ydFJlc3RyaWN0aW9uc0luZm8sIGNvbHVtbkRlZiksXG5cdFx0XHRcdGZpbHRlcmFibGU6IGlzRmlsdGVyYWJsZVByb3BlcnR5KGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIGNvbHVtbkRlZiksXG5cdFx0XHRcdG1heENvbmRpdGlvbnM6IGdldFByb3BlcnR5TWF4Q29uZGl0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLCBjb2x1bW5EZWYpLFxuXHRcdFx0XHR0eXBlQ29uZmlnOiBpc1R5cGVGaWx0ZXJhYmxlKGNvbHVtbkRlZi4kVHlwZSkgPyB0YWJsZS5nZXRUeXBlTWFwKCkuZ2V0VHlwZUNvbmZpZyhjb2x1bW5EZWYuJFR5cGUpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlXG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBkYXRhTW9kZWxQcm9wZXJ0eVBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChkYXRhTW9kZWxFbnRpdHlQYXRoLCBjb2x1bW5EZWYucGF0aCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IGRhdGFNb2RlbFByb3BlcnR5UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdFx0XHRpZiAocHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0UHJvcGVydHlQYXRoID0gZ2V0VGFyZ2V0T2JqZWN0UGF0aChkYXRhTW9kZWxQcm9wZXJ0eVBhdGgsIHRydWUpO1xuXHRcdFx0XHRsZXQgdHlwZUNvbmZpZztcblx0XHRcdFx0aWYgKGlzVHlwZUZpbHRlcmFibGUocHJvcGVydHkudHlwZSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlKSkge1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9IGZldGNoVHlwZUNvbmZpZyhwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0dHlwZUNvbmZpZyA9XG5cdFx0XHRcdFx0XHRUeXBlTWFwLmdldFR5cGVDb25maWcoXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID8/IFwiXCIsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdFx0XHRcdCkgPz8gdGFibGUuZ2V0VHlwZU1hcCgpLmdldFR5cGVDb25maWcoY29sdW1uRGVmLiRUeXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvL0NoZWNrIGlmIHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgbGlua2VkIHRvIHRoZSBwcm9wZXJ0eSBhcyBhIFVuaXQsIEN1cnJlbmN5LCBUaW1lem9uZSBvciB0ZXh0QXJyYW5nZW1lbnRcblx0XHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKGRhdGFNb2RlbFByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eVBhdGhzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyk7XG5cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0eVBhdGhzLmxlbmd0aCkge1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5wcm9wZXJ0eUluZm9zID0gcmVsYXRlZFByb3BlcnR5UGF0aHM7XG5cdFx0XHRcdFx0Ly9Db21wbGV4IHByb3BlcnRpZXMgbXVzdCBiZSBoaWRkZW4gZm9yIHNvcnRpbmcgYW5kIGZpbHRlcmluZ1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5zb3J0YWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHByb3BlcnR5SW5mby5maWx0ZXJhYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0Ly8gQ29sbGVjdCBpbmZvcm1hdGlvbiBvZiByZWxhdGVkIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydHlQYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0aWVzVG9CZUNyZWF0ZWRbcGF0aF0gPSByZWxhdGVkUHJvcGVydGllc0luZm9bcGF0aF07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Ly8gQWxzbyBhZGQgcHJvcGVydHkgZm9yIHRoZSBpbk91dCBQYXJhbWV0ZXJzIG9uIHRoZSBWYWx1ZUhlbHAgd2hlbiB0ZXh0QXJyYW5nZW1lbnQgaXMgc2V0IHRvICNUZXh0T25seVxuXHRcdFx0XHRcdC8vIEl0IHdpbGwgbm90IGJlIGxpbmtlZCB0byB0aGUgY29tcGxleCBQcm9wZXJ0eSAoQkNQIDIyNzAxNDExNTQpXG5cdFx0XHRcdFx0aWYgKCFyZWxhdGVkUHJvcGVydHlQYXRocy5maW5kKChwYXRoKSA9PiByZWxhdGVkUHJvcGVydGllc0luZm9bcGF0aF0gPT09IHByb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0cHJvcGVydGllc1RvQmVDcmVhdGVkW3RhcmdldFByb3BlcnR5UGF0aF0gPSBwcm9wZXJ0eTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvLnBhdGggPSBjb2x1bW5EZWYucGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0XHRwcm9wZXJ0eUluZm8udHlwZUNvbmZpZyA9IHByb3BlcnR5SW5mby50eXBlQ29uZmlnID8gdHlwZUNvbmZpZyA6IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHByb3BlcnR5SW5mby5wYXRoID0gY29sdW1uRGVmLnBhdGg7XG5cdFx0XHR9XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHlJbmZvKTtcblx0XHR9KTtcblx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IGNyZWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0cHJvcGVydGllc1RvQmVDcmVhdGVkLFxuXHRcdFx0cHJvcGVydGllcyxcblx0XHRcdHNvcnRSZXN0cmljdGlvbnNJbmZvLFxuXHRcdFx0ZmlsdGVyUmVzdHJpY3Rpb25zSW5mbyxcblx0XHRcdGNhc2VTZW5zaXRpdmVcblx0XHQpO1xuXHRcdHJldHVybiBwcm9wZXJ0aWVzLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBiaW5kaW5nIGluZm8gd2l0aCB0aGUgcmVsZXZhbnQgcGF0aCBhbmQgbW9kZWwgZnJvbSB0aGUgbWV0YWRhdGEuXG4gKlxuICogQHBhcmFtIG9NRENUYWJsZSBUaGUgTURDVGFibGUgaW5zdGFuY2VcbiAqIEBwYXJhbSBvQmluZGluZ0luZm8gVGhlIGJpbmRpbmdJbmZvIG9mIHRoZSB0YWJsZVxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZ0luZm8gPSBmdW5jdGlvbiAob01EQ1RhYmxlOiBhbnksIG9CaW5kaW5nSW5mbzogYW55KSB7XG5cdFRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZ0luZm8uYXBwbHkodGhpcywgW29NRENUYWJsZSwgb0JpbmRpbmdJbmZvXSk7XG5cdGlmICghb01EQ1RhYmxlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3Qgb01ldGFkYXRhSW5mbyA9IG9NRENUYWJsZS5nZXREZWxlZ2F0ZSgpLnBheWxvYWQ7XG5cblx0aWYgKG9NZXRhZGF0YUluZm8gJiYgb0JpbmRpbmdJbmZvKSB7XG5cdFx0b0JpbmRpbmdJbmZvLnBhdGggPSBvQmluZGluZ0luZm8ucGF0aCB8fCBvTWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25QYXRoIHx8IGAvJHtvTWV0YWRhdGFJbmZvLmNvbGxlY3Rpb25OYW1lfWA7XG5cdFx0b0JpbmRpbmdJbmZvLm1vZGVsID0gb0JpbmRpbmdJbmZvLm1vZGVsIHx8IG9NZXRhZGF0YUluZm8ubW9kZWw7XG5cdH1cblxuXHRpZiAoIW9CaW5kaW5nSW5mbykge1xuXHRcdG9CaW5kaW5nSW5mbyA9IHt9O1xuXHR9XG5cblx0Y29uc3Qgb0ZpbHRlciA9IENvcmUuYnlJZChvTURDVGFibGUuZ2V0RmlsdGVyKCkpIGFzIGFueSxcblx0XHRiRmlsdGVyRW5hYmxlZCA9IG9NRENUYWJsZS5pc0ZpbHRlcmluZ0VuYWJsZWQoKTtcblx0bGV0IG1Db25kaXRpb25zOiBhbnk7XG5cdGxldCBvSW5uZXJGaWx0ZXJJbmZvLCBvT3V0ZXJGaWx0ZXJJbmZvOiBhbnk7XG5cdGNvbnN0IGFGaWx0ZXJzID0gW107XG5cdGNvbnN0IHRhYmxlUHJvcGVydGllcyA9IE1hY3Jvc0RlbGVnYXRlVXRpbC5nZXRDYWNoZWRQcm9wZXJ0aWVzKG9NRENUYWJsZSk7XG5cblx0Ly9UT0RPOiBjb25zaWRlciBhIG1lY2hhbmlzbSAoJ0ZpbHRlck1lcmdlVXRpbCcgb3IgZW5oYW5jZSAnRmlsdGVyVXRpbCcpIHRvIGFsbG93IHRoZSBjb25uZWN0aW9uIGJldHdlZW4gZGlmZmVyZW50IGZpbHRlcnMpXG5cdGlmIChiRmlsdGVyRW5hYmxlZCkge1xuXHRcdG1Db25kaXRpb25zID0gb01EQ1RhYmxlLmdldENvbmRpdGlvbnMoKTtcblx0XHRvSW5uZXJGaWx0ZXJJbmZvID0gRmlsdGVyVXRpbC5nZXRGaWx0ZXJJbmZvKG9NRENUYWJsZSwgbUNvbmRpdGlvbnMsIHRhYmxlUHJvcGVydGllcyEsIFtdKSBhcyBhbnk7XG5cdFx0aWYgKG9Jbm5lckZpbHRlckluZm8uZmlsdGVycykge1xuXHRcdFx0YUZpbHRlcnMucHVzaChvSW5uZXJGaWx0ZXJJbmZvLmZpbHRlcnMpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChvRmlsdGVyKSB7XG5cdFx0bUNvbmRpdGlvbnMgPSBvRmlsdGVyLmdldENvbmRpdGlvbnMoKTtcblx0XHRpZiAobUNvbmRpdGlvbnMpIHtcblx0XHRcdGNvbnN0IGFQYXJhbWV0ZXJOYW1lcyA9IERlbGVnYXRlVXRpbC5nZXRQYXJhbWV0ZXJOYW1lcyhvRmlsdGVyKTtcblx0XHRcdC8vIFRoZSB0YWJsZSBwcm9wZXJ0aWVzIG5lZWRzIHRvIHVwZGF0ZWQgd2l0aCB0aGUgZmlsdGVyIGZpZWxkIGlmIG5vIFNlbGVjdGlvbmZpZXJsZHMgYXJlIGFubm90YXRlZCBhbmQgbm90IHBhcnQgYXMgdmFsdWUgaGVscCBwYXJhbWV0ZXJcblx0XHRcdE9EYXRhVGFibGVEZWxlZ2F0ZS5fdXBkYXRlUHJvcGVydHlJbmZvKHRhYmxlUHJvcGVydGllcywgb01EQ1RhYmxlLCBtQ29uZGl0aW9ucywgb01ldGFkYXRhSW5mbyk7XG5cdFx0XHRvT3V0ZXJGaWx0ZXJJbmZvID0gRmlsdGVyVXRpbC5nZXRGaWx0ZXJJbmZvKG9GaWx0ZXIsIG1Db25kaXRpb25zLCB0YWJsZVByb3BlcnRpZXMhLCBhUGFyYW1ldGVyTmFtZXMpO1xuXG5cdFx0XHRpZiAob091dGVyRmlsdGVySW5mby5maWx0ZXJzKSB7XG5cdFx0XHRcdGFGaWx0ZXJzLnB1c2gob091dGVyRmlsdGVySW5mby5maWx0ZXJzKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0UGFyYW1ldGVyc0luZm8ob0ZpbHRlciwgbUNvbmRpdGlvbnMpO1xuXHRcdFx0aWYgKHNQYXJhbWV0ZXJQYXRoKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5wYXRoID0gc1BhcmFtZXRlclBhdGg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gZ2V0IHRoZSBiYXNpYyBzZWFyY2hcblx0XHRvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID0gQ29tbW9uVXRpbHMubm9ybWFsaXplU2VhcmNoVGVybShvRmlsdGVyLmdldFNlYXJjaCgpKSB8fCB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gQkNQOiAyMzcwMDc4NjYwIC0gc2hhcmVkUmVxdWVzdCBpcyBzZXQgdG8gZmFsc2UgaW4gb3JkZXIgdG8gYXZvaWQgZGVhZGxvY2sgc2l0dWF0aW9uIHdoZXJlIHRoZSB0aGUgb0RhdGFcblx0Ly8gbW9kZWwgY2FjaGUgaXMgbmVpdGhlciBjaGFuZ2VhYmxlIChyZXN1bHQgb2YgTGlzdEJpbmRpbmcuJCRzaGFyZWRSZXF1ZXN0ID0gdHJ1ZSkgbm9yIGRlbGV0YWJsZVxuXHQvLyAocmVzdWx0IG9mIENvbnRleHQuc2V0U2VsZWN0ZWQodHJ1ZSkgLT4gTGlzdEJpbmRpbmcua2VlcEFsaXZlKVxuXHRvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kJHNoYXJlZFJlcXVlc3QgPSBmYWxzZTtcblxuXHR0aGlzLl9hcHBseURlZmF1bHRTb3J0aW5nKG9CaW5kaW5nSW5mbywgb01EQ1RhYmxlLmdldERlbGVnYXRlKCkucGF5bG9hZCk7XG5cdC8vIGFkZCBzZWxlY3QgdG8gb0JpbmRpbmdJbmZvIChCQ1AgMjE3MDE2MzAxMilcblx0b0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlbGVjdCA9IHRhYmxlUHJvcGVydGllcz8ucmVkdWNlKGZ1bmN0aW9uIChzUXVlcnk6IHN0cmluZywgb1Byb3BlcnR5OiBhbnkpIHtcblx0XHQvLyBOYXZpZ2F0aW9uIHByb3BlcnRpZXMgKHJlcHJlc2VudGVkIGJ5IFgvWSkgc2hvdWxkIG5vdCBiZSBhZGRlZCB0byAkc2VsZWN0LlxuXHRcdC8vIFRvRG8gOiBUaGV5IHNob3VsZCBiZSBhZGRlZCBhcyAkZXhwYW5kPVgoJHNlbGVjdD1ZKSBpbnN0ZWFkXG5cdFx0aWYgKG9Qcm9wZXJ0eS5wYXRoICYmIG9Qcm9wZXJ0eS5wYXRoLmluZGV4T2YoXCIvXCIpID09PSAtMSkge1xuXHRcdFx0c1F1ZXJ5ID0gc1F1ZXJ5ID8gYCR7c1F1ZXJ5fSwke29Qcm9wZXJ0eS5wYXRofWAgOiBvUHJvcGVydHkucGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIHNRdWVyeTtcblx0fSwgXCJcIik7XG5cblx0Ly8gQWRkICRjb3VudFxuXHRvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kY291bnQgPSB0cnVlO1xuXG5cdC8vSWYgdGhlIGVudGl0eSBpcyBEcmFmdEVuYWJsZWQgYWRkIGEgRHJhZnRGaWx0ZXJcblx0aWYgKE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQob01EQ1RhYmxlLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksIG9CaW5kaW5nSW5mby5wYXRoKSkge1xuXHRcdGFGaWx0ZXJzLnB1c2gobmV3IEZpbHRlcihcIklzQWN0aXZlRW50aXR5XCIsIEZpbHRlck9wZXJhdG9yLkVRLCB0cnVlKSk7XG5cdH1cblxuXHRvQmluZGluZ0luZm8uZmlsdGVycyA9IG5ldyBGaWx0ZXIoYUZpbHRlcnMsIHRydWUpO1xufTtcblxuT0RhdGFUYWJsZURlbGVnYXRlLmdldFR5cGVNYXAgPSBmdW5jdGlvbiAoKTogb2JqZWN0IHtcblx0cmV0dXJuIFR5cGVNYXA7XG59O1xuXG4vKipcbiAqIEdldCB0YWJsZSBNb2RlbC5cbiAqXG4gKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgdGhlIE1EQ3RhYmxlXG4gKiBAcmV0dXJucyBNb2RlbFxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuX2dldE1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSk6IFByb21pc2U8TW9kZWw+IHtcblx0Y29uc3QgbWV0YWRhdGFJbmZvID0gKHRhYmxlLmdldERlbGVnYXRlKCkgYXMgYW55KS5wYXlsb2FkO1xuXHRsZXQgbW9kZWw6IE1vZGVsID0gdGFibGUuZ2V0TW9kZWwobWV0YWRhdGFJbmZvLm1vZGVsKSE7XG5cdGlmICghbW9kZWwpIHtcblx0XHRhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGFibGUuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIHJlc29sdmUpO1xuXHRcdH0pO1xuXHRcdG1vZGVsID0gdGFibGUuZ2V0TW9kZWwobWV0YWRhdGFJbmZvLm1vZGVsKSE7XG5cdH1cblx0cmV0dXJuIG1vZGVsO1xufTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgZGVmYXVsdCBzb3J0IG9yZGVyIGlmIG5lZWRlZC4gVGhpcyBpcyBvbmx5IHRoZSBjYXNlIGlmIHRoZSByZXF1ZXN0IGlzIG5vdCBhICRzZWFyY2ggcmVxdWVzdFxuICogKG1lYW5zIHRoZSBwYXJhbWV0ZXIgJHNlYXJjaCBvZiB0aGUgYmluZGluZ0luZm8gaXMgdW5kZWZpbmVkKSBhbmQgaWYgbm90IGFscmVhZHkgYSBzb3J0IG9yZGVyIGlzIHNldCxcbiAqIGUuZy4gdmlhIHByZXNlbnRhdGlvbiB2YXJpYW50IG9yIG1hbnVhbCBieSB0aGUgdXNlci5cbiAqXG4gKiBAcGFyYW0gb0JpbmRpbmdJbmZvIFRoZSBiaW5kaW5nSW5mbyBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBvUGF5bG9hZCBUaGUgcGF5bG9hZCBvZiB0aGUgVGFibGVEZWxlZ2F0ZVxuICovXG5PRGF0YVRhYmxlRGVsZWdhdGUuX2FwcGx5RGVmYXVsdFNvcnRpbmcgPSBmdW5jdGlvbiAob0JpbmRpbmdJbmZvOiBhbnksIG9QYXlsb2FkOiBhbnkpIHtcblx0aWYgKG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzICYmIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPT0gdW5kZWZpbmVkICYmIG9CaW5kaW5nSW5mby5zb3J0ZXIgJiYgb0JpbmRpbmdJbmZvLnNvcnRlci5sZW5ndGggPT0gMCkge1xuXHRcdGNvbnN0IGRlZmF1bHRTb3J0UHJvcGVydHlOYW1lID0gb1BheWxvYWQgPyBvUGF5bG9hZC5kZWZhdWx0U29ydFByb3BlcnR5TmFtZSA6IHVuZGVmaW5lZDtcblx0XHRpZiAoZGVmYXVsdFNvcnRQcm9wZXJ0eU5hbWUpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5zb3J0ZXIucHVzaChuZXcgU29ydGVyKGRlZmF1bHRTb3J0UHJvcGVydHlOYW1lLCBmYWxzZSkpO1xuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0YWJsZSBwcm9wZXJ0aWVzIHdpdGggZmlsdGVyIGZpZWxkIGluZm9zLlxuICpcbiAqIEBwYXJhbSBhVGFibGVQcm9wZXJ0aWVzIEFycmF5IHdpdGggdGFibGUgcHJvcGVydGllc1xuICogQHBhcmFtIG9NRENUYWJsZSBUaGUgTURDVGFibGUgaW5zdGFuY2VcbiAqIEBwYXJhbSBtQ29uZGl0aW9ucyBUaGUgY29uZGl0aW9ucyBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBvTWV0YWRhdGFJbmZvIFRoZSBtZXRhZGF0YSBpbmZvIG9mIHRoZSBmaWx0ZXIgZmllbGRcbiAqL1xuT0RhdGFUYWJsZURlbGVnYXRlLl91cGRhdGVQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdGFUYWJsZVByb3BlcnRpZXM6IGFueVtdLFxuXHRvTURDVGFibGU6IE1EQ1RhYmxlLFxuXHRtQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgYW55Pixcblx0b01ldGFkYXRhSW5mbzogYW55XG4pIHtcblx0Y29uc3QgYUNvbmRpdGlvbktleSA9IE9iamVjdC5rZXlzKG1Db25kaXRpb25zKSxcblx0XHRvTWV0YU1vZGVsID0gKG9NRENUYWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpITtcblx0YUNvbmRpdGlvbktleS5mb3JFYWNoKGZ1bmN0aW9uIChjb25kaXRpb25LZXk6IGFueSkge1xuXHRcdGlmIChcblx0XHRcdGFUYWJsZVByb3BlcnRpZXMuZmluZEluZGV4KGZ1bmN0aW9uICh0YWJsZVByb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIHRhYmxlUHJvcGVydHkucGF0aCA9PT0gY29uZGl0aW9uS2V5O1xuXHRcdFx0fSkgPT09IC0xXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvQ29sdW1uRGVmID0ge1xuXHRcdFx0XHRwYXRoOiBjb25kaXRpb25LZXksXG5cdFx0XHRcdHR5cGVDb25maWc6IG9NRENUYWJsZVxuXHRcdFx0XHRcdC5nZXRUeXBlTWFwKClcblx0XHRcdFx0XHQuZ2V0VHlwZUNvbmZpZyhvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7b01ldGFkYXRhSW5mby5jb2xsZWN0aW9uTmFtZX0vJHtjb25kaXRpb25LZXl9YCkuJFR5cGUpXG5cdFx0XHR9O1xuXHRcdFx0YVRhYmxlUHJvcGVydGllcy5wdXNoKG9Db2x1bW5EZWYpO1xuXHRcdH1cblx0fSk7XG59O1xuXG5PRGF0YVRhYmxlRGVsZWdhdGUudXBkYXRlQmluZGluZyA9IGZ1bmN0aW9uIChvVGFibGU6IGFueSwgb0JpbmRpbmdJbmZvOiBhbnksIG9CaW5kaW5nOiBhbnkpIHtcblx0bGV0IGJOZWVkTWFudWFsUmVmcmVzaCA9IGZhbHNlO1xuXHRjb25zdCBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRjb25zdCBzTWFudWFsVXBkYXRlUHJvcGVydHlLZXkgPSBcInBlbmRpbmdNYW51YWxCaW5kaW5nVXBkYXRlXCI7XG5cdGNvbnN0IHNMYXN0U2VhcmNoID0gXCJsYXN0U2VhcmNoXCI7XG5cdGNvbnN0IHNMYXN0RmlsdGVyID0gXCJsYXN0RmlsdGVyXCI7XG5cdGNvbnN0IGJQZW5kaW5nTWFudWFsVXBkYXRlID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KHNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSk7XG5cdGNvbnN0IGxhc3RTZWFyY2ggPSBvSW50ZXJuYWxCaW5kaW5nQ29udGV4dD8uZ2V0UHJvcGVydHkoc0xhc3RTZWFyY2gpO1xuXHRjb25zdCBsYXN0RmlsdGVyID0gb0ludGVybmFsQmluZGluZ0NvbnRleHQ/LmdldFByb3BlcnR5KHNMYXN0RmlsdGVyKTtcblx0bGV0IG9Sb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblxuXHQvL29CaW5kaW5nPW51bGwgbWVhbnMgdGhhdCBhIHJlYmluZGluZyBuZWVkcyB0byBiZSBmb3JjZWQgdmlhIHVwZGF0ZUJpbmRpbmcgaW4gbWRjIFRhYmxlRGVsZWdhdGVcblx0VGFibGVEZWxlZ2F0ZS51cGRhdGVCaW5kaW5nLmFwcGx5KE9EYXRhVGFibGVEZWxlZ2F0ZSwgW29UYWJsZSwgb0JpbmRpbmdJbmZvLCBvQmluZGluZ10pO1xuXHQvL2dldCByb3cgYmluZGluZyBhZnRlciByZWJpbmQgZnJvbSBUYWJsZURlbGVnYXRlLnVwZGF0ZUJpbmRpbmcgaW4gY2FzZSBvQmluZGluZyB3YXMgbnVsbFxuXHRpZiAoIW9Sb3dCaW5kaW5nKSB7XG5cdFx0b1Jvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHR9XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdC8qKlxuXHRcdCAqIE1hbnVhbCByZWZyZXNoIGlmIGZpbHRlcnMgYXJlIG5vdCBjaGFuZ2VkIGJ5IGJpbmRpbmcucmVmcmVzaCgpIHNpbmNlIHVwZGF0aW5nIHRoZSBiaW5kaW5nSW5mb1xuXHRcdCAqIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBhIGJhdGNoIHJlcXVlc3QuXG5cdFx0ICogSW4gY2FzZSB0aGVyZSBpcyBubyBpbnRlcm5hbEJpbmRpbmdDb250ZXh0IChzZWUgQkNQIDIyODAxNjE1MjQpIHdlIGNhbiBub3QgZGV0ZXJtaW5lIGlmIGEgbWFudWFsXG5cdFx0ICogcmVmcmVzaCBpcyBuZWVkZWQgb3Igbm90LiBUaGVyZWZvcmUsIHdlIGFsd2F5cyByZWZyZXNoIGluIHRoaXMgc3BlY2lhbCBjYXNlXG5cdFx0ICovXG5cdFx0Yk5lZWRNYW51YWxSZWZyZXNoID0gb0ludGVybmFsQmluZGluZ0NvbnRleHRcblx0XHRcdD8gZGVlcEVxdWFsKG9CaW5kaW5nSW5mby5maWx0ZXJzLCBsYXN0RmlsdGVyKSAmJiBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoID09PSBsYXN0U2VhcmNoICYmICFiUGVuZGluZ01hbnVhbFVwZGF0ZVxuXHRcdFx0OiB0cnVlO1xuXHR9XG5cdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShzTGFzdFNlYXJjaCwgb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCk7XG5cdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShzTGFzdEZpbHRlciwgb0JpbmRpbmdJbmZvLmZpbHRlcnMpO1xuXG5cdGlmIChiTmVlZE1hbnVhbFJlZnJlc2ggJiYgb1RhYmxlLmdldEZpbHRlcigpKSB7XG5cdFx0b0ludGVybmFsQmluZGluZ0NvbnRleHQ/LnNldFByb3BlcnR5KHNNYW51YWxVcGRhdGVQcm9wZXJ0eUtleSwgdHJ1ZSk7XG5cdFx0b1Jvd0JpbmRpbmdcblx0XHRcdC5yZXF1ZXN0UmVmcmVzaChvUm93QmluZGluZy5nZXRHcm91cElkKCkpXG5cdFx0XHQuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG9JbnRlcm5hbEJpbmRpbmdDb250ZXh0Py5zZXRQcm9wZXJ0eShzTWFudWFsVXBkYXRlUHJvcGVydHlLZXksIGZhbHNlKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlZnJlc2hpbmcgYSBmaWx0ZXJCYXIgVkggdGFibGVcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cdG9UYWJsZS5maXJlRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiKTtcblx0Ly9ubyBuZWVkIHRvIGNoZWNrIGZvciBzZW1hbnRpYyB0YXJnZXRzIGhlcmUgc2luY2Ugd2UgYXJlIGluIGEgVkggYW5kIGRvbid0IHdhbnQgdG8gYWxsb3cgZnVydGhlciBuYXZpZ2F0aW9uXG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzaW1wbGUgcHJvcGVydHkgZm9yIGVhY2ggaWRlbnRpZmllZCBjb21wbGV4IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQgSWRlbnRpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIGV4aXN0aW5nQ29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIGNyZWF0ZWQgZm9yIHByb3BlcnRpZXMgZGVmaW5lZCBvbiB0aGUgVmFsdWUgTGlzdC5cbiAqIEBwYXJhbSBzb3J0UmVzdHJpY3Rpb25zSW5mbyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgc29ydCByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICogQHBhcmFtIGZpbHRlclJlc3RyaWN0aW9uc0luZm8gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlciByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICogQHBhcmFtIGNhc2VTZW5zaXRpdmUgU2hvdWxkIGZpbHRlcmluZyBiZSBjYXNlIHNlbnNpdGl2ZVxuICogQHJldHVybnMgVGhlIGFycmF5IG9mIHByb3BlcnRpZXMgY3JlYXRlZC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRwcm9wZXJ0aWVzVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pixcblx0ZXhpc3RpbmdDb2x1bW5zOiBWYWx1ZUhlbHBUYWJsZUNvbHVtbltdLFxuXHRzb3J0UmVzdHJpY3Rpb25zSW5mbzogU29ydFJlc3RyaWN0aW9uc0luZm9UeXBlLFxuXHRmaWx0ZXJSZXN0cmljdGlvbnNJbmZvOiBGaWx0ZXJSZXN0cmljdGlvbnNJbmZvVHlwZSxcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW5cbik6IFZhbHVlSGVscFRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sXG5cdFx0cmVsYXRlZENvbHVtbnM6IFZhbHVlSGVscFRhYmxlQ29sdW1uW10gPSBbXTtcblx0T2JqZWN0LmtleXMocHJvcGVydGllc1RvQmVDcmVhdGVkKS5mb3JFYWNoKChwYXRoKSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBwcm9wZXJ0aWVzVG9CZUNyZWF0ZWRbcGF0aF0sXG5cdFx0XHRyZWxhdGVkQ29sdW1uID0gZXhpc3RpbmdDb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLnBhdGggPT09IHBhdGgpOyAvLyBDb21wbGV4IHByb3BlcnRpZXMgZG9lc24ndCBnZXQgcGF0aCBzbyBvbmx5IHNpbXBsZSBjb2x1bW4gYXJlIGZvdW5kXG5cdFx0aWYgKCFyZWxhdGVkQ29sdW1uKSB7XG5cdFx0XHRjb25zdCBuZXdOYW1lID0gYFByb3BlcnR5Ojoke3BhdGh9YDtcblx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcGF0aF0gPSBuZXdOYW1lO1xuXHRcdFx0Y29uc3QgdmFsdWVIZWxwVGFibGVDb2x1bW46IFZhbHVlSGVscFRhYmxlQ29sdW1uID0ge1xuXHRcdFx0XHRuYW1lOiBuZXdOYW1lLFxuXHRcdFx0XHRsYWJlbDogZ2V0TGFiZWwocHJvcGVydHkpLFxuXHRcdFx0XHRwYXRoOiBwYXRoLFxuXHRcdFx0XHRzb3J0YWJsZTogaXNTb3J0YWJsZVByb3BlcnR5KHNvcnRSZXN0cmljdGlvbnNJbmZvLCBwcm9wZXJ0eSksXG5cdFx0XHRcdGZpbHRlcmFibGU6IGlzRmlsdGVyYWJsZVByb3BlcnR5KGZpbHRlclJlc3RyaWN0aW9uc0luZm8sIHByb3BlcnR5KSxcblx0XHRcdFx0Y2FzZVNlbnNpdGl2ZVxuXHRcdFx0fTtcblx0XHRcdHZhbHVlSGVscFRhYmxlQ29sdW1uLm1heENvbmRpdGlvbnMgPSBnZXRQcm9wZXJ0eU1heENvbmRpdGlvbnMoZmlsdGVyUmVzdHJpY3Rpb25zSW5mbywgdmFsdWVIZWxwVGFibGVDb2x1bW4pO1xuXHRcdFx0aWYgKGlzVHlwZUZpbHRlcmFibGUocHJvcGVydHkudHlwZSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdFR5cGVGb3JFZG1UeXBlKSkge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWcgPSBmZXRjaFR5cGVDb25maWcocHJvcGVydHkpO1xuXHRcdFx0XHR2YWx1ZUhlbHBUYWJsZUNvbHVtbi50eXBlQ29uZmlnID0gVHlwZU1hcC5nZXRUeXBlQ29uZmlnKFxuXHRcdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID8/IFwiXCIsXG5cdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKHZhbHVlSGVscFRhYmxlQ29sdW1uKTtcblx0XHR9XG5cdH0pO1xuXHQvLyBUaGUgcHJvcGVydHkgJ25hbWUnIGhhcyBiZWVuIHByZWZpeGVkIHdpdGggJ1Byb3BlcnR5OjonIGZvciB1bmlxdWVuZXNzLlxuXHQvLyBVcGRhdGUgdGhlIHNhbWUgaW4gb3RoZXIgcHJvcGVydHlJbmZvc1tdIHJlZmVyZW5jZXMgd2hpY2ggcG9pbnQgdG8gdGhpcyBwcm9wZXJ0eS5cblx0ZXhpc3RpbmdDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGlmIChjb2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8ubWFwKChjb2x1bW5OYW1lKSA9PiByZWxhdGVkUHJvcGVydHlOYW1lTWFwW2NvbHVtbk5hbWVdID8/IGNvbHVtbk5hbWUpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiByZWxhdGVkQ29sdW1ucztcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIHRoZSBtYXhDb25kaXRpb25zIGZvciBhIGdpdmVuIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNJbmZvIFRoZSBmaWx0ZXIgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVzdHJpY3Rpb24gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5LlxuICogQHJldHVybnMgYC0xYCBvciBgMWAgaWYgdGhlIHByb3BlcnR5IGlzIGEgTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24uXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5TWF4Q29uZGl0aW9ucyhmaWx0ZXJSZXN0cmljdGlvbnNJbmZvOiBhbnksIHByb3BlcnR5OiBWYWx1ZUhlbHBUYWJsZUNvbHVtbiB8IFByb3BlcnR5KTogbnVtYmVyIHtcblx0Y29uc3QgcHJvcGVydHlQYXRoID0gZ2V0UGF0aChwcm9wZXJ0eSk7XG5cdHJldHVybiBmaWx0ZXJSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mbz8uaGFzT3duUHJvcGVydHkocHJvcGVydHlQYXRoKSAmJlxuXHRcdHByb3BlcnR5UGF0aCAmJlxuXHRcdGlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24oZmlsdGVyUmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bcHJvcGVydHlQYXRoXSlcblx0XHQ/IC0xXG5cdFx0OiAxO1xufVxuXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgd2hpY2ggcmVmZXJlbmNlcyB0byB0aGUgdW5pdCwgdGltZXpvbmUsIHRleHRBcnJhbmdlbWVudCBvciBjdXJyZW5jeS5cbiAqXG4gKiBAcGFyYW0gZGF0YU1vZGVsUHJvcGVydHlQYXRoIFRoZSBtb2RlbCBvYmplY3QgcGF0aCBvZiB0aGUgcHJvcGVydHkuXG4gKiBAcmV0dXJucyBUaGUgYWRkaXRpb25hbCBwcm9wZXJ0eS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxQcm9wZXJ0eShkYXRhTW9kZWxQcm9wZXJ0eVBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBEYXRhTW9kZWxPYmplY3RQYXRoIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcHJvcGVydHkgPSBkYXRhTW9kZWxQcm9wZXJ0eVBhdGgudGFyZ2V0T2JqZWN0O1xuXHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoID1cblx0XHRnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aChwcm9wZXJ0eSkgfHxcblx0XHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgocHJvcGVydHkpIHx8XG5cdFx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgocHJvcGVydHkpIHx8XG5cdFx0Z2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoKHByb3BlcnR5KTtcblx0aWYgKCFhZGRpdGlvbmFsUHJvcGVydHlQYXRoKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHkgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChkYXRhTW9kZWxQcm9wZXJ0eVBhdGgsIGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpO1xuXG5cdC8vQWRkaXRpb25hbCBQcm9wZXJ0eSBjb3VsZCByZWZlciB0byBhIG5hdmlnYXRpb24gcHJvcGVydHksIGtlZXAgdGhlIG5hbWUgYW5kIHBhdGggYXMgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHkgPSBkYXRhTW9kZWxBZGRpdGlvbmFsUHJvcGVydHkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoIWFkZGl0aW9uYWxQcm9wZXJ0eSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIGRhdGFNb2RlbEFkZGl0aW9uYWxQcm9wZXJ0eTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT0RhdGFUYWJsZURlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxREE7QUFDQTtBQUNBO0VBQ0EsTUFBTUEsa0JBQWtCLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxhQUFhLENBQUM7O0VBRTNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBSCxrQkFBa0IsQ0FBQ0ksZUFBZSxHQUFHLGdCQUFnQkMsS0FBWSxFQUF5QjtJQUN6RixNQUFNQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUNDLFNBQVMsQ0FBQ0YsS0FBSyxDQUFDO0lBQ3pDLE1BQU1HLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQ0Msb0JBQW9CLENBQUNKLEtBQUssRUFBRUMsS0FBSyxDQUFDO0lBQ2hFTixrQkFBa0IsQ0FBQ1UsNEJBQTRCLENBQUNMLEtBQUssQ0FBQztJQUN0RE0sa0JBQWtCLENBQUNDLG1CQUFtQixDQUFDUCxLQUFLLEVBQUVHLFVBQVUsQ0FBQztJQUN4REgsS0FBSyxDQUFDUSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBYUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQztJQUM5RixPQUFPTixVQUFVO0VBQ2xCLENBQUM7RUFFRFIsa0JBQWtCLENBQUNVLDRCQUE0QixHQUFHLFVBQVVMLEtBQVksRUFBRTtJQUN6RSxJQUFJVSxNQUE0QixHQUFHVixLQUFLO0lBQ3hDLE9BQU9VLE1BQU0sSUFBSSxDQUFDQSxNQUFN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
|
|
@@ -4,7 +4,7 @@ import deepEqual from "sap/base/util/deepEqual";
|
|
|
4
4
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
5
5
|
import { fetchTypeConfig } from "sap/fe/core/converters/controls/ListReport/FilterBar";
|
|
6
6
|
import { getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
|
|
7
|
-
import type { SortRestrictionsInfoType } from "sap/fe/core/helpers/MetaModelFunction";
|
|
7
|
+
import type { FilterRestrictionsInfoType, SortRestrictionsInfoType } from "sap/fe/core/helpers/MetaModelFunction";
|
|
8
8
|
import { getFilterRestrictionsInfo, getSortRestrictionsInfo, isMultiValueFilterExpression } from "sap/fe/core/helpers/MetaModelFunction";
|
|
9
9
|
import ModelHelper from "sap/fe/core/helpers/ModelHelper";
|
|
10
10
|
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
@@ -47,6 +47,7 @@ export type ValueHelpTableColumn = {
|
|
|
47
47
|
filterable?: boolean;
|
|
48
48
|
typeConfig?: Object;
|
|
49
49
|
maxConditions?: number;
|
|
50
|
+
caseSensitive?: boolean;
|
|
50
51
|
};
|
|
51
52
|
type ComplexPropertyMap = Record<string, Property>;
|
|
52
53
|
|
|
@@ -133,7 +134,8 @@ ODataTableDelegate._createPropertyInfos = function (table: any, model: any) {
|
|
|
133
134
|
const sortRestrictionsInfo = getSortRestrictionsInfo(entitySetAnnotations);
|
|
134
135
|
const filterRestrictions = entitySetAnnotations["@Org.OData.Capabilities.V1.FilterRestrictions"];
|
|
135
136
|
const filterRestrictionsInfo = getFilterRestrictionsInfo(filterRestrictions);
|
|
136
|
-
|
|
137
|
+
const filterFunctions = entitySetAnnotations["@Org.OData.Capabilities.V1.FilterFunctions"];
|
|
138
|
+
const caseSensitive = ModelHelper.isFilteringCaseSensitive(metaModel, filterFunctions);
|
|
137
139
|
const customDataForColumns = MacrosDelegateUtil.getCustomData(table, "columns");
|
|
138
140
|
const propertiesToBeCreated: Record<string, Property> = {};
|
|
139
141
|
const dataModelEntityPath = getInvolvedDataModelObjects(table.getModel().getMetaModel().getContext(entitySetPath));
|
|
@@ -144,7 +146,8 @@ ODataTableDelegate._createPropertyInfos = function (table: any, model: any) {
|
|
|
144
146
|
sortable: isSortableProperty(sortRestrictionsInfo, columnDef),
|
|
145
147
|
filterable: isFilterableProperty(filterRestrictionsInfo, columnDef),
|
|
146
148
|
maxConditions: getPropertyMaxConditions(filterRestrictionsInfo, columnDef),
|
|
147
|
-
typeConfig: isTypeFilterable(columnDef.$Type) ? table.getTypeMap().getTypeConfig(columnDef.$Type) : undefined
|
|
149
|
+
typeConfig: isTypeFilterable(columnDef.$Type) ? table.getTypeMap().getTypeConfig(columnDef.$Type) : undefined,
|
|
150
|
+
caseSensitive
|
|
148
151
|
};
|
|
149
152
|
|
|
150
153
|
const dataModelPropertyPath = enhanceDataModelPath(dataModelEntityPath, columnDef.path);
|
|
@@ -188,7 +191,13 @@ ODataTableDelegate._createPropertyInfos = function (table: any, model: any) {
|
|
|
188
191
|
}
|
|
189
192
|
properties.push(propertyInfo);
|
|
190
193
|
});
|
|
191
|
-
const relatedColumns = createRelatedProperties(
|
|
194
|
+
const relatedColumns = createRelatedProperties(
|
|
195
|
+
propertiesToBeCreated,
|
|
196
|
+
properties,
|
|
197
|
+
sortRestrictionsInfo,
|
|
198
|
+
filterRestrictionsInfo,
|
|
199
|
+
caseSensitive
|
|
200
|
+
);
|
|
192
201
|
return properties.concat(relatedColumns);
|
|
193
202
|
});
|
|
194
203
|
};
|
|
@@ -405,6 +414,7 @@ ODataTableDelegate.updateBinding = function (oTable: any, oBindingInfo: any, oBi
|
|
|
405
414
|
* @param existingColumns The list of columns created for properties defined on the Value List.
|
|
406
415
|
* @param sortRestrictionsInfo An object containing the sort restriction information
|
|
407
416
|
* @param filterRestrictionsInfo An object containing the filter restriction information
|
|
417
|
+
* @param caseSensitive Should filtering be case sensitive
|
|
408
418
|
* @returns The array of properties created.
|
|
409
419
|
* @private
|
|
410
420
|
*/
|
|
@@ -412,7 +422,8 @@ function createRelatedProperties(
|
|
|
412
422
|
propertiesToBeCreated: Record<string, Property>,
|
|
413
423
|
existingColumns: ValueHelpTableColumn[],
|
|
414
424
|
sortRestrictionsInfo: SortRestrictionsInfoType,
|
|
415
|
-
filterRestrictionsInfo:
|
|
425
|
+
filterRestrictionsInfo: FilterRestrictionsInfoType,
|
|
426
|
+
caseSensitive?: boolean
|
|
416
427
|
): ValueHelpTableColumn[] {
|
|
417
428
|
const relatedPropertyNameMap: Record<string, string> = {},
|
|
418
429
|
relatedColumns: ValueHelpTableColumn[] = [];
|
|
@@ -427,7 +438,8 @@ function createRelatedProperties(
|
|
|
427
438
|
label: getLabel(property),
|
|
428
439
|
path: path,
|
|
429
440
|
sortable: isSortableProperty(sortRestrictionsInfo, property),
|
|
430
|
-
filterable: isFilterableProperty(filterRestrictionsInfo, property)
|
|
441
|
+
filterable: isFilterableProperty(filterRestrictionsInfo, property),
|
|
442
|
+
caseSensitive
|
|
431
443
|
};
|
|
432
444
|
valueHelpTableColumn.maxConditions = getPropertyMaxConditions(filterRestrictionsInfo, valueHelpTableColumn);
|
|
433
445
|
if (isTypeFilterable(property.type as keyof typeof DefaultTypeForEdmType)) {
|
|
@@ -25,7 +25,7 @@ sap.ui.define(["sap/fe/core/library", "sap/fe/macros/filter/type/MultiValue", "s
|
|
|
25
25
|
controls: [],
|
|
26
26
|
elements: [],
|
|
27
27
|
// eslint-disable-next-line no-template-curly-in-string
|
|
28
|
-
version: "1.120.
|
|
28
|
+
version: "1.120.25",
|
|
29
29
|
noLibraryCSS: true
|
|
30
30
|
});
|
|
31
31
|
thisLib.NavigationType = {
|
|
@@ -17,7 +17,7 @@ M_DRAFT_POPOVER_ADMIN_GENERIC_LOCKED_OBJECT_POPOVER_TEXT=Dieses Objekt wird gera
|
|
|
17
17
|
|
|
18
18
|
C_DRAFT_STATUS_COLUMN_LABEL_TOOLTIP=Bearbeitungsstatus
|
|
19
19
|
|
|
20
|
-
M_FIELD_RUNTIME_DRAFT_POPOVER_LOCKED_BY_KNOWN=Dieses Objekt wird gerade
|
|
20
|
+
M_FIELD_RUNTIME_DRAFT_POPOVER_LOCKED_BY_KNOWN=Dieses Objekt wird gerade von {0} bearbeitet.
|
|
21
21
|
|
|
22
22
|
M_FILTERBAR_SEARCH=Suchen
|
|
23
23
|
|
|
@@ -65,7 +65,7 @@ M_MESSAGESTRIP_EMPTYROW_MANDATORY_HIDDEN_PLURAL=\u0422\u0430\u0431\u043B\u0438\u
|
|
|
65
65
|
|
|
66
66
|
M_TABLE_EMPTYROW_MANDATORY={0} \u0454 \u043E\u0431\u043E\u0432''\u044F\u0437\u043A\u043E\u0432\u0438\u043C \u043F\u043E\u043B\u0435\u043C (*).
|
|
67
67
|
|
|
68
|
-
M_TABLE_EMPTYROW_MANDATORY_HIDDEN={0} \u0454 \u043E\u0431\u043E\u0432''\u044F\u0437\u043A\u043E\u0432\u0438\u043C \u043F\u043E\u043B\u0435\u043C (*), \u0430\u043B\u0435 \u043D\u0435 \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0430\u0454\u0442\u044C\u0441\u044F \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0456. \u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u0439\u043E\u0433\u043E
|
|
68
|
+
M_TABLE_EMPTYROW_MANDATORY_HIDDEN={0} \u0454 \u043E\u0431\u043E\u0432''\u044F\u0437\u043A\u043E\u0432\u0438\u043C \u043F\u043E\u043B\u0435\u043C (*), \u0430\u043B\u0435 \u043D\u0435 \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0430\u0454\u0442\u044C\u0441\u044F \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0456. \u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u0439\u043E\u0433\u043E \u043D\u0430\u0442\u0438\u0441\u043A\u0430\u043D\u043D\u044F\u043C \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0443 \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438.
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
M_KEYBOARD_SHORTCUT_CREATE_WIN=CTRL+Enter
|