@sapui5/sap.fe.macros 1.108.15 → 1.108.17
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/DelegateUtil.js +1 -1
- package/src/sap/fe/macros/DelegateUtil.ts +3 -3
- package/src/sap/fe/macros/filter/type/MultiValue.js +7 -2
- package/src/sap/fe/macros/filter/type/MultiValue.ts +6 -1
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +16 -24
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +17 -24
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/messagebundle_bg.properties +1 -1
- package/src/sap/fe/macros/messagebundle_ja.properties +1 -1
- package/src/sap/fe/macros/messagebundle_no.properties +2 -2
- package/src/sap/fe/macros/messagebundle_pl.properties +1 -1
- package/src/sap/fe/macros/messagebundle_th.properties +3 -3
- package/src/sap/fe/macros/messagebundle_uk.properties +2 -2
- package/src/sap/fe/macros/table/TableAPI.js +47 -21
- package/src/sap/fe/macros/table/TableAPI.ts +79 -25
package/package.json
CHANGED
|
@@ -263,4 +263,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/S
|
|
|
263
263
|
};
|
|
264
264
|
return DelegateUtil;
|
|
265
265
|
}, false);
|
|
266
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyIiwib0NvbnRyb2wiLCJzUHJvcGVydHkiLCJvTW9kaWZpZXIiLCJhQ3VzdG9tRGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsImdldEFnZ3JlZ2F0aW9uIiwiYmluZCIsImFSZXRyaWV2ZWRDdXN0b21EYXRhIiwib1Byb21pc2UiLCJyZWR1Y2UiLCJvUHJldmlvdXNQcm9taXNlIiwib0N1c3RvbURhdGEiLCJnZXRQcm9wZXJ0eSIsInNLZXkiLCJwdXNoIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiTlNfTUFDUk9EQVRBIiwibURlZmF1bHRUeXBlRm9yRWRtVHlwZSIsIm1vZGVsVHlwZSIsIl9yZXRyaWV2ZU1vZGVsIiwiY29udHJvbCIsImRldGFjaE1vZGVsQ29udGV4dENoYW5nZSIsInNNb2RlbE5hbWUiLCJtb2RlbE5hbWUiLCJvTW9kZWwiLCJnZXRNb2RlbCIsImF0dGFjaE1vZGVsQ29udGV4dENoYW5nZSIsIkRlbGVnYXRlVXRpbCIsImdldExvY2FsaXplZFRleHQiLCJzVGV4dE9yVG9rZW4iLCJhTWF0Y2giLCJleGVjIiwib1Jlc291cmNlQnVuZGxlIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJnZXRUZXh0IiwiZSIsIkxvZyIsImluZm8iLCJnZXRDdXN0b21EYXRhIiwid2luZG93IiwiRWxlbWVudCIsImdldEF0dHJpYnV0ZU5TIiwiZGF0YSIsIkZ1bmN0aW9uIiwic2V0Q3VzdG9tRGF0YSIsInZWYWx1ZSIsInNldEF0dHJpYnV0ZU5TIiwiZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5Iiwic0VudGl0eVNldCIsIm9NZXRhTW9kZWwiLCJyZXF1ZXN0T2JqZWN0IiwiZmV0Y2hBbm5vdGF0aW9uc0ZvckVudGl0eSIsImZldGNoTW9kZWwiLCJnZXREZWxlZ2F0ZSIsInBheWxvYWQiLCJvQ29udGV4dCIsImNhbGwiLCJsb2FkTWFjcm9MaWJyYXJ5Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJzRnJhZ21lbnROYW1lIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwib09wdGlvbnMiLCJDb21tb25VdGlscyIsImRvZXNWYWx1ZUhlbHBFeGlzdCIsIm1QYXJhbWV0ZXJzIiwic1Byb3BlcnR5TmFtZSIsInNWYWx1ZUhlbHBUeXBlIiwic09yaWdpbmFsUHJvcGVydHkiLCJzQmluZGluZ1BhdGgiLCJvUHJvcGVydHlDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJzVmFsdWVIZWxwUHJvcGVydHkiLCJGaWVsZEhlbHBlciIsInZhbHVlSGVscFByb3BlcnR5IiwiYklzQWJzb2x1dGUiLCJpbmRleE9mIiwiZ2V0T2JqZWN0Iiwic0dlbmVyYXRlZElkIiwiZ2VuZXJhdGVJRCIsImZsZXhJZCIsImdlbmVyYXRlIiwiZ2V0SWQiLCJnZXRSZWxhdGl2ZVByb3BlcnR5UGF0aCIsImNvbnRleHQiLCJnZXRQYXRoIiwiYURlcGVuZGVudHMiLCJzb21lIiwib0RlcGVuZGVudCIsImlzVmFsdWVIZWxwUmVxdWlyZWQiLCJiSW5GaWx0ZXJGaWVsZCIsImJSZWFkT25seSIsImFsbCIsImFSZXN1bHRzIiwiY2F0Y2giLCJvRXJyb3IiLCJ3YXJuaW5nIiwiaXNUeXBlRmlsdGVyYWJsZSIsInNUeXBlIiwiZ2V0TW9kZWxUeXBlIiwiaXNNdWx0aVZhbHVlIiwib1Byb3BlcnR5IiwiYklzTXVsdGlWYWx1ZSIsImZpbHRlckV4cHJlc3Npb24iLCJ0eXBlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEZWxlZ2F0ZVV0aWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgY29uZmlnVHlwZSwgZXhwb3J0U2V0dGluZ3MsIFZpc3VhbFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGdldFJlbGF0aXZlUHJvcGVydHlQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlSUQgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVIZWxwVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcblxuY29uc3QgTlNfTUFDUk9EQVRBID0gXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCI7XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5SW5mbyA9IHtcblx0YWRkaXRpb25hbExhYmVscz86IHN0cmluZ1tdO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uUHJvcGVydHk/OiBzdHJpbmc7XG5cdGV4cG9ydFNldHRpbmdzPzogZXhwb3J0U2V0dGluZ3MgfCBudWxsO1xuXHRmaWx0ZXJhYmxlPzogYm9vbGVhbjtcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGdyb3VwYWJsZT86IGJvb2xlYW47XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGtleT86IGJvb2xlYW47XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRtYXhDb25kaXRpb25zPzogbnVtYmVyO1xuXHRtZXRhZGF0YVBhdGg6IHN0cmluZztcblx0bW9kZT86IERpc3BsYXlNb2RlO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0cmVsYXRpdmVQYXRoPzogc3RyaW5nO1xuXHRzb3J0YWJsZT86IGJvb2xlYW47XG5cdHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG5cdHRleHQ/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHR5cGVDb25maWc6IGNvbmZpZ1R5cGU7XG5cdHVuaXQ/OiBzdHJpbmc7XG5cdHZhbHVlUHJvcGVydHk/OiBzdHJpbmc7XG5cdHZpc2libGU6IGJvb2xlYW47XG5cdHZpc3VhbFNldHRpbmdzPzogVmlzdWFsU2V0dGluZ3M7XG5cdGV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlPzogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY29uc3QgbURlZmF1bHRUeXBlRm9yRWRtVHlwZSA9IHtcblx0XCJFZG0uQm9vbGVhblwiOiB7XG5cdFx0bW9kZWxUeXBlOiBcIkJvb2xcIlxuXHR9LFxuXHRcIkVkbS5CeXRlXCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiSW50XCJcblx0fSxcblx0XCJFZG0uRGF0ZVwiOiB7XG5cdFx0bW9kZWxUeXBlOiBcIkRhdGVcIlxuXHR9LFxuXHRcIkVkbS5EYXRlVGltZVwiOiB7XG5cdFx0bW9kZWxUeXBlOiBcIkRhdGVcIlxuXHR9LFxuXHRcIkVkbS5EYXRlVGltZU9mZnNldFwiOiB7XG5cdFx0bW9kZWxUeXBlOiBcIkRhdGVUaW1lT2Zmc2V0XCJcblx0fSxcblx0XCJFZG0uRGVjaW1hbFwiOiB7XG5cdFx0bW9kZWxUeXBlOiBcIkRlY2ltYWxcIlxuXHR9LFxuXHRcIkVkbS5Eb3VibGVcIjoge1xuXHRcdG1vZGVsVHlwZTogXCJGbG9hdFwiXG5cdH0sXG5cdFwiRWRtLkZsb2F0XCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiRmxvYXRcIlxuXHR9LFxuXHRcIkVkbS5HdWlkXCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiR3VpZFwiXG5cdH0sXG5cdFwiRWRtLkludDE2XCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiSW50XCJcblx0fSxcblx0XCJFZG0uSW50MzJcIjoge1xuXHRcdG1vZGVsVHlwZTogXCJJbnRcIlxuXHR9LFxuXHRcIkVkbS5JbnQ2NFwiOiB7XG5cdFx0bW9kZWxUeXBlOiBcIkludFwiXG5cdH0sXG5cdFwiRWRtLlNCeXRlXCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiSW50XCJcblx0fSxcblx0XCJFZG0uU2luZ2xlXCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiRmxvYXRcIlxuXHR9LFxuXHRcIkVkbS5TdHJpbmdcIjoge1xuXHRcdG1vZGVsVHlwZTogXCJTdHJpbmdcIlxuXHR9LFxuXHRcIkVkbS5UaW1lXCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiVGltZU9mRGF5XCJcblx0fSxcblx0XCJFZG0uVGltZU9mRGF5XCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiVGltZU9mRGF5XCJcblx0fSxcblx0XCJFZG0uU3RyZWFtXCI6IHtcblx0XHQvL25vIGNvcnJlc3BvbmRpbmcgbW9kZWxUeXBlIC0gaWdub3JlIGZvciBmaWx0ZXJpbmdcblx0XHRtb2RlbFR5cGU6IHVuZGVmaW5lZFxuXHR9XG59O1xuZnVuY3Rpb24gX3JldHJpZXZlTW9kZWwodGhpczogeyBtb2RlbE5hbWU6IHN0cmluZzsgY29udHJvbDogYW55OyByZXNvbHZlOiBGdW5jdGlvbiB9KSB7XG5cdHRoaXMuY29udHJvbC5kZXRhY2hNb2RlbENvbnRleHRDaGFuZ2UoX3JldHJpZXZlTW9kZWwsIHRoaXMpO1xuXHRjb25zdCBzTW9kZWxOYW1lID0gdGhpcy5tb2RlbE5hbWUsXG5cdFx0b01vZGVsID0gdGhpcy5jb250cm9sLmdldE1vZGVsKHNNb2RlbE5hbWUpO1xuXG5cdGlmIChvTW9kZWwpIHtcblx0XHR0aGlzLnJlc29sdmUob01vZGVsKTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmNvbnRyb2wuYXR0YWNoTW9kZWxDb250ZXh0Q2hhbmdlKF9yZXRyaWV2ZU1vZGVsLCB0aGlzKTtcblx0fVxufVxuYXN5bmMgZnVuY3Rpb24gZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcihvQ29udHJvbDogYW55LCBzUHJvcGVydHk6IGFueSwgb01vZGlmaWVyOiBhbnkpIHtcblx0Y29uc3QgYUN1c3RvbURhdGE6IGFueVtdID0gW107XG5cblx0Y29uc3QgYVJldHJpZXZlZEN1c3RvbURhdGEgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKFxuXHRcdG9Nb2RpZmllci5nZXRBZ2dyZWdhdGlvbi5iaW5kKG9Nb2RpZmllciwgb0NvbnRyb2wsIFwiY3VzdG9tRGF0YVwiKSBhcyAoKSA9PiBhbnlbXVxuXHQpO1xuXG5cdGNvbnN0IG9Qcm9taXNlID0gYVJldHJpZXZlZEN1c3RvbURhdGEucmVkdWNlKChvUHJldmlvdXNQcm9taXNlOiBQcm9taXNlPHZvaWQ+LCBvQ3VzdG9tRGF0YSkgPT4ge1xuXHRcdHJldHVybiBvUHJldmlvdXNQcm9taXNlLnRoZW4ob01vZGlmaWVyLmdldFByb3BlcnR5LmJpbmQob01vZGlmaWVyLCBvQ3VzdG9tRGF0YSwgXCJrZXlcIikpLnRoZW4oZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0aWYgKHNLZXkgPT09IHNQcm9wZXJ0eSkge1xuXHRcdFx0XHRhQ3VzdG9tRGF0YS5wdXNoKG9DdXN0b21EYXRhKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHRhd2FpdCBvUHJvbWlzZTtcblxuXHRpZiAoYUN1c3RvbURhdGEubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG9Nb2RpZmllci5nZXRQcm9wZXJ0eShhQ3VzdG9tRGF0YVswXSwgXCJ2YWx1ZVwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmNvbnN0IERlbGVnYXRlVXRpbCA9IHtcblx0Z2V0TG9jYWxpemVkVGV4dChzVGV4dE9yVG9rZW46IHN0cmluZywgb0NvbnRyb2w6IENvbnRyb2wgfCBQYWdlQ29udHJvbGxlcikge1xuXHRcdGNvbnN0IGFNYXRjaCA9IC97KFtBLVphLXowLTlfLnxAXSspPihbQS1aYS16MC05Xy58XSspfS8uZXhlYyhzVGV4dE9yVG9rZW4pO1xuXHRcdGlmIChhTWF0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IChvQ29udHJvbC5nZXRNb2RlbChhTWF0Y2hbMV0pIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChhTWF0Y2hbMl0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRMb2cuaW5mbyhgVW5hYmxlIHRvIHJldHJpZXZlIGxvY2FsaXplZCB0ZXh0ICR7c1RleHRPclRva2VufWApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc1RleHRPclRva2VuO1xuXHR9LFxuXHRnZXRDdXN0b21EYXRhKG9Db250cm9sOiBhbnksIHNQcm9wZXJ0eTogYW55LCBvTW9kaWZpZXI/OiBhbnkpIHtcblx0XHQvLyBJZiBNb2RpZmllciBpcyBnaXZlbiwgdGhlIG1ldGhvZCBtdXN0IGV4ZWN1dGUgYXN5bmNocm9ub3VzbHkgYW5kIHJldHVybiBhIFByb21pc2Vcblx0XHRpZiAob01vZGlmaWVyKSB7XG5cdFx0XHRyZXR1cm4gZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcihvQ29udHJvbCwgc1Byb3BlcnR5LCBvTW9kaWZpZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBEZWxlZ2F0ZSBpbnZva2VkIGZyb20gYSBub24tZmxleCBjaGFuZ2UgLSBGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkUDEzbkl0ZW0gZm9yIE9QIHRhYmxlIGZpbHRlcmluZywgRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzIGV0Yy5cblx0XHRcdGlmIChvQ29udHJvbCAmJiBzUHJvcGVydHkpIHtcblx0XHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2Ygd2luZG93LkVsZW1lbnQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wuZ2V0QXR0cmlidXRlTlMoTlNfTUFDUk9EQVRBLCBzUHJvcGVydHkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvQ29udHJvbC5kYXRhIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wuZGF0YShzUHJvcGVydHkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblx0c2V0Q3VzdG9tRGF0YShvQ29udHJvbDogYW55LCBzUHJvcGVydHk6IGFueSwgdlZhbHVlOiBhbnkpIHtcblx0XHRpZiAob0NvbnRyb2wgJiYgc1Byb3BlcnR5KSB7XG5cdFx0XHRpZiAob0NvbnRyb2wgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wuc2V0QXR0cmlidXRlTlMoTlNfTUFDUk9EQVRBLCBgY3VzdG9tRGF0YToke3NQcm9wZXJ0eX1gLCB2VmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9Db250cm9sLmRhdGEgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wuZGF0YShzUHJvcGVydHksIHZWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRmZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkoc0VudGl0eVNldDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke3NFbnRpdHlTZXR9L2ApO1xuXHR9LFxuXHRmZXRjaEFubm90YXRpb25zRm9yRW50aXR5KHNFbnRpdHlTZXQ6IGFueSwgb01ldGFNb2RlbDogYW55KSB7XG5cdFx0cmV0dXJuIG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtzRW50aXR5U2V0fUBgKTtcblx0fSxcblx0ZmV0Y2hNb2RlbChvQ29udHJvbDogYW55KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRjb25zdCBzTW9kZWxOYW1lID0gb0NvbnRyb2wuZ2V0RGVsZWdhdGUoKS5wYXlsb2FkICYmIG9Db250cm9sLmdldERlbGVnYXRlKCkucGF5bG9hZC5tb2RlbE5hbWUsXG5cdFx0XHRcdG9Db250ZXh0ID0geyBtb2RlbE5hbWU6IHNNb2RlbE5hbWUsIGNvbnRyb2w6IG9Db250cm9sLCByZXNvbHZlOiByZXNvbHZlIH07XG5cdFx0XHRfcmV0cmlldmVNb2RlbC5jYWxsKG9Db250ZXh0KTtcblx0XHR9KTtcblx0fSxcblx0bG9hZE1hY3JvTGlicmFyeSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9mZS9tYWNyb3MvbWFjcm9MaWJyYXJ5XCJdLCBmdW5jdGlvbiAoLyptYWNyb0xpYnJhcnkqLykge1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSxcblx0dGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZTogYW55LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3M6IGFueSwgb09wdGlvbnM6IGFueSwgb01vZGlmaWVyPzogYW55KSB7XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgb09wdGlvbnMsIG9Nb2RpZmllcik7XG5cdH0sXG5cdGRvZXNWYWx1ZUhlbHBFeGlzdChtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IG1QYXJhbWV0ZXJzLnNQcm9wZXJ0eU5hbWUgfHwgXCJcIjtcblx0XHRjb25zdCBzVmFsdWVIZWxwVHlwZSA9IG1QYXJhbWV0ZXJzLnNWYWx1ZUhlbHBUeXBlIHx8IFwiXCI7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG1QYXJhbWV0ZXJzLm9NZXRhTW9kZWw7XG5cdFx0Y29uc3Qgb01vZGlmaWVyID0gbVBhcmFtZXRlcnMub01vZGlmaWVyO1xuXHRcdGNvbnN0IHNPcmlnaW5hbFByb3BlcnR5ID0gYCR7bVBhcmFtZXRlcnMuc0JpbmRpbmdQYXRofS8ke3NQcm9wZXJ0eU5hbWV9YDtcblx0XHRjb25zdCBvUHJvcGVydHlDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzT3JpZ2luYWxQcm9wZXJ0eSk7XG5cdFx0bGV0IHNWYWx1ZUhlbHBQcm9wZXJ0eSA9IEZpZWxkSGVscGVyLnZhbHVlSGVscFByb3BlcnR5KG9Qcm9wZXJ0eUNvbnRleHQpO1xuXHRcdGNvbnN0IGJJc0Fic29sdXRlID0gbVBhcmFtZXRlcnMuc0JpbmRpbmdQYXRoICYmIG1QYXJhbWV0ZXJzLnNCaW5kaW5nUGF0aC5pbmRleE9mKFwiL1wiKSA9PT0gMDtcblxuXHRcdC8vIHVuaXQvY3VycmVuY3lcblx0XHRpZiAoc1ZhbHVlSGVscFByb3BlcnR5LmluZGV4T2YoXCIkUGF0aFwiKSA+IC0xKSB7XG5cdFx0XHRzVmFsdWVIZWxwUHJvcGVydHkgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzVmFsdWVIZWxwUHJvcGVydHkpO1xuXHRcdH1cblx0XHRpZiAoYklzQWJzb2x1dGUgJiYgc1ZhbHVlSGVscFByb3BlcnR5LmluZGV4T2YoXCIvXCIpICE9PSAwKSB7XG5cdFx0XHRzVmFsdWVIZWxwUHJvcGVydHkgPSBgJHttUGFyYW1ldGVycy5zQmluZGluZ1BhdGh9LyR7c1ZhbHVlSGVscFByb3BlcnR5fWA7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc0dlbmVyYXRlZElkID0gZ2VuZXJhdGVJRChcblx0XHRcdG1QYXJhbWV0ZXJzLmZsZXhJZCxcblx0XHRcdGdlbmVyYXRlKFtvTW9kaWZpZXIgPyBvTW9kaWZpZXIuZ2V0SWQobVBhcmFtZXRlcnMub0NvbnRyb2wpIDogbVBhcmFtZXRlcnMub0NvbnRyb2wuZ2V0SWQoKSwgc1ZhbHVlSGVscFR5cGVdKSxcblx0XHRcdGdldFJlbGF0aXZlUHJvcGVydHlQYXRoKG9Qcm9wZXJ0eUNvbnRleHQuZ2V0UHJvcGVydHkoc09yaWdpbmFsUHJvcGVydHkpLCB7XG5cdFx0XHRcdGNvbnRleHQ6IHtcblx0XHRcdFx0XHRnZXRNb2RlbDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG1QYXJhbWV0ZXJzLm9NZXRhTW9kZWw7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXRQYXRoOiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc09yaWdpbmFsUHJvcGVydHk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGFzIGFueVxuXHRcdFx0fSksXG5cdFx0XHRnZXRSZWxhdGl2ZVByb3BlcnR5UGF0aChvUHJvcGVydHlDb250ZXh0LmdldFByb3BlcnR5KHNWYWx1ZUhlbHBQcm9wZXJ0eSksIHtcblx0XHRcdFx0Y29udGV4dDoge1xuXHRcdFx0XHRcdGdldE1vZGVsOiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbVBhcmFtZXRlcnMub01ldGFNb2RlbDtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldFBhdGg6ICgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBzVmFsdWVIZWxwUHJvcGVydHk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGFzIGFueVxuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChvTW9kaWZpZXIpIHtcblx0XHRcdFx0XHRyZXR1cm4gb01vZGlmaWVyLmdldEFnZ3JlZ2F0aW9uKG1QYXJhbWV0ZXJzLm9Db250cm9sLCBcImRlcGVuZGVudHNcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1QYXJhbWV0ZXJzLm9Db250cm9sLmdldEFnZ3JlZ2F0aW9uKFwiZGVwZW5kZW50c1wiKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYURlcGVuZGVudHM6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHRcdGFEZXBlbmRlbnRzICYmXG5cdFx0XHRcdFx0XHRhRGVwZW5kZW50cy5zb21lKGZ1bmN0aW9uIChvRGVwZW5kZW50OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9Nb2RpZmllciA/IG9Nb2RpZmllci5nZXRJZChvRGVwZW5kZW50KSA9PT0gc0dlbmVyYXRlZElkIDogb0RlcGVuZGVudC5nZXRJZCgpID09PSBzR2VuZXJhdGVkSWQ7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdH0sXG5cdGlzVmFsdWVIZWxwUmVxdWlyZWQobVBhcmFtZXRlcnM6IGFueSwgYkluRmlsdGVyRmllbGQ/OiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IG1QYXJhbWV0ZXJzLnNQcm9wZXJ0eU5hbWUgfHwgXCJcIixcblx0XHRcdG9NZXRhTW9kZWwgPSBtUGFyYW1ldGVycy5vTWV0YU1vZGVsLFxuXHRcdFx0c1Byb3BlcnR5ID0gYCR7bVBhcmFtZXRlcnMuc0JpbmRpbmdQYXRofS8ke3NQcm9wZXJ0eU5hbWV9YCxcblx0XHRcdG9Qcm9wZXJ0eUNvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQcm9wZXJ0eSksXG5cdFx0XHRzVmFsdWVIZWxwUHJvcGVydHkgPSBGaWVsZEhlbHBlci52YWx1ZUhlbHBQcm9wZXJ0eShvUHJvcGVydHlDb250ZXh0LCBiSW5GaWx0ZXJGaWVsZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRDdXN0b21EYXRhKG1QYXJhbWV0ZXJzLm9Db250cm9sLCBcImRpc3BsYXlNb2RlUHJvcGVydHlCaW5kaW5nXCIsIG1QYXJhbWV0ZXJzLm9Nb2RpZmllcilcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChiUmVhZE9ubHk6IGFueSkge1xuXHRcdFx0XHQvLyBDaGVjayB3aGV0aGVyIHRoZSBjb250cm9sIGlzIHJlYWQtb25seS4gSWYgeWVzLCBubyBuZWVkIG9mIGEgdmFsdWUgaGVscC5cblx0XHRcdFx0YlJlYWRPbmx5ID0gdHlwZW9mIGJSZWFkT25seSA9PT0gXCJib29sZWFuXCIgPyBiUmVhZE9ubHkgOiBiUmVhZE9ubHkgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRpZiAoYlJlYWRPbmx5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIEVsc2UsIGNoZWNrIHdoZXRoZXIgVmFsdWUgSGVscCByZWxldmFudCBhbm5vdGF0aW9uIGV4aXN0cyBmb3IgdGhlIHByb3BlcnR5LlxuXHRcdFx0XHQvLyBUT0RPIHVzZSBQcm9wZXJ0eUZvcm1hdHRlci5oYXNWYWx1ZUhlbHAgKCkgPT4gaWYgZG9pbmcgc28sIFFVbml0IHRlc3RzIGZhaWwgZHVlIHRvIG1vY2tlZCBtb2RlbCBpbXBsZW1lbnRhdGlvblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHRcdG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtzVmFsdWVIZWxwUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNgKSxcblx0XHRcdFx0XHRvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3QoYCR7c1ZhbHVlSGVscFByb3BlcnR5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVmZXJlbmNlc2ApLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtzVmFsdWVIZWxwUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nYCksXG5cdFx0XHRcdFx0b01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke3NWYWx1ZUhlbHBQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdGApXG5cdFx0XHRcdF0pO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChhUmVzdWx0czogYW55W10pIHtcblx0XHRcdFx0cmV0dXJuICEhYVJlc3VsdHNbMF0gfHwgISFhUmVzdWx0c1sxXSB8fCAhIWFSZXN1bHRzWzJdIHx8ICEhYVJlc3VsdHNbM107XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgY3VzdG9tIGRhdGEgLyB2YWx1ZSBsaXN0IGFubm90YXRpb24gdmFsdWVzXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fSxcblx0aXNUeXBlRmlsdGVyYWJsZShzVHlwZToga2V5b2YgdHlwZW9mIG1EZWZhdWx0VHlwZUZvckVkbVR5cGUpIHtcblx0XHRyZXR1cm4gc1R5cGUgJiYgc1R5cGUgaW4gbURlZmF1bHRUeXBlRm9yRWRtVHlwZSAmJiAhIW1EZWZhdWx0VHlwZUZvckVkbVR5cGVbc1R5cGVdLm1vZGVsVHlwZTtcblx0fSxcblx0Z2V0TW9kZWxUeXBlKHNUeXBlOiBrZXlvZiB0eXBlb2YgbURlZmF1bHRUeXBlRm9yRWRtVHlwZSkge1xuXHRcdHJldHVybiBzVHlwZSAmJiBzVHlwZSBpbiBtRGVmYXVsdFR5cGVGb3JFZG1UeXBlICYmIG1EZWZhdWx0VHlwZUZvckVkbVR5cGVbc1R5cGVdLm1vZGVsVHlwZTtcblx0fSxcblx0aXNNdWx0aVZhbHVlKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0bGV0IGJJc011bHRpVmFsdWUgPSB0cnVlO1xuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRzd2l0Y2ggKG9Qcm9wZXJ0eS5maWx0ZXJFeHByZXNzaW9uKSB7XG5cdFx0XHRjYXNlIFwiU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRpZiAob1Byb3BlcnR5LnR5cGUgJiYgb1Byb3BlcnR5LnR5cGUuaW5kZXhPZihcIkJvb2xlYW5cIikgPiAwKSB7XG5cdFx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBiSXNNdWx0aVZhbHVlO1xuXHR9XG59O1xuZXhwb3J0IGRlZmF1bHQgRGVsZWdhdGVVdGlsO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7OztNQW1IZUEseUJBQXlCLGFBQUNDLFFBQWEsRUFBRUMsU0FBYyxFQUFFQyxTQUFjO0lBQUEsSUFBRTtNQUN2RixJQUFNQyxXQUFrQixHQUFHLEVBQUU7TUFBQyx1QkFFS0MsT0FBTyxDQUFDQyxPQUFPLEVBQUUsQ0FBQ0MsSUFBSSxDQUN4REosU0FBUyxDQUFDSyxjQUFjLENBQUNDLElBQUksQ0FBQ04sU0FBUyxFQUFFRixRQUFRLEVBQUUsWUFBWSxDQUFDLENBQ2hFLGlCQUZLUyxvQkFBb0I7UUFJMUIsSUFBTUMsUUFBUSxHQUFHRCxvQkFBb0IsQ0FBQ0UsTUFBTSxDQUFDLFVBQUNDLGdCQUErQixFQUFFQyxXQUFXLEVBQUs7VUFDOUYsT0FBT0QsZ0JB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
|
|
266
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyIiwib0NvbnRyb2wiLCJzUHJvcGVydHkiLCJvTW9kaWZpZXIiLCJhQ3VzdG9tRGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsImdldEFnZ3JlZ2F0aW9uIiwiYmluZCIsImFSZXRyaWV2ZWRDdXN0b21EYXRhIiwib1Byb21pc2UiLCJyZWR1Y2UiLCJvUHJldmlvdXNQcm9taXNlIiwib0N1c3RvbURhdGEiLCJnZXRQcm9wZXJ0eSIsInNLZXkiLCJwdXNoIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiTlNfTUFDUk9EQVRBIiwibURlZmF1bHRUeXBlRm9yRWRtVHlwZSIsIm1vZGVsVHlwZSIsIl9yZXRyaWV2ZU1vZGVsIiwiY29udHJvbCIsImRldGFjaE1vZGVsQ29udGV4dENoYW5nZSIsInNNb2RlbE5hbWUiLCJtb2RlbE5hbWUiLCJvTW9kZWwiLCJnZXRNb2RlbCIsImF0dGFjaE1vZGVsQ29udGV4dENoYW5nZSIsIkRlbGVnYXRlVXRpbCIsImdldExvY2FsaXplZFRleHQiLCJzVGV4dE9yVG9rZW4iLCJhTWF0Y2giLCJleGVjIiwib1Jlc291cmNlQnVuZGxlIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJnZXRUZXh0IiwiZSIsIkxvZyIsImluZm8iLCJnZXRDdXN0b21EYXRhIiwid2luZG93IiwiRWxlbWVudCIsImdldEF0dHJpYnV0ZU5TIiwiZGF0YSIsIkZ1bmN0aW9uIiwic2V0Q3VzdG9tRGF0YSIsInZWYWx1ZSIsInNldEF0dHJpYnV0ZU5TIiwiZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5Iiwic0VudGl0eVNldCIsIm9NZXRhTW9kZWwiLCJyZXF1ZXN0T2JqZWN0IiwiZmV0Y2hBbm5vdGF0aW9uc0ZvckVudGl0eSIsImZldGNoTW9kZWwiLCJnZXREZWxlZ2F0ZSIsInBheWxvYWQiLCJvQ29udGV4dCIsImNhbGwiLCJsb2FkTWFjcm9MaWJyYXJ5Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJzRnJhZ21lbnROYW1lIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwib09wdGlvbnMiLCJDb21tb25VdGlscyIsImRvZXNWYWx1ZUhlbHBFeGlzdCIsIm1QYXJhbWV0ZXJzIiwic1Byb3BlcnR5TmFtZSIsInNWYWx1ZUhlbHBUeXBlIiwic09yaWdpbmFsUHJvcGVydHkiLCJzQmluZGluZ1BhdGgiLCJvUHJvcGVydHlDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJzVmFsdWVIZWxwUHJvcGVydHkiLCJGaWVsZEhlbHBlciIsInZhbHVlSGVscFByb3BlcnR5IiwiYklzQWJzb2x1dGUiLCJpbmRleE9mIiwiZ2V0T2JqZWN0Iiwic0dlbmVyYXRlZElkIiwiZ2VuZXJhdGVJRCIsImZsZXhJZCIsImdlbmVyYXRlIiwiZ2V0SWQiLCJnZXRSZWxhdGl2ZVByb3BlcnR5UGF0aCIsImNvbnRleHQiLCJnZXRQYXRoIiwiYURlcGVuZGVudHMiLCJzb21lIiwib0RlcGVuZGVudCIsImlzVmFsdWVIZWxwUmVxdWlyZWQiLCJiSW5GaWx0ZXJGaWVsZCIsImJSZWFkT25seSIsImFsbCIsImFSZXN1bHRzIiwiY2F0Y2giLCJvRXJyb3IiLCJ3YXJuaW5nIiwiaXNUeXBlRmlsdGVyYWJsZSIsInNUeXBlIiwiZ2V0TW9kZWxUeXBlIiwiaXNNdWx0aVZhbHVlIiwib1Byb3BlcnR5IiwiYklzTXVsdGlWYWx1ZSIsImZpbHRlckV4cHJlc3Npb24iLCJ0eXBlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEZWxlZ2F0ZVV0aWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgQ29sdW1uRXhwb3J0U2V0dGluZ3MsIGNvbmZpZ1R5cGUsIFZpc3VhbFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IERpc3BsYXlNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IGdldFJlbGF0aXZlUHJvcGVydHlQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlSUQgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVIZWxwVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcblxuY29uc3QgTlNfTUFDUk9EQVRBID0gXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCI7XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5SW5mbyA9IHtcblx0YWRkaXRpb25hbExhYmVscz86IHN0cmluZ1tdO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0ZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uUHJvcGVydHk/OiBzdHJpbmc7XG5cdGV4cG9ydFNldHRpbmdzPzogQ29sdW1uRXhwb3J0U2V0dGluZ3MgfCBudWxsO1xuXHRmaWx0ZXJhYmxlPzogYm9vbGVhbjtcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGdyb3VwYWJsZT86IGJvb2xlYW47XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGtleT86IGJvb2xlYW47XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRtYXhDb25kaXRpb25zPzogbnVtYmVyO1xuXHRtZXRhZGF0YVBhdGg6IHN0cmluZztcblx0bW9kZT86IERpc3BsYXlNb2RlO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0cmVsYXRpdmVQYXRoPzogc3RyaW5nO1xuXHRzb3J0YWJsZT86IGJvb2xlYW47XG5cdHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG5cdHRleHQ/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHR5cGVDb25maWc6IGNvbmZpZ1R5cGU7XG5cdHVuaXQ/OiBzdHJpbmc7XG5cdHZhbHVlUHJvcGVydHk/OiBzdHJpbmc7XG5cdHZpc2libGU6IGJvb2xlYW47XG5cdHZpc3VhbFNldHRpbmdzPzogVmlzdWFsU2V0dGluZ3M7XG5cdGV4cG9ydERhdGFQb2ludFRhcmdldFZhbHVlPzogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY29uc3QgbURlZmF1bHRUeXBlRm9yRWRtVHlwZSA9IHtcblx0XCJFZG0uQm9vbGVhblwiOiB7XG5cdFx0bW9kZWxUeXBlOiBcIkJvb2xcIlxuXHR9LFxuXHRcIkVkbS5CeXRlXCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiSW50XCJcblx0fSxcblx0XCJFZG0uRGF0ZVwiOiB7XG5cdFx0bW9kZWxUeXBlOiBcIkRhdGVcIlxuXHR9LFxuXHRcIkVkbS5EYXRlVGltZVwiOiB7XG5cdFx0bW9kZWxUeXBlOiBcIkRhdGVcIlxuXHR9LFxuXHRcIkVkbS5EYXRlVGltZU9mZnNldFwiOiB7XG5cdFx0bW9kZWxUeXBlOiBcIkRhdGVUaW1lT2Zmc2V0XCJcblx0fSxcblx0XCJFZG0uRGVjaW1hbFwiOiB7XG5cdFx0bW9kZWxUeXBlOiBcIkRlY2ltYWxcIlxuXHR9LFxuXHRcIkVkbS5Eb3VibGVcIjoge1xuXHRcdG1vZGVsVHlwZTogXCJGbG9hdFwiXG5cdH0sXG5cdFwiRWRtLkZsb2F0XCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiRmxvYXRcIlxuXHR9LFxuXHRcIkVkbS5HdWlkXCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiR3VpZFwiXG5cdH0sXG5cdFwiRWRtLkludDE2XCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiSW50XCJcblx0fSxcblx0XCJFZG0uSW50MzJcIjoge1xuXHRcdG1vZGVsVHlwZTogXCJJbnRcIlxuXHR9LFxuXHRcIkVkbS5JbnQ2NFwiOiB7XG5cdFx0bW9kZWxUeXBlOiBcIkludFwiXG5cdH0sXG5cdFwiRWRtLlNCeXRlXCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiSW50XCJcblx0fSxcblx0XCJFZG0uU2luZ2xlXCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiRmxvYXRcIlxuXHR9LFxuXHRcIkVkbS5TdHJpbmdcIjoge1xuXHRcdG1vZGVsVHlwZTogXCJTdHJpbmdcIlxuXHR9LFxuXHRcIkVkbS5UaW1lXCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiVGltZU9mRGF5XCJcblx0fSxcblx0XCJFZG0uVGltZU9mRGF5XCI6IHtcblx0XHRtb2RlbFR5cGU6IFwiVGltZU9mRGF5XCJcblx0fSxcblx0XCJFZG0uU3RyZWFtXCI6IHtcblx0XHQvL25vIGNvcnJlc3BvbmRpbmcgbW9kZWxUeXBlIC0gaWdub3JlIGZvciBmaWx0ZXJpbmdcblx0XHRtb2RlbFR5cGU6IHVuZGVmaW5lZFxuXHR9XG59O1xuZnVuY3Rpb24gX3JldHJpZXZlTW9kZWwodGhpczogeyBtb2RlbE5hbWU6IHN0cmluZzsgY29udHJvbDogYW55OyByZXNvbHZlOiBGdW5jdGlvbiB9KSB7XG5cdHRoaXMuY29udHJvbC5kZXRhY2hNb2RlbENvbnRleHRDaGFuZ2UoX3JldHJpZXZlTW9kZWwsIHRoaXMpO1xuXHRjb25zdCBzTW9kZWxOYW1lID0gdGhpcy5tb2RlbE5hbWUsXG5cdFx0b01vZGVsID0gdGhpcy5jb250cm9sLmdldE1vZGVsKHNNb2RlbE5hbWUpO1xuXG5cdGlmIChvTW9kZWwpIHtcblx0XHR0aGlzLnJlc29sdmUob01vZGVsKTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmNvbnRyb2wuYXR0YWNoTW9kZWxDb250ZXh0Q2hhbmdlKF9yZXRyaWV2ZU1vZGVsLCB0aGlzKTtcblx0fVxufVxuYXN5bmMgZnVuY3Rpb24gZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcihvQ29udHJvbDogYW55LCBzUHJvcGVydHk6IGFueSwgb01vZGlmaWVyOiBhbnkpIHtcblx0Y29uc3QgYUN1c3RvbURhdGE6IGFueVtdID0gW107XG5cblx0Y29uc3QgYVJldHJpZXZlZEN1c3RvbURhdGEgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoKS50aGVuKFxuXHRcdG9Nb2RpZmllci5nZXRBZ2dyZWdhdGlvbi5iaW5kKG9Nb2RpZmllciwgb0NvbnRyb2wsIFwiY3VzdG9tRGF0YVwiKSBhcyAoKSA9PiBhbnlbXVxuXHQpO1xuXG5cdGNvbnN0IG9Qcm9taXNlID0gYVJldHJpZXZlZEN1c3RvbURhdGEucmVkdWNlKChvUHJldmlvdXNQcm9taXNlOiBQcm9taXNlPHZvaWQ+LCBvQ3VzdG9tRGF0YSkgPT4ge1xuXHRcdHJldHVybiBvUHJldmlvdXNQcm9taXNlLnRoZW4ob01vZGlmaWVyLmdldFByb3BlcnR5LmJpbmQob01vZGlmaWVyLCBvQ3VzdG9tRGF0YSwgXCJrZXlcIikpLnRoZW4oZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0aWYgKHNLZXkgPT09IHNQcm9wZXJ0eSkge1xuXHRcdFx0XHRhQ3VzdG9tRGF0YS5wdXNoKG9DdXN0b21EYXRhKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xuXHRhd2FpdCBvUHJvbWlzZTtcblxuXHRpZiAoYUN1c3RvbURhdGEubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG9Nb2RpZmllci5nZXRQcm9wZXJ0eShhQ3VzdG9tRGF0YVswXSwgXCJ2YWx1ZVwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbmNvbnN0IERlbGVnYXRlVXRpbCA9IHtcblx0Z2V0TG9jYWxpemVkVGV4dChzVGV4dE9yVG9rZW46IHN0cmluZywgb0NvbnRyb2w6IENvbnRyb2wgfCBQYWdlQ29udHJvbGxlcikge1xuXHRcdGNvbnN0IGFNYXRjaCA9IC97KFtBLVphLXowLTlfLnxAXSspPihbQS1aYS16MC05Xy58XSspfS8uZXhlYyhzVGV4dE9yVG9rZW4pO1xuXHRcdGlmIChhTWF0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IChvQ29udHJvbC5nZXRNb2RlbChhTWF0Y2hbMV0pIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChhTWF0Y2hbMl0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRMb2cuaW5mbyhgVW5hYmxlIHRvIHJldHJpZXZlIGxvY2FsaXplZCB0ZXh0ICR7c1RleHRPclRva2VufWApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc1RleHRPclRva2VuO1xuXHR9LFxuXHRnZXRDdXN0b21EYXRhKG9Db250cm9sOiBhbnksIHNQcm9wZXJ0eTogYW55LCBvTW9kaWZpZXI/OiBhbnkpIHtcblx0XHQvLyBJZiBNb2RpZmllciBpcyBnaXZlbiwgdGhlIG1ldGhvZCBtdXN0IGV4ZWN1dGUgYXN5bmNocm9ub3VzbHkgYW5kIHJldHVybiBhIFByb21pc2Vcblx0XHRpZiAob01vZGlmaWVyKSB7XG5cdFx0XHRyZXR1cm4gZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcihvQ29udHJvbCwgc1Byb3BlcnR5LCBvTW9kaWZpZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBEZWxlZ2F0ZSBpbnZva2VkIGZyb20gYSBub24tZmxleCBjaGFuZ2UgLSBGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkUDEzbkl0ZW0gZm9yIE9QIHRhYmxlIGZpbHRlcmluZywgRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzIGV0Yy5cblx0XHRcdGlmIChvQ29udHJvbCAmJiBzUHJvcGVydHkpIHtcblx0XHRcdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2Ygd2luZG93LkVsZW1lbnQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wuZ2V0QXR0cmlidXRlTlMoTlNfTUFDUk9EQVRBLCBzUHJvcGVydHkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvQ29udHJvbC5kYXRhIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wuZGF0YShzUHJvcGVydHkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fSxcblx0c2V0Q3VzdG9tRGF0YShvQ29udHJvbDogYW55LCBzUHJvcGVydHk6IGFueSwgdlZhbHVlOiBhbnkpIHtcblx0XHRpZiAob0NvbnRyb2wgJiYgc1Byb3BlcnR5KSB7XG5cdFx0XHRpZiAob0NvbnRyb2wgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wuc2V0QXR0cmlidXRlTlMoTlNfTUFDUk9EQVRBLCBgY3VzdG9tRGF0YToke3NQcm9wZXJ0eX1gLCB2VmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9Db250cm9sLmRhdGEgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wuZGF0YShzUHJvcGVydHksIHZWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRmZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkoc0VudGl0eVNldDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke3NFbnRpdHlTZXR9L2ApO1xuXHR9LFxuXHRmZXRjaEFubm90YXRpb25zRm9yRW50aXR5KHNFbnRpdHlTZXQ6IGFueSwgb01ldGFNb2RlbDogYW55KSB7XG5cdFx0cmV0dXJuIG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtzRW50aXR5U2V0fUBgKTtcblx0fSxcblx0ZmV0Y2hNb2RlbChvQ29udHJvbDogYW55KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRjb25zdCBzTW9kZWxOYW1lID0gb0NvbnRyb2wuZ2V0RGVsZWdhdGUoKS5wYXlsb2FkICYmIG9Db250cm9sLmdldERlbGVnYXRlKCkucGF5bG9hZC5tb2RlbE5hbWUsXG5cdFx0XHRcdG9Db250ZXh0ID0geyBtb2RlbE5hbWU6IHNNb2RlbE5hbWUsIGNvbnRyb2w6IG9Db250cm9sLCByZXNvbHZlOiByZXNvbHZlIH07XG5cdFx0XHRfcmV0cmlldmVNb2RlbC5jYWxsKG9Db250ZXh0KTtcblx0XHR9KTtcblx0fSxcblx0bG9hZE1hY3JvTGlicmFyeSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHNhcC51aS5yZXF1aXJlKFtcInNhcC9mZS9tYWNyb3MvbWFjcm9MaWJyYXJ5XCJdLCBmdW5jdGlvbiAoLyptYWNyb0xpYnJhcnkqLykge1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSxcblx0dGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZTogYW55LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3M6IGFueSwgb09wdGlvbnM6IGFueSwgb01vZGlmaWVyPzogYW55KSB7XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgb09wdGlvbnMsIG9Nb2RpZmllcik7XG5cdH0sXG5cdGRvZXNWYWx1ZUhlbHBFeGlzdChtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IG1QYXJhbWV0ZXJzLnNQcm9wZXJ0eU5hbWUgfHwgXCJcIjtcblx0XHRjb25zdCBzVmFsdWVIZWxwVHlwZSA9IG1QYXJhbWV0ZXJzLnNWYWx1ZUhlbHBUeXBlIHx8IFwiXCI7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG1QYXJhbWV0ZXJzLm9NZXRhTW9kZWw7XG5cdFx0Y29uc3Qgb01vZGlmaWVyID0gbVBhcmFtZXRlcnMub01vZGlmaWVyO1xuXHRcdGNvbnN0IHNPcmlnaW5hbFByb3BlcnR5ID0gYCR7bVBhcmFtZXRlcnMuc0JpbmRpbmdQYXRofS8ke3NQcm9wZXJ0eU5hbWV9YDtcblx0XHRjb25zdCBvUHJvcGVydHlDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzT3JpZ2luYWxQcm9wZXJ0eSk7XG5cdFx0bGV0IHNWYWx1ZUhlbHBQcm9wZXJ0eSA9IEZpZWxkSGVscGVyLnZhbHVlSGVscFByb3BlcnR5KG9Qcm9wZXJ0eUNvbnRleHQpO1xuXHRcdGNvbnN0IGJJc0Fic29sdXRlID0gbVBhcmFtZXRlcnMuc0JpbmRpbmdQYXRoICYmIG1QYXJhbWV0ZXJzLnNCaW5kaW5nUGF0aC5pbmRleE9mKFwiL1wiKSA9PT0gMDtcblxuXHRcdC8vIHVuaXQvY3VycmVuY3lcblx0XHRpZiAoc1ZhbHVlSGVscFByb3BlcnR5LmluZGV4T2YoXCIkUGF0aFwiKSA+IC0xKSB7XG5cdFx0XHRzVmFsdWVIZWxwUHJvcGVydHkgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzVmFsdWVIZWxwUHJvcGVydHkpO1xuXHRcdH1cblx0XHRpZiAoYklzQWJzb2x1dGUgJiYgc1ZhbHVlSGVscFByb3BlcnR5LmluZGV4T2YoXCIvXCIpICE9PSAwKSB7XG5cdFx0XHRzVmFsdWVIZWxwUHJvcGVydHkgPSBgJHttUGFyYW1ldGVycy5zQmluZGluZ1BhdGh9LyR7c1ZhbHVlSGVscFByb3BlcnR5fWA7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc0dlbmVyYXRlZElkID0gZ2VuZXJhdGVJRChcblx0XHRcdG1QYXJhbWV0ZXJzLmZsZXhJZCxcblx0XHRcdGdlbmVyYXRlKFtvTW9kaWZpZXIgPyBvTW9kaWZpZXIuZ2V0SWQobVBhcmFtZXRlcnMub0NvbnRyb2wpIDogbVBhcmFtZXRlcnMub0NvbnRyb2wuZ2V0SWQoKSwgc1ZhbHVlSGVscFR5cGVdKSxcblx0XHRcdGdldFJlbGF0aXZlUHJvcGVydHlQYXRoKG9Qcm9wZXJ0eUNvbnRleHQuZ2V0UHJvcGVydHkoc09yaWdpbmFsUHJvcGVydHkpLCB7XG5cdFx0XHRcdGNvbnRleHQ6IHtcblx0XHRcdFx0XHRnZXRNb2RlbDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG1QYXJhbWV0ZXJzLm9NZXRhTW9kZWw7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXRQYXRoOiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc09yaWdpbmFsUHJvcGVydHk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGFzIGFueVxuXHRcdFx0fSksXG5cdFx0XHRnZXRSZWxhdGl2ZVByb3BlcnR5UGF0aChvUHJvcGVydHlDb250ZXh0LmdldFByb3BlcnR5KHNWYWx1ZUhlbHBQcm9wZXJ0eSksIHtcblx0XHRcdFx0Y29udGV4dDoge1xuXHRcdFx0XHRcdGdldE1vZGVsOiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbVBhcmFtZXRlcnMub01ldGFNb2RlbDtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldFBhdGg6ICgpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBzVmFsdWVIZWxwUHJvcGVydHk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGFzIGFueVxuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChvTW9kaWZpZXIpIHtcblx0XHRcdFx0XHRyZXR1cm4gb01vZGlmaWVyLmdldEFnZ3JlZ2F0aW9uKG1QYXJhbWV0ZXJzLm9Db250cm9sLCBcImRlcGVuZGVudHNcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1QYXJhbWV0ZXJzLm9Db250cm9sLmdldEFnZ3JlZ2F0aW9uKFwiZGVwZW5kZW50c1wiKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYURlcGVuZGVudHM6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHRcdGFEZXBlbmRlbnRzICYmXG5cdFx0XHRcdFx0XHRhRGVwZW5kZW50cy5zb21lKGZ1bmN0aW9uIChvRGVwZW5kZW50OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9Nb2RpZmllciA/IG9Nb2RpZmllci5nZXRJZChvRGVwZW5kZW50KSA9PT0gc0dlbmVyYXRlZElkIDogb0RlcGVuZGVudC5nZXRJZCgpID09PSBzR2VuZXJhdGVkSWQ7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdH0sXG5cdGlzVmFsdWVIZWxwUmVxdWlyZWQobVBhcmFtZXRlcnM6IGFueSwgYkluRmlsdGVyRmllbGQ/OiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IG1QYXJhbWV0ZXJzLnNQcm9wZXJ0eU5hbWUgfHwgXCJcIixcblx0XHRcdG9NZXRhTW9kZWwgPSBtUGFyYW1ldGVycy5vTWV0YU1vZGVsLFxuXHRcdFx0c1Byb3BlcnR5ID0gYCR7bVBhcmFtZXRlcnMuc0JpbmRpbmdQYXRofS8ke3NQcm9wZXJ0eU5hbWV9YCxcblx0XHRcdG9Qcm9wZXJ0eUNvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQcm9wZXJ0eSksXG5cdFx0XHRzVmFsdWVIZWxwUHJvcGVydHkgPSBGaWVsZEhlbHBlci52YWx1ZUhlbHBQcm9wZXJ0eShvUHJvcGVydHlDb250ZXh0LCBiSW5GaWx0ZXJGaWVsZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRDdXN0b21EYXRhKG1QYXJhbWV0ZXJzLm9Db250cm9sLCBcImRpc3BsYXlNb2RlUHJvcGVydHlCaW5kaW5nXCIsIG1QYXJhbWV0ZXJzLm9Nb2RpZmllcilcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChiUmVhZE9ubHk6IGFueSkge1xuXHRcdFx0XHQvLyBDaGVjayB3aGV0aGVyIHRoZSBjb250cm9sIGlzIHJlYWQtb25seS4gSWYgeWVzLCBubyBuZWVkIG9mIGEgdmFsdWUgaGVscC5cblx0XHRcdFx0YlJlYWRPbmx5ID0gdHlwZW9mIGJSZWFkT25seSA9PT0gXCJib29sZWFuXCIgPyBiUmVhZE9ubHkgOiBiUmVhZE9ubHkgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRpZiAoYlJlYWRPbmx5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIEVsc2UsIGNoZWNrIHdoZXRoZXIgVmFsdWUgSGVscCByZWxldmFudCBhbm5vdGF0aW9uIGV4aXN0cyBmb3IgdGhlIHByb3BlcnR5LlxuXHRcdFx0XHQvLyBUT0RPIHVzZSBQcm9wZXJ0eUZvcm1hdHRlci5oYXNWYWx1ZUhlbHAgKCkgPT4gaWYgZG9pbmcgc28sIFFVbml0IHRlc3RzIGZhaWwgZHVlIHRvIG1vY2tlZCBtb2RlbCBpbXBsZW1lbnRhdGlvblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0XHRcdG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtzVmFsdWVIZWxwUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNgKSxcblx0XHRcdFx0XHRvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3QoYCR7c1ZhbHVlSGVscFByb3BlcnR5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVmZXJlbmNlc2ApLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChgJHtzVmFsdWVIZWxwUHJvcGVydHl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nYCksXG5cdFx0XHRcdFx0b01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke3NWYWx1ZUhlbHBQcm9wZXJ0eX1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdGApXG5cdFx0XHRcdF0pO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChhUmVzdWx0czogYW55W10pIHtcblx0XHRcdFx0cmV0dXJuICEhYVJlc3VsdHNbMF0gfHwgISFhUmVzdWx0c1sxXSB8fCAhIWFSZXN1bHRzWzJdIHx8ICEhYVJlc3VsdHNbM107XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgY3VzdG9tIGRhdGEgLyB2YWx1ZSBsaXN0IGFubm90YXRpb24gdmFsdWVzXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fSxcblx0aXNUeXBlRmlsdGVyYWJsZShzVHlwZToga2V5b2YgdHlwZW9mIG1EZWZhdWx0VHlwZUZvckVkbVR5cGUpIHtcblx0XHRyZXR1cm4gc1R5cGUgJiYgc1R5cGUgaW4gbURlZmF1bHRUeXBlRm9yRWRtVHlwZSAmJiAhIW1EZWZhdWx0VHlwZUZvckVkbVR5cGVbc1R5cGVdLm1vZGVsVHlwZTtcblx0fSxcblx0Z2V0TW9kZWxUeXBlKHNUeXBlOiBrZXlvZiB0eXBlb2YgbURlZmF1bHRUeXBlRm9yRWRtVHlwZSkge1xuXHRcdHJldHVybiBzVHlwZSAmJiBzVHlwZSBpbiBtRGVmYXVsdFR5cGVGb3JFZG1UeXBlICYmIG1EZWZhdWx0VHlwZUZvckVkbVR5cGVbc1R5cGVdLm1vZGVsVHlwZTtcblx0fSxcblx0aXNNdWx0aVZhbHVlKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0bGV0IGJJc011bHRpVmFsdWUgPSB0cnVlO1xuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRzd2l0Y2ggKG9Qcm9wZXJ0eS5maWx0ZXJFeHByZXNzaW9uKSB7XG5cdFx0XHRjYXNlIFwiU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRpZiAob1Byb3BlcnR5LnR5cGUgJiYgb1Byb3BlcnR5LnR5cGUuaW5kZXhPZihcIkJvb2xlYW5cIikgPiAwKSB7XG5cdFx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBiSXNNdWx0aVZhbHVlO1xuXHR9XG59O1xuZXhwb3J0IGRlZmF1bHQgRGVsZWdhdGVVdGlsO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7OztNQW1IZUEseUJBQXlCLGFBQUNDLFFBQWEsRUFBRUMsU0FBYyxFQUFFQyxTQUFjO0lBQUEsSUFBRTtNQUN2RixJQUFNQyxXQUFrQixHQUFHLEVBQUU7TUFBQyx1QkFFS0MsT0FBTyxDQUFDQyxPQUFPLEVBQUUsQ0FBQ0MsSUFBSSxDQUN4REosU0FBUyxDQUFDSyxjQUFjLENBQUNDLElBQUksQ0FBQ04sU0FBUyxFQUFFRixRQUFRLEVBQUUsWUFBWSxDQUFDLENBQ2hFLGlCQUZLUyxvQkFBb0I7UUFJMUIsSUFBTUMsUUFBUSxHQUFHRCxvQkFBb0IsQ0FBQ0UsTUFBTSxDQUFDLFVBQUNDLGdCQUErQixFQUFFQyxXQUFXLEVBQUs7VUFD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
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
2
2
|
import Log from "sap/base/Log";
|
|
3
3
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
4
|
-
import {
|
|
5
|
-
import { DisplayMode } from "sap/fe/core/templating/DisplayModeFormatter";
|
|
4
|
+
import { ColumnExportSettings, configType, VisualSettings } from "sap/fe/core/converters/controls/Common/Table";
|
|
6
5
|
import { generate } from "sap/fe/core/helpers/StableIdHelper";
|
|
7
6
|
import type PageController from "sap/fe/core/PageController";
|
|
7
|
+
import { DisplayMode } from "sap/fe/core/templating/DisplayModeFormatter";
|
|
8
8
|
import { getRelativePropertyPath } from "sap/fe/core/templating/PropertyFormatters";
|
|
9
9
|
import FieldHelper from "sap/fe/macros/field/FieldHelper";
|
|
10
10
|
import { generateID } from "sap/fe/macros/internal/valuehelp/ValueHelpTemplating";
|
|
@@ -18,7 +18,7 @@ export type PropertyInfo = {
|
|
|
18
18
|
caseSensitive?: boolean;
|
|
19
19
|
description?: string;
|
|
20
20
|
descriptionProperty?: string;
|
|
21
|
-
exportSettings?:
|
|
21
|
+
exportSettings?: ColumnExportSettings | null;
|
|
22
22
|
filterable?: boolean;
|
|
23
23
|
group?: string;
|
|
24
24
|
groupable?: boolean;
|
|
@@ -71,8 +71,13 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/fe/macros/filter/type/Va
|
|
|
71
71
|
externalValue = [];
|
|
72
72
|
}
|
|
73
73
|
return externalValue.map(function (value) {
|
|
74
|
+
if (value === undefined) {
|
|
75
|
+
value = [];
|
|
76
|
+
} else if (!Array.isArray(value)) {
|
|
77
|
+
value = [value];
|
|
78
|
+
}
|
|
74
79
|
return _this2.operator.format({
|
|
75
|
-
values: value
|
|
80
|
+
values: value
|
|
76
81
|
});
|
|
77
82
|
});
|
|
78
83
|
};
|
|
@@ -81,4 +86,4 @@ sap.ui.define(["sap/fe/core/helpers/ClassSupport", "sap/fe/macros/filter/type/Va
|
|
|
81
86
|
_exports = MultiValue;
|
|
82
87
|
return _exports;
|
|
83
88
|
}, false);
|
|
84
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNdWx0aVZhbHVlIiwiZGVmaW5lVUk1Q2xhc3MiLCJmb3JtYXRDb25kaXRpb25WYWx1ZXMiLCJ2YWx1ZXMiLCJmb3JtYXRWYWx1ZSIsImludGVybmFsVmFsdWUiLCJleHRlcm5hbFZhbHVlVHlwZSIsInJlc3VsdCIsInNwbGl0IiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwidmFsdWUiLCJnZXRFbGVtZW50VHlwZU5hbWUiLCJmaWx0ZXIiLCJ1bmRlZmluZWQiLCJwYXJzZVZhbHVlIiwiZXh0ZXJuYWxWYWx1ZSIsIm9wZXJhdG9yIiwiZm9ybWF0IiwiVmFsdWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk11bHRpVmFsdWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBWYWx1ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvdHlwZS9WYWx1ZVwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5cbi8qKlxuICogSGFuZGxlIGZvcm1hdC9wYXJzZSBvZiBtdWx0aSB2YWx1ZSBmaWx0ZXJzLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLmZpbHRlci50eXBlLk11bHRpVmFsdWVcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE11bHRpVmFsdWUgZXh0ZW5kcyBWYWx1ZSB7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB1bmNoYW5nZWQgdmFsdWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWVzIElucHV0IGNvbmRpdGlvbiB2YWx1ZVxuXHQgKiBAcmV0dXJucyBGaXJzdCB2YWx1ZSBvZiBhcnJheSBvciBpbnB1dFxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRmb3JtYXRDb25kaXRpb25WYWx1ZXModmFsdWVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHN0cmluZ1tdIHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gdmFsdWVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBwYXJzZWQgdG8gdGhlIGV4dGVybmFsIHZhbHVlIHR5cGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBpbnRlcm5hbFZhbHVlIFRoZSBpbnRlcm5hbCBzdHJpbmcgdmFsdWUgdG8gYmUgZm9ybWF0dGVkXG5cdCAqIEBwYXJhbSBleHRlcm5hbFZhbHVlVHlwZSBUaGUgZXh0ZXJuYWwgdmFsdWUgdHlwZSwgZS5nLiBpbnQsIGZsb2F0W10sIHN0cmluZywgZXRjLlxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHZhbHVlXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdGZvcm1hdFZhbHVlKGludGVybmFsVmFsdWU6IGFueSB8IHVuZGVmaW5lZCwgZXh0ZXJuYWxWYWx1ZVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGFueSB7XG5cdFx0bGV0IHJlc3VsdCA9IGludGVybmFsVmFsdWU7XG5cblx0XHRpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cmVzdWx0ID0gcmVzdWx0LnNwbGl0KFwiLFwiKTtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG5cdFx0XHRyZXN1bHQgPSByZXN1bHRcblx0XHRcdFx0Lm1hcCgodmFsdWU6IHN0cmluZykgPT4gc3VwZXIuZm9ybWF0VmFsdWUodmFsdWUsIHRoaXMuZ2V0RWxlbWVudFR5cGVOYW1lKGV4dGVybmFsVmFsdWVUeXBlKSkpXG5cdFx0XHRcdC5maWx0ZXIoKHZhbHVlOiBzdHJpbmcpID0+
|
|
89
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNdWx0aVZhbHVlIiwiZGVmaW5lVUk1Q2xhc3MiLCJmb3JtYXRDb25kaXRpb25WYWx1ZXMiLCJ2YWx1ZXMiLCJmb3JtYXRWYWx1ZSIsImludGVybmFsVmFsdWUiLCJleHRlcm5hbFZhbHVlVHlwZSIsInJlc3VsdCIsInNwbGl0IiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwidmFsdWUiLCJnZXRFbGVtZW50VHlwZU5hbWUiLCJmaWx0ZXIiLCJ1bmRlZmluZWQiLCJwYXJzZVZhbHVlIiwiZXh0ZXJuYWxWYWx1ZSIsIm9wZXJhdG9yIiwiZm9ybWF0IiwiVmFsdWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk11bHRpVmFsdWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBWYWx1ZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvdHlwZS9WYWx1ZVwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5cbi8qKlxuICogSGFuZGxlIGZvcm1hdC9wYXJzZSBvZiBtdWx0aSB2YWx1ZSBmaWx0ZXJzLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLmZpbHRlci50eXBlLk11bHRpVmFsdWVcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE11bHRpVmFsdWUgZXh0ZW5kcyBWYWx1ZSB7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB1bmNoYW5nZWQgdmFsdWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWVzIElucHV0IGNvbmRpdGlvbiB2YWx1ZVxuXHQgKiBAcmV0dXJucyBGaXJzdCB2YWx1ZSBvZiBhcnJheSBvciBpbnB1dFxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRmb3JtYXRDb25kaXRpb25WYWx1ZXModmFsdWVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHN0cmluZ1tdIHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gdmFsdWVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBwYXJzZWQgdG8gdGhlIGV4dGVybmFsIHZhbHVlIHR5cGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBpbnRlcm5hbFZhbHVlIFRoZSBpbnRlcm5hbCBzdHJpbmcgdmFsdWUgdG8gYmUgZm9ybWF0dGVkXG5cdCAqIEBwYXJhbSBleHRlcm5hbFZhbHVlVHlwZSBUaGUgZXh0ZXJuYWwgdmFsdWUgdHlwZSwgZS5nLiBpbnQsIGZsb2F0W10sIHN0cmluZywgZXRjLlxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHZhbHVlXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdGZvcm1hdFZhbHVlKGludGVybmFsVmFsdWU6IGFueSB8IHVuZGVmaW5lZCwgZXh0ZXJuYWxWYWx1ZVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGFueSB7XG5cdFx0bGV0IHJlc3VsdCA9IGludGVybmFsVmFsdWU7XG5cblx0XHRpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cmVzdWx0ID0gcmVzdWx0LnNwbGl0KFwiLFwiKTtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG5cdFx0XHRyZXN1bHQgPSByZXN1bHRcblx0XHRcdFx0Lm1hcCgodmFsdWU6IHN0cmluZykgPT4gc3VwZXIuZm9ybWF0VmFsdWUodmFsdWUsIHRoaXMuZ2V0RWxlbWVudFR5cGVOYW1lKGV4dGVybmFsVmFsdWVUeXBlKSkpXG5cdFx0XHRcdC5maWx0ZXIoKHZhbHVlOiBzdHJpbmcpID0+IHZhbHVlICE9PSB1bmRlZmluZWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQgfHwgW107XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdmFsdWUgcGFyc2VkIHRvIHRoZSBpbnRlcm5hbCBzdHJpbmcgdmFsdWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBleHRlcm5hbFZhbHVlIFRoZSB2YWx1ZSB0byBiZSBwYXJzZWRcblx0ICogQHBhcmFtIGV4dGVybmFsVmFsdWVUeXBlIFRoZSBleHRlcm5hbCB2YWx1ZSB0eXBlLCBlLmcuIGludCwgZmxvYXRbXSwgc3RyaW5nLCBldGMuXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJzZWQgdmFsdWVcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwYXJzZVZhbHVlKGV4dGVybmFsVmFsdWU6IGFueSB8IHVuZGVmaW5lZCwgZXh0ZXJuYWxWYWx1ZVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGFueSB7XG5cdFx0aWYgKCFleHRlcm5hbFZhbHVlKSB7XG5cdFx0XHRleHRlcm5hbFZhbHVlID0gW107XG5cdFx0fVxuXHRcdHJldHVybiBleHRlcm5hbFZhbHVlLm1hcCgodmFsdWU6IGFueSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFsdWUgPSBbXTtcblx0XHRcdH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gW3ZhbHVlXTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm9wZXJhdG9yLmZvcm1hdCh7IHZhbHVlczogdmFsdWUgfSBhcyBDb25kaXRpb25PYmplY3QpO1xuXHRcdH0pO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7OztFQUlBO0FBQ0E7QUFDQTtFQUZBLElBSXFCQSxVQUFVLFdBRDlCQyxjQUFjLENBQUMsc0NBQXNDLENBQUM7SUFBQTtJQUFBO01BQUE7SUFBQTtJQUFBO0lBQUE7SUFFdEQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFOQyxPQU9BQyxxQkFBcUIsR0FBckIsK0JBQXNCQyxNQUF5QixFQUFxQjtNQUNuRSxPQUFPQSxNQUFNO0lBQ2Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUEsT0FRQUMsV0FBVyxHQUFYLHFCQUFZQyxhQUE4QixFQUFFQyxpQkFBcUMsRUFBTztNQUFBO01BQ3ZGLElBQUlDLE1BQU0sR0FBR0YsYUFBYTtNQUUxQixJQUFJLE9BQU9FLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDL0JBLE1BQU0sR0FBR0EsTUFBTSxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDO01BQzNCO01BRUEsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNILE1BQU0sQ0FBQyxFQUFFO1FBQzFCQSxNQUFNLEdBQUdBLE1BQU0sQ0FDYkksR0FBRyxDQUFDLFVBQUNDLEtBQWE7VUFBQSx3QkFBV1IsV0FBVyxhQUFDUSxLQUFLLEVBQUUsS0FBSSxDQUFDQyxrQkFBa0IsQ0FBQ1AsaUJBQWlCLENBQUM7UUFBQSxDQUFDLENBQUMsQ0FDNUZRLE1BQU0sQ0FBQyxVQUFDRixLQUFhO1VBQUEsT0FBS0EsS0FBSyxLQUFLRyxTQUFTO1FBQUEsRUFBQztNQUNqRDtNQUVBLE9BQU9SLE1BQU0sSUFBSSxFQUFFO0lBQ3BCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQztJQUFBO0lBQUEsT0FDQVMsVUFBVSxHQUFWLG9CQUFXQyxhQUE4QixFQUFFWCxpQkFBcUMsRUFBTztNQUFBO01BQ3RGLElBQUksQ0FBQ1csYUFBYSxFQUFFO1FBQ25CQSxhQUFhLEdBQUcsRUFBRTtNQUNuQjtNQUNBLE9BQU9BLGFBQWEsQ0FBQ04sR0FBRyxDQUFDLFVBQUNDLEtBQVUsRUFBSztRQUN4QyxJQUFJQSxLQUFLLEtBQUtHLFNBQVMsRUFBRTtVQUN4QkgsS0FBSyxHQUFHLEVBQUU7UUFDWCxDQUFDLE1BQU0sSUFBSSxDQUFDSCxLQUFLLENBQUNDLE9BQU8sQ0FBQ0UsS0FBSyxDQUFDLEVBQUU7VUFDakNBLEtBQUssR0FBRyxDQUFDQSxLQUFLLENBQUM7UUFDaEI7UUFDQSxPQUFPLE1BQUksQ0FBQ00sUUFBUSxDQUFDQyxNQUFNLENBQUM7VUFBRWhCLE1BQU0sRUFBRVM7UUFBTSxDQUFDLENBQW9CO01BQ2xFLENBQUMsQ0FBQztJQUNILENBQUM7SUFBQTtFQUFBLEVBekRzQ1EsS0FBSztFQUFBO0VBQUE7QUFBQSJ9
|
|
@@ -56,7 +56,12 @@ export default class MultiValue extends Value {
|
|
|
56
56
|
externalValue = [];
|
|
57
57
|
}
|
|
58
58
|
return externalValue.map((value: any) => {
|
|
59
|
-
|
|
59
|
+
if (value === undefined) {
|
|
60
|
+
value = [];
|
|
61
|
+
} else if (!Array.isArray(value)) {
|
|
62
|
+
value = [value];
|
|
63
|
+
}
|
|
64
|
+
return this.operator.format({ values: value } as ConditionObject);
|
|
60
65
|
});
|
|
61
66
|
}
|
|
62
67
|
}
|
|
@@ -20,6 +20,7 @@ sap.ui.define(["sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/Bin
|
|
|
20
20
|
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
21
21
|
var formatResult = BindingToolkit.formatResult;
|
|
22
22
|
var compileExpression = BindingToolkit.compileExpression;
|
|
23
|
+
var typesSupportingNumberOfFractionalDigits = ["Edm.Single", "Edm.Double", "Edm.Decimal"];
|
|
23
24
|
var getDataPointTargetExpression = function (oDataModelPath) {
|
|
24
25
|
return oDataModelPath !== null && oDataModelPath !== void 0 && oDataModelPath.TargetValue ? getExpressionFromAnnotation(oDataModelPath.TargetValue) : unresolveableExpression;
|
|
25
26
|
};
|
|
@@ -113,22 +114,16 @@ sap.ui.define(["sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/Bin
|
|
|
113
114
|
}
|
|
114
115
|
return undefined;
|
|
115
116
|
};
|
|
116
|
-
var
|
|
117
|
-
|
|
118
|
-
outExpression.constraints = {};
|
|
119
|
-
}
|
|
120
|
-
outExpression.constraints = Object.assign(outExpression.constraints, {
|
|
121
|
-
precision: fieldValue.$target.precision,
|
|
122
|
-
scale: sNumberOfFractionalDigits ? sNumberOfFractionalDigits : fieldValue.$target.scale
|
|
123
|
-
});
|
|
124
|
-
// sNumberOfFractionalDigits is only defined in getValueFormatted when NumberOfFractionalDigits is defined.
|
|
117
|
+
var getFloatFormat = function (outExpression, fieldValue, numberOfFractionalDigits) {
|
|
118
|
+
// numberOfFractionalDigits is only defined in getValueFormatted when NumberOfFractionalDigits is defined.
|
|
125
119
|
// In that case, we need to instance the preserveDecimals parameter because of a change MDC side
|
|
126
|
-
if (
|
|
120
|
+
if (numberOfFractionalDigits) {
|
|
127
121
|
if (!outExpression.formatOptions) {
|
|
128
122
|
outExpression.formatOptions = {};
|
|
129
123
|
}
|
|
130
124
|
outExpression.formatOptions = Object.assign(outExpression.formatOptions, {
|
|
131
|
-
preserveDecimals: false
|
|
125
|
+
preserveDecimals: false,
|
|
126
|
+
maxFractionDigits: numberOfFractionalDigits
|
|
132
127
|
});
|
|
133
128
|
}
|
|
134
129
|
return outExpression;
|
|
@@ -143,13 +138,10 @@ sap.ui.define(["sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/Bin
|
|
|
143
138
|
var _EDM_TYPE_MAPPING$sPr;
|
|
144
139
|
formatWithTypeInformation(oPropertyDefinition, outExpression);
|
|
145
140
|
outExpression.type = (_EDM_TYPE_MAPPING$sPr = EDM_TYPE_MAPPING[sPropertyType]) === null || _EDM_TYPE_MAPPING$sPr === void 0 ? void 0 : _EDM_TYPE_MAPPING$sPr.type;
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
outExpression = getDecimalFormat(outExpression, fieldValue, sNumberOfFractionalDigits);
|
|
151
|
-
break;
|
|
152
|
-
default:
|
|
141
|
+
if (typesSupportingNumberOfFractionalDigits.includes(sPropertyType)) {
|
|
142
|
+
// for the listReport, the decimal/single/double fields are formatted by returning a string
|
|
143
|
+
// for the facets of the OP, the decimal/single/double fields are formatted by returning a promise, so we manage all the cases
|
|
144
|
+
outExpression = getFloatFormat(outExpression, fieldValue, sNumberOfFractionalDigits);
|
|
153
145
|
}
|
|
154
146
|
}
|
|
155
147
|
return outExpression;
|
|
@@ -158,16 +150,16 @@ sap.ui.define(["sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/Bin
|
|
|
158
150
|
var _oDataPointValue$$tar, _oPropertyDataModelOb2, _oPropertyDataModelOb3, _oPropertyDataModelOb4;
|
|
159
151
|
var oDataPoint = oDataModelPath.targetObject;
|
|
160
152
|
var oDataPointValue = (oDataPoint === null || oDataPoint === void 0 ? void 0 : oDataPoint.Value) || "";
|
|
161
|
-
var
|
|
162
|
-
var
|
|
163
|
-
if (
|
|
153
|
+
var propertyType = oDataPointValue === null || oDataPointValue === void 0 ? void 0 : (_oDataPointValue$$tar = oDataPointValue.$target) === null || _oDataPointValue$$tar === void 0 ? void 0 : _oDataPointValue$$tar.type;
|
|
154
|
+
var numberOfFractionalDigits;
|
|
155
|
+
if (typesSupportingNumberOfFractionalDigits.includes(propertyType) && oDataPoint.ValueFormat) {
|
|
164
156
|
if (oDataPoint.ValueFormat.NumberOfFractionalDigits) {
|
|
165
|
-
|
|
157
|
+
numberOfFractionalDigits = oDataPoint.ValueFormat.NumberOfFractionalDigits;
|
|
166
158
|
}
|
|
167
159
|
}
|
|
168
160
|
var oPropertyDataModelObjectPath = enhanceDataModelPath(oDataModelPath, oDataPointValue.path);
|
|
169
161
|
var oDescription = oPropertyDataModelObjectPath ? buildExpressionForDescription(oPropertyDataModelObjectPath) : undefined;
|
|
170
|
-
var oFormattedValue = getValueFormatted(oPropertyDataModelObjectPath, oDataPointValue,
|
|
162
|
+
var oFormattedValue = getValueFormatted(oPropertyDataModelObjectPath, oDataPointValue, propertyType, numberOfFractionalDigits);
|
|
171
163
|
var sDisplayMode = oDescription ? dataPointFormatOptions.displayMode || getDisplayMode(oPropertyDataModelObjectPath) : "Value";
|
|
172
164
|
var oBindingExpression;
|
|
173
165
|
switch (sDisplayMode) {
|
|
@@ -227,4 +219,4 @@ sap.ui.define(["sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/Bin
|
|
|
227
219
|
_exports.buildExpressionForProgressIndicatorPercentValue = buildExpressionForProgressIndicatorPercentValue;
|
|
228
220
|
return _exports;
|
|
229
221
|
}, false);
|
|
230
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREYXRhUG9pbnRUYXJnZXRFeHByZXNzaW9uIiwib0RhdGFNb2RlbFBhdGgiLCJUYXJnZXRWYWx1ZSIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInVucmVzb2x2ZWFibGVFeHByZXNzaW9uIiwib1Jlc291cmNlTW9kZWwiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJmaWVsZFZhbHVlIiwidGFyZ2V0T2JqZWN0IiwiVmFsdWUiLCJyZWxhdGl2ZUxvY2F0aW9uIiwiZ2V0UmVsYXRpdmVQYXRocyIsImZpZWxkVmFsdWVFeHByZXNzaW9uIiwiVGFyZ2V0RXhwcmVzc2lvbiIsImlzUHJvcGVydHkiLCIkdGFyZ2V0IiwidW5pdCIsImFubm90YXRpb25zIiwiTWVhc3VyZXMiLCJVbml0IiwiSVNPQ3VycmVuY3kiLCJnZXRUZXh0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJoYXNTdGF0aWNQZXJjZW50VW5pdCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJmb3JtYXRSZXN1bHQiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRQcm9ncmVzc0luZGljYXRvclRleHQiLCJ1bmRlZmluZWQiLCJidWlsZFVuaXRCaW5kaW5nRXhwcmVzc2lvbiIsImRhdGFQb2ludCIsImJ1aWxkUmF0aW5nSW5kaWNhdG9yU3VidGl0bGVFeHByZXNzaW9uIiwib0NvbnRleHQiLCJtU2FtcGxlU2l6ZSIsImZvcm1hdFJhdGluZ0luZGljYXRvclN1YlRpdGxlIiwiQW5ub3RhdGlvbkhlbHBlciIsInZhbHVlIiwiY29udGV4dCIsImlTYW1wbGVTaXplVmFsdWUiLCJzU3ViVGl0bGVMYWJlbCIsIlN0cmluZyIsImdldEhlYWRlclJhdGluZ0luZGljYXRvclRleHQiLCJvRGF0YVBvaW50IiwiU2FtcGxlU2l6ZSIsIkRlc2NyaXB0aW9uIiwic01vZGVsVmFsdWUiLCJyZXF1aXJlc0lDb250ZXh0IiwiYnVpbGRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24iLCJDb21tb24iLCJUZXh0Iiwib1RleHRFeHByZXNzaW9uIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJwYXJhbWV0ZXJzIiwiZ2V0RGVjaW1hbEZvcm1hdCIsIm91dEV4cHJlc3Npb24iLCJzTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIiwiY29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iLCJwcmVjaXNpb24iLCJzY2FsZSIsImZvcm1hdE9wdGlvbnMiLCJwcmVzZXJ2ZURlY2ltYWxzIiwiZ2V0VmFsdWVGb3JtYXR0ZWQiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwic1Byb3BlcnR5VHlwZSIsInBhdGgiLCJpbmRleE9mIiwib1Byb3BlcnR5RGVmaW5pdGlvbiIsInR5cGUiLCJFRE1fVFlQRV9NQVBQSU5HIiwiYnVpbGRGaWVsZEJpbmRpbmdFeHByZXNzaW9uIiwiZGF0YVBvaW50Rm9ybWF0T3B0aW9ucyIsImJIaWRlTWVhc3VyZSIsIm9EYXRhUG9pbnRWYWx1ZSIsIlZhbHVlRm9ybWF0IiwiTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJvRGVzY3JpcHRpb24iLCJvRm9ybWF0dGVkVmFsdWUiLCJzRGlzcGxheU1vZGUiLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwib0JpbmRpbmdFeHByZXNzaW9uIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiVGltZXpvbmUiLCJnZXRCaW5kaW5nV2l0aFRpbWV6b25lIiwiX2NvbXB1dGVCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5IiwibWVhc3VyZURpc3BsYXlNb2RlIiwicHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwiZm9ybWF0dGVkVmFsdWUiLCJoaWRlTWVhc3VyZSIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJzaG93TWVhc3VyZSIsImJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yUGVyY2VudFZhbHVlIiwiY29tcHV0ZVBlcmNlbnRhZ2UiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRhdGFQb2ludFRlbXBsYXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGZvcm1hdFJlc3VsdCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbixcblx0dW5yZXNvbHZlYWJsZUV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRSZWxhdGl2ZVBhdGhzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzU3RhdGljUGVyY2VudFVuaXQsIGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHtcblx0RURNX1RZUEVfTUFQUElORyxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0QmluZGluZ1dpdGhUaW1lem9uZSxcblx0Z2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSxcblx0Z2V0RGlzcGxheU1vZGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcblxuZXhwb3J0IHR5cGUgRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRtZWFzdXJlRGlzcGxheU1vZGU6IHN0cmluZztcblx0ZGlzcGxheU1vZGU6IHN0cmluZztcbn0+O1xuXG5jb25zdCBnZXREYXRhUG9pbnRUYXJnZXRFeHByZXNzaW9uID0gKG9EYXRhTW9kZWxQYXRoOiBhbnkpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9PiB7XG5cdHJldHVybiBvRGF0YU1vZGVsUGF0aD8uVGFyZ2V0VmFsdWUgPyBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ob0RhdGFNb2RlbFBhdGguVGFyZ2V0VmFsdWUpIDogdW5yZXNvbHZlYWJsZUV4cHJlc3Npb247XG59O1xuXG5jb25zdCBvUmVzb3VyY2VNb2RlbCA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLm1hY3Jvc1wiKTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkRXhwcmVzc2lvbkZvclByb2dyZXNzSW5kaWNhdG9yRGlzcGxheVZhbHVlID0gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9PiB7XG5cdGNvbnN0IGZpZWxkVmFsdWUgPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/LlZhbHVlIHx8IFwiXCI7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRsZXQgZmllbGRWYWx1ZUV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGRWYWx1ZSwgcmVsYXRpdmVMb2NhdGlvbikgYXMgYW55O1xuXHRjb25zdCBUYXJnZXRFeHByZXNzaW9uID0gZ2V0RGF0YVBvaW50VGFyZ2V0RXhwcmVzc2lvbihvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgYXMgYW55O1xuXG5cdGlmIChmaWVsZFZhbHVlRXhwcmVzc2lvbiAmJiBUYXJnZXRFeHByZXNzaW9uKSB7XG5cdFx0bGV0IHRhcmdldE9iamVjdCA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlO1xuXHRcdGlmICghaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHR0YXJnZXRPYmplY3QgPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdH1cblx0XHRjb25zdCB1bml0ID0gdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCB8fCB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblxuXHRcdGlmICghdW5pdCkge1xuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0NPTU1PTl9QUk9HUkVTU19JTkRJQ0FUT1JfRElTUExBWV9WQUxVRV9OT19VT01cIiwgW1xuXHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbihmaWVsZFZhbHVlRXhwcmVzc2lvbikgYXMgc3RyaW5nLFxuXHRcdFx0XHRjb21waWxlRXhwcmVzc2lvbihUYXJnZXRFeHByZXNzaW9uKSBhcyBzdHJpbmdcblx0XHRcdF0pO1xuXHRcdH1cblx0XHQvLyBJZiB0aGUgdW5pdCBpc24ndCBhIHBhdGgsIHdlIGNoZWNrIGZvciBhICUgc2lnbiBhcyBpdCBpcyBhIHNwZWNpYWwgY2FzZS5cblx0XHRpZiAoaGFzU3RhdGljUGVyY2VudFVuaXQoZmllbGRWYWx1ZT8uJHRhcmdldCkpIHtcblx0XHRcdHJldHVybiBgJHtjb21waWxlRXhwcmVzc2lvbihmaWVsZFZhbHVlRXhwcmVzc2lvbikgYXMgc3RyaW5nfSAlYDtcblx0XHR9XG5cblx0XHRmaWVsZFZhbHVlRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odGFyZ2V0T2JqZWN0LCBmaWVsZFZhbHVlRXhwcmVzc2lvbik7XG5cdFx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID0gdW5pdC4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24odW5pdC4kdGFyZ2V0LCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikpXG5cdFx0XHQ6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGZvcm1hdFJlc3VsdChbZmllbGRWYWx1ZUV4cHJlc3Npb24sIFRhcmdldEV4cHJlc3Npb24sIHVuaXRCaW5kaW5nRXhwcmVzc2lvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRQcm9ncmVzc0luZGljYXRvclRleHQpXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkVW5pdEJpbmRpbmdFeHByZXNzaW9uID0gKGRhdGFQb2ludDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0+IHtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YVBvaW50KTtcblxuXHRjb25zdCB0YXJnZXRPYmplY3QgPSBkYXRhUG9pbnQ/LnRhcmdldE9iamVjdD8uVmFsdWU/LiR0YXJnZXQ7XG5cdGlmICghaXNQcm9wZXJ0eSh0YXJnZXRPYmplY3QpKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0Y29uc3QgdW5pdCA9IHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgfHwgdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdHJldHVybiB1bml0ID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pKSA6IFwiXCI7XG59O1xuXG5jb25zdCBidWlsZFJhdGluZ0luZGljYXRvclN1YnRpdGxlRXhwcmVzc2lvbiA9IChvQ29udGV4dDogYW55LCBtU2FtcGxlU2l6ZTogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKG1TYW1wbGVTaXplKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJhdGluZ0luZGljYXRvclN1YlRpdGxlKEFubm90YXRpb25IZWxwZXIudmFsdWUobVNhbXBsZVNpemUsIHsgY29udGV4dDogb0NvbnRleHQgfSkgYXMgYW55KTtcblx0fVxufTtcbi8vIHJldHVybnMgdGhlIHRleHQgZm9yIHRoZSBSYXRpbmcgSW5kaWNhdG9yIFN1YnRpdGxlIChlLmcuICc3IHJldmlld3MnKVxuY29uc3QgZm9ybWF0UmF0aW5nSW5kaWNhdG9yU3ViVGl0bGUgPSAoaVNhbXBsZVNpemVWYWx1ZTogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKGlTYW1wbGVTaXplVmFsdWUpIHtcblx0XHRjb25zdCBzU3ViVGl0bGVMYWJlbCA9XG5cdFx0XHRpU2FtcGxlU2l6ZVZhbHVlID4gMVxuXHRcdFx0XHQ/IG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0FOTk9UQVRJT05fSEVMUEVSX1JBVElOR19JTkRJQ0FUT1JfU1VCVElUTEVfTEFCRUxfUExVUkFMXCIpXG5cdFx0XHRcdDogb1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQU5OT1RBVElPTl9IRUxQRVJfUkFUSU5HX0lORElDQVRPUl9TVUJUSVRMRV9MQUJFTFwiKTtcblx0XHRyZXR1cm4gb1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfQU5OT1RBVElPTl9IRUxQRVJfUkFUSU5HX0lORElDQVRPUl9TVUJUSVRMRVwiLCBbU3RyaW5nKGlTYW1wbGVTaXplVmFsdWUpLCBzU3ViVGl0bGVMYWJlbF0pO1xuXHR9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgdGhlIGhlYWRlciB0ZXh0IG9mIHJhdGluZyBpbmRpY2F0b3IuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0XG4gKiBAcGFyYW0gb0RhdGFQb2ludFxuICogQGZ1bmN0aW9uIHBhcmFtIHtvYmplY3R9IG9Db250ZXh0IGNvbnRleHQgb2YgaW50ZXJmYWNlXG4gKiBwYXJhbSB7b2JqZWN0fSBvRGF0YVBvaW50IGRhdGEgcG9pbnQgb2JqZWN0XG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIGJpbmRpbmcgZm9yIHJhdGluZyBpbmRpY2F0b3IgdGV4dFxuICovXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyUmF0aW5nSW5kaWNhdG9yVGV4dCA9IChvQ29udGV4dDogYW55LCBvRGF0YVBvaW50OiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuXHRpZiAob0RhdGFQb2ludCAmJiBvRGF0YVBvaW50LlNhbXBsZVNpemUpIHtcblx0XHRyZXR1cm4gYnVpbGRSYXRpbmdJbmRpY2F0b3JTdWJ0aXRsZUV4cHJlc3Npb24ob0NvbnRleHQsIG9EYXRhUG9pbnQuU2FtcGxlU2l6ZSk7XG5cdH0gZWxzZSBpZiAob0RhdGFQb2ludCAmJiBvRGF0YVBvaW50LkRlc2NyaXB0aW9uKSB7XG5cdFx0Y29uc3Qgc01vZGVsVmFsdWUgPSBBbm5vdGF0aW9uSGVscGVyLnZhbHVlKG9EYXRhUG9pbnQuRGVzY3JpcHRpb24sIHsgY29udGV4dDogb0NvbnRleHQgfSk7XG5cdFx0cmV0dXJuIFwiJHtwYXRoOlwiICsgc01vZGVsVmFsdWUgKyBcIn1cIjtcblx0fVxufTtcbmdldEhlYWRlclJhdGluZ0luZGljYXRvclRleHQucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbmNvbnN0IGJ1aWxkRXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uID0gKGZpZWxkVmFsdWU6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PiB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKGZpZWxkVmFsdWUpO1xuXHRpZiAoZmllbGRWYWx1ZT8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0KSB7XG5cdFx0Y29uc3Qgb1RleHRFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkVmFsdWU/LnRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0XHRpZiAoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24ob1RleHRFeHByZXNzaW9uKSkge1xuXHRcdFx0b1RleHRFeHByZXNzaW9uLnBhcmFtZXRlcnMgPSB7IFwiJCRub1BhdGNoXCI6IHRydWUgfTtcblx0XHR9XG5cdFx0cmV0dXJuIG9UZXh0RXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgZ2V0RGVjaW1hbEZvcm1hdCA9IChcblx0b3V0RXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPGFueT4sXG5cdGZpZWxkVmFsdWU6IGFueSxcblx0c051bWJlck9mRnJhY3Rpb25hbERpZ2l0czogc3RyaW5nXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PiA9PiB7XG5cdGlmICghb3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cykge1xuXHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMgPSB7fTtcblx0fVxuXHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzLCB7XG5cdFx0cHJlY2lzaW9uOiBmaWVsZFZhbHVlLiR0YXJnZXQucHJlY2lzaW9uLFxuXHRcdHNjYWxlOiBzTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID8gc051bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA6IGZpZWxkVmFsdWUuJHRhcmdldC5zY2FsZVxuXHR9KTtcblx0Ly8gc051bWJlck9mRnJhY3Rpb25hbERpZ2l0cyBpcyBvbmx5IGRlZmluZWQgaW4gZ2V0VmFsdWVGb3JtYXR0ZWQgd2hlbiBOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgaXMgZGVmaW5lZC5cblx0Ly8gSW4gdGhhdCBjYXNlLCB3ZSBuZWVkIHRvIGluc3RhbmNlIHRoZSBwcmVzZXJ2ZURlY2ltYWxzIHBhcmFtZXRlciBiZWNhdXNlIG9mIGEgY2hhbmdlIE1EQyBzaWRlXG5cdGlmIChzTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRcdH1cblx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0cHJlc2VydmVEZWNpbWFsczogZmFsc2Vcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcbn07XG5cbmNvbnN0IGdldFZhbHVlRm9ybWF0dGVkID0gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRmaWVsZFZhbHVlOiBhbnksXG5cdHNQcm9wZXJ0eVR5cGU6IHN0cmluZyxcblx0c051bWJlck9mRnJhY3Rpb25hbERpZ2l0czogc3RyaW5nXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9PiB7XG5cdGxldCBvdXRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55Pjtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGZpZWxkVmFsdWU/LnBhdGg/LmluZGV4T2YoXCIvXCIpID09PSAtMSA/IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCkgOiBbXTtcblx0b3V0RXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZFZhbHVlLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRpZiAoc1Byb3BlcnR5VHlwZSAmJiBpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihvdXRFeHByZXNzaW9uKSkge1xuXHRcdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgb3V0RXhwcmVzc2lvbik7XG5cdFx0b3V0RXhwcmVzc2lvbi50eXBlID0gRURNX1RZUEVfTUFQUElOR1tzUHJvcGVydHlUeXBlXT8udHlwZTtcblx0XHRzd2l0Y2ggKHNQcm9wZXJ0eVR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGVjaW1hbFwiOlxuXHRcdFx0XHQvLyBmb3IgdGhlIGxpc3RSZXBvcnQsIHRoZSBkZWNpbWFsIGZpZWxkcyBhcmUgZm9ybWF0dGVkIGJ5IHJldHVybmluZyBhIHN0cmluZ1xuXHRcdFx0XHQvLyBmb3IgdGhlIGZhY2V0cyBvZiB0aGUgT1AsIHRoZSBkZWNpbWFsIGZpZWxkcyBhcmUgZm9ybWF0dGVkIGJ5IHJldHVybmluZyBhIHByb21pc2UsIHNvIHdlIG1hbmFnZSBhbGwgdGhlIGNhc2VzXG5cdFx0XHRcdG91dEV4cHJlc3Npb24gPSBnZXREZWNpbWFsRm9ybWF0KG91dEV4cHJlc3Npb24sIGZpZWxkVmFsdWUsIHNOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG91dEV4cHJlc3Npb247XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRGaWVsZEJpbmRpbmdFeHByZXNzaW9uID0gKFxuXHRvRGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0ZGF0YVBvaW50Rm9ybWF0T3B0aW9uczogRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyxcblx0YkhpZGVNZWFzdXJlOiBib29sZWFuXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9PiB7XG5cdGNvbnN0IG9EYXRhUG9pbnQgPSBvRGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdGNvbnN0IG9EYXRhUG9pbnRWYWx1ZSA9IG9EYXRhUG9pbnQ/LlZhbHVlIHx8IFwiXCI7XG5cdGNvbnN0IHNQcm9wZXJ0eVR5cGUgPSBvRGF0YVBvaW50VmFsdWU/LiR0YXJnZXQ/LnR5cGU7XG5cdGxldCBzTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzO1xuXG5cdGlmIChzUHJvcGVydHlUeXBlID09PSBcIkVkbS5EZWNpbWFsXCIgJiYgb0RhdGFQb2ludC5WYWx1ZUZvcm1hdCkge1xuXHRcdGlmIChvRGF0YVBvaW50LlZhbHVlRm9ybWF0Lk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cykge1xuXHRcdFx0c051bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IG9EYXRhUG9pbnQuVmFsdWVGb3JtYXQuTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzO1xuXHRcdH1cblx0fVxuXHRjb25zdCBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgob0RhdGFNb2RlbFBhdGgsIG9EYXRhUG9pbnRWYWx1ZS5wYXRoKTtcblx0Y29uc3Qgb0Rlc2NyaXB0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCA/IGJ1aWxkRXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvRm9ybWF0dGVkVmFsdWUgPSBnZXRWYWx1ZUZvcm1hdHRlZChvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLCBvRGF0YVBvaW50VmFsdWUsIHNQcm9wZXJ0eVR5cGUsIHNOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMpO1xuXHRjb25zdCBzRGlzcGxheU1vZGUgPSBvRGVzY3JpcHRpb24gPyBkYXRhUG9pbnRGb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlIHx8IGdldERpc3BsYXlNb2RlKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpIDogXCJWYWx1ZVwiO1xuXHRsZXQgb0JpbmRpbmdFeHByZXNzaW9uOiBhbnk7XG5cdHN3aXRjaCAoc0Rpc3BsYXlNb2RlKSB7XG5cdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBvRGVzY3JpcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KFtvRm9ybWF0dGVkVmFsdWUsIG9EZXNjcmlwdGlvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChbb0Rlc2NyaXB0aW9uLCBvRm9ybWF0dGVkVmFsdWVdLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRpZiAob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGdldEJpbmRpbmdXaXRoVGltZXpvbmUob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgb0Zvcm1hdHRlZFZhbHVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IF9jb21wdXRlQmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeShcblx0XHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHRcdG9Gb3JtYXR0ZWRWYWx1ZSxcblx0XHRcdFx0XHRiSGlkZU1lYXN1cmUgfHwgZGF0YVBvaW50Rm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIkhpZGRlblwiXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9CaW5kaW5nRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgX2NvbXB1dGVCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5ID0gKFxuXHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZvcm1hdHRlZFZhbHVlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0aGlkZU1lYXN1cmU6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0+IHtcblx0aWYgKFxuXHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCB8fFxuXHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3lcblx0KSB7XG5cdFx0aWYgKGhpZGVNZWFzdXJlICYmIGhhc1N0YXRpY1BlcmNlbnRVbml0KHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpKSB7XG5cdFx0XHRyZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG5cdFx0fVxuXHRcdHJldHVybiBnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5KFxuXHRcdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0Zm9ybWF0dGVkVmFsdWUsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRoaWRlTWVhc3VyZSA/IHsgc2hvd01lYXN1cmU6IGZhbHNlIH0gOiB1bmRlZmluZWRcblx0XHQpO1xuXHR9XG5cdHJldHVybiBmb3JtYXR0ZWRWYWx1ZTtcbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIGNhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZSB2YWx1ZSBvZiBQcm9ncmVzcyBJbmRpY2F0b3IuIEJhc2ljIGZvcm11bGEgaXMgVmFsdWUvVGFyZ2V0ICogMTAwLlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbiBiaW5kaW5nIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlIHZhbHVlLCB3aGljaCBpcyBzaG93biBpbiB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGJhc2VkIG9uIHRoZSBmb3JtdWxhIGdpdmVuIGFib3ZlLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUgPSAob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IGZpZWxkVmFsdWUgPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/LlZhbHVlIHx8IFwiXCI7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBmaWVsZFZhbHVlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZFZhbHVlLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0Y29uc3QgVGFyZ2V0RXhwcmVzc2lvbiA9IGdldERhdGFQb2ludFRhcmdldEV4cHJlc3Npb24ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpO1xuXG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBmaWVsZFZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCB8fCBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdGlmICh1bml0KSB7XG5cdFx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID0gKHVuaXQgYXMgYW55KS4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24oXG5cdFx0XHRcdFx0KHVuaXQgYXMgYW55KS4kdGFyZ2V0LFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHRcdFx0ICApXG5cdFx0XHQ6IChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pO1xuXG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0Zm9ybWF0UmVzdWx0KFtmaWVsZFZhbHVlRXhwcmVzc2lvbiwgVGFyZ2V0RXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgdmFsdWVGb3JtYXR0ZXJzLmNvbXB1dGVQZXJjZW50YWdlKVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0UmVzdWx0KFtmaWVsZFZhbHVlRXhwcmVzc2lvbiwgVGFyZ2V0RXhwcmVzc2lvbiwgXCJcIl0sIHZhbHVlRm9ybWF0dGVycy5jb21wdXRlUGVyY2VudGFnZSkpO1xufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTJCQSxJQUFNQSw0QkFBNEIsR0FBRyxVQUFDQyxjQUFtQixFQUF1QztJQUMvRixPQUFPQSxjQUFjLGFBQWRBLGNBQWMsZUFBZEEsY0FBYyxDQUFFQyxXQUFXLEdBQUdDLDJCQUEyQixDQUFDRixjQUFjLENBQUNDLFdBQVcsQ0FBQyxHQUFHRSx1QkFBdUI7RUFDdkgsQ0FBQztFQUVELElBQU1DLGNBQWMsR0FBR0MsR0FBRyxDQUFDQyxFQUFFLENBQUNDLE9BQU8sRUFBRSxDQUFDQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUM7RUFFMUUsSUFBTUMsK0NBQStDLEdBQUcsVUFDOURDLDRCQUFpRCxFQUNYO0lBQUE7SUFDdEMsSUFBTUMsVUFBVSxHQUFHLENBQUFELDRCQUE0QixhQUE1QkEsNEJBQTRCLGdEQUE1QkEsNEJBQTRCLENBQUVFLFlBQVksMERBQTFDLHNCQUE0Q0MsS0FBSyxLQUFJLEVBQUU7SUFDMUUsSUFBTUMsZ0JBQWdCLEdBQUdDLGdCQUFnQixDQUFDTCw0QkFBNEIsQ0FBQztJQUN2RSxJQUFJTSxvQkFBb0IsR0FBR2QsMkJBQTJCLENBQUNTLFVBQVUsRUFBRUcsZ0JBQWdCLENBQVE7SUFDM0YsSUFBTUcsZ0JBQWdCLEdBQUdsQiw0QkFBNEIsQ0FBQ1csNEJBQTRCLENBQUNFLFlBQVksQ0FBUTtJQUV2RyxJQUFJSSxvQkFBb0IsSUFBSUMsZ0JBQWdCLEVBQUU7TUFBQTtNQUM3QyxJQUFJTCxZQUFZLEdBQUdGLDRCQUE0QixDQUFDRSxZQUFZLENBQUNDLEtBQUs7TUFDbEUsSUFBSSxDQUFDSyxVQUFVLENBQUNOLFlB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
|
|
222
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0eXBlc1N1cHBvcnRpbmdOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJnZXREYXRhUG9pbnRUYXJnZXRFeHByZXNzaW9uIiwib0RhdGFNb2RlbFBhdGgiLCJUYXJnZXRWYWx1ZSIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInVucmVzb2x2ZWFibGVFeHByZXNzaW9uIiwib1Jlc291cmNlTW9kZWwiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSIsIm9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgiLCJmaWVsZFZhbHVlIiwidGFyZ2V0T2JqZWN0IiwiVmFsdWUiLCJyZWxhdGl2ZUxvY2F0aW9uIiwiZ2V0UmVsYXRpdmVQYXRocyIsImZpZWxkVmFsdWVFeHByZXNzaW9uIiwiVGFyZ2V0RXhwcmVzc2lvbiIsImlzUHJvcGVydHkiLCIkdGFyZ2V0IiwidW5pdCIsImFubm90YXRpb25zIiwiTWVhc3VyZXMiLCJVbml0IiwiSVNPQ3VycmVuY3kiLCJnZXRUZXh0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJoYXNTdGF0aWNQZXJjZW50VW5pdCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJmb3JtYXRSZXN1bHQiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRQcm9ncmVzc0luZGljYXRvclRleHQiLCJ1bmRlZmluZWQiLCJidWlsZFVuaXRCaW5kaW5nRXhwcmVzc2lvbiIsImRhdGFQb2ludCIsImJ1aWxkUmF0aW5nSW5kaWNhdG9yU3VidGl0bGVFeHByZXNzaW9uIiwib0NvbnRleHQiLCJtU2FtcGxlU2l6ZSIsImZvcm1hdFJhdGluZ0luZGljYXRvclN1YlRpdGxlIiwiQW5ub3RhdGlvbkhlbHBlciIsInZhbHVlIiwiY29udGV4dCIsImlTYW1wbGVTaXplVmFsdWUiLCJzU3ViVGl0bGVMYWJlbCIsIlN0cmluZyIsImdldEhlYWRlclJhdGluZ0luZGljYXRvclRleHQiLCJvRGF0YVBvaW50IiwiU2FtcGxlU2l6ZSIsIkRlc2NyaXB0aW9uIiwic01vZGVsVmFsdWUiLCJyZXF1aXJlc0lDb250ZXh0IiwiYnVpbGRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24iLCJDb21tb24iLCJUZXh0Iiwib1RleHRFeHByZXNzaW9uIiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJwYXJhbWV0ZXJzIiwiZ2V0RmxvYXRGb3JtYXQiLCJvdXRFeHByZXNzaW9uIiwibnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIiwiZm9ybWF0T3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsInByZXNlcnZlRGVjaW1hbHMiLCJtYXhGcmFjdGlvbkRpZ2l0cyIsImdldFZhbHVlRm9ybWF0dGVkIiwib1Byb3BlcnR5RGF0YU1vZGVsUGF0aCIsInNQcm9wZXJ0eVR5cGUiLCJzTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIiwicGF0aCIsImluZGV4T2YiLCJvUHJvcGVydHlEZWZpbml0aW9uIiwidHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJpbmNsdWRlcyIsImJ1aWxkRmllbGRCaW5kaW5nRXhwcmVzc2lvbiIsImRhdGFQb2ludEZvcm1hdE9wdGlvbnMiLCJiSGlkZU1lYXN1cmUiLCJvRGF0YVBvaW50VmFsdWUiLCJwcm9wZXJ0eVR5cGUiLCJWYWx1ZUZvcm1hdCIsIk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cyIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwib0Rlc2NyaXB0aW9uIiwib0Zvcm1hdHRlZFZhbHVlIiwic0Rpc3BsYXlNb2RlIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImZvcm1hdFdpdGhCcmFja2V0cyIsIlRpbWV6b25lIiwiZ2V0QmluZGluZ1dpdGhUaW1lem9uZSIsIl9jb21wdXRlQmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSIsIm1lYXN1cmVEaXNwbGF5TW9kZSIsInByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsImZvcm1hdHRlZFZhbHVlIiwiaGlkZU1lYXN1cmUiLCJnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5Iiwic2hvd01lYXN1cmUiLCJidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvclBlcmNlbnRWYWx1ZSIsImNvbXB1dGVQZXJjZW50YWdlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEYXRhUG9pbnRUZW1wbGF0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24sXG5cdHVucmVzb2x2ZWFibGVFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGhhc1N0YXRpY1BlcmNlbnRVbml0LCBpc1Byb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24sXG5cdGdldEJpbmRpbmdXaXRoVGltZXpvbmUsXG5cdGdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3ksXG5cdGdldERpc3BsYXlNb2RlXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5cbmNvbnN0IHR5cGVzU3VwcG9ydGluZ051bWJlck9mRnJhY3Rpb25hbERpZ2l0cyA9IFtcIkVkbS5TaW5nbGVcIiwgXCJFZG0uRG91YmxlXCIsIFwiRWRtLkRlY2ltYWxcIl07XG5cbmV4cG9ydCB0eXBlIERhdGFQb2ludEZvcm1hdE9wdGlvbnMgPSBQYXJ0aWFsPHtcblx0bWVhc3VyZURpc3BsYXlNb2RlOiBzdHJpbmc7XG5cdGRpc3BsYXlNb2RlOiBzdHJpbmc7XG59PjtcblxuY29uc3QgZ2V0RGF0YVBvaW50VGFyZ2V0RXhwcmVzc2lvbiA9IChvRGF0YU1vZGVsUGF0aDogYW55KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPT4ge1xuXHRyZXR1cm4gb0RhdGFNb2RlbFBhdGg/LlRhcmdldFZhbHVlID8gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG9EYXRhTW9kZWxQYXRoLlRhcmdldFZhbHVlKSA6IHVucmVzb2x2ZWFibGVFeHByZXNzaW9uO1xufTtcblxuY29uc3Qgb1Jlc291cmNlTW9kZWwgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5tYWNyb3NcIik7XG5cbmV4cG9ydCBjb25zdCBidWlsZEV4cHJlc3Npb25Gb3JQcm9ncmVzc0luZGljYXRvckRpc3BsYXlWYWx1ZSA9IChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPT4ge1xuXHRjb25zdCBmaWVsZFZhbHVlID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0Py5WYWx1ZSB8fCBcIlwiO1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0bGV0IGZpZWxkVmFsdWVFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkVmFsdWUsIHJlbGF0aXZlTG9jYXRpb24pIGFzIGFueTtcblx0Y29uc3QgVGFyZ2V0RXhwcmVzc2lvbiA9IGdldERhdGFQb2ludFRhcmdldEV4cHJlc3Npb24ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpIGFzIGFueTtcblxuXHRpZiAoZmllbGRWYWx1ZUV4cHJlc3Npb24gJiYgVGFyZ2V0RXhwcmVzc2lvbikge1xuXHRcdGxldCB0YXJnZXRPYmplY3QgPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZTtcblx0XHRpZiAoIWlzUHJvcGVydHkodGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0dGFyZ2V0T2JqZWN0ID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QuVmFsdWUuJHRhcmdldDtcblx0XHR9XG5cdFx0Y29uc3QgdW5pdCA9IHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgfHwgdGFyZ2V0T2JqZWN0LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cblx0XHRpZiAoIXVuaXQpIHtcblx0XHRcdHJldHVybiBvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9DT01NT05fUFJPR1JFU1NfSU5ESUNBVE9SX0RJU1BMQVlfVkFMVUVfTk9fVU9NXCIsIFtcblx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oZmllbGRWYWx1ZUV4cHJlc3Npb24pIGFzIHN0cmluZyxcblx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oVGFyZ2V0RXhwcmVzc2lvbikgYXMgc3RyaW5nXG5cdFx0XHRdKTtcblx0XHR9XG5cdFx0Ly8gSWYgdGhlIHVuaXQgaXNuJ3QgYSBwYXRoLCB3ZSBjaGVjayBmb3IgYSAlIHNpZ24gYXMgaXQgaXMgYSBzcGVjaWFsIGNhc2UuXG5cdFx0aWYgKGhhc1N0YXRpY1BlcmNlbnRVbml0KGZpZWxkVmFsdWU/LiR0YXJnZXQpKSB7XG5cdFx0XHRyZXR1cm4gYCR7Y29tcGlsZUV4cHJlc3Npb24oZmllbGRWYWx1ZUV4cHJlc3Npb24pIGFzIHN0cmluZ30gJWA7XG5cdFx0fVxuXG5cdFx0ZmllbGRWYWx1ZUV4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHRhcmdldE9iamVjdCwgZmllbGRWYWx1ZUV4cHJlc3Npb24pO1xuXHRcdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9IHVuaXQuJHRhcmdldFxuXHRcdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKHVuaXQuJHRhcmdldCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pKVxuXHRcdFx0OiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRmb3JtYXRSZXN1bHQoW2ZpZWxkVmFsdWVFeHByZXNzaW9uLCBUYXJnZXRFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0UHJvZ3Jlc3NJbmRpY2F0b3JUZXh0KVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZFVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9IChkYXRhUG9pbnQ6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9PiB7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFQb2ludCk7XG5cblx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gZGF0YVBvaW50Py50YXJnZXRPYmplY3Q/LlZhbHVlPy4kdGFyZ2V0O1xuXHRpZiAoIWlzUHJvcGVydHkodGFyZ2V0T2JqZWN0KSkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdGNvbnN0IHVuaXQgPSB0YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0IHx8IHRhcmdldE9iamVjdC5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRyZXR1cm4gdW5pdCA/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSkgOiBcIlwiO1xufTtcblxuY29uc3QgYnVpbGRSYXRpbmdJbmRpY2F0b3JTdWJ0aXRsZUV4cHJlc3Npb24gPSAob0NvbnRleHQ6IGFueSwgbVNhbXBsZVNpemU6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmIChtU2FtcGxlU2l6ZSkge1xuXHRcdHJldHVybiBmb3JtYXRSYXRpbmdJbmRpY2F0b3JTdWJUaXRsZShBbm5vdGF0aW9uSGVscGVyLnZhbHVlKG1TYW1wbGVTaXplLCB7IGNvbnRleHQ6IG9Db250ZXh0IH0pIGFzIGFueSk7XG5cdH1cbn07XG4vLyByZXR1cm5zIHRoZSB0ZXh0IGZvciB0aGUgUmF0aW5nIEluZGljYXRvciBTdWJ0aXRsZSAoZS5nLiAnNyByZXZpZXdzJylcbmNvbnN0IGZvcm1hdFJhdGluZ0luZGljYXRvclN1YlRpdGxlID0gKGlTYW1wbGVTaXplVmFsdWU6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmIChpU2FtcGxlU2l6ZVZhbHVlKSB7XG5cdFx0Y29uc3Qgc1N1YlRpdGxlTGFiZWwgPVxuXHRcdFx0aVNhbXBsZVNpemVWYWx1ZSA+IDFcblx0XHRcdFx0PyBvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9SQVRJTkdfSU5ESUNBVE9SX1NVQlRJVExFX0xBQkVMX1BMVVJBTFwiKVxuXHRcdFx0XHQ6IG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0FOTk9UQVRJT05fSEVMUEVSX1JBVElOR19JTkRJQ0FUT1JfU1VCVElUTEVfTEFCRUxcIik7XG5cdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX0FOTk9UQVRJT05fSEVMUEVSX1JBVElOR19JTkRJQ0FUT1JfU1VCVElUTEVcIiwgW1N0cmluZyhpU2FtcGxlU2l6ZVZhbHVlKSwgc1N1YlRpdGxlTGFiZWxdKTtcblx0fVxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSBoZWFkZXIgdGV4dCBvZiByYXRpbmcgaW5kaWNhdG9yLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dFxuICogQHBhcmFtIG9EYXRhUG9pbnRcbiAqIEBmdW5jdGlvbiBwYXJhbSB7b2JqZWN0fSBvQ29udGV4dCBjb250ZXh0IG9mIGludGVyZmFjZVxuICogcGFyYW0ge29iamVjdH0gb0RhdGFQb2ludCBkYXRhIHBvaW50IG9iamVjdFxuICogQHJldHVybnMgRXhwcmVzc2lvbiBiaW5kaW5nIGZvciByYXRpbmcgaW5kaWNhdG9yIHRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhlYWRlclJhdGluZ0luZGljYXRvclRleHQgPSAob0NvbnRleHQ6IGFueSwgb0RhdGFQb2ludDogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKG9EYXRhUG9pbnQgJiYgb0RhdGFQb2ludC5TYW1wbGVTaXplKSB7XG5cdFx0cmV0dXJuIGJ1aWxkUmF0aW5nSW5kaWNhdG9yU3VidGl0bGVFeHByZXNzaW9uKG9Db250ZXh0LCBvRGF0YVBvaW50LlNhbXBsZVNpemUpO1xuXHR9IGVsc2UgaWYgKG9EYXRhUG9pbnQgJiYgb0RhdGFQb2ludC5EZXNjcmlwdGlvbikge1xuXHRcdGNvbnN0IHNNb2RlbFZhbHVlID0gQW5ub3RhdGlvbkhlbHBlci52YWx1ZShvRGF0YVBvaW50LkRlc2NyaXB0aW9uLCB7IGNvbnRleHQ6IG9Db250ZXh0IH0pO1xuXHRcdHJldHVybiBcIiR7cGF0aDpcIiArIHNNb2RlbFZhbHVlICsgXCJ9XCI7XG5cdH1cbn07XG5nZXRIZWFkZXJSYXRpbmdJbmRpY2F0b3JUZXh0LnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG5jb25zdCBidWlsZEV4cHJlc3Npb25Gb3JEZXNjcmlwdGlvbiA9IChmaWVsZFZhbHVlOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT4gfCB1bmRlZmluZWQgPT4ge1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhmaWVsZFZhbHVlKTtcblx0aWYgKGZpZWxkVmFsdWU/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCkge1xuXHRcdGNvbnN0IG9UZXh0RXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZFZhbHVlPy50YXJnZXRPYmplY3QuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdFx0aWYgKGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKG9UZXh0RXhwcmVzc2lvbikpIHtcblx0XHRcdG9UZXh0RXhwcmVzc2lvbi5wYXJhbWV0ZXJzID0geyBcIiQkbm9QYXRjaFwiOiB0cnVlIH07XG5cdFx0fVxuXHRcdHJldHVybiBvVGV4dEV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGdldEZsb2F0Rm9ybWF0ID0gKFxuXHRvdXRFeHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248YW55Pixcblx0ZmllbGRWYWx1ZTogYW55LFxuXHRudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM6IHN0cmluZ1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT4gPT4ge1xuXHQvLyBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgaXMgb25seSBkZWZpbmVkIGluIGdldFZhbHVlRm9ybWF0dGVkIHdoZW4gTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzIGlzIGRlZmluZWQuXG5cdC8vIEluIHRoYXQgY2FzZSwgd2UgbmVlZCB0byBpbnN0YW5jZSB0aGUgcHJlc2VydmVEZWNpbWFscyBwYXJhbWV0ZXIgYmVjYXVzZSBvZiBhIGNoYW5nZSBNREMgc2lkZVxuXHRpZiAobnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzKSB7XG5cdFx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRcdH1cblx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0cHJlc2VydmVEZWNpbWFsczogZmFsc2UsXG5cdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogbnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG91dEV4cHJlc3Npb247XG59O1xuXG5jb25zdCBnZXRWYWx1ZUZvcm1hdHRlZCA9IChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0ZmllbGRWYWx1ZTogYW55LFxuXHRzUHJvcGVydHlUeXBlOiBzdHJpbmcsXG5cdHNOdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM6IHN0cmluZ1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPT4ge1xuXHRsZXQgb3V0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT47XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBmaWVsZFZhbHVlPy5wYXRoPy5pbmRleE9mKFwiL1wiKSA9PT0gLTEgPyBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpIDogW107XG5cdG91dEV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGRWYWx1ZSwgcmVsYXRpdmVMb2NhdGlvbik7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblx0aWYgKHNQcm9wZXJ0eVR5cGUgJiYgaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24ob3V0RXhwcmVzc2lvbikpIHtcblx0XHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIG91dEV4cHJlc3Npb24pO1xuXHRcdG91dEV4cHJlc3Npb24udHlwZSA9IEVETV9UWVBFX01BUFBJTkdbc1Byb3BlcnR5VHlwZV0/LnR5cGU7XG5cdFx0aWYgKHR5cGVzU3VwcG9ydGluZ051bWJlck9mRnJhY3Rpb25hbERpZ2l0cy5pbmNsdWRlcyhzUHJvcGVydHlUeXBlKSkge1xuXHRcdFx0Ly8gZm9yIHRoZSBsaXN0UmVwb3J0LCB0aGUgZGVjaW1hbC9zaW5nbGUvZG91YmxlIGZpZWxkcyBhcmUgZm9ybWF0dGVkIGJ5IHJldHVybmluZyBhIHN0cmluZ1xuXHRcdFx0Ly8gZm9yIHRoZSBmYWNldHMgb2YgdGhlIE9QLCB0aGUgZGVjaW1hbC9zaW5nbGUvZG91YmxlIGZpZWxkcyBhcmUgZm9ybWF0dGVkIGJ5IHJldHVybmluZyBhIHByb21pc2UsIHNvIHdlIG1hbmFnZSBhbGwgdGhlIGNhc2VzXG5cdFx0XHRvdXRFeHByZXNzaW9uID0gZ2V0RmxvYXRGb3JtYXQob3V0RXhwcmVzc2lvbiwgZmllbGRWYWx1ZSwgc051bWJlck9mRnJhY3Rpb25hbERpZ2l0cyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG91dEV4cHJlc3Npb247XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRGaWVsZEJpbmRpbmdFeHByZXNzaW9uID0gKFxuXHRvRGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0ZGF0YVBvaW50Rm9ybWF0T3B0aW9uczogRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyxcblx0YkhpZGVNZWFzdXJlOiBib29sZWFuXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9PiB7XG5cdGNvbnN0IG9EYXRhUG9pbnQgPSBvRGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3Q7XG5cdGNvbnN0IG9EYXRhUG9pbnRWYWx1ZSA9IG9EYXRhUG9pbnQ/LlZhbHVlIHx8IFwiXCI7XG5cdGNvbnN0IHByb3BlcnR5VHlwZSA9IG9EYXRhUG9pbnRWYWx1ZT8uJHRhcmdldD8udHlwZTtcblx0bGV0IG51bWJlck9mRnJhY3Rpb25hbERpZ2l0cztcblxuXHRpZiAodHlwZXNTdXBwb3J0aW5nTnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzLmluY2x1ZGVzKHByb3BlcnR5VHlwZSkgJiYgb0RhdGFQb2ludC5WYWx1ZUZvcm1hdCkge1xuXHRcdGlmIChvRGF0YVBvaW50LlZhbHVlRm9ybWF0Lk51bWJlck9mRnJhY3Rpb25hbERpZ2l0cykge1xuXHRcdFx0bnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID0gb0RhdGFQb2ludC5WYWx1ZUZvcm1hdC5OdW1iZXJPZkZyYWN0aW9uYWxEaWdpdHM7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChvRGF0YU1vZGVsUGF0aCwgb0RhdGFQb2ludFZhbHVlLnBhdGgpO1xuXHRjb25zdCBvRGVzY3JpcHRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoID8gYnVpbGRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9Gb3JtYXR0ZWRWYWx1ZSA9IGdldFZhbHVlRm9ybWF0dGVkKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgsIG9EYXRhUG9pbnRWYWx1ZSwgcHJvcGVydHlUeXBlLCBudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMpO1xuXHRjb25zdCBzRGlzcGxheU1vZGUgPSBvRGVzY3JpcHRpb24gPyBkYXRhUG9pbnRGb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlIHx8IGdldERpc3BsYXlNb2RlKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpIDogXCJWYWx1ZVwiO1xuXHRsZXQgb0JpbmRpbmdFeHByZXNzaW9uOiBhbnk7XG5cdHN3aXRjaCAoc0Rpc3BsYXlNb2RlKSB7XG5cdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRvQmluZGluZ0V4cHJlc3Npb24gPSBvRGVzY3JpcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0b0JpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KFtvRm9ybWF0dGVkVmFsdWUsIG9EZXNjcmlwdGlvbl0sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChbb0Rlc2NyaXB0aW9uLCBvRm9ybWF0dGVkVmFsdWVdLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRpZiAob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lKSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IGdldEJpbmRpbmdXaXRoVGltZXpvbmUob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCwgb0Zvcm1hdHRlZFZhbHVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9CaW5kaW5nRXhwcmVzc2lvbiA9IF9jb21wdXRlQmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeShcblx0XHRcdFx0XHRvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0XHRcdG9Gb3JtYXR0ZWRWYWx1ZSxcblx0XHRcdFx0XHRiSGlkZU1lYXN1cmUgfHwgZGF0YVBvaW50Rm9ybWF0T3B0aW9ucz8ubWVhc3VyZURpc3BsYXlNb2RlID09PSBcIkhpZGRlblwiXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9CaW5kaW5nRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgX2NvbXB1dGVCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5ID0gKFxuXHRwcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZvcm1hdHRlZFZhbHVlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0aGlkZU1lYXN1cmU6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+ID0+IHtcblx0aWYgKFxuXHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCB8fFxuXHRcdHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3lcblx0KSB7XG5cdFx0aWYgKGhpZGVNZWFzdXJlICYmIGhhc1N0YXRpY1BlcmNlbnRVbml0KHByb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpKSB7XG5cdFx0XHRyZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG5cdFx0fVxuXHRcdHJldHVybiBnZXRCaW5kaW5nV2l0aFVuaXRPckN1cnJlbmN5KFxuXHRcdFx0cHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0Zm9ybWF0dGVkVmFsdWUsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRoaWRlTWVhc3VyZSA/IHsgc2hvd01lYXN1cmU6IGZhbHNlIH0gOiB1bmRlZmluZWRcblx0XHQpO1xuXHR9XG5cdHJldHVybiBmb3JtYXR0ZWRWYWx1ZTtcbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIGNhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZSB2YWx1ZSBvZiBQcm9ncmVzcyBJbmRpY2F0b3IuIEJhc2ljIGZvcm11bGEgaXMgVmFsdWUvVGFyZ2V0ICogMTAwLlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbiBiaW5kaW5nIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlIHZhbHVlLCB3aGljaCBpcyBzaG93biBpbiB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGJhc2VkIG9uIHRoZSBmb3JtdWxhIGdpdmVuIGFib3ZlLlxuICovXG5leHBvcnQgY29uc3QgYnVpbGRFeHByZXNzaW9uRm9yUHJvZ3Jlc3NJbmRpY2F0b3JQZXJjZW50VmFsdWUgPSAob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IGZpZWxkVmFsdWUgPSBvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/LlZhbHVlIHx8IFwiXCI7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBmaWVsZFZhbHVlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZFZhbHVlLCByZWxhdGl2ZUxvY2F0aW9uKTtcblx0Y29uc3QgVGFyZ2V0RXhwcmVzc2lvbiA9IGdldERhdGFQb2ludFRhcmdldEV4cHJlc3Npb24ob1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpO1xuXG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBmaWVsZFZhbHVlLiR0YXJnZXQgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHVuaXQgPSBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCB8fCBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3k7XG5cdGlmICh1bml0KSB7XG5cdFx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID0gKHVuaXQgYXMgYW55KS4kdGFyZ2V0XG5cdFx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24oXG5cdFx0XHRcdFx0KHVuaXQgYXMgYW55KS4kdGFyZ2V0LFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHRcdFx0ICApXG5cdFx0XHQ6IChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pO1xuXG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0Zm9ybWF0UmVzdWx0KFtmaWVsZFZhbHVlRXhwcmVzc2lvbiwgVGFyZ2V0RXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgdmFsdWVGb3JtYXR0ZXJzLmNvbXB1dGVQZXJjZW50YWdlKVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0UmVzdWx0KFtmaWVsZFZhbHVlRXhwcmVzc2lvbiwgVGFyZ2V0RXhwcmVzc2lvbiwgXCJcIl0sIHZhbHVlRm9ybWF0dGVycy5jb21wdXRlUGVyY2VudGFnZSkpO1xufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXNCQSxJQUFNQSx1Q0FBdUMsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDO0VBTzNGLElBQU1DLDRCQUE0QixHQUFHLFVBQUNDLGNBQW1CLEVBQXVDO0lBQy9GLE9BQU9BLGNBQWMsYUFBZEEsY0FBYyxlQUFkQSxjQUFjLENBQUVDLFdBQVcsR0FBR0MsMkJBQTJCLENBQUNGLGNBQWMsQ0FBQ0MsV0FBVyxDQUFDLEdBQUdFLHVCQUF1QjtFQUN2SCxDQUFDO0VBRUQsSUFBTUMsY0FBYyxHQUFHQyxHQUFHLENBQUNDLEVBQUUsQ0FBQ0MsT0FBTyxFQUFFLENBQUNDLHdCQUF3QixDQUFDLGVBQWUsQ0FBQztFQUUxRSxJQUFNQywrQ0FBK0MsR0FBRyxVQUM5REMsNEJBQWlELEVBQ1g7SUFBQTtJQUN0QyxJQUFNQyxVQUFVLEdBQUcsQ0FBQUQsNEJBQTRCLGFBQTVCQSw0QkFBNEIsZ0RBQTVCQSw0QkFBNEIsQ0FBRUUsWUFBWSwwREFBMUMsc0JBQTRDQyxLQUFLLEtBQUksRUFBRTtJQUMxRSxJQUFNQyxnQkFBZ0IsR0FBR0MsZ0JBQWdCLENBQUNMLDRCQUE0QixDQUFDO0lBQ3ZFLElBQUlNLG9CQUFvQixHQUFHZCwyQkFBMkIsQ0FBQ1MsVUFBVSxFQUFFRyxnQkFBZ0IsQ0FBUTtJQUMzRixJQUFNRyxnQkFBZ0IsR0FBR2xCLDRCQUE0QixDQUFDVyw0QkFBNEIsQ0FBQ0UsWUFBWSxDQUFRO0lBRXZHLElBQUlJLG9CQUFvQixJQUFJQyxnQkFBZ0IsRUFBRTtNQUFBO01BQzdDLElBQUlMLFlBQVksR0FBR0YsNEJBQTRCLENBQUNFLFlBQVksQ0FBQ0MsS0FBSztNQUNsRSxJQUFJLENB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
|
|
@@ -20,6 +20,8 @@ import {
|
|
|
20
20
|
} from "sap/fe/core/templating/UIFormatters";
|
|
21
21
|
import AnnotationHelper from "sap/ui/model/odata/v4/AnnotationHelper";
|
|
22
22
|
|
|
23
|
+
const typesSupportingNumberOfFractionalDigits = ["Edm.Single", "Edm.Double", "Edm.Decimal"];
|
|
24
|
+
|
|
23
25
|
export type DataPointFormatOptions = Partial<{
|
|
24
26
|
measureDisplayMode: string;
|
|
25
27
|
displayMode: string;
|
|
@@ -127,26 +129,20 @@ const buildExpressionForDescription = (fieldValue: DataModelObjectPath): Binding
|
|
|
127
129
|
return undefined;
|
|
128
130
|
};
|
|
129
131
|
|
|
130
|
-
const
|
|
132
|
+
const getFloatFormat = (
|
|
131
133
|
outExpression: PathInModelExpression<any>,
|
|
132
134
|
fieldValue: any,
|
|
133
|
-
|
|
135
|
+
numberOfFractionalDigits: string
|
|
134
136
|
): BindingToolkitExpression<any> => {
|
|
135
|
-
|
|
136
|
-
outExpression.constraints = {};
|
|
137
|
-
}
|
|
138
|
-
outExpression.constraints = Object.assign(outExpression.constraints, {
|
|
139
|
-
precision: fieldValue.$target.precision,
|
|
140
|
-
scale: sNumberOfFractionalDigits ? sNumberOfFractionalDigits : fieldValue.$target.scale
|
|
141
|
-
});
|
|
142
|
-
// sNumberOfFractionalDigits is only defined in getValueFormatted when NumberOfFractionalDigits is defined.
|
|
137
|
+
// numberOfFractionalDigits is only defined in getValueFormatted when NumberOfFractionalDigits is defined.
|
|
143
138
|
// In that case, we need to instance the preserveDecimals parameter because of a change MDC side
|
|
144
|
-
if (
|
|
139
|
+
if (numberOfFractionalDigits) {
|
|
145
140
|
if (!outExpression.formatOptions) {
|
|
146
141
|
outExpression.formatOptions = {};
|
|
147
142
|
}
|
|
148
143
|
outExpression.formatOptions = Object.assign(outExpression.formatOptions, {
|
|
149
|
-
preserveDecimals: false
|
|
144
|
+
preserveDecimals: false,
|
|
145
|
+
maxFractionDigits: numberOfFractionalDigits
|
|
150
146
|
});
|
|
151
147
|
}
|
|
152
148
|
return outExpression;
|
|
@@ -165,13 +161,10 @@ const getValueFormatted = (
|
|
|
165
161
|
if (sPropertyType && isPathInModelExpression(outExpression)) {
|
|
166
162
|
formatWithTypeInformation(oPropertyDefinition, outExpression);
|
|
167
163
|
outExpression.type = EDM_TYPE_MAPPING[sPropertyType]?.type;
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
outExpression = getDecimalFormat(outExpression, fieldValue, sNumberOfFractionalDigits);
|
|
173
|
-
break;
|
|
174
|
-
default:
|
|
164
|
+
if (typesSupportingNumberOfFractionalDigits.includes(sPropertyType)) {
|
|
165
|
+
// for the listReport, the decimal/single/double fields are formatted by returning a string
|
|
166
|
+
// for the facets of the OP, the decimal/single/double fields are formatted by returning a promise, so we manage all the cases
|
|
167
|
+
outExpression = getFloatFormat(outExpression, fieldValue, sNumberOfFractionalDigits);
|
|
175
168
|
}
|
|
176
169
|
}
|
|
177
170
|
|
|
@@ -185,17 +178,17 @@ export const buildFieldBindingExpression = (
|
|
|
185
178
|
): CompiledBindingToolkitExpression => {
|
|
186
179
|
const oDataPoint = oDataModelPath.targetObject;
|
|
187
180
|
const oDataPointValue = oDataPoint?.Value || "";
|
|
188
|
-
const
|
|
189
|
-
let
|
|
181
|
+
const propertyType = oDataPointValue?.$target?.type;
|
|
182
|
+
let numberOfFractionalDigits;
|
|
190
183
|
|
|
191
|
-
if (
|
|
184
|
+
if (typesSupportingNumberOfFractionalDigits.includes(propertyType) && oDataPoint.ValueFormat) {
|
|
192
185
|
if (oDataPoint.ValueFormat.NumberOfFractionalDigits) {
|
|
193
|
-
|
|
186
|
+
numberOfFractionalDigits = oDataPoint.ValueFormat.NumberOfFractionalDigits;
|
|
194
187
|
}
|
|
195
188
|
}
|
|
196
189
|
const oPropertyDataModelObjectPath = enhanceDataModelPath(oDataModelPath, oDataPointValue.path);
|
|
197
190
|
const oDescription = oPropertyDataModelObjectPath ? buildExpressionForDescription(oPropertyDataModelObjectPath) : undefined;
|
|
198
|
-
const oFormattedValue = getValueFormatted(oPropertyDataModelObjectPath, oDataPointValue,
|
|
191
|
+
const oFormattedValue = getValueFormatted(oPropertyDataModelObjectPath, oDataPointValue, propertyType, numberOfFractionalDigits);
|
|
199
192
|
const sDisplayMode = oDescription ? dataPointFormatOptions.displayMode || getDisplayMode(oPropertyDataModelObjectPath) : "Value";
|
|
200
193
|
let oBindingExpression: any;
|
|
201
194
|
switch (sDisplayMode) {
|
|
@@ -29,7 +29,7 @@ sap.ui.define(["sap/fe/core/library", "sap/fe/macros/filter/type/MultiValue", "s
|
|
|
29
29
|
controls: [],
|
|
30
30
|
elements: [],
|
|
31
31
|
// eslint-disable-next-line no-template-curly-in-string
|
|
32
|
-
version: "1.108.
|
|
32
|
+
version: "1.108.17",
|
|
33
33
|
noLibraryCSS: true
|
|
34
34
|
});
|
|
35
35
|
thisLib.NavigationType = {
|
|
@@ -27,7 +27,7 @@ C_DRAFT_EDIT_STATE_DRAFT_LOCKED_FILTER=\u0417\u0430\u043A\u043B\u044E\u0447\u043
|
|
|
27
27
|
|
|
28
28
|
C_DRAFT_EDIT_STATE_DRAFT_UNSAVED_CHANGES_FILTER=\u041D\u0435\u0437\u0430\u043F\u0430\u0437\u0435\u043D\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u0438 \u043E\u0442 \u0434\u0440\u0443\u0433 \u043F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B
|
|
29
29
|
|
|
30
|
-
C_DRAFT_EDIT_STATE_DRAFT_ALL_HIDING_DRAFTS_FILTER=\u0412\u0441\u0438\u0447\u043A\u0438 (\u0441\u043A\u0440\u0438\u0432\u0430\u043D\u0435 \u043D\u0430 \u0447\u0435\u0440\u043D\u043E\u0432\u0438)
|
|
30
|
+
C_DRAFT_EDIT_STATE_DRAFT_ALL_HIDING_DRAFTS_FILTER=\u0412\u0441\u0438\u0447\u043A\u0438 (\u0441\u043A\u0440\u0438\u0432\u0430\u043D\u0435 \u043D\u0430 \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u0442\u0435)
|
|
31
31
|
|
|
32
32
|
C_DRAFT_EDIT_STATE_DRAFT_MY_DRAFTS_FILTER=\u041C\u043E\u0438\u0442\u0435 \u0447\u0435\u0440\u043D\u043E\u0432\u0438
|
|
33
33
|
|
|
@@ -25,7 +25,7 @@ C_DRAFT_EDIT_STATE_DRAFT_OWN_DRAFT_FILTER=Eget utkast
|
|
|
25
25
|
|
|
26
26
|
C_DRAFT_EDIT_STATE_DRAFT_LOCKED_FILTER=Sperret av annen bruker
|
|
27
27
|
|
|
28
|
-
C_DRAFT_EDIT_STATE_DRAFT_UNSAVED_CHANGES_FILTER=
|
|
28
|
+
C_DRAFT_EDIT_STATE_DRAFT_UNSAVED_CHANGES_FILTER=Ulagrede endringer gjort av annen bruker
|
|
29
29
|
|
|
30
30
|
C_DRAFT_EDIT_STATE_DRAFT_ALL_HIDING_DRAFTS_FILTER=Alle (skjuler utkast)
|
|
31
31
|
|
|
@@ -80,7 +80,7 @@ M_KEYBOARD_SHORTCUT_DELETE_ROW_WIN=Ctrl+D
|
|
|
80
80
|
|
|
81
81
|
M_KEYBOARD_SHORTCUT_DELETE_ROW_MAC=Cmd+D
|
|
82
82
|
|
|
83
|
-
M_TABLE_AND_CHART_NO_DATA_TEXT_MULTI_VIEW=Det finnes ingen elementer for
|
|
83
|
+
M_TABLE_AND_CHART_NO_DATA_TEXT_MULTI_VIEW=Det finnes ingen elementer for filterkriteriene og visningen som er valgt.
|
|
84
84
|
|
|
85
85
|
M_TABLE_AND_CHART_NO_FILTERS_NO_DATA_TEXT=Det finnes ingen elementer.
|
|
86
86
|
|
|
@@ -25,7 +25,7 @@ C_DRAFT_EDIT_STATE_DRAFT_OWN_DRAFT_FILTER=W\u0142asna wersja robocza
|
|
|
25
25
|
|
|
26
26
|
C_DRAFT_EDIT_STATE_DRAFT_LOCKED_FILTER=Zablokowane przez innego u\u017Cytkownika
|
|
27
27
|
|
|
28
|
-
C_DRAFT_EDIT_STATE_DRAFT_UNSAVED_CHANGES_FILTER=
|
|
28
|
+
C_DRAFT_EDIT_STATE_DRAFT_UNSAVED_CHANGES_FILTER=Niezapisane zmiany innego u\u017Cytkownika
|
|
29
29
|
|
|
30
30
|
C_DRAFT_EDIT_STATE_DRAFT_ALL_HIDING_DRAFTS_FILTER=Wszystkie (ukrywanie wersji roboczych)
|
|
31
31
|
|
|
@@ -80,7 +80,7 @@ M_KEYBOARD_SHORTCUT_DELETE_ROW_WIN=CTRL+D
|
|
|
80
80
|
|
|
81
81
|
M_KEYBOARD_SHORTCUT_DELETE_ROW_MAC=CMD+D
|
|
82
82
|
|
|
83
|
-
M_TABLE_AND_CHART_NO_DATA_TEXT_MULTI_VIEW=\u0E44\u0E21\u0E48\u0E21\u0E35\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E40\u0E01\u0E13\u0E11\u0E4C\u0E1F\u0E34\u0E25\u0E40\u0E15\u0E2D\u0E23\u0E4C\u0E17\u0E35\u0E48\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E41\u0E25\u0E30\u0E21\u0E38\u0E21\u0E21\u0E2D\u0E07
|
|
83
|
+
M_TABLE_AND_CHART_NO_DATA_TEXT_MULTI_VIEW=\u0E44\u0E21\u0E48\u0E21\u0E35\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E40\u0E01\u0E13\u0E11\u0E4C\u0E1F\u0E34\u0E25\u0E40\u0E15\u0E2D\u0E23\u0E4C\u0E17\u0E35\u0E48\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E41\u0E25\u0E30\u0E21\u0E38\u0E21\u0E21\u0E2D\u0E07
|
|
84
84
|
|
|
85
85
|
M_TABLE_AND_CHART_NO_FILTERS_NO_DATA_TEXT=\u0E44\u0E21\u0E48\u0E21\u0E35\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23
|
|
86
86
|
|
|
@@ -122,7 +122,7 @@ M_VISUAL_FILTER_NO_DATA_TEXT=\u0E44\u0E21\u0E48\u0E1E\u0E1A\u0E02\u0E49\u0E2D\u0
|
|
|
122
122
|
|
|
123
123
|
M_VISUAL_FILTERS_ERROR_MESSAGE_TITLE=\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E41\u0E2A\u0E14\u0E07\u0E1F\u0E34\u0E25\u0E40\u0E15\u0E2D\u0E23\u0E4C
|
|
124
124
|
|
|
125
|
-
M_VISUAL_FILTER_LINE_CHART_INVALID_DATATYPE=\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07
|
|
125
|
+
M_VISUAL_FILTER_LINE_CHART_INVALID_DATATYPE=\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07
|
|
126
126
|
|
|
127
127
|
M_COMMON_SAPFE_ACTION_SHARE=\u0E41\u0E0A\u0E23\u0E4C
|
|
128
128
|
|
|
@@ -157,7 +157,7 @@ back=\u0E22\u0E49\u0E2D\u0E19\u0E01\u0E25\u0E31\u0E1A
|
|
|
157
157
|
|
|
158
158
|
situation=\u0E2A\u0E16\u0E32\u0E19\u0E01\u0E32\u0E23\u0E13\u0E4C
|
|
159
159
|
|
|
160
|
-
situationsTooltipSingular=\u0E21\u0E35\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E2A\u0E16\u0E32\u0E19\u0E01\u0E32\u0E23\u0E13\u0E4C\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E19\u0E35\u0E49
|
|
160
|
+
situationsTooltipSingular=\u0E21\u0E35\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E2A\u0E16\u0E32\u0E19\u0E01\u0E32\u0E23\u0E13\u0E4C\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E19\u0E35\u0E49
|
|
161
161
|
|
|
162
162
|
situationsTooltipPlural=\u0E21\u0E35 {0} \u0E2A\u0E16\u0E32\u0E19\u0E01\u0E32\u0E23\u0E13\u0E4C\u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E19\u0E35\u0E49
|
|
163
163
|
|
|
@@ -33,7 +33,7 @@ C_DRAFT_EDIT_STATE_DRAFT_MY_DRAFTS_FILTER=\u041C\u043E\u0457 \u0447\u0435\u0440\
|
|
|
33
33
|
|
|
34
34
|
C_DRAFT_EDIT_STATE_DRAFT_SAVED_ONLY_FILTER=\u041B\u0438\u0448\u0435 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u0456 \u0432\u0435\u0440\u0441\u0456\u0457
|
|
35
35
|
|
|
36
|
-
M_DATAFIELD_FRAGMENT_FIELD_PREVIEW=\u0412\u0456\u0434\u043E\u0431\u0440
|
|
36
|
+
M_DATAFIELD_FRAGMENT_FIELD_PREVIEW=\u0412\u0456\u0434\u043E\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442
|
|
37
37
|
|
|
38
38
|
M_FILTERBAR_SEARCH=\u041F\u043E\u0448\u0443\u043A
|
|
39
39
|
|
|
@@ -102,7 +102,7 @@ M_INTERACTIVE_CHART_HELPER_VISUALFILTER_TOOLTIP_SEPERATOR=\u0443
|
|
|
102
102
|
|
|
103
103
|
M_TABLE_GROUP_HEADER_TITLE={0}\: {1}
|
|
104
104
|
|
|
105
|
-
M_VISUAL_FILTERS_ERROR_DATA_TEXT=\u041D\u0435\
|
|
105
|
+
M_VISUAL_FILTERS_ERROR_DATA_TEXT=\u041D\u0435 \u0432\u0434\u0430\u0454\u0442\u044C\u0441\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0434\u0430\u043D\u0456 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0445\u043D\u0456\u0447\u043D\u0443 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0443.
|
|
106
106
|
|
|
107
107
|
M_VISUAL_FILTERS_PROVIDE_FILTER_VAL_SINGLEVF=\u041D\u0430\u0434\u0430\u0442\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0444\u0456\u043B\u044C\u0442\u0440\u0430 \u0434\u043B\u044F {0}
|
|
108
108
|
|
|
@@ -318,42 +318,68 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
|
|
|
318
318
|
oInternalModel.setProperty("filteredMessages", aFilteredMessages, oDataStateIndicator.getBindingContext("internal"));
|
|
319
319
|
}
|
|
320
320
|
};
|
|
321
|
-
TableAPI.updateExportSettings = function updateExportSettings(
|
|
322
|
-
var
|
|
321
|
+
TableAPI.updateExportSettings = function updateExportSettings(exportSettings, columns, tableController, isSplitMode) {
|
|
322
|
+
var _exportSettings$workb;
|
|
323
323
|
var refColumn = null;
|
|
324
324
|
var additionalPropertyIndex;
|
|
325
325
|
|
|
326
326
|
//Set static sizeLimit during export
|
|
327
|
-
|
|
328
|
-
var
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
var oResourceModel = sap.ui.getCore().getLibraryResourceBundle("sap.fe.macros");
|
|
334
|
-
oColumnExport.falseValue = oResourceModel.getText("no");
|
|
335
|
-
oColumnExport.trueValue = oResourceModel.getText("yes");
|
|
336
|
-
}
|
|
337
|
-
oColumns === null || oColumns === void 0 ? void 0 : oColumns.forEach(function (column) {
|
|
338
|
-
var oColumn = column;
|
|
327
|
+
exportSettings.dataSource.sizeLimit = 1000;
|
|
328
|
+
var exportColumns = (_exportSettings$workb = exportSettings.workbook) === null || _exportSettings$workb === void 0 ? void 0 : _exportSettings$workb.columns;
|
|
329
|
+
exportColumns.forEach(function (columnExport) {
|
|
330
|
+
columnExport.label = DelegateUtil.getLocalizedText(columnExport.label, tableController);
|
|
331
|
+
columns === null || columns === void 0 ? void 0 : columns.forEach(function (col) {
|
|
332
|
+
var column = col;
|
|
339
333
|
if (isSplitMode) {
|
|
340
334
|
var _refColumn;
|
|
341
335
|
//Add TargetValue on dummy created property when exporting on split mode
|
|
342
|
-
if (
|
|
343
|
-
|
|
336
|
+
if (column.isDataPointFakeTargetProperty && column.relativePath === columnExport.property) {
|
|
337
|
+
columnExport.property = [columnExport.property];
|
|
344
338
|
}
|
|
345
339
|
// Modify duplicate labels from splitted columns
|
|
346
|
-
var regex = /(.*)-additionalProperty(\d+)/.exec(
|
|
340
|
+
var regex = /(.*)-additionalProperty(\d+)/.exec(columnExport.columnId);
|
|
347
341
|
if (regex === null) {
|
|
348
342
|
additionalPropertyIndex = 1;
|
|
349
|
-
refColumn =
|
|
343
|
+
refColumn = columnExport;
|
|
350
344
|
} else if (regex[1] === ((_refColumn = refColumn) === null || _refColumn === void 0 ? void 0 : _refColumn.columnId)) {
|
|
351
|
-
|
|
345
|
+
columnExport.label = columnExport.label === refColumn.label ? "".concat(refColumn.label, " (").concat(++additionalPropertyIndex, ")") : columnExport.label;
|
|
352
346
|
}
|
|
353
347
|
}
|
|
348
|
+
TableAPI.updateExportTypeOnTextOnlyProperties(column, columnExport, columns);
|
|
354
349
|
});
|
|
350
|
+
//translate boolean values
|
|
351
|
+
if (columnExport.type === "Boolean") {
|
|
352
|
+
var resourceModel = sap.ui.getCore().getLibraryResourceBundle("sap.fe.macros");
|
|
353
|
+
columnExport.falseValue = resourceModel.getText("no");
|
|
354
|
+
columnExport.trueValue = resourceModel.getText("yes");
|
|
355
|
+
}
|
|
355
356
|
});
|
|
356
|
-
return
|
|
357
|
+
return exportSettings;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Update the export type of the column in case there is only one child property to use the export type of the child property.
|
|
362
|
+
*
|
|
363
|
+
* @param column Column from table converter
|
|
364
|
+
* @param columnExport Column to be exported
|
|
365
|
+
* @param annotationColumns Column list from the table converter
|
|
366
|
+
* @private
|
|
367
|
+
*/;
|
|
368
|
+
TableAPI.updateExportTypeOnTextOnlyProperties = function updateExportTypeOnTextOnlyProperties(column, columnExport, annotationColumns) {
|
|
369
|
+
var _column$propertyInfos;
|
|
370
|
+
// This applies to the text only annotation, use the export type of the text property instead of the value.
|
|
371
|
+
// There are 3 columns to be considered to update the export type on the child property
|
|
372
|
+
if (((_column$propertyInfos = column.propertyInfos) === null || _column$propertyInfos === void 0 ? void 0 : _column$propertyInfos.length) === 1 && columnExport.property.length === 1 && column.propertyInfos[0] === columnExport.property[0]) {
|
|
373
|
+
var _exportSettings;
|
|
374
|
+
// First column considered as complex and pointing to a single child property
|
|
375
|
+
var columnFromAnnotationColumns = annotationColumns.find(
|
|
376
|
+
// Second column referenced as a child property from the found complex column
|
|
377
|
+
function (col) {
|
|
378
|
+
return col.relativePath === columnExport.property[0];
|
|
379
|
+
});
|
|
380
|
+
// Assign to the column to be exported (third column), the property type of the child property
|
|
381
|
+
columnExport.type = columnFromAnnotationColumns === null || columnFromAnnotationColumns === void 0 ? void 0 : (_exportSettings = columnFromAnnotationColumns.exportSettings) === null || _exportSettings === void 0 ? void 0 : _exportSettings.type;
|
|
382
|
+
}
|
|
357
383
|
};
|
|
358
384
|
_proto.resumeBinding = function resumeBinding(bRequestIfNotInitialized) {
|
|
359
385
|
this.setProperty("bindingSuspended", false);
|
|
@@ -717,4 +743,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
|
|
|
717
743
|
}), _applyDecoratedDescriptor(_class2.prototype, "onTableRowPress", [_dec28], Object.getOwnPropertyDescriptor(_class2.prototype, "onTableRowPress"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onInternalDataReceived", [_dec29], Object.getOwnPropertyDescriptor(_class2.prototype, "onInternalDataReceived"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onInternalDataRequested", [_dec30], Object.getOwnPropertyDescriptor(_class2.prototype, "onInternalDataRequested"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPaste", [_dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "onPaste"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeExport", [_dec32], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeExport"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onDataStateChange", [_dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "onDataStateChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onMassEditButtonPressed", [_dec34], Object.getOwnPropertyDescriptor(_class2.prototype, "onMassEditButtonPressed"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onTableSelectionChange", [_dec35], Object.getOwnPropertyDescriptor(_class2.prototype, "onTableSelectionChange"), _class2.prototype)), _class2)) || _class);
|
|
718
744
|
return TableAPI;
|
|
719
745
|
}, false);
|
|
720
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIlRhYmxlQVBJIiwiZGVmaW5lVUk1Q2xhc3MiLCJwcm9wZXJ0eSIsInR5cGUiLCJleHBlY3RlZFR5cGVzIiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImRlZmF1bHRWYWx1ZSIsImV2ZW50IiwieG1sRXZlbnRIYW5kbGVyIiwibVNldHRpbmdzIiwib3RoZXJzIiwidXBkYXRlRmlsdGVyQmFyIiwiY29udGVudCIsImF0dGFjaEV2ZW50Iiwib25UYWJsZVNlbGVjdGlvbkNoYW5nZSIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJhZGRNZXNzYWdlIiwicGFyYW1ldGVycyIsIm1zZ01hbmFnZXIiLCJfZ2V0TWVzc2FnZU1hbmFnZXIiLCJvVGFibGUiLCJvTWVzc2FnZSIsIk1lc3NhZ2UiLCJ0YXJnZXQiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0UmVzb2x2ZWRQYXRoIiwibWVzc2FnZSIsInByb2Nlc3NvciIsImdldE1vZGVsIiwiZGVzY3JpcHRpb24iLCJwZXJzaXN0ZW50IiwiYWRkTWVzc2FnZXMiLCJnZXRJZCIsInJlbW92ZU1lc3NhZ2UiLCJpZCIsIm1lc3NhZ2VzIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZpbmQiLCJyZW1vdmVNZXNzYWdlcyIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiX2dldFJvd0JpbmRpbmciLCJnZXRDb250ZW50IiwiZ2V0Q291bnRzIiwiVGFibGVVdGlscyIsImdldExpc3RCaW5kaW5nRm9yQ291bnQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImJhdGNoR3JvdXBJZCIsImdldFByb3BlcnR5IiwiZGF0YSIsImFkZGl0aW9uYWxGaWx0ZXJzIiwiZ2V0SGlkZGVuRmlsdGVycyIsImlWYWx1ZSIsImdldENvdW50Rm9ybWF0dGVkIiwiY2F0Y2giLCJvblRhYmxlUm93UHJlc3MiLCJvRXZlbnQiLCJvQ29udHJvbGxlciIsIm9Db250ZXh0IiwibVBhcmFtZXRlcnMiLCJpc0luYWN0aXZlIiwiaXNUcmFuc2llbnQiLCJpc0EiLCJfcm91dGluZyIsIm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCIsIm9uSW50ZXJuYWxEYXRhUmVjZWl2ZWQiLCJnZXRQYXJhbWV0ZXIiLCJnZXRDb250cm9sbGVyIiwibWVzc2FnZUhhbmRsZXIiLCJzaG93TWVzc2FnZURpYWxvZyIsIm9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkIiwic2V0UHJvcGVydHkiLCJmaXJlRXZlbnQiLCJnZXRQYXJhbWV0ZXJzIiwib25QYXN0ZSIsInRhYmxlRGVmaW5pdGlvbiIsImNvbnRyb2wiLCJlbmFibGVQYXN0ZSIsImFSYXdQYXN0ZWREYXRhIiwiZ2V0U291cmNlIiwiZ2V0RW5hYmxlUGFzdGUiLCJQYXN0ZUhlbHBlciIsInBhc3RlRGF0YSIsIm9SZXNvdXJjZU1vZGVsIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiTWVzc2FnZUJveCIsImVycm9yIiwiZ2V0VGV4dCIsInRpdGxlIiwib25CZWZvcmVFeHBvcnQiLCJpc1NwbGl0TW9kZSIsInVzZXJFeHBvcnRTZXR0aW5ncyIsInNwbGl0Q2VsbHMiLCJvVGFibGVDb250cm9sbGVyIiwib0V4cG9ydFNldHRpbmdzIiwiZXhwb3J0U2V0dGluZ3MiLCJvVGFibGVDb2x1bW5zIiwiY29sdW1ucyIsInVwZGF0ZUV4cG9ydFNldHRpbmdzIiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwic1RhYmxlQ29udGV4dEJpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsInNUYWJsZVJvd0JpbmRpbmciLCJnZXRUYXJnZXQiLCJvbkRhdGFTdGF0ZUNoYW5nZSIsIm9EYXRhU3RhdGVJbmRpY2F0b3IiLCJhRmlsdGVyZWRNZXNzYWdlcyIsIm9JbnRlcm5hbE1vZGVsIiwib0NvbHVtbnMiLCJyZWZDb2x1bW4iLCJhZGRpdGlvbmFsUHJvcGVydHlJbmRleCIsImRhdGFTb3VyY2UiLCJzaXplTGltaXQiLCJvRXhwb3J0Q29sdW1ucyIsIndvcmtib29rIiwiZm9yRWFjaCIsIm9Db2x1bW5FeHBvcnQiLCJsYWJlbCIsIkRlbGVnYXRlVXRpbCIsImdldExvY2FsaXplZFRleHQiLCJmYWxzZVZhbHVlIiwidHJ1ZVZhbHVlIiwiY29sdW1uIiwib0NvbHVtbiIsImlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5IiwicmVsYXRpdmVQYXRoIiwicmVnZXgiLCJleGVjIiwiY29sdW1uSWQiLCJyZXN1bWVCaW5kaW5nIiwiYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkIiwiZ2V0RGF0YUluaXRpYWxpemVkIiwicmViaW5kIiwicmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHMiLCJvRmlsdGVyQ29udHJvbCIsIkZpbHRlclV0aWxzIiwiZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMiLCJzdXNwZW5kQmluZGluZyIsImludmFsaWRhdGVDb250ZW50Iiwib25NYXNzRWRpdEJ1dHRvblByZXNzZWQiLCJwYWdlQ29udHJvbGxlciIsIm1hc3NFZGl0Iiwib3Blbk1hc3NFZGl0RGlhbG9nIiwiTG9nIiwid2FybmluZyIsImdldFRhYmxlRGVmaW5pdGlvbiIsInRhYmxlIiwiZmlsdGVyQmFyUmVmSWQiLCJnZXRGaWx0ZXJCYXIiLCJnZXRGaWx0ZXIiLCJfc2V0RmlsdGVyQmFyIiwiY29yZSIsInRhYmxlQVBJSWQiLCJ0YWJsZUFQSUxvY2FsSWQiLCJwb3RlbnRpYWxmaWx0ZXJCYXJJZCIsInJlcGxhY2UiLCJSZWdFeHAiLCJmaWx0ZXJCYXIiLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJieUlkIiwic2V0RmlsdGVyIiwiY2hlY2tJZkNvbHVtbkV4aXN0cyIsImFGaWx0ZXJlZENvbHVtbW5zIiwiY29sdW1uTmFtZSIsInNvbWUiLCJzQ29sdW1uTmFtZVZpc2libGUiLCJzVGV4dEFycmFuZ2VtZW50IiwidW5kZWZpbmVkIiwiZ2V0SWRlbnRpZmllckNvbHVtbiIsImhlYWRlckluZm9UaXRsZVBhdGgiLCJoZWFkZXJJbmZvVGl0bGUiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic0N1cnJlbnRFbnRpdHlTZXROYW1lIiwiYVRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJhRmlsdGVyZWRUZWNobmljYWxLZXlzIiwibGVuZ3RoIiwidGVjaG5pY2FsS2V5IiwicHVzaCIsInNlbWFudGljS2V5Q29sdW1ucyIsInNlbWFudGljS2V5cyIsImFWaXNpYmxlQ29sdW1ucyIsImFUYWJsZUNvbHVtbnMiLCJnZXRDb2x1bW5zIiwiZ2V0RGF0YVByb3BlcnR5Iiwib1RleHRBcnJhbmdlbWVudCIsIiRQYXRoIiwic1RleHRQbGFjZW1lbnQiLCIkRW51bU1lbWJlciIsInNldFVwRW1wdHlSb3dzIiwiY3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Nb2RlIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwicFdhaXRUYWJsZVJlbmRlcmVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXREb21SZWYiLCJkZWxlZ2F0ZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsImJJc0luRWRpdE1vZGUiLCJvQmluZGluZyIsImlzUmVzb2x2ZWQiLCJpc0xlbmd0aEZpbmFsIiwic0NvbnRleHRQYXRoIiwiZ2V0Q29udGV4dCIsIm9JbmFjdGl2ZUNvbnRleHQiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJzdGFydHNXaXRoIiwiX2NyZWF0ZUVtcHR5Um93IiwiaUlubGluZUNyZWF0aW9uUm93Q291bnQiLCJpbmxpbmVDcmVhdGlvblJvd0NvdW50IiwiYURhdGEiLCJpIiwiYkF0RW5kIiwiYkluYWN0aXZlIiwib1ZpZXciLCJvSW50ZXJuYWxFZGl0RmxvdyIsIl9lZGl0RmxvdyIsImNyZWF0aW5nRW1wdHlSb3dzIiwiY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMiLCJlZGl0RmxvdyIsIm9uQmVmb3JlQ3JlYXRlIiwiYUNvbnRleHRzIiwiY3JlYXRlZCIsIm9FcnJvciIsImNhbmNlbGVkIiwiTWFjcm9BUEkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIFRhYmxlQ29sdW1uLCBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7IENyZWF0aW9uTW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIHByb3BlcnR5LCB4bWxFdmVudEhhbmRsZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBQYXN0ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9QYXN0ZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgRGF0YVN0YXRlSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9wbHVnaW5zL0RhdGFTdGF0ZUluZGljYXRvclwiO1xuaW1wb3J0IFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE1hY3JvQVBJIGZyb20gXCIuLi9NYWNyb0FQSVwiO1xuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBjdXN0b20gYWN0aW9uIHRvIGJlIHVzZWQgaW5zaWRlIHRoZSB0YWJsZSB0b29sYmFyXG4gKlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MudGFibGUuQWN0aW9uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IHtcblx0LyoqXG5cdCAqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBhY3Rpb25cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0a2V5OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGZvciB0aGlzIGFjdGlvblxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHR0ZXh0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIGtleSBvZiBhbm90aGVyIGFjdGlvbiBhbHJlYWR5IGRpc3BsYXllZCBpbiB0aGUgdG9vbGJhciB0byBwcm9wZXJseSBwbGFjZSB0aGlzIG9uZVxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhbmNob3I/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBwbGFjZWQgcmVsYXRpdmUgdG8gdGhlIGRlZmluZWQgYW5jaG9yXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgQmVmb3JlYCBhbmQgYEFmdGVyYFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRwbGFjZW1lbnQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hvb3NlcyB0aGUgYWN0aW9uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHByZXNzOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgaWYgdGhlIGFjdGlvbiByZXF1aXJlcyBhIHNlbGVjdGlvbi5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cmVxdWlyZXNTZWxlY3Rpb24/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhY3Rpb25cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0ZW5hYmxlZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBBY3Rpb25Hcm91cCA9IHtcblx0LyoqXG5cdCAqIERlZmluZXMgbmVzdGVkIGFjdGlvbnNcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YWN0aW9uczogQWN0aW9uW107XG5cblx0LyoqXG5cdCAqIFRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yIHRoaXMgYWN0aW9uIGdyb3VwXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHRleHQ6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGVyZSB0aGlzIGFjdGlvbiBncm91cCBzaG91bGQgYmUgcGxhY2VkIHJlbGF0aXZlIHRvIHRoZSBkZWZpbmVkIGFuY2hvclxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYEJlZm9yZWAgYW5kIGBBZnRlcmBcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cGxhY2VtZW50Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIGtleSBvZiBhbm90aGVyIGFjdGlvbiBvciBhY3Rpb24gZ3JvdXAgYWxyZWFkeSBkaXNwbGF5ZWQgaW4gdGhlIHRvb2xiYXIgdG8gcHJvcGVybHkgcGxhY2UgdGhpcyBvbmVcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YW5jaG9yPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgY3VzdG9tIGNvbHVtbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgdGFibGUuXG4gKlxuICogVGhlIHRlbXBsYXRlIGZvciB0aGUgY29sdW1uIGhhcyB0byBiZSBwcm92aWRlZCBhcyB0aGUgZGVmYXVsdCBhZ2dyZWdhdGlvblxuICpcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLnRhYmxlLkNvbHVtblxuICogQHB1YmxpY1xuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgdHlwZSBDb2x1bW4gPSB7XG5cdC8qKlxuXHQgKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29sdW1uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGtleTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHRleHQgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBmb3IgdGhpcyBjb2x1bW4gaGVhZGVyXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGhlYWRlcjogc3RyaW5nO1xuXHQvKipcblx0ICogUmVmZXJlbmNlIHRvIHRoZSBrZXkgb2YgYW5vdGhlciBjb2x1bW4gYWxyZWFkeSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlIHRvIHByb3Blcmx5IHBsYWNlIHRoaXMgb25lXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFuY2hvcj86IHN0cmluZztcblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIGNvbHVtbiBpbXBvcnRhbmNlXG5cdCAqXG5cdCAqIFlvdSBjYW4gZGVmaW5lIHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIHBvcC1pbiBhcmVhIGJhc2VkIG9uIHRoZWlyIGltcG9ydGFuY2Vcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0aW1wb3J0YW5jZT86IHN0cmluZztcblx0LyoqXG5cdCAqIERlZmluZXMgd2hlcmUgdGhpcyBjb2x1bW4gc2hvdWxkIGJlIHBsYWNlZCByZWxhdGl2ZSB0byB0aGUgZGVmaW5lZCBhbmNob3Jcblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBCZWZvcmVgIGFuZCBgQWZ0ZXJgXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHBsYWNlbWVudD86IHN0cmluZztcbn07XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgdXNlZCB0byBjcmVhdGUgYSB0YWJsZSBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiA8YnI+XG4gKiBVc3VhbGx5LCBhIExpbmVJdGVtIG9yIFByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiBpcyBleHBlY3RlZCwgYnV0IHRoZSBUYWJsZSBidWlsZGluZyBibG9jayBjYW4gYWxzbyBiZSB1c2VkIHRvIGRpc3BsYXkgYW4gRW50aXR5U2V0LlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNybzpUYWJsZSBpZD1cIk15VGFibGVcIiBtZXRhUGF0aD1cIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZVxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpXG5jbGFzcyBUYWJsZUFQSSBleHRlbmRzIE1hY3JvQVBJIHtcblx0Y3JlYXRpbmdFbXB0eVJvd3M/OiBib29sZWFuO1xuXHRjb25zdHJ1Y3RvcihtU2V0dGluZ3M/OiBQcm9wZXJ0aWVzT2Y8VGFibGVBUEk+LCAuLi5vdGhlcnM6IGFueVtdKSB7XG5cdFx0c3VwZXIobVNldHRpbmdzIGFzIGFueSwgLi4ub3RoZXJzKTtcblxuXHRcdHRoaXMudXBkYXRlRmlsdGVyQmFyKCk7XG5cblx0XHRpZiAodGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQuYXR0YWNoRXZlbnQoXCJzZWxlY3Rpb25DaGFuZ2VcIiwge30sIHRoaXMub25UYWJsZVNlbGVjdGlvbkNoYW5nZSwgdGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHByb3BlcnR5IGluIHRoZSBtZXRhbW9kZWwsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRleHRQYXRoLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiXSxcblx0XHRleHBlY3RlZEFubm90YXRpb25zOiBbXG5cdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCIsXG5cdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRcIixcblx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFwiXG5cdFx0XVxuXHR9KVxuXHRtZXRhUGF0aCE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIgfSlcblx0dGFibGVEZWZpbml0aW9uITogVGFibGVWaXN1YWxpemF0aW9uO1xuXG5cdC8qKlxuXHQgKiBBbiBleHByZXNzaW9uIHRoYXQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSAncmVhZC1vbmx5JyBzdGF0ZSBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIElmIHlvdSBkbyBub3Qgc2V0IGFueSBleHByZXNzaW9uLCBTQVAgRmlvcmkgZWxlbWVudHMgaG9va3MgaW50byB0aGUgc3RhbmRhcmQgbGlmZWN5Y2xlIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBzdGF0ZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0cmVhZE9ubHkhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgdGFibGUgY29udHJvbC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogQW4gZXhwcmVzc2lvbiB0aGF0IGFsbG93cyB5b3UgdG8gY29udHJvbCB0aGUgJ2J1c3knIHN0YXRlIG9mIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0YnVzeSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHR5cGUgb2YgdGFibGUgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIGJ1aWxkaW5nIGJsb2NrIHRvIHJlbmRlciB0aGUgZGF0YS5cblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBHcmlkVGFibGVgIGFuZCBgUmVzcG9uc2l2ZVRhYmxlYFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiLCBkZWZhdWx0VmFsdWU6IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfSlcblx0dHlwZSE6IHN0cmluZztcblxuXHQvKipcblx0ICogQ29udHJvbHMgaWYgdGhlIGV4cG9ydCBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0YWJsZSBpcyBlbmFibGVkIG9yIG5vdC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRlbmFibGVFeHBvcnQhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyBpZiB0aGUgcGFzdGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdGFibGUgaXMgZW5hYmxlZCBvciBub3QuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGVuYWJsZVBhc3RlITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQ29udHJvbHMgd2hldGhlciB0aGUgdGFibGUgY2FuIGJlIG9wZW5lZCBpbiBmdWxsc2NyZWVuIG1vZGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRlbmFibGVGdWxsU2NyZWVuITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogSUQgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9jayBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGZpbHRlckJhciE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgc2VsZWN0aW9uIG1vZGUgdG8gYmUgdXNlZCBieSB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgTm9uZWAsIGBTaW5nbGVgLCBgTXVsdGlgIG9yIGBBdXRvYFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHNlbGVjdGlvbk1vZGUhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFNwZWNpZmllcyB0aGUgaGVhZGVyIHRleHQgdGhhdCBpcyBzaG93biBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0aGVhZGVyITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgdGhlIGhlYWRlciB0ZXh0IHRoYXQgaXMgc2hvd24gaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRlbmFibGVBdXRvQ29sdW1uV2lkdGghOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyBpZiB0aGUgaGVhZGVyIHRleHQgc2hvdWxkIGJlIHNob3duIG9yIG5vdC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRoZWFkZXJWaXNpYmxlITogYm9vbGVhbjtcblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGRhdGFJbml0aWFsaXplZCE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRiaW5kaW5nU3VzcGVuZGVkITogYm9vbGVhbjtcblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdG91dERhdGVkQmluZGluZyE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRwZW5kaW5nUmVxdWVzdCE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIGNob29zZXMgYSByb3c7IHRoZSBldmVudCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCByb3cgd2FzIGNob3Nlbi5cblx0ICpcblx0ICogWW91IGNhbiBzZXQgdGhpcyBpbiBvcmRlciB0byBoYW5kbGUgdGhlIG5hdmlnYXRpb24gbWFudWFsbHkuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdHJvd1ByZXNzITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBUYWJsZSBTdGF0ZSBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBZb3UgY2FuIHNldCB0aGlzIGluIG9yZGVyIHRvIHN0b3JlIHRoZSB0YWJsZSBzdGF0ZSBpbiB0aGUgYXBwc3RhdGUuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRzdGF0ZUNoYW5nZSE6IEZ1bmN0aW9uO1xuXG5cdEBldmVudCgpXG5cdGludGVybmFsRGF0YVJlcXVlc3RlZCE6IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyB3aGljaCBvcHRpb25zIHNob3VsZCBiZSBlbmFibGVkIGZvciB0aGUgdGFibGUgcGVyc29uYWxpemF0aW9uIGRpYWxvZy5cblx0ICpcblx0ICogSWYgaXQgaXMgc2V0IHRvIGB0cnVlYCwgYWxsIHBvc3NpYmxlIG9wdGlvbnMgZm9yIHRoaXMga2luZCBvZiB0YWJsZSBhcmUgZW5hYmxlZC48YnIvPlxuXHQgKiBJZiBpdCBpcyBzZXQgdG8gYGZhbHNlYCwgcGVyc29uYWxpemF0aW9uIGlzIGRpc2FibGVkLjxici8+XG5cdCAqPGJyLz5cblx0ICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgZm9yIHRoZSBwZXJzb25hbGl6YXRpb24gYnkgcHJvdmlkaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgd2l0aCB0aGUgb3B0aW9ucyB5b3Ugd2FudCB0byBiZSBhdmFpbGFibGUuPGJyLz5cblx0ICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlOjxici8+XG5cdCAqICAtIFNvcnQ8YnIvPlxuXHQgKiAgLSBDb2x1bW48YnIvPlxuXHQgKiAgLSBGaWx0ZXI8YnIvPlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW58c3RyaW5nXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRwZXJzb25hbGl6YXRpb24hOiBib29sZWFuIHwgc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyB0aGUga2luZCBvZiB2YXJpYW50IG1hbmFnZW1lbnQgdGhhdCBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlIGlzIGBDb250cm9sYC48YnIvPlxuXHQgKiBJZiBzZXQgd2l0aCB2YWx1ZSBgQ29udHJvbGAsIGEgdmFyaWFudCBtYW5hZ2VtZW50IGNvbnRyb2wgaXMgc2VlbiB3aXRoaW4gdGhlIHRhYmxlIGFuZCB0aGUgdGFibGUgaXMgbGlua2VkIHRvIHRoaXMuPGJyLz5cblx0ICogSWYgbm90IHNldCB3aXRoIGFueSB2YWx1ZSwgY29udHJvbCBsZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB0YWJsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHR2YXJpYW50TWFuYWdlbWVudCE6IHN0cmluZztcblxuXHQvKipcblx0ICogR3JvdXBzIG1lbnUgYWN0aW9ucyBieSBrZXkuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0bWVudT86IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIHNlYXJjaCBhY3Rpb24uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IHRydWUgfSlcblx0aXNTZWFyY2hhYmxlPzogYm9vbGVhbjtcblxuXHQvKipcblx0ICogR2V0cyBjb250ZXh0cyBmcm9tIHRoZSB0YWJsZSB0aGF0IGhhdmUgYmVlbiBzZWxlY3RlZCBieSB0aGUgdXNlci5cblx0ICpcblx0ICogQHJldHVybnMgQ29udGV4dHMgb2YgdGhlIHJvd3Mgc2VsZWN0ZWQgYnkgdGhlIHVzZXJcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0U2VsZWN0ZWRDb250ZXh0cygpOiBDb250ZXh0W10ge1xuXHRcdHJldHVybiAodGhpcy5jb250ZW50IGFzIGFueSkuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBtZXNzYWdlIHRvIHRoZSB0YWJsZS5cblx0ICpcblx0ICogVGhlIG1lc3NhZ2UgYXBwbGllcyB0byB0aGUgd2hvbGUgdGFibGUgYW5kIG5vdCB0byBhbiBpbmRpdmlkdWFsIHRhYmxlIHJvdy5cblx0ICpcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzXSBUaGUgcGFyYW1ldGVycyB0byBjcmVhdGUgdGhlIG1lc3NhZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMudHlwZSBNZXNzYWdlIHR5cGVcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMubWVzc2FnZSBNZXNzYWdlIHRleHRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMuZGVzY3JpcHRpb24gTWVzc2FnZSBkZXNjcmlwdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5wZXJzaXN0ZW50IFRydWUgaWYgdGhlIG1lc3NhZ2UgaXMgcGVyc2lzdGVudFxuXHQgKiBAcmV0dXJucyBUaGUgSUQgb2YgdGhlIG1lc3NhZ2Vcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YWRkTWVzc2FnZShwYXJhbWV0ZXJzOiB7IHR5cGU/OiBNZXNzYWdlVHlwZTsgbWVzc2FnZT86IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmc7IHBlcnNpc3RlbnQ/OiBib29sZWFuIH0pOiBzdHJpbmcge1xuXHRcdGNvbnN0IG1zZ01hbmFnZXIgPSB0aGlzLl9nZXRNZXNzYWdlTWFuYWdlcigpO1xuXG5cdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5jb250ZW50IGFzIGFueSBhcyBUYWJsZTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0dGFyZ2V0OiBvVGFibGUuZ2V0Um93QmluZGluZygpLmdldFJlc29sdmVkUGF0aCgpLFxuXHRcdFx0dHlwZTogcGFyYW1ldGVycy50eXBlLFxuXHRcdFx0bWVzc2FnZTogcGFyYW1ldGVycy5tZXNzYWdlLFxuXHRcdFx0cHJvY2Vzc29yOiBvVGFibGUuZ2V0TW9kZWwoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBwYXJhbWV0ZXJzLmRlc2NyaXB0aW9uLFxuXHRcdFx0cGVyc2lzdGVudDogcGFyYW1ldGVycy5wZXJzaXN0ZW50XG5cdFx0fSk7XG5cblx0XHRtc2dNYW5hZ2VyLmFkZE1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRyZXR1cm4gb01lc3NhZ2UuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgbWVzc2FnZSBmcm9tIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgbWVzc2FnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRyZW1vdmVNZXNzYWdlKGlkOiBzdHJpbmcpIHtcblx0XHRjb25zdCBtc2dNYW5hZ2VyID0gdGhpcy5fZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IG1zZ01hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IG1lc3NhZ2VzLmZpbmQoKGU6IGFueSkgPT4gZS5pZCA9PT0gaWQpO1xuXHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdG1zZ01hbmFnZXIucmVtb3ZlTWVzc2FnZXMocmVzdWx0KTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0TWVzc2FnZU1hbmFnZXIoKSB7XG5cdFx0cmV0dXJuIHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRzZWxlY3Rpb25DaGFuZ2UhOiBGdW5jdGlvbjtcblxuXHRfZ2V0Um93QmluZGluZygpIHtcblx0XHRjb25zdCBvVGFibGUgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblx0XHRyZXR1cm4gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdGdldENvdW50cygpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdGNvbnN0IG9UYWJsZSA9ICh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdHJldHVybiBUYWJsZVV0aWxzLmdldExpc3RCaW5kaW5nRm9yQ291bnQob1RhYmxlLCBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoKSwge1xuXHRcdFx0YmF0Y2hHcm91cElkOiAhdGhpcy5nZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIikgPyBvVGFibGUuZGF0YShcImJhdGNoR3JvdXBJZFwiKSA6IFwiJGF1dG9cIixcblx0XHRcdGFkZGl0aW9uYWxGaWx0ZXJzOiBUYWJsZVV0aWxzLmdldEhpZGRlbkZpbHRlcnMob1RhYmxlKVxuXHRcdH0pXG5cdFx0XHQudGhlbigoaVZhbHVlOiBhbnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIFRhYmxlVXRpbHMuZ2V0Q291bnRGb3JtYXR0ZWQoaVZhbHVlKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gXCIwXCI7XG5cdFx0XHR9KTtcblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvblRhYmxlUm93UHJlc3Mob0V2ZW50OiBVSTVFdmVudCwgb0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBvQ29udGV4dDogQ29udGV4dCwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdC8vIHByZXZlbnQgbmF2aWdhdGlvbiB0byBhbiBlbXB0eSByb3dcblx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNJbmFjdGl2ZSgpICYmIG9Db250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Ly8gSW4gdGhlIGNhc2Ugb2YgYW4gYW5hbHl0aWNhbCB0YWJsZSwgaWYgd2UncmUgdHJ5aW5nIHRvIG5hdmlnYXRlIHRvIGEgY29udGV4dCBjb3JyZXNwb25kaW5nIHRvIGEgdmlzdWFsIGdyb3VwIG9yIGdyYW5kIHRvdGFsXG5cdFx0Ly8gLS0+IENhbmNlbCBuYXZpZ2F0aW9uXG5cdFx0aWYgKFxuXHRcdFx0b0NvbnRleHQgJiZcblx0XHRcdG9Db250ZXh0LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCIpICYmXG5cdFx0XHR0eXBlb2Ygb0NvbnRleHQuZ2V0UHJvcGVydHkoXCJAJHVpNS5ub2RlLmlzRXhwYW5kZWRcIikgPT09IFwiYm9vbGVhblwiXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdChvQ29udHJvbGxlciBhcyBhbnkpLl9yb3V0aW5nLm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHRcdH1cblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvbkludGVybmFsRGF0YVJlY2VpdmVkKG9FdmVudDogVUk1RXZlbnQpIHtcblx0XHRpZiAob0V2ZW50LmdldFBhcmFtZXRlcihcImVycm9yXCIpKSB7XG5cdFx0XHR0aGlzLmdldENvbnRyb2xsZXIoKS5tZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZygpO1xuXHRcdH1cblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvbkludGVybmFsRGF0YVJlcXVlc3RlZChvRXZlbnQ6IFVJNUV2ZW50KSB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImRhdGFJbml0aWFsaXplZFwiLCB0cnVlKTtcblx0XHQodGhpcyBhcyBhbnkpLmZpcmVFdmVudChcImludGVybmFsRGF0YVJlcXVlc3RlZFwiLCBvRXZlbnQuZ2V0UGFyYW1ldGVycygpKTtcblx0fVxuXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvblBhc3RlKG9FdmVudDogVUk1RXZlbnQsIG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcikge1xuXHRcdC8vIElmIHBhc3RlIGlzIGRpc2FibGUgb3IgaWYgd2UncmUgbm90IGluIGVkaXQgbW9kZSwgd2UgY2FuJ3QgcGFzdGUgYW55dGhpbmdcblx0XHRpZiAoIXRoaXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlUGFzdGUgfHwgIXRoaXMuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYVJhd1Bhc3RlZERhdGEgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZGF0YVwiKSxcblx0XHRcdG9UYWJsZSA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBUYWJsZTtcblxuXHRcdGlmIChvVGFibGUuZ2V0RW5hYmxlUGFzdGUoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0UGFzdGVIZWxwZXIucGFzdGVEYXRhKGFSYXdQYXN0ZWREYXRhLCBvVGFibGUsIG9Db250cm9sbGVyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb1Jlc291cmNlTW9kZWwgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRcdFx0TWVzc2FnZUJveC5lcnJvcihvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9PUF9DT05UUk9MTEVSX1NBUEZFX1BBU1RFX0RJU0FCTEVEX01FU1NBR0VcIiksIHtcblx0XHRcdFx0dGl0bGU6IG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBldmVudCB3aWxsIGFsbG93IHVzIHRvIGludGVyY2VwdCB0aGUgZXhwb3J0IGJlZm9yZSBpcyB0cmlnZ2VyZWQgdG8gY292ZXIgc3BlY2lmaWMgY2FzZXNcblx0Ly8gdGhhdCBjb3VsZG4ndCBiZSBhZGRyZXNzZWQgb24gdGhlIHByb3BlcnR5SW5mb3MgZm9yIGVhY2ggY29sdW1uLlxuXHQvLyBlLmcuIEZpeGVkIFRhcmdldCBWYWx1ZSBmb3IgdGhlIGRhdGFwb2ludHNcblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uQmVmb3JlRXhwb3J0KG9FdmVudDogVUk1RXZlbnQpIHtcblx0XHRjb25zdCBpc1NwbGl0TW9kZSA9IChvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIGFueSkudXNlckV4cG9ydFNldHRpbmdzLnNwbGl0Q2VsbHMsXG5cdFx0XHRvVGFibGVDb250cm9sbGVyID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b0V4cG9ydFNldHRpbmdzID0gKG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgYW55KS5leHBvcnRTZXR0aW5ncyxcblx0XHRcdG9UYWJsZUNvbHVtbnMgPSB0aGlzLnRhYmxlRGVmaW5pdGlvbi5jb2x1bW5zO1xuXG5cdFx0VGFibGVBUEkudXBkYXRlRXhwb3J0U2V0dGluZ3Mob0V4cG9ydFNldHRpbmdzLCBvVGFibGVDb2x1bW5zLCBvVGFibGVDb250cm9sbGVyLCBpc1NwbGl0TW9kZSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgTURDIERhdGFTdGF0ZUluZGljYXRvciBwbHVnaW4gdG8gZGlzcGxheSBtZXNzYWdlU3RyaXAgb24gYSB0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIG9NZXNzYWdlXG5cdCAqIEBwYXJhbSBvVGFibGVcblx0ICogQG5hbWUgZGF0YVN0YXRlRmlsdGVyXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdG8gcmVuZGVyIHZpc2libGUgdGhlIG1lc3NhZ2VTdHJpcFxuXHQgKi9cblx0c3RhdGljIGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcihvTWVzc2FnZTogYW55LCBvVGFibGU6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHNUYWJsZUNvbnRleHRCaW5kaW5nUGF0aCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgc1RhYmxlUm93QmluZGluZyA9IChzVGFibGVDb250ZXh0QmluZGluZ1BhdGggPyBgJHtzVGFibGVDb250ZXh0QmluZGluZ1BhdGh9L2AgOiBcIlwiKSArIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBzVGFibGVSb3dCaW5kaW5nID09PSBvTWVzc2FnZS5nZXRUYXJnZXQoKSA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGV2ZW50IGhhbmRsZXMgdGhlIERhdGFTdGF0ZSBvZiB0aGUgRGF0YVN0YXRlSW5kaWNhdG9yIHBsdWdpbiBmcm9tIE1EQyBvbiBhIHRhYmxlLlxuXHQgKiBJdCdzIGZpcmVkIHdoZW4gbmV3IGVycm9yIG1lc3NhZ2VzIGFyZSBzZW50IGZyb20gdGhlIGJhY2tlbmQgdG8gdXBkYXRlIHJvdyBoaWdobGlnaHRpbmcuXG5cdCAqXG5cdCAqIEBuYW1lIG9uRGF0YVN0YXRlQ2hhbmdlXG5cdCAqIEBwYXJhbSBvRXZlbnQgRXZlbnQgb2JqZWN0XG5cdCAqL1xuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25EYXRhU3RhdGVDaGFuZ2Uob0V2ZW50OiBVSTVFdmVudCkge1xuXHRcdGNvbnN0IG9EYXRhU3RhdGVJbmRpY2F0b3IgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgRGF0YVN0YXRlSW5kaWNhdG9yO1xuXHRcdGNvbnN0IGFGaWx0ZXJlZE1lc3NhZ2VzID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImZpbHRlcmVkTWVzc2FnZXNcIik7XG5cdFx0aWYgKGFGaWx0ZXJlZE1lc3NhZ2VzKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbCA9IG9EYXRhU3RhdGVJbmRpY2F0b3IuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcImZpbHRlcmVkTWVzc2FnZXNcIiwgYUZpbHRlcmVkTWVzc2FnZXMsIG9EYXRhU3RhdGVJbmRpY2F0b3IuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBDb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgdXBkYXRlRXhwb3J0U2V0dGluZ3MoXG5cdFx0b0V4cG9ydFNldHRpbmdzOiBhbnksXG5cdFx0b0NvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdFx0b1RhYmxlQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdFx0aXNTcGxpdE1vZGU6IGJvb2xlYW5cblx0KTogYW55IHtcblx0XHRsZXQgcmVmQ29sdW1uOiBhbnkgPSBudWxsO1xuXHRcdGxldCBhZGRpdGlvbmFsUHJvcGVydHlJbmRleDogbnVtYmVyO1xuXG5cdFx0Ly9TZXQgc3RhdGljIHNpemVMaW1pdCBkdXJpbmcgZXhwb3J0XG5cdFx0b0V4cG9ydFNldHRpbmdzLmRhdGFTb3VyY2Uuc2l6ZUxpbWl0ID0gMTAwMDtcblxuXHRcdGNvbnN0IG9FeHBvcnRDb2x1bW5zID0gb0V4cG9ydFNldHRpbmdzLndvcmtib29rPy5jb2x1bW5zO1xuXHRcdG9FeHBvcnRDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW5FeHBvcnQ6IGFueSkge1xuXHRcdFx0b0NvbHVtbkV4cG9ydC5sYWJlbCA9IERlbGVnYXRlVXRpbC5nZXRMb2NhbGl6ZWRUZXh0KG9Db2x1bW5FeHBvcnQubGFiZWwsIG9UYWJsZUNvbnRyb2xsZXIpO1xuXHRcdFx0Ly90cmFuc2xhdGUgYm9vbGVhbiB2YWx1ZXNcblx0XHRcdGlmIChvQ29sdW1uRXhwb3J0LnR5cGUgPT09IFwiQm9vbGVhblwiKSB7XG5cdFx0XHRcdGNvbnN0IG9SZXNvdXJjZU1vZGVsID0gc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUubWFjcm9zXCIpO1xuXHRcdFx0XHRvQ29sdW1uRXhwb3J0LmZhbHNlVmFsdWUgPSBvUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwibm9cIik7XG5cdFx0XHRcdG9Db2x1bW5FeHBvcnQudHJ1ZVZhbHVlID0gb1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcInllc1wiKTtcblx0XHRcdH1cblx0XHRcdG9Db2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pID0+IHtcblx0XHRcdFx0Y29uc3Qgb0NvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0XHRcdGlmIChpc1NwbGl0TW9kZSkge1xuXHRcdFx0XHRcdC8vQWRkIFRhcmdldFZhbHVlIG9uIGR1bW15IGNyZWF0ZWQgcHJvcGVydHkgd2hlbiBleHBvcnRpbmcgb24gc3BsaXQgbW9kZVxuXHRcdFx0XHRcdGlmIChvQ29sdW1uLmlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5ICYmIG9Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBvQ29sdW1uRXhwb3J0LnByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRvQ29sdW1uRXhwb3J0LnByb3BlcnR5ID0gW29Db2x1bW5FeHBvcnQucHJvcGVydHldO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBNb2RpZnkgZHVwbGljYXRlIGxhYmVscyBmcm9tIHNwbGl0dGVkIGNvbHVtbnNcblx0XHRcdFx0XHRjb25zdCByZWdleCA9IC8oLiopLWFkZGl0aW9uYWxQcm9wZXJ0eShcXGQrKS8uZXhlYyhvQ29sdW1uRXhwb3J0LmNvbHVtbklkKTtcblx0XHRcdFx0XHRpZiAocmVnZXggPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eUluZGV4ID0gMTtcblx0XHRcdFx0XHRcdHJlZkNvbHVtbiA9IG9Db2x1bW5FeHBvcnQ7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChyZWdleFsxXSA9PT0gcmVmQ29sdW1uPy5jb2x1bW5JZCkge1xuXHRcdFx0XHRcdFx0b0NvbHVtbkV4cG9ydC5sYWJlbCA9XG5cdFx0XHRcdFx0XHRcdG9Db2x1bW5FeHBvcnQubGFiZWwgPT09IHJlZkNvbHVtbi5sYWJlbFxuXHRcdFx0XHRcdFx0XHRcdD8gYCR7cmVmQ29sdW1uLmxhYmVsfSAoJHsrK2FkZGl0aW9uYWxQcm9wZXJ0eUluZGV4fSlgXG5cdFx0XHRcdFx0XHRcdFx0OiBvQ29sdW1uRXhwb3J0LmxhYmVsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9FeHBvcnRTZXR0aW5ncztcblx0fVxuXG5cdHJlc3VtZUJpbmRpbmcoYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkOiBib29sZWFuKSB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImJpbmRpbmdTdXNwZW5kZWRcIiwgZmFsc2UpO1xuXHRcdGlmICgoYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkICYmICEodGhpcyBhcyBhbnkpLmdldERhdGFJbml0aWFsaXplZCgpKSB8fCB0aGlzLmdldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIpKSB7XG5cdFx0XHR0aGlzLnNldFByb3BlcnR5KFwib3V0RGF0ZWRCaW5kaW5nXCIsIGZhbHNlKTtcblx0XHRcdCh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpPy5yZWJpbmQoKTtcblx0XHR9XG5cdH1cblxuXHRyZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkcyhvRmlsdGVyQ29udHJvbDogQ29udHJvbCk6IGFueVtdIHtcblx0XHRjb25zdCBvVGFibGUgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblx0XHRyZXR1cm4gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckNvbnRyb2wsIG9UYWJsZSk7XG5cdH1cblxuXHRzdXNwZW5kQmluZGluZygpIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiLCB0cnVlKTtcblx0fVxuXG5cdGludmFsaWRhdGVDb250ZW50KCkge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJkYXRhSW5pdGlhbGl6ZWRcIiwgZmFsc2UpO1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgZmFsc2UpO1xuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uTWFzc0VkaXRCdXR0b25QcmVzc2VkKG9FdmVudDogVUk1RXZlbnQsIHBhZ2VDb250cm9sbGVyOiBhbnkpIHtcblx0XHRjb25zdCBvVGFibGUgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0aWYgKHBhZ2VDb250cm9sbGVyICYmIHBhZ2VDb250cm9sbGVyLm1hc3NFZGl0KSB7XG5cdFx0XHRwYWdlQ29udHJvbGxlci5tYXNzRWRpdC5vcGVuTWFzc0VkaXREaWFsb2cob1RhYmxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJUaGUgQ29udHJvbGxlciBpcyBub3QgZW5oYW5jZWQgd2l0aCBNYXNzIEVkaXQgZnVuY3Rpb25hbGl0eVwiKTtcblx0XHR9XG5cdH1cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uVGFibGVTZWxlY3Rpb25DaGFuZ2Uob0V2ZW50OiBVSTVFdmVudCkge1xuXHRcdHRoaXMuZmlyZUV2ZW50KFwic2VsZWN0aW9uQ2hhbmdlXCIsIG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4cG9zZSB0aGUgaW50ZXJuYWwgdGFibGUgZGVmaW5pdGlvbiBmb3IgZXh0ZXJuYWwgdXNhZ2UgaW4gZGVsZWdhdGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSB0YWJsZURlZmluaXRpb25cblx0ICovXG5cdGdldFRhYmxlRGVmaW5pdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy50YWJsZURlZmluaXRpb247XG5cdH1cblxuXHQvKipcblx0ICogY29ubmVjdCB0aGUgZmlsdGVyIHRvIHRoZSB0YWJsZUFQSSBpZiByZXF1aXJlZFxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZUFQSVxuXHQgKi9cblxuXHR1cGRhdGVGaWx0ZXJCYXIoKSB7XG5cdFx0Y29uc3QgdGFibGUgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblx0XHRjb25zdCBmaWx0ZXJCYXJSZWZJZCA9ICh0aGlzIGFzIGFueSkuZ2V0RmlsdGVyQmFyKCk7XG5cdFx0aWYgKHRhYmxlICYmIGZpbHRlckJhclJlZklkICYmIHRhYmxlLmdldEZpbHRlcigpICE9PSBmaWx0ZXJCYXJSZWZJZCkge1xuXHRcdFx0dGhpcy5fc2V0RmlsdGVyQmFyKGZpbHRlckJhclJlZklkKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZmlsdGVyIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBmaWx0ZXJCYXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXJSZWZJZCBJZCBvZiB0aGUgZmlsdGVyIGJhclxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5UYWJsZUFQSVxuXHQgKi9cblx0X3NldEZpbHRlckJhcihmaWx0ZXJCYXJSZWZJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgdGFibGUgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblx0XHRjb25zdCBjb3JlID0gc2FwLnVpLmdldENvcmUoKTtcblxuXHRcdC8vICdmaWx0ZXJCYXInIHByb3BlcnR5IG9mIG1hY3JvOlRhYmxlKHBhc3NlZCBhcyBjdXN0b21EYXRhKSBtaWdodCBiZVxuXHRcdC8vIDEuIEEgbG9jYWxJZCB3cnQgVmlldyhGUE0gZXhwbG9yZXIgZXhhbXBsZSkuXG5cdFx0Ly8gMi4gQWJzb2x1dGUgSWQodGhpcyB3YXMgbm90IHN1cHBvcnRlZCBpbiBvbGRlciB2ZXJzaW9ucykuXG5cdFx0Ly8gMy4gQSBsb2NhbElkIHdydCBGcmFnbWVudElkKHdoZW4gYW4gWE1MQ29tcG9zaXRlIG9yIEZyYWdtZW50IGlzIGluZGVwZW5kZW50bHkgcHJvY2Vzc2VkKSBpbnN0ZWFkIG9mIFZpZXdJZC5cblx0XHQvLyAgICAnZmlsdGVyQmFyJyB3YXMgc3VwcG9ydGVkIGVhcmxpZXIgYXMgYW4gJ2Fzc29jaWF0aW9uJyB0byB0aGUgJ21kYzpUYWJsZScgY29udHJvbCBpbnNpZGUgJ21hY3JvOlRhYmxlJyBpbiBwcmlvciB2ZXJzaW9ucy5cblx0XHQvLyAgICBJbiBuZXdlciB2ZXJzaW9ucyAnZmlsdGVyQmFyJyBpcyB1c2VkIGxpa2UgYW4gYXNzb2NpYXRpb24gdG8gJ21hY3JvOlRhYmxlQVBJJy5cblx0XHQvLyAgICBUaGlzIG1lYW5zIHRoYXQgdGhlIElkIGlzIHJlbGF0aXZlIHRvICdtYWNybzpUYWJsZUFQSScuXG5cdFx0Ly8gICAgVGhpcyBzY2VuYXJpbyBoYXBwZW5zIGluIGNhc2Ugb2YgRmlsdGVyQmFyIGFuZCBUYWJsZSBpbiBhIGN1c3RvbSBzZWN0aW9ucyBpbiBPUCBvZiBGRVY0LlxuXG5cdFx0Y29uc3QgdGFibGVBUElJZCA9IHRoaXM/LmdldElkKCk7XG5cdFx0Y29uc3QgdGFibGVBUElMb2NhbElkID0gdGhpcy5kYXRhKFwidGFibGVBUElMb2NhbElkXCIpO1xuXHRcdGNvbnN0IHBvdGVudGlhbGZpbHRlckJhcklkID1cblx0XHRcdHRhYmxlQVBJTG9jYWxJZCAmJiBmaWx0ZXJCYXJSZWZJZCAmJiB0YWJsZUFQSUlkICYmIHRhYmxlQVBJSWQucmVwbGFjZShuZXcgUmVnRXhwKHRhYmxlQVBJTG9jYWxJZCArIFwiJFwiKSwgZmlsdGVyQmFyUmVmSWQpOyAvLyAzXG5cblx0XHRjb25zdCBmaWx0ZXJCYXIgPVxuXHRcdFx0Q29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKT8uYnlJZChmaWx0ZXJCYXJSZWZJZCkgfHwgY29yZS5ieUlkKGZpbHRlckJhclJlZklkKSB8fCBjb3JlLmJ5SWQocG90ZW50aWFsZmlsdGVyQmFySWQpO1xuXG5cdFx0aWYgKGZpbHRlckJhcikge1xuXHRcdFx0aWYgKGZpbHRlckJhci5pc0EoXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIikpIHtcblx0XHRcdFx0dGFibGUuc2V0RmlsdGVyKGAke2ZpbHRlckJhci5nZXRJZCgpfS1jb250ZW50YCk7XG5cdFx0XHR9IGVsc2UgaWYgKGZpbHRlckJhci5pc0EoXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSkge1xuXHRcdFx0XHR0YWJsZS5zZXRGaWx0ZXIoZmlsdGVyQmFyLmdldElkKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGNoZWNrSWZDb2x1bW5FeGlzdHMoYUZpbHRlcmVkQ29sdW1tbnM6IGFueSwgY29sdW1uTmFtZTogYW55KSB7XG5cdFx0cmV0dXJuIGFGaWx0ZXJlZENvbHVtbW5zLnNvbWUoZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQob0NvbHVtbj8uY29sdW1uTmFtZSA9PT0gY29sdW1uTmFtZSAmJiBvQ29sdW1uPy5zQ29sdW1uTmFtZVZpc2libGUpIHx8XG5cdFx0XHRcdChvQ29sdW1uPy5zVGV4dEFycmFuZ2VtZW50ICE9PSB1bmRlZmluZWQgJiYgb0NvbHVtbj8uc1RleHRBcnJhbmdlbWVudCA9PT0gY29sdW1uTmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gY29sdW1uTmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRnZXRJZGVudGlmaWVyQ29sdW1uKCk6IGFueSB7XG5cdFx0Y29uc3Qgb1RhYmxlID0gKHRoaXMgYXMgYW55KS5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3QgaGVhZGVySW5mb1RpdGxlUGF0aCA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuaGVhZGVySW5mb1RpdGxlO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVGFibGUgJiYgb1RhYmxlLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRzQ3VycmVudEVudGl0eVNldE5hbWUgPSBvVGFibGUuZGF0YShcIm1ldGFQYXRoXCIpO1xuXHRcdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8kVHlwZS8kS2V5YCk7XG5cdFx0Y29uc3QgYUZpbHRlcmVkVGVjaG5pY2FsS2V5czogc3RyaW5nW10gPSBbXTtcblxuXHRcdGlmIChhVGVjaG5pY2FsS2V5cyAmJiBhVGVjaG5pY2FsS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhVGVjaG5pY2FsS2V5cy5mb3JFYWNoKGZ1bmN0aW9uICh0ZWNobmljYWxLZXk6IHN0cmluZykge1xuXHRcdFx0XHRpZiAodGVjaG5pY2FsS2V5ICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdFx0XHRhRmlsdGVyZWRUZWNobmljYWxLZXlzLnB1c2godGVjaG5pY2FsS2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNlbWFudGljS2V5Q29sdW1ucyA9IHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuc2VtYW50aWNLZXlzO1xuXG5cdFx0Y29uc3QgYVZpc2libGVDb2x1bW5zOiBhbnkgPSBbXTtcblx0XHRjb25zdCBhRmlsdGVyZWRDb2x1bW1uczogYW55ID0gW107XG5cdFx0Y29uc3QgYVRhYmxlQ29sdW1ucyA9IG9UYWJsZS5nZXRDb2x1bW5zKCk7XG5cdFx0YVRhYmxlQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdGNvbnN0IGNvbHVtbiA9IG9Db2x1bW4/LmdldERhdGFQcm9wZXJ0eSgpO1xuXHRcdFx0YVZpc2libGVDb2x1bW5zLnB1c2goY29sdW1uKTtcblx0XHR9KTtcblxuXHRcdGFWaXNpYmxlQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9UZXh0QXJyYW5nZW1lbnQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyRUeXBlLyR7b0NvbHVtbn1AYCk7XG5cdFx0XHRjb25zdCBzVGV4dEFycmFuZ2VtZW50ID0gb1RleHRBcnJhbmdlbWVudCAmJiBvVGV4dEFycmFuZ2VtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdPy4kUGF0aDtcblx0XHRcdGNvbnN0IHNUZXh0UGxhY2VtZW50ID1cblx0XHRcdFx0b1RleHRBcnJhbmdlbWVudCAmJlxuXHRcdFx0XHRvVGV4dEFycmFuZ2VtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXT8uJEVudW1NZW1iZXI7XG5cdFx0XHRhRmlsdGVyZWRDb2x1bW1ucy5wdXNoKHtcblx0XHRcdFx0Y29sdW1uTmFtZTogb0NvbHVtbixcblx0XHRcdFx0c1RleHRBcnJhbmdlbWVudDogc1RleHRBcnJhbmdlbWVudCxcblx0XHRcdFx0c0NvbHVtbk5hbWVWaXNpYmxlOiAhKHNUZXh0UGxhY2VtZW50ID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIilcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGxldCBjb2x1bW46IGFueTtcblxuXHRcdGlmIChoZWFkZXJJbmZvVGl0bGVQYXRoICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jaGVja0lmQ29sdW1uRXhpc3RzKGFGaWx0ZXJlZENvbHVtbW5zLCBoZWFkZXJJbmZvVGl0bGVQYXRoKSkge1xuXHRcdFx0Y29sdW1uID0gaGVhZGVySW5mb1RpdGxlUGF0aDtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0c2VtYW50aWNLZXlDb2x1bW5zICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHNlbWFudGljS2V5Q29sdW1ucy5sZW5ndGggPT09IDEgJiZcblx0XHRcdHRoaXMuY2hlY2tJZkNvbHVtbkV4aXN0cyhhRmlsdGVyZWRDb2x1bW1ucywgc2VtYW50aWNLZXlDb2x1bW5zWzBdKVxuXHRcdCkge1xuXHRcdFx0Y29sdW1uID0gc2VtYW50aWNLZXlDb2x1bW5zWzBdO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRhRmlsdGVyZWRUZWNobmljYWxLZXlzICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdGFGaWx0ZXJlZFRlY2huaWNhbEtleXMubGVuZ3RoID09PSAxICYmXG5cdFx0XHR0aGlzLmNoZWNrSWZDb2x1bW5FeGlzdHMoYUZpbHRlcmVkQ29sdW1tbnMsIGFGaWx0ZXJlZFRlY2huaWNhbEtleXNbMF0pXG5cdFx0KSB7XG5cdFx0XHRjb2x1bW4gPSBhRmlsdGVyZWRUZWNobmljYWxLZXlzWzBdO1xuXHRcdH1cblx0XHRyZXR1cm4gY29sdW1uO1xuXHR9XG5cblx0YXN5bmMgc2V0VXBFbXB0eVJvd3Mob1RhYmxlOiBUYWJsZSkge1xuXHRcdGlmICh0aGlzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sPy5jcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgcFdhaXRUYWJsZVJlbmRlcmVkID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdGlmIChvVGFibGUuZ2V0RG9tUmVmKCkpIHtcblx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZGVsZWdhdGUgPSB7XG5cdFx0XHRcdFx0b25BZnRlclJlbmRlcmluZzogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0b1RhYmxlLnJlbW92ZUV2ZW50RGVsZWdhdGUoZGVsZWdhdGUpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b1RhYmxlLmFkZEV2ZW50RGVsZWdhdGUoZGVsZWdhdGUsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGF3YWl0IHBXYWl0VGFibGVSZW5kZXJlZDtcblx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gb1RhYmxlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRpZiAoIWJJc0luRWRpdE1vZGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cdFx0aWYgKG9CaW5kaW5nLmlzUmVzb2x2ZWQoKSAmJiBvQmluZGluZy5pc0xlbmd0aEZpbmFsKCkpIHtcblx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9CaW5kaW5nLmdldENvbnRleHQoKS5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBvSW5hY3RpdmVDb250ZXh0ID0gb0JpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LmlzSW5hY3RpdmUoKSAmJiBvQ29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChzQ29udGV4dFBhdGgpO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoIW9JbmFjdGl2ZUNvbnRleHQpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5fY3JlYXRlRW1wdHlSb3cob0JpbmRpbmcsIG9UYWJsZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGFzeW5jIF9jcmVhdGVFbXB0eVJvdyhvQmluZGluZzogT0RhdGFMaXN0QmluZGluZywgb1RhYmxlOiBUYWJsZSkge1xuXHRcdGNvbnN0IGlJbmxpbmVDcmVhdGlvblJvd0NvdW50ID0gdGhpcy50YWJsZURlZmluaXRpb24uY29udHJvbD8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCB8fCAyO1xuXHRcdGNvbnN0IGFEYXRhID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpSW5saW5lQ3JlYXRpb25Sb3dDb3VudDsgaSArPSAxKSB7XG5cdFx0XHRhRGF0YS5wdXNoKHt9KTtcblx0XHR9XG5cdFx0Y29uc3QgYkF0RW5kID0gb1RhYmxlLmRhdGEoXCJ0YWJsZVR5cGVcIikgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdFx0Y29uc3QgYkluYWN0aXZlID0gdHJ1ZTtcblx0XHRjb25zdCBvVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob1RhYmxlKTtcblx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxFZGl0RmxvdyA9IG9Db250cm9sbGVyLl9lZGl0Rmxvdztcblx0XHRpZiAoIXRoaXMuY3JlYXRpbmdFbXB0eVJvd3MpIHtcblx0XHRcdHRoaXMuY3JlYXRpbmdFbXB0eVJvd3MgPSB0cnVlO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgYUNvbnRleHRzID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMoXG5cdFx0XHRcdFx0b0JpbmRpbmcsXG5cdFx0XHRcdFx0YURhdGEsXG5cdFx0XHRcdFx0YkF0RW5kLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG9Db250cm9sbGVyLmVkaXRGbG93Lm9uQmVmb3JlQ3JlYXRlLFxuXHRcdFx0XHRcdGJJbmFjdGl2ZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQ29udGV4dHM/LmZvckVhY2goZnVuY3Rpb24gKG9Db250ZXh0OiBhbnkpIHtcblx0XHRcdFx0XHRvQ29udGV4dC5jcmVhdGVkKCkuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAoIW9FcnJvci5jYW5jZWxlZCkge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoZSBhcyBhbnkpO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0dGhpcy5jcmVhdGluZ0VtcHR5Um93cyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUFQSTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7OztFQWtqQk8sZ0JBQWdCQSxJQUFJLEVBQUVDLE9BQU8sRUFBRTtJQUNyQyxJQUFJO01BQ0gsSUFBSUMsTUFBTSxHQUFHRixJQUFJLEVBQUU7SUFDcEIsQ0FBQyxDQUFDLE9BQU1HLENBQUMsRUFBRTtNQUNWLE9BQU9GLE9BQU8sQ0FBQ0UsQ0FBQyxDQUFDO0lBQ2xCO0lBQ0EsSUFBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQUksRUFBRTtNQUMxQixPQUFPRixNQUFNLENBQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRUgsT0FBTyxDQUFDO0lBQ3BDO0lBQ0EsT0FBT0MsTUFBTTtFQUNkO0VBR08sMEJBQTBCRixJQUFJLEVBQUVLLFNBQVMsRUFBRTtJQUNqRCxJQUFJO01BQ0gsSUFBSUgsTUFBTSxHQUFHRixJQUFJLEVBQUU7SUFDcEIsQ0FBQyxDQUFDLE9BQU9HLENBQUMsRUFBRTtNQUNYLE9BQU9FLFNBQVMsQ0FBQyxJQUFJLEVBQUVGLENBQUMsQ0FBQztJQUMxQjtJQUNBLElBQUlELE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxJQUFJLEVBQUU7TUFDMUIsT0FBT0YsTUFBTSxDQUFDRSxJQUFJLENBQUNDLFNBQVMsQ0FBQ0MsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRUQsU0FBUyxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVFO0lBQ0EsT0FBT0QsU0FBUyxDQUFDLEtBQUssRUFBRUgsTUFBTSxDQUFDO0VBQ2hDO0VBQUM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBNWFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFiQSxJQWVNSyxRQUFRLFdBRGJDLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQyxVQWtCN0NDLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUUsUUFBUTtJQUNkQyxhQUFhLEVBQUUsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQztJQUM3RUMsbUJBQW1CLEVBQUUsQ0FDcEIscUNBQXFDLEVBQ3JDLGdEQUFnRCxFQUNoRCx5REFBeUQ7RUFFM0QsQ0FBQyxDQUFDLFVBR0RILFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBdUIsQ0FBQyxDQUFDLFVBVTFDRCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVUsQ0FBQyxDQUFDLFVBUTdCRCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLFVBUTVCRCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUcsWUFBWSxFQUFFO0VBQU0sQ0FBQyxDQUFDLFVBVWxESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFFBQVE7SUFBRUcsWUFBWSxFQUFFO0VBQWtCLENBQUMsQ0FBQyxVQVE3REosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVHLFlBQVksRUFBRTtFQUFLLENBQUMsQ0FBQyxVQVFqREosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVHLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxXQVFsREosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVHLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxXQVFsREosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxXQVU1QkQsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxXQVE1QkQsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxXQVE1QkQsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVHLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxXQVFsREosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVHLFlBQVksRUFBRTtFQUFLLENBQUMsQ0FBQyxXQVFqREosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVHLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxXQVFsREosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVHLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxXQVFsREosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVHLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxXQVFsREosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVHLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxXQVVsREMsS0FBSyxFQUFFLFdBVVBBLEtBQUssRUFBRSxXQUdQQSxLQUFLLEVBQUUsV0FpQlBMLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsZ0JBQWdCO0lBQUVHLFlBQVksRUFBRTtFQUFLLENBQUMsQ0FBQyxXQVl4REosUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxXQVE1QkQsUUFBUSxDQUFDO0lB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QUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0VBQUEsT0F3ckJoQnpPLFFBQVE7QUFBQSJ9
|
|
746
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZmluYWxpemVyIiwiYmluZCIsIlRhYmxlQVBJIiwiZGVmaW5lVUk1Q2xhc3MiLCJwcm9wZXJ0eSIsInR5cGUiLCJleHBlY3RlZFR5cGVzIiwiZXhwZWN0ZWRBbm5vdGF0aW9ucyIsImRlZmF1bHRWYWx1ZSIsImV2ZW50IiwieG1sRXZlbnRIYW5kbGVyIiwibVNldHRpbmdzIiwib3RoZXJzIiwidXBkYXRlRmlsdGVyQmFyIiwiY29udGVudCIsImF0dGFjaEV2ZW50Iiwib25UYWJsZVNlbGVjdGlvbkNoYW5nZSIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJhZGRNZXNzYWdlIiwicGFyYW1ldGVycyIsIm1zZ01hbmFnZXIiLCJfZ2V0TWVzc2FnZU1hbmFnZXIiLCJvVGFibGUiLCJvTWVzc2FnZSIsIk1lc3NhZ2UiLCJ0YXJnZXQiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0UmVzb2x2ZWRQYXRoIiwibWVzc2FnZSIsInByb2Nlc3NvciIsImdldE1vZGVsIiwiZGVzY3JpcHRpb24iLCJwZXJzaXN0ZW50IiwiYWRkTWVzc2FnZXMiLCJnZXRJZCIsInJlbW92ZU1lc3NhZ2UiLCJpZCIsIm1lc3NhZ2VzIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZpbmQiLCJyZW1vdmVNZXNzYWdlcyIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiX2dldFJvd0JpbmRpbmciLCJnZXRDb250ZW50IiwiZ2V0Q291bnRzIiwiVGFibGVVdGlscyIsImdldExpc3RCaW5kaW5nRm9yQ291bnQiLCJnZXRCaW5kaW5nQ29udGV4dCIsImJhdGNoR3JvdXBJZCIsImdldFByb3BlcnR5IiwiZGF0YSIsImFkZGl0aW9uYWxGaWx0ZXJzIiwiZ2V0SGlkZGVuRmlsdGVycyIsImlWYWx1ZSIsImdldENvdW50Rm9ybWF0dGVkIiwiY2F0Y2giLCJvblRhYmxlUm93UHJlc3MiLCJvRXZlbnQiLCJvQ29udHJvbGxlciIsIm9Db250ZXh0IiwibVBhcmFtZXRlcnMiLCJpc0luYWN0aXZlIiwiaXNUcmFuc2llbnQiLCJpc0EiLCJfcm91dGluZyIsIm5hdmlnYXRlRm9yd2FyZFRvQ29udGV4dCIsIm9uSW50ZXJuYWxEYXRhUmVjZWl2ZWQiLCJnZXRQYXJhbWV0ZXIiLCJnZXRDb250cm9sbGVyIiwibWVzc2FnZUhhbmRsZXIiLCJzaG93TWVzc2FnZURpYWxvZyIsIm9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkIiwic2V0UHJvcGVydHkiLCJmaXJlRXZlbnQiLCJnZXRQYXJhbWV0ZXJzIiwib25QYXN0ZSIsInRhYmxlRGVmaW5pdGlvbiIsImNvbnRyb2wiLCJlbmFibGVQYXN0ZSIsImFSYXdQYXN0ZWREYXRhIiwiZ2V0U291cmNlIiwiZ2V0RW5hYmxlUGFzdGUiLCJQYXN0ZUhlbHBlciIsInBhc3RlRGF0YSIsIm9SZXNvdXJjZU1vZGVsIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiTWVzc2FnZUJveCIsImVycm9yIiwiZ2V0VGV4dCIsInRpdGxlIiwib25CZWZvcmVFeHBvcnQiLCJpc1NwbGl0TW9kZSIsInVzZXJFeHBvcnRTZXR0aW5ncyIsInNwbGl0Q2VsbHMiLCJvVGFibGVDb250cm9sbGVyIiwib0V4cG9ydFNldHRpbmdzIiwiZXhwb3J0U2V0dGluZ3MiLCJvVGFibGVDb2x1bW5zIiwiY29sdW1ucyIsInVwZGF0ZUV4cG9ydFNldHRpbmdzIiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwic1RhYmxlQ29udGV4dEJpbmRpbmdQYXRoIiwiZ2V0UGF0aCIsInNUYWJsZVJvd0JpbmRpbmciLCJnZXRUYXJnZXQiLCJvbkRhdGFTdGF0ZUNoYW5nZSIsIm9EYXRhU3RhdGVJbmRpY2F0b3IiLCJhRmlsdGVyZWRNZXNzYWdlcyIsIm9JbnRlcm5hbE1vZGVsIiwidGFibGVDb250cm9sbGVyIiwicmVmQ29sdW1uIiwiYWRkaXRpb25hbFByb3BlcnR5SW5kZXgiLCJkYXRhU291cmNlIiwic2l6ZUxpbWl0IiwiZXhwb3J0Q29sdW1ucyIsIndvcmtib29rIiwiZm9yRWFjaCIsImNvbHVtbkV4cG9ydCIsImxhYmVsIiwiRGVsZWdhdGVVdGlsIiwiZ2V0TG9jYWxpemVkVGV4dCIsImNvbCIsImNvbHVtbiIsImlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5IiwicmVsYXRpdmVQYXRoIiwicmVnZXgiLCJleGVjIiwiY29sdW1uSWQiLCJ1cGRhdGVFeHBvcnRUeXBlT25UZXh0T25seVByb3BlcnRpZXMiLCJyZXNvdXJjZU1vZGVsIiwiZmFsc2VWYWx1ZSIsInRydWVWYWx1ZSIsImFubm90YXRpb25Db2x1bW5zIiwicHJvcGVydHlJbmZvcyIsImxlbmd0aCIsImNvbHVtbkZyb21Bbm5vdGF0aW9uQ29sdW1ucyIsInJlc3VtZUJpbmRpbmciLCJiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQiLCJnZXREYXRhSW5pdGlhbGl6ZWQiLCJyZWJpbmQiLCJyZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkcyIsIm9GaWx0ZXJDb250cm9sIiwiRmlsdGVyVXRpbHMiLCJnZXROb3RBcHBsaWNhYmxlRmlsdGVycyIsInN1c3BlbmRCaW5kaW5nIiwiaW52YWxpZGF0ZUNvbnRlbnQiLCJvbk1hc3NFZGl0QnV0dG9uUHJlc3NlZCIsInBhZ2VDb250cm9sbGVyIiwibWFzc0VkaXQiLCJvcGVuTWFzc0VkaXREaWFsb2ciLCJMb2ciLCJ3YXJuaW5nIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwidGFibGUiLCJmaWx0ZXJCYXJSZWZJZCIsImdldEZpbHRlckJhciIsImdldEZpbHRlciIsIl9zZXRGaWx0ZXJCYXIiLCJjb3JlIiwidGFibGVBUElJZCIsInRhYmxlQVBJTG9jYWxJZCIsInBvdGVudGlhbGZpbHRlckJhcklkIiwicmVwbGFjZSIsIlJlZ0V4cCIsImZpbHRlckJhciIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsImJ5SWQiLCJzZXRGaWx0ZXIiLCJjaGVja0lmQ29sdW1uRXhpc3RzIiwiYUZpbHRlcmVkQ29sdW1tbnMiLCJjb2x1bW5OYW1lIiwic29tZSIsIm9Db2x1bW4iLCJzQ29sdW1uTmFtZVZpc2libGUiLCJzVGV4dEFycmFuZ2VtZW50IiwidW5kZWZpbmVkIiwiZ2V0SWRlbnRpZmllckNvbHVtbiIsImhlYWRlckluZm9UaXRsZVBhdGgiLCJoZWFkZXJJbmZvVGl0bGUiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic0N1cnJlbnRFbnRpdHlTZXROYW1lIiwiYVRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJhRmlsdGVyZWRUZWNobmljYWxLZXlzIiwidGVjaG5pY2FsS2V5IiwicHVzaCIsInNlbWFudGljS2V5Q29sdW1ucyIsInNlbWFudGljS2V5cyIsImFWaXNpYmxlQ29sdW1ucyIsImFUYWJsZUNvbHVtbnMiLCJnZXRDb2x1bW5zIiwiZ2V0RGF0YVByb3BlcnR5Iiwib1RleHRBcnJhbmdlbWVudCIsIiRQYXRoIiwic1RleHRQbGFjZW1lbnQiLCIkRW51bU1lbWJlciIsInNldFVwRW1wdHlSb3dzIiwiY3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Nb2RlIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwicFdhaXRUYWJsZVJlbmRlcmVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXREb21SZWYiLCJkZWxlZ2F0ZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsImJJc0luRWRpdE1vZGUiLCJvQmluZGluZyIsImlzUmVzb2x2ZWQiLCJpc0xlbmd0aEZpbmFsIiwic0NvbnRleHRQYXRoIiwiZ2V0Q29udGV4dCIsIm9JbmFjdGl2ZUNvbnRleHQiLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJzdGFydHNXaXRoIiwiX2NyZWF0ZUVtcHR5Um93IiwiaUlubGluZUNyZWF0aW9uUm93Q291bnQiLCJpbmxpbmVDcmVhdGlvblJvd0NvdW50IiwiYURhdGEiLCJpIiwiYkF0RW5kIiwiYkluYWN0aXZlIiwib1ZpZXciLCJvSW50ZXJuYWxFZGl0RmxvdyIsIl9lZGl0RmxvdyIsImNyZWF0aW5nRW1wdHlSb3dzIiwiY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMiLCJlZGl0RmxvdyIsIm9uQmVmb3JlQ3JlYXRlIiwiYUNvbnRleHRzIiwiY3JlYXRlZCIsIm9FcnJvciIsImNhbmNlbGVkIiwiTWFjcm9BUEkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdENvbHVtbkV4cG9ydFNldHRpbmdzLFxuXHRUYWJsZUNvbHVtbixcblx0VGFibGVWaXN1YWxpemF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHsgQ3JlYXRpb25Nb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBldmVudCwgcHJvcGVydHksIHhtbEV2ZW50SGFuZGxlciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IFBhc3RlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Bhc3RlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgVGFibGVVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBEYXRhU3RhdGVJbmRpY2F0b3IgZnJvbSBcInNhcC9tL3BsdWdpbnMvRGF0YVN0YXRlSW5kaWNhdG9yXCI7XG5pbXBvcnQgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcIi4uL01hY3JvQVBJXCI7XG5cbi8qKlxuICogRGVmaW5pdGlvbiBvZiBhIGN1c3RvbSBhY3Rpb24gdG8gYmUgdXNlZCBpbnNpZGUgdGhlIHRhYmxlIHRvb2xiYXJcbiAqXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy50YWJsZS5BY3Rpb25cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQWN0aW9uID0ge1xuXHQvKipcblx0ICogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFjdGlvblxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRrZXk6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yIHRoaXMgYWN0aW9uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHRleHQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFJlZmVyZW5jZSB0byB0aGUga2V5IG9mIGFub3RoZXIgYWN0aW9uIGFscmVhZHkgZGlzcGxheWVkIGluIHRoZSB0b29sYmFyIHRvIHByb3Blcmx5IHBsYWNlIHRoaXMgb25lXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFuY2hvcj86IHN0cmluZztcblx0LyoqXG5cdCAqIERlZmluZXMgd2hlcmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIHBsYWNlZCByZWxhdGl2ZSB0byB0aGUgZGVmaW5lZCBhbmNob3Jcblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBCZWZvcmVgIGFuZCBgQWZ0ZXJgXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHBsYWNlbWVudD86IHN0cmluZztcblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgdXNlciBjaG9vc2VzIHRoZSBhY3Rpb25cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cHJlc3M6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyBpZiB0aGUgYWN0aW9uIHJlcXVpcmVzIGEgc2VsZWN0aW9uLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRyZXF1aXJlc1NlbGVjdGlvbj86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGFjdGlvblxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRlbmFibGVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjdGlvbkdyb3VwID0ge1xuXHQvKipcblx0ICogRGVmaW5lcyBuZXN0ZWQgYWN0aW9uc1xuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhY3Rpb25zOiBBY3Rpb25bXTtcblxuXHQvKipcblx0ICogVGhlIHRleHQgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBmb3IgdGhpcyBhY3Rpb24gZ3JvdXBcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0dGV4dDogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXJlIHRoaXMgYWN0aW9uIGdyb3VwIHNob3VsZCBiZSBwbGFjZWQgcmVsYXRpdmUgdG8gdGhlIGRlZmluZWQgYW5jaG9yXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWVzIGFyZSBgQmVmb3JlYCBhbmQgYEFmdGVyYFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRwbGFjZW1lbnQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFJlZmVyZW5jZSB0byB0aGUga2V5IG9mIGFub3RoZXIgYWN0aW9uIG9yIGFjdGlvbiBncm91cCBhbHJlYWR5IGRpc3BsYXllZCBpbiB0aGUgdG9vbGJhciB0byBwcm9wZXJseSBwbGFjZSB0aGlzIG9uZVxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhbmNob3I/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBjdXN0b20gY29sdW1uIHRvIGJlIHVzZWQgaW5zaWRlIHRoZSB0YWJsZS5cbiAqXG4gKiBUaGUgdGVtcGxhdGUgZm9yIHRoZSBjb2x1bW4gaGFzIHRvIGJlIHByb3ZpZGVkIGFzIHRoZSBkZWZhdWx0IGFnZ3JlZ2F0aW9uXG4gKlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MudGFibGUuQ29sdW1uXG4gKiBAcHVibGljXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCB0eXBlIENvbHVtbiA9IHtcblx0LyoqXG5cdCAqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb2x1bW5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0a2V5OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGZvciB0aGlzIGNvbHVtbiBoZWFkZXJcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0aGVhZGVyOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIGtleSBvZiBhbm90aGVyIGNvbHVtbiBhbHJlYWR5IGRpc3BsYXllZCBpbiB0aGUgdGFibGUgdG8gcHJvcGVybHkgcGxhY2UgdGhpcyBvbmVcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YW5jaG9yPzogc3RyaW5nO1xuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgY29sdW1uIGltcG9ydGFuY2Vcblx0ICpcblx0ICogWW91IGNhbiBkZWZpbmUgd2hpY2ggY29sdW1ucyBzaG91bGQgYmUgYXV0b21hdGljYWxseSBtb3ZlZCB0byB0aGUgcG9wLWluIGFyZWEgYmFzZWQgb24gdGhlaXIgaW1wb3J0YW5jZVxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRpbXBvcnRhbmNlPzogc3RyaW5nO1xuXHQvKipcblx0ICogRGVmaW5lcyB3aGVyZSB0aGlzIGNvbHVtbiBzaG91bGQgYmUgcGxhY2VkIHJlbGF0aXZlIHRvIHRoZSBkZWZpbmVkIGFuY2hvclxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYEJlZm9yZWAgYW5kIGBBZnRlcmBcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cGxhY2VtZW50Pzogc3RyaW5nO1xufTtcblxudHlwZSBFeHBvcnRDb2x1bW4gPSBDb2x1bW5FeHBvcnRTZXR0aW5ncyAmIHtcblx0cHJvcGVydHk6IHN0cmluZyB8IEFycmF5PHN0cmluZz47XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGNvbHVtbklkOiBzdHJpbmc7XG5cdHdpZHRoPzogbnVtYmVyO1xuXHR0ZXh0QWxpZ24/OiBzdHJpbmc7XG5cdGRpc3BsYXlVbml0PzogYm9vbGVhbjtcblx0dHJ1ZVZhbHVlPzogc3RyaW5nO1xuXHRmYWxzZVZhbHVlPzogc3RyaW5nO1xuXHR2YWx1ZU1hcD86IHN0cmluZztcblx0dHlwZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEV4cG9ydFNldHRpbmdzID0ge1xuXHRkYXRhU291cmNlOiB7XG5cdFx0c2l6ZUxpbWl0PzogbnVtYmVyO1xuXHR9O1xuXHR3b3JrYm9vazoge1xuXHRcdGNvbHVtbnM6IEV4cG9ydENvbHVtbltdO1xuXHR9O1xufTtcblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayB1c2VkIHRvIGNyZWF0ZSBhIHRhYmxlIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBPRGF0YSBWNC5cbiAqIDxicj5cbiAqIFVzdWFsbHksIGEgTGluZUl0ZW0gb3IgUHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIGlzIGV4cGVjdGVkLCBidXQgdGhlIFRhYmxlIGJ1aWxkaW5nIGJsb2NrIGNhbiBhbHNvIGJlIHVzZWQgdG8gZGlzcGxheSBhbiBFbnRpdHlTZXQuXG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvOlRhYmxlIGlkPVwiTXlUYWJsZVwiIG1ldGFQYXRoPVwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCIgLyZndDtcbiAqIDwvcHJlPlxuICpcbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIilcbmNsYXNzIFRhYmxlQVBJIGV4dGVuZHMgTWFjcm9BUEkge1xuXHRjcmVhdGluZ0VtcHR5Um93cz86IGJvb2xlYW47XG5cdGNvbnN0cnVjdG9yKG1TZXR0aW5ncz86IFByb3BlcnRpZXNPZjxUYWJsZUFQST4sIC4uLm90aGVyczogYW55W10pIHtcblx0XHRzdXBlcihtU2V0dGluZ3MgYXMgYW55LCAuLi5vdGhlcnMpO1xuXG5cdFx0dGhpcy51cGRhdGVGaWx0ZXJCYXIoKTtcblxuXHRcdGlmICh0aGlzLmNvbnRlbnQpIHtcblx0XHRcdHRoaXMuY29udGVudC5hdHRhY2hFdmVudChcInNlbGVjdGlvbkNoYW5nZVwiLCB7fSwgdGhpcy5vblRhYmxlU2VsZWN0aW9uQ2hhbmdlLCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdLFxuXHRcdGV4cGVjdGVkQW5ub3RhdGlvbnM6IFtcblx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIixcblx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUHJlc2VudGF0aW9uVmFyaWFudFwiLFxuXHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XCJcblx0XHRdXG5cdH0pXG5cdG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIiB9KVxuXHR0YWJsZURlZmluaXRpb24hOiBUYWJsZVZpc3VhbGl6YXRpb247XG5cblx0LyoqXG5cdCAqIEFuIGV4cHJlc3Npb24gdGhhdCBhbGxvd3MgeW91IHRvIGNvbnRyb2wgdGhlICdyZWFkLW9ubHknIHN0YXRlIG9mIHRoZSB0YWJsZS5cblx0ICpcblx0ICogSWYgeW91IGRvIG5vdCBzZXQgYW55IGV4cHJlc3Npb24sIFNBUCBGaW9yaSBlbGVtZW50cyBob29rcyBpbnRvIHRoZSBzdGFuZGFyZCBsaWZlY3ljbGUgdG8gZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHN0YXRlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRyZWFkT25seSE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSB0YWJsZSBjb250cm9sLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGlkITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBBbiBleHByZXNzaW9uIHRoYXQgYWxsb3dzIHlvdSB0byBjb250cm9sIHRoZSAnYnVzeScgc3RhdGUgb2YgdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KVxuXHRidXN5ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgdHlwZSBvZiB0YWJsZSB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgYnVpbGRpbmcgYmxvY2sgdG8gcmVuZGVyIHRoZSBkYXRhLlxuXHQgKlxuXHQgKiBBbGxvd2VkIHZhbHVlcyBhcmUgYEdyaWRUYWJsZWAgYW5kIGBSZXNwb25zaXZlVGFibGVgXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIsIGRlZmF1bHRWYWx1ZTogXCJSZXNwb25zaXZlVGFibGVcIiB9KVxuXHR0eXBlITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyBpZiB0aGUgZXhwb3J0IGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRhYmxlIGlzIGVuYWJsZWQgb3Igbm90LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdGVuYWJsZUV4cG9ydCE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIGlmIHRoZSBwYXN0ZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0YWJsZSBpcyBlbmFibGVkIG9yIG5vdC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0ZW5hYmxlUGFzdGUhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBDb250cm9scyB3aGV0aGVyIHRoZSB0YWJsZSBjYW4gYmUgb3BlbmVkIGluIGZ1bGxzY3JlZW4gbW9kZSBvciBub3QuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGVuYWJsZUZ1bGxTY3JlZW4hOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBJRCBvZiB0aGUgRmlsdGVyQmFyIGJ1aWxkaW5nIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0ZmlsdGVyQmFyITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBzZWxlY3Rpb24gbW9kZSB0byBiZSB1c2VkIGJ5IHRoZSB0YWJsZS5cblx0ICpcblx0ICogQWxsb3dlZCB2YWx1ZXMgYXJlIGBOb25lYCwgYFNpbmdsZWAsIGBNdWx0aWAgb3IgYEF1dG9gXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0c2VsZWN0aW9uTW9kZSE6IHN0cmluZztcblxuXHQvKipcblx0ICogU3BlY2lmaWVzIHRoZSBoZWFkZXIgdGV4dCB0aGF0IGlzIHNob3duIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRoZWFkZXIhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFNwZWNpZmllcyB0aGUgaGVhZGVyIHRleHQgdGhhdCBpcyBzaG93biBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGVuYWJsZUF1dG9Db2x1bW5XaWR0aCE6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIGlmIHRoZSBoZWFkZXIgdGV4dCBzaG91bGQgYmUgc2hvd24gb3Igbm90LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcImJvb2xlYW5cIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdGhlYWRlclZpc2libGUhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0ZGF0YUluaXRpYWxpemVkITogYm9vbGVhbjtcblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGJpbmRpbmdTdXNwZW5kZWQhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0b3V0RGF0ZWRCaW5kaW5nITogYm9vbGVhbjtcblxuXHQvKipcblx0ICpcblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdHBlbmRpbmdSZXF1ZXN0ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgY2hvb3NlcyBhIHJvdzsgdGhlIGV2ZW50IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIHJvdyB3YXMgY2hvc2VuLlxuXHQgKlxuXHQgKiBZb3UgY2FuIHNldCB0aGlzIGluIG9yZGVyIHRvIGhhbmRsZSB0aGUgbmF2aWdhdGlvbiBtYW51YWxseS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0cm93UHJlc3MhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIFRhYmxlIFN0YXRlIGNoYW5nZXMuXG5cdCAqXG5cdCAqIFlvdSBjYW4gc2V0IHRoaXMgaW4gb3JkZXIgdG8gc3RvcmUgdGhlIHRhYmxlIHN0YXRlIGluIHRoZSBhcHBzdGF0ZS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdEBldmVudCgpXG5cdHN0YXRlQ2hhbmdlITogRnVuY3Rpb247XG5cblx0QGV2ZW50KClcblx0aW50ZXJuYWxEYXRhUmVxdWVzdGVkITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIHdoaWNoIG9wdGlvbnMgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIHRoZSB0YWJsZSBwZXJzb25hbGl6YXRpb24gZGlhbG9nLlxuXHQgKlxuXHQgKiBJZiBpdCBpcyBzZXQgdG8gYHRydWVgLCBhbGwgcG9zc2libGUgb3B0aW9ucyBmb3IgdGhpcyBraW5kIG9mIHRhYmxlIGFyZSBlbmFibGVkLjxici8+XG5cdCAqIElmIGl0IGlzIHNldCB0byBgZmFsc2VgLCBwZXJzb25hbGl6YXRpb24gaXMgZGlzYWJsZWQuPGJyLz5cblx0ICo8YnIvPlxuXHQgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIG1vcmUgZ3JhbnVsYXIgY29udHJvbCBmb3IgdGhlIHBlcnNvbmFsaXphdGlvbiBieSBwcm92aWRpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCB3aXRoIHRoZSBvcHRpb25zIHlvdSB3YW50IHRvIGJlIGF2YWlsYWJsZS48YnIvPlxuXHQgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6PGJyLz5cblx0ICogIC0gU29ydDxici8+XG5cdCAqICAtIENvbHVtbjxici8+XG5cdCAqICAtIEZpbHRlcjxici8+XG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhbnxzdHJpbmdcIiwgZGVmYXVsdFZhbHVlOiB0cnVlIH0pXG5cdHBlcnNvbmFsaXphdGlvbiE6IGJvb2xlYW4gfCBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIENvbnRyb2xzIHRoZSBraW5kIG9mIHZhcmlhbnQgbWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBlbmFibGVkIGZvciB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEFsbG93ZWQgdmFsdWUgaXMgYENvbnRyb2xgLjxici8+XG5cdCAqIElmIHNldCB3aXRoIHZhbHVlIGBDb250cm9sYCwgYSB2YXJpYW50IG1hbmFnZW1lbnQgY29udHJvbCBpcyBzZWVuIHdpdGhpbiB0aGUgdGFibGUgYW5kIHRoZSB0YWJsZSBpcyBsaW5rZWQgdG8gdGhpcy48YnIvPlxuXHQgKiBJZiBub3Qgc2V0IHdpdGggYW55IHZhbHVlLCBjb250cm9sIGxldmVsIHZhcmlhbnQgbWFuYWdlbWVudCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHZhcmlhbnRNYW5hZ2VtZW50ITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBHcm91cHMgbWVudSBhY3Rpb25zIGJ5IGtleS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRtZW51Pzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgc2VhcmNoIGFjdGlvbi5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSB9KVxuXHRpc1NlYXJjaGFibGU/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBHZXRzIGNvbnRleHRzIGZyb20gdGhlIHRhYmxlIHRoYXQgaGF2ZSBiZWVuIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBDb250ZXh0cyBvZiB0aGUgcm93cyBzZWxlY3RlZCBieSB0aGUgdXNlclxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRTZWxlY3RlZENvbnRleHRzKCk6IENvbnRleHRbXSB7XG5cdFx0cmV0dXJuICh0aGlzLmNvbnRlbnQgYXMgYW55KS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIG1lc3NhZ2UgdG8gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBUaGUgbWVzc2FnZSBhcHBsaWVzIHRvIHRoZSB3aG9sZSB0YWJsZSBhbmQgbm90IHRvIGFuIGluZGl2aWR1YWwgdGFibGUgcm93LlxuXHQgKlxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnNdIFRoZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSB0aGUgbWVzc2FnZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy50eXBlIE1lc3NhZ2UgdHlwZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5tZXNzYWdlIE1lc3NhZ2UgdGV4dFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5kZXNjcmlwdGlvbiBNZXNzYWdlIGRlc2NyaXB0aW9uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLnBlcnNpc3RlbnQgVHJ1ZSBpZiB0aGUgbWVzc2FnZSBpcyBwZXJzaXN0ZW50XG5cdCAqIEByZXR1cm5zIFRoZSBJRCBvZiB0aGUgbWVzc2FnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhZGRNZXNzYWdlKHBhcmFtZXRlcnM6IHsgdHlwZT86IE1lc3NhZ2VUeXBlOyBtZXNzYWdlPzogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZzsgcGVyc2lzdGVudD86IGJvb2xlYW4gfSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbXNnTWFuYWdlciA9IHRoaXMuX2dldE1lc3NhZ2VNYW5hZ2VyKCk7XG5cblx0XHRjb25zdCBvVGFibGUgPSB0aGlzLmNvbnRlbnQgYXMgYW55IGFzIFRhYmxlO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2UgPSBuZXcgTWVzc2FnZSh7XG5cdFx0XHR0YXJnZXQ6IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkuZ2V0UmVzb2x2ZWRQYXRoKCksXG5cdFx0XHR0eXBlOiBwYXJhbWV0ZXJzLnR5cGUsXG5cdFx0XHRtZXNzYWdlOiBwYXJhbWV0ZXJzLm1lc3NhZ2UsXG5cdFx0XHRwcm9jZXNzb3I6IG9UYWJsZS5nZXRNb2RlbCgpLFxuXHRcdFx0ZGVzY3JpcHRpb246IHBhcmFtZXRlcnMuZGVzY3JpcHRpb24sXG5cdFx0XHRwZXJzaXN0ZW50OiBwYXJhbWV0ZXJzLnBlcnNpc3RlbnRcblx0XHR9KTtcblxuXHRcdG1zZ01hbmFnZXIuYWRkTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdHJldHVybiBvTWVzc2FnZS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBtZXNzYWdlIGZyb20gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBtZXNzYWdlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlbW92ZU1lc3NhZ2UoaWQ6IHN0cmluZykge1xuXHRcdGNvbnN0IG1zZ01hbmFnZXIgPSB0aGlzLl9nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gbXNnTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbWVzc2FnZXMuZmluZCgoZTogYW55KSA9PiBlLmlkID09PSBpZCk7XG5cdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0bXNnTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhyZXN1bHQpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRNZXNzYWdlTWFuYWdlcigpIHtcblx0XHRyZXR1cm4gc2FwLnVpLmdldENvcmUoKS5nZXRNZXNzYWdlTWFuYWdlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRhYmxlIGNoYW5nZXMuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBldmVudCgpXG5cdHNlbGVjdGlvbkNoYW5nZSE6IEZ1bmN0aW9uO1xuXG5cdF9nZXRSb3dCaW5kaW5nKCkge1xuXHRcdGNvbnN0IG9UYWJsZSA9ICh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdHJldHVybiBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHR9XG5cblx0Z2V0Q291bnRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3Qgb1RhYmxlID0gKHRoaXMgYXMgYW55KS5nZXRDb250ZW50KCk7XG5cdFx0cmV0dXJuIFRhYmxlVXRpbHMuZ2V0TGlzdEJpbmRpbmdGb3JDb3VudChvVGFibGUsIG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpLCB7XG5cdFx0XHRiYXRjaEdyb3VwSWQ6ICF0aGlzLmdldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiKSA/IG9UYWJsZS5kYXRhKFwiYmF0Y2hHcm91cElkXCIpIDogXCIkYXV0b1wiLFxuXHRcdFx0YWRkaXRpb25hbEZpbHRlcnM6IFRhYmxlVXRpbHMuZ2V0SGlkZGVuRmlsdGVycyhvVGFibGUpXG5cdFx0fSlcblx0XHRcdC50aGVuKChpVmFsdWU6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gVGFibGVVdGlscy5nZXRDb3VudEZvcm1hdHRlZChpVmFsdWUpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBcIjBcIjtcblx0XHRcdH0pO1xuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uVGFibGVSb3dQcmVzcyhvRXZlbnQ6IFVJNUV2ZW50LCBvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIG9Db250ZXh0OiBDb250ZXh0LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gcHJldmVudCBuYXZpZ2F0aW9uIHRvIGFuIGVtcHR5IHJvd1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0luYWN0aXZlKCkgJiYgb0NvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHQvLyBJbiB0aGUgY2FzZSBvZiBhbiBhbmFseXRpY2FsIHRhYmxlLCBpZiB3ZSdyZSB0cnlpbmcgdG8gbmF2aWdhdGUgdG8gYSBjb250ZXh0IGNvcnJlc3BvbmRpbmcgdG8gYSB2aXN1YWwgZ3JvdXAgb3IgZ3JhbmQgdG90YWxcblx0XHQvLyAtLT4gQ2FuY2VsIG5hdmlnYXRpb25cblx0XHRpZiAoXG5cdFx0XHRvQ29udGV4dCAmJlxuXHRcdFx0b0NvbnRleHQuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikgJiZcblx0XHRcdHR5cGVvZiBvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkAkdWk1Lm5vZGUuaXNFeHBhbmRlZFwiKSA9PT0gXCJib29sZWFuXCJcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0KG9Db250cm9sbGVyIGFzIGFueSkuX3JvdXRpbmcubmF2aWdhdGVGb3J3YXJkVG9Db250ZXh0KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uSW50ZXJuYWxEYXRhUmVjZWl2ZWQob0V2ZW50OiBVSTVFdmVudCkge1xuXHRcdGlmIChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZXJyb3JcIikpIHtcblx0XHRcdHRoaXMuZ2V0Q29udHJvbGxlcigpLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlRGlhbG9nKCk7XG5cdFx0fVxuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkKG9FdmVudDogVUk1RXZlbnQpIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZGF0YUluaXRpYWxpemVkXCIsIHRydWUpO1xuXHRcdCh0aGlzIGFzIGFueSkuZmlyZUV2ZW50KFwiaW50ZXJuYWxEYXRhUmVxdWVzdGVkXCIsIG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkpO1xuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uUGFzdGUob0V2ZW50OiBVSTVFdmVudCwgb0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0Ly8gSWYgcGFzdGUgaXMgZGlzYWJsZSBvciBpZiB3ZSdyZSBub3QgaW4gZWRpdCBtb2RlLCB3ZSBjYW4ndCBwYXN0ZSBhbnl0aGluZ1xuXHRcdGlmICghdGhpcy50YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVQYXN0ZSB8fCAhdGhpcy5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBhUmF3UGFzdGVkRGF0YSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJkYXRhXCIpLFxuXHRcdFx0b1RhYmxlID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIFRhYmxlO1xuXG5cdFx0aWYgKG9UYWJsZS5nZXRFbmFibGVQYXN0ZSgpID09PSB0cnVlKSB7XG5cdFx0XHRQYXN0ZUhlbHBlci5wYXN0ZURhdGEoYVJhd1Bhc3RlZERhdGEsIG9UYWJsZSwgb0NvbnRyb2xsZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvUmVzb3VyY2VNb2RlbCA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0XHRNZXNzYWdlQm94LmVycm9yKG9SZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX09QX0NPTlRST0xMRVJfU0FQRkVfUEFTVEVfRElTQUJMRURfTUVTU0FHRVwiKSwge1xuXHRcdFx0XHR0aXRsZTogb1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvLyBUaGlzIGV2ZW50IHdpbGwgYWxsb3cgdXMgdG8gaW50ZXJjZXB0IHRoZSBleHBvcnQgYmVmb3JlIGlzIHRyaWdnZXJlZCB0byBjb3ZlciBzcGVjaWZpYyBjYXNlc1xuXHQvLyB0aGF0IGNvdWxkbid0IGJlIGFkZHJlc3NlZCBvbiB0aGUgcHJvcGVydHlJbmZvcyBmb3IgZWFjaCBjb2x1bW4uXG5cdC8vIGUuZy4gRml4ZWQgVGFyZ2V0IFZhbHVlIGZvciB0aGUgZGF0YXBvaW50c1xuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25CZWZvcmVFeHBvcnQob0V2ZW50OiBVSTVFdmVudCkge1xuXHRcdGNvbnN0IGlzU3BsaXRNb2RlID0gKG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgYW55KS51c2VyRXhwb3J0U2V0dGluZ3Muc3BsaXRDZWxscyxcblx0XHRcdG9UYWJsZUNvbnRyb2xsZXIgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgUGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvRXhwb3J0U2V0dGluZ3MgPSAob0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyBhbnkpLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0b1RhYmxlQ29sdW1ucyA9IHRoaXMudGFibGVEZWZpbml0aW9uLmNvbHVtbnM7XG5cblx0XHRUYWJsZUFQSS51cGRhdGVFeHBvcnRTZXR0aW5ncyhvRXhwb3J0U2V0dGluZ3MsIG9UYWJsZUNvbHVtbnMsIG9UYWJsZUNvbnRyb2xsZXIsIGlzU3BsaXRNb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBNREMgRGF0YVN0YXRlSW5kaWNhdG9yIHBsdWdpbiB0byBkaXNwbGF5IG1lc3NhZ2VTdHJpcCBvbiBhIHRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb01lc3NhZ2Vcblx0ICogQHBhcmFtIG9UYWJsZVxuXHQgKiBAbmFtZSBkYXRhU3RhdGVGaWx0ZXJcblx0ICogQHJldHVybnMgV2hldGhlciB0byByZW5kZXIgdmlzaWJsZSB0aGUgbWVzc2FnZVN0cmlwXG5cdCAqL1xuXHRzdGF0aWMgZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyKG9NZXNzYWdlOiBhbnksIG9UYWJsZTogYW55KTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc1RhYmxlQ29udGV4dEJpbmRpbmdQYXRoID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRjb25zdCBzVGFibGVSb3dCaW5kaW5nID0gKHNUYWJsZUNvbnRleHRCaW5kaW5nUGF0aCA/IGAke3NUYWJsZUNvbnRleHRCaW5kaW5nUGF0aH0vYCA6IFwiXCIpICsgb1RhYmxlLmdldFJvd0JpbmRpbmcoKS5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIHNUYWJsZVJvd0JpbmRpbmcgPT09IG9NZXNzYWdlLmdldFRhcmdldCgpID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZXZlbnQgaGFuZGxlcyB0aGUgRGF0YVN0YXRlIG9mIHRoZSBEYXRhU3RhdGVJbmRpY2F0b3IgcGx1Z2luIGZyb20gTURDIG9uIGEgdGFibGUuXG5cdCAqIEl0J3MgZmlyZWQgd2hlbiBuZXcgZXJyb3IgbWVzc2FnZXMgYXJlIHNlbnQgZnJvbSB0aGUgYmFja2VuZCB0byB1cGRhdGUgcm93IGhpZ2hsaWdodGluZy5cblx0ICpcblx0ICogQG5hbWUgb25EYXRhU3RhdGVDaGFuZ2Vcblx0ICogQHBhcmFtIG9FdmVudCBFdmVudCBvYmplY3Rcblx0ICovXG5cdEB4bWxFdmVudEhhbmRsZXIoKVxuXHRvbkRhdGFTdGF0ZUNoYW5nZShvRXZlbnQ6IFVJNUV2ZW50KSB7XG5cdFx0Y29uc3Qgb0RhdGFTdGF0ZUluZGljYXRvciA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBEYXRhU3RhdGVJbmRpY2F0b3I7XG5cdFx0Y29uc3QgYUZpbHRlcmVkTWVzc2FnZXMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiZmlsdGVyZWRNZXNzYWdlc1wiKTtcblx0XHRpZiAoYUZpbHRlcmVkTWVzc2FnZXMpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsID0gb0RhdGFTdGF0ZUluZGljYXRvci5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiZmlsdGVyZWRNZXNzYWdlc1wiLCBhRmlsdGVyZWRNZXNzYWdlcywgb0RhdGFTdGF0ZUluZGljYXRvci5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIENvbnRleHQpO1xuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyB1cGRhdGVFeHBvcnRTZXR0aW5ncyhcblx0XHRleHBvcnRTZXR0aW5nczogRXhwb3J0U2V0dGluZ3MsXG5cdFx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0XHR0YWJsZUNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRcdGlzU3BsaXRNb2RlOiBib29sZWFuXG5cdCk6IEV4cG9ydFNldHRpbmdzIHtcblx0XHRsZXQgcmVmQ29sdW1uOiBhbnkgPSBudWxsO1xuXHRcdGxldCBhZGRpdGlvbmFsUHJvcGVydHlJbmRleDogbnVtYmVyO1xuXG5cdFx0Ly9TZXQgc3RhdGljIHNpemVMaW1pdCBkdXJpbmcgZXhwb3J0XG5cdFx0ZXhwb3J0U2V0dGluZ3MuZGF0YVNvdXJjZS5zaXplTGltaXQgPSAxMDAwO1xuXG5cdFx0Y29uc3QgZXhwb3J0Q29sdW1ucyA9IGV4cG9ydFNldHRpbmdzLndvcmtib29rPy5jb2x1bW5zO1xuXHRcdGV4cG9ydENvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uRXhwb3J0OiBFeHBvcnRDb2x1bW4pIHtcblx0XHRcdGNvbHVtbkV4cG9ydC5sYWJlbCA9IERlbGVnYXRlVXRpbC5nZXRMb2NhbGl6ZWRUZXh0KGNvbHVtbkV4cG9ydC5sYWJlbCwgdGFibGVDb250cm9sbGVyKTtcblx0XHRcdGNvbHVtbnM/LmZvckVhY2goKGNvbCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSBjb2wgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0XHRpZiAoaXNTcGxpdE1vZGUpIHtcblx0XHRcdFx0XHQvL0FkZCBUYXJnZXRWYWx1ZSBvbiBkdW1teSBjcmVhdGVkIHByb3BlcnR5IHdoZW4gZXhwb3J0aW5nIG9uIHNwbGl0IG1vZGVcblx0XHRcdFx0XHRpZiAoY29sdW1uLmlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5ICYmIGNvbHVtbi5yZWxhdGl2ZVBhdGggPT09IGNvbHVtbkV4cG9ydC5wcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0Y29sdW1uRXhwb3J0LnByb3BlcnR5ID0gW2NvbHVtbkV4cG9ydC5wcm9wZXJ0eV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIE1vZGlmeSBkdXBsaWNhdGUgbGFiZWxzIGZyb20gc3BsaXR0ZWQgY29sdW1uc1xuXHRcdFx0XHRcdGNvbnN0IHJlZ2V4ID0gLyguKiktYWRkaXRpb25hbFByb3BlcnR5KFxcZCspLy5leGVjKGNvbHVtbkV4cG9ydC5jb2x1bW5JZCk7XG5cdFx0XHRcdFx0aWYgKHJlZ2V4ID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlJbmRleCA9IDE7XG5cdFx0XHRcdFx0XHRyZWZDb2x1bW4gPSBjb2x1bW5FeHBvcnQ7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChyZWdleFsxXSA9PT0gcmVmQ29sdW1uPy5jb2x1bW5JZCkge1xuXHRcdFx0XHRcdFx0Y29sdW1uRXhwb3J0LmxhYmVsID1cblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwb3J0LmxhYmVsID09PSByZWZDb2x1bW4ubGFiZWxcblx0XHRcdFx0XHRcdFx0XHQ/IGAke3JlZkNvbHVtbi5sYWJlbH0gKCR7KythZGRpdGlvbmFsUHJvcGVydHlJbmRleH0pYFxuXHRcdFx0XHRcdFx0XHRcdDogY29sdW1uRXhwb3J0LmxhYmVsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRUYWJsZUFQSS51cGRhdGVFeHBvcnRUeXBlT25UZXh0T25seVByb3BlcnRpZXMoY29sdW1uLCBjb2x1bW5FeHBvcnQsIGNvbHVtbnMpO1xuXHRcdFx0fSk7XG5cdFx0XHQvL3RyYW5zbGF0ZSBib29sZWFuIHZhbHVlc1xuXHRcdFx0aWYgKGNvbHVtbkV4cG9ydC50eXBlID09PSBcIkJvb2xlYW5cIikge1xuXHRcdFx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUubWFjcm9zXCIpO1xuXHRcdFx0XHRjb2x1bW5FeHBvcnQuZmFsc2VWYWx1ZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIm5vXCIpO1xuXHRcdFx0XHRjb2x1bW5FeHBvcnQudHJ1ZVZhbHVlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwieWVzXCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBleHBvcnRTZXR0aW5ncztcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGV4cG9ydCB0eXBlIG9mIHRoZSBjb2x1bW4gaW4gY2FzZSB0aGVyZSBpcyBvbmx5IG9uZSBjaGlsZCBwcm9wZXJ0eSB0byB1c2UgdGhlIGV4cG9ydCB0eXBlIG9mIHRoZSBjaGlsZCBwcm9wZXJ0eS5cblx0ICpcblx0ICogQHBhcmFtIGNvbHVtbiBDb2x1bW4gZnJvbSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGNvbHVtbkV4cG9ydCBDb2x1bW4gdG8gYmUgZXhwb3J0ZWRcblx0ICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zIENvbHVtbiBsaXN0IGZyb20gdGhlIHRhYmxlIGNvbnZlcnRlclxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0c3RhdGljIHVwZGF0ZUV4cG9ydFR5cGVPblRleHRPbmx5UHJvcGVydGllcyhjb2x1bW46IFRhYmxlQ29sdW1uLCBjb2x1bW5FeHBvcnQ6IEV4cG9ydENvbHVtbiwgYW5ub3RhdGlvbkNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiB2b2lkIHtcblx0XHQvLyBUaGlzIGFwcGxpZXMgdG8gdGhlIHRleHQgb25seSBhbm5vdGF0aW9uLCB1c2UgdGhlIGV4cG9ydCB0eXBlIG9mIHRoZSB0ZXh0IHByb3BlcnR5IGluc3RlYWQgb2YgdGhlIHZhbHVlLlxuXHRcdC8vIFRoZXJlIGFyZSAzIGNvbHVtbnMgdG8gYmUgY29uc2lkZXJlZCB0byB1cGRhdGUgdGhlIGV4cG9ydCB0eXBlIG9uIHRoZSBjaGlsZCBwcm9wZXJ0eVxuXHRcdGlmIChcblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zPy5sZW5ndGggPT09IDEgJiZcblx0XHRcdGNvbHVtbkV4cG9ydC5wcm9wZXJ0eS5sZW5ndGggPT09IDEgJiZcblx0XHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zWzBdID09PSBjb2x1bW5FeHBvcnQucHJvcGVydHlbMF1cblx0XHQpIHtcblx0XHRcdC8vIEZpcnN0IGNvbHVtbiBjb25zaWRlcmVkIGFzIGNvbXBsZXggYW5kIHBvaW50aW5nIHRvIGEgc2luZ2xlIGNoaWxkIHByb3BlcnR5XG5cdFx0XHRjb25zdCBjb2x1bW5Gcm9tQW5ub3RhdGlvbkNvbHVtbnMgPSBhbm5vdGF0aW9uQ29sdW1ucy5maW5kKFxuXHRcdFx0XHQvLyBTZWNvbmQgY29sdW1uIHJlZmVyZW5jZWQgYXMgYSBjaGlsZCBwcm9wZXJ0eSBmcm9tIHRoZSBmb3VuZCBjb21wbGV4IGNvbHVtblxuXHRcdFx0XHQoY29sKSA9PiAoY29sIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikucmVsYXRpdmVQYXRoID09PSBjb2x1bW5FeHBvcnQucHJvcGVydHlbMF1cblx0XHRcdCk7XG5cdFx0XHQvLyBBc3NpZ24gdG8gdGhlIGNvbHVtbiB0byBiZSBleHBvcnRlZCAodGhpcmQgY29sdW1uKSwgdGhlIHByb3BlcnR5IHR5cGUgb2YgdGhlIGNoaWxkIHByb3BlcnR5XG5cdFx0XHRjb2x1bW5FeHBvcnQudHlwZSA9IChjb2x1bW5Gcm9tQW5ub3RhdGlvbkNvbHVtbnMgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uKT8uZXhwb3J0U2V0dGluZ3M/LnR5cGU7XG5cdFx0fVxuXHR9XG5cblx0cmVzdW1lQmluZGluZyhiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiYmluZGluZ1N1c3BlbmRlZFwiLCBmYWxzZSk7XG5cdFx0aWYgKChiUmVxdWVzdElmTm90SW5pdGlhbGl6ZWQgJiYgISh0aGlzIGFzIGFueSkuZ2V0RGF0YUluaXRpYWxpemVkKCkpIHx8IHRoaXMuZ2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIikpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJvdXREYXRlZEJpbmRpbmdcIiwgZmFsc2UpO1xuXHRcdFx0KHRoaXMgYXMgYW55KS5nZXRDb250ZW50KCk/LnJlYmluZCgpO1xuXHRcdH1cblx0fVxuXG5cdHJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzKG9GaWx0ZXJDb250cm9sOiBDb250cm9sKTogYW55W10ge1xuXHRcdGNvbnN0IG9UYWJsZSA9ICh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQ29udHJvbCwgb1RhYmxlKTtcblx0fVxuXG5cdHN1c3BlbmRCaW5kaW5nKCkge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJiaW5kaW5nU3VzcGVuZGVkXCIsIHRydWUpO1xuXHR9XG5cblx0aW52YWxpZGF0ZUNvbnRlbnQoKSB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImRhdGFJbml0aWFsaXplZFwiLCBmYWxzZSk7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcIm91dERhdGVkQmluZGluZ1wiLCBmYWxzZSk7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25NYXNzRWRpdEJ1dHRvblByZXNzZWQob0V2ZW50OiBVSTVFdmVudCwgcGFnZUNvbnRyb2xsZXI6IGFueSkge1xuXHRcdGNvbnN0IG9UYWJsZSA9IHRoaXMuY29udGVudDtcblx0XHRpZiAocGFnZUNvbnRyb2xsZXIgJiYgcGFnZUNvbnRyb2xsZXIubWFzc0VkaXQpIHtcblx0XHRcdHBhZ2VDb250cm9sbGVyLm1hc3NFZGl0Lm9wZW5NYXNzRWRpdERpYWxvZyhvVGFibGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIlRoZSBDb250cm9sbGVyIGlzIG5vdCBlbmhhbmNlZCB3aXRoIE1hc3MgRWRpdCBmdW5jdGlvbmFsaXR5XCIpO1xuXHRcdH1cblx0fVxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0b25UYWJsZVNlbGVjdGlvbkNoYW5nZShvRXZlbnQ6IFVJNUV2ZW50KSB7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJzZWxlY3Rpb25DaGFuZ2VcIiwgb0V2ZW50LmdldFBhcmFtZXRlcnMoKSk7XG5cdH1cblxuXHQvKipcblx0ICogRXhwb3NlIHRoZSBpbnRlcm5hbCB0YWJsZSBkZWZpbml0aW9uIGZvciBleHRlcm5hbCB1c2FnZSBpbiBkZWxlZ2F0ZS5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHRhYmxlRGVmaW5pdGlvblxuXHQgKi9cblx0Z2V0VGFibGVEZWZpbml0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnRhYmxlRGVmaW5pdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBjb25uZWN0IHRoZSBmaWx0ZXIgdG8gdGhlIHRhYmxlQVBJIGlmIHJlcXVpcmVkXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlQVBJXG5cdCAqL1xuXG5cdHVwZGF0ZUZpbHRlckJhcigpIHtcblx0XHRjb25zdCB0YWJsZSA9ICh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGZpbHRlckJhclJlZklkID0gKHRoaXMgYXMgYW55KS5nZXRGaWx0ZXJCYXIoKTtcblx0XHRpZiAodGFibGUgJiYgZmlsdGVyQmFyUmVmSWQgJiYgdGFibGUuZ2V0RmlsdGVyKCkgIT09IGZpbHRlckJhclJlZklkKSB7XG5cdFx0XHR0aGlzLl9zZXRGaWx0ZXJCYXIoZmlsdGVyQmFyUmVmSWQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBmaWx0ZXIgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGZpbHRlckJhci5cblx0ICpcblx0ICogQHBhcmFtIGZpbHRlckJhclJlZklkIElkIG9mIHRoZSBmaWx0ZXIgYmFyXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLlRhYmxlQVBJXG5cdCAqL1xuXHRfc2V0RmlsdGVyQmFyKGZpbHRlckJhclJlZklkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB0YWJsZSA9ICh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGNvcmUgPSBzYXAudWkuZ2V0Q29yZSgpO1xuXG5cdFx0Ly8gJ2ZpbHRlckJhcicgcHJvcGVydHkgb2YgbWFjcm86VGFibGUocGFzc2VkIGFzIGN1c3RvbURhdGEpIG1pZ2h0IGJlXG5cdFx0Ly8gMS4gQSBsb2NhbElkIHdydCBWaWV3KEZQTSBleHBsb3JlciBleGFtcGxlKS5cblx0XHQvLyAyLiBBYnNvbHV0ZSBJZCh0aGlzIHdhcyBub3Qgc3VwcG9ydGVkIGluIG9sZGVyIHZlcnNpb25zKS5cblx0XHQvLyAzLiBBIGxvY2FsSWQgd3J0IEZyYWdtZW50SWQod2hlbiBhbiBYTUxDb21wb3NpdGUgb3IgRnJhZ21lbnQgaXMgaW5kZXBlbmRlbnRseSBwcm9jZXNzZWQpIGluc3RlYWQgb2YgVmlld0lkLlxuXHRcdC8vICAgICdmaWx0ZXJCYXInIHdhcyBzdXBwb3J0ZWQgZWFybGllciBhcyBhbiAnYXNzb2NpYXRpb24nIHRvIHRoZSAnbWRjOlRhYmxlJyBjb250cm9sIGluc2lkZSAnbWFjcm86VGFibGUnIGluIHByaW9yIHZlcnNpb25zLlxuXHRcdC8vICAgIEluIG5ld2VyIHZlcnNpb25zICdmaWx0ZXJCYXInIGlzIHVzZWQgbGlrZSBhbiBhc3NvY2lhdGlvbiB0byAnbWFjcm86VGFibGVBUEknLlxuXHRcdC8vICAgIFRoaXMgbWVhbnMgdGhhdCB0aGUgSWQgaXMgcmVsYXRpdmUgdG8gJ21hY3JvOlRhYmxlQVBJJy5cblx0XHQvLyAgICBUaGlzIHNjZW5hcmlvIGhhcHBlbnMgaW4gY2FzZSBvZiBGaWx0ZXJCYXIgYW5kIFRhYmxlIGluIGEgY3VzdG9tIHNlY3Rpb25zIGluIE9QIG9mIEZFVjQuXG5cblx0XHRjb25zdCB0YWJsZUFQSUlkID0gdGhpcz8uZ2V0SWQoKTtcblx0XHRjb25zdCB0YWJsZUFQSUxvY2FsSWQgPSB0aGlzLmRhdGEoXCJ0YWJsZUFQSUxvY2FsSWRcIik7XG5cdFx0Y29uc3QgcG90ZW50aWFsZmlsdGVyQmFySWQgPVxuXHRcdFx0dGFibGVBUElMb2NhbElkICYmIGZpbHRlckJhclJlZklkICYmIHRhYmxlQVBJSWQgJiYgdGFibGVBUElJZC5yZXBsYWNlKG5ldyBSZWdFeHAodGFibGVBUElMb2NhbElkICsgXCIkXCIpLCBmaWx0ZXJCYXJSZWZJZCk7IC8vIDNcblxuXHRcdGNvbnN0IGZpbHRlckJhciA9XG5cdFx0XHRDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRoaXMpPy5ieUlkKGZpbHRlckJhclJlZklkKSB8fCBjb3JlLmJ5SWQoZmlsdGVyQmFyUmVmSWQpIHx8IGNvcmUuYnlJZChwb3RlbnRpYWxmaWx0ZXJCYXJJZCk7XG5cblx0XHRpZiAoZmlsdGVyQmFyKSB7XG5cdFx0XHRpZiAoZmlsdGVyQmFyLmlzQShcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiKSkge1xuXHRcdFx0XHR0YWJsZS5zZXRGaWx0ZXIoYCR7ZmlsdGVyQmFyLmdldElkKCl9LWNvbnRlbnRgKTtcblx0XHRcdH0gZWxzZSBpZiAoZmlsdGVyQmFyLmlzQShcInNhcC51aS5tZGMuRmlsdGVyQmFyXCIpKSB7XG5cdFx0XHRcdHRhYmxlLnNldEZpbHRlcihmaWx0ZXJCYXIuZ2V0SWQoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tJZkNvbHVtbkV4aXN0cyhhRmlsdGVyZWRDb2x1bW1uczogYW55LCBjb2x1bW5OYW1lOiBhbnkpIHtcblx0XHRyZXR1cm4gYUZpbHRlcmVkQ29sdW1tbnMuc29tZShmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChvQ29sdW1uPy5jb2x1bW5OYW1lID09PSBjb2x1bW5OYW1lICYmIG9Db2x1bW4/LnNDb2x1bW5OYW1lVmlzaWJsZSkgfHxcblx0XHRcdFx0KG9Db2x1bW4/LnNUZXh0QXJyYW5nZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBvQ29sdW1uPy5zVGV4dEFycmFuZ2VtZW50ID09PSBjb2x1bW5OYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBjb2x1bW5OYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGdldElkZW50aWZpZXJDb2x1bW4oKTogYW55IHtcblx0XHRjb25zdCBvVGFibGUgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblx0XHRjb25zdCBoZWFkZXJJbmZvVGl0bGVQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5oZWFkZXJJbmZvVGl0bGU7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdHNDdXJyZW50RW50aXR5U2V0TmFtZSA9IG9UYWJsZS5kYXRhKFwibWV0YVBhdGhcIik7XG5cdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyRUeXBlLyRLZXlgKTtcblx0XHRjb25zdCBhRmlsdGVyZWRUZWNobmljYWxLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0aWYgKGFUZWNobmljYWxLZXlzICYmIGFUZWNobmljYWxLZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFUZWNobmljYWxLZXlzLmZvckVhY2goZnVuY3Rpb24gKHRlY2huaWNhbEtleTogc3RyaW5nKSB7XG5cdFx0XHRcdGlmICh0ZWNobmljYWxLZXkgIT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRcdGFGaWx0ZXJlZFRlY2huaWNhbEtleXMucHVzaCh0ZWNobmljYWxLZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3Qgc2VtYW50aWNLZXlDb2x1bW5zID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5zZW1hbnRpY0tleXM7XG5cblx0XHRjb25zdCBhVmlzaWJsZUNvbHVtbnM6IGFueSA9IFtdO1xuXHRcdGNvbnN0IGFGaWx0ZXJlZENvbHVtbW5zOiBhbnkgPSBbXTtcblx0XHRjb25zdCBhVGFibGVDb2x1bW5zID0gb1RhYmxlLmdldENvbHVtbnMoKTtcblx0XHRhVGFibGVDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0Y29uc3QgY29sdW1uID0gb0NvbHVtbj8uZ2V0RGF0YVByb3BlcnR5KCk7XG5cdFx0XHRhVmlzaWJsZUNvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdH0pO1xuXG5cdFx0YVZpc2libGVDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0Y29uc3Qgb1RleHRBcnJhbmdlbWVudCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vJFR5cGUvJHtvQ29sdW1ufUBgKTtcblx0XHRcdGNvbnN0IHNUZXh0QXJyYW5nZW1lbnQgPSBvVGV4dEFycmFuZ2VtZW50ICYmIG9UZXh0QXJyYW5nZW1lbnRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0/LiRQYXRoO1xuXHRcdFx0Y29uc3Qgc1RleHRQbGFjZW1lbnQgPVxuXHRcdFx0XHRvVGV4dEFycmFuZ2VtZW50ICYmXG5cdFx0XHRcdG9UZXh0QXJyYW5nZW1lbnRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdPy4kRW51bU1lbWJlcjtcblx0XHRcdGFGaWx0ZXJlZENvbHVtbW5zLnB1c2goe1xuXHRcdFx0XHRjb2x1bW5OYW1lOiBvQ29sdW1uLFxuXHRcdFx0XHRzVGV4dEFycmFuZ2VtZW50OiBzVGV4dEFycmFuZ2VtZW50LFxuXHRcdFx0XHRzQ29sdW1uTmFtZVZpc2libGU6ICEoc1RleHRQbGFjZW1lbnQgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0bGV0IGNvbHVtbjogYW55O1xuXG5cdFx0aWYgKGhlYWRlckluZm9UaXRsZVBhdGggIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNoZWNrSWZDb2x1bW5FeGlzdHMoYUZpbHRlcmVkQ29sdW1tbnMsIGhlYWRlckluZm9UaXRsZVBhdGgpKSB7XG5cdFx0XHRjb2x1bW4gPSBoZWFkZXJJbmZvVGl0bGVQYXRoO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRzZW1hbnRpY0tleUNvbHVtbnMgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0c2VtYW50aWNLZXlDb2x1bW5zLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0dGhpcy5jaGVja0lmQ29sdW1uRXhpc3RzKGFGaWx0ZXJlZENvbHVtbW5zLCBzZW1hbnRpY0tleUNvbHVtbnNbMF0pXG5cdFx0KSB7XG5cdFx0XHRjb2x1bW4gPSBzZW1hbnRpY0tleUNvbHVtbnNbMF07XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGFGaWx0ZXJlZFRlY2huaWNhbEtleXMgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0YUZpbHRlcmVkVGVjaG5pY2FsS2V5cy5sZW5ndGggPT09IDEgJiZcblx0XHRcdHRoaXMuY2hlY2tJZkNvbHVtbkV4aXN0cyhhRmlsdGVyZWRDb2x1bW1ucywgYUZpbHRlcmVkVGVjaG5pY2FsS2V5c1swXSlcblx0XHQpIHtcblx0XHRcdGNvbHVtbiA9IGFGaWx0ZXJlZFRlY2huaWNhbEtleXNbMF07XG5cdFx0fVxuXHRcdHJldHVybiBjb2x1bW47XG5cdH1cblxuXHRhc3luYyBzZXRVcEVtcHR5Um93cyhvVGFibGU6IFRhYmxlKSB7XG5cdFx0aWYgKHRoaXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2w/LmNyZWF0aW9uTW9kZSAhPT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBwV2FpdFRhYmxlUmVuZGVyZWQgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0aWYgKG9UYWJsZS5nZXREb21SZWYoKSkge1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBkZWxlZ2F0ZSA9IHtcblx0XHRcdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRvVGFibGUucmVtb3ZlRXZlbnREZWxlZ2F0ZShkZWxlZ2F0ZSk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvVGFibGUuYWRkRXZlbnREZWxlZ2F0ZShkZWxlZ2F0ZSwgdGhpcyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0YXdhaXQgcFdhaXRUYWJsZVJlbmRlcmVkO1xuXHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBvVGFibGUuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdGlmICghYklzSW5FZGl0TW9kZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBvQmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRpZiAob0JpbmRpbmcuaXNSZXNvbHZlZCgpICYmIG9CaW5kaW5nLmlzTGVuZ3RoRmluYWwoKSkge1xuXHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0JpbmRpbmcuZ2V0Q29udGV4dCgpLmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG9JbmFjdGl2ZUNvbnRleHQgPSBvQmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRleHQuaXNJbmFjdGl2ZSgpICYmIG9Db250ZXh0LmdldFBhdGgoKS5zdGFydHNXaXRoKHNDb250ZXh0UGF0aCk7XG5cdFx0XHR9KTtcblx0XHRcdGlmICghb0luYWN0aXZlQ29udGV4dCkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLl9jcmVhdGVFbXB0eVJvdyhvQmluZGluZywgb1RhYmxlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0YXN5bmMgX2NyZWF0ZUVtcHR5Um93KG9CaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLCBvVGFibGU6IFRhYmxlKSB7XG5cdFx0Y29uc3QgaUlubGluZUNyZWF0aW9uUm93Q291bnQgPSB0aGlzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sPy5pbmxpbmVDcmVhdGlvblJvd0NvdW50IHx8IDI7XG5cdFx0Y29uc3QgYURhdGEgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGlJbmxpbmVDcmVhdGlvblJvd0NvdW50OyBpICs9IDEpIHtcblx0XHRcdGFEYXRhLnB1c2goe30pO1xuXHRcdH1cblx0XHRjb25zdCBiQXRFbmQgPSBvVGFibGUuZGF0YShcInRhYmxlVHlwZVwiKSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0XHRjb25zdCBiSW5hY3RpdmUgPSB0cnVlO1xuXHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhvVGFibGUpO1xuXHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbEVkaXRGbG93ID0gb0NvbnRyb2xsZXIuX2VkaXRGbG93O1xuXHRcdGlmICghdGhpcy5jcmVhdGluZ0VtcHR5Um93cykge1xuXHRcdFx0dGhpcy5jcmVhdGluZ0VtcHR5Um93cyA9IHRydWU7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBhQ29udGV4dHMgPSBhd2FpdCBvSW50ZXJuYWxFZGl0Rmxvdy5jcmVhdGVNdWx0aXBsZURvY3VtZW50cyhcblx0XHRcdFx0XHRvQmluZGluZyxcblx0XHRcdFx0XHRhRGF0YSxcblx0XHRcdFx0XHRiQXRFbmQsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuZWRpdEZsb3cub25CZWZvcmVDcmVhdGUsXG5cdFx0XHRcdFx0YkluYWN0aXZlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFDb250ZXh0cz8uZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRcdG9Db250ZXh0LmNyZWF0ZWQoKS5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdGlmICghb0Vycm9yLmNhbmNlbGVkKSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG9FcnJvcjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlIGFzIGFueSk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHR0aGlzLmNyZWF0aW5nRW1wdHlSb3dzID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlQVBJO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O0VBa2pCTyxnQkFBZ0JBLElBQUksRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQUk7TUFDSCxJQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBTUcsQ0FBQyxFQUFFO01BQ1YsT0FBT0YsT0FBTyxDQUFDRSxDQUFDLENBQUM7SUFDbEI7SUFDQSxJQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBSSxFQUFFO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFSCxPQUFPLENBQUM7SUFDcEM7SUFDQSxPQUFPQyxNQUFNO0VBQ2Q7RUFHTywwQkFBMEJGLElBQUksRUFBRUssU0FBUyxFQUFFO0lBQ2pELElBQUk7TUFDSCxJQUFJSCxNQUFNLEdBQUdGLElBQUksRUFBRTtJQUNwQixDQUFDLENBQUMsT0FBT0csQ0FBQyxFQUFFO01BQ1gsT0FBT0UsU0FBUyxDQUFDLElBQUksRUFBRUYsQ0FBQyxDQUFDO0lBQzFCO0lBQ0EsSUFBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQUksRUFBRTtNQUMxQixPQUFPRixNQUFNLENBQUNFLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFRCxTQUFTLENBQUNDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUU7SUFDQSxPQUFPRCxTQUFTLENBQUMsS0FBSyxFQUFFSCxNQUFNLENBQUM7RUFDaEM7RUFBQztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFqWkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQWJBLElBZU1LLFFBQVEsV0FEYkMsY0FBYyxDQUFDLDhCQUE4QixDQUFDLFVBa0I3Q0MsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRSxRQUFRO0lBQ2RDLGFBQWEsRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixDQUFDO0lBQzdFQyxtQkFBbUIsRUFBRSxDQUNwQixxQ0FBcUMsRUFDckMsZ0RBQWdELEVBQ2hELHlEQUF5RDtFQUUzRCxDQUFDLENBQUMsVUFHREgsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUF1QixDQUFDLENBQUMsVUFVMUNELFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBVSxDQUFDLENBQUMsVUFRN0JELFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsVUFRNUJELFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsU0FBUztJQUFFRyxZQUFZLEVBQUU7RUFBTSxDQUFDLENBQUMsVUFVbERKLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsUUFBUTtJQUFFRyxZQUFZLEVBQUU7RUFBa0IsQ0FBQyxDQUFDLFVBUTdESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUcsWUFBWSxFQUFFO0VBQUssQ0FBQyxDQUFDLFVBUWpESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUcsWUFBWSxFQUFFO0VBQU0sQ0FBQyxDQUFDLFdBUWxESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUcsWUFBWSxFQUFFO0VBQU0sQ0FBQyxDQUFDLFdBUWxESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLFdBVTVCRCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLFdBUTVCRCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLFdBUTVCRCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUcsWUFBWSxFQUFFO0VBQU0sQ0FBQyxDQUFDLFdBUWxESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUcsWUFBWSxFQUFFO0VBQUssQ0FBQyxDQUFDLFdBUWpESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUcsWUFBWSxFQUFFO0VBQU0sQ0FBQyxDQUFDLFdBUWxESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUcsWUFBWSxFQUFFO0VBQU0sQ0FBQyxDQUFDLFdBUWxESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUcsWUFBWSxFQUFF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QTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0VBQUEsT0FtdEJoQi9PLFFBQVE7QUFBQSJ9
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import Log from "sap/base/Log";
|
|
2
2
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
AnnotationTableColumn,
|
|
5
|
+
ColumnExportSettings,
|
|
6
|
+
TableColumn,
|
|
7
|
+
TableVisualization
|
|
8
|
+
} from "sap/fe/core/converters/controls/Common/Table";
|
|
4
9
|
import { CreationMode } from "sap/fe/core/converters/ManifestSettings";
|
|
5
10
|
import type { PropertiesOf } from "sap/fe/core/helpers/ClassSupport";
|
|
6
11
|
import { defineUI5Class, event, property, xmlEventHandler } from "sap/fe/core/helpers/ClassSupport";
|
|
@@ -155,6 +160,28 @@ export type Column = {
|
|
|
155
160
|
placement?: string;
|
|
156
161
|
};
|
|
157
162
|
|
|
163
|
+
type ExportColumn = ColumnExportSettings & {
|
|
164
|
+
property: string | Array<string>;
|
|
165
|
+
label: string;
|
|
166
|
+
columnId: string;
|
|
167
|
+
width?: number;
|
|
168
|
+
textAlign?: string;
|
|
169
|
+
displayUnit?: boolean;
|
|
170
|
+
trueValue?: string;
|
|
171
|
+
falseValue?: string;
|
|
172
|
+
valueMap?: string;
|
|
173
|
+
type?: string;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
export type ExportSettings = {
|
|
177
|
+
dataSource: {
|
|
178
|
+
sizeLimit?: number;
|
|
179
|
+
};
|
|
180
|
+
workbook: {
|
|
181
|
+
columns: ExportColumn[];
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
|
|
158
185
|
/**
|
|
159
186
|
* Building block used to create a table based on the metadata provided by OData V4.
|
|
160
187
|
* <br>
|
|
@@ -587,48 +614,75 @@ class TableAPI extends MacroAPI {
|
|
|
587
614
|
}
|
|
588
615
|
|
|
589
616
|
static updateExportSettings(
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
617
|
+
exportSettings: ExportSettings,
|
|
618
|
+
columns: TableColumn[],
|
|
619
|
+
tableController: PageController,
|
|
593
620
|
isSplitMode: boolean
|
|
594
|
-
):
|
|
621
|
+
): ExportSettings {
|
|
595
622
|
let refColumn: any = null;
|
|
596
623
|
let additionalPropertyIndex: number;
|
|
597
624
|
|
|
598
625
|
//Set static sizeLimit during export
|
|
599
|
-
|
|
626
|
+
exportSettings.dataSource.sizeLimit = 1000;
|
|
600
627
|
|
|
601
|
-
const
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
const oResourceModel = sap.ui.getCore().getLibraryResourceBundle("sap.fe.macros");
|
|
607
|
-
oColumnExport.falseValue = oResourceModel.getText("no");
|
|
608
|
-
oColumnExport.trueValue = oResourceModel.getText("yes");
|
|
609
|
-
}
|
|
610
|
-
oColumns?.forEach((column) => {
|
|
611
|
-
const oColumn = column as AnnotationTableColumn;
|
|
628
|
+
const exportColumns = exportSettings.workbook?.columns;
|
|
629
|
+
exportColumns.forEach(function (columnExport: ExportColumn) {
|
|
630
|
+
columnExport.label = DelegateUtil.getLocalizedText(columnExport.label, tableController);
|
|
631
|
+
columns?.forEach((col) => {
|
|
632
|
+
const column = col as AnnotationTableColumn;
|
|
612
633
|
if (isSplitMode) {
|
|
613
634
|
//Add TargetValue on dummy created property when exporting on split mode
|
|
614
|
-
if (
|
|
615
|
-
|
|
635
|
+
if (column.isDataPointFakeTargetProperty && column.relativePath === columnExport.property) {
|
|
636
|
+
columnExport.property = [columnExport.property];
|
|
616
637
|
}
|
|
617
638
|
// Modify duplicate labels from splitted columns
|
|
618
|
-
const regex = /(.*)-additionalProperty(\d+)/.exec(
|
|
639
|
+
const regex = /(.*)-additionalProperty(\d+)/.exec(columnExport.columnId);
|
|
619
640
|
if (regex === null) {
|
|
620
641
|
additionalPropertyIndex = 1;
|
|
621
|
-
refColumn =
|
|
642
|
+
refColumn = columnExport;
|
|
622
643
|
} else if (regex[1] === refColumn?.columnId) {
|
|
623
|
-
|
|
624
|
-
|
|
644
|
+
columnExport.label =
|
|
645
|
+
columnExport.label === refColumn.label
|
|
625
646
|
? `${refColumn.label} (${++additionalPropertyIndex})`
|
|
626
|
-
:
|
|
647
|
+
: columnExport.label;
|
|
627
648
|
}
|
|
628
649
|
}
|
|
650
|
+
TableAPI.updateExportTypeOnTextOnlyProperties(column, columnExport, columns);
|
|
629
651
|
});
|
|
652
|
+
//translate boolean values
|
|
653
|
+
if (columnExport.type === "Boolean") {
|
|
654
|
+
const resourceModel = sap.ui.getCore().getLibraryResourceBundle("sap.fe.macros");
|
|
655
|
+
columnExport.falseValue = resourceModel.getText("no");
|
|
656
|
+
columnExport.trueValue = resourceModel.getText("yes");
|
|
657
|
+
}
|
|
630
658
|
});
|
|
631
|
-
return
|
|
659
|
+
return exportSettings;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
/**
|
|
663
|
+
* Update the export type of the column in case there is only one child property to use the export type of the child property.
|
|
664
|
+
*
|
|
665
|
+
* @param column Column from table converter
|
|
666
|
+
* @param columnExport Column to be exported
|
|
667
|
+
* @param annotationColumns Column list from the table converter
|
|
668
|
+
* @private
|
|
669
|
+
*/
|
|
670
|
+
static updateExportTypeOnTextOnlyProperties(column: TableColumn, columnExport: ExportColumn, annotationColumns: TableColumn[]): void {
|
|
671
|
+
// This applies to the text only annotation, use the export type of the text property instead of the value.
|
|
672
|
+
// There are 3 columns to be considered to update the export type on the child property
|
|
673
|
+
if (
|
|
674
|
+
column.propertyInfos?.length === 1 &&
|
|
675
|
+
columnExport.property.length === 1 &&
|
|
676
|
+
column.propertyInfos[0] === columnExport.property[0]
|
|
677
|
+
) {
|
|
678
|
+
// First column considered as complex and pointing to a single child property
|
|
679
|
+
const columnFromAnnotationColumns = annotationColumns.find(
|
|
680
|
+
// Second column referenced as a child property from the found complex column
|
|
681
|
+
(col) => (col as AnnotationTableColumn).relativePath === columnExport.property[0]
|
|
682
|
+
);
|
|
683
|
+
// Assign to the column to be exported (third column), the property type of the child property
|
|
684
|
+
columnExport.type = (columnFromAnnotationColumns as AnnotationTableColumn)?.exportSettings?.type;
|
|
685
|
+
}
|
|
632
686
|
}
|
|
633
687
|
|
|
634
688
|
resumeBinding(bRequestIfNotInitialized: boolean) {
|