@sapui5/sap.fe.core 1.136.5 → 1.136.7
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/core/.library +1 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +15 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +18 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +4 -4
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +3 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -2
- package/src/sap/fe/core/templating/PropertyHelper.ts +2 -1
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -93,6 +93,12 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/base/EventDelegateHook", "../
|
|
|
93
93
|
});
|
|
94
94
|
const isUsingBindingOnVisibility = formContainer?.getBindingInfo?.("visible")?.parts?.length > 0;
|
|
95
95
|
|
|
96
|
+
/**
|
|
97
|
+
* This function checks the visibility of every field within the FormElement.
|
|
98
|
+
* It hides the FormElement when the visibility of all contained fields is set to false
|
|
99
|
+
*/
|
|
100
|
+
this.hideFormElements(formElements);
|
|
101
|
+
|
|
96
102
|
/**
|
|
97
103
|
* This condition ignores the form container when a new group is created using the Adapt UI.
|
|
98
104
|
* If the group is empty, we should not hide it, as it is required to be there to add additional form elements.
|
|
@@ -121,8 +127,16 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/base/EventDelegateHook", "../
|
|
|
121
127
|
}
|
|
122
128
|
return parent?.isA("sap.uxap.ObjectPageLayout") === true ? parent : null;
|
|
123
129
|
};
|
|
130
|
+
_proto.hideFormElements = function hideFormElements(formElements) {
|
|
131
|
+
if (!Array.isArray(formElements)) return;
|
|
132
|
+
for (const formElement of formElements) {
|
|
133
|
+
const fields = formElement?.getFields();
|
|
134
|
+
const areAllFieldsHidden = fields?.every(field => field?.getVisible?.() === false);
|
|
135
|
+
if (areAllFieldsHidden) formElement.setVisible(false);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
124
138
|
return HideFormGroupAutomatically;
|
|
125
139
|
}(EventDelegateHook)) || _class);
|
|
126
140
|
return HideFormGroupAutomatically;
|
|
127
141
|
}, false);
|
|
128
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJIaWRlRm9ybUdyb3VwQXV0b21hdGljYWxseSIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9jbGFzcyIsIl9FdmVudERlbGVnYXRlSG9vayIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiYXBwQ29tcG9uZW50IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0UGFyZW50IiwiaGlkZVN1YnNlY3Rpb25zRm9ybUNvbnRhaW5lciIsImhpZGVIZWFkZXJDb250YWluZXIiLCJwYXJlbnQiLCJpc0EiLCJmb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiaGlkZUZvcm1Db250YWluZXJzIiwib3AiLCJmZXRjaE9iamVjdFBhZ2UiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwiaXNBcnJheSIsInNlY3Rpb24iLCJzdWJTZWN0aW9ucyIsImdldFN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbiIsInN1YlNlY3Rpb25CbG9ja3MiLCJnZXRCbG9ja3MiLCJpc0VkaXRhYmxlSGVhZGVyIiwic29tZSIsImhlYWRlckJsb2NrIiwic3ViU2VjdGlvbkJsb2NrIiwiZm9ybUNvbnRhaW5lciIsImZvcm1FbGVtZW50cyIsImdldEZvcm1FbGVtZW50cyIsImlzVGhlcmVBbnlWaXNpYmxlSXRlbSIsImZlIiwiZ2V0VmlzaWJsZSIsImlzVXNpbmdQYXJ0T2ZQcmV2aWV3QW5ub3RhdGlvbiIsImZvcm1FbGVtZW50IiwiYmluZGluZ0luZm8iLCJnZXRCaW5kaW5nSW5mbyIsInBhcnRzIiwiYmluZGluZ0luZm9QYXJ0IiwicGF0aCIsImlzVXNpbmdCaW5kaW5nT25WaXNpYmlsaXR5IiwiaXNBZGFwdGF0aW9uTW9kZSIsImRhdGEiLCJzZXRWaXNpYmxlIiwiRXZlbnREZWxlZ2F0ZUhvb2siXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkhpZGVGb3JtR3JvdXBBdXRvbWF0aWNhbGx5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEV2ZW50RGVsZWdhdGVIb29rIGZyb20gXCJzYXAvZmUvYmFzZS9FdmVudERlbGVnYXRlSG9va1wiO1xuaW1wb3J0IHR5cGUgU2VjdGlvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9TZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB0eXBlIEZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtXCI7XG5pbXBvcnQgdHlwZSBGb3JtQ29udGFpbmVyIGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vRm9ybUNvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCIuLi9Db21tb25VdGlsc1wiO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9scy5IaWRlRm9ybUdyb3VwQXV0b21hdGljYWxseVwiKVxuY2xhc3MgSGlkZUZvcm1Hcm91cEF1dG9tYXRpY2FsbHkgZXh0ZW5kcyBFdmVudERlbGVnYXRlSG9vayB7XG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IHwgbnVsbCA9IG51bGw7XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5hcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRQYXJlbnQoKSBhcyBDb250cm9sKTtcblxuXHRcdHRoaXMuaGlkZVN1YnNlY3Rpb25zRm9ybUNvbnRhaW5lcigpO1xuXHRcdHRoaXMuaGlkZUhlYWRlckNvbnRhaW5lcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIGFsbCB0aGUgZm9ybSBlbGVtZW50cyBhcmUgaGlkZGVuLCBhbmQgdGhlbiBoaWRlcyB0aGUgZm9ybSBjb250YWluZXIuXG5cdCAqL1xuXHRwcml2YXRlIGhpZGVTdWJzZWN0aW9uc0Zvcm1Db250YWluZXIoKTogdm9pZCB7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcz8uZ2V0UGFyZW50KCk7XG5cdFx0aWYgKHBhcmVudD8uaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdGNvbnN0IGZvcm1Db250YWluZXJzID0gcGFyZW50Py5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0dGhpcy5oaWRlRm9ybUNvbnRhaW5lcnMoZm9ybUNvbnRhaW5lcnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciBhbGwgdGhlIGZvcm0gZWxlbWVudHMgd2l0aGluIGFuIGVkaXRhYmxlIGhlYWRlciBhcmUgaGlkZGVuLCBhbmQgdGhlbiBoaWRlcyB0aGUgZm9ybSBjb250YWluZXIuXG5cdCAqL1xuXHRwcml2YXRlIGhpZGVIZWFkZXJDb250YWluZXIoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb3AgPSB0aGlzLmZldGNoT2JqZWN0UGFnZSgpO1xuXHRcdC8qKlxuXHRcdCAqIEdldCB0aGUgc2VjdGlvbnMgb2YgdGhlIG9iamVjdCBwYWdlXG5cdFx0ICovXG5cdFx0Y29uc3Qgc2VjdGlvbnMgPSBvcD8uZ2V0U2VjdGlvbnM/LigpIGFzIFNlY3Rpb25bXTtcblxuXHRcdGlmICghQXJyYXkuaXNBcnJheShzZWN0aW9ucykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogTmF2aWdhdGUgdGhyb3VnaCB0aGUgc3Vic2VjdGlvbnMgd2l0aGluIHRoZSBzZWN0aW9ucy5cblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgc3ViU2VjdGlvbnMgPSBzZWN0aW9uPy5nZXRTdWJTZWN0aW9ucygpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHN1YlNlY3Rpb24gb2Ygc3ViU2VjdGlvbnMpIHtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIEdldCB0aGUgc3Vic2VjdGlvbiBibG9ja3MuXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCBzdWJTZWN0aW9uQmxvY2tzID0gc3ViU2VjdGlvbj8uZ2V0QmxvY2tzKCkgYXMgU3ViU2VjdGlvbkJsb2NrW107XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBDaGVja3MgaWYgdGhlcmUgaXMgYSBmb3JtIGluc2lkZSB0aGUgYmxvY2suXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCBpc0VkaXRhYmxlSGVhZGVyID0gc3ViU2VjdGlvbkJsb2Nrcz8uc29tZSgoaGVhZGVyQmxvY2spID0+IGhlYWRlckJsb2NrLmlzQTxGb3JtPihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKTtcblxuXHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc3ViU2VjdGlvbkJsb2NrcykgfHwgIWlzRWRpdGFibGVIZWFkZXIpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoY29uc3Qgc3ViU2VjdGlvbkJsb2NrIG9mIHN1YlNlY3Rpb25CbG9ja3MpIHtcblx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHQgKiBHZXQgdGhlIGZvcm0gY29udGFpbmVycyB3aXRoaW4gdGhlIHN1YnNlY3Rpb24uXG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0aWYgKHN1YlNlY3Rpb25CbG9jay5pc0E8Rm9ybT4oXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZm9ybUNvbnRhaW5lcnMgPSBzdWJTZWN0aW9uQmxvY2s/LmdldEZvcm1Db250YWluZXJzPy4oKTtcblx0XHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGZvcm1Db250YWluZXJzKSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGVGb3JtQ29udGFpbmVycyhmb3JtQ29udGFpbmVycyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBoaWRlRm9ybUNvbnRhaW5lcnMoZm9ybUNvbnRhaW5lcnM6IEZvcm1Db250YWluZXJbXSk6IHZvaWQge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShmb3JtQ29udGFpbmVycykpIHJldHVybjtcblxuXHRcdGZvciAoY29uc3QgZm9ybUNvbnRhaW5lciBvZiBmb3JtQ29udGFpbmVycykge1xuXHRcdFx0Y29uc3QgZm9ybUVsZW1lbnRzID0gZm9ybUNvbnRhaW5lcj8uZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRjb25zdCBpc1RoZXJlQW55VmlzaWJsZUl0ZW0gPSBmb3JtRWxlbWVudHM/LnNvbWUoKGZlKSA9PiBmZT8uZ2V0VmlzaWJsZSgpKTtcblx0XHRcdGNvbnN0IGlzVXNpbmdQYXJ0T2ZQcmV2aWV3QW5ub3RhdGlvbiA9IGZvcm1FbGVtZW50cy5zb21lKChmb3JtRWxlbWVudCkgPT4ge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nSW5mbyA9IGZvcm1FbGVtZW50Py5nZXRCaW5kaW5nSW5mbz8uKFwidmlzaWJsZVwiKTtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYmluZGluZ0luZm8/LnBhcnRzKSlcblx0XHRcdFx0XHRyZXR1cm4gYmluZGluZ0luZm8ucGFydHMuc29tZSgoYmluZGluZ0luZm9QYXJ0OiB7IHBhdGg6IHN0cmluZyB9KSA9PiBiaW5kaW5nSW5mb1BhcnQucGF0aCA9PT0gXCJzaG93RGV0YWlsc1wiKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBpc1VzaW5nQmluZGluZ09uVmlzaWJpbGl0eSA9IGZvcm1Db250YWluZXI/LmdldEJpbmRpbmdJbmZvPy4oXCJ2aXNpYmxlXCIpPy5wYXJ0cz8ubGVuZ3RoID4gMDtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBUaGlzIGNvbmRpdGlvbiBpZ25vcmVzIHRoZSBmb3JtIGNvbnRhaW5lciB3aGVuIGEgbmV3IGdyb3VwIGlzIGNyZWF0ZWQgdXNpbmcgdGhlIEFkYXB0IFVJLlxuXHRcdFx0ICogSWYgdGhlIGdyb3VwIGlzIGVtcHR5LCB3ZSBzaG91bGQgbm90IGhpZGUgaXQsIGFzIGl0IGlzIHJlcXVpcmVkIHRvIGJlIHRoZXJlIHRvIGFkZCBhZGRpdGlvbmFsIGZvcm0gZWxlbWVudHMuXG5cdFx0XHQgKiBJZiB0aGUgZm9ybSBjb250YWluZXIgaXRzZWxmIGlzIG1hcmtlZCBhcyBVSS5IaWRkZW4sIHRoZW4gd2Ugc2hvdWxkIG5vdCBoaWRlIGl0LlxuXHRcdFx0ICovXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCh0aGlzLmFwcENvbXBvbmVudD8uaXNBZGFwdGF0aW9uTW9kZSgpID09PSB0cnVlICYmIGZvcm1FbGVtZW50cz8ubGVuZ3RoID09PSAwKSB8fFxuXHRcdFx0XHRpc1VzaW5nUGFydE9mUHJldmlld0Fubm90YXRpb24gfHxcblx0XHRcdFx0aXNVc2luZ0JpbmRpbmdPblZpc2liaWxpdHkgfHxcblx0XHRcdFx0Zm9ybUNvbnRhaW5lci5kYXRhKFwiVWlIaWRkZW5QcmVzZW50XCIpID09PSBcInRydWVcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlcmUncyBhIGNoYW5nZSBpbiB0aGUgZm9ybSwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gc2NlbmFyaW9zLlxuXHRcdFx0ICogRmlyc3QsIGlmIHRoZSBmb3JtIGNvbnRhaW5lciBpcyBoaWRkZW4sIHdlIG11c3QgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgc2hvdWxkIGJlIHNob3duIGFnYWluLlxuXHRcdFx0ICogU2Vjb25kLCBpZiB0aGUgZm9ybSBjb250YWluZXIgaXMgY3VycmVudGx5IGRpc3BsYXllZCwgd2UgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciBpdCBzaG91bGQgYmUgaGlkZGVuLlxuXHRcdFx0ICovXG5cdFx0XHRpZiAoaXNUaGVyZUFueVZpc2libGVJdGVtID09PSBmYWxzZSkge1xuXHRcdFx0XHRmb3JtQ29udGFpbmVyLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fSBlbHNlIGlmICghZm9ybUNvbnRhaW5lci5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Zm9ybUNvbnRhaW5lci5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZmV0Y2hPYmplY3RQYWdlKCk6IE9iamVjdFBhZ2VMYXlvdXQgfCBudWxsIHtcblx0XHRsZXQgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoKTtcblxuXHRcdHdoaWxlICghKHBhcmVudD8uaXNBPE9iamVjdFBhZ2VMYXlvdXQ+KFwic2FwLnV4YXAuT2JqZWN0UGFnZUxheW91dFwiKSA/PyBmYWxzZSkgJiYgdHlwZW9mIHBhcmVudD8uZ2V0UGFyZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHBhcmVudCA9IHBhcmVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGFyZW50Py5pc0E8T2JqZWN0UGFnZUxheW91dD4oXCJzYXAudXhhcC5PYmplY3RQYWdlTGF5b3V0XCIpID09PSB0cnVlID8gKHBhcmVudCBhcyBPYmplY3RQYWdlTGF5b3V0KSA6IG51bGw7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGlkZUZvcm1Hcm91cEF1dG9tYXRp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
|
|
142
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJIaWRlRm9ybUdyb3VwQXV0b21hdGljYWxseSIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9jbGFzcyIsIl9FdmVudERlbGVnYXRlSG9vayIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiYXBwQ29tcG9uZW50IiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0UGFyZW50IiwiaGlkZVN1YnNlY3Rpb25zRm9ybUNvbnRhaW5lciIsImhpZGVIZWFkZXJDb250YWluZXIiLCJwYXJlbnQiLCJpc0EiLCJmb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiaGlkZUZvcm1Db250YWluZXJzIiwib3AiLCJmZXRjaE9iamVjdFBhZ2UiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwiaXNBcnJheSIsInNlY3Rpb24iLCJzdWJTZWN0aW9ucyIsImdldFN1YlNlY3Rpb25zIiwic3ViU2VjdGlvbiIsInN1YlNlY3Rpb25CbG9ja3MiLCJnZXRCbG9ja3MiLCJpc0VkaXRhYmxlSGVhZGVyIiwic29tZSIsImhlYWRlckJsb2NrIiwic3ViU2VjdGlvbkJsb2NrIiwiZm9ybUNvbnRhaW5lciIsImZvcm1FbGVtZW50cyIsImdldEZvcm1FbGVtZW50cyIsImlzVGhlcmVBbnlWaXNpYmxlSXRlbSIsImZlIiwiZ2V0VmlzaWJsZSIsImlzVXNpbmdQYXJ0T2ZQcmV2aWV3QW5ub3RhdGlvbiIsImZvcm1FbGVtZW50IiwiYmluZGluZ0luZm8iLCJnZXRCaW5kaW5nSW5mbyIsInBhcnRzIiwiYmluZGluZ0luZm9QYXJ0IiwicGF0aCIsImlzVXNpbmdCaW5kaW5nT25WaXNpYmlsaXR5IiwiaGlkZUZvcm1FbGVtZW50cyIsImlzQWRhcHRhdGlvbk1vZGUiLCJkYXRhIiwic2V0VmlzaWJsZSIsImZpZWxkcyIsImdldEZpZWxkcyIsImFyZUFsbEZpZWxkc0hpZGRlbiIsImV2ZXJ5IiwiZmllbGQiLCJFdmVudERlbGVnYXRlSG9vayJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSGlkZUZvcm1Hcm91cEF1dG9tYXRpY2FsbHkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgRXZlbnREZWxlZ2F0ZUhvb2sgZnJvbSBcInNhcC9mZS9iYXNlL0V2ZW50RGVsZWdhdGVIb29rXCI7XG5pbXBvcnQgdHlwZSBTZWN0aW9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL1NlY3Rpb25cIjtcbmltcG9ydCB0eXBlIFN1YlNlY3Rpb25CbG9jayBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL2NvbnRyb2xzL1N1YlNlY3Rpb25CbG9ja1wiO1xuaW1wb3J0IHR5cGUgRm9ybSBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1cIjtcbmltcG9ydCB0eXBlIEZvcm1Db250YWluZXIgZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtQ29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBGb3JtRWxlbWVudCBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwiLi4vQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uL0NvbW1vblV0aWxzXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkhpZGVGb3JtR3JvdXBBdXRvbWF0aWNhbGx5XCIpXG5jbGFzcyBIaWRlRm9ybUdyb3VwQXV0b21hdGljYWxseSBleHRlbmRzIEV2ZW50RGVsZWdhdGVIb29rIHtcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfCBudWxsID0gbnVsbDtcblxuXHRvbkJlZm9yZVJlbmRlcmluZygpOiB2b2lkIHtcblx0XHR0aGlzLmFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFBhcmVudCgpIGFzIENvbnRyb2wpO1xuXG5cdFx0dGhpcy5oaWRlU3Vic2VjdGlvbnNGb3JtQ29udGFpbmVyKCk7XG5cdFx0dGhpcy5oaWRlSGVhZGVyQ29udGFpbmVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgYWxsIHRoZSBmb3JtIGVsZW1lbnRzIGFyZSBoaWRkZW4sIGFuZCB0aGVuIGhpZGVzIHRoZSBmb3JtIGNvbnRhaW5lci5cblx0ICovXG5cdHByaXZhdGUgaGlkZVN1YnNlY3Rpb25zRm9ybUNvbnRhaW5lcigpOiB2b2lkIHtcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzPy5nZXRQYXJlbnQoKTtcblx0XHRpZiAocGFyZW50Py5pc0E8Rm9ybT4oXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0Y29uc3QgZm9ybUNvbnRhaW5lcnMgPSBwYXJlbnQ/LmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHR0aGlzLmhpZGVGb3JtQ29udGFpbmVycyhmb3JtQ29udGFpbmVycyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIGFsbCB0aGUgZm9ybSBlbGVtZW50cyB3aXRoaW4gYW4gZWRpdGFibGUgaGVhZGVyIGFyZSBoaWRkZW4sIGFuZCB0aGVuIGhpZGVzIHRoZSBmb3JtIGNvbnRhaW5lci5cblx0ICovXG5cdHByaXZhdGUgaGlkZUhlYWRlckNvbnRhaW5lcigpOiB2b2lkIHtcblx0XHRjb25zdCBvcCA9IHRoaXMuZmV0Y2hPYmplY3RQYWdlKCk7XG5cdFx0LyoqXG5cdFx0ICogR2V0IHRoZSBzZWN0aW9ucyBvZiB0aGUgb2JqZWN0IHBhZ2Vcblx0XHQgKi9cblx0XHRjb25zdCBzZWN0aW9ucyA9IG9wPy5nZXRTZWN0aW9ucz8uKCkgYXMgU2VjdGlvbltdO1xuXG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHNlY3Rpb25zKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBOYXZpZ2F0ZSB0aHJvdWdoIHRoZSBzdWJzZWN0aW9ucyB3aXRoaW4gdGhlIHNlY3Rpb25zLlxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBzdWJTZWN0aW9ucyA9IHNlY3Rpb24/LmdldFN1YlNlY3Rpb25zKCk7XG5cblx0XHRcdGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiBzdWJTZWN0aW9ucykge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogR2V0IHRoZSBzdWJzZWN0aW9uIGJsb2Nrcy5cblx0XHRcdFx0ICovXG5cdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb25CbG9ja3MgPSBzdWJTZWN0aW9uPy5nZXRCbG9ja3MoKSBhcyBTdWJTZWN0aW9uQmxvY2tbXTtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIENoZWNrcyBpZiB0aGVyZSBpcyBhIGZvcm0gaW5zaWRlIHRoZSBibG9jay5cblx0XHRcdFx0ICovXG5cdFx0XHRcdGNvbnN0IGlzRWRpdGFibGVIZWFkZXIgPSBzdWJTZWN0aW9uQmxvY2tzPy5zb21lKChoZWFkZXJCbG9jaykgPT4gaGVhZGVyQmxvY2suaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpO1xuXG5cdFx0XHRcdGlmICghQXJyYXkuaXNBcnJheShzdWJTZWN0aW9uQmxvY2tzKSB8fCAhaXNFZGl0YWJsZUhlYWRlcikge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uQmxvY2sgb2Ygc3ViU2VjdGlvbkJsb2Nrcykge1xuXHRcdFx0XHRcdC8qKlxuXHRcdFx0XHRcdCAqIEdldCB0aGUgZm9ybSBjb250YWluZXJzIHdpdGhpbiB0aGUgc3Vic2VjdGlvbi5cblx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHRpZiAoc3ViU2VjdGlvbkJsb2NrLmlzQTxGb3JtPihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBmb3JtQ29udGFpbmVycyA9IHN1YlNlY3Rpb25CbG9jaz8uZ2V0Rm9ybUNvbnRhaW5lcnM/LigpO1xuXHRcdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZm9ybUNvbnRhaW5lcnMpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaGlkZUZvcm1Db250YWluZXJzKGZvcm1Db250YWluZXJzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGhpZGVGb3JtQ29udGFpbmVycyhmb3JtQ29udGFpbmVyczogRm9ybUNvbnRhaW5lcltdKTogdm9pZCB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KGZvcm1Db250YWluZXJzKSkgcmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBmb3JtQ29udGFpbmVyIG9mIGZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRjb25zdCBmb3JtRWxlbWVudHMgPSBmb3JtQ29udGFpbmVyPy5nZXRGb3JtRWxlbWVudHMoKTtcblx0XHRcdGNvbnN0IGlzVGhlcmVBbnlWaXNpYmxlSXRlbSA9IGZvcm1FbGVtZW50cz8uc29tZSgoZmUpID0+IGZlPy5nZXRWaXNpYmxlKCkpO1xuXHRcdFx0Y29uc3QgaXNVc2luZ1BhcnRPZlByZXZpZXdBbm5vdGF0aW9uID0gZm9ybUVsZW1lbnRzLnNvbWUoKGZvcm1FbGVtZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdJbmZvID0gZm9ybUVsZW1lbnQ/LmdldEJpbmRpbmdJbmZvPy4oXCJ2aXNpYmxlXCIpO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShiaW5kaW5nSW5mbz8ucGFydHMpKVxuXHRcdFx0XHRcdHJldHVybiBiaW5kaW5nSW5mby5wYXJ0cy5zb21lKChiaW5kaW5nSW5mb1BhcnQ6IHsgcGF0aDogc3RyaW5nIH0pID0+IGJpbmRpbmdJbmZvUGFydC5wYXRoID09PSBcInNob3dEZXRhaWxzXCIpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGlzVXNpbmdCaW5kaW5nT25WaXNpYmlsaXR5ID0gZm9ybUNvbnRhaW5lcj8uZ2V0QmluZGluZ0luZm8/LihcInZpc2libGVcIik/LnBhcnRzPy5sZW5ndGggPiAwO1xuXG5cdFx0XHQvKipcblx0XHRcdCAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSB2aXNpYmlsaXR5IG9mIGV2ZXJ5IGZpZWxkIHdpdGhpbiB0aGUgRm9ybUVsZW1lbnQuXG5cdFx0XHQgKiBJdCBoaWRlcyB0aGUgRm9ybUVsZW1lbnQgd2hlbiB0aGUgdmlzaWJpbGl0eSBvZiBhbGwgY29udGFpbmVkIGZpZWxkcyBpcyBzZXQgdG8gZmFsc2Vcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5oaWRlRm9ybUVsZW1lbnRzKGZvcm1FbGVtZW50cyk7XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogVGhpcyBjb25kaXRpb24gaWdub3JlcyB0aGUgZm9ybSBjb250YWluZXIgd2hlbiBhIG5ldyBncm91cCBpcyBjcmVhdGVkIHVzaW5nIHRoZSBBZGFwdCBVSS5cblx0XHRcdCAqIElmIHRoZSBncm91cCBpcyBlbXB0eSwgd2Ugc2hvdWxkIG5vdCBoaWRlIGl0LCBhcyBpdCBpcyByZXF1aXJlZCB0byBiZSB0aGVyZSB0byBhZGQgYWRkaXRpb25hbCBmb3JtIGVsZW1lbnRzLlxuXHRcdFx0ICogSWYgdGhlIGZvcm0gY29udGFpbmVyIGl0c2VsZiBpcyBtYXJrZWQgYXMgVUkuSGlkZGVuLCB0aGVuIHdlIHNob3VsZCBub3QgaGlkZSBpdC5cblx0XHRcdCAqL1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQodGhpcy5hcHBDb21wb25lbnQ/LmlzQWRhcHRhdGlvbk1vZGUoKSA9PT0gdHJ1ZSAmJiBmb3JtRWxlbWVudHM/Lmxlbmd0aCA9PT0gMCkgfHxcblx0XHRcdFx0aXNVc2luZ1BhcnRPZlByZXZpZXdBbm5vdGF0aW9uIHx8XG5cdFx0XHRcdGlzVXNpbmdCaW5kaW5nT25WaXNpYmlsaXR5IHx8XG5cdFx0XHRcdGZvcm1Db250YWluZXIuZGF0YShcIlVpSGlkZGVuUHJlc2VudFwiKSA9PT0gXCJ0cnVlXCJcblx0XHRcdCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBldmVyeSB0aW1lIHRoZXJlJ3MgYSBjaGFuZ2UgaW4gdGhlIGZvcm0sIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIHNjZW5hcmlvcy5cblx0XHRcdCAqIEZpcnN0LCBpZiB0aGUgZm9ybSBjb250YWluZXIgaXMgaGlkZGVuLCB3ZSBtdXN0IGRldGVybWluZSB3aGV0aGVyIGl0IHNob3VsZCBiZSBzaG93biBhZ2Fpbi5cblx0XHRcdCAqIFNlY29uZCwgaWYgdGhlIGZvcm0gY29udGFpbmVyIGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQsIHdlIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgaXQgc2hvdWxkIGJlIGhpZGRlbi5cblx0XHRcdCAqL1xuXHRcdFx0aWYgKGlzVGhlcmVBbnlWaXNpYmxlSXRlbSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0Zm9ybUNvbnRhaW5lci5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH0gZWxzZSBpZiAoIWZvcm1Db250YWluZXIuZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGZvcm1Db250YWluZXIuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGZldGNoT2JqZWN0UGFnZSgpOiBPYmplY3RQYWdlTGF5b3V0IHwgbnVsbCB7XG5cdFx0bGV0IHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50KCk7XG5cblx0XHR3aGlsZSAoIShwYXJlbnQ/LmlzQTxPYmplY3RQYWdlTGF5b3V0PihcInNhcC51eGFwLk9iamVjdFBhZ2VMYXlvdXRcIikgPz8gZmFsc2UpICYmIHR5cGVvZiBwYXJlbnQ/LmdldFBhcmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhcmVudD8uaXNBPE9iamVjdFBhZ2VMYXlvdXQ+KFwic2FwLnV4YXAuT2JqZWN0UGFnZUxheW91dFwiKSA9PT0gdHJ1ZSA/IChwYXJlbnQgYXMgT2JqZWN0UGFnZUxheW91dCkgOiBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBoaWRlRm9ybUVsZW1lbnRzKGZvcm1FbGVtZW50czogRm9ybUVsZW1lbnRbXSk6IHZvaWQge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShmb3JtRWxlbWVudHMpKSByZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IGZvcm1FbGVtZW50IG9mIGZvcm1FbGVtZW50cykge1xuXHRcdFx0Y29uc3QgZmllbGRzID0gZm9ybUVsZW1lbnQ/LmdldEZpZWxkcygpO1xuXHRcdFx0Y29uc3QgYXJlQWxsRmllbGRzSGlkZGVuID0gZmllbGRzPy5ldmVyeSgoZmllbGQpID0+IGZpZWxkPy5nZXRWaXNpYmxlPy4oKSA9PT0gZmFsc2UpO1xuXG5cdFx0XHRpZiAoYXJlQWxsRmllbGRzSGlkZGVuKSBmb3JtRWxlbWVudC5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGlkZUZvcm1Hcm91cEF1dG9tYXRpY2FsbHk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O01BYU1BLDBCQUEwQixJQUFBQyxJQUFBLEdBRC9CQyxjQUFjLENBQUMsaURBQWlELENBQUMsRUFBQUQsSUFBQSxDQUFBRSxNQUFBLDBCQUFBQyxrQkFBQTtJQUFBLFNB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SSxDQUFDLGlCQUFpQixDQUFDLEtBQUssTUFBTSxFQUMvQztVQUNEO1FBQ0Q7O1FBRUE7QUFDSDtBQUNBO0FBQ0E7QUFDQTtRQUNHLElBQUliLHFCQUFxQixLQUFLLEtBQUssRUFBRTtVQUNwQ0gsYUFBYSxDQUFDaUIsVUFBVSxDQUFDLEtBQUssQ0FBQztRQUNoQyxDQUFDLE1BQU0sSUFBSSxDQUFDakIsYUFBYSxDQUFDSyxVQUFVLENBQUMsQ0FBQyxFQUFFO1VBQ3ZDTCxhQUFhLENBQUNpQixVQUFVLENBQUMsSUFBSSxDQUFDO1FBQy9CO01BQ0Q7SUFDRCxDQUFDO0lBQUE3QyxNQUFBLENBRU9jLGVBQWUsR0FBdkIsU0FBUUEsZUFBZUEsQ0FBQSxFQUE0QjtNQUNsRCxJQUFJTixNQUFNLEdBQUcsSUFBSSxDQUFDSCxTQUFTLENBQUMsQ0FBQztNQUU3QixPQUFPLEVBQUVHLE1BQU0sRUFBRUMsR0FBRyxDQUFtQiwyQkFBMkIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLE9BQU9ELE1BQU0sRUFBRUgsU0FBUyxLQUFLLFVBQVUsRUFBRTtRQUN6SEcsTUFBTSxHQUFHQSxNQUFNLENBQUNILFNBQVMsQ0FBQyxDQUFDO01BQzVCO01BRUEsT0FBT0csTUFBTSxFQUFFQyxHQUFHLENBQW1CLDJCQUEyQixDQUFDLEtBQUssSUFBSSxHQUFJRCxNQUFNLEdBQXdCLElBQUk7SUFDakgsQ0FBQztJQUFBUixNQUFBLENBRU8wQyxnQkFBZ0IsR0FBeEIsU0FBUUEsZ0JBQWdCQSxDQUFDYixZQUEyQixFQUFRO01BQzNELElBQUksQ0FBQ2xDLEtBQUssQ0FBQ3NCLE9BQU8sQ0FBQ1ksWUFBWSxDQUFDLEVBQUU7TUFFbEMsS0FBSyxNQUFNTSxXQUFXLElBQUlOLFlBQVksRUFBRTtRQUN2QyxNQUFNaUIsTUFBTSxHQUFHWCxXQUFXLEVBQUVZLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU1DLGtCQUFrQixHQUFHRixNQUFNLEVBQUVHLEtBQUssQ0FBRUMsS0FBSyxJQUFLQSxLQUFLLEVBQUVqQixVQUFVLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQztRQUVwRixJQUFJZSxrQkFBa0IsRUFBRWIsV0FBVyxDQUFDVSxVQUFVLENBQUMsS0FBSyxDQUFDO01BQ3REO0lBQ0QsQ0FBQztJQUFBLE9BQUE1RCwwQkFBQTtFQUFBLEVBeEl1Q2tFLGlCQUFpQixNQUFBL0QsTUFBQTtFQUFBLE9BMkkzQ0gsMEJBQTBCO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -4,6 +4,7 @@ import type Section from "sap/fe/macros/controls/Section";
|
|
|
4
4
|
import type SubSectionBlock from "sap/fe/templates/ObjectPage/controls/SubSectionBlock";
|
|
5
5
|
import type Form from "sap/ui/layout/form/Form";
|
|
6
6
|
import type FormContainer from "sap/ui/layout/form/FormContainer";
|
|
7
|
+
import type FormElement from "sap/ui/layout/form/FormElement";
|
|
7
8
|
import type Control from "sap/ui/mdc/Control";
|
|
8
9
|
import type ObjectPageLayout from "sap/uxap/ObjectPageLayout";
|
|
9
10
|
import type AppComponent from "../AppComponent";
|
|
@@ -94,6 +95,12 @@ class HideFormGroupAutomatically extends EventDelegateHook {
|
|
|
94
95
|
});
|
|
95
96
|
const isUsingBindingOnVisibility = formContainer?.getBindingInfo?.("visible")?.parts?.length > 0;
|
|
96
97
|
|
|
98
|
+
/**
|
|
99
|
+
* This function checks the visibility of every field within the FormElement.
|
|
100
|
+
* It hides the FormElement when the visibility of all contained fields is set to false
|
|
101
|
+
*/
|
|
102
|
+
this.hideFormElements(formElements);
|
|
103
|
+
|
|
97
104
|
/**
|
|
98
105
|
* This condition ignores the form container when a new group is created using the Adapt UI.
|
|
99
106
|
* If the group is empty, we should not hide it, as it is required to be there to add additional form elements.
|
|
@@ -130,6 +137,17 @@ class HideFormGroupAutomatically extends EventDelegateHook {
|
|
|
130
137
|
|
|
131
138
|
return parent?.isA<ObjectPageLayout>("sap.uxap.ObjectPageLayout") === true ? (parent as ObjectPageLayout) : null;
|
|
132
139
|
}
|
|
140
|
+
|
|
141
|
+
private hideFormElements(formElements: FormElement[]): void {
|
|
142
|
+
if (!Array.isArray(formElements)) return;
|
|
143
|
+
|
|
144
|
+
for (const formElement of formElements) {
|
|
145
|
+
const fields = formElement?.getFields();
|
|
146
|
+
const areAllFieldsHidden = fields?.every((field) => field?.getVisible?.() === false);
|
|
147
|
+
|
|
148
|
+
if (areAllFieldsHidden) formElement.setVisible(false);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
133
151
|
}
|
|
134
152
|
|
|
135
153
|
export default HideFormGroupAutomatically;
|
|
@@ -690,9 +690,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
690
690
|
const dataModelObjectPath = converterContext.getDataModelObjectPath();
|
|
691
691
|
const isHiddenDraftEnabled = converterContext.getManifestWrapper().getSapFeManifestConfiguration()?.app?.hideDraft?.enabled;
|
|
692
692
|
if (ModelHelper.isObjectPathDraftSupported(dataModelObjectPath)) {
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
693
|
+
const editStateFilter = getEditStateFilterPropertyInfo(); // Filter should always be added in the propertyInfo otherwise duplicate records are shown in RAP
|
|
694
|
+
editStateFilter.hiddenFilter = isHiddenDraftEnabled || !showDraftEditStatus(converterContext); //If filter restrictions are added it is set to true
|
|
695
|
+
aFetchedProperties.push(editStateFilter);
|
|
696
696
|
}
|
|
697
697
|
// add search
|
|
698
698
|
const searchRestrictions = getSearchRestrictions(converterContext);
|
|
@@ -847,4 +847,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/DataVisualization", "sap/
|
|
|
847
847
|
_exports.getExpandFilterFields = getExpandFilterFields;
|
|
848
848
|
return _exports;
|
|
849
849
|
}, false);
|
|
850
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJjb252ZXJ0ZXJDb250ZXh0Iiwic2VsZWN0aW9uVmFyaWFudFBhdGhzIiwiU2V0IiwibWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVyRmllbGRzIiwic2VsZWN0aW9uRmllbGRQYXRocyIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiVUkiLCJTZWxlY3Rpb25GaWVsZHMiLCJtYXAiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImtleSIsInRlbXBsYXRlIiwidmlzdWFsaXphdGlvbiIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsImxlbmd0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJsaXN0UmVwb3J0VGFibGVzIiwiY2hhcnRzIiwibm9TZWFyY2hJbkNoYXJ0cyIsImV2ZXJ5IiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsImVuYWJsZUFuYWx5dGljcyIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJfZXhwb3J0cyIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwibWFuaWZlc3RXcmFwcGVyIiwic2V0dGluZ3NDb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsImZpbHRlckNvbmZpZ3VyYXRpb25QYXRoIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgiLCJmYkNvbmZpZyIsImRlZmluZWRGaWx0ZXJGaWVsZHMiLCJnZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5Iiwic0tleSIsIlNsb3QiLCJEZWZhdWx0IiwidmlzdWFsRmlsdGVyIiwiZ2V0VmlzdWFsRmlsdGVycyIsImlzQ3VzdG9tRmlsdGVyIiwic2xvdE5hbWUiLCJkb2N1bWVudFJlZlRleHQiLCJmZXRjaFRleHRGcm9tTWV0YU1vZGVsIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInJlcXVpcmVkIiwib2JqZWN0UGF0aCIsImZpbHRlckJhckNvbnRleHRQYXRoIiwibWV0YVBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwic1Jlc3RyaWN0aW9uIiwiYVByb3BzIiwib1Byb3BlcnR5IiwiZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvIiwiZGF0YVR5cGUiLCJtYXhDb25kaXRpb25zIiwiY29uc3RyYWludHMiLCJtYXhMZW5ndGgiLCJnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8iLCJoaWRkZW5GaWx0ZXIiLCJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJpc0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJzTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyIsIm9GaWx0ZXJGaWVsZEluZm8iLCJkaXNwbGF5IiwiY2FzZVNlbnNpdGl2ZSIsIm1lbnUiLCJfZ2V0TWlzc2luZ0xhYmVsRm9yTWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJoYXNPd25Qcm9wZXJ0eSIsImRpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwiVGV4dCIsIm9UZXh0QXJyYW5nbWVudEFubm90YXRpb24iLCJUZXh0QXJyYW5nZW1lbnQiLCJmZXRjaFByb3BlcnR5SW5mbyIsIm9UeXBlQ29uZmlnIiwib1Byb3BlcnR5SW5mbyIsInNBbm5vdGF0aW9uUGF0aCIsInRhcmdldFByb3BlcnR5T2JqZWN0Iiwib0Zvcm1hdE9wdGlvbnMiLCJmb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiYXNzaWduIiwiaXNNdWx0aVZhbHVlIiwiYklzTXVsdGlWYWx1ZSIsImZpbHRlckV4cHJlc3Npb24iLCJpbmRleE9mIiwiX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImVudHJ5IiwiaW5jbHVkZXMiLCJhZGRDaGlsZE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcGVydGllcyIsInRhcmdldFByb3BlcnR5IiwiJHRhcmdldCIsImFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJUYXJnZXQiLCJpbm5lckRhdGFGaWVsZCIsImdldFJlbGF0aXZlUGF0aHMiLCJnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJsclRhYmxlcyIsImFyZ3VtZW50cyIsImxpbmVJdGVtVGVybSIsImdldEVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJNb2RlbEhlbHBlciIsImlzRHJhZnRSb290Iiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3RPcHRpb25zIiwicHJvcGVydHlJbmZvRmllbGRzIiwicmVkdWNlIiwiZmlsdGVyUHJvcGVydHlQYXRoIiwiZGVmYXVsdEZpbHRlckZpZWxkcyIsImZldGNoVHlwZUNvbmZpZyIsInR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwibnVsbGFibGUiLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciLCJhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvIiwicHJvcGVydHlJbmZvRmllbGQiLCJhUmVxdWlyZWRQcm9wcyIsImFUeXBlQ29uZmlnIiwiZ2V0TWF4Q29uZGl0aW9ucyIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsInByb2Nlc3NTZWxlY3Rpb25GaWVsZHMiLCJkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyIsImNvbmNhdCIsInBhcmFtZXRlckZpZWxkIiwicHJvcGVydHlDb252ZXJ0eUNvbnRleHQiLCJwcm9wZXJ0eVRhcmdldE9iamVjdCIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJvUmV0IiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzRW50aXR5U2V0UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpY2UiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsImFOb25GaWx0ZXJhYmxlUHJvcHMiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsImdldFNhcEZlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwiYXBwIiwiaGlkZURyYWZ0IiwiZW5hYmxlZCIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwic2hvd0RyYWZ0RWRpdFN0YXR1cyIsInNlYXJjaFJlc3RyaWN0aW9ucyIsImhpZGVCYXNpY1NlYXJjaCIsIkJvb2xlYW4iLCJTZWFyY2hhYmxlIiwibmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIkZpbHRlcmFibGUiLCJpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJPdmVycmlkZVR5cGUiLCJvdmVyd3JpdGUiLCJzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbCIsInByb3BlcnR5SW5mb3MiLCJzb3J0IiwiYSIsImIiLCJhR3JvdXBMYWJlbElzU2V0IiwiYkdyb3VwTGFiZWxJc1NldCIsImxvY2FsZUNvbXBhcmUiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhIiwicGFyYW1ldGVyRmllbGRzIiwic0ZldGNoUHJvcGVydGllcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzUHJvcGVydHlJbmZvIiwicHJvcFNlbGVjdGlvbkZpZWxkcyIsInBhcnNlIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiYUZpZWxkR3JvdXBzIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJpIiwicHJldmlvdXNWYWx1ZSIsImZpbHRlckZhY2V0IiwiSUQiLCJhbGxGaWx0ZXJzIiwiaXNDYXNlU2Vuc2l0aXZlIiwiZ2V0RXhwYW5kRmlsdGVyRmllbGRzIiwiZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInZhbHVlTGlzdCIsInJlcXVpcmVkUHJvcGVydGllcyIsIkZldGNoVmFsdWVzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGVybSwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRGaWx0ZXJSZXN0cmljdGlvbnNUeXBlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbixcblx0U2VhcmNoUmVzdHJpY3Rpb25zXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7IFZhbHVlTGlzdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVR5cGVBbm5vdGF0aW9ucywgUHJvcGVydHlBbm5vdGF0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRWRtX1R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCxcblx0RGF0YUZpZWxkV2l0aFVybCxcblx0RmllbGRHcm91cCxcblx0TGluZUl0ZW0sXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdFNlbGVjdE9wdGlvblR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5VHlwZUNvbnN0cmFpbnRzLCBQcm9wZXJ0eVR5cGVGb3JtYXRPcHRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IGdldFR5cGVDb25maWcsIGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBnZXRNYXhDb25kaXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgeyBnZXRWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCwgUG9zaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0NvbXBsZXhUeXBlLCBpc0VudGl0eVNldCwgaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocywgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHsgU3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cyB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCB0eXBlIFNpbXBsZVR5cGUgZnJvbSBcInNhcC91aS9tb2RlbC9TaW1wbGVUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEF2YWlsYWJpbGl0eVR5cGUsXG5cdEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEZpbHRlclNldHRpbmdzXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbi8vaW1wb3J0IHsgaGFzVmFsdWVIZWxwIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcblxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xuXHRkYXRhVHlwZT86IHN0cmluZztcblx0bmFtZT86IHN0cmluZztcblx0Y29uZGl0aW9uUGF0aDogc3RyaW5nO1xuXHRhdmFpbGFiaWxpdHk6IEF2YWlsYWJpbGl0eVR5cGU7XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0ZG9jdW1lbnRSZWZUZXh0Pzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncztcblx0aXNQYXJhbWV0ZXI/OiBib29sZWFuO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTWFuaWZlc3RGaWx0ZXJGaWVsZCA9IEZpbHRlckZpZWxkICYge1xuXHRzbG90TmFtZT86IHN0cmluZztcbn07XG5cbnR5cGUgRmlsdGVyR3JvdXAgPSB7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xufTtcblxuZW51bSBmaWx0ZXJGaWVsZFR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG50eXBlIFByb3BlcnR5VHlwZUNvbmZpZyA9IHtcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM6IFByb3BlcnR5VHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBQcm9wZXJ0eVR5cGVGb3JtYXRPcHRpb25zO1xuXHRiYXNlVHlwZT86IHN0cmluZztcblx0Y2xhc3NOYW1lPzoga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZTtcblx0dHlwZUluc3RhbmNlPzogU2ltcGxlVHlwZTtcbn07XG5cbmNvbnN0IHNFZG1TdHJpbmcgPSBcIkVkbS5TdHJpbmdcIjtcbmNvbnN0IHNTdHJpbmdEYXRhVHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCI7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCA9IEN1c3RvbUVsZW1lbnQ8TWFuaWZlc3RGaWx0ZXJGaWVsZD47XG5cbi8qKlxuICogRW50ZXIgYWxsIERhdGFGaWVsZHMgb2YgYSBnaXZlbiBGaWVsZEdyb3VwIGludG8gdGhlIGZpbHRlckZhY2V0TWFwLlxuICogQHBhcmFtIGZpZWxkR3JvdXBcbiAqIEByZXR1cm5zIFRoZSBtYXAgb2YgZmFjZXRzIGZvciB0aGUgZ2l2ZW4gRmllbGRHcm91cFxuICovXG5mdW5jdGlvbiBnZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGZpZWxkR3JvdXA6IEZpZWxkR3JvdXApOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4ge1xuXHRjb25zdCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cdGZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcFtkYXRhRmllbGQuVmFsdWUucGF0aF0gPSB7XG5cdFx0XHRcdGdyb3VwOiBmaWVsZEdyb3VwLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDogZmllbGRHcm91cC5MYWJlbD8udG9TdHJpbmcoKSA/PyBmaWVsZEdyb3VwLmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IGZpZWxkR3JvdXAucXVhbGlmaWVyXG5cdFx0XHR9O1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBmaWx0ZXJGYWNldE1hcDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGlvbiB2YXJpYW50cyB1c2VkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQuXG4gKiBAcGFyYW0gbHJUYWJsZVZpc3VhbGl6YXRpb25zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGV4Y2x1ZGVkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKFxuXHRsclRhYmxlVmlzdWFsaXphdGlvbnM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNldDxzdHJpbmc+IHtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkuZmlsdGVyRmllbGRzID8/IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFtcblx0XHQvL1NlbGVjdGlvbiBGaWVsZHMgY29taW5nIGZyb20gdGhlIGFubm90YXRpb25cblx0XHQuLi4oY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgPz8gW10pLm1hcChcblx0XHRcdChzZWxlY3Rpb25GaWVsZCkgPT4gc2VsZWN0aW9uRmllbGQudmFsdWVcblx0XHQpLFxuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIG5vdCB3aXRoIGN1c3RvbSB0ZW1wbGF0ZVxuXHRcdC4uLk9iamVjdC5rZXlzKG1hbmlmZXN0RmlsdGVyRmllbGRzKS5maWx0ZXIoKGtleSkgPT4gISFtYW5pZmVzdEZpbHRlckZpZWxkc1trZXldLnRlbXBsYXRlKVxuXHRdKTtcblxuXHRyZXR1cm4gbmV3IFNldChcblx0XHRsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0Y29uc3QgdGFibGVGaWx0ZXJzID0gdmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnM7XG5cdFx0XHRcdGlmICghdGFibGVGaWx0ZXJzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBbLi4uKHRhYmxlRmlsdGVycy5oaWRkZW5GaWx0ZXJzPy5wYXRocyA/PyBbXSksIC4uLih0YWJsZUZpbHRlcnMucXVpY2tGaWx0ZXJzPy5wYXRocyA/PyBbXSldLm1hcCgocGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gcGF0aC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRpZiAoIXNlbGVjdGlvblZhcmlhbnRQYXRocy5oYXMoYW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aHMuYWRkKGFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRDb25maWcgPSBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudENvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMgPSBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdChwcm9wZXJ0eU5hbWUpID0+ICFzZWxlY3Rpb25GaWVsZFBhdGhzLmhhcyhwcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZsYXQoMilcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC4gSXQgbG9va3MgYXMgZm9sbG93czpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgcm9vdCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBjb25kaXRpb24gcGF0aFxuICovXG5jb25zdCBfZ2V0Q29uZGl0aW9uUGF0aCA9IGZ1bmN0aW9uIChlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0bGV0IHBhcnRpYWxQYXRoO1xuXHRsZXQga2V5ID0gXCJcIjtcblx0d2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuXHRcdGxldCBwYXJ0ID0gcGFydHMuc2hpZnQoKSBhcyBzdHJpbmc7XG5cdFx0cGFydGlhbFBhdGggPSBwYXJ0aWFsUGF0aCA/IGAke3BhcnRpYWxQYXRofS8ke3BhcnR9YCA6IHBhcnQ7XG5cdFx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXJ0aWFsUGF0aCk7XG5cdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRwYXJ0ICs9IFwiKlwiO1xuXHRcdH1cblx0XHRrZXkgPSBrZXkgPyBgJHtrZXl9LyR7cGFydH1gIDogcGFydDtcblx0fVxuXHRyZXR1cm4ga2V5O1xufTtcblxuY29uc3QgX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdC8vIGlnbm9yZSBjb21wbGV4IHByb3BlcnR5IHR5cGVzIGFuZCBoaWRkZW4gYW5ub3RhdGVkIG9uZXNcblx0aWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LnRhcmdldFR5cGUgPT09IHVuZGVmaW5lZCAmJiAoaW5jbHVkZUhpZGRlbiB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSkge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKHByb3BlcnR5KSxcblx0XHRcdGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCA9IHtcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0Y29uZGl0aW9uUGF0aDogX2dldENvbmRpdGlvblBhdGgoZW50aXR5VHlwZSwgZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW5GaWx0ZXI/LnZhbHVlT2YoKSA9PT0gdHJ1ZSA/IFwiSGlkZGVuXCIgOiBcIkFkYXB0YXRpb25cIixcblx0XHRcdFx0bGFiZWw6IHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcGVydHkubmFtZSxcblx0XHRcdFx0Z3JvdXA6IHRhcmdldEVudGl0eVR5cGUubmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDogdGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gdGFyZ2V0RW50aXR5VHlwZS5uYW1lXG5cdFx0XHR9O1xuXHRcdGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkKTtcblx0XHRyZXR1cm4gZmlsdGVyRmllbGQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0ZWNobmljYWwgcHJvcGVydHkgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuIE9ubHkgcmVsZXZhbnQgZm9yIENyZWF0aW9uRGF0ZVRpbWVcbiAqIGFuZCBMYXN0Q2hhbmdlRGF0ZVRpbWUsIGFzIHRoZXkgYXJlIGRpc3BsYXlpbmcgdGhlIHRpbWVmcmFtZSByZWxhdGVkIHByb3BlcnRpZXMgYXMgYSBTZW1hbnRpY0RhdGVSYW5nZS5cbiAqIEBwYXJhbSBmaWx0ZXJGaWVsZFxuICovXG5jb25zdCBnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQpOiB2b2lkIHtcblx0aWYgKFxuXHRcdGZpbHRlckZpZWxkLmtleSA9PT0gXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YTo6Q3JlYXRpb25EYXRlVGltZVwiIHx8XG5cdFx0ZmlsdGVyRmllbGQua2V5ID09PSBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhOjpMYXN0Q2hhbmdlRGF0ZVRpbWVcIlxuXHQpIHtcblx0XHRjb25zdCBzdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzID0gW1xuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5UTyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuVE9NT1JST1csXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRXRUVLLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUTU9OVEgsXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRRVUFSVEVSLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUWUVBUlxuXHRcdF07XG5cdFx0ZmlsdGVyRmllbGQuc2V0dGluZ3MgPSB7XG5cdFx0XHRvcGVyYXRvckNvbmZpZ3VyYXRpb246IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHBhdGg6IFwia2V5XCIsXG5cdFx0XHRcdFx0ZXF1YWxzOiBzdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLmpvaW4oXCIsXCIpLFxuXHRcdFx0XHRcdGV4Y2x1ZGU6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdH1cbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmcsXG5cdHByb3BlcnRpZXM6IEFycmF5PFByb3BlcnR5PiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGNvbnN0IGZ1bGxQYXRoOiBzdHJpbmcgPSAobmF2aWdhdGlvblBhdGggPyBgJHtuYXZpZ2F0aW9uUGF0aH0vYCA6IFwiXCIpICsgcHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgcHJvcGVydHksIGZ1bGxQYXRoLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmIChzZWxlY3Rpb25GaWVsZCkge1xuXHRcdFx0XHRzZWxlY3Rpb25GaWVsZE1hcFtmdWxsUGF0aF0gPSBzZWxlY3Rpb25GaWVsZDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRNYXA7XG59O1xuXG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eVBhdGhzOiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGxldCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRpZiAocHJvcGVydHlQYXRocykge1xuXHRcdHByb3BlcnR5UGF0aHMuZm9yRWFjaCgocHJvcGVydHlQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdGxldCBsb2NhbFNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdFx0XHRjb25zdCBlbmhhbmNlZFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eT4oXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGhcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IGVuaGFuY2VkUGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByb3BlcnR5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCFpbmNsdWRlSGlkZGVuICYmXG5cdFx0XHRcdFx0ZW5oYW5jZWRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoXG5cdFx0XHRcdFx0XHQobmF2aWdhdGlvblByb3BlcnR5KSA9PiBuYXZpZ2F0aW9uUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZVxuXHRcdFx0XHRcdCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0XHQvLyBoYW5kbGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLmVudGl0eVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzQ29tcGxleFR5cGUocHJvcGVydHkudGFyZ2V0VHlwZSkpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIENvbXBsZXhUeXBlIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUucHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGdldFRhcmdldE5hdmlnYXRpb25QYXRoKGVuaGFuY2VkUGF0aCwgdHJ1ZSksXG5cdFx0XHRcdFx0W3Byb3BlcnR5XSxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0ge1xuXHRcdFx0XHQuLi5zZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRcdC4uLmxvY2FsU2VsZWN0aW9uRmllbGRzXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG5jb25zdCBfZ2V0RmlsdGVyRmllbGQgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdGxldCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZGVsZXRlIGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKSwgcHJvcGVydHlQYXRoLCB0cnVlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fVxuXHRpZiAoIWZpbHRlckZpZWxkKSB7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpPy5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1JU1NJTkdfU0VMRUNUSU9ORklFTEQpO1xuXHR9XG5cdC8vIGRlZmluZWQgU2VsZWN0aW9uRmllbGRzIGFyZSBhdmFpbGFibGUgYnkgZGVmYXVsdFxuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPSBmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIgPyBcIkhpZGRlblwiIDogXCJEZWZhdWx0XCI7XG5cdFx0ZmlsdGVyRmllbGQuaXNQYXJhbWV0ZXIgPSAhIWVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGQ7XG59O1xuXG5jb25zdCBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0YVNlbGVjdE9wdGlvbnM6IFNlbGVjdE9wdGlvblR5cGVbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFNldDxzdHJpbmc+LFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IFByb3BlcnR5UGF0aFtdXG4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gW107XG5cdGNvbnN0IFVJU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzO1xuXHQvLyBVc2luZyBlbnRpdHlUeXBlIGluc3RlYWQgb2YgZW50aXR5U2V0XG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaCgoU2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRVSVNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHR9KTtcblx0aWYgKGFTZWxlY3RPcHRpb25zICYmIGFTZWxlY3RPcHRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRhU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5TmFtZT8udmFsdWU7XG5cdFx0XHRjb25zdCBjdXJyZW50U2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRcdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChzUHJvcGVydHlQYXRoICYmICFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHNQcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGlmICghKHNQcm9wZXJ0eVBhdGggaW4gY3VycmVudFNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChzUHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IGRlZmF1bHRGaWx0ZXJWYWx1ZSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkZpbHRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRpZiAoIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRpZiAoZGVmYXVsdEZpbHRlclZhbHVlICYmICEocHJvcGVydHlQYXRoIGluIFVJU2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbi8qKlxuICogR2V0IGFsbCBwYXJhbWV0ZXIgZmlsdGVyIGZpZWxkcyBpbiBjYXNlIG9mIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhcmFtZXRlciBGaWx0ZXJGaWVsZHNcbiAqL1xuZnVuY3Rpb24gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWQgPSAhIXBhcmFtZXRlckVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dCAmJiAhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQgPVxuXHRcdGlzUGFyYW1ldGVyaXplZCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8RW50aXR5U2V0PihgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWApO1xuXG5cdHJldHVybiAoXG5cdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dFxuXHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXVxuXHQpIGFzIEZpbHRlckZpZWxkW107XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90LlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNoYXJ0cyBUaGUgQUxQIGNoYXJ0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoID0gZnVuY3Rpb24gKFxuXHRsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgaWYgY2hhcnRzIGFsbG93IHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluQ2hhcnRzID0gY2hhcnRzLmxlbmd0aCA9PT0gMCB8fCBjaGFydHMuZXZlcnkoKGNoYXJ0KSA9PiAhY2hhcnQuYXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoKTtcblxuXHQvLyBDaGVjayBpZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHQvLyBvciBhbGwgdGFibGVzIGFyZSBUcmVlVGFibGUgYW5kIG5vbmUgb2YgdGhlbSBhbGxvdyBmb3Igc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5UYWJsZXMgPVxuXHRcdGxpc3RSZXBvcnRUYWJsZXMubGVuZ3RoID09PSAwIHx8XG5cdFx0bGlzdFJlcG9ydFRhYmxlcy5ldmVyeSgodGFibGUpID0+ICh0YWJsZS5lbmFibGVBbmFseXRpY3MgfHwgdGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSAmJiAhdGFibGUuZW5hYmxlQmFzaWNTZWFyY2gpO1xuXG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRpZiAoY29udGV4dFBhdGggJiYgbm9TZWFyY2hJbkNoYXJ0cyAmJiBub1NlYXJjaEluVGFibGVzKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBmaWx0ZXIgZmllbGRzIGZyb20gdGhlIG1hbmlmZXN0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGggQW5ub3RhdGlvbiBwYXRoIG9mIHRoZSBzZWxlY3Rpb24gZmllbGRzXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyIGZpZWxkcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmdcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXG5cdGNvbnN0IHNldHRpbmdzQ29udGV4dFBhdGggPVxuXHRcdG1hbmlmZXN0V3JhcHBlci5nZXRDb250ZXh0UGF0aCgpIHx8IChtYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCkgPyBgLyR7bWFuaWZlc3RXcmFwcGVyLmdldEVudGl0eVNldCgpfWAgOiB1bmRlZmluZWQpO1xuXHRjb25zdCBmaWx0ZXJDb25maWd1cmF0aW9uUGF0aCA9IGdldEZpbHRlckNvbmZpZ3VyYXRpb25QYXRoKGNvbnZlcnRlckNvbnRleHQsIHNldHRpbmdzQ29udGV4dFBhdGgsIGFubm90YXRpb25QYXRoKTtcblx0bGV0IGZiQ29uZmlnOiBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSB7fTtcblx0ZmJDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbihmaWx0ZXJDb25maWd1cmF0aW9uUGF0aCk7XG5cblx0Y29uc3QgZGVmaW5lZEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+ID0gZmJDb25maWc/LmZpbHRlckZpZWxkcyB8fCB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0T2JqZWN0LmtleXMoZGVmaW5lZEZpbHRlckZpZWxkcykubWFwKChrZXkpID0+IGRlZmluZWRGaWx0ZXJGaWVsZHNba2V5XS5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShrZXkpKSxcblx0XHR0cnVlLFxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0KTtcblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIGRlZmluZWRGaWx0ZXJGaWVsZHMpIHtcblx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IGRlZmluZWRGaWx0ZXJGaWVsZHNbc0tleV07XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gZmlsdGVyRmllbGQucHJvcGVydHkgPz8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbcHJvcGVydHlOYW1lXTtcblx0XHRjb25zdCB0eXBlID0gZmlsdGVyRmllbGQudHlwZSA9PT0gXCJTbG90XCIgPyBmaWx0ZXJGaWVsZFR5cGUuU2xvdCA6IGZpbHRlckZpZWxkVHlwZS5EZWZhdWx0O1xuXHRcdGNvbnN0IHZpc3VhbEZpbHRlciA9XG5cdFx0XHRmaWx0ZXJGaWVsZCAmJiBmaWx0ZXJGaWVsZD8udmlzdWFsRmlsdGVyXG5cdFx0XHRcdD8gZ2V0VmlzdWFsRmlsdGVycyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBzS2V5LCBkZWZpbmVkRmlsdGVyRmllbGRzKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoZmlsdGVyRmllbGQudGVtcGxhdGUgfHwgZmlsdGVyRmllbGQudHlwZSA9PT0gZmlsdGVyRmllbGRUeXBlLlNsb3QpIHtcblx0XHRcdGlmIChmaWx0ZXJGaWVsZC5zZXR0aW5ncykge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncy5pc0N1c3RvbUZpbHRlciA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRpc0N1c3RvbUZpbHRlcjogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmaWx0ZXJGaWVsZHNbc0tleV0gPSB7XG5cdFx0XHRrZXk6IHNLZXksXG5cdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0c2xvdE5hbWU6IGZpbHRlckZpZWxkPy5zbG90TmFtZSB8fCBzS2V5LFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvbkZpZWxkPy5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGNvbmRpdGlvblBhdGg6IGZpbHRlckZpZWxkLnByb3BlcnR5XG5cdFx0XHRcdD8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSlcblx0XHRcdFx0OiBzZWxlY3Rpb25GaWVsZD8uY29uZGl0aW9uUGF0aCB8fCBwcm9wZXJ0eU5hbWUsXG5cdFx0XHRkb2N1bWVudFJlZlRleHQ6XG5cdFx0XHRcdGZpbHRlckZpZWxkLnByb3BlcnR5ICYmXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChcblx0XHRcdFx0XHRcInttZXRhTW9kZWw+XCIgKyBmaWx0ZXJGaWVsZC5wcm9wZXJ0eSArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Eb2N1bWVudGF0aW9uUmVmfVwiXG5cdFx0XHRcdCksXG5cdFx0XHR0ZW1wbGF0ZTogZmlsdGVyRmllbGQudGVtcGxhdGUsXG5cdFx0XHRsYWJlbDogY29udmVydGVyQ29udGV4dC5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKGZpbHRlckZpZWxkLmxhYmVsKSxcblx0XHRcdHBvc2l0aW9uOiBmaWx0ZXJGaWVsZC5wb3NpdGlvbiB8fCB7IHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyIH0sXG5cdFx0XHRhdmFpbGFiaWxpdHk6IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSB8fCBcIkRlZmF1bHRcIixcblx0XHRcdHNldHRpbmdzOiBmaWx0ZXJGaWVsZC5zZXR0aW5ncyxcblx0XHRcdHZpc3VhbEZpbHRlcjogdmlzdWFsRmlsdGVyLFxuXHRcdFx0cmVxdWlyZWQ6IGZpbHRlckZpZWxkLnJlcXVpcmVkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGRzO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGNvbmZpZ3VyYXRpb24gcGF0aCB0byBmZXRjaCB0aGUgY3VzdG9tIGZpbHRlciBmaWVsZHMgZnJvbSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHNldHRpbmdzQ29udGV4dFBhdGggTWFuaWZlc3QgZW50aXR5IHNldCBwYXRoIGFuZCBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoXG4gKiBAcmV0dXJucyBQYXRoIHRvIGZldGNoIHRoZSBjdXN0b20gZmlsdGVycyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBnZXRGaWx0ZXJDb25maWd1cmF0aW9uUGF0aCA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzZXR0aW5nc0NvbnRleHRQYXRoPzogc3RyaW5nLFxuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IG9iamVjdFBhdGg7XG5cdGNvbnN0IGZpbHRlckJhckNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBtZXRhUGF0aCA9IGAke2ZpbHRlckJhckNvbnRleHRQYXRofS8ke2Fubm90YXRpb25QYXRofWA7XG5cdGlmIChzZXR0aW5nc0NvbnRleHRQYXRoICYmIG1ldGFQYXRoPy5zdGFydHNXaXRoKHNldHRpbmdzQ29udGV4dFBhdGgpICYmIGFubm90YXRpb25QYXRoKSB7XG5cdFx0b2JqZWN0UGF0aCA9IG1ldGFQYXRoLnJlcGxhY2UoYCR7c2V0dGluZ3NDb250ZXh0UGF0aH0vYCwgXCJcIik7XG5cdH0gZWxzZSB7XG5cdFx0b2JqZWN0UGF0aCA9IGFubm90YXRpb25QYXRoO1xuXHR9XG5cdHJldHVybiBvYmplY3RQYXRoID8gb2JqZWN0UGF0aCA6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gX2dldEZpbHRlckZpZWxkKHt9LCBwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlclJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfCB1bmRlZmluZWQsXG5cdHNSZXN0cmljdGlvbjogXCJSZXF1aXJlZFByb3BlcnRpZXNcIiB8IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIlxuKTogc3RyaW5nW10ge1xuXHRsZXQgYVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXSkge1xuXHRcdGFQcm9wcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0ubWFwKGZ1bmN0aW9uIChvUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkudmFsdWU7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFQcm9wcztcbn07XG5cbmNvbnN0IGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uICgpOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IFwiJHNlYXJjaFwiLFxuXHRcdHBhdGg6IFwiJHNlYXJjaFwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0bWF4Q29uZGl0aW9uczogMSxcblx0XHRsYWJlbDogXCLigIhcIixcblx0XHRjb25zdHJhaW50czogeyBtYXhMZW5ndGg6IDEwMDAgfVxuXHR9O1xufTtcblxuY29uc3QgZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0bWF4Q29uZGl0aW9uczogMSxcblx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdGdyb3VwOiBcIlwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0aGlkZGVuRmlsdGVyOiBmYWxzZVxuXHR9O1xufTtcblxuY29uc3QgZ2V0U2VhcmNoUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFNlYXJjaFJlc3RyaWN0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uU2VhcmNoUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c05hdmlnYXRpb25QYXRoOiBzdHJpbmdcbik6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIChcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMgJiZcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Jlc3RyaWN0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59O1xuLy8gVGhlIHByb3BlcnR5SW5mbyB1c2VkIGludGVybmFsbHkgd2l0aGluIEZFXG5leHBvcnQgdHlwZSBQcm9wZXJ0eUluZm8gPSB7XG5cdGtleT86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0cGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRtYXhDb25kaXRpb25zPzogbnVtYmVyO1xuXHRkYXRhVHlwZT86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG5cdGRpc3BsYXk/OiBzdHJpbmc7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG5cdHR5cGU/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGZpbHRlckV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGlzQ3VzdG9tRmlsdGVyPzogYm9vbGVhbjtcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdHR5cGVDb25maWc/OiBUeXBlQ29uZmlnO1xuXHRmaWx0ZXJhYmxlPzogYm9vbGVhbjtcbn07XG5cbi8vIFRoZSBwcm9wZXJ0eUluZm8gd2Ugc2hhcmUgd2l0aCBNRENcbmV4cG9ydCB0eXBlIFByb3BlcnR5SW5mb0V4dGVybmFsID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0ZGF0YVR5cGU6IHN0cmluZztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IG9iamVjdDtcblx0Zm9ybWF0T3B0aW9ucz86IG9iamVjdDtcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0aGlkZGVuRmlsdGVyPzogYm9vbGVhbjtcbn07XG5jb25zdCBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0a2V5OiBvRmlsdGVyRmllbGRJbmZvLmtleSxcblx0XHRhbm5vdGF0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRjb25kaXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bmFtZTogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoISxcblx0XHRsYWJlbDogb0ZpbHRlckZpZWxkSW5mby5sYWJlbCxcblx0XHRoaWRkZW5GaWx0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdGRpc3BsYXk6IFwiVmFsdWVcIixcblx0XHRpc1BhcmFtZXRlcjogb0ZpbHRlckZpZWxkSW5mby5pc1BhcmFtZXRlcixcblx0XHRjYXNlU2Vuc2l0aXZlOiBvRmlsdGVyRmllbGRJbmZvLmNhc2VTZW5zaXRpdmUsXG5cdFx0YXZhaWxhYmlsaXR5OiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSxcblx0XHRwb3NpdGlvbjogb0ZpbHRlckZpZWxkSW5mby5wb3NpdGlvbixcblx0XHR0eXBlOiBvRmlsdGVyRmllbGRJbmZvLnR5cGUsXG5cdFx0dGVtcGxhdGU6IG9GaWx0ZXJGaWVsZEluZm8udGVtcGxhdGUsXG5cdFx0bWVudTogb0ZpbHRlckZpZWxkSW5mby5tZW51LFxuXHRcdHJlcXVpcmVkOiBvRmlsdGVyRmllbGRJbmZvLnJlcXVpcmVkLFxuXHRcdGlzQ3VzdG9tRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLnNldHRpbmdzPy5pc0N1c3RvbUZpbHRlclxuXHR9O1xufTtcblxuY29uc3QgX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0bWFuaWZlc3RGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD5cbik6IHZvaWQge1xuXHRmaWx0ZXJGaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRpZiAobWFuaWZlc3RGaWx0ZXJGaWVsZHMuaGFzT3duUHJvcGVydHkoZmlsdGVyRmllbGQua2V5KSAmJiAhbWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCkge1xuXHRcdFx0bWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCA9IGZpbHRlckZpZWxkLmxhYmVsO1xuXHRcdH1cblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eUFubm90YXRpb25zIHwgdW5kZWZpbmVkLFxuXHRvQ29sbGVjdGlvbkFubm90YXRpb25zOiBFbnRpdHlUeXBlQW5ub3RhdGlvbnMgfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0b1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiA9XG5cdFx0XHRvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpKTtcblxuXHRpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiOyAvL1RleHRGaXJzdFxuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyxcblx0b1R5cGVDb25maWc6IFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyhvRmlsdGVyRmllbGRJbmZvKTtcblx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblxuXHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdHJldHVybiBvUHJvcGVydHlJbmZvO1xuXHR9XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5T2JqZWN0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihzQW5ub3RhdGlvblBhdGgpLmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cblx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSB0YXJnZXRQcm9wZXJ0eU9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdGNvbnN0IG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblxuXHRjb25zdCBvRm9ybWF0T3B0aW9ucyA9IG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnM7XG5cdGNvbnN0IG9Db25zdHJhaW50cyA9IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzO1xuXHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMsXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50cyxcblx0XHRkaXNwbGF5OiBkaXNwbGF5TW9kZShvUHJvcGVydHlBbm5vdGF0aW9ucywgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucylcblx0fSk7XG5cdHJldHVybiBvUHJvcGVydHlJbmZvO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5SW5mbyk6IGJvb2xlYW4ge1xuXHRsZXQgYklzTXVsdGlWYWx1ZSA9IHRydWU7XG5cdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0c3dpdGNoIChvUHJvcGVydHkuZmlsdGVyRXhwcmVzc2lvbikge1xuXHRcdGNhc2UgXCJTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS50eXBlICYmIG9Qcm9wZXJ0eS50eXBlLmluZGV4T2YoXCJCb29sZWFuXCIpID4gMCkge1xuXHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gYklzTXVsdGlWYWx1ZTtcbn07XG5cbmNvbnN0IF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudHJ5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG4pOiBlbnRyeSBpcyBBbm5vdGF0aW9uVGVybTxEYXRhRmllbGQgfCBEYXRhRmllbGRXaXRoVXJsIHwgRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoPiB7XG5cdHJldHVybiAoXG5cdFx0KGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKSAmJlxuXHRcdGVudHJ5LlZhbHVlLnBhdGg/LmluY2x1ZGVzKFwiL1wiKVxuXHQpO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHdoaWNoIHJlZmVyZW5jZXMgdG8gdGhlIHVuaXQsIHRpbWV6b25lLCB0ZXh0QXJyYW5nZW1lbnQgb3IgY3VycmVuY3kgZnJvbSBhIGRhdGEgZmllbGQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdlByb3BlcnRpZXMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0O1xuXHRpZiAodGFyZ2V0UHJvcGVydHkpIHtcblx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoID1cblx0XHRcdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGhcblx0XHRcdD8gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5Py5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlbMF0ubmFtZTtcblx0XHRcdGlmICghbmF2UHJvcGVydGllcy5pbmNsdWRlcyhuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEdldHMgdXNlZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgZm9yIGF2YWlsYWJsZSBkYXRhRmllbGQuXG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0bmF2UHJvcGVydGllczogc3RyaW5nW10sXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmdbXSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkge1xuXHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGlubmVyRGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRpZiAoX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKFxuXHRcdFx0XHRcdGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCksXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMobmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEFkZGl0aW9uYWwgcHJvcGVydHkgZnJvbSB0ZXh0IGFycmFuZ2VtZW50L3VuaXRzL2N1cnJlbmNpZXMvdGltZXpvbmUuLi5cblx0XHRcdGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMoZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZQcm9wZXJ0aWVzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBPdGhlciB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIG5hdlByb3BlcnRpZXM7XG59O1xuXG5jb25zdCBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbiA9IGZhbHNlLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHtcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPjtcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZTtcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXTtcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cdHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0ZGVmYXVsdEZpbHRlckZpZWxkczogRmlsdGVyRmllbGRbXTtcbn0ge1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50cyBkZWZpbmVkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgYW5kIGRpZmZlcmVudCB2aWV3cyAobXVsdGkgdGFibGUgbW9kZSlcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKGxyVGFibGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHQvL0ZpbHRlcnMgd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHdoaWNoIGlzIHBhcnQgb2YgU1YvRGVmYXVsdCBhbm5vdGF0aW9ucyBidXQgbm90IHByZXNlbnQgaW4gdGhlIFNlbGVjdGlvbkZpZWxkc1xuXHRjb25zdCBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMgPSAoKGFubm90YXRpb25QYXRoICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uKSB8fFxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgfHxcblx0XHRbXSkgYXMgUHJvcGVydHlQYXRoW107XG5cblx0bGV0IG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChsclRhYmxlcy5sZW5ndGggPT09IDAgJiYgISFsaW5lSXRlbVRlcm0pIHtcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihsaW5lSXRlbVRlcm0pLmFubm90YXRpb24gYXMgTGluZUl0ZW0pPy5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdG5hdlByb3BlcnRpZXMgPSBnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRuYXZQcm9wZXJ0aWVzLnB1c2goXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0aW9uRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvQ3JlYXRlZEJ5VXNlclwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJcIlxuXHRcdCk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge1xuXHRcdC8vIC4uLm5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiB0aGUgZW50aXR5XG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkcyhlbnRpdHlUeXBlLCBcIlwiLCBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLiBub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChlbnRpdHlUeXBlLCBuYXZQcm9wZXJ0aWVzLCBmYWxzZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uYWRkaXRpb25hbCBtYW5pZmVzdCBkZWZpbmVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdClcblx0fTtcblx0bGV0IGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10gPSBbXTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnM7XG5cdH1cblxuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPVxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8ucmVkdWNlKChzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3Rpb25GaWVsZC52YWx1ZTtcblx0XHRcdGlmICghZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGxldCBuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGg/LnN0YXJ0c1dpdGgoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBcIlwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGg/LnNwbGl0KFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIilbMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmaWx0ZXJQcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aCA/IG5hdmlnYXRpb25QYXRoICsgXCIvXCIgKyBwcm9wZXJ0eVBhdGggOiBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZHMsXG5cdFx0XHRcdFx0ZmlsdGVyUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cCA9IFwiXCI7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXBMYWJlbCA9IFwiXCI7XG5cdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xuXHRcdH0sIFtdKSB8fCBbXTtcblxuXHRjb25zdCBkZWZhdWx0RmlsdGVyRmllbGRzID0gX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMoXG5cdFx0YVNlbGVjdE9wdGlvbnMsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHNcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMsXG5cdFx0ZmlsdGVyRmllbGRzOiBmaWx0ZXJGaWVsZHMsXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0ZGVmYXVsdEZpbHRlckZpZWxkczogZGVmYXVsdEZpbHRlckZpZWxkc1xuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoVHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChwcm9wZXJ0eT86IFByb3BlcnR5KTogUHJvcGVydHlUeXBlQ29uZmlnIHtcblx0Y29uc3QgdHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcGVydHkpIGFzIFByb3BlcnR5VHlwZUNvbmZpZztcblx0aWYgKHByb3BlcnR5Py50eXBlID09PSBzRWRtU3RyaW5nICYmIHR5cGVDb25maWcuY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSkge1xuXHRcdHR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdC4uLnR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogZmFsc2Vcblx0XHR9O1xuXHR9XG5cdHJldHVybiB0eXBlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5SW5mb0ZpZWxkOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhUmVxdWlyZWRQcm9wczogdW5rbm93bltdLFxuXHRhVHlwZUNvbmZpZzogUmVjb3JkPHN0cmluZywgUGFydGlhbDxQcm9wZXJ0eVR5cGVDb25maWc+PlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBmZXRjaFByb3BlcnR5SW5mbyhjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eUluZm9GaWVsZCwgYVR5cGVDb25maWdbcHJvcGVydHlJbmZvRmllbGQua2V5IV0pLFxuXHRcdHNQcm9wZXJ0eVBhdGggPSBcIlwiO1xuXHRpZiAocHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aCkge1xuXHRcdHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eUluZm9GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2UoL1xcK3xcXCovZywgXCJcIik7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eUluZm8pIHtcblx0XHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0XHRtYXhDb25kaXRpb25zOiBvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyXG5cdFx0XHRcdD8gMVxuXHRcdFx0XHQ6IGdldE1heENvbmRpdGlvbnMoZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBzUHJvcGVydHlQYXRoKSksXG5cdFx0XHRyZXF1aXJlZDogcHJvcGVydHlJbmZvRmllbGQucmVxdWlyZWQgPz8gKG9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgfHwgYVJlcXVpcmVkUHJvcHMuaW5jbHVkZXMoc1Byb3BlcnR5UGF0aCkpLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0ZGF0YVR5cGU6IGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleSFdLnR5cGVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzU2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHM/OiBGaWx0ZXJGaWVsZFtdXG4pOiBQcm9wZXJ0eUluZm9bXSB7XG5cdC8vZ2V0IFR5cGVDb25maWcgZnVuY3Rpb25cblx0Y29uc3QgYVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj4gPSB7fTtcblxuXHRpZiAoZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMpIHtcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwcm9wZXJ0eUluZm9GaWVsZHMuY29uY2F0KGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKTtcblx0fVxuXHQvL2FkZCB0eXBlQ29uZmlnXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbWV0ZXJGaWVsZCkge1xuXHRcdGlmIChwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlDb252ZXJ0eUNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHBhcmFtZXRlckZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gZmV0Y2hUeXBlQ29uZmlnKHByb3BlcnR5VGFyZ2V0T2JqZWN0KTtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSBvVHlwZUNvbmZpZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVR5cGVDb25maWdbcGFyYW1ldGVyRmllbGQua2V5XSA9IHsgdHlwZTogc1N0cmluZ0RhdGFUeXBlIH07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBmaWx0ZXJSZXN0cmljdGlvbnNcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnMgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9SZXQ6IHtcblx0XHRSZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9ID0ge307XG5cdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IGFQYXRoUGFydHMgPSBzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChhUGF0aFBhcnRzLmxlbmd0aCA+IDIpIHtcblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhUGF0aFBhcnRzW2FQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBzTmF2aWdhdGlvblBhdGgpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdXG5cdFx0KTtcblx0fVxuXHRjb25zdCBhUmVxdWlyZWRQcm9wcyA9IG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzO1xuXHRjb25zdCBhTm9uRmlsdGVyYWJsZVByb3BzID0gb1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0Y29uc3QgYUZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXG5cdC8vIHByb2Nlc3MgdGhlIGZpZWxkcyB0byBhZGQgbmVjZXNzYXJ5IHByb3BlcnRpZXNcblx0cHJvcGVydHlJbmZvRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5SW5mb0ZpZWxkKSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgucmVwbGFjZSgvWysqXS9nLCBcIlwiKTtcblx0XHRpZiAoIWFOb25GaWx0ZXJhYmxlUHJvcHMuaW5jbHVkZXMoc1Byb3BlcnR5UGF0aCkpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm8gPSBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvKHByb3BlcnR5SW5mb0ZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBhUmVxdWlyZWRQcm9wcywgYVR5cGVDb25maWcpO1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2gob1Byb3BlcnR5SW5mbyk7XG5cdFx0fVxuXHR9KTtcblxuXHQvL2FkZCBlZGl0XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNIaWRkZW5EcmFmdEVuYWJsZWQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldFNhcEZlTWFuaWZlc3RDb25maWd1cmF0aW9uKCk/LmFwcD8uaGlkZURyYWZ0Py5lbmFibGVkO1xuXHRpZiAoTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoZGF0YU1vZGVsT2JqZWN0UGF0aCkpIHtcblx0XHRpZiAoc2hvd0RyYWZ0RWRpdFN0YXR1cyhjb252ZXJ0ZXJDb250ZXh0KSAmJiAhaXNIaWRkZW5EcmFmdEVuYWJsZWQpIHtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0XHR9XG5cdH1cblx0Ly8gYWRkIHNlYXJjaFxuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChzRW50aXR5U2V0UGF0aCAmJiBoaWRlQmFzaWNTZWFyY2ggIT09IHRydWUpIHtcblx0XHRpZiAoIXNlYXJjaFJlc3RyaWN0aW9ucyB8fCBzZWFyY2hSZXN0cmljdGlvbnM/LlNlYXJjaGFibGUpIHtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IHNob3dEcmFmdEVkaXRTdGF0dXMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogYm9vbGVhbiB7XG5cdGNvbnN0IG5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQsIFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFcIik7XG5cdHJldHVybiBuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5GaWx0ZXJSZXN0cmljdGlvbnM/LkZpbHRlcmFibGUgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogTWFuaWZlc3RGaWx0ZXJGaWVsZFtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmdcbik6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgpO1xuXHRfZ2V0TWlzc2luZ0xhYmVsRm9yTWFuaWZlc3RGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBtYW5pZmVzdEZpbHRlckZpZWxkcyk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhmaWx0ZXJGaWVsZHMsIG1hbmlmZXN0RmlsdGVyRmllbGRzLCB7XG5cdFx0YXZhaWxhYmlsaXR5OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGxhYmVsOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHR5cGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0c2xvdE5hbWU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZG9jdW1lbnRSZWZUZXh0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHRlbXBsYXRlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc3VhbEZpbHRlcjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRyZXF1aXJlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbCA9IChwcm9wZXJ0eUluZm9zOiBQcm9wZXJ0eUluZm9bXSk6IHZvaWQgPT4ge1xuXHRwcm9wZXJ0eUluZm9zLnNvcnQoZnVuY3Rpb24gKGE6IEZpbHRlckdyb3VwLCBiOiBGaWx0ZXJHcm91cCkge1xuXHRcdGNvbnN0IGFHcm91cExhYmVsSXNTZXQgPSBhLmdyb3VwTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBhLmdyb3VwTGFiZWwgIT09IG51bGw7XG5cdFx0Y29uc3QgYkdyb3VwTGFiZWxJc1NldCA9IGIuZ3JvdXBMYWJlbCAhPT0gdW5kZWZpbmVkICYmIGIuZ3JvdXBMYWJlbCAhPT0gbnVsbDtcblx0XHRpZiAoIWFHcm91cExhYmVsSXNTZXQgJiYgIWJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblx0XHRpZiAoYUdyb3VwTGFiZWxJc1NldCAmJiAhYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpZiAoIWFHcm91cExhYmVsSXNTZXQgJiYgYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdHJldHVybiBhLmdyb3VwTGFiZWwhLmxvY2FsZUNvbXBhcmUoYi5ncm91cExhYmVsISk7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiBmaWVsZHMgdGhhdCB3aWxsIGJlIHVzZWQgd2l0aGluIHRoZSBmaWx0ZXIgYmFyXG4gKiBUaGlzIGNvbmZpZ3VyYXRpb24gdGFrZXMgaW50byBhY2NvdW50IHRoZSBhbm5vdGF0aW9uIGFuZCB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBsclRhYmxlc1xuICogQHBhcmFtIGFubm90YXRpb25QYXRoXG4gKiBAcGFyYW0gW2luY2x1ZGVIaWRkZW5dXG4gKiBAcGFyYW0gW2xpbmVJdGVtVGVybV1cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlbGVjdGlvbiBmaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSxcblx0YW5ub3RhdGlvblBhdGggPSBcIlwiLFxuXHRpbmNsdWRlSGlkZGVuPzogYm9vbGVhbixcblx0bGluZUl0ZW1UZXJtPzogc3RyaW5nXG4pOiB7IHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXTsgc1Byb3BlcnR5SW5mbzogc3RyaW5nIH0ge1xuXHRjb25zdCBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhKFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bHJUYWJsZXMsXG5cdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0aW5jbHVkZUhpZGRlbixcblx0XHRsaW5lSXRlbVRlcm1cblx0KTtcblx0Y29uc3QgcGFyYW1ldGVyRmllbGRzID0gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5lbnRpdHlUeXBlO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IHBhcmFtZXRlckZpZWxkcy5jb25jYXQocHJvcGVydHlJbmZvRmllbGRzKTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKHByb3BlcnR5SW5mb0ZpZWxkcywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgpO1xuXG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllcyA9IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMoXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0b0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5kZWZhdWx0RmlsdGVyRmllbGRzXG5cdCk7XG5cdHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsKGFGZXRjaGVkUHJvcGVydGllcyk7XG5cblx0bGV0IHNGZXRjaFByb3BlcnRpZXMgPSBKU09OLnN0cmluZ2lmeShhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRzRmV0Y2hQcm9wZXJ0aWVzID0gc0ZldGNoUHJvcGVydGllcy5yZXBsYWNlKC9cXHsvZywgXCJcXFxce1wiKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdGNvbnN0IHNQcm9wZXJ0eUluZm8gPSBzRmV0Y2hQcm9wZXJ0aWVzO1xuXHQvLyBlbmQgb2YgcHJvcGVydHlGaWVsZHMgcHJvY2Vzc2luZ1xuXG5cdC8vIHRvIHBvcHVsYXRlIHNlbGVjdGlvbiBmaWVsZHNcblx0bGV0IHByb3BTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzKSk7XG5cdHByb3BTZWxlY3Rpb25GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BTZWxlY3Rpb25GaWVsZHMpO1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50c1xuXHRjb25zdCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMgPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcztcblx0Y29uc3QgZmlsdGVyRmFjZXRzID0gZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5GaWx0ZXJGYWNldHM7XG5cdGxldCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cblx0Y29uc3QgYUZpZWxkR3JvdXBzID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIlVJXCIsIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApIGFzIEZpZWxkR3JvdXBbXTtcblxuXHRpZiAoZmlsdGVyRmFjZXRzID09PSB1bmRlZmluZWQgfHwgZmlsdGVyRmFjZXRzLmxlbmd0aCA8IDApIHtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYUZpZWxkR3JvdXBzKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcCA9IHtcblx0XHRcdFx0Li4uZmlsdGVyRmFjZXRNYXAsXG5cdFx0XHRcdC4uLmdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoYUZpZWxkR3JvdXBzW2ldKVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmFjZXRNYXAgPSBmaWx0ZXJGYWNldHMucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4sIGZpbHRlckZhY2V0OiBSZWZlcmVuY2VGYWNldFR5cGVzKSA9PiB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChmaWx0ZXJGYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApPy5EYXRhPy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRwcmV2aW91c1ZhbHVlWygoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YVtpXSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoXSA9IHtcblx0XHRcdFx0XHRncm91cDogZmlsdGVyRmFjZXQ/LklEPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGdyb3VwTGFiZWw6IGZpbHRlckZhY2V0Py5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdFx0fSwge30pO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZmlsdGVyRmllbGRzO1xuXG5cdC8vIGZpbmFsbHkgY3JlYXRlIGZpbmFsIGxpc3Qgb2YgZmlsdGVyIGZpZWxkcyBieSBhZGRpbmcgdGhlIFNlbGVjdGlvbkZpZWxkcyBmaXJzdCAob3JkZXIgbWF0dGVycykuLi5cblx0Y29uc3QgYWxsRmlsdGVycyA9IHByb3BTZWxlY3Rpb25GaWVsZHNcblxuXHRcdC8vIC4uLmFuZCBhZGRpbmcgcmVtYWluaW5nIGZpbHRlciBmaWVsZHMsIHRoYXQgYXJlIG5vdCB1c2VkIGluIGEgU2VsZWN0aW9uVmFyaWFudCAob3JkZXIgZG9lc24ndCBtYXR0ZXIpXG5cdFx0LmNvbmNhdChcblx0XHRcdE9iamVjdC5rZXlzKGZpbHRlckZpZWxkcylcblx0XHRcdFx0LmZpbHRlcigocHJvcGVydHlQYXRoKSA9PiAhZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHQubWFwKChwcm9wZXJ0eVBhdGgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXSwgZmlsdGVyRmFjZXRNYXBbcHJvcGVydHlQYXRoXSk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKGFsbEZpbHRlcnMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblxuXHQvLyBBZGQgY2FzZVNlbnNpdGl2ZSBwcm9wZXJ0eSB0byBhbGwgc2VsZWN0aW9uIGZpZWxkcy5cblx0Y29uc3QgaXNDYXNlU2Vuc2l0aXZlID0gaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpO1xuXHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRmaWx0ZXJGaWVsZC5jYXNlU2Vuc2l0aXZlID0gaXNDYXNlU2Vuc2l0aXZlO1xuXHR9KTtcblxuXHRyZXR1cm4geyBzZWxlY3Rpb25GaWVsZHMsIHNQcm9wZXJ0eUluZm8gfTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgYmFyIGluc2lkZSBhIHZhbHVlIGhlbHAgZGlhbG9nIHNob3VsZCBiZSBleHBhbmRlZC4gVGhpcyBpcyB0cnVlIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZDpcbiAqICgxKSBhIGZpbHRlciBwcm9wZXJ0eSBpcyBtYW5kYXRvcnksXG4gKiAoMikgbm8gc2VhcmNoIGZpZWxkIGV4aXN0cyAoZW50aXR5IGlzbid0IHNlYXJjaCBlbmFibGVkKSxcbiAqICgzKSB3aGVuIHRoZSBkYXRhIGlzbid0IGxvYWRlZCBieSBkZWZhdWx0IChhbm5vdGF0aW9uIEZldGNoVmFsdWVzID0gMikuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIFRoZSBGaWx0ZXJSZXN0cmljdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmFsdWVMaXN0IFRoZSBWYWx1ZUxpc3QgYW5ub3RhdGlvblxuICogQHJldHVybnMgVGhlIHZhbHVlIGZvciBleHBhbmRGaWx0ZXJGaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cGFuZEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBGaWx0ZXJSZXN0cmljdGlvbnMgfCB1bmRlZmluZWQsXG5cdHZhbHVlTGlzdDogTWV0YU1vZGVsVHlwZTxWYWx1ZUxpc3Q+XG4pOiBib29sZWFuIHtcblx0Y29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24sIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpO1xuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChyZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoID4gMCB8fCBoaWRlQmFzaWNTZWFyY2ggfHwgdmFsdWVMaXN0Py5GZXRjaFZhbHVlcyA9PT0gMikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXlEQTtFQUFBLElBZ0NLQSxlQUFlLDBCQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBZkEsZUFBZTtJQUFBLE9BQWZBLGVBQWU7RUFBQSxFQUFmQSxlQUFlO0VBY3BCLE1BQU1DLFVBQVUsR0FBRyxZQUFZO0VBQy9CLE1BQU1DLGVBQWUsR0FBRyxnQ0FBZ0M7RUFJeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLHlCQUF5QkEsQ0FBQ0MsVUFBc0IsRUFBK0I7SUFDdkYsTUFBTUMsY0FBMkMsR0FBRyxDQUFDLENBQUM7SUFDdERELFVBQVUsQ0FBQ0UsSUFBSSxDQUFDQyxPQUFPLENBQUVDLFNBQWlDLElBQUs7TUFDOUQsSUFBSUEsU0FBUyxDQUFDQyxLQUFLLEtBQUssc0NBQXNDLEVBQUU7UUFDL0RKLGNBQWMsQ0FBQ0csU0FBUyxDQUFDRSxLQUFLLENBQUNDLElBQUksQ0FBQyxHQUFHO1VBQ3RDQyxLQUFLLEVBQUVSLFVBQVUsQ0FBQ1Msa0JBQWtCO1VBQ3BDQyxVQUFVLEVBQUVWLFVBQVUsQ0FBQ1csS0FBSyxFQUFFQyxRQUFRLENBQUMsQ0FBQyxJQUFJWixV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
|
|
850
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJjb252ZXJ0ZXJDb250ZXh0Iiwic2VsZWN0aW9uVmFyaWFudFBhdGhzIiwiU2V0IiwibWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVyRmllbGRzIiwic2VsZWN0aW9uRmllbGRQYXRocyIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiVUkiLCJTZWxlY3Rpb25GaWVsZHMiLCJtYXAiLCJzZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImtleSIsInRlbXBsYXRlIiwidmlzdWFsaXphdGlvbiIsInRhYmxlRmlsdGVycyIsImNvbnRyb2wiLCJmaWx0ZXJzIiwiaGlkZGVuRmlsdGVycyIsInBhdGhzIiwicXVpY2tGaWx0ZXJzIiwiYW5ub3RhdGlvblBhdGgiLCJoYXMiLCJhZGQiLCJzZWxlY3Rpb25WYXJpYW50Q29uZmlnIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0eU5hbWVzIiwicHJvcGVydHlOYW1lIiwiZmxhdCIsIl9nZXRDb25kaXRpb25QYXRoIiwiZW50aXR5VHlwZSIsInByb3BlcnR5UGF0aCIsInBhcnRzIiwic3BsaXQiLCJwYXJ0aWFsUGF0aCIsImxlbmd0aCIsInBhcnQiLCJzaGlmdCIsInByb3BlcnR5IiwicmVzb2x2ZVBhdGgiLCJpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5IiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJLZXlIZWxwZXIiLCJnZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsImNvbmRpdGlvblBhdGgiLCJhdmFpbGFiaWxpdHkiLCJIaWRkZW5GaWx0ZXIiLCJsYWJlbCIsIm5hbWUiLCJnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyIsInN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMiLCJTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzIiwiVE8iLCJUT01PUlJPVyIsIk5FWFRXRUVLIiwiTkVYVE1PTlRIIiwiTkVYVFFVQVJURVIiLCJORVhUWUVBUiIsInNldHRpbmdzIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZXF1YWxzIiwiam9pbiIsImV4Y2x1ZGUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbmhhbmNlZFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZmluZCIsIm5hdmlnYXRpb25Qcm9wZXJ0eSIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImlzQ29tcGxleFR5cGUiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsIl9nZXRGaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsImlzUGFyYW1ldGVyIiwiUmVzdWx0Q29udGV4dCIsIl9nZXREZWZhdWx0RmlsdGVyRmllbGRzIiwiYVNlbGVjdE9wdGlvbnMiLCJleGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMiLCJVSVNlbGVjdGlvbkZpZWxkcyIsIlNlbGVjdGlvbkZpZWxkIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHVzaCIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsIkZpbHRlckRlZmF1bHRWYWx1ZSIsIl9nZXRQYXJhbWV0ZXJGaWVsZHMiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJsaXN0UmVwb3J0VGFibGVzIiwiY2hhcnRzIiwibm9TZWFyY2hJbkNoYXJ0cyIsImV2ZXJ5IiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsImVuYWJsZUFuYWx5dGljcyIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImNvbnRleHRQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJfZXhwb3J0cyIsImdldE1hbmlmZXN0RmlsdGVyRmllbGRzIiwibWFuaWZlc3RXcmFwcGVyIiwic2V0dGluZ3NDb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsImZpbHRlckNvbmZpZ3VyYXRpb25QYXRoIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvblBhdGgiLCJmYkNvbmZpZyIsImRlZmluZWRGaWx0ZXJGaWVsZHMiLCJnZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5Iiwic0tleSIsIlNsb3QiLCJEZWZhdWx0IiwidmlzdWFsRmlsdGVyIiwiZ2V0VmlzdWFsRmlsdGVycyIsImlzQ3VzdG9tRmlsdGVyIiwic2xvdE5hbWUiLCJkb2N1bWVudFJlZlRleHQiLCJmZXRjaFRleHRGcm9tTWV0YU1vZGVsIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsInJlcXVpcmVkIiwib2JqZWN0UGF0aCIsImZpbHRlckJhckNvbnRleHRQYXRoIiwibWV0YVBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwic1Jlc3RyaWN0aW9uIiwiYVByb3BzIiwib1Byb3BlcnR5IiwiZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvIiwiZGF0YVR5cGUiLCJtYXhDb25kaXRpb25zIiwiY29uc3RyYWludHMiLCJtYXhMZW5ndGgiLCJnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8iLCJoaWRkZW5GaWx0ZXIiLCJnZXRTZWFyY2hSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJpc0VudGl0eVNldCIsIkNhcGFiaWxpdGllcyIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJzTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCJfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyIsIm9GaWx0ZXJGaWVsZEluZm8iLCJkaXNwbGF5IiwiY2FzZVNlbnNpdGl2ZSIsIm1lbnUiLCJfZ2V0TWlzc2luZ0xhYmVsRm9yTWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJoYXNPd25Qcm9wZXJ0eSIsImRpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwiVGV4dCIsIm9UZXh0QXJyYW5nbWVudEFubm90YXRpb24iLCJUZXh0QXJyYW5nZW1lbnQiLCJmZXRjaFByb3BlcnR5SW5mbyIsIm9UeXBlQ29uZmlnIiwib1Byb3BlcnR5SW5mbyIsInNBbm5vdGF0aW9uUGF0aCIsInRhcmdldFByb3BlcnR5T2JqZWN0Iiwib0Zvcm1hdE9wdGlvbnMiLCJmb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiYXNzaWduIiwiaXNNdWx0aVZhbHVlIiwiYklzTXVsdGlWYWx1ZSIsImZpbHRlckV4cHJlc3Npb24iLCJpbmRleE9mIiwiX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImVudHJ5IiwiaW5jbHVkZXMiLCJhZGRDaGlsZE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcGVydGllcyIsInRhcmdldFByb3BlcnR5IiwiJHRhcmdldCIsImFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJUYXJnZXQiLCJpbm5lckRhdGFGaWVsZCIsImdldFJlbGF0aXZlUGF0aHMiLCJnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJsclRhYmxlcyIsImFyZ3VtZW50cyIsImxpbmVJdGVtVGVybSIsImdldEVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJNb2RlbEhlbHBlciIsImlzRHJhZnRSb290Iiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3RPcHRpb25zIiwicHJvcGVydHlJbmZvRmllbGRzIiwicmVkdWNlIiwiZmlsdGVyUHJvcGVydHlQYXRoIiwiZGVmYXVsdEZpbHRlckZpZWxkcyIsImZldGNoVHlwZUNvbmZpZyIsInR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwibnVsbGFibGUiLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciLCJhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvIiwicHJvcGVydHlJbmZvRmllbGQiLCJhUmVxdWlyZWRQcm9wcyIsImFUeXBlQ29uZmlnIiwiZ2V0TWF4Q29uZGl0aW9ucyIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsInByb2Nlc3NTZWxlY3Rpb25GaWVsZHMiLCJkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyIsImNvbmNhdCIsInBhcmFtZXRlckZpZWxkIiwicHJvcGVydHlDb252ZXJ0eUNvbnRleHQiLCJwcm9wZXJ0eVRhcmdldE9iamVjdCIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJvUmV0IiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzRW50aXR5U2V0UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpY2UiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsImFOb25GaWx0ZXJhYmxlUHJvcHMiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJpc0hpZGRlbkRyYWZ0RW5hYmxlZCIsImdldFNhcEZlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwiYXBwIiwiaGlkZURyYWZ0IiwiZW5hYmxlZCIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiZWRpdFN0YXRlRmlsdGVyIiwic2hvd0RyYWZ0RWRpdFN0YXR1cyIsInNlYXJjaFJlc3RyaWN0aW9ucyIsImhpZGVCYXNpY1NlYXJjaCIsIkJvb2xlYW4iLCJTZWFyY2hhYmxlIiwibmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIkZpbHRlcmFibGUiLCJpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJPdmVycmlkZVR5cGUiLCJvdmVyd3JpdGUiLCJzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbCIsInByb3BlcnR5SW5mb3MiLCJzb3J0IiwiYSIsImIiLCJhR3JvdXBMYWJlbElzU2V0IiwiYkdyb3VwTGFiZWxJc1NldCIsImxvY2FsZUNvbXBhcmUiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhIiwicGFyYW1ldGVyRmllbGRzIiwic0ZldGNoUHJvcGVydGllcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzUHJvcGVydHlJbmZvIiwicHJvcFNlbGVjdGlvbkZpZWxkcyIsInBhcnNlIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiYUZpZWxkR3JvdXBzIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJpIiwicHJldmlvdXNWYWx1ZSIsImZpbHRlckZhY2V0IiwiSUQiLCJhbGxGaWx0ZXJzIiwiaXNDYXNlU2Vuc2l0aXZlIiwiZ2V0RXhwYW5kRmlsdGVyRmllbGRzIiwiZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInZhbHVlTGlzdCIsInJlcXVpcmVkUHJvcGVydGllcyIsIkZldGNoVmFsdWVzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGVybSwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRGaWx0ZXJSZXN0cmljdGlvbnNUeXBlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvbixcblx0U2VhcmNoUmVzdHJpY3Rpb25zXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7IFZhbHVlTGlzdCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVR5cGVBbm5vdGF0aW9ucywgUHJvcGVydHlBbm5vdGF0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRWRtX1R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCxcblx0RGF0YUZpZWxkV2l0aFVybCxcblx0RmllbGRHcm91cCxcblx0TGluZUl0ZW0sXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdFNlbGVjdE9wdGlvblR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5VHlwZUNvbnN0cmFpbnRzLCBQcm9wZXJ0eVR5cGVGb3JtYXRPcHRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IGdldFR5cGVDb25maWcsIGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBnZXRNYXhDb25kaXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgeyBnZXRWaXN1YWxGaWx0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCwgUG9zaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0NvbXBsZXhUeXBlLCBpc0VudGl0eVNldCwgaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocywgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoLFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgsXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRUeXBlRm9yRWRtVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IHsgU3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cyB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBUeXBlQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL1R5cGVDb25maWdcIjtcbmltcG9ydCB0eXBlIFNpbXBsZVR5cGUgZnJvbSBcInNhcC91aS9tb2RlbC9TaW1wbGVUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEF2YWlsYWJpbGl0eVR5cGUsXG5cdEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEZpbHRlclNldHRpbmdzXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbi8vaW1wb3J0IHsgaGFzVmFsdWVIZWxwIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcblxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xuXHRkYXRhVHlwZT86IHN0cmluZztcblx0bmFtZT86IHN0cmluZztcblx0Y29uZGl0aW9uUGF0aDogc3RyaW5nO1xuXHRhdmFpbGFiaWxpdHk6IEF2YWlsYWJpbGl0eVR5cGU7XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0ZG9jdW1lbnRSZWZUZXh0Pzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncztcblx0aXNQYXJhbWV0ZXI/OiBib29sZWFuO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTWFuaWZlc3RGaWx0ZXJGaWVsZCA9IEZpbHRlckZpZWxkICYge1xuXHRzbG90TmFtZT86IHN0cmluZztcbn07XG5cbnR5cGUgRmlsdGVyR3JvdXAgPSB7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xufTtcblxuZW51bSBmaWx0ZXJGaWVsZFR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG50eXBlIFByb3BlcnR5VHlwZUNvbmZpZyA9IHtcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM6IFByb3BlcnR5VHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBQcm9wZXJ0eVR5cGVGb3JtYXRPcHRpb25zO1xuXHRiYXNlVHlwZT86IHN0cmluZztcblx0Y2xhc3NOYW1lPzoga2V5b2YgdHlwZW9mIERlZmF1bHRUeXBlRm9yRWRtVHlwZTtcblx0dHlwZUluc3RhbmNlPzogU2ltcGxlVHlwZTtcbn07XG5cbmNvbnN0IHNFZG1TdHJpbmcgPSBcIkVkbS5TdHJpbmdcIjtcbmNvbnN0IHNTdHJpbmdEYXRhVHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCI7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCA9IEN1c3RvbUVsZW1lbnQ8TWFuaWZlc3RGaWx0ZXJGaWVsZD47XG5cbi8qKlxuICogRW50ZXIgYWxsIERhdGFGaWVsZHMgb2YgYSBnaXZlbiBGaWVsZEdyb3VwIGludG8gdGhlIGZpbHRlckZhY2V0TWFwLlxuICogQHBhcmFtIGZpZWxkR3JvdXBcbiAqIEByZXR1cm5zIFRoZSBtYXAgb2YgZmFjZXRzIGZvciB0aGUgZ2l2ZW4gRmllbGRHcm91cFxuICovXG5mdW5jdGlvbiBnZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGZpZWxkR3JvdXA6IEZpZWxkR3JvdXApOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4ge1xuXHRjb25zdCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cdGZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcFtkYXRhRmllbGQuVmFsdWUucGF0aF0gPSB7XG5cdFx0XHRcdGdyb3VwOiBmaWVsZEdyb3VwLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDogZmllbGRHcm91cC5MYWJlbD8udG9TdHJpbmcoKSA/PyBmaWVsZEdyb3VwLmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpID8/IGZpZWxkR3JvdXAucXVhbGlmaWVyXG5cdFx0XHR9O1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBmaWx0ZXJGYWNldE1hcDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGlvbiB2YXJpYW50cyB1c2VkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQuXG4gKiBAcGFyYW0gbHJUYWJsZVZpc3VhbGl6YXRpb25zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGV4Y2x1ZGVkIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKFxuXHRsclRhYmxlVmlzdWFsaXphdGlvbnM6IFRhYmxlVmlzdWFsaXphdGlvbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFNldDxzdHJpbmc+IHtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkuZmlsdGVyRmllbGRzID8/IHt9O1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFtcblx0XHQvL1NlbGVjdGlvbiBGaWVsZHMgY29taW5nIGZyb20gdGhlIGFubm90YXRpb25cblx0XHQuLi4oY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgPz8gW10pLm1hcChcblx0XHRcdChzZWxlY3Rpb25GaWVsZCkgPT4gc2VsZWN0aW9uRmllbGQudmFsdWVcblx0XHQpLFxuXHRcdC8vU2VsZWN0aW9uIEZpZWxkcyBjb21pbmcgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIG5vdCB3aXRoIGN1c3RvbSB0ZW1wbGF0ZVxuXHRcdC4uLk9iamVjdC5rZXlzKG1hbmlmZXN0RmlsdGVyRmllbGRzKS5maWx0ZXIoKGtleSkgPT4gISFtYW5pZmVzdEZpbHRlckZpZWxkc1trZXldLnRlbXBsYXRlKVxuXHRdKTtcblxuXHRyZXR1cm4gbmV3IFNldChcblx0XHRsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0Y29uc3QgdGFibGVGaWx0ZXJzID0gdmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnM7XG5cdFx0XHRcdGlmICghdGFibGVGaWx0ZXJzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBbLi4uKHRhYmxlRmlsdGVycy5oaWRkZW5GaWx0ZXJzPy5wYXRocyA/PyBbXSksIC4uLih0YWJsZUZpbHRlcnMucXVpY2tGaWx0ZXJzPy5wYXRocyA/PyBbXSldLm1hcCgocGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gcGF0aC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdFx0XHRpZiAoIXNlbGVjdGlvblZhcmlhbnRQYXRocy5oYXMoYW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aHMuYWRkKGFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRDb25maWcgPSBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudENvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMgPSBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdChwcm9wZXJ0eU5hbWUpID0+ICFzZWxlY3Rpb25GaWVsZFBhdGhzLmhhcyhwcm9wZXJ0eU5hbWUpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Rpb25WYXJpYW50Q29uZmlnLnByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZsYXQoMilcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC4gSXQgbG9va3MgYXMgZm9sbG93czpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgcm9vdCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBjb25kaXRpb24gcGF0aFxuICovXG5jb25zdCBfZ2V0Q29uZGl0aW9uUGF0aCA9IGZ1bmN0aW9uIChlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHBhcnRzID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0bGV0IHBhcnRpYWxQYXRoO1xuXHRsZXQga2V5ID0gXCJcIjtcblx0d2hpbGUgKHBhcnRzLmxlbmd0aCkge1xuXHRcdGxldCBwYXJ0ID0gcGFydHMuc2hpZnQoKSBhcyBzdHJpbmc7XG5cdFx0cGFydGlhbFBhdGggPSBwYXJ0aWFsUGF0aCA/IGAke3BhcnRpYWxQYXRofS8ke3BhcnR9YCA6IHBhcnQ7XG5cdFx0Y29uc3QgcHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5ID0gZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwYXJ0aWFsUGF0aCk7XG5cdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0XHRwYXJ0ICs9IFwiKlwiO1xuXHRcdH1cblx0XHRrZXkgPSBrZXkgPyBgJHtrZXl9LyR7cGFydH1gIDogcGFydDtcblx0fVxuXHRyZXR1cm4ga2V5O1xufTtcblxuY29uc3QgX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdC8vIGlnbm9yZSBjb21wbGV4IHByb3BlcnR5IHR5cGVzIGFuZCBoaWRkZW4gYW5ub3RhdGVkIG9uZXNcblx0aWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LnRhcmdldFR5cGUgPT09IHVuZGVmaW5lZCAmJiAoaW5jbHVkZUhpZGRlbiB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSkge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKHByb3BlcnR5KSxcblx0XHRcdGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCA9IHtcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdFx0Y29uZGl0aW9uUGF0aDogX2dldENvbmRpdGlvblBhdGgoZW50aXR5VHlwZSwgZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW5GaWx0ZXI/LnZhbHVlT2YoKSA9PT0gdHJ1ZSA/IFwiSGlkZGVuXCIgOiBcIkFkYXB0YXRpb25cIixcblx0XHRcdFx0bGFiZWw6IHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gcHJvcGVydHkubmFtZSxcblx0XHRcdFx0Z3JvdXA6IHRhcmdldEVudGl0eVR5cGUubmFtZSxcblx0XHRcdFx0Z3JvdXBMYWJlbDogdGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgPz8gdGFyZ2V0RW50aXR5VHlwZS5uYW1lXG5cdFx0XHR9O1xuXHRcdGdldFNldHRpbmdzT2ZEZWZhdWx0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkKTtcblx0XHRyZXR1cm4gZmlsdGVyRmllbGQ7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0ZWNobmljYWwgcHJvcGVydHkgRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEuIE9ubHkgcmVsZXZhbnQgZm9yIENyZWF0aW9uRGF0ZVRpbWVcbiAqIGFuZCBMYXN0Q2hhbmdlRGF0ZVRpbWUsIGFzIHRoZXkgYXJlIGRpc3BsYXlpbmcgdGhlIHRpbWVmcmFtZSByZWxhdGVkIHByb3BlcnRpZXMgYXMgYSBTZW1hbnRpY0RhdGVSYW5nZS5cbiAqIEBwYXJhbSBmaWx0ZXJGaWVsZFxuICovXG5jb25zdCBnZXRTZXR0aW5nc09mRGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQpOiB2b2lkIHtcblx0aWYgKFxuXHRcdGZpbHRlckZpZWxkLmtleSA9PT0gXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YTo6Q3JlYXRpb25EYXRlVGltZVwiIHx8XG5cdFx0ZmlsdGVyRmllbGQua2V5ID09PSBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhOjpMYXN0Q2hhbmdlRGF0ZVRpbWVcIlxuXHQpIHtcblx0XHRjb25zdCBzdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzID0gW1xuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5UTyxcblx0XHRcdFN0YW5kYXJkRHluYW1pY0RhdGVSYW5nZUtleXMuVE9NT1JST1csXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRXRUVLLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUTU9OVEgsXG5cdFx0XHRTdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLk5FWFRRVUFSVEVSLFxuXHRcdFx0U3RhbmRhcmREeW5hbWljRGF0ZVJhbmdlS2V5cy5ORVhUWUVBUlxuXHRcdF07XG5cdFx0ZmlsdGVyRmllbGQuc2V0dGluZ3MgPSB7XG5cdFx0XHRvcGVyYXRvckNvbmZpZ3VyYXRpb246IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHBhdGg6IFwia2V5XCIsXG5cdFx0XHRcdFx0ZXF1YWxzOiBzdGFuZGFyZER5bmFtaWNEYXRlUmFuZ2VLZXlzLmpvaW4oXCIsXCIpLFxuXHRcdFx0XHRcdGV4Y2x1ZGU6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdH1cbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmcsXG5cdHByb3BlcnRpZXM6IEFycmF5PFByb3BlcnR5PiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGNvbnN0IGZ1bGxQYXRoOiBzdHJpbmcgPSAobmF2aWdhdGlvblBhdGggPyBgJHtuYXZpZ2F0aW9uUGF0aH0vYCA6IFwiXCIpICsgcHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgcHJvcGVydHksIGZ1bGxQYXRoLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmIChzZWxlY3Rpb25GaWVsZCkge1xuXHRcdFx0XHRzZWxlY3Rpb25GaWVsZE1hcFtmdWxsUGF0aF0gPSBzZWxlY3Rpb25GaWVsZDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRNYXA7XG59O1xuXG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eVBhdGhzOiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGxldCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRpZiAocHJvcGVydHlQYXRocykge1xuXHRcdHByb3BlcnR5UGF0aHMuZm9yRWFjaCgocHJvcGVydHlQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdGxldCBsb2NhbFNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdFx0XHRjb25zdCBlbmhhbmNlZFBhdGggPSBlbmhhbmNlRGF0YU1vZGVsUGF0aDxQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eT4oXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGhcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IGVuaGFuY2VkUGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByb3BlcnR5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCFpbmNsdWRlSGlkZGVuICYmXG5cdFx0XHRcdFx0ZW5oYW5jZWRQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoXG5cdFx0XHRcdFx0XHQobmF2aWdhdGlvblByb3BlcnR5KSA9PiBuYXZpZ2F0aW9uUHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZVxuXHRcdFx0XHRcdCkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzTmF2aWdhdGlvblByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0XHQvLyBoYW5kbGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLmVudGl0eVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzQ29tcGxleFR5cGUocHJvcGVydHkudGFyZ2V0VHlwZSkpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIENvbXBsZXhUeXBlIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUucHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGdldFRhcmdldE5hdmlnYXRpb25QYXRoKGVuaGFuY2VkUGF0aCwgdHJ1ZSksXG5cdFx0XHRcdFx0W3Byb3BlcnR5XSxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0ge1xuXHRcdFx0XHQuLi5zZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRcdC4uLmxvY2FsU2VsZWN0aW9uRmllbGRzXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG5jb25zdCBfZ2V0RmlsdGVyRmllbGQgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdGxldCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZGVsZXRlIGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKSwgcHJvcGVydHlQYXRoLCB0cnVlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0fVxuXHRpZiAoIWZpbHRlckZpZWxkKSB7XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREaWFnbm9zdGljcygpPy5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1JU1NJTkdfU0VMRUNUSU9ORklFTEQpO1xuXHR9XG5cdC8vIGRlZmluZWQgU2VsZWN0aW9uRmllbGRzIGFyZSBhdmFpbGFibGUgYnkgZGVmYXVsdFxuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPSBmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIgPyBcIkhpZGRlblwiIDogXCJEZWZhdWx0XCI7XG5cdFx0ZmlsdGVyRmllbGQuaXNQYXJhbWV0ZXIgPSAhIWVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGQ7XG59O1xuXG5jb25zdCBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0YVNlbGVjdE9wdGlvbnM6IFNlbGVjdE9wdGlvblR5cGVbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFNldDxzdHJpbmc+LFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IFByb3BlcnR5UGF0aFtdXG4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gW107XG5cdGNvbnN0IFVJU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzO1xuXHQvLyBVc2luZyBlbnRpdHlUeXBlIGluc3RlYWQgb2YgZW50aXR5U2V0XG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8uZm9yRWFjaCgoU2VsZWN0aW9uRmllbGQpID0+IHtcblx0XHRVSVNlbGVjdGlvbkZpZWxkc1tTZWxlY3Rpb25GaWVsZC52YWx1ZV0gPSB0cnVlO1xuXHR9KTtcblx0aWYgKGFTZWxlY3RPcHRpb25zICYmIGFTZWxlY3RPcHRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRhU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5TmFtZT8udmFsdWU7XG5cdFx0XHRjb25zdCBjdXJyZW50U2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRcdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChzUHJvcGVydHlQYXRoICYmICFleGNsdWRlZEZpbHRlclByb3BlcnRpZXMuaGFzKHNQcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGlmICghKHNQcm9wZXJ0eVBhdGggaW4gY3VycmVudFNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChzUHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IGRlZmF1bHRGaWx0ZXJWYWx1ZSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkZpbHRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRpZiAoIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRpZiAoZGVmYXVsdEZpbHRlclZhbHVlICYmICEocHJvcGVydHlQYXRoIGluIFVJU2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbi8qKlxuICogR2V0IGFsbCBwYXJhbWV0ZXIgZmlsdGVyIGZpZWxkcyBpbiBjYXNlIG9mIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhcmFtZXRlciBGaWx0ZXJGaWVsZHNcbiAqL1xuZnVuY3Rpb24gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5lbnRpdHlUeXBlO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWQgPSAhIXBhcmFtZXRlckVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dCAmJiAhZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhcmFtZXRlckNvbnZlcnRlckNvbnRleHQgPVxuXHRcdGlzUGFyYW1ldGVyaXplZCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8RW50aXR5U2V0PihgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWApO1xuXG5cdHJldHVybiAoXG5cdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dFxuXHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXVxuXHQpIGFzIEZpbHRlckZpZWxkW107XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90LlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNoYXJ0cyBUaGUgQUxQIGNoYXJ0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoID0gZnVuY3Rpb24gKFxuXHRsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Ly8gQ2hlY2sgaWYgY2hhcnRzIGFsbG93IHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluQ2hhcnRzID0gY2hhcnRzLmxlbmd0aCA9PT0gMCB8fCBjaGFydHMuZXZlcnkoKGNoYXJ0KSA9PiAhY2hhcnQuYXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoKTtcblxuXHQvLyBDaGVjayBpZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHQvLyBvciBhbGwgdGFibGVzIGFyZSBUcmVlVGFibGUgYW5kIG5vbmUgb2YgdGhlbSBhbGxvdyBmb3Igc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5UYWJsZXMgPVxuXHRcdGxpc3RSZXBvcnRUYWJsZXMubGVuZ3RoID09PSAwIHx8XG5cdFx0bGlzdFJlcG9ydFRhYmxlcy5ldmVyeSgodGFibGUpID0+ICh0YWJsZS5lbmFibGVBbmFseXRpY3MgfHwgdGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSAmJiAhdGFibGUuZW5hYmxlQmFzaWNTZWFyY2gpO1xuXG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRpZiAoY29udGV4dFBhdGggJiYgbm9TZWFyY2hJbkNoYXJ0cyAmJiBub1NlYXJjaEluVGFibGVzKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBmaWx0ZXIgZmllbGRzIGZyb20gdGhlIG1hbmlmZXN0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGggQW5ub3RhdGlvbiBwYXRoIG9mIHRoZSBzZWxlY3Rpb24gZmllbGRzXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyIGZpZWxkcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmdcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXG5cdGNvbnN0IHNldHRpbmdzQ29udGV4dFBhdGggPVxuXHRcdG1hbmlmZXN0V3JhcHBlci5nZXRDb250ZXh0UGF0aCgpIHx8IChtYW5pZmVzdFdyYXBwZXIuZ2V0RW50aXR5U2V0KCkgPyBgLyR7bWFuaWZlc3RXcmFwcGVyLmdldEVudGl0eVNldCgpfWAgOiB1bmRlZmluZWQpO1xuXHRjb25zdCBmaWx0ZXJDb25maWd1cmF0aW9uUGF0aCA9IGdldEZpbHRlckNvbmZpZ3VyYXRpb25QYXRoKGNvbnZlcnRlckNvbnRleHQsIHNldHRpbmdzQ29udGV4dFBhdGgsIGFubm90YXRpb25QYXRoKTtcblx0bGV0IGZiQ29uZmlnOiBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSB7fTtcblx0ZmJDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbihmaWx0ZXJDb25maWd1cmF0aW9uUGF0aCk7XG5cblx0Y29uc3QgZGVmaW5lZEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+ID0gZmJDb25maWc/LmZpbHRlckZpZWxkcyB8fCB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0T2JqZWN0LmtleXMoZGVmaW5lZEZpbHRlckZpZWxkcykubWFwKChrZXkpID0+IGRlZmluZWRGaWx0ZXJGaWVsZHNba2V5XS5wcm9wZXJ0eSA/PyBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShrZXkpKSxcblx0XHR0cnVlLFxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0KTtcblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIGRlZmluZWRGaWx0ZXJGaWVsZHMpIHtcblx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IGRlZmluZWRGaWx0ZXJGaWVsZHNbc0tleV07XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gZmlsdGVyRmllbGQucHJvcGVydHkgPz8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbcHJvcGVydHlOYW1lXTtcblx0XHRjb25zdCB0eXBlID0gZmlsdGVyRmllbGQudHlwZSA9PT0gXCJTbG90XCIgPyBmaWx0ZXJGaWVsZFR5cGUuU2xvdCA6IGZpbHRlckZpZWxkVHlwZS5EZWZhdWx0O1xuXHRcdGNvbnN0IHZpc3VhbEZpbHRlciA9XG5cdFx0XHRmaWx0ZXJGaWVsZCAmJiBmaWx0ZXJGaWVsZD8udmlzdWFsRmlsdGVyXG5cdFx0XHRcdD8gZ2V0VmlzdWFsRmlsdGVycyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBzS2V5LCBkZWZpbmVkRmlsdGVyRmllbGRzKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAoZmlsdGVyRmllbGQudGVtcGxhdGUgfHwgZmlsdGVyRmllbGQudHlwZSA9PT0gZmlsdGVyRmllbGRUeXBlLlNsb3QpIHtcblx0XHRcdGlmIChmaWx0ZXJGaWVsZC5zZXR0aW5ncykge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncy5pc0N1c3RvbUZpbHRlciA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmaWx0ZXJGaWVsZC5zZXR0aW5ncyA9IHtcblx0XHRcdFx0XHRpc0N1c3RvbUZpbHRlcjogdHJ1ZVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmaWx0ZXJGaWVsZHNbc0tleV0gPSB7XG5cdFx0XHRrZXk6IHNLZXksXG5cdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0c2xvdE5hbWU6IGZpbHRlckZpZWxkPy5zbG90TmFtZSB8fCBzS2V5LFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvbkZpZWxkPy5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGNvbmRpdGlvblBhdGg6IGZpbHRlckZpZWxkLnByb3BlcnR5XG5cdFx0XHRcdD8gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSlcblx0XHRcdFx0OiBzZWxlY3Rpb25GaWVsZD8uY29uZGl0aW9uUGF0aCB8fCBwcm9wZXJ0eU5hbWUsXG5cdFx0XHRkb2N1bWVudFJlZlRleHQ6XG5cdFx0XHRcdGZpbHRlckZpZWxkLnByb3BlcnR5ICYmXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChcblx0XHRcdFx0XHRcInttZXRhTW9kZWw+XCIgKyBmaWx0ZXJGaWVsZC5wcm9wZXJ0eSArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Eb2N1bWVudGF0aW9uUmVmfVwiXG5cdFx0XHRcdCksXG5cdFx0XHR0ZW1wbGF0ZTogZmlsdGVyRmllbGQudGVtcGxhdGUsXG5cdFx0XHRsYWJlbDogY29udmVydGVyQ29udGV4dC5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKGZpbHRlckZpZWxkLmxhYmVsKSxcblx0XHRcdHBvc2l0aW9uOiBmaWx0ZXJGaWVsZC5wb3NpdGlvbiB8fCB7IHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyIH0sXG5cdFx0XHRhdmFpbGFiaWxpdHk6IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSB8fCBcIkRlZmF1bHRcIixcblx0XHRcdHNldHRpbmdzOiBmaWx0ZXJGaWVsZC5zZXR0aW5ncyxcblx0XHRcdHZpc3VhbEZpbHRlcjogdmlzdWFsRmlsdGVyLFxuXHRcdFx0cmVxdWlyZWQ6IGZpbHRlckZpZWxkLnJlcXVpcmVkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGRzO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGNvbmZpZ3VyYXRpb24gcGF0aCB0byBmZXRjaCB0aGUgY3VzdG9tIGZpbHRlciBmaWVsZHMgZnJvbSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHNldHRpbmdzQ29udGV4dFBhdGggTWFuaWZlc3QgZW50aXR5IHNldCBwYXRoIGFuZCBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoXG4gKiBAcmV0dXJucyBQYXRoIHRvIGZldGNoIHRoZSBjdXN0b20gZmlsdGVycyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5jb25zdCBnZXRGaWx0ZXJDb25maWd1cmF0aW9uUGF0aCA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzZXR0aW5nc0NvbnRleHRQYXRoPzogc3RyaW5nLFxuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IG9iamVjdFBhdGg7XG5cdGNvbnN0IGZpbHRlckJhckNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBtZXRhUGF0aCA9IGAke2ZpbHRlckJhckNvbnRleHRQYXRofS8ke2Fubm90YXRpb25QYXRofWA7XG5cdGlmIChzZXR0aW5nc0NvbnRleHRQYXRoICYmIG1ldGFQYXRoPy5zdGFydHNXaXRoKHNldHRpbmdzQ29udGV4dFBhdGgpICYmIGFubm90YXRpb25QYXRoKSB7XG5cdFx0b2JqZWN0UGF0aCA9IG1ldGFQYXRoLnJlcGxhY2UoYCR7c2V0dGluZ3NDb250ZXh0UGF0aH0vYCwgXCJcIik7XG5cdH0gZWxzZSB7XG5cdFx0b2JqZWN0UGF0aCA9IGFubm90YXRpb25QYXRoO1xuXHR9XG5cdHJldHVybiBvYmplY3RQYXRoID8gb2JqZWN0UGF0aCA6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gX2dldEZpbHRlckZpZWxkKHt9LCBwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlclJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfCB1bmRlZmluZWQsXG5cdHNSZXN0cmljdGlvbjogXCJSZXF1aXJlZFByb3BlcnRpZXNcIiB8IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIlxuKTogc3RyaW5nW10ge1xuXHRsZXQgYVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXSkge1xuXHRcdGFQcm9wcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0ubWFwKGZ1bmN0aW9uIChvUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkudmFsdWU7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFQcm9wcztcbn07XG5cbmNvbnN0IGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uICgpOiBQcm9wZXJ0eUluZm8ge1xuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IFwiJHNlYXJjaFwiLFxuXHRcdHBhdGg6IFwiJHNlYXJjaFwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0bWF4Q29uZGl0aW9uczogMSxcblx0XHRsYWJlbDogXCLigIhcIixcblx0XHRjb25zdHJhaW50czogeyBtYXhMZW5ndGg6IDEwMDAgfVxuXHR9O1xufTtcblxuY29uc3QgZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0bWF4Q29uZGl0aW9uczogMSxcblx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdGdyb3VwOiBcIlwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0aGlkZGVuRmlsdGVyOiBmYWxzZVxuXHR9O1xufTtcblxuY29uc3QgZ2V0U2VhcmNoUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFNlYXJjaFJlc3RyaWN0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNhcGFiaWxpdGllcz8uU2VhcmNoUmVzdHJpY3Rpb25zIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c05hdmlnYXRpb25QYXRoOiBzdHJpbmdcbik6IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIChcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMgJiZcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Jlc3RyaWN0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59O1xuLy8gVGhlIHByb3BlcnR5SW5mbyB1c2VkIGludGVybmFsbHkgd2l0aGluIEZFXG5leHBvcnQgdHlwZSBQcm9wZXJ0eUluZm8gPSB7XG5cdGtleT86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGNvbmRpdGlvblBhdGg/OiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0cGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRtYXhDb25kaXRpb25zPzogbnVtYmVyO1xuXHRkYXRhVHlwZT86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGhpZGRlbkZpbHRlcj86IGJvb2xlYW47XG5cdGRpc3BsYXk/OiBzdHJpbmc7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG5cdHR5cGU/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRtZW51Pzogc3RyaW5nO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGZpbHRlckV4cHJlc3Npb24/OiBzdHJpbmc7XG5cdGlzQ3VzdG9tRmlsdGVyPzogYm9vbGVhbjtcblx0Y29uc3RyYWludHM/OiBvYmplY3Q7XG5cdGZvcm1hdE9wdGlvbnM/OiBvYmplY3Q7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdHZpc3VhbEZpbHRlcj86IFZpc3VhbEZpbHRlcnM7XG5cdHR5cGVDb25maWc/OiBUeXBlQ29uZmlnO1xuXHRmaWx0ZXJhYmxlPzogYm9vbGVhbjtcbn07XG5cbi8vIFRoZSBwcm9wZXJ0eUluZm8gd2Ugc2hhcmUgd2l0aCBNRENcbmV4cG9ydCB0eXBlIFByb3BlcnR5SW5mb0V4dGVybmFsID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0ZGF0YVR5cGU6IHN0cmluZztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IG9iamVjdDtcblx0Zm9ybWF0T3B0aW9ucz86IG9iamVjdDtcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdHRvb2x0aXA/OiBzdHJpbmc7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0aGlkZGVuRmlsdGVyPzogYm9vbGVhbjtcbn07XG5jb25zdCBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0a2V5OiBvRmlsdGVyRmllbGRJbmZvLmtleSxcblx0XHRhbm5vdGF0aW9uUGF0aDogb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCxcblx0XHRjb25kaXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bmFtZTogb0ZpbHRlckZpZWxkSW5mby5jb25kaXRpb25QYXRoISxcblx0XHRsYWJlbDogb0ZpbHRlckZpZWxkSW5mby5sYWJlbCxcblx0XHRoaWRkZW5GaWx0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdGRpc3BsYXk6IFwiVmFsdWVcIixcblx0XHRpc1BhcmFtZXRlcjogb0ZpbHRlckZpZWxkSW5mby5pc1BhcmFtZXRlcixcblx0XHRjYXNlU2Vuc2l0aXZlOiBvRmlsdGVyRmllbGRJbmZvLmNhc2VTZW5zaXRpdmUsXG5cdFx0YXZhaWxhYmlsaXR5OiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSxcblx0XHRwb3NpdGlvbjogb0ZpbHRlckZpZWxkSW5mby5wb3NpdGlvbixcblx0XHR0eXBlOiBvRmlsdGVyRmllbGRJbmZvLnR5cGUsXG5cdFx0dGVtcGxhdGU6IG9GaWx0ZXJGaWVsZEluZm8udGVtcGxhdGUsXG5cdFx0bWVudTogb0ZpbHRlckZpZWxkSW5mby5tZW51LFxuXHRcdHJlcXVpcmVkOiBvRmlsdGVyRmllbGRJbmZvLnJlcXVpcmVkLFxuXHRcdGlzQ3VzdG9tRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLnNldHRpbmdzPy5pc0N1c3RvbUZpbHRlclxuXHR9O1xufTtcblxuY29uc3QgX2dldE1pc3NpbmdMYWJlbEZvck1hbmlmZXN0RmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0bWFuaWZlc3RGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD5cbik6IHZvaWQge1xuXHRmaWx0ZXJGaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRpZiAobWFuaWZlc3RGaWx0ZXJGaWVsZHMuaGFzT3duUHJvcGVydHkoZmlsdGVyRmllbGQua2V5KSAmJiAhbWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCkge1xuXHRcdFx0bWFuaWZlc3RGaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGQua2V5XS5sYWJlbCA9IGZpbHRlckZpZWxkLmxhYmVsO1xuXHRcdH1cblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGlzcGxheU1vZGUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eUFubm90YXRpb25zIHwgdW5kZWZpbmVkLFxuXHRvQ29sbGVjdGlvbkFubm90YXRpb25zOiBFbnRpdHlUeXBlQW5ub3RhdGlvbnMgfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zPy5Db21tb24/LlRleHQsXG5cdFx0b1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiA9XG5cdFx0XHRvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpKTtcblxuXHRpZiAob1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uLnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiOyAvL1RleHRGaXJzdFxuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyxcblx0b1R5cGVDb25maWc6IFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyhvRmlsdGVyRmllbGRJbmZvKTtcblx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblxuXHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdHJldHVybiBvUHJvcGVydHlJbmZvO1xuXHR9XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5T2JqZWN0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFByb3BlcnR5PihzQW5ub3RhdGlvblBhdGgpLmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cblx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSB0YXJnZXRQcm9wZXJ0eU9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdGNvbnN0IG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblxuXHRjb25zdCBvRm9ybWF0T3B0aW9ucyA9IG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnM7XG5cdGNvbnN0IG9Db25zdHJhaW50cyA9IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzO1xuXHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMsXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50cyxcblx0XHRkaXNwbGF5OiBkaXNwbGF5TW9kZShvUHJvcGVydHlBbm5vdGF0aW9ucywgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucylcblx0fSk7XG5cdHJldHVybiBvUHJvcGVydHlJbmZvO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5SW5mbyk6IGJvb2xlYW4ge1xuXHRsZXQgYklzTXVsdGlWYWx1ZSA9IHRydWU7XG5cdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0c3dpdGNoIChvUHJvcGVydHkuZmlsdGVyRXhwcmVzc2lvbikge1xuXHRcdGNhc2UgXCJTZWFyY2hFeHByZXNzaW9uXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVJhbmdlXCI6XG5cdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eS50eXBlICYmIG9Qcm9wZXJ0eS50eXBlLmluZGV4T2YoXCJCb29sZWFuXCIpID4gMCkge1xuXHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gYklzTXVsdGlWYWx1ZTtcbn07XG5cbmNvbnN0IF9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudHJ5OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzXG4pOiBlbnRyeSBpcyBBbm5vdGF0aW9uVGVybTxEYXRhRmllbGQgfCBEYXRhRmllbGRXaXRoVXJsIHwgRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoPiB7XG5cdHJldHVybiAoXG5cdFx0KGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsIHx8XG5cdFx0XHRlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKSAmJlxuXHRcdGVudHJ5LlZhbHVlLnBhdGg/LmluY2x1ZGVzKFwiL1wiKVxuXHQpO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBhZGRpdGlvbmFsIHByb3BlcnR5IHdoaWNoIHJlZmVyZW5jZXMgdG8gdGhlIHVuaXQsIHRpbWV6b25lLCB0ZXh0QXJyYW5nZW1lbnQgb3IgY3VycmVuY3kgZnJvbSBhIGRhdGEgZmllbGQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGJlIGNvbnNpZGVyZWRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdlByb3BlcnRpZXMgVGhlIGxpc3Qgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXVxuKTogdm9pZCB7XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0O1xuXHRpZiAodGFyZ2V0UHJvcGVydHkpIHtcblx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlQYXRoID1cblx0XHRcdGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoKHRhcmdldFByb3BlcnR5KSB8fFxuXHRcdFx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpIHx8XG5cdFx0XHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGgodGFyZ2V0UHJvcGVydHkpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGhcblx0XHRcdD8gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIGFkZGl0aW9uYWxQcm9wZXJ0eVBhdGgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5Py5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlbMF0ubmFtZTtcblx0XHRcdGlmICghbmF2UHJvcGVydGllcy5pbmNsdWRlcyhuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEdldHMgdXNlZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgZm9yIGF2YWlsYWJsZSBkYXRhRmllbGQuXG4gKiBAcGFyYW0gbmF2UHJvcGVydGllcyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuY29uc3QgZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNSZWN1cnNpdmVseSA9IGZ1bmN0aW9uIChcblx0bmF2UHJvcGVydGllczogc3RyaW5nW10sXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBzdHJpbmdbXSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZSkge1xuXHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGlubmVyRGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRpZiAoX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShkYXRhRmllbGQpKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKFxuXHRcdFx0XHRcdGVuaGFuY2VEYXRhTW9kZWxQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBkYXRhRmllbGQuVmFsdWUucGF0aCksXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMobmF2aWdhdGlvblByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2gobmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIEFkZGl0aW9uYWwgcHJvcGVydHkgZnJvbSB0ZXh0IGFycmFuZ2VtZW50L3VuaXRzL2N1cnJlbmNpZXMvdGltZXpvbmUuLi5cblx0XHRcdGFkZENoaWxkTmF2aWdhdGlvblByb3BlcnRpZXMoZGF0YUZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZQcm9wZXJ0aWVzKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBPdGhlciB0eXBlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIG5hdlByb3BlcnRpZXM7XG59O1xuXG5jb25zdCBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbiA9IGZhbHNlLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IHtcblx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBTZXQ8c3RyaW5nPjtcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZTtcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBQcm9wZXJ0eVBhdGhbXTtcblx0ZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cdHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0ZGVmYXVsdEZpbHRlckZpZWxkczogRmlsdGVyRmllbGRbXTtcbn0ge1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50cyBkZWZpbmVkIGluIHRoZSBkaWZmZXJlbnQgdmlzdWFsaXphdGlvbnMgYW5kIGRpZmZlcmVudCB2aWV3cyAobXVsdGkgdGFibGUgbW9kZSlcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzID0gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKGxyVGFibGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHQvL0ZpbHRlcnMgd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHdoaWNoIGlzIHBhcnQgb2YgU1YvRGVmYXVsdCBhbm5vdGF0aW9ucyBidXQgbm90IHByZXNlbnQgaW4gdGhlIFNlbGVjdGlvbkZpZWxkc1xuXHRjb25zdCBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMgPSAoKGFubm90YXRpb25QYXRoICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uKSB8fFxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgfHxcblx0XHRbXSkgYXMgUHJvcGVydHlQYXRoW107XG5cblx0bGV0IG5hdlByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdGlmIChsclRhYmxlcy5sZW5ndGggPT09IDAgJiYgISFsaW5lSXRlbVRlcm0pIHtcblx0XHQoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihsaW5lSXRlbVRlcm0pLmFubm90YXRpb24gYXMgTGluZUl0ZW0pPy5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdG5hdlByb3BlcnRpZXMgPSBnZXROYXZpZ2F0aW9uUHJvcGVydGllc1JlY3Vyc2l2ZWx5KG5hdlByb3BlcnRpZXMsIGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRuYXZQcm9wZXJ0aWVzLnB1c2goXG5cdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0aW9uRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvQ3JlYXRlZEJ5VXNlclwiLFxuXHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIixcblx0XHRcdFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvTGFzdENoYW5nZWRCeVVzZXJcIlxuXHRcdCk7XG5cdH1cblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgYWxsIHBvdGVudGlhbCBmaWx0ZXIgZmllbGRzIGJhc2VkIG9uLi4uXG5cdGNvbnN0IGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge1xuXHRcdC8vIC4uLm5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiB0aGUgZW50aXR5XG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkcyhlbnRpdHlUeXBlLCBcIlwiLCBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLiBub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChlbnRpdHlUeXBlLCBuYXZQcm9wZXJ0aWVzLCBmYWxzZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uYWRkaXRpb25hbCBtYW5pZmVzdCBkZWZpbmVkIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoXG5cdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCkubmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdClcblx0fTtcblx0bGV0IGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10gPSBbXTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnM7XG5cdH1cblxuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10gPVxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8ucmVkdWNlKChzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3Rpb25GaWVsZC52YWx1ZTtcblx0XHRcdGlmICghZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdGxldCBuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGg/LnN0YXJ0c1dpdGgoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBcIlwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGg/LnNwbGl0KFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIilbMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmaWx0ZXJQcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aCA/IG5hdmlnYXRpb25QYXRoICsgXCIvXCIgKyBwcm9wZXJ0eVBhdGggOiBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZHMsXG5cdFx0XHRcdFx0ZmlsdGVyUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cCA9IFwiXCI7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXBMYWJlbCA9IFwiXCI7XG5cdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xuXHRcdH0sIFtdKSB8fCBbXTtcblxuXHRjb25zdCBkZWZhdWx0RmlsdGVyRmllbGRzID0gX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMoXG5cdFx0YVNlbGVjdE9wdGlvbnMsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHNcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzOiBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMsXG5cdFx0ZmlsdGVyRmllbGRzOiBmaWx0ZXJGaWVsZHMsXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0ZGVmYXVsdEZpbHRlckZpZWxkczogZGVmYXVsdEZpbHRlckZpZWxkc1xuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoVHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChwcm9wZXJ0eT86IFByb3BlcnR5KTogUHJvcGVydHlUeXBlQ29uZmlnIHtcblx0Y29uc3QgdHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcGVydHkpIGFzIFByb3BlcnR5VHlwZUNvbmZpZztcblx0aWYgKHByb3BlcnR5Py50eXBlID09PSBzRWRtU3RyaW5nICYmIHR5cGVDb25maWcuY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSkge1xuXHRcdHR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdC4uLnR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogZmFsc2Vcblx0XHR9O1xuXHR9XG5cdHJldHVybiB0eXBlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5SW5mb0ZpZWxkOiBGaWx0ZXJGaWVsZCB8IFByb3BlcnR5SW5mbyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhUmVxdWlyZWRQcm9wczogdW5rbm93bltdLFxuXHRhVHlwZUNvbmZpZzogUmVjb3JkPHN0cmluZywgUGFydGlhbDxQcm9wZXJ0eVR5cGVDb25maWc+PlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBmZXRjaFByb3BlcnR5SW5mbyhjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eUluZm9GaWVsZCwgYVR5cGVDb25maWdbcHJvcGVydHlJbmZvRmllbGQua2V5IV0pLFxuXHRcdHNQcm9wZXJ0eVBhdGggPSBcIlwiO1xuXHRpZiAocHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aCkge1xuXHRcdHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eUluZm9GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2UoL1xcK3xcXCovZywgXCJcIik7XG5cdH1cblx0aWYgKG9Qcm9wZXJ0eUluZm8pIHtcblx0XHRvUHJvcGVydHlJbmZvID0gT2JqZWN0LmFzc2lnbihvUHJvcGVydHlJbmZvLCB7XG5cdFx0XHRtYXhDb25kaXRpb25zOiBvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyXG5cdFx0XHRcdD8gMVxuXHRcdFx0XHQ6IGdldE1heENvbmRpdGlvbnMoZW5oYW5jZURhdGFNb2RlbFBhdGg8UHJvcGVydHk+KGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBzUHJvcGVydHlQYXRoKSksXG5cdFx0XHRyZXF1aXJlZDogcHJvcGVydHlJbmZvRmllbGQucmVxdWlyZWQgPz8gKG9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgfHwgYVJlcXVpcmVkUHJvcHMuaW5jbHVkZXMoc1Byb3BlcnR5UGF0aCkpLFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0ZGF0YVR5cGU6IGFUeXBlQ29uZmlnW3Byb3BlcnR5SW5mb0ZpZWxkLmtleSFdLnR5cGVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzU2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eUluZm9GaWVsZHM6IEZpbHRlckZpZWxkW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0ZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHM/OiBGaWx0ZXJGaWVsZFtdXG4pOiBQcm9wZXJ0eUluZm9bXSB7XG5cdC8vZ2V0IFR5cGVDb25maWcgZnVuY3Rpb25cblx0Y29uc3QgYVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj4gPSB7fTtcblxuXHRpZiAoZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMpIHtcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwcm9wZXJ0eUluZm9GaWVsZHMuY29uY2F0KGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzKTtcblx0fVxuXHQvL2FkZCB0eXBlQ29uZmlnXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbWV0ZXJGaWVsZCkge1xuXHRcdGlmIChwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlDb252ZXJ0eUNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UHJvcGVydHk+KHBhcmFtZXRlckZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gZmV0Y2hUeXBlQ29uZmlnKHByb3BlcnR5VGFyZ2V0T2JqZWN0KTtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSBvVHlwZUNvbmZpZztcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVR5cGVDb25maWdbcGFyYW1ldGVyRmllbGQua2V5XSA9IHsgdHlwZTogc1N0cmluZ0RhdGFUeXBlIH07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBmaWx0ZXJSZXN0cmljdGlvbnNcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnMgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9SZXQ6IHtcblx0XHRSZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9ID0ge307XG5cdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IGFQYXRoUGFydHMgPSBzRW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChhUGF0aFBhcnRzLmxlbmd0aCA+IDIpIHtcblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBhUGF0aFBhcnRzW2FQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBzTmF2aWdhdGlvblBhdGgpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gb1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXVxuXHRcdCk7XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KFxuXHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdXG5cdFx0KTtcblx0fVxuXHRjb25zdCBhUmVxdWlyZWRQcm9wcyA9IG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzO1xuXHRjb25zdCBhTm9uRmlsdGVyYWJsZVByb3BzID0gb1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0Y29uc3QgYUZldGNoZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXG5cdC8vIHByb2Nlc3MgdGhlIGZpZWxkcyB0byBhZGQgbmVjZXNzYXJ5IHByb3BlcnRpZXNcblx0cHJvcGVydHlJbmZvRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5SW5mb0ZpZWxkKSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgucmVwbGFjZSgvWysqXS9nLCBcIlwiKTtcblx0XHRpZiAoIWFOb25GaWx0ZXJhYmxlUHJvcHMuaW5jbHVkZXMoc1Byb3BlcnR5UGF0aCkpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm8gPSBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvKHByb3BlcnR5SW5mb0ZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBhUmVxdWlyZWRQcm9wcywgYVR5cGVDb25maWcpO1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2gob1Byb3BlcnR5SW5mbyk7XG5cdFx0fVxuXHR9KTtcblxuXHQvL2FkZCBlZGl0XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNIaWRkZW5EcmFmdEVuYWJsZWQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldFNhcEZlTWFuaWZlc3RDb25maWd1cmF0aW9uKCk/LmFwcD8uaGlkZURyYWZ0Py5lbmFibGVkO1xuXHRpZiAoTW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoZGF0YU1vZGVsT2JqZWN0UGF0aCkpIHtcblx0XHRjb25zdCBlZGl0U3RhdGVGaWx0ZXIgPSBnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8oKTsgLy8gRmlsdGVyIHNob3VsZCBhbHdheXMgYmUgYWRkZWQgaW4gdGhlIHByb3BlcnR5SW5mbyBvdGhlcndpc2UgZHVwbGljYXRlIHJlY29yZHMgYXJlIHNob3duIGluIFJBUFxuXHRcdGVkaXRTdGF0ZUZpbHRlci5oaWRkZW5GaWx0ZXIgPSBpc0hpZGRlbkRyYWZ0RW5hYmxlZCB8fCAhc2hvd0RyYWZ0RWRpdFN0YXR1cyhjb252ZXJ0ZXJDb250ZXh0KTsgLy9JZiBmaWx0ZXIgcmVzdHJpY3Rpb25zIGFyZSBhZGRlZCBpdCBpcyBzZXQgdG8gdHJ1ZVxuXHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGVkaXRTdGF0ZUZpbHRlcik7XG5cdH1cblx0Ly8gYWRkIHNlYXJjaFxuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChzRW50aXR5U2V0UGF0aCAmJiBoaWRlQmFzaWNTZWFyY2ggIT09IHRydWUpIHtcblx0XHRpZiAoIXNlYXJjaFJlc3RyaWN0aW9ucyB8fCBzZWFyY2hSZXN0cmljdGlvbnM/LlNlYXJjaGFibGUpIHtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IHNob3dEcmFmdEVkaXRTdGF0dXMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogYm9vbGVhbiB7XG5cdGNvbnN0IG5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQsIFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFcIik7XG5cdHJldHVybiBuYXZpZ2F0aW9uUmVzdHJpY3Rpb25zPy5GaWx0ZXJSZXN0cmljdGlvbnM/LkZpbHRlcmFibGUgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogTWFuaWZlc3RGaWx0ZXJGaWVsZFtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmdcbik6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IG1hbmlmZXN0RmlsdGVyRmllbGRzID0gZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgpO1xuXHRfZ2V0TWlzc2luZ0xhYmVsRm9yTWFuaWZlc3RGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBtYW5pZmVzdEZpbHRlckZpZWxkcyk7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhmaWx0ZXJGaWVsZHMsIG1hbmlmZXN0RmlsdGVyRmllbGRzLCB7XG5cdFx0YXZhaWxhYmlsaXR5OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGxhYmVsOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHR5cGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0c2xvdE5hbWU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZG9jdW1lbnRSZWZUZXh0OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHRlbXBsYXRlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc3VhbEZpbHRlcjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRyZXF1aXJlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbCA9IChwcm9wZXJ0eUluZm9zOiBQcm9wZXJ0eUluZm9bXSk6IHZvaWQgPT4ge1xuXHRwcm9wZXJ0eUluZm9zLnNvcnQoZnVuY3Rpb24gKGE6IEZpbHRlckdyb3VwLCBiOiBGaWx0ZXJHcm91cCkge1xuXHRcdGNvbnN0IGFHcm91cExhYmVsSXNTZXQgPSBhLmdyb3VwTGFiZWwgIT09IHVuZGVmaW5lZCAmJiBhLmdyb3VwTGFiZWwgIT09IG51bGw7XG5cdFx0Y29uc3QgYkdyb3VwTGFiZWxJc1NldCA9IGIuZ3JvdXBMYWJlbCAhPT0gdW5kZWZpbmVkICYmIGIuZ3JvdXBMYWJlbCAhPT0gbnVsbDtcblx0XHRpZiAoIWFHcm91cExhYmVsSXNTZXQgJiYgIWJHcm91cExhYmVsSXNTZXQpIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblx0XHRpZiAoYUdyb3VwTGFiZWxJc1NldCAmJiAhYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpZiAoIWFHcm91cExhYmVsSXNTZXQgJiYgYkdyb3VwTGFiZWxJc1NldCkge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdHJldHVybiBhLmdyb3VwTGFiZWwhLmxvY2FsZUNvbXBhcmUoYi5ncm91cExhYmVsISk7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiBmaWVsZHMgdGhhdCB3aWxsIGJlIHVzZWQgd2l0aGluIHRoZSBmaWx0ZXIgYmFyXG4gKiBUaGlzIGNvbmZpZ3VyYXRpb24gdGFrZXMgaW50byBhY2NvdW50IHRoZSBhbm5vdGF0aW9uIGFuZCB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBsclRhYmxlc1xuICogQHBhcmFtIGFubm90YXRpb25QYXRoXG4gKiBAcGFyYW0gW2luY2x1ZGVIaWRkZW5dXG4gKiBAcGFyYW0gW2xpbmVJdGVtVGVybV1cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNlbGVjdGlvbiBmaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSxcblx0YW5ub3RhdGlvblBhdGggPSBcIlwiLFxuXHRpbmNsdWRlSGlkZGVuPzogYm9vbGVhbixcblx0bGluZUl0ZW1UZXJtPzogc3RyaW5nXG4pOiB7IHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXTsgc1Byb3BlcnR5SW5mbzogc3RyaW5nIH0ge1xuXHRjb25zdCBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhKFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bHJUYWJsZXMsXG5cdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0aW5jbHVkZUhpZGRlbixcblx0XHRsaW5lSXRlbVRlcm1cblx0KTtcblx0Y29uc3QgcGFyYW1ldGVyRmllbGRzID0gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5lbnRpdHlUeXBlO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IHBhcmFtZXRlckZpZWxkcy5jb25jYXQocHJvcGVydHlJbmZvRmllbGRzKTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKHByb3BlcnR5SW5mb0ZpZWxkcywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgYW5ub3RhdGlvblBhdGgpO1xuXG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllcyA9IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMoXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0b0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5kZWZhdWx0RmlsdGVyRmllbGRzXG5cdCk7XG5cdHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsKGFGZXRjaGVkUHJvcGVydGllcyk7XG5cblx0bGV0IHNGZXRjaFByb3BlcnRpZXMgPSBKU09OLnN0cmluZ2lmeShhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRzRmV0Y2hQcm9wZXJ0aWVzID0gc0ZldGNoUHJvcGVydGllcy5yZXBsYWNlKC9cXHsvZywgXCJcXFxce1wiKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdGNvbnN0IHNQcm9wZXJ0eUluZm8gPSBzRmV0Y2hQcm9wZXJ0aWVzO1xuXHQvLyBlbmQgb2YgcHJvcGVydHlGaWVsZHMgcHJvY2Vzc2luZ1xuXG5cdC8vIHRvIHBvcHVsYXRlIHNlbGVjdGlvbiBmaWVsZHNcblx0bGV0IHByb3BTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzKSk7XG5cdHByb3BTZWxlY3Rpb25GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BTZWxlY3Rpb25GaWVsZHMpO1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50c1xuXHRjb25zdCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMgPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcztcblx0Y29uc3QgZmlsdGVyRmFjZXRzID0gZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5GaWx0ZXJGYWNldHM7XG5cdGxldCBmaWx0ZXJGYWNldE1hcDogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+ID0ge307XG5cblx0Y29uc3QgYUZpZWxkR3JvdXBzID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIlVJXCIsIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApIGFzIEZpZWxkR3JvdXBbXTtcblxuXHRpZiAoZmlsdGVyRmFjZXRzID09PSB1bmRlZmluZWQgfHwgZmlsdGVyRmFjZXRzLmxlbmd0aCA8IDApIHtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYUZpZWxkR3JvdXBzKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcCA9IHtcblx0XHRcdFx0Li4uZmlsdGVyRmFjZXRNYXAsXG5cdFx0XHRcdC4uLmdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoYUZpZWxkR3JvdXBzW2ldKVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmFjZXRNYXAgPSBmaWx0ZXJGYWNldHMucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4sIGZpbHRlckZhY2V0OiBSZWZlcmVuY2VGYWNldFR5cGVzKSA9PiB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChmaWx0ZXJGYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApPy5EYXRhPy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRwcmV2aW91c1ZhbHVlWygoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YVtpXSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoXSA9IHtcblx0XHRcdFx0XHRncm91cDogZmlsdGVyRmFjZXQ/LklEPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGdyb3VwTGFiZWw6IGZpbHRlckZhY2V0Py5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdFx0fSwge30pO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZmlsdGVyRmllbGRzO1xuXG5cdC8vIGZpbmFsbHkgY3JlYXRlIGZpbmFsIGxpc3Qgb2YgZmlsdGVyIGZpZWxkcyBieSBhZGRpbmcgdGhlIFNlbGVjdGlvbkZpZWxkcyBmaXJzdCAob3JkZXIgbWF0dGVycykuLi5cblx0Y29uc3QgYWxsRmlsdGVycyA9IHByb3BTZWxlY3Rpb25GaWVsZHNcblxuXHRcdC8vIC4uLmFuZCBhZGRpbmcgcmVtYWluaW5nIGZpbHRlciBmaWVsZHMsIHRoYXQgYXJlIG5vdCB1c2VkIGluIGEgU2VsZWN0aW9uVmFyaWFudCAob3JkZXIgZG9lc24ndCBtYXR0ZXIpXG5cdFx0LmNvbmNhdChcblx0XHRcdE9iamVjdC5rZXlzKGZpbHRlckZpZWxkcylcblx0XHRcdFx0LmZpbHRlcigocHJvcGVydHlQYXRoKSA9PiAhZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHQubWFwKChwcm9wZXJ0eVBhdGgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXSwgZmlsdGVyRmFjZXRNYXBbcHJvcGVydHlQYXRoXSk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKGFsbEZpbHRlcnMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGFubm90YXRpb25QYXRoKTtcblxuXHQvLyBBZGQgY2FzZVNlbnNpdGl2ZSBwcm9wZXJ0eSB0byBhbGwgc2VsZWN0aW9uIGZpZWxkcy5cblx0Y29uc3QgaXNDYXNlU2Vuc2l0aXZlID0gaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpO1xuXHRzZWxlY3Rpb25GaWVsZHMuZm9yRWFjaCgoZmlsdGVyRmllbGQpID0+IHtcblx0XHRmaWx0ZXJGaWVsZC5jYXNlU2Vuc2l0aXZlID0gaXNDYXNlU2Vuc2l0aXZlO1xuXHR9KTtcblxuXHRyZXR1cm4geyBzZWxlY3Rpb25GaWVsZHMsIHNQcm9wZXJ0eUluZm8gfTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaWx0ZXIgYmFyIGluc2lkZSBhIHZhbHVlIGhlbHAgZGlhbG9nIHNob3VsZCBiZSBleHBhbmRlZC4gVGhpcyBpcyB0cnVlIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaG9sZDpcbiAqICgxKSBhIGZpbHRlciBwcm9wZXJ0eSBpcyBtYW5kYXRvcnksXG4gKiAoMikgbm8gc2VhcmNoIGZpZWxkIGV4aXN0cyAoZW50aXR5IGlzbid0IHNlYXJjaCBlbmFibGVkKSxcbiAqICgzKSB3aGVuIHRoZSBkYXRhIGlzbid0IGxvYWRlZCBieSBkZWZhdWx0IChhbm5vdGF0aW9uIEZldGNoVmFsdWVzID0gMikuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIFRoZSBGaWx0ZXJSZXN0cmljdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmFsdWVMaXN0IFRoZSBWYWx1ZUxpc3QgYW5ub3RhdGlvblxuICogQHJldHVybnMgVGhlIHZhbHVlIGZvciBleHBhbmRGaWx0ZXJGaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cGFuZEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBGaWx0ZXJSZXN0cmljdGlvbnMgfCB1bmRlZmluZWQsXG5cdHZhbHVlTGlzdDogTWV0YU1vZGVsVHlwZTxWYWx1ZUxpc3Q+XG4pOiBib29sZWFuIHtcblx0Y29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24sIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpO1xuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChyZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoID4gMCB8fCBoaWRlQmFzaWNTZWFyY2ggfHwgdmFsdWVMaXN0Py5GZXRjaFZhbHVlcyA9PT0gMikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXlEQTtFQUFBLElBZ0NLQSxlQUFlLDBCQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBZkEsZUFBZTtJQUFBLE9BQWZBLGVBQWU7RUFBQSxFQUFmQSxlQUFlO0VBY3BCLE1BQU1DLFVBQVUsR0FBRyxZQUFZO0VBQy9CLE1BQU1DLGVBQWUsR0FBRyxnQ0FBZ0M7RUFJeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLHlCQUF5QkEsQ0FBQ0MsVUFBc0IsRUFBK0I7SUFDdkYsTUFBTUMsY0FBMkMsR0FBRyxDQUFDLENBQUM7SUFDdERELFVBQVUsQ0FBQ0Us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
|
|
@@ -1051,9 +1051,9 @@ export const processSelectionFields = function (
|
|
|
1051
1051
|
const dataModelObjectPath = converterContext.getDataModelObjectPath();
|
|
1052
1052
|
const isHiddenDraftEnabled = converterContext.getManifestWrapper().getSapFeManifestConfiguration()?.app?.hideDraft?.enabled;
|
|
1053
1053
|
if (ModelHelper.isObjectPathDraftSupported(dataModelObjectPath)) {
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1054
|
+
const editStateFilter = getEditStateFilterPropertyInfo(); // Filter should always be added in the propertyInfo otherwise duplicate records are shown in RAP
|
|
1055
|
+
editStateFilter.hiddenFilter = isHiddenDraftEnabled || !showDraftEditStatus(converterContext); //If filter restrictions are added it is set to true
|
|
1056
|
+
aFetchedProperties.push(editStateFilter);
|
|
1057
1057
|
}
|
|
1058
1058
|
// add search
|
|
1059
1059
|
const searchRestrictions = getSearchRestrictions(converterContext);
|
|
@@ -45,7 +45,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/CriticalityFormatter", "s
|
|
|
45
45
|
controls: [],
|
|
46
46
|
elements: [],
|
|
47
47
|
// eslint-disable-next-line no-template-curly-in-string
|
|
48
|
-
version: "1.136.
|
|
48
|
+
version: "1.136.7",
|
|
49
49
|
noLibraryCSS: true,
|
|
50
50
|
extensions: {
|
|
51
51
|
//Configuration used for rule loading of Support Assistant
|
|
@@ -204,7 +204,8 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/Semanti
|
|
|
204
204
|
*/
|
|
205
205
|
_exports.getAssociatedTextPropertyPath = getAssociatedTextPropertyPath;
|
|
206
206
|
const hasValueHelp = function (property) {
|
|
207
|
-
return !!property.annotations?.Common?.ValueList || !!property.annotations?.Common?.ValueListReferences || !!property.annotations?.Common?.ValueListMapping
|
|
207
|
+
return !!property.annotations?.Common?.ValueList || !!property.annotations?.Common?.ValueListReferences || !!property.annotations?.Common?.ValueListMapping || !!property.annotations?.Common?.ValueListRelevantQualifiers // Covers cases where context dependent annotation are present
|
|
208
|
+
;
|
|
208
209
|
};
|
|
209
210
|
|
|
210
211
|
/**
|
|
@@ -332,4 +333,4 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/Semanti
|
|
|
332
333
|
_exports.isTimezone = isTimezone;
|
|
333
334
|
return _exports;
|
|
334
335
|
}, false);
|
|
335
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0NvbXB1dGVkIiwib1Byb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJDb3JlIiwiQ29tcHV0ZWQiLCJ2YWx1ZU9mIiwiX2V4cG9ydHMiLCJpc0ltbXV0YWJsZSIsIkltbXV0YWJsZSIsImlzS2V5IiwiaXNTZW1hbnRpY0tleSIsInByb3BlcnR5IiwiY29udGV4dERhdGFNb2RlbE9iamVjdCIsInNlbWFudGljS2V5cyIsImNvbnRleHRMb2NhdGlvbiIsInRhcmdldEVudGl0eVR5cGUiLCJDb21tb24iLCJTZW1hbnRpY0tleSIsInNvbWUiLCJrZXkiLCIkdGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiaGFzRGF0ZVR5cGUiLCJpbmNsdWRlcyIsInR5cGUiLCJnZXRMYWJlbCIsIkxhYmVsIiwidG9TdHJpbmciLCJoYXNTZW1hbnRpY09iamVjdCIsIlNlbWFudGljT2JqZWN0SGVscGVyIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIlRpbWV6b25lIiwidW5kZWZpbmVkIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwicGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHkiLCJUZXh0IiwiZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eVBhdGgiLCJFeHRlcm5hbElEIiwiZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJNZWFzdXJlcyIsIlVuaXQiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiSVNPQ3VycmVuY3kiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJnZXRTdGF0aWNVbml0T3JDdXJyZW5jeSIsInVuaXRPckN1cnJlbmN5IiwiZ2V0U3RhdGljVGltZXpvbmUiLCJzdGF0aWNUaW1lem9uZSIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiaGFzVmFsdWVIZWxwIiwiVmFsdWVMaXN0IiwiVmFsdWVMaXN0UmVmZXJlbmNlcyIsIlZhbHVlTGlzdE1hcHBpbmciLCJoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJoYXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uIiwiVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiIsImhhc1RpbWV6b25lIiwiaXNVbml0IiwiSXNVbml0IiwiaGFzVGV4dCIsImlzSW1hZ2VVUkwiLCJVSSIsIklzSW1hZ2VVUkwiLCJpc0N1cnJlbmN5IiwiSXNDdXJyZW5jeSIsImhhc0N1cnJlbmN5IiwiaGFzVW5pdCIsImlzR3VpZCIsImhhc1N0YXRpY1BlcmNlbnRVbml0IiwiaXNNdWx0aUxpbmVUZXh0IiwicGFyYW1ldGVyIiwiTXVsdGlMaW5lVGV4dCIsImlzVGltZXpvbmUiLCJJc1RpbWV6b25lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJQcm9wZXJ0eUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvblBhcmFtZXRlciwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgU2VtYW50aWNPYmplY3RIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgdGhlIENvcmUuQ29tcHV0ZWQgYW5ub3RhdGlvbiBvciBub3QuXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgY29tcHV0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQ29tcHV0ZWQgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvcmU/LkNvbXB1dGVkPy52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyB0aGUgQ29yZS5JbW11dGFibGUgYW5ub3RhdGlvbiBvciBub3QuXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCdzIGltbXV0YWJsZVxuICovXG5leHBvcnQgY29uc3QgaXNJbW11dGFibGUgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvcmU/LkltbXV0YWJsZT8udmFsdWVPZigpO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIGtleSBvciBub3QuXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCdzIGEga2V5XG4gKi9cbmV4cG9ydCBjb25zdCBpc0tleSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5pc0tleTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSBzZW1hbnRpY0tleSBmb3IgdGhlIGNvbnRleHQgZW50aXR5LlxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdCBUaGUgRGF0YU1vZGVsT2JqZWN0IHRoYXQgaG9sZHMgdGhlIGNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYGlmIGl0J3MgYSBzZW1hbnRpYyBrZXlcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2VtYW50aWNLZXkgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkLCBjb250ZXh0RGF0YU1vZGVsT2JqZWN0OiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+KTogYm9vbGVhbiB7XG5cdGNvbnN0IHNlbWFudGljS2V5cyA9IGNvbnRleHREYXRhTW9kZWxPYmplY3QuY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY0tleTtcblx0cmV0dXJuIChcblx0XHRzZW1hbnRpY0tleXM/LnNvbWUoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGtleT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lID09PSBwcm9wZXJ0eT8uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdH0pID8/IGZhbHNlXG5cdCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSBkYXRlIHRpbWUgb3Igbm90LlxuICogQHBhcmFtIG9Qcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIG9mIHR5cGUgZGF0ZSAvIGRhdGV0aW1lIC8gZGF0ZXRpbWVvZmZzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0RhdGVUeXBlID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIFtcIkVkbS5EYXRlXCIsIFwiRWRtLkRhdGVUaW1lXCIsIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCJdLmluY2x1ZGVzKG9Qcm9wZXJ0eS50eXBlKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGxhYmVsIGFubm90YXRpb24uXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBsYWJlbCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldExhYmVsID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcge1xuXHRyZXR1cm4gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8IFwiXCI7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHNlbWFudGljIG9iamVjdCBkZWZpbmVkIG9yIG5vdC5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgc2VtYW50aWMgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNTZW1hbnRpY09iamVjdCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIFNlbWFudGljT2JqZWN0SGVscGVyLmhhc1NlbWFudGljT2JqZWN0KHByb3BlcnR5KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBwcm9wZXJ0eSBhc3NvY2lhdGVkIHRvIHRoZSBwcm9wZXJ0eSwgaWYgYXBwbGljYWJsZS5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHRpbWV6b25lIHByb3BlcnR5LCBpZiBpdCBleGlzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lKVxuXHRcdD8gKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZS4kdGFyZ2V0IGFzIHVua25vd24gYXMgUHJvcGVydHkpXG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgcHJvcGVydHkgcGF0aCBhc3NvY2lhdGVkIHRvIHRoZSBwcm9wZXJ0eSwgaWYgYXBwbGljYWJsZS5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHRpbWV6b25lIHByb3BlcnR5IHBhdGgsIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZSlcblx0XHQ/IG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU/LnBhdGhcblx0XHQ6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhc3NvY2lhdGVkIHRleHQgcHJvcGVydHkgZm9yIGEgcHJvcGVydHksIGlmIGl0IGV4aXN0cy5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHRleHQgcHJvcGVydHksIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0KVxuXHRcdD8gKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LiR0YXJnZXQgYXMgdW5rbm93biBhcyBQcm9wZXJ0eSlcblx0XHQ6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBDb21tb24uRXh0ZXJuYWxJRCBwcm9wZXJ0eSBwYXRoIGlmIGl0IGV4aXN0cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgQ29tbW9uLkV4dGVybmFsSUQgcHJvcGVydHkgcGF0aCBvciB1bmRlZmluZWQgaWYgaXQgZG9lcyBub3QgZXhpc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHlQYXRoID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdC8vcmV0dXJuIHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRD8ucGF0aDtcblx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5Py5hbm5vdGF0aW9ucy5Db21tb24/LkV4dGVybmFsSUQpID8gcHJvcGVydHk/LmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRC5wYXRoIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFzc29jaWF0ZWQgZXh0ZXJuYWxJRCBwcm9wZXJ0eSBmb3IgdGhhdCBwcm9wZXJ0eSwgaWYgaXQgZXhpc3RzLlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBleHRlcm5hbElEIHByb3BlcnR5LCBpZiBpdCBleGlzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LkV4dGVybmFsSUQpXG5cdFx0PyAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRXh0ZXJuYWxJRC4kdGFyZ2V0IGFzIHVua25vd24gYXMgUHJvcGVydHkpXG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdW5pdCBwcm9wZXJ0eSBhc3NvY2lhdGVkIHRvIHRoZSBwcm9wZXJ0eSwgaWYgYXBwbGljYWJsZS5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHVuaXQgcHJvcGVydHksIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkKTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gb1Byb3BlcnR5ICYmIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uVW5pdClcblx0XHQ/IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uVW5pdC4kdGFyZ2V0XG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGggPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCkgPyBvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0LnBhdGggOiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXNzb2NpYXRlZCBjdXJyZW5jeSBwcm9wZXJ0eSBmb3IgdGhhdCBwcm9wZXJ0eSBpZiBpdCBleGlzdHMuXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSB1bml0IHByb3BlcnR5LCBpZiBpdCBleGlzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5ID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBvUHJvcGVydHkgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeSlcblx0XHQ/IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kuJHRhcmdldFxuXHRcdDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSlcblx0XHQ/IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5LnBhdGhcblx0XHQ6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhc3NvY2lhdGVkIHN0YXRpYyBjdXJyZW5jeSBvciB1bml0IGZvciBhIGdpdmVuIHByb3BlcnR5IGlmIGl0IGV4aXN0cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgdW5pdCBvciBjdXJyZW5jeSBzdGF0aWMgdmFsdWUsIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0U3RhdGljVW5pdE9yQ3VycmVuY3kgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdW5pdE9yQ3VycmVuY3kgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5ID8/IHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0aWYgKCF1bml0T3JDdXJyZW5jeSB8fCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0T3JDdXJyZW5jeSkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBgJHt1bml0T3JDdXJyZW5jeX1gO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFzc29jaWF0ZWQgdGltZXpvbmUgc3RhdGljIHRleHQgYSBnaXZlbiBwcm9wZXJ0eSBpZiBpdCBleGlzdHMuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHRpbWV6b25lIHN0YXRpYyB2YWx1ZSwgaWYgaXQgZXhpc3RzXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFN0YXRpY1RpbWV6b25lID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHN0YXRpY1RpbWV6b25lID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdGlmICghc3RhdGljVGltZXpvbmUgfHwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oc3RhdGljVGltZXpvbmUpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gYCR7c3RhdGljVGltZXpvbmV9YDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBDb21tb24uVGV4dCBwcm9wZXJ0eSBwYXRoIGlmIGl0IGV4aXN0cy5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIENvbW1vbi5UZXh0IHByb3BlcnR5IHBhdGggb3IgdW5kZWZpbmVkIGlmIGl0IGRvZXMgbm90IGV4aXN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCkgPyBvUHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQucGF0aCA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgdmFsdWUgaGVscCBhbm5vdGF0aW9uIGRlZmluZWQgb3Igbm90LlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlSGVscCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHQhIXByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdCB8fFxuXHRcdCEhcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVmZXJlbmNlcyB8fFxuXHRcdCEhcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0TWFwcGluZ1xuXHQpO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBoZWxwIHdpdGggZml4ZWQgdmFsdWUgYW5ub3RhdGlvbiBkZWZpbmVkIG9yIG5vdC5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgQWN0aW9uUGFyYW1ldGVyKTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPy52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHZhbHVlIGhlbHAgZm9yIHZhbGlkYXRpb24gYW5ub3RhdGlvbiBkZWZpbmVkIG9yIG5vdC5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlTGlzdEZvclZhbGlkYXRpb24gPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdEZvclZhbGlkYXRpb24gIT09IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNUaW1lem9uZSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmUgIT09IHVuZGVmaW5lZDtcbn07XG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIHVuaXQgcHJvcGVydHkuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIHVuaXRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzVW5pdCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIpOiBib29sZWFuIHtcblx0cmV0dXJuICEhcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNVbml0Py52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSB0ZXh0IHByb3BlcnR5LlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBUZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNUZXh0ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGFuIEltYWdlVVJMLlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYW4gSW1hZ2VVUkxcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW1hZ2VVUkwgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIXByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSXNJbWFnZVVSTD8udmFsdWVPZigpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSBjdXJyZW5jeSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIGN1cnJlbmN5XG4gKi9cbmV4cG9ydCBjb25zdCBpc0N1cnJlbmN5ID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzQ3VycmVuY3k/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIGN1cnJlbmN5IHByb3BlcnR5LlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgY3VycmVuY3lcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0N1cnJlbmN5ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgdW5pdCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBhIHVuaXRcbiAqL1xuXG5leHBvcnQgY29uc3QgaGFzVW5pdCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgdHlwZSBoYXMgRWRtLkd1aWQuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIEd1aWRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzR3VpZCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIpOiBib29sZWFuIHtcblx0cmV0dXJuIHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkd1aWRcIjtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBwcm9wZXJ0eSBoYXMgYSBzdGF0aWMgdW5pdCB0aGF0IGlzICUuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBhbm5vdGF0ZWQgd2l0aCB0aGUgc3RhdGljIHVuaXQgJVxuICovXG5leHBvcnQgY29uc3QgaGFzU3RhdGljUGVyY2VudFVuaXQgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0Py50b1N0cmluZygpID09PSBcIiVcIjtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGZvcm0gZWxlbWVudCBvciBhY3Rpb24gcGFyYW1ldGVyIHN1cHBvcnRzIG11bHRpIGxpbmUgdGV4dCBpbnB1dC5cbiAqIEBwYXJhbSBwYXJhbWV0ZXIgUHJvcGVydHkgb3IgQWN0aW9uUGFyYW1ldGVyLlxuICogQHJldHVybnMgQm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNdWx0aUxpbmVUZXh0KHBhcmFtZXRlcjogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0cmV0dXJuIHBhcmFtZXRlcj8uYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkgPT09IHRydWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEgdGltZXpvbmUgcHJvcGVydHkuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIHRpbWV6b25lIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RpbWV6b25lKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc1RpbWV6b25lPy52YWx1ZU9mKCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztFQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNQSxVQUFVLEdBQUcsU0FBQUEsQ0FBVUMsU0FBbUIsRUFBVztJQUNqRSxPQUFPLENBQUMsQ0FBQ0EsU0FBUyxDQUFDQyxXQUFXLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFFQyxPQUFPLENBQUMsQ0FBQztFQUMxRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQUMsUUFBQSxDQUFBTixVQUFBLEdBQUFBLFVBQUE7RUFLTyxNQUFNTyxXQUFXLEdBQUcsU0FBQUEsQ0FBVU4sU0FBbUIsRUFBVztJQUNsRSxPQUFPLENBQUMsQ0FBQ0EsU0FBUyxDQUFDQyxXQUFXLEVBQUVDLElBQUksRUFBRUssU0FBUyxFQUFFSCxPQUFPLENBQUMsQ0FBQztFQUMzRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFKQUMsUUFBQSxDQUFBQyxXQUFBLEdBQUFBLFdBQUE7RUFLTyxNQUFNRSxLQUFLLEdBQUcsU0FBQUEsQ0FBVVIsU0FBbUIsRUFBVztJQUM1RCxPQUFPLENBQUMsQ0FBQ0EsU0FBUyxDQUFDUSxLQUFLO0VBQ3pCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEFILFFBQUEsQ0FBQUcsS0FBQSxHQUFBQSxLQUFBO0VBTU8sTUFBTUMsYUFBYSxHQUFHLFNBQUFBLENBQVVDLFFBQThCLEVBQUVDLHNCQUFvRCxFQUFXO0lBQ3JJLE1BQU1DLFlBQVksR0FBR0Qsc0JBQXNCLENBQUNFLGVBQWUsRUFBRUMsZ0JBQWdCLEVBQUViLFdBQVcsRUFBRWMsTUFBTSxFQUFFQyxXQUFXO0lBQy9HLE9BQ0NKLFlBQVks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
|
|
336
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0NvbXB1dGVkIiwib1Byb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJDb3JlIiwiQ29tcHV0ZWQiLCJ2YWx1ZU9mIiwiX2V4cG9ydHMiLCJpc0ltbXV0YWJsZSIsIkltbXV0YWJsZSIsImlzS2V5IiwiaXNTZW1hbnRpY0tleSIsInByb3BlcnR5IiwiY29udGV4dERhdGFNb2RlbE9iamVjdCIsInNlbWFudGljS2V5cyIsImNvbnRleHRMb2NhdGlvbiIsInRhcmdldEVudGl0eVR5cGUiLCJDb21tb24iLCJTZW1hbnRpY0tleSIsInNvbWUiLCJrZXkiLCIkdGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiaGFzRGF0ZVR5cGUiLCJpbmNsdWRlcyIsInR5cGUiLCJnZXRMYWJlbCIsIkxhYmVsIiwidG9TdHJpbmciLCJoYXNTZW1hbnRpY09iamVjdCIsIlNlbWFudGljT2JqZWN0SGVscGVyIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIlRpbWV6b25lIiwidW5kZWZpbmVkIiwiZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoIiwicGF0aCIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHkiLCJUZXh0IiwiZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eVBhdGgiLCJFeHRlcm5hbElEIiwiZ2V0QXNzb2NpYXRlZEV4dGVybmFsSWRQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJNZWFzdXJlcyIsIlVuaXQiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiSVNPQ3VycmVuY3kiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJnZXRTdGF0aWNVbml0T3JDdXJyZW5jeSIsInVuaXRPckN1cnJlbmN5IiwiZ2V0U3RhdGljVGltZXpvbmUiLCJzdGF0aWNUaW1lem9uZSIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiaGFzVmFsdWVIZWxwIiwiVmFsdWVMaXN0IiwiVmFsdWVMaXN0UmVmZXJlbmNlcyIsIlZhbHVlTGlzdE1hcHBpbmciLCJWYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnMiLCJoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJoYXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uIiwiVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiIsImhhc1RpbWV6b25lIiwiaXNVbml0IiwiSXNVbml0IiwiaGFzVGV4dCIsImlzSW1hZ2VVUkwiLCJVSSIsIklzSW1hZ2VVUkwiLCJpc0N1cnJlbmN5IiwiSXNDdXJyZW5jeSIsImhhc0N1cnJlbmN5IiwiaGFzVW5pdCIsImlzR3VpZCIsImhhc1N0YXRpY1BlcmNlbnRVbml0IiwiaXNNdWx0aUxpbmVUZXh0IiwicGFyYW1ldGVyIiwiTXVsdGlMaW5lVGV4dCIsImlzVGltZXpvbmUiLCJJc1RpbWV6b25lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJQcm9wZXJ0eUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvblBhcmFtZXRlciwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgU2VtYW50aWNPYmplY3RIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgdGhlIENvcmUuQ29tcHV0ZWQgYW5ub3RhdGlvbiBvciBub3QuXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgY29tcHV0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQ29tcHV0ZWQgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvcmU/LkNvbXB1dGVkPy52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyB0aGUgQ29yZS5JbW11dGFibGUgYW5ub3RhdGlvbiBvciBub3QuXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCdzIGltbXV0YWJsZVxuICovXG5leHBvcnQgY29uc3QgaXNJbW11dGFibGUgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvcmU/LkltbXV0YWJsZT8udmFsdWVPZigpO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIGtleSBvciBub3QuXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCdzIGEga2V5XG4gKi9cbmV4cG9ydCBjb25zdCBpc0tleSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5pc0tleTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSBzZW1hbnRpY0tleSBmb3IgdGhlIGNvbnRleHQgZW50aXR5LlxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdCBUaGUgRGF0YU1vZGVsT2JqZWN0IHRoYXQgaG9sZHMgdGhlIGNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYGlmIGl0J3MgYSBzZW1hbnRpYyBrZXlcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2VtYW50aWNLZXkgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkLCBjb250ZXh0RGF0YU1vZGVsT2JqZWN0OiBEYXRhTW9kZWxPYmplY3RQYXRoPHVua25vd24+KTogYm9vbGVhbiB7XG5cdGNvbnN0IHNlbWFudGljS2V5cyA9IGNvbnRleHREYXRhTW9kZWxPYmplY3QuY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY0tleTtcblx0cmV0dXJuIChcblx0XHRzZW1hbnRpY0tleXM/LnNvbWUoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGtleT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lID09PSBwcm9wZXJ0eT8uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdH0pID8/IGZhbHNlXG5cdCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSBkYXRlIHRpbWUgb3Igbm90LlxuICogQHBhcmFtIG9Qcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIG9mIHR5cGUgZGF0ZSAvIGRhdGV0aW1lIC8gZGF0ZXRpbWVvZmZzZXRcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0RhdGVUeXBlID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIFtcIkVkbS5EYXRlXCIsIFwiRWRtLkRhdGVUaW1lXCIsIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCJdLmluY2x1ZGVzKG9Qcm9wZXJ0eS50eXBlKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGxhYmVsIGFubm90YXRpb24uXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBsYWJlbCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldExhYmVsID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcge1xuXHRyZXR1cm4gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8IFwiXCI7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHNlbWFudGljIG9iamVjdCBkZWZpbmVkIG9yIG5vdC5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgc2VtYW50aWMgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNTZW1hbnRpY09iamVjdCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIFNlbWFudGljT2JqZWN0SGVscGVyLmhhc1NlbWFudGljT2JqZWN0KHByb3BlcnR5KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBwcm9wZXJ0eSBhc3NvY2lhdGVkIHRvIHRoZSBwcm9wZXJ0eSwgaWYgYXBwbGljYWJsZS5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHRpbWV6b25lIHByb3BlcnR5LCBpZiBpdCBleGlzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lKVxuXHRcdD8gKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZS4kdGFyZ2V0IGFzIHVua25vd24gYXMgUHJvcGVydHkpXG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgcHJvcGVydHkgcGF0aCBhc3NvY2lhdGVkIHRvIHRoZSBwcm9wZXJ0eSwgaWYgYXBwbGljYWJsZS5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHRpbWV6b25lIHByb3BlcnR5IHBhdGgsIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZSlcblx0XHQ/IG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU/LnBhdGhcblx0XHQ6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhc3NvY2lhdGVkIHRleHQgcHJvcGVydHkgZm9yIGEgcHJvcGVydHksIGlmIGl0IGV4aXN0cy5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHRleHQgcHJvcGVydHksIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0KVxuXHRcdD8gKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LiR0YXJnZXQgYXMgdW5rbm93biBhcyBQcm9wZXJ0eSlcblx0XHQ6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBDb21tb24uRXh0ZXJuYWxJRCBwcm9wZXJ0eSBwYXRoIGlmIGl0IGV4aXN0cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgQ29tbW9uLkV4dGVybmFsSUQgcHJvcGVydHkgcGF0aCBvciB1bmRlZmluZWQgaWYgaXQgZG9lcyBub3QgZXhpc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHlQYXRoID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdC8vcmV0dXJuIHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRD8ucGF0aDtcblx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5Py5hbm5vdGF0aW9ucy5Db21tb24/LkV4dGVybmFsSUQpID8gcHJvcGVydHk/LmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRC5wYXRoIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFzc29jaWF0ZWQgZXh0ZXJuYWxJRCBwcm9wZXJ0eSBmb3IgdGhhdCBwcm9wZXJ0eSwgaWYgaXQgZXhpc3RzLlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBleHRlcm5hbElEIHByb3BlcnR5LCBpZiBpdCBleGlzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRFeHRlcm5hbElkUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LkV4dGVybmFsSUQpXG5cdFx0PyAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRXh0ZXJuYWxJRC4kdGFyZ2V0IGFzIHVua25vd24gYXMgUHJvcGVydHkpXG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdW5pdCBwcm9wZXJ0eSBhc3NvY2lhdGVkIHRvIHRoZSBwcm9wZXJ0eSwgaWYgYXBwbGljYWJsZS5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHVuaXQgcHJvcGVydHksIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkKTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gb1Byb3BlcnR5ICYmIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uVW5pdClcblx0XHQ/IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uVW5pdC4kdGFyZ2V0XG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGggPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCkgPyBvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0LnBhdGggOiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXNzb2NpYXRlZCBjdXJyZW5jeSBwcm9wZXJ0eSBmb3IgdGhhdCBwcm9wZXJ0eSBpZiBpdCBleGlzdHMuXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSB1bml0IHByb3BlcnR5LCBpZiBpdCBleGlzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5ID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBvUHJvcGVydHkgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeSlcblx0XHQ/IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kuJHRhcmdldFxuXHRcdDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5UGF0aCA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSlcblx0XHQ/IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5LnBhdGhcblx0XHQ6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhc3NvY2lhdGVkIHN0YXRpYyBjdXJyZW5jeSBvciB1bml0IGZvciBhIGdpdmVuIHByb3BlcnR5IGlmIGl0IGV4aXN0cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgdW5pdCBvciBjdXJyZW5jeSBzdGF0aWMgdmFsdWUsIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0U3RhdGljVW5pdE9yQ3VycmVuY3kgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdW5pdE9yQ3VycmVuY3kgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5ID8/IHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0aWYgKCF1bml0T3JDdXJyZW5jeSB8fCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0T3JDdXJyZW5jeSkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBgJHt1bml0T3JDdXJyZW5jeX1gO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFzc29jaWF0ZWQgdGltZXpvbmUgc3RhdGljIHRleHQgYSBnaXZlbiBwcm9wZXJ0eSBpZiBpdCBleGlzdHMuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHRpbWV6b25lIHN0YXRpYyB2YWx1ZSwgaWYgaXQgZXhpc3RzXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFN0YXRpY1RpbWV6b25lID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHN0YXRpY1RpbWV6b25lID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdGlmICghc3RhdGljVGltZXpvbmUgfHwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oc3RhdGljVGltZXpvbmUpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gYCR7c3RhdGljVGltZXpvbmV9YDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBDb21tb24uVGV4dCBwcm9wZXJ0eSBwYXRoIGlmIGl0IGV4aXN0cy5cbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIENvbW1vbi5UZXh0IHByb3BlcnR5IHBhdGggb3IgdW5kZWZpbmVkIGlmIGl0IGRvZXMgbm90IGV4aXN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5UGF0aCA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCkgPyBvUHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQucGF0aCA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgdmFsdWUgaGVscCBhbm5vdGF0aW9uIGRlZmluZWQgb3Igbm90LlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlSGVscCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHQhIXByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdCB8fFxuXHRcdCEhcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVmZXJlbmNlcyB8fFxuXHRcdCEhcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0TWFwcGluZyB8fFxuXHRcdCEhcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIC8vIENvdmVycyBjYXNlcyB3aGVyZSBjb250ZXh0IGRlcGVuZGVudCBhbm5vdGF0aW9uIGFyZSBwcmVzZW50XG5cdCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHZhbHVlIGhlbHAgd2l0aCBmaXhlZCB2YWx1ZSBhbm5vdGF0aW9uIGRlZmluZWQgb3Igbm90LlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgdmFsdWUgaGVscFxuICovXG5leHBvcnQgY29uc3QgaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgdmFsdWUgaGVscCBmb3IgdmFsaWRhdGlvbiBhbm5vdGF0aW9uIGRlZmluZWQgb3Igbm90LlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgdmFsdWUgaGVscFxuICovXG5leHBvcnQgY29uc3QgaGFzVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgQWN0aW9uUGFyYW1ldGVyKTogYm9vbGVhbiB7XG5cdHJldHVybiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiAhPT0gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1RpbWV6b25lID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZSAhPT0gdW5kZWZpbmVkO1xufTtcbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEgdW5pdCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgdW5pdFxuICovXG5leHBvcnQgY29uc3QgaXNVbml0ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc1VuaXQ/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHRleHQgcHJvcGVydHkuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIFRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1RleHQgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0ICE9PSB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYW4gSW1hZ2VVUkwuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhbiBJbWFnZVVSTFxuICovXG5leHBvcnQgY29uc3QgaXNJbWFnZVVSTCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuICEhcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5Jc0ltYWdlVVJMPy52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIGN1cnJlbmN5IHByb3BlcnR5LlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgY3VycmVuY3lcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQ3VycmVuY3kgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNDdXJyZW5jeT8udmFsdWVPZigpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgY3VycmVuY3kgcHJvcGVydHkuXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgYSBjdXJyZW5jeVxuICovXG5leHBvcnQgY29uc3QgaGFzQ3VycmVuY3kgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5ICE9PSB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSB1bml0IHByb3BlcnR5LlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgdW5pdFxuICovXG5cbmV4cG9ydCBjb25zdCBoYXNVbml0ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0ICE9PSB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSB0eXBlIGhhcyBFZG0uR3VpZC5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgR3VpZFxuICovXG5leHBvcnQgY29uc3QgaXNHdWlkID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uR3VpZFwiO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHByb3BlcnR5IGhhcyBhIHN0YXRpYyB1bml0IHRoYXQgaXMgJS5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGFubm90YXRlZCB3aXRoIHRoZSBzdGF0aWMgdW5pdCAlXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNTdGF0aWNQZXJjZW50VW5pdCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ/LnRvU3RyaW5nKCkgPT09IFwiJVwiO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgZm9ybSBlbGVtZW50IG9yIGFjdGlvbiBwYXJhbWV0ZXIgc3VwcG9ydHMgbXVsdGkgbGluZSB0ZXh0IGlucHV0LlxuICogQHBhcmFtIHBhcmFtZXRlciBQcm9wZXJ0eSBvciBBY3Rpb25QYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyBCb29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc011bHRpTGluZVRleHQocGFyYW1ldGVyOiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcGFyYW1ldGVyPy5hbm5vdGF0aW9ucz8uVUk/Lk11bHRpTGluZVRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSB0aW1lem9uZSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgdGltZXpvbmUgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGltZXpvbmUocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIXByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmU/LnZhbHVlT2YoKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0VBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLE1BQU1BLFVBQVUsR0FBRyxTQUFBQSxDQUFVQyxTQUFtQixFQUFXO0lBQ2pFLE9BQU8sQ0FBQyxDQUFDQSxTQUFTLENBQUNDLFdBQVcsRUFBRUMsSUFBSSxFQUFFQyxRQUFRLEVBQUVDLE9BQU8sQ0FBQyxDQUFDO0VBQzFELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBQyxRQUFBLENBQUFOLFVBQUEsR0FBQUEsVUFBQTtFQUtPLE1BQU1PLFdBQVcsR0FBRyxTQUFBQSxDQUFVTixTQUFtQixFQUFXO0lBQ2xFLE9BQU8sQ0FBQyxDQUFDQSxTQUFTLENBQUNDLFdBQVcsRUFBRUMsSUFBSSxFQUFFSyxTQUFTLEVBQUVILE9BQU8sQ0FBQyxDQUFDO0VBQzNELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBQyxRQUFBLENBQUFDLFdBQUEsR0FBQUEsV0FBQTtFQUtPLE1BQU1FLEtBQUssR0FBRyxTQUFBQSxDQUFVUixTQUFtQixFQUFXO0lBQzVELE9BQU8sQ0FBQyxDQUFDQSxTQUFTLENBQUNRLEtBQUs7RUFDekIsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQUgsUUFBQSxDQUFBRyxLQUFBLEdBQUFBLEtBQUE7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
|
|
@@ -203,7 +203,8 @@ export const hasValueHelp = function (property: Property | ActionParameter): boo
|
|
|
203
203
|
return (
|
|
204
204
|
!!property.annotations?.Common?.ValueList ||
|
|
205
205
|
!!property.annotations?.Common?.ValueListReferences ||
|
|
206
|
-
!!property.annotations?.Common?.ValueListMapping
|
|
206
|
+
!!property.annotations?.Common?.ValueListMapping ||
|
|
207
|
+
!!property.annotations?.Common?.ValueListRelevantQualifiers // Covers cases where context dependent annotation are present
|
|
207
208
|
);
|
|
208
209
|
};
|
|
209
210
|
|