@sapui5/sap.fe.core 1.124.5 → 1.124.6
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/controllerextensions/EditFlow.js +4 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +5 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +19 -11
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +29 -13
- package/src/sap/fe/core/converters/controls/Common/Table.js +10 -4
- package/src/sap/fe/core/converters/controls/Common/Table.ts +5 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +10 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +9 -2
- package/src/sap/fe/core/services/ShellServicesFactory.js +16 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
|
@@ -204,6 +204,9 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
204
204
|
_proto.getExtensionService = function getExtensionService() {
|
|
205
205
|
return {};
|
|
206
206
|
};
|
|
207
|
+
_proto.getInframeUrl = async function getInframeUrl() {
|
|
208
|
+
return Promise.resolve("");
|
|
209
|
+
};
|
|
207
210
|
return ShellServiceMock;
|
|
208
211
|
}(Service);
|
|
209
212
|
/**
|
|
@@ -356,6 +359,18 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
356
359
|
*/;
|
|
357
360
|
_proto2.getShellContainer = function getShellContainer() {
|
|
358
361
|
return this.oShellContainer;
|
|
362
|
+
};
|
|
363
|
+
_proto2.getInframeUrl = async function getInframeUrl() {
|
|
364
|
+
const ushellContainer = this.getShellContainer();
|
|
365
|
+
let appUrl;
|
|
366
|
+
if (ushellContainer !== null && ushellContainer !== void 0 && ushellContainer.inAppRuntime()) {
|
|
367
|
+
try {
|
|
368
|
+
appUrl = await ushellContainer.getFLPUrlAsync(true);
|
|
369
|
+
} catch (error) {
|
|
370
|
+
Log.error("Error while getting the FLP URL", error);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return appUrl;
|
|
359
374
|
}
|
|
360
375
|
|
|
361
376
|
/**
|
|
@@ -810,4 +825,4 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
810
825
|
}(ServiceFactory);
|
|
811
826
|
return ShellServicesFactory;
|
|
812
827
|
}, false);
|
|
813
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaGVsbFNlcnZpY2VNb2NrIiwiaW5pdCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnN0YW5jZVR5cGUiLCJnZXRMaW5rcyIsIl9fZmV0Y2hTZW1hbnRpY09iamVjdCIsImdldExpbmtzV2l0aENhY2hlIiwidG9FeHRlcm5hbCIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInVuZGVmaW5lZCIsImlzSmFtQWN0aXZlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJnZXRIcmVmIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImdldEFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZSIsImNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYyIsIm5hdmlnYXRlIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwiaXNJbml0aWFsTmF2aWdhdGlvbiIsImV4cGFuZENvbXBhY3RIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJzcGxpdEhhc2giLCJzSGFzaCIsInJlZ2V4IiwiZXhlYyIsInNoZWxsUGFydCIsImFwcFNwZWNpZmljUm91dGUiLCJsZW5ndGgiLCJjb25zdHJ1Y3RTaGVsbEhhc2giLCJzZXREaXJ0eUZsYWciLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJjcmVhdGVSZW5kZXJlciIsImdldFVzZXIiLCJnZXRVc2VySW5pdGlhbHMiLCJoYXNVU2hlbGwiLCJyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJ1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsInNldEJhY2tOYXZpZ2F0aW9uIiwic2V0SGllcmFyY2h5Iiwic2V0VGl0bGUiLCJnZXRDb250ZW50RGVuc2l0eSIsImRvY3VtZW50IiwiYm9keSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiZ2V0UHJpbWFyeUludGVudCIsIndhaXRGb3JQbHVnaW5zTG9hZCIsImdldFRpdGxlIiwiZ2V0UGVyc29uYWxpemVyIiwiX3BlcnNJZCIsIl9zY29wZSIsIl9jb21wb25lbnQiLCJnZXRQZXJzRGF0YSIsImhpc3RvcnlFbmFibGVkIiwic3VnZ2VzdGlvbnNFbmFibGVkIiwiYXBwcyIsInNldFBlcnNEYXRhIiwiZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyIiwiX2tleSIsImdldFNoZWxsQ29uZmlnIiwiZ2V0UmVnaXN0ZXJlZFBsdWdpbnMiLCJBcHBXYXJtdXAiLCJSZW5kZXJlckV4dGVuc2lvbnMiLCJVc2VyRGVmYXVsdHMiLCJVc2VySW1hZ2UiLCJpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCIsInBhcnNlUGFyYW1ldGVycyIsImdldEV4dGVuc2lvblNlcnZpY2UiLCJTZXJ2aWNlIiwiU2hlbGxTZXJ2aWNlcyIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9Db21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9TaGVsbENvbnRhaW5lciIsInNldHRpbmdzIiwic2hlbGxDb250YWluZXIiLCJsaW5rc0NhY2hlIiwiZm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZSIsIm9BcmdzIiwiYUNhY2hlZFNlbWFudGljT2JqZWN0cyIsImFOb25DYWNoZWRTZW1hbnRpY09iamVjdHMiLCJsaW5rRmlsdGVyIiwic2VtYW50aWNPYmplY3QiLCJwdXNoIiwibGlua3MiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwib2xkQXJncyIsIm5ld0FyZ3MiLCJjYWNoZWRMaW5rcyIsInJlamVjdCIsInJlc29sdmVGbiIsInJlamVjdEZuIiwibmF2aWdhdGlvblNlcnZpY2VQIiwiZ2V0U2VydmljZUFzeW5jIiwidXNlckluZm9TZXJ2aWNlUCIsIm9VcmxQYXJzaW5nU2VydmljZVByb21pc2UiLCJvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UiLCJvU2hlbGxQbHVnaW5NYW5hZ2VyUHJvbWlzZSIsIm9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlIiwib1NoZWxsVUlTZXJ2aWNlUHJvbWlzZSIsImdldFNlcnZpY2UiLCJvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZSIsImFsbCIsInRoZW4iLCJuYXZpZ2F0aW9uU2VydmljZSIsInVzZXJJbmZvU2VydmljZSIsIm9VcmxQYXJzaW5nU2VydmljZSIsIm9TaGVsbE5hdmlnYXRpb24iLCJvU2hlbGxVSVNlcnZpY2UiLCJvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlIiwib1NoZWxsUGx1Z2luTWFuYWdlciIsIm9TaGVsbEV4dGVuc2lvblNlcnZpY2UiLCJhcHBsaWNhdGlvbk5hdmlnYXRpb24iLCJ1cmxQYXJzaW5nU2VydmljZSIsInNoZWxsTmF2aWdhdGlvbiIsInNoZWxsVUlTZXJ2aWNlIiwic2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlIiwic2hlbGxQbHVnaW5NYW5hZ2VyIiwiZXh0ZW5zaW9uU2VydmljZSIsImNhdGNoIiwiZ2V0U2VtYW50aWNPYmplY3RzIiwib0NhY2hlUmVzdWx0cyIsImFMaW5rcyIsIm9TZW1hbnRpY09iamVjdHNMaW5rcyIsImkiLCJhc3NpZ24iLCJhTWVyZ2VkTGlua3MiLCJqIiwiaXRlbSIsImdldFNoZWxsQ29udGFpbmVyIiwib05hdkFyZ3VtZW50c0FyciIsIm9UYXJnZXQiLCJzQXBwU3RhdGVLZXkiLCJhVGFyZ2V0cyIsInNIYXNoRnJhZ21lbnQiLCJnZXRTaGVsbEhhc2giLCJmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zIiwiaGFzT3duUHJvcGVydHkiLCJNQU5BR0VfRkVfQ0FDSEVTIiwiZW5hYmxlZCIsIm9OZXdTaGVsbEhhc2giLCJiRGlydHkiLCJmbkRpcnR5U3RhdGVQcm92aWRlciIsImdldEluaXRpYWxzIiwiZm5OYXZGaWx0ZXIiLCJmbkNhbGxCYWNrIiwiYUhpZXJhcmNoeUxldmVscyIsInNUaXRsZSIsInNTZW1hbnRpY09iamVjdCIsIm1QYXJhbWV0ZXJzIiwicHJpbWFyeUludGVudCIsIkFycmF5IiwiaXNBcnJheSIsImdldFBsdWdpbkxvYWRpbmdQcm9taXNlIiwiZmFpbCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwicGVyc0lkIiwic2NvcGUiLCJjb21wb25lbnQiLCJrZXlDYXRlZ29yeSIsImNvbnN0YW50cyIsIkZJWEVEX0tFWSIsIndyaXRlRnJlcXVlbmN5IiwiTE9XIiwiY2xpZW50U3RvcmFnZUFsbG93ZWQiLCJ2YWxpZGl0eSIsIkluZmluaXR5Iiwia2V5IiwiZGVsZXRlQ29udGFpbmVyIiwidXJsIiwiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsInNlcnZpY2VDb250ZXh0Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwic2hlbGxTZXJ2aWNlIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsInNlbWFudGljT2JqZWN0cyIsInNldFByb3BlcnR5IiwiU2VydmljZUZhY3RvcnkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlNoZWxsU2VydmljZXNGYWN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250YWluZXIgZnJvbSBcInNhcC91c2hlbGwvQ29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBFeHRlbnNpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvRXh0ZW5zaW9uXCI7XG5pbXBvcnQgdHlwZSBOYXZpZ2F0aW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgTGluaywgTGlua0ZpbHRlciwgVGFyZ2V0IH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgUGVyc29uYWxpemF0aW9uVjIgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvUGVyc29uYWxpemF0aW9uVjJcIjtcbmltcG9ydCB7IHR5cGUgUGVyc0lkLCB0eXBlIFNjb3BlIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvUGVyc29uYWxpemF0aW9uVjJcIjtcbmltcG9ydCB0eXBlIFNoZWxsTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9TaGVsbE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIFVSTFBhcnNpbmcgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVVJMUGFyc2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRIYXNoIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVVJMUGFyc2luZ1wiO1xuaW1wb3J0IHR5cGUgVXNlckluZm8gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVXNlckluZm9cIjtcbmltcG9ydCB0eXBlIFNoZWxsVUlTZXJ2aWNlIGZyb20gXCJzYXAvdXNoZWxsL3VpNXNlcnZpY2UvU2hlbGxVSVNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIFN0YXJ0dXBBcHBTdGF0ZSA9IHtcblx0Z2V0RGF0YSgpOiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudD86IHtcblx0XHRcdFNlbGVjdE9wdGlvbnM/OiB7XG5cdFx0XHRcdFByb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdFx0XHRSYW5nZXM6IHtcblx0XHRcdFx0XHRPcHRpb246IHN0cmluZztcblx0XHRcdFx0XHRTaWduOiBzdHJpbmc7XG5cdFx0XHRcdFx0TG93OiBzdHJpbmc7XG5cdFx0XHRcdH1bXTtcblx0XHRcdH1bXTtcblx0XHR9O1xuXHR9O1xufTtcblxuLy8gc2VlOiBzYXBcXHVzaGVsbFxcc2VydmljZXNcXF9QZXJzb25hbGl6YXRpb25cXGNvbnN0YW50cy5qc1xuZXhwb3J0IHR5cGUgUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cyA9IFBlcnNvbmFsaXphdGlvblYyICYge1xuXHRjb25zdGFudHM6IHtcblx0XHRrZXlDYXRlZ29yeToge1xuXHRcdFx0RklYRURfS0VZOiBzdHJpbmc7XG5cdFx0XHRHRU5FUkFURURfS0VZOiBzdHJpbmc7XG5cdFx0fTtcblx0XHR3cml0ZUZyZXF1ZW5jeToge1xuXHRcdFx0SElHSDogc3RyaW5nO1xuXHRcdFx0TE9XOiBzdHJpbmc7XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIFBlcnNvbmFsaXplclR5cGUgPSB7XG5cdGdldFBlcnNEYXRhOiAoKSA9PiBQcm9taXNlPG9iamVjdD47XG5cdHNldFBlcnNEYXRhOiAocGVyc0RhdGE6IG9iamVjdCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIFNoZWxsQ29uZmlnVHlwZSA9IHtcblx0YXBwczoge1xuXHRcdGlucHV0RmllbGRIaXN0b3J5OiB7XG5cdFx0XHRlbmFibGVkOiBib29sZWFuO1xuXHRcdH07XG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBGTFBQbHVnaW4gPSB7XG5cdGNvbXBvbmVudDogc3RyaW5nO1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHR1cmw6IHN0cmluZztcblx0Y29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlID0ge1xuXHRBcHBXYXJtdXA6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcblx0UmVuZGVyZXJFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBGTFBQbHVnaW4+IHwge307XG5cdFVzZXJEZWZhdWx0czogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xuXHRVc2VySW1hZ2U6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcbn07XG5cbi8qKlxuICogQGludGVyZmFjZSBJU2hlbGxTZXJ2aWNlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzIHtcblx0aW5pdFByb21pc2U6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXHRpbnN0YW5jZVR5cGU6IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RzOiBzdHJpbmdbXTtcblxuXHRnZXRMaW5rcyhvQXJncz86IE9taXQ8TGlua0ZpbHRlciwgXCJ1aTVDb21wb25lbnRcIj5bXSk6IFByb21pc2U8TGlua1tdW10+O1xuXG5cdGdldExpbmtzV2l0aENhY2hlKG9BcmdzPzogT21pdDxMaW5rRmlsdGVyLCBcInVpNUNvbXBvbmVudFwiPltdKTogUHJvbWlzZTxMaW5rW11bXT47XG5cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpOiB2b2lkO1xuXG5cdGdldFN0YXJ0dXBBcHBTdGF0ZShvQXJnczogb2JqZWN0KTogUHJvbWlzZTx1bmRlZmluZWQgfCBTdGFydHVwQXBwU3RhdGU+O1xuXG5cdGJhY2tUb1ByZXZpb3VzQXBwKCk6IHZvaWQ7XG5cblx0aHJlZkZvckV4dGVybmFsKG9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldEhyZWYob1RhcmdldDogb2JqZWN0LCBvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj47XG5cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBvYmplY3Q7XG5cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHVua25vd24+O1xuXG5cdG5hdmlnYXRlKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkPjtcblxuXHRpc05hdmlnYXRpb25TdXBwb3J0ZWQob05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudD86IG9iamVjdCk6IFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPjtcblxuXHRpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj47XG5cblx0ZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldEhhc2goKTogc3RyaW5nO1xuXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpOiBQYXJzZWRIYXNoO1xuXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogUmV0dXJuVHlwZTxVUkxQYXJzaW5nW1wic3BsaXRIYXNoXCJdPjtcblxuXHRjb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaDogb2JqZWN0KTogc3RyaW5nO1xuXG5cdHNldERpcnR5RmxhZyhiRGlydHk6IGJvb2xlYW4pOiB2b2lkO1xuXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdGNyZWF0ZVJlbmRlcmVyKCk6IG9iamVjdDtcblxuXHRnZXRVc2VyKCk6IFVzZXJJbmZvO1xuXHRnZXRVc2VySW5pdGlhbHMoKTogc3RyaW5nO1xuXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuO1xuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0c2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjaz86IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRzZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0Pik6IHZvaWQ7XG5cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB2b2lkO1xuXG5cdGlzSmFtQWN0aXZlKCk6IGJvb2xlYW47XG5cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nO1xuXG5cdGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxMaW5rPjtcblxuXHR3YWl0Rm9yUGx1Z2luc0xvYWQoKTogUHJvbWlzZTxib29sZWFuPjtcblxuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGU7XG5cblx0aXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQoKTogYm9vbGVhbjtcblxuXHRnZXRUaXRsZSgpOiBzdHJpbmc7XG5cblx0Z2V0UGVyc29uYWxpemVyKHBlcnNJZDogUGVyc0lkLCBzY29wZTogU2NvcGUsIGNvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8UGVyc29uYWxpemVyVHlwZT47XG5cblx0ZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKGtleTogc3RyaW5nLCBzY29wZT86IG9iamVjdCk6IFByb21pc2U8dm9pZD47XG5cblx0Z2V0U2hlbGxDb25maWcoKTogU2hlbGxDb25maWdUeXBlO1xuXG5cdHBhcnNlUGFyYW1ldGVycyh1cmw6IHN0cmluZyk6IFJldHVyblR5cGU8VVJMUGFyc2luZ1tcInBhcnNlUGFyYW1ldGVyc1wiXT47XG5cblx0Z2V0RXh0ZW5zaW9uU2VydmljZSgpOiBFeHRlbnNpb247XG59XG5cbi8qKlxuICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2hlbGxTZXJ2aWNlIGZvciBPcGVuRkVcbiAqXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZU1vY2sgZXh0ZW5kcyBTZXJ2aWNlPFNoZWxsU2VydmljZXNTZXR0aW5ncz4gaW1wbGVtZW50cyBJU2hlbGxTZXJ2aWNlcyB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cblx0aW5zdGFuY2VUeXBlITogc3RyaW5nO1xuXG5cdHNlbWFudGljT2JqZWN0cyE6IHN0cmluZ1tdO1xuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzIGFzIElTaGVsbFNlcnZpY2VzKTtcblx0XHR0aGlzLmluc3RhbmNlVHlwZSA9IFwibW9ja1wiO1xuXHR9XG5cblx0YXN5bmMgZ2V0TGlua3MoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHRhc3luYyBfX2ZldGNoU2VtYW50aWNPYmplY3QoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgZ2V0TGlua3NXaXRoQ2FjaGUoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHR0b0V4dGVybmFsKC8qb05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0Ki8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRhc3luYyBnZXRTdGFydHVwQXBwU3RhdGUoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPFN0YXJ0dXBBcHBTdGF0ZSB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGlzSmFtQWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGJhY2tUb1ByZXZpb3VzQXBwKCk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdGFzeW5jIGhyZWZGb3JFeHRlcm5hbCgvKm9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRhc3luYyBnZXRIcmVmKC8qb0FyZ3M/OiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QsIGJBc3luYz86IGJvb2xlYW4qLyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0fVxuXG5cdGdldEhhc2goKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWY7XG5cdH1cblxuXHRhc3luYyBnZXRBcHBTdGF0ZSgvKm9Db21wb25lbnQ6IG9iamVjdCwgc0FwcFN0YXRlS2V5OiBzdHJpbmcqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgY3JlYXRlRW1wdHlBcHBTdGF0ZSgvKm9Db21wb25lbnQ6IG9iamVjdCovKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRhc3luYyBjcmVhdGVFbXB0eUFwcFN0YXRlQXN5bmMoLypvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgbmF2aWdhdGUoLypvVGFyZ2V0OiBUYXJnZXQsb0NvbXBvbmVudD86IENvbXBvbmVudCovKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRhc3luYyBpc05hdmlnYXRpb25TdXBwb3J0ZWQoLypvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHRhc3luYyBpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHR9XG5cblx0YXN5bmMgZXhwYW5kQ29tcGFjdEhhc2goLypzSGFzaEZyYWdtZW50OiBzdHJpbmcqLyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0fVxuXG5cdHBhcnNlU2hlbGxIYXNoKC8qc0hhc2g6IHN0cmluZyovKTogUGFyc2VkSGFzaCB7XG5cdFx0cmV0dXJuIHt9IGFzIHVua25vd24gYXMgUGFyc2VkSGFzaDtcblx0fVxuXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogUmV0dXJuVHlwZTxVUkxQYXJzaW5nW1wic3BsaXRIYXNoXCJdPiB7XG5cdFx0LyoqXG5cdFx0ICogRm9yIGFuIEFwcGxpY2F0aW9uIHdpdGhvdXQgU2hlbGwsIHRoZSBoYXNoIGlzIHNpbWlsYXIgdG8gOiAjL1NhbGVzT3JkZXJNYW5hZ2UoMTExMTExMTEtYWFhYS1iYmJiLWNjY2MtZGRkZGVlZWVmZmZmKVxuXHRcdCAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA6XG5cdFx0ICoge1xuXHRcdFx0c2hlbGxQYXJ0OiBcIlwiLFxuXHRcdFx0YXBwU3BlY2lmaWNSb3V0ZTogXCJTYWxlc09yZGVyTWFuYWdlKDExMTExMTExLWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcIlxuXHRcdH1cblx0XHQgKi9cblx0XHRjb25zdCByZWdleCA9IC8jW14vXSpcXC8oLiopLy5leGVjKHNIYXNoKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2hlbGxQYXJ0OiBcIlwiLFxuXHRcdFx0YXBwU3BlY2lmaWNSb3V0ZTogcmVnZXg/Lmxlbmd0aCA9PT0gMiA/IHJlZ2V4WzFdIDogXCJcIlxuXHRcdH07XG5cdH1cblxuXHRjb25zdHJ1Y3RTaGVsbEhhc2goLypvTmV3U2hlbGxIYXNoOiBvYmplY3QqLyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRzZXREaXJ0eUZsYWcoLypiRGlydHk6IGJvb2xlYW4qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKC8qZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKC8qZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRjcmVhdGVSZW5kZXJlcigpOiBvYmplY3Qge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldFVzZXIoKTogVXNlckluZm8ge1xuXHRcdHJldHVybiB7fSBhcyBVc2VySW5mbztcblx0fVxuXG5cdGdldFVzZXJJbml0aWFscygpOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0aGFzVVNoZWxsKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcigvKmZuTmF2RmlsdGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0dW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoLypmbk5hdkZpbHRlcjogRnVuY3Rpb24qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdHNldEJhY2tOYXZpZ2F0aW9uKC8qZm5DYWxsQmFjaz86IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRzZXRIaWVyYXJjaHkoLyphSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+Ki8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRzZXRUaXRsZSgvKnNUaXRsZTogc3RyaW5nKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdC8vIGluIGNhc2UgdGhlcmUgaXMgbm8gc2hlbGwgd2UgcHJvYmFibHkgbmVlZCB0byBsb29rIGF0IHRoZSBjbGFzc2VzIGJlaW5nIGRlZmluZWQgb24gdGhlIGJvZHlcblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYXBVaVNpemVDb3p5XCIpKSB7XG5cdFx0XHRyZXR1cm4gXCJjb3p5XCI7XG5cdFx0fSBlbHNlIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInNhcFVpU2l6ZUNvbXBhY3RcIikpIHtcblx0XHRcdHJldHVybiBcImNvbXBhY3RcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgZ2V0UHJpbWFyeUludGVudCgvKnNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCovKTogUHJvbWlzZTxMaW5rPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBMaW5rKTtcblx0fVxuXG5cdGFzeW5jIHdhaXRGb3JQbHVnaW5zTG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9XG5cblx0Z2V0VGl0bGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdGFzeW5jIGdldFBlcnNvbmFsaXplcihfcGVyc0lkOiBQZXJzSWQsIF9zY29wZTogU2NvcGUsIF9jb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdGdldFBlcnNEYXRhOiBhc3luYyAoKSA9PlxuXHRcdFx0XHRQcm9taXNlLnJlc29sdmUoe1xuXHRcdFx0XHRcdGhpc3RvcnlFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRzdWdnZXN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdGFwcHM6IHt9XG5cdFx0XHRcdH0pLFxuXHRcdFx0c2V0UGVyc0RhdGE6ICgpID0+IHt9XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoX2tleTogc3RyaW5nLCBfc2NvcGU/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRnZXRTaGVsbENvbmZpZygpOiBTaGVsbENvbmZpZ1R5cGUge1xuXHRcdHJldHVybiB7fSBhcyBTaGVsbENvbmZpZ1R5cGU7XG5cdH1cblxuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRBcHBXYXJtdXA6IHt9LFxuXHRcdFx0UmVuZGVyZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdFVzZXJEZWZhdWx0czoge30sXG5cdFx0XHRVc2VySW1hZ2U6IHt9XG5cdFx0fTtcblx0fVxuXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHBhcnNlUGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uIHtcblx0XHRyZXR1cm4ge30gYXMgRXh0ZW5zaW9uO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgU2hlbGxTZXJ2aWNlc1NldHRpbmdzXG4gKi9cbmV4cG9ydCB0eXBlIFNoZWxsU2VydmljZXNTZXR0aW5ncyA9IHtcblx0c2hlbGxDb250YWluZXI/OiBDb250YWluZXI7XG59O1xuXG50eXBlIFNoZWxsUGx1Z2luTWFuYWdlciA9IHtcblx0Z2V0UGx1Z2luTG9hZGluZ1Byb21pc2UoY2F0ZWdvcnk6IHN0cmluZyk6IGpRdWVyeS5Qcm9taXNlO1xuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGU7XG59O1xuXG50eXBlIFByaXZhdGVTaGVsbFVzZXIgPSB7XG5cdGdldEluaXRpYWxzKCk6IHN0cmluZztcblx0aXNKYW1BY3RpdmUoKTogYm9vbGVhbjtcblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBCYXNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGVsbFNlcnZpY2VzXG4gKlxuICovXG5jbGFzcyBTaGVsbFNlcnZpY2VzIGV4dGVuZHMgU2VydmljZTxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+PiBpbXBsZW1lbnRzIElTaGVsbFNlcnZpY2VzIHtcblx0cmVzb2x2ZUZuITogRnVuY3Rpb247XG5cblx0cmVqZWN0Rm4hOiAoKSA9PiB2b2lkO1xuXG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cblx0YXBwbGljYXRpb25OYXZpZ2F0aW9uITogTmF2aWdhdGlvbjtcblxuXHR1c2VySW5mb1NlcnZpY2UhOiBVc2VySW5mbztcblxuXHR1cmxQYXJzaW5nU2VydmljZSE6IFVSTFBhcnNpbmc7XG5cblx0c2hlbGxOYXZpZ2F0aW9uITogU2hlbGxOYXZpZ2F0aW9uO1xuXG5cdHNoZWxsUGx1Z2luTWFuYWdlciE6IFNoZWxsUGx1Z2luTWFuYWdlcjtcblxuXHRvU2hlbGxDb250YWluZXIhOiBDb250YWluZXIgJiB7IGdldFVzZXI6ICgpID0+IFByaXZhdGVTaGVsbFVzZXIgfTtcblxuXHRzaGVsbFVJU2VydmljZSE6IFNoZWxsVUlTZXJ2aWNlO1xuXG5cdHNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSE6IFBlcnNvbmFsaXphdGlvbldpdGhDb25zdGFudHM7XG5cblx0aW5zdGFuY2VUeXBlITogc3RyaW5nO1xuXG5cdGxpbmtzQ2FjaGUhOiBSZWNvcmQ8c3RyaW5nLCB7IGxpbmtzOiBMaW5rW10gfT47XG5cblx0c2VtYW50aWNPYmplY3RzITogc3RyaW5nW107XG5cblx0Zm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZSE6IEZ1bmN0aW9uO1xuXG5cdGV4dGVuc2lvblNlcnZpY2UhOiBFeHRlbnNpb247XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdCBhcyBDb21wb25lbnQ7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIgPSBvQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lcjtcblx0XHR0aGlzLmluc3RhbmNlVHlwZSA9IFwicmVhbFwiO1xuXHRcdHRoaXMubGlua3NDYWNoZSA9IHt9O1xuXHRcdHRoaXMuZm5GaW5kU2VtYW50aWNPYmplY3RzSW5DYWNoZSA9IGZ1bmN0aW9uIChvQXJnczogTGlua0ZpbHRlcltdKTogb2JqZWN0IHtcblx0XHRcdGNvbnN0IGFDYWNoZWRTZW1hbnRpY09iamVjdHM6IExpbmtbXVtdID0gW107XG5cdFx0XHRjb25zdCBhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzOiBMaW5rRmlsdGVyW10gPSBbXTtcblx0XHRcdGZvciAoY29uc3QgbGlua0ZpbHRlciBvZiBvQXJncykge1xuXHRcdFx0XHRpZiAoISFsaW5rRmlsdGVyICYmICEhbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLmxpbmtzQ2FjaGVbbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdF0pIHtcblx0XHRcdFx0XHRcdGFDYWNoZWRTZW1hbnRpY09iamVjdHMucHVzaCh0aGlzLmxpbmtzQ2FjaGVbbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGxpbmtGaWx0ZXIsIFwibGlua3NcIiwge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZTogdGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdLmxpbmtzXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cy5wdXNoKGxpbmtGaWx0ZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgb2xkQXJnczogb0FyZ3MsIG5ld0FyZ3M6IGFOb25DYWNoZWRTZW1hbnRpY09iamVjdHMsIGNhY2hlZExpbmtzOiBhQ2FjaGVkU2VtYW50aWNPYmplY3RzIH07XG5cdFx0fTtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5yZXNvbHZlRm4gPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5yZWplY3RGbiA9IHJlamVjdDtcblx0XHR9KTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uU2VydmljZVAgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJOYXZpZ2F0aW9uXCIpO1xuXHRcdGNvbnN0IHVzZXJJbmZvU2VydmljZVAgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJVc2VySW5mb1wiKTtcblx0XHRjb25zdCBvVXJsUGFyc2luZ1NlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiVVJMUGFyc2luZ1wiKTtcblx0XHRjb25zdCBvU2hlbGxOYXZpZ2F0aW9uU2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJTaGVsbE5hdmlnYXRpb25JbnRlcm5hbFwiKTtcblx0XHRjb25zdCBvU2hlbGxQbHVnaW5NYW5hZ2VyUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlBsdWdpbk1hbmFnZXJcIik7XG5cdFx0Y29uc3Qgb1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJQZXJzb25hbGl6YXRpb25WMlwiKTtcblx0XHRjb25zdCBvU2hlbGxVSVNlcnZpY2VQcm9taXNlID0gb0NvbXBvbmVudC5nZXRTZXJ2aWNlKFwiU2hlbGxVSVNlcnZpY2VcIik7XG5cdFx0Y29uc3Qgb1NoZWxsRXh0ZW5zaW9uU2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJFeHRlbnNpb25cIik7XG5cblx0XHRQcm9taXNlLmFsbChbXG5cdFx0XHRuYXZpZ2F0aW9uU2VydmljZVAsXG5cdFx0XHR1c2VySW5mb1NlcnZpY2VQLFxuXHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbFVJU2VydmljZVByb21pc2UsXG5cdFx0XHRvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbFBsdWdpbk1hbmFnZXJQcm9taXNlLFxuXHRcdFx0b1NoZWxsRXh0ZW5zaW9uU2VydmljZVByb21pc2Vcblx0XHRdKVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdChbXG5cdFx0XHRcdFx0bmF2aWdhdGlvblNlcnZpY2UsXG5cdFx0XHRcdFx0dXNlckluZm9TZXJ2aWNlLFxuXHRcdFx0XHRcdG9VcmxQYXJzaW5nU2VydmljZSxcblx0XHRcdFx0XHRvU2hlbGxOYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdG9TaGVsbFVJU2VydmljZSxcblx0XHRcdFx0XHRvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLFxuXHRcdFx0XHRcdG9TaGVsbFBsdWdpbk1hbmFnZXIsXG5cdFx0XHRcdFx0b1NoZWxsRXh0ZW5zaW9uU2VydmljZVxuXHRcdFx0XHRdKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2VydmljZSBhcyBOYXZpZ2F0aW9uO1xuXHRcdFx0XHRcdHRoaXMudXNlckluZm9TZXJ2aWNlID0gdXNlckluZm9TZXJ2aWNlIGFzIFVzZXJJbmZvO1xuXHRcdFx0XHRcdHRoaXMudXJsUGFyc2luZ1NlcnZpY2UgPSBvVXJsUGFyc2luZ1NlcnZpY2UgYXMgVVJMUGFyc2luZztcblx0XHRcdFx0XHR0aGlzLnNoZWxsTmF2aWdhdGlvbiA9IG9TaGVsbE5hdmlnYXRpb24gYXMgU2hlbGxOYXZpZ2F0aW9uO1xuXHRcdFx0XHRcdHRoaXMuc2hlbGxVSVNlcnZpY2UgPSBvU2hlbGxVSVNlcnZpY2U7XG5cdFx0XHRcdFx0dGhpcy5zaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UgPSBvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlIGFzIFBlcnNvbmFsaXphdGlvbldpdGhDb25zdGFudHM7XG5cdFx0XHRcdFx0dGhpcy5zaGVsbFBsdWdpbk1hbmFnZXIgPSBvU2hlbGxQbHVnaW5NYW5hZ2VyIGFzIFNoZWxsUGx1Z2luTWFuYWdlcjtcblx0XHRcdFx0XHR0aGlzLmV4dGVuc2lvblNlcnZpY2UgPSBvU2hlbGxFeHRlbnNpb25TZXJ2aWNlIGFzIEV4dGVuc2lvbjtcblx0XHRcdFx0XHR0aGlzLnJlc29sdmVGbigpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0KVxuXHRcdFx0LmNhdGNoKHRoaXMucmVqZWN0Rm4pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IGxpbmtzIGNvbmZpZ3VyZWQgZm9yIGEgZ2l2ZW4gc2VtYW50aWMgb2JqZWN0ICYgYWN0aW9uXG5cdCAqIFdpbGwgcmV0cmlldmUgdGhlIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uXG5cdCAqIHNlcnZpY2UgcmVmZXJlbmNlIGNhbGwgdGhlIGdldExpbmtzIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0TGlua3MgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byB0YXJnZXQgbGlua3MgYXJyYXlcblx0ICovXG5cdGFzeW5jIGdldExpbmtzKG9BcmdzPzogTGlua0ZpbHRlcltdKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRMaW5rcyhvQXJncyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIGxpc3Qgb2Ygc2VtYW50aWMgb2JqZWN0cyBvZiB0aGUgaW50ZW50cyB0aGUgY3VycmVudCB1c2VyIGNhbiBuYXZpZ2F0ZSB0by5cblx0ICpcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmUgd2l0aCBhbiBhcnJheSBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgc2VtYW50aWMgb2JqZWN0cyBvZiB0aGUgaW50ZW50cyB0aGUgY3VycmVudCB1c2VyIGNhbiBuYXZpZ2F0ZSB0bywgb3IgcmVqZWN0cyB3aXRoIGFuIGVycm9yIG1lc3NhZ2Vcblx0ICovXG5cdGFzeW5jIF9fZmV0Y2hTZW1hbnRpY09iamVjdCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldFNlbWFudGljT2JqZWN0cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IGxpbmtzIGNvbmZpZ3VyZWQgZm9yIGEgZ2l2ZW4gc2VtYW50aWMgb2JqZWN0ICYgYWN0aW9uIGluIGNhY2hlXG5cdCAqIFdpbGwgcmV0cmlldmUgdGhlIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uXG5cdCAqIHNlcnZpY2UgcmVmZXJlbmNlIGNhbGwgdGhlIGdldExpbmtzIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0TGlua3MgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byB0YXJnZXQgbGlua3MgYXJyYXlcblx0ICovXG5cdGFzeW5jIGdldExpbmtzV2l0aENhY2hlKG9BcmdzPzogTGlua0ZpbHRlcltdKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdGlmICgob0FyZ3MgYXMgT2JqZWN0W10pLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvQ2FjaGVSZXN1bHRzID0gdGhpcy5mbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlKG9BcmdzKTtcblxuXHRcdFx0aWYgKG9DYWNoZVJlc3VsdHMubmV3QXJncy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIG9DYWNoZVJlc3VsdHMuY2FjaGVkTGlua3M7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBhTGlua3MgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRMaW5rcyhvQ2FjaGVSZXN1bHRzLm5ld0FyZ3MpO1xuXHRcdFx0XHRpZiAoYUxpbmtzLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdHNMaW5rczogUmVjb3JkPHN0cmluZywgeyBsaW5rczogTGlua1tdIH0+ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFMaW5rcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0aWYgKGFMaW5rc1tpXS5sZW5ndGggPiAwICYmIG9DYWNoZVJlc3VsdHMubmV3QXJnc1tpXVswXS5saW5rcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdHNMaW5rc1tvQ2FjaGVSZXN1bHRzLm5ld0FyZ3NbaV1bMF0uc2VtYW50aWNPYmplY3RdID0ge1xuXHRcdFx0XHRcdFx0XHRcdGxpbmtzOiBhTGlua3NbaV1cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0dGhpcy5saW5rc0NhY2hlID0gT2JqZWN0LmFzc2lnbih0aGlzLmxpbmtzQ2FjaGUsIG9TZW1hbnRpY09iamVjdHNMaW5rcyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9DYWNoZVJlc3VsdHMuY2FjaGVkTGlua3MubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFMaW5rcztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBhTWVyZ2VkTGlua3MgPSBbXTtcblx0XHRcdFx0XHRsZXQgaiA9IDA7XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2Ygb0NhY2hlUmVzdWx0cy5vbGRBcmdzKSB7XG5cdFx0XHRcdFx0XHRpZiAoaiA8IGFMaW5rcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFMaW5rc1tqXS5sZW5ndGggPiAwICYmIGl0ZW1bMF0uc2VtYW50aWNPYmplY3QgPT09IG9DYWNoZVJlc3VsdHMubmV3QXJnc1tqXVswXS5zZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdGFNZXJnZWRMaW5rcy5wdXNoKGFMaW5rc1tqXSk7XG5cdFx0XHRcdFx0XHRcdFx0aisrO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGFNZXJnZWRMaW5rcy5wdXNoKGl0ZW1bMF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhTWVyZ2VkTGlua3MucHVzaChpdGVtWzBdLmxpbmtzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGFNZXJnZWRMaW5rcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIHJldHJpZXZlIHRoZSBTaGVsbENvbnRhaW5lci5cblx0ICpcblx0ICogQHJldHVybnMgT2JqZWN0IHdpdGggcHJlZGVmaW5lZCBzaGVsbENvbnRhaW5lciBtZXRob2RzXG5cdCAqL1xuXHRnZXRTaGVsbENvbnRhaW5lcigpOiBDb250YWluZXIge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgdG9FeHRlcm5hbCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIE5hdmlnYXRpb24gQXJndW1lbnRzIGFuZCBvQ29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gb05hdkFyZ3VtZW50c0FyciBBbmRcblx0ICogQHBhcmFtIG9Db21wb25lbnQgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+dG9FeHRlcm5hbCBhcmd1bWVudHNcblx0ICovXG5cdHRvRXh0ZXJuYWwob05hdkFyZ3VtZW50c0FycjogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0dGhpcy5uYXZpZ2F0ZShvTmF2QXJndW1lbnRzQXJyLCBvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHRhcmdldCBzdGFydHVwQXBwU3RhdGVcblx0ICogV2lsbCBjaGVjayB0aGUgZXhpc3RhbmNlIG9mIHRoZSBTaGVsbENvbnRhaW5lciBhbmQgcmV0cmlldmUgdGhlIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uXG5cdCAqIHNlcnZpY2UgcmVmZXJlbmNlIGNhbGwgdGhlIGdldFN0YXJ0dXBBcHBTdGF0ZSBtZXRob2QuIEluIGNhc2Ugc2VydmljZSBpcyBub3QgYXZhaWxhYmxlIG9yIGFueSBleGNlcHRpb25cblx0ICogbWV0aG9kIHRocm93cyBleGNlcHRpb24gZXJyb3IgaW4gY29uc29sZS5cblx0ICpcblx0ICogQHBhcmFtIG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldFN0YXJ0dXBBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIE9iamVjdFxuXHQgKi9cblx0YXN5bmMgZ2V0U3RhcnR1cEFwcFN0YXRlKG9BcmdzOiBDb21wb25lbnQpOiBQcm9taXNlPHVuZGVmaW5lZCB8IFN0YXJ0dXBBcHBTdGF0ZT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRTdGFydHVwQXBwU3RhdGUob0FyZ3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBiYWNrVG9QcmV2aW91c0FwcCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHJldHVybnMgU29tZXRoaW5nIHRoYXQgaW5kaWNhdGUgd2UndmUgbmF2aWdhdGVkXG5cdCAqL1xuXHRhc3luYyBiYWNrVG9QcmV2aW91c0FwcCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uYmFja1RvUHJldmlvdXNBcHAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaHJlZkZvckV4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogQHBhcmFtIG9Db21wb25lbnQgVGhlIGFwcENvbXBvbmVudFxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5ocmVmRm9yRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBzdHJpbmdcblx0ICovXG5cdGFzeW5jIGhyZWZGb3JFeHRlcm5hbChvQXJnczogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0SHJlZihvQXJncywgb0NvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIHByb21pc2UgcmVzb2x2aW5nIHRvIGEgVVJMIHRoYXQgbGF1bmNoZXMgYW4gYXBwIHdpdGggY2VydGFpbiBwYXJhbWV0ZXJzLlxuXHQgKiBUaGlzIEFQSSBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IHRoZSBpbnRlcm5hbCBzaGVsbCBoYXNoIGZvcm1hdCBpbnRvIHRoZSBVUkwgZm9ybWF0IGZvciB1c2UgaW4gbGluayB0YWdzLlxuXHQgKiBUaGUgcmVzdWx0aW5nIGhyZWYgaXMgZnVsbHkgZW5jb2RlZCBhbmQgY2Fubm90IGJlIHVzZWQgaW4gb3RoZXIgQVBJcyB0aGF0IGV4cGVjdCB0aGUgaW50ZXJuYWwgZGVjb2RlZCBoYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gW29UYXJnZXRdIFRoZSBuYXZpZ2F0aW9uIHRhcmdldCB0byB0cmFuc2Zvcm0uIFdoZW4sIG9taXR0ZWQgdGhlIGN1cnJlbnQgaGFzaCBpcyB1c2VkIGFzIHRoZSBiYXNpcyBmb3IgdGhlIGNhbGN1bGF0aW9uLlxuXHQgKiBAcGFyYW0gW29Db21wb25lbnRdIEEgVUk1IGNvbXBvbmVudCwgdXNlZCB0byBsb2dpY2FsbHkgYXR0YWNoIGFueSByZWxhdGVkIGFwcCBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgZW5jb2RlZCBocmVmLlxuXHQgKi9cblx0YXN5bmMgZ2V0SHJlZihvVGFyZ2V0OiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRIcmVmKG9UYXJnZXQsIG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRBcHBTdGF0ZSBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIG9Db21wb25lbnQgYW5kIG9BcHBTdGF0ZUtleS5cblx0ICpcblx0ICogQHBhcmFtIG9Db21wb25lbnRcblx0ICogQHBhcmFtIHNBcHBTdGF0ZUtleSBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgZ2V0QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRBcHBTdGF0ZShvQ29tcG9uZW50LCBzQXBwU3RhdGVLZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjcmVhdGVFbXB0eUFwcFN0YXRlIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggb0NvbXBvbmVudC5cblx0ICpcblx0ICogQHBhcmFtIG9Db21wb25lbnQgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Y3JlYXRlRW1wdHlBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgY3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uY3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggTmF2aWdhdGlvbiBBcmd1bWVudHMgYW5kIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBhVGFyZ2V0c1xuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5pc05hdmlnYXRpb25TdXBwb3J0ZWQgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdGFzeW5jIGlzTmF2aWdhdGlvblN1cHBvcnRlZChhVGFyZ2V0czogVGFyZ2V0W10sIG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmlzTmF2aWdhdGlvblN1cHBvcnRlZChhVGFyZ2V0cywgb0NvbXBvbmVudCkgYXMgdW5rbm93biBhcyBQcm9taXNlPHsgc3VwcG9ydGVkOiBib29sZWFuIH1bXT47XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHRvIGEgc3BlY2lmaWVkIHRhcmdldCBvdXRzaWRlIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBhcHBsaWNhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG9UYXJnZXQgVGhlIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKiBAcGFyYW0gW29Db21wb25lbnRdIEEgVUk1IGNvbXBvbmVudCwgdXNlZCB0byBsb2dpY2FsbHkgYXR0YWNoIGFueSByZWxhdGVkIGFwcCBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmluZyBvbmNlIHRoZSBuYXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQuIFRoZSBQcm9taXNlIG1pZ2h0IG5ldmVyIHJlamVjdCBvciByZXNvbHZlXG5cdCAqICAgICAgICAgICAgICAgICAgICB3aGVuIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG5hdmlnYXRpb24uXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZShvVGFyZ2V0OiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24ubmF2aWdhdGUob1RhcmdldCwgb0NvbXBvbmVudCkpIGFzIHVua25vd24gYXMgUHJvbWlzZTx1bmRlZmluZWQ+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBib29sZWFuXG5cdCAqL1xuXHRhc3luYyBpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5pc0luaXRpYWxOYXZpZ2F0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGV4cGFuZENvbXBhY3RIYXNoIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2hGcmFnbWVudCBBbiAoaW50ZXJuYWwgZm9ybWF0KSBzaGVsbCBoYXNoXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGUgc3VjY2VzcyBoYW5kbGVyIG9mIHRoZSByZXNvbHZlIHByb21pc2UgZ2V0IGFuIGV4cGFuZGVkIHNoZWxsIGhhc2ggYXMgZmlyc3QgYXJndW1lbnRcblx0ICovXG5cdGFzeW5jIGV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHNIYXNoRnJhZ21lbnQ7IC8vdGhpcy5uYXZUYXJnZXRSZXNvbHV0aW9uLmV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQpO1xuXHR9XG5cblx0Z2V0SGFzaCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgIyR7dGhpcy51cmxQYXJzaW5nU2VydmljZS5nZXRTaGVsbEhhc2god2luZG93LmxvY2F0aW9uLmhyZWYpfWA7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIG1hcCBvZiBhbGwgdGhlIHBsdWdpbnMgd2hpY2ggYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgUGx1Z2luTWFuYWdlciwgc29ydGVkIGJ5IHN1cHBvcnRlZCBwbHVnaW4gY2F0ZWdvcmllcy5cblx0ICpcblx0ICogQHJldHVybnMgTWFwIG9mIHJlZ2lzdGVyZWQgcGx1Z2luc1xuXHQgKi9cblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy5zaGVsbFBsdWdpbk1hbmFnZXIuZ2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBmb3IgdGhlIG9wdGltaXN0aWMgYmF0Y2ggcGx1Z2luIHNldHVwIGluIHRoZSBGTFAuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9wdGltaXN0aWMgYmF0Y2ggcGx1Z2luIGlzIHNldCB1cCBhbmQgZW5hYmxlZC5cblx0ICovXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnMgPSB0aGlzLmdldFJlZ2lzdGVyZWRQbHVnaW5zKCkuUmVuZGVyZXJFeHRlbnNpb25zO1xuXHRcdGlmIChcblx0XHRcdGZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnM/Lmhhc093blByb3BlcnR5KFwiTUFOQUdFX0ZFX0NBQ0hFU1wiKSAmJlxuXHRcdFx0ISEoZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+PikuTUFOQUdFX0ZFX0NBQ0hFUy5lbmFibGVkXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcGFyc2VTaGVsbEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5wYXJzZVNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgVGhlIHBhcnNlZCB1cmxcblx0ICovXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpOiBQYXJzZWRIYXNoIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5wYXJzZVNoZWxsSGFzaChzSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNwbGl0SGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwYXJhbSBzSGFzaCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLlVSTFBhcnNpbmc9PnNwbGl0SGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0c3BsaXRIYXNoKHNIYXNoOiBzdHJpbmcpOiB7IHNoZWxsUGFydD86IHN0cmluZzsgYXBwU3BlY2lmaWNSb3V0ZT86IHN0cmluZyB9IHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5zcGxpdEhhc2goc0hhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjb25zdHJ1Y3RTaGVsbEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gb05ld1NoZWxsSGFzaCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLlVSTFBhcnNpbmc9PmNvbnN0cnVjdFNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgU2hlbGwgSGFzaCBzdHJpbmdcblx0ICovXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLmNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0RGlydHlGbGFnIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0gYkRpcnR5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLnNldERpcnR5RmxhZyBhcmd1bWVudHNcblx0ICovXG5cdHNldERpcnR5RmxhZyhiRGlydHk6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5zZXREaXJ0eUZsYWcoYkRpcnR5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUgcHJvdmlkZXIgY2FsbGJhY2sgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgYXJndW1lbnRzXG5cdCAqL1xuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogKCkgPT4gYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZSBwcm92aWRlciBjYWxsYmFjayBtZXRob2QuXG5cdCAqXG5cdCAqIEBwYXJhbSBmbkRpcnR5U3RhdGVQcm92aWRlciBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5kZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIGFyZ3VtZW50c1xuXHQgKi9cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogKCkgPT4gYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyLmRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjcmVhdGVSZW5kZXJlciBtZXRob2Qgb2YgdXNoZWxsIGNvbnRhaW5lci5cblx0ICpcblx0ICogQHJldHVybnMgUmV0dXJucyByZW5kZXJlciBvYmplY3Rcblx0ICovXG5cdGFzeW5jIGNyZWF0ZVJlbmRlcmVyKCk6IFByb21pc2U8Q29udHJvbCB8IENvbXBvbmVudENvbnRhaW5lcj4ge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5jcmVhdGVSZW5kZXJlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRVc2VyIG1ldGhvZCBvZiB1c2hlbGwgY29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIFVzZXIgb2JqZWN0XG5cdCAqL1xuXHRnZXRVc2VyKCk6IFVzZXJJbmZvIHtcblx0XHRyZXR1cm4gdGhpcy51c2VySW5mb1NlcnZpY2U7XG5cdH1cblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0VXNlcigpLmlzSmFtQWN0aXZlKCk7XG5cdH1cblxuXHRnZXRVc2VySW5pdGlhbHMoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0VXNlcigpLmdldEluaXRpYWxzKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjaGVjayBpZiB1c2hlbGwgY29udGFpbmVyIGlzIGF2YWlsYWJsZSBvciBub3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZVxuXHQgKi9cblx0aGFzVVNoZWxsKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCByZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIgbWV0aG9kIG9mIHNoZWxsTmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGZuTmF2RmlsdGVyIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gcmVnaXN0ZXJcblx0ICovXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsTmF2aWdhdGlvbi5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCB1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciBtZXRob2Qgb2Ygc2hlbGxOYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5OYXZGaWx0ZXIgVGhlIGZpbHRlciBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyXG5cdCAqL1xuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsTmF2aWdhdGlvbi51bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldEJhY2tOYXZpZ2F0aW9uIG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBiYWNrIGJ1dHRvbiBpbiB0aGUgc2hlbGwgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5DYWxsQmFjayBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCBpbiB0aGUgVUkuXG5cdCAqL1xuXHRzZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldEhpZXJhcmNoeSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gaGllcmFyY2h5IGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBbYUhpZXJhcmNoeUxldmVsc10gQW4gYXJyYXkgcmVwcmVzZW50aW5nIGhpZXJhcmNoaWVzIG9mIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGFwcC5cblx0ICovXG5cdHNldEhpZXJhcmNoeShhSGllcmFyY2h5TGV2ZWxzOiBvYmplY3RbXSk6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHBhcmFtIFtzVGl0bGVdIFRoZSBuZXcgdGl0bGUuIFRoZSBkZWZhdWx0IHRpdGxlIGlzIHNldCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBnaXZlbi5cblx0ICovXG5cdHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbFVJU2VydmljZS5zZXRUaXRsZShzVGl0bGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHRpdGxlIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICovXG5cdGdldFRpdGxlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxVSVNlcnZpY2UuZ2V0VGl0bGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnRseSBkZWZpbmVkIGNvbnRlbnQgZGVuc2l0eS5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGNvbnRlbnQgZGVuc2l0eSB2YWx1ZVxuXHQgKi9cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0VXNlcigpLmdldENvbnRlbnREZW5zaXR5KCk7XG5cdH1cblxuXHQvKipcblx0ICogRm9yIGEgZ2l2ZW4gc2VtYW50aWMgb2JqZWN0LCB0aGlzIG1ldGhvZCBjb25zaWRlcnMgYWxsIGFjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZW1hbnRpYyBvYmplY3QgYW5kXG5cdCAqIHJldHVybnMgdGhlIG9uZSB0YWdnZWQgYXMgYSBcInByaW1hcnlBY3Rpb25cIi4gSWYgbm8gaW5ib3VuZCB0YWdnZWQgYXMgXCJwcmltYXJ5QWN0aW9uXCIgZXhpc3RzLCB0aGVuIGl0IHJldHVybnNcblx0ICogdGhlIGludGVudCBvZiB0aGUgZmlyc3QgaW5ib3VuZCAoYWZ0ZXIgc29ydGluZyBoYXMgYmVlbiBhcHBsaWVkKSBtYXRjaGluZyB0aGUgYWN0aW9uIFwiZGlzcGxheUZhY3RTaGVldFwiLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1NlbWFudGljT2JqZWN0IFNlbWFudGljIG9iamVjdC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFNlZSAjQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24jZ2V0TGlua3MgZm9yIGRlc2NyaXB0aW9uLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgaW50ZW50IGlmIGl0IGV4aXN0cy5cblx0ICovXG5cdGFzeW5jIGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogTGlua0ZpbHRlcik6IFByb21pc2U8TGluaz4ge1xuXHRcdGNvbnN0IHByaW1hcnlJbnRlbnQgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdCwgbVBhcmFtZXRlcnMpO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHByaW1hcnlJbnRlbnQpKSB7XG5cdFx0XHRyZXR1cm4gcHJpbWFyeUludGVudFswXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHByaW1hcnlJbnRlbnQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFdhaXQgZm9yIHRoZSByZW5kZXIgZXh0ZW5zaW9ucyBwbHVnaW4gdG8gYmUgbG9hZGVkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHdlIGFyZSBhYmxlIHRvIHdhaXQgZm9yIGl0LCBvdGhlcndpc2Ugd2UgY291bGRuJ3QgYW5kIGNhbm5vdCByZWx5IG9uIGl0LlxuXHQgKi9cblx0YXN5bmMgd2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLnNoZWxsUGx1Z2luTWFuYWdlcj8uZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UpIHtcblx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9jYXRjaC1vci1yZXR1cm5cblx0XHRcdFx0dGhpcy5zaGVsbFBsdWdpbk1hbmFnZXJcblx0XHRcdFx0XHQuZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UoXCJSZW5kZXJlckV4dGVuc2lvbnNcIilcblx0XHRcdFx0XHQuZmFpbCgob0Vycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yIGFzIHN0cmluZywgXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaGVsbFNlcnZpY2VzRmFjdG9yeS53YWl0Rm9yUGx1Z2luc0xvYWRcIik7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHJlc29sdmUodHJ1ZSkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcGVyc29uYWxpemVyIGZyb20gdGhlIHNoZWxsIHNlcnZpY2UuXG5cdCAqIFdlIHNldCBzb21lIGRlZmF1bHRzIGZvciB0aGUgc2NvcGUgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gcGVyc0lkIFBlcnNvbmFsaXphdGlvbiBvYmplY3Rcblx0ICogQHBhcmFtIHNjb3BlIFNjb3BlIG9iamVjdFxuXHQgKiBAcGFyYW0gY29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFBlcnNvbmFsaXplciBvYmplY3Qgd2hpY2ggaGFuZGxlcyBwZXJzb25hbGl6YXRpb25cblx0ICovXG5cdGFzeW5jIGdldFBlcnNvbmFsaXplcihwZXJzSWQ6IFBlcnNJZCwgc2NvcGU6IFNjb3BlLCBjb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRzY29wZSA9IHtcblx0XHRcdC8vIG1lcmdlIHNvbWUgZGVmYXVsdHNcblx0XHRcdGtleUNhdGVnb3J5OiB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5jb25zdGFudHMua2V5Q2F0ZWdvcnkuRklYRURfS0VZLFxuXHRcdFx0d3JpdGVGcmVxdWVuY3k6IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmNvbnN0YW50cy53cml0ZUZyZXF1ZW5jeS5MT1csXG5cdFx0XHRjbGllbnRTdG9yYWdlQWxsb3dlZDogZmFsc2UsXG5cdFx0XHR2YWxpZGl0eTogSW5maW5pdHksXG5cdFx0XHQuLi5zY29wZVxuXHRcdH07XG5cdFx0cmV0dXJuIChhd2FpdCB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5nZXRQZXJzb25hbGl6ZXIocGVyc0lkLCBzY29wZSwgY29tcG9uZW50KSkgYXMgUGVyc29uYWxpemVyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIGEgY29udGFpbmVyIGlkZW50aWZpZWQgYnkgc0NvbnRhaW5lcktleS5cblx0ICpcblx0ICogQHBhcmFtIGtleSBDb250YWluZXIga2V5XG5cdCAqIEBwYXJhbSBzY29wZSBTY29wZSBvYmplY3Rcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCB3aGVuIHRoZSBjb250YWluZXIgaXMgZGVsZXRlZFxuXHQgKi9cblx0YXN5bmMgZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKGtleTogc3RyaW5nLCBzY29wZT86IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5kZWxldGVDb250YWluZXIoa2V5LCBzY29wZSBhcyB1bmtub3duIGFzIG9iamVjdCkgYXMgUHJvbWlzZTx2b2lkPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNoZWxsIGNvbmZpZyBmcm9tIHRoZSB3aW5kb3dzIG9iamVjdC5cblx0ICpcblx0ICogQHJldHVybnMgU2hlbGwgY29uZmlnIG9iamVjdFxuXHQgKi9cblx0Z2V0U2hlbGxDb25maWcoKTogU2hlbGxDb25maWdUeXBlIHtcblx0XHRyZXR1cm4gKHdpbmRvdyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIG9iamVjdD4pW1wic2FwLXVzaGVsbC1jb25maWdcIl0gYXMgU2hlbGxDb25maWdUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlIHBhcmFtZXRlcnMgZnJvbSBhIFVSSSBxdWVyeSBzdHJpbmcgKHN0YXJ0aW5nIHdpdGggPykgaW50byBhIHBhcmFtZXRlciBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB1cmwgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogUGFyYW1ldGVyIHN0cmluZ1xuXHQgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmcgc3RyaW5nIGFycmF5c1xuXHQgKi9cblx0cGFyc2VQYXJhbWV0ZXJzKHVybDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5wYXJzZVBhcmFtZXRlcnModXJsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNoZWxsIGV4dGVuc2lvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBTaGVsbCBleHRlbnNpb24gc2VydmljZVxuXHQgKi9cblx0Z2V0RXh0ZW5zaW9uU2VydmljZSgpOiBFeHRlbnNpb24ge1xuXHRcdHJldHVybiB0aGlzLmV4dGVuc2lvblNlcnZpY2U7XG5cdH1cbn1cblxuLyoqXG4gKiBTZXJ2aWNlIEZhY3RvcnkgZm9yIHRoZSBTaGVsbFNlcnZpY2VzXG4gKlxuICovXG5jbGFzcyBTaGVsbFNlcnZpY2VzRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PFNoZWxsU2VydmljZXNTZXR0aW5ncz4ge1xuXHQvKipcblx0ICogQ3JlYXRlcyBlaXRoZXIgYSBzdGFuZGFyZCBvciBhIG1vY2sgU2hlbGwgc2VydmljZSBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBzZXJ2aWNlQ29udGV4dCBUaGUgc2hlbGxzZXJ2aWNlIGNvbnRleHRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGZvciBhIHNoZWxsIHNlcnZpY2UgaW1wbGVtZW50YXRpb25cblx0ICogQHNlZSBTZXJ2aWNlRmFjdG9yeSNjcmVhdGVJbnN0YW5jZVxuXHQgKi9cblx0YXN5bmMgY3JlYXRlSW5zdGFuY2Uoc2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFNoZWxsU2VydmljZXNTZXR0aW5ncz4pOiBQcm9taXNlPElTaGVsbFNlcnZpY2VzPiB7XG5cdFx0c2VydmljZUNvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXIgPSBzYXAudWkucmVxdWlyZShcInNhcC91c2hlbGwvQ29udGFpbmVyXCIpO1xuXHRcdGNvbnN0IHNoZWxsU2VydmljZSA9IHNlcnZpY2VDb250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyXG5cdFx0XHQ/IG5ldyBTaGVsbFNlcnZpY2VzKHNlcnZpY2VDb250ZXh0IGFzIFNlcnZpY2VDb250ZXh0PFJlcXVpcmVkPFNoZWxsU2VydmljZXNTZXR0aW5ncz4+KVxuXHRcdFx0OiBuZXcgU2hlbGxTZXJ2aWNlTW9jayhzZXJ2aWNlQ29udGV4dCk7XG5cdFx0YXdhaXQgc2hlbGxTZXJ2aWNlLmluaXRQcm9taXNlO1xuXHRcdC8vIEVucmljaCB0aGUgYXBwQ29tcG9uZW50IHdpdGggdGhpcyBtZXRob2Rcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBzZXJ2aWNlQ29udGV4dC5zY29wZU9iamVjdDtcblx0XHRhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcyA9ICgpOiBJU2hlbGxTZXJ2aWNlcyA9PiBzaGVsbFNlcnZpY2U7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGFwcENvbXBvbmVudC5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRsZXQgc2VtYW50aWNPYmplY3RzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RzID0gYXdhaXQgc2hlbGxTZXJ2aWNlLl9fZmV0Y2hTZW1hbnRpY09iamVjdCgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY2FsbGluZyBnZXRTZW1hbnRpY09iamVjdHNcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdChpbnRlcm5hbE1vZGVsIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoXCIvc2VtYW50aWNPYmplY3RzXCIsIHNlbWFudGljT2JqZWN0cyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzaGVsbFNlcnZpY2U7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2hlbGxTZXJ2aWNlc0ZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7OztFQXdLQTtBQUNBO0FBQ0E7QUFDQTtFQUhBLElBSU1BLGdCQUFnQjtJQUFBO0lBQUE7TUFBQTtJQUFBO0lBQUE7SUFBQSxPQU9yQkMsSUFBSSxHQUFKLGdCQUFhO01BQ1osSUFBSSxDQUFDQyxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBbUI7TUFDMUQsSUFBSSxDQUFDQyxZQUFZLEdBQUcsTUFBTTtJQUMzQixDQUFDO0lBQUEsT0FFS0MsUUFBUSxHQUFkLHlCQUFlO0lBQUEsRUFBc0M7TUFDcEQsT0FBT0gsT0FBTyxDQUFDQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFBQSxPQUVLRyxxQkFBcUIsR0FBM0IsdUNBQWlEO01BQ2hELE9BQU9KLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUEsT0FFS0ksaUJBQWlCLEdBQXZCLGtDQUF3QjtJQUFBLEVBQXNDO01B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
|
|
828
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaGVsbFNlcnZpY2VNb2NrIiwiaW5pdCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnN0YW5jZVR5cGUiLCJnZXRMaW5rcyIsIl9fZmV0Y2hTZW1hbnRpY09iamVjdCIsImdldExpbmtzV2l0aENhY2hlIiwidG9FeHRlcm5hbCIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInVuZGVmaW5lZCIsImlzSmFtQWN0aXZlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJnZXRIcmVmIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImdldEFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZSIsImNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYyIsIm5hdmlnYXRlIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwiaXNJbml0aWFsTmF2aWdhdGlvbiIsImV4cGFuZENvbXBhY3RIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJzcGxpdEhhc2giLCJzSGFzaCIsInJlZ2V4IiwiZXhlYyIsInNoZWxsUGFydCIsImFwcFNwZWNpZmljUm91dGUiLCJsZW5ndGgiLCJjb25zdHJ1Y3RTaGVsbEhhc2giLCJzZXREaXJ0eUZsYWciLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJjcmVhdGVSZW5kZXJlciIsImdldFVzZXIiLCJnZXRVc2VySW5pdGlhbHMiLCJoYXNVU2hlbGwiLCJyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJ1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsInNldEJhY2tOYXZpZ2F0aW9uIiwic2V0SGllcmFyY2h5Iiwic2V0VGl0bGUiLCJnZXRDb250ZW50RGVuc2l0eSIsImRvY3VtZW50IiwiYm9keSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiZ2V0UHJpbWFyeUludGVudCIsIndhaXRGb3JQbHVnaW5zTG9hZCIsImdldFRpdGxlIiwiZ2V0UGVyc29uYWxpemVyIiwiX3BlcnNJZCIsIl9zY29wZSIsIl9jb21wb25lbnQiLCJnZXRQZXJzRGF0YSIsImhpc3RvcnlFbmFibGVkIiwic3VnZ2VzdGlvbnNFbmFibGVkIiwiYXBwcyIsInNldFBlcnNEYXRhIiwiZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyIiwiX2tleSIsImdldFNoZWxsQ29uZmlnIiwiZ2V0UmVnaXN0ZXJlZFBsdWdpbnMiLCJBcHBXYXJtdXAiLCJSZW5kZXJlckV4dGVuc2lvbnMiLCJVc2VyRGVmYXVsdHMiLCJVc2VySW1hZ2UiLCJpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCIsInBhcnNlUGFyYW1ldGVycyIsImdldEV4dGVuc2lvblNlcnZpY2UiLCJnZXRJbmZyYW1lVXJsIiwiU2VydmljZSIsIlNoZWxsU2VydmljZXMiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJvQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvU2hlbGxDb250YWluZXIiLCJzZXR0aW5ncyIsInNoZWxsQ29udGFpbmVyIiwibGlua3NDYWNoZSIsImZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUiLCJvQXJncyIsImFDYWNoZWRTZW1hbnRpY09iamVjdHMiLCJhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzIiwibGlua0ZpbHRlciIsInNlbWFudGljT2JqZWN0IiwicHVzaCIsImxpbmtzIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsIm9sZEFyZ3MiLCJuZXdBcmdzIiwiY2FjaGVkTGlua3MiLCJyZWplY3QiLCJyZXNvbHZlRm4iLCJyZWplY3RGbiIsIm5hdmlnYXRpb25TZXJ2aWNlUCIsImdldFNlcnZpY2VBc3luYyIsInVzZXJJbmZvU2VydmljZVAiLCJvVXJsUGFyc2luZ1NlcnZpY2VQcm9taXNlIiwib1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlIiwib1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UiLCJvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbFVJU2VydmljZVByb21pc2UiLCJnZXRTZXJ2aWNlIiwib1NoZWxsRXh0ZW5zaW9uU2VydmljZVByb21pc2UiLCJhbGwiLCJ0aGVuIiwibmF2aWdhdGlvblNlcnZpY2UiLCJ1c2VySW5mb1NlcnZpY2UiLCJvVXJsUGFyc2luZ1NlcnZpY2UiLCJvU2hlbGxOYXZpZ2F0aW9uIiwib1NoZWxsVUlTZXJ2aWNlIiwib1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSIsIm9TaGVsbFBsdWdpbk1hbmFnZXIiLCJvU2hlbGxFeHRlbnNpb25TZXJ2aWNlIiwiYXBwbGljYXRpb25OYXZpZ2F0aW9uIiwidXJsUGFyc2luZ1NlcnZpY2UiLCJzaGVsbE5hdmlnYXRpb24iLCJzaGVsbFVJU2VydmljZSIsInNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSIsInNoZWxsUGx1Z2luTWFuYWdlciIsImV4dGVuc2lvblNlcnZpY2UiLCJjYXRjaCIsImdldFNlbWFudGljT2JqZWN0cyIsIm9DYWNoZVJlc3VsdHMiLCJhTGlua3MiLCJvU2VtYW50aWNPYmplY3RzTGlua3MiLCJpIiwiYXNzaWduIiwiYU1lcmdlZExpbmtzIiwiaiIsIml0ZW0iLCJnZXRTaGVsbENvbnRhaW5lciIsInVzaGVsbENvbnRhaW5lciIsImFwcFVybCIsImluQXBwUnVudGltZSIsImdldEZMUFVybEFzeW5jIiwiZXJyb3IiLCJMb2ciLCJvTmF2QXJndW1lbnRzQXJyIiwib1RhcmdldCIsInNBcHBTdGF0ZUtleSIsImFUYXJnZXRzIiwic0hhc2hGcmFnbWVudCIsImdldFNoZWxsSGFzaCIsImZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnMiLCJoYXNPd25Qcm9wZXJ0eSIsIk1BTkFHRV9GRV9DQUNIRVMiLCJlbmFibGVkIiwib05ld1NoZWxsSGFzaCIsImJEaXJ0eSIsImZuRGlydHlTdGF0ZVByb3ZpZGVyIiwiZ2V0SW5pdGlhbHMiLCJmbk5hdkZpbHRlciIsImZuQ2FsbEJhY2siLCJhSGllcmFyY2h5TGV2ZWxzIiwic1RpdGxlIiwic1NlbWFudGljT2JqZWN0IiwibVBhcmFtZXRlcnMiLCJwcmltYXJ5SW50ZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UiLCJmYWlsIiwib0Vycm9yIiwicGVyc0lkIiwic2NvcGUiLCJjb21wb25lbnQiLCJrZXlDYXRlZ29yeSIsImNvbnN0YW50cyIsIkZJWEVEX0tFWSIsIndyaXRlRnJlcXVlbmN5IiwiTE9XIiwiY2xpZW50U3RvcmFnZUFsbG93ZWQiLCJ2YWxpZGl0eSIsIkluZmluaXR5Iiwia2V5IiwiZGVsZXRlQ29udGFpbmVyIiwidXJsIiwiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkiLCJjcmVhdGVJbnN0YW5jZSIsInNlcnZpY2VDb250ZXh0Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwic2hlbGxTZXJ2aWNlIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsInNlbWFudGljT2JqZWN0cyIsInNldFByb3BlcnR5IiwiU2VydmljZUZhY3RvcnkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlNoZWxsU2VydmljZXNGYWN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250YWluZXIgZnJvbSBcInNhcC91c2hlbGwvQ29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBFeHRlbnNpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvRXh0ZW5zaW9uXCI7XG5pbXBvcnQgdHlwZSBOYXZpZ2F0aW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgTGluaywgTGlua0ZpbHRlciwgVGFyZ2V0IH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgUGVyc29uYWxpemF0aW9uVjIgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvUGVyc29uYWxpemF0aW9uVjJcIjtcbmltcG9ydCB7IHR5cGUgUGVyc0lkLCB0eXBlIFNjb3BlIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvUGVyc29uYWxpemF0aW9uVjJcIjtcbmltcG9ydCB0eXBlIFNoZWxsTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9TaGVsbE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIFVSTFBhcnNpbmcgZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVVJMUGFyc2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRIYXNoIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVVJMUGFyc2luZ1wiO1xuaW1wb3J0IHR5cGUgVXNlckluZm8gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvVXNlckluZm9cIjtcbmltcG9ydCB0eXBlIFNoZWxsVUlTZXJ2aWNlIGZyb20gXCJzYXAvdXNoZWxsL3VpNXNlcnZpY2UvU2hlbGxVSVNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmV4cG9ydCB0eXBlIFN0YXJ0dXBBcHBTdGF0ZSA9IHtcblx0Z2V0RGF0YSgpOiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudD86IHtcblx0XHRcdFNlbGVjdE9wdGlvbnM/OiB7XG5cdFx0XHRcdFByb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdFx0XHRSYW5nZXM6IHtcblx0XHRcdFx0XHRPcHRpb246IHN0cmluZztcblx0XHRcdFx0XHRTaWduOiBzdHJpbmc7XG5cdFx0XHRcdFx0TG93OiBzdHJpbmc7XG5cdFx0XHRcdH1bXTtcblx0XHRcdH1bXTtcblx0XHR9O1xuXHR9O1xufTtcblxuLy8gc2VlOiBzYXBcXHVzaGVsbFxcc2VydmljZXNcXF9QZXJzb25hbGl6YXRpb25cXGNvbnN0YW50cy5qc1xuZXhwb3J0IHR5cGUgUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cyA9IFBlcnNvbmFsaXphdGlvblYyICYge1xuXHRjb25zdGFudHM6IHtcblx0XHRrZXlDYXRlZ29yeToge1xuXHRcdFx0RklYRURfS0VZOiBzdHJpbmc7XG5cdFx0XHRHRU5FUkFURURfS0VZOiBzdHJpbmc7XG5cdFx0fTtcblx0XHR3cml0ZUZyZXF1ZW5jeToge1xuXHRcdFx0SElHSDogc3RyaW5nO1xuXHRcdFx0TE9XOiBzdHJpbmc7XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIFBlcnNvbmFsaXplclR5cGUgPSB7XG5cdGdldFBlcnNEYXRhOiAoKSA9PiBQcm9taXNlPG9iamVjdD47XG5cdHNldFBlcnNEYXRhOiAocGVyc0RhdGE6IG9iamVjdCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIFNoZWxsQ29uZmlnVHlwZSA9IHtcblx0YXBwczoge1xuXHRcdGlucHV0RmllbGRIaXN0b3J5OiB7XG5cdFx0XHRlbmFibGVkOiBib29sZWFuO1xuXHRcdH07XG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBGTFBQbHVnaW4gPSB7XG5cdGNvbXBvbmVudDogc3RyaW5nO1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHR1cmw6IHN0cmluZztcblx0Y29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlID0ge1xuXHRBcHBXYXJtdXA6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcblx0UmVuZGVyZXJFeHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBGTFBQbHVnaW4+IHwge307XG5cdFVzZXJEZWZhdWx0czogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xuXHRVc2VySW1hZ2U6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcbn07XG5cbi8qKlxuICogQGludGVyZmFjZSBJU2hlbGxTZXJ2aWNlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzIHtcblx0aW5pdFByb21pc2U6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXHRpbnN0YW5jZVR5cGU6IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RzOiBzdHJpbmdbXTtcblxuXHRnZXRMaW5rcyhvQXJncz86IE9taXQ8TGlua0ZpbHRlciwgXCJ1aTVDb21wb25lbnRcIj5bXSk6IFByb21pc2U8TGlua1tdW10+O1xuXG5cdGdldExpbmtzV2l0aENhY2hlKG9BcmdzPzogT21pdDxMaW5rRmlsdGVyLCBcInVpNUNvbXBvbmVudFwiPltdKTogUHJvbWlzZTxMaW5rW11bXT47XG5cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpOiB2b2lkO1xuXG5cdGdldFN0YXJ0dXBBcHBTdGF0ZShvQXJnczogb2JqZWN0KTogUHJvbWlzZTx1bmRlZmluZWQgfCBTdGFydHVwQXBwU3RhdGU+O1xuXG5cdGJhY2tUb1ByZXZpb3VzQXBwKCk6IHZvaWQ7XG5cblx0aHJlZkZvckV4dGVybmFsKG9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldEhyZWYob1RhcmdldDogb2JqZWN0LCBvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj47XG5cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBvYmplY3Q7XG5cblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHVua25vd24+O1xuXG5cdG5hdmlnYXRlKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkPjtcblxuXHRpc05hdmlnYXRpb25TdXBwb3J0ZWQob05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudD86IG9iamVjdCk6IFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPjtcblxuXHRpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj47XG5cblx0ZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldEhhc2goKTogc3RyaW5nO1xuXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpOiBQYXJzZWRIYXNoO1xuXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogUmV0dXJuVHlwZTxVUkxQYXJzaW5nW1wic3BsaXRIYXNoXCJdPjtcblxuXHRjb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaDogb2JqZWN0KTogc3RyaW5nO1xuXG5cdHNldERpcnR5RmxhZyhiRGlydHk6IGJvb2xlYW4pOiB2b2lkO1xuXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdGNyZWF0ZVJlbmRlcmVyKCk6IG9iamVjdDtcblxuXHRnZXRVc2VyKCk6IFVzZXJJbmZvO1xuXHRnZXRVc2VySW5pdGlhbHMoKTogc3RyaW5nO1xuXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuO1xuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0c2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjaz86IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRzZXRIaWVyYXJjaHkoYUhpZXJhcmNoeUxldmVsczogQXJyYXk8b2JqZWN0Pik6IHZvaWQ7XG5cblx0c2V0VGl0bGUoc1RpdGxlOiBzdHJpbmcpOiB2b2lkO1xuXG5cdGlzSmFtQWN0aXZlKCk6IGJvb2xlYW47XG5cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nO1xuXG5cdGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0KTogUHJvbWlzZTxMaW5rPjtcblxuXHR3YWl0Rm9yUGx1Z2luc0xvYWQoKTogUHJvbWlzZTxib29sZWFuPjtcblxuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGU7XG5cblx0aXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQoKTogYm9vbGVhbjtcblxuXHRnZXRUaXRsZSgpOiBzdHJpbmc7XG5cblx0Z2V0UGVyc29uYWxpemVyKHBlcnNJZDogUGVyc0lkLCBzY29wZTogU2NvcGUsIGNvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8UGVyc29uYWxpemVyVHlwZT47XG5cblx0ZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKGtleTogc3RyaW5nLCBzY29wZT86IG9iamVjdCk6IFByb21pc2U8dm9pZD47XG5cblx0Z2V0U2hlbGxDb25maWcoKTogU2hlbGxDb25maWdUeXBlO1xuXG5cdHBhcnNlUGFyYW1ldGVycyh1cmw6IHN0cmluZyk6IFJldHVyblR5cGU8VVJMUGFyc2luZ1tcInBhcnNlUGFyYW1ldGVyc1wiXT47XG5cblx0Z2V0RXh0ZW5zaW9uU2VydmljZSgpOiBFeHRlbnNpb247XG5cblx0Z2V0SW5mcmFtZVVybCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG59XG5cbi8qKlxuICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU2hlbGxTZXJ2aWNlIGZvciBPcGVuRkVcbiAqXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZU1vY2sgZXh0ZW5kcyBTZXJ2aWNlPFNoZWxsU2VydmljZXNTZXR0aW5ncz4gaW1wbGVtZW50cyBJU2hlbGxTZXJ2aWNlcyB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cblx0aW5zdGFuY2VUeXBlITogc3RyaW5nO1xuXG5cdHNlbWFudGljT2JqZWN0cyE6IHN0cmluZ1tdO1xuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzIGFzIElTaGVsbFNlcnZpY2VzKTtcblx0XHR0aGlzLmluc3RhbmNlVHlwZSA9IFwibW9ja1wiO1xuXHR9XG5cblx0YXN5bmMgZ2V0TGlua3MoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHRhc3luYyBfX2ZldGNoU2VtYW50aWNPYmplY3QoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgZ2V0TGlua3NXaXRoQ2FjaGUoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHR0b0V4dGVybmFsKC8qb05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0Ki8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRhc3luYyBnZXRTdGFydHVwQXBwU3RhdGUoLypvQXJnczogb2JqZWN0Ki8pOiBQcm9taXNlPFN0YXJ0dXBBcHBTdGF0ZSB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGlzSmFtQWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGJhY2tUb1ByZXZpb3VzQXBwKCk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdGFzeW5jIGhyZWZGb3JFeHRlcm5hbCgvKm9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRhc3luYyBnZXRIcmVmKC8qb0FyZ3M/OiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QsIGJBc3luYz86IGJvb2xlYW4qLyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0fVxuXG5cdGdldEhhc2goKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWY7XG5cdH1cblxuXHRhc3luYyBnZXRBcHBTdGF0ZSgvKm9Db21wb25lbnQ6IG9iamVjdCwgc0FwcFN0YXRlS2V5OiBzdHJpbmcqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgY3JlYXRlRW1wdHlBcHBTdGF0ZSgvKm9Db21wb25lbnQ6IG9iamVjdCovKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRhc3luYyBjcmVhdGVFbXB0eUFwcFN0YXRlQXN5bmMoLypvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgbmF2aWdhdGUoLypvVGFyZ2V0OiBUYXJnZXQsb0NvbXBvbmVudD86IENvbXBvbmVudCovKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRhc3luYyBpc05hdmlnYXRpb25TdXBwb3J0ZWQoLypvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHRhc3luYyBpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHR9XG5cblx0YXN5bmMgZXhwYW5kQ29tcGFjdEhhc2goLypzSGFzaEZyYWdtZW50OiBzdHJpbmcqLyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0fVxuXG5cdHBhcnNlU2hlbGxIYXNoKC8qc0hhc2g6IHN0cmluZyovKTogUGFyc2VkSGFzaCB7XG5cdFx0cmV0dXJuIHt9IGFzIHVua25vd24gYXMgUGFyc2VkSGFzaDtcblx0fVxuXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogUmV0dXJuVHlwZTxVUkxQYXJzaW5nW1wic3BsaXRIYXNoXCJdPiB7XG5cdFx0LyoqXG5cdFx0ICogRm9yIGFuIEFwcGxpY2F0aW9uIHdpdGhvdXQgU2hlbGwsIHRoZSBoYXNoIGlzIHNpbWlsYXIgdG8gOiAjL1NhbGVzT3JkZXJNYW5hZ2UoMTExMTExMTEtYWFhYS1iYmJiLWNjY2MtZGRkZGVlZWVmZmZmKVxuXHRcdCAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyA6XG5cdFx0ICoge1xuXHRcdFx0c2hlbGxQYXJ0OiBcIlwiLFxuXHRcdFx0YXBwU3BlY2lmaWNSb3V0ZTogXCJTYWxlc09yZGVyTWFuYWdlKDExMTExMTExLWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcIlxuXHRcdH1cblx0XHQgKi9cblx0XHRjb25zdCByZWdleCA9IC8jW14vXSpcXC8oLiopLy5leGVjKHNIYXNoKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2hlbGxQYXJ0OiBcIlwiLFxuXHRcdFx0YXBwU3BlY2lmaWNSb3V0ZTogcmVnZXg/Lmxlbmd0aCA9PT0gMiA/IHJlZ2V4WzFdIDogXCJcIlxuXHRcdH07XG5cdH1cblxuXHRjb25zdHJ1Y3RTaGVsbEhhc2goLypvTmV3U2hlbGxIYXNoOiBvYmplY3QqLyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRzZXREaXJ0eUZsYWcoLypiRGlydHk6IGJvb2xlYW4qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKC8qZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKC8qZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRjcmVhdGVSZW5kZXJlcigpOiBvYmplY3Qge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldFVzZXIoKTogVXNlckluZm8ge1xuXHRcdHJldHVybiB7fSBhcyBVc2VySW5mbztcblx0fVxuXG5cdGdldFVzZXJJbml0aWFscygpOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0aGFzVVNoZWxsKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcigvKmZuTmF2RmlsdGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0dW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoLypmbk5hdkZpbHRlcjogRnVuY3Rpb24qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdHNldEJhY2tOYXZpZ2F0aW9uKC8qZm5DYWxsQmFjaz86IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRzZXRIaWVyYXJjaHkoLyphSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+Ki8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRzZXRUaXRsZSgvKnNUaXRsZTogc3RyaW5nKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdC8vIGluIGNhc2UgdGhlcmUgaXMgbm8gc2hlbGwgd2UgcHJvYmFibHkgbmVlZCB0byBsb29rIGF0IHRoZSBjbGFzc2VzIGJlaW5nIGRlZmluZWQgb24gdGhlIGJvZHlcblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYXBVaVNpemVDb3p5XCIpKSB7XG5cdFx0XHRyZXR1cm4gXCJjb3p5XCI7XG5cdFx0fSBlbHNlIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInNhcFVpU2l6ZUNvbXBhY3RcIikpIHtcblx0XHRcdHJldHVybiBcImNvbXBhY3RcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgZ2V0UHJpbWFyeUludGVudCgvKnNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCovKTogUHJvbWlzZTxMaW5rPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBMaW5rKTtcblx0fVxuXG5cdGFzeW5jIHdhaXRGb3JQbHVnaW5zTG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9XG5cblx0Z2V0VGl0bGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdGFzeW5jIGdldFBlcnNvbmFsaXplcihfcGVyc0lkOiBQZXJzSWQsIF9zY29wZTogU2NvcGUsIF9jb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdGdldFBlcnNEYXRhOiBhc3luYyAoKSA9PlxuXHRcdFx0XHRQcm9taXNlLnJlc29sdmUoe1xuXHRcdFx0XHRcdGhpc3RvcnlFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRzdWdnZXN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdGFwcHM6IHt9XG5cdFx0XHRcdH0pLFxuXHRcdFx0c2V0UGVyc0RhdGE6ICgpID0+IHt9XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoX2tleTogc3RyaW5nLCBfc2NvcGU/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRnZXRTaGVsbENvbmZpZygpOiBTaGVsbENvbmZpZ1R5cGUge1xuXHRcdHJldHVybiB7fSBhcyBTaGVsbENvbmZpZ1R5cGU7XG5cdH1cblxuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRBcHBXYXJtdXA6IHt9LFxuXHRcdFx0UmVuZGVyZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdFVzZXJEZWZhdWx0czoge30sXG5cdFx0XHRVc2VySW1hZ2U6IHt9XG5cdFx0fTtcblx0fVxuXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHBhcnNlUGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uIHtcblx0XHRyZXR1cm4ge30gYXMgRXh0ZW5zaW9uO1xuXHR9XG5cblx0YXN5bmMgZ2V0SW5mcmFtZVVybCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBTaGVsbFNlcnZpY2VzU2V0dGluZ3NcbiAqL1xuZXhwb3J0IHR5cGUgU2hlbGxTZXJ2aWNlc1NldHRpbmdzID0ge1xuXHRzaGVsbENvbnRhaW5lcj86IENvbnRhaW5lcjtcbn07XG5cbnR5cGUgU2hlbGxQbHVnaW5NYW5hZ2VyID0ge1xuXHRnZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZShjYXRlZ29yeTogc3RyaW5nKTogalF1ZXJ5LlByb21pc2U7XG5cdGdldFJlZ2lzdGVyZWRQbHVnaW5zKCk6IFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZTtcbn07XG5cbnR5cGUgUHJpdmF0ZVNoZWxsVXNlciA9IHtcblx0Z2V0SW5pdGlhbHMoKTogc3RyaW5nO1xuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuO1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZXNcbiAqXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZXMgZXh0ZW5kcyBTZXJ2aWNlPFJlcXVpcmVkPFNoZWxsU2VydmljZXNTZXR0aW5ncz4+IGltcGxlbWVudHMgSVNoZWxsU2VydmljZXMge1xuXHRyZXNvbHZlRm4hOiBGdW5jdGlvbjtcblxuXHRyZWplY3RGbiE6ICgpID0+IHZvaWQ7XG5cblx0aW5pdFByb21pc2UhOiBQcm9taXNlPElTaGVsbFNlcnZpY2VzPjtcblxuXHRhcHBsaWNhdGlvbk5hdmlnYXRpb24hOiBOYXZpZ2F0aW9uO1xuXG5cdHVzZXJJbmZvU2VydmljZSE6IFVzZXJJbmZvO1xuXG5cdHVybFBhcnNpbmdTZXJ2aWNlITogVVJMUGFyc2luZztcblxuXHRzaGVsbE5hdmlnYXRpb24hOiBTaGVsbE5hdmlnYXRpb247XG5cblx0c2hlbGxQbHVnaW5NYW5hZ2VyITogU2hlbGxQbHVnaW5NYW5hZ2VyO1xuXG5cdG9TaGVsbENvbnRhaW5lciE6IENvbnRhaW5lciAmIHsgZ2V0VXNlcjogKCkgPT4gUHJpdmF0ZVNoZWxsVXNlciB9O1xuXG5cdHNoZWxsVUlTZXJ2aWNlITogU2hlbGxVSVNlcnZpY2U7XG5cblx0c2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlITogUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cztcblxuXHRpbnN0YW5jZVR5cGUhOiBzdHJpbmc7XG5cblx0bGlua3NDYWNoZSE6IFJlY29yZDxzdHJpbmcsIHsgbGlua3M6IExpbmtbXSB9PjtcblxuXHRzZW1hbnRpY09iamVjdHMhOiBzdHJpbmdbXTtcblxuXHRmbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlITogRnVuY3Rpb247XG5cblx0ZXh0ZW5zaW9uU2VydmljZSE6IEV4dGVuc2lvbjtcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0IGFzIENvbXBvbmVudDtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lciA9IG9Db250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyO1xuXHRcdHRoaXMuaW5zdGFuY2VUeXBlID0gXCJyZWFsXCI7XG5cdFx0dGhpcy5saW5rc0NhY2hlID0ge307XG5cdFx0dGhpcy5mbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlID0gZnVuY3Rpb24gKG9BcmdzOiBMaW5rRmlsdGVyW10pOiBvYmplY3Qge1xuXHRcdFx0Y29uc3QgYUNhY2hlZFNlbWFudGljT2JqZWN0czogTGlua1tdW10gPSBbXTtcblx0XHRcdGNvbnN0IGFOb25DYWNoZWRTZW1hbnRpY09iamVjdHM6IExpbmtGaWx0ZXJbXSA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBsaW5rRmlsdGVyIG9mIG9BcmdzKSB7XG5cdFx0XHRcdGlmICghIWxpbmtGaWx0ZXIgJiYgISFsaW5rRmlsdGVyLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMubGlua3NDYWNoZVtsaW5rRmlsdGVyLnNlbWFudGljT2JqZWN0XSkge1xuXHRcdFx0XHRcdFx0YUNhY2hlZFNlbWFudGljT2JqZWN0cy5wdXNoKHRoaXMubGlua3NDYWNoZVtsaW5rRmlsdGVyLnNlbWFudGljT2JqZWN0XS5saW5rcyk7XG5cdFx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobGlua0ZpbHRlciwgXCJsaW5rc1wiLCB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlOiB0aGlzLmxpbmtzQ2FjaGVbbGlua0ZpbHRlci5zZW1hbnRpY09iamVjdF0ubGlua3Ncblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzLnB1c2gobGlua0ZpbHRlcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4geyBvbGRBcmdzOiBvQXJncywgbmV3QXJnczogYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cywgY2FjaGVkTGlua3M6IGFDYWNoZWRTZW1hbnRpY09iamVjdHMgfTtcblx0XHR9O1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnJlc29sdmVGbiA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnJlamVjdEZuID0gcmVqZWN0O1xuXHRcdH0pO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25TZXJ2aWNlUCA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIk5hdmlnYXRpb25cIik7XG5cdFx0Y29uc3QgdXNlckluZm9TZXJ2aWNlUCA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlVzZXJJbmZvXCIpO1xuXHRcdGNvbnN0IG9VcmxQYXJzaW5nU2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJVUkxQYXJzaW5nXCIpO1xuXHRcdGNvbnN0IG9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlNoZWxsTmF2aWdhdGlvbkludGVybmFsXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFBsdWdpbk1hbmFnZXJQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiUGx1Z2luTWFuYWdlclwiKTtcblx0XHRjb25zdCBvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlBlcnNvbmFsaXphdGlvblYyXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFVJU2VydmljZVByb21pc2UgPSBvQ29tcG9uZW50LmdldFNlcnZpY2UoXCJTaGVsbFVJU2VydmljZVwiKTtcblx0XHRjb25zdCBvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIkV4dGVuc2lvblwiKTtcblxuXHRcdFByb21pc2UuYWxsKFtcblx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlUCxcblx0XHRcdHVzZXJJbmZvU2VydmljZVAsXG5cdFx0XHRvVXJsUGFyc2luZ1NlcnZpY2VQcm9taXNlLFxuXHRcdFx0b1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlLFxuXHRcdFx0b1NoZWxsVUlTZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlLFxuXHRcdFx0b1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UsXG5cdFx0XHRvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZVxuXHRcdF0pXG5cdFx0XHQudGhlbihcblx0XHRcdFx0KFtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZSxcblx0XHRcdFx0XHR1c2VySW5mb1NlcnZpY2UsXG5cdFx0XHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlLFxuXHRcdFx0XHRcdG9TaGVsbE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0b1NoZWxsVUlTZXJ2aWNlLFxuXHRcdFx0XHRcdG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UsXG5cdFx0XHRcdFx0b1NoZWxsUGx1Z2luTWFuYWdlcixcblx0XHRcdFx0XHRvU2hlbGxFeHRlbnNpb25TZXJ2aWNlXG5cdFx0XHRcdF0pID0+IHtcblx0XHRcdFx0XHR0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbiA9IG5hdmlnYXRpb25TZXJ2aWNlIGFzIE5hdmlnYXRpb247XG5cdFx0XHRcdFx0dGhpcy51c2VySW5mb1NlcnZpY2UgPSB1c2VySW5mb1NlcnZpY2UgYXMgVXNlckluZm87XG5cdFx0XHRcdFx0dGhpcy51cmxQYXJzaW5nU2VydmljZSA9IG9VcmxQYXJzaW5nU2VydmljZSBhcyBVUkxQYXJzaW5nO1xuXHRcdFx0XHRcdHRoaXMuc2hlbGxOYXZpZ2F0aW9uID0gb1NoZWxsTmF2aWdhdGlvbiBhcyBTaGVsbE5hdmlnYXRpb247XG5cdFx0XHRcdFx0dGhpcy5zaGVsbFVJU2VydmljZSA9IG9TaGVsbFVJU2VydmljZTtcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSA9IG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UgYXMgUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cztcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGx1Z2luTWFuYWdlciA9IG9TaGVsbFBsdWdpbk1hbmFnZXIgYXMgU2hlbGxQbHVnaW5NYW5hZ2VyO1xuXHRcdFx0XHRcdHRoaXMuZXh0ZW5zaW9uU2VydmljZSA9IG9TaGVsbEV4dGVuc2lvblNlcnZpY2UgYXMgRXh0ZW5zaW9uO1xuXHRcdFx0XHRcdHRoaXMucmVzb2x2ZUZuKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHQpXG5cdFx0XHQuY2F0Y2godGhpcy5yZWplY3RGbik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb25cblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3Mob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9BcmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbGlzdCBvZiBzZW1hbnRpYyBvYmplY3RzIG9mIHRoZSBpbnRlbnRzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZSB3aXRoIGFuIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBzZW1hbnRpYyBvYmplY3RzIG9mIHRoZSBpbnRlbnRzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLCBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgbWVzc2FnZVxuXHQgKi9cblx0YXN5bmMgX19mZXRjaFNlbWFudGljT2JqZWN0KCk6IFByb21pc2U8c3RyaW5nW10+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0U2VtYW50aWNPYmplY3RzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb24gaW4gY2FjaGVcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0aWYgKChvQXJncyBhcyBPYmplY3RbXSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9DYWNoZVJlc3VsdHMgPSB0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUob0FyZ3MpO1xuXG5cdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5uZXdBcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gb0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFMaW5rcyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9DYWNoZVJlc3VsdHMubmV3QXJncyk7XG5cdFx0XHRcdGlmIChhTGlua3MubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0c0xpbmtzOiBSZWNvcmQ8c3RyaW5nLCB7IGxpbmtzOiBMaW5rW10gfT4gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2ldLmxlbmd0aCA+IDAgJiYgb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2ldWzBdLmxpbmtzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0c0xpbmtzW29DYWNoZVJlc3VsdHMubmV3QXJnc1tpXVswXS5zZW1hbnRpY09iamVjdF0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0bGlua3M6IGFMaW5rc1tpXVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR0aGlzLmxpbmtzQ2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMubGlua3NDYWNoZSwgb1NlbWFudGljT2JqZWN0c0xpbmtzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gYUxpbmtzO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGFNZXJnZWRMaW5rcyA9IFtdO1xuXHRcdFx0XHRcdGxldCBqID0gMDtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBvQ2FjaGVSZXN1bHRzLm9sZEFyZ3MpIHtcblx0XHRcdFx0XHRcdGlmIChqIDwgYUxpbmtzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2pdLmxlbmd0aCA+IDAgJiYgaXRlbVswXS5zZW1hbnRpY09iamVjdCA9PT0gb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2pdWzBdLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goYUxpbmtzW2pdKTtcblx0XHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goaXRlbVswXS5saW5rcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFNZXJnZWRMaW5rcy5wdXNoKGl0ZW1bMF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gYU1lcmdlZExpbmtzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgcmV0cmlldmUgdGhlIFNoZWxsQ29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBwcmVkZWZpbmVkIHNoZWxsQ29udGFpbmVyIG1ldGhvZHNcblx0ICovXG5cdGdldFNoZWxsQ29udGFpbmVyKCk6IENvbnRhaW5lciB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyO1xuXHR9XG5cblx0YXN5bmMgZ2V0SW5mcmFtZVVybCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IHVzaGVsbENvbnRhaW5lciA9IHRoaXMuZ2V0U2hlbGxDb250YWluZXIoKTtcblx0XHRsZXQgYXBwVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHVzaGVsbENvbnRhaW5lcj8uaW5BcHBSdW50aW1lKCkpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGFwcFVybCA9IGF3YWl0IHVzaGVsbENvbnRhaW5lci5nZXRGTFBVcmxBc3luYyh0cnVlKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGdldHRpbmcgdGhlIEZMUCBVUkxcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFwcFVybDtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgdG9FeHRlcm5hbCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIE5hdmlnYXRpb24gQXJndW1lbnRzIGFuZCBvQ29tcG9uZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gb05hdkFyZ3VtZW50c0FyciBBbmRcblx0ICogQHBhcmFtIG9Db21wb25lbnQgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+dG9FeHRlcm5hbCBhcmd1bWVudHNcblx0ICovXG5cdHRvRXh0ZXJuYWwob05hdkFyZ3VtZW50c0FycjogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0dGhpcy5uYXZpZ2F0ZShvTmF2QXJndW1lbnRzQXJyLCBvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHRhcmdldCBzdGFydHVwQXBwU3RhdGVcblx0ICogV2lsbCBjaGVjayB0aGUgZXhpc3RhbmNlIG9mIHRoZSBTaGVsbENvbnRhaW5lciBhbmQgcmV0cmlldmUgdGhlIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uXG5cdCAqIHNlcnZpY2UgcmVmZXJlbmNlIGNhbGwgdGhlIGdldFN0YXJ0dXBBcHBTdGF0ZSBtZXRob2QuIEluIGNhc2Ugc2VydmljZSBpcyBub3QgYXZhaWxhYmxlIG9yIGFueSBleGNlcHRpb25cblx0ICogbWV0aG9kIHRocm93cyBleGNlcHRpb24gZXJyb3IgaW4gY29uc29sZS5cblx0ICpcblx0ICogQHBhcmFtIG9BcmdzIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldFN0YXJ0dXBBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIE9iamVjdFxuXHQgKi9cblx0YXN5bmMgZ2V0U3RhcnR1cEFwcFN0YXRlKG9BcmdzOiBDb21wb25lbnQpOiBQcm9taXNlPHVuZGVmaW5lZCB8IFN0YXJ0dXBBcHBTdGF0ZT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRTdGFydHVwQXBwU3RhdGUob0FyZ3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBiYWNrVG9QcmV2aW91c0FwcCBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICpcblx0ICogQHJldHVybnMgU29tZXRoaW5nIHRoYXQgaW5kaWNhdGUgd2UndmUgbmF2aWdhdGVkXG5cdCAqL1xuXHRhc3luYyBiYWNrVG9QcmV2aW91c0FwcCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uYmFja1RvUHJldmlvdXNBcHAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaHJlZkZvckV4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogQHBhcmFtIG9Db21wb25lbnQgVGhlIGFwcENvbXBvbmVudFxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5ocmVmRm9yRXh0ZXJuYWwgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBzdHJpbmdcblx0ICovXG5cdGFzeW5jIGhyZWZGb3JFeHRlcm5hbChvQXJnczogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0SHJlZihvQXJncywgb0NvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIHByb21pc2UgcmVzb2x2aW5nIHRvIGEgVVJMIHRoYXQgbGF1bmNoZXMgYW4gYXBwIHdpdGggY2VydGFpbiBwYXJhbWV0ZXJzLlxuXHQgKiBUaGlzIEFQSSBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IHRoZSBpbnRlcm5hbCBzaGVsbCBoYXNoIGZvcm1hdCBpbnRvIHRoZSBVUkwgZm9ybWF0IGZvciB1c2UgaW4gbGluayB0YWdzLlxuXHQgKiBUaGUgcmVzdWx0aW5nIGhyZWYgaXMgZnVsbHkgZW5jb2RlZCBhbmQgY2Fubm90IGJlIHVzZWQgaW4gb3RoZXIgQVBJcyB0aGF0IGV4cGVjdCB0aGUgaW50ZXJuYWwgZGVjb2RlZCBoYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gW29UYXJnZXRdIFRoZSBuYXZpZ2F0aW9uIHRhcmdldCB0byB0cmFuc2Zvcm0uIFdoZW4sIG9taXR0ZWQgdGhlIGN1cnJlbnQgaGFzaCBpcyB1c2VkIGFzIHRoZSBiYXNpcyBmb3IgdGhlIGNhbGN1bGF0aW9uLlxuXHQgKiBAcGFyYW0gW29Db21wb25lbnRdIEEgVUk1IGNvbXBvbmVudCwgdXNlZCB0byBsb2dpY2FsbHkgYXR0YWNoIGFueSByZWxhdGVkIGFwcCBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgZW5jb2RlZCBocmVmLlxuXHQgKi9cblx0YXN5bmMgZ2V0SHJlZihvVGFyZ2V0OiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRIcmVmKG9UYXJnZXQsIG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRBcHBTdGF0ZSBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZSB3aXRoIG9Db21wb25lbnQgYW5kIG9BcHBTdGF0ZUtleS5cblx0ICpcblx0ICogQHBhcmFtIG9Db21wb25lbnRcblx0ICogQHBhcmFtIHNBcHBTdGF0ZUtleSBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgZ2V0QXBwU3RhdGUob0NvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRBcHBTdGF0ZShvQ29tcG9uZW50LCBzQXBwU3RhdGVLZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjcmVhdGVFbXB0eUFwcFN0YXRlIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggb0NvbXBvbmVudC5cblx0ICpcblx0ICogQHBhcmFtIG9Db21wb25lbnQgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Y3JlYXRlRW1wdHlBcHBTdGF0ZSBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgY3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQpOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uY3JlYXRlRW1wdHlBcHBTdGF0ZShvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggTmF2aWdhdGlvbiBBcmd1bWVudHMgYW5kIG9Db21wb25lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBhVGFyZ2V0c1xuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5pc05hdmlnYXRpb25TdXBwb3J0ZWQgYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdGFzeW5jIGlzTmF2aWdhdGlvblN1cHBvcnRlZChhVGFyZ2V0czogVGFyZ2V0W10sIG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmlzTmF2aWdhdGlvblN1cHBvcnRlZChhVGFyZ2V0cywgb0NvbXBvbmVudCkgYXMgdW5rbm93biBhcyBQcm9taXNlPHsgc3VwcG9ydGVkOiBib29sZWFuIH1bXT47XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHRvIGEgc3BlY2lmaWVkIHRhcmdldCBvdXRzaWRlIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBhcHBsaWNhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG9UYXJnZXQgVGhlIG5hdmlnYXRpb24gdGFyZ2V0LlxuXHQgKiBAcGFyYW0gW29Db21wb25lbnRdIEEgVUk1IGNvbXBvbmVudCwgdXNlZCB0byBsb2dpY2FsbHkgYXR0YWNoIGFueSByZWxhdGVkIGFwcCBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmluZyBvbmNlIHRoZSBuYXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQuIFRoZSBQcm9taXNlIG1pZ2h0IG5ldmVyIHJlamVjdCBvciByZXNvbHZlXG5cdCAqICAgICAgICAgICAgICAgICAgICB3aGVuIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIG5hdmlnYXRpb24uXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZShvVGFyZ2V0OiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24ubmF2aWdhdGUob1RhcmdldCwgb0NvbXBvbmVudCkpIGFzIHVua25vd24gYXMgUHJvbWlzZTx1bmRlZmluZWQ+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBpc0luaXRpYWxOYXZpZ2F0aW9uQXN5bmMgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBib29sZWFuXG5cdCAqL1xuXHRhc3luYyBpc0luaXRpYWxOYXZpZ2F0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5pc0luaXRpYWxOYXZpZ2F0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGV4cGFuZENvbXBhY3RIYXNoIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2hGcmFnbWVudCBBbiAoaW50ZXJuYWwgZm9ybWF0KSBzaGVsbCBoYXNoXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGUgc3VjY2VzcyBoYW5kbGVyIG9mIHRoZSByZXNvbHZlIHByb21pc2UgZ2V0IGFuIGV4cGFuZGVkIHNoZWxsIGhhc2ggYXMgZmlyc3QgYXJndW1lbnRcblx0ICovXG5cdGFzeW5jIGV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHNIYXNoRnJhZ21lbnQ7IC8vdGhpcy5uYXZUYXJnZXRSZXNvbHV0aW9uLmV4cGFuZENvbXBhY3RIYXNoKHNIYXNoRnJhZ21lbnQpO1xuXHR9XG5cblx0Z2V0SGFzaCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgIyR7dGhpcy51cmxQYXJzaW5nU2VydmljZS5nZXRTaGVsbEhhc2god2luZG93LmxvY2F0aW9uLmhyZWYpfWA7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIG1hcCBvZiBhbGwgdGhlIHBsdWdpbnMgd2hpY2ggYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgUGx1Z2luTWFuYWdlciwgc29ydGVkIGJ5IHN1cHBvcnRlZCBwbHVnaW4gY2F0ZWdvcmllcy5cblx0ICpcblx0ICogQHJldHVybnMgTWFwIG9mIHJlZ2lzdGVyZWQgcGx1Z2luc1xuXHQgKi9cblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy5zaGVsbFBsdWdpbk1hbmFnZXIuZ2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBmb3IgdGhlIG9wdGltaXN0aWMgYmF0Y2ggcGx1Z2luIHNldHVwIGluIHRoZSBGTFAuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIG9wdGltaXN0aWMgYmF0Y2ggcGx1Z2luIGlzIHNldCB1cCBhbmQgZW5hYmxlZC5cblx0ICovXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnMgPSB0aGlzLmdldFJlZ2lzdGVyZWRQbHVnaW5zKCkuUmVuZGVyZXJFeHRlbnNpb25zO1xuXHRcdGlmIChcblx0XHRcdGZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnM/Lmhhc093blByb3BlcnR5KFwiTUFOQUdFX0ZFX0NBQ0hFU1wiKSAmJlxuXHRcdFx0ISEoZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+PikuTUFOQUdFX0ZFX0NBQ0hFUy5lbmFibGVkXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcGFyc2VTaGVsbEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5wYXJzZVNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgVGhlIHBhcnNlZCB1cmxcblx0ICovXG5cdHBhcnNlU2hlbGxIYXNoKHNIYXNoOiBzdHJpbmcpOiBQYXJzZWRIYXNoIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5wYXJzZVNoZWxsSGFzaChzSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNwbGl0SGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqXG5cdCAqIEBwYXJhbSBzSGFzaCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLlVSTFBhcnNpbmc9PnNwbGl0SGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0c3BsaXRIYXNoKHNIYXNoOiBzdHJpbmcpOiB7IHNoZWxsUGFydD86IHN0cmluZzsgYXBwU3BlY2lmaWNSb3V0ZT86IHN0cmluZyB9IHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5zcGxpdEhhc2goc0hhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjb25zdHJ1Y3RTaGVsbEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gb05ld1NoZWxsSGFzaCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLlVSTFBhcnNpbmc9PmNvbnN0cnVjdFNoZWxsSGFzaCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgU2hlbGwgSGFzaCBzdHJpbmdcblx0ICovXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLmNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0RGlydHlGbGFnIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0gYkRpcnR5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLnNldERpcnR5RmxhZyBhcmd1bWVudHNcblx0ICovXG5cdHNldERpcnR5RmxhZyhiRGlydHk6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5zZXREaXJ0eUZsYWcoYkRpcnR5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUgcHJvdmlkZXIgY2FsbGJhY2sgbWV0aG9kLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgYXJndW1lbnRzXG5cdCAqL1xuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogKCkgPT4gYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZSBwcm92aWRlciBjYWxsYmFjayBtZXRob2QuXG5cdCAqXG5cdCAqIEBwYXJhbSBmbkRpcnR5U3RhdGVQcm92aWRlciBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5kZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIGFyZ3VtZW50c1xuXHQgKi9cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcjogKCkgPT4gYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyLmRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBjcmVhdGVSZW5kZXJlciBtZXRob2Qgb2YgdXNoZWxsIGNvbnRhaW5lci5cblx0ICpcblx0ICogQHJldHVybnMgUmV0dXJucyByZW5kZXJlciBvYmplY3Rcblx0ICovXG5cdGFzeW5jIGNyZWF0ZVJlbmRlcmVyKCk6IFByb21pc2U8Q29udHJvbCB8IENvbXBvbmVudENvbnRhaW5lcj4ge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5jcmVhdGVSZW5kZXJlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRVc2VyIG1ldGhvZCBvZiB1c2hlbGwgY29udGFpbmVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIFVzZXIgb2JqZWN0XG5cdCAqL1xuXHRnZXRVc2VyKCk6IFVzZXJJbmZvIHtcblx0XHRyZXR1cm4gdGhpcy51c2VySW5mb1NlcnZpY2U7XG5cdH1cblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0VXNlcigpLmlzSmFtQWN0aXZlKCk7XG5cdH1cblxuXHRnZXRVc2VySW5pdGlhbHMoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0VXNlcigpLmdldEluaXRpYWxzKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjaGVjayBpZiB1c2hlbGwgY29udGFpbmVyIGlzIGF2YWlsYWJsZSBvciBub3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZVxuXHQgKi9cblx0aGFzVVNoZWxsKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCByZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIgbWV0aG9kIG9mIHNoZWxsTmF2aWdhdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGZuTmF2RmlsdGVyIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gcmVnaXN0ZXJcblx0ICovXG5cdHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsTmF2aWdhdGlvbi5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCB1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciBtZXRob2Qgb2Ygc2hlbGxOYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5OYXZGaWx0ZXIgVGhlIGZpbHRlciBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyXG5cdCAqL1xuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHR0aGlzLnNoZWxsTmF2aWdhdGlvbi51bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldEJhY2tOYXZpZ2F0aW9uIG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBiYWNrIGJ1dHRvbiBpbiB0aGUgc2hlbGwgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5DYWxsQmFjayBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCBpbiB0aGUgVUkuXG5cdCAqL1xuXHRzZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldEhpZXJhcmNoeSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gaGllcmFyY2h5IGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBbYUhpZXJhcmNoeUxldmVsc10gQW4gYXJyYXkgcmVwcmVzZW50aW5nIGhpZXJhcmNoaWVzIG9mIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGFwcC5cblx0ICovXG5cdHNldEhpZXJhcmNoeShhSGllcmFyY2h5TGV2ZWxzOiBvYmplY3RbXSk6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxVSVNlcnZpY2Uuc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHBhcmFtIFtzVGl0bGVdIFRoZSBuZXcgdGl0bGUuIFRoZSBkZWZhdWx0IHRpdGxlIGlzIHNldCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBnaXZlbi5cblx0ICovXG5cdHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbFVJU2VydmljZS5zZXRUaXRsZShzVGl0bGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBnZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHRpdGxlIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICovXG5cdGdldFRpdGxlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxVSVNlcnZpY2UuZ2V0VGl0bGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnRseSBkZWZpbmVkIGNvbnRlbnQgZGVuc2l0eS5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGNvbnRlbnQgZGVuc2l0eSB2YWx1ZVxuXHQgKi9cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0VXNlcigpLmdldENvbnRlbnREZW5zaXR5KCk7XG5cdH1cblxuXHQvKipcblx0ICogRm9yIGEgZ2l2ZW4gc2VtYW50aWMgb2JqZWN0LCB0aGlzIG1ldGhvZCBjb25zaWRlcnMgYWxsIGFjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZW1hbnRpYyBvYmplY3QgYW5kXG5cdCAqIHJldHVybnMgdGhlIG9uZSB0YWdnZWQgYXMgYSBcInByaW1hcnlBY3Rpb25cIi4gSWYgbm8gaW5ib3VuZCB0YWdnZWQgYXMgXCJwcmltYXJ5QWN0aW9uXCIgZXhpc3RzLCB0aGVuIGl0IHJldHVybnNcblx0ICogdGhlIGludGVudCBvZiB0aGUgZmlyc3QgaW5ib3VuZCAoYWZ0ZXIgc29ydGluZyBoYXMgYmVlbiBhcHBsaWVkKSBtYXRjaGluZyB0aGUgYWN0aW9uIFwiZGlzcGxheUZhY3RTaGVldFwiLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1NlbWFudGljT2JqZWN0IFNlbWFudGljIG9iamVjdC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFNlZSAjQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24jZ2V0TGlua3MgZm9yIGRlc2NyaXB0aW9uLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgaW50ZW50IGlmIGl0IGV4aXN0cy5cblx0ICovXG5cdGFzeW5jIGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogTGlua0ZpbHRlcik6IFByb21pc2U8TGluaz4ge1xuXHRcdGNvbnN0IHByaW1hcnlJbnRlbnQgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdCwgbVBhcmFtZXRlcnMpO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHByaW1hcnlJbnRlbnQpKSB7XG5cdFx0XHRyZXR1cm4gcHJpbWFyeUludGVudFswXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHByaW1hcnlJbnRlbnQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFdhaXQgZm9yIHRoZSByZW5kZXIgZXh0ZW5zaW9ucyBwbHVnaW4gdG8gYmUgbG9hZGVkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHdlIGFyZSBhYmxlIHRvIHdhaXQgZm9yIGl0LCBvdGhlcndpc2Ugd2UgY291bGRuJ3QgYW5kIGNhbm5vdCByZWx5IG9uIGl0LlxuXHQgKi9cblx0YXN5bmMgd2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLnNoZWxsUGx1Z2luTWFuYWdlcj8uZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UpIHtcblx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9jYXRjaC1vci1yZXR1cm5cblx0XHRcdFx0dGhpcy5zaGVsbFBsdWdpbk1hbmFnZXJcblx0XHRcdFx0XHQuZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UoXCJSZW5kZXJlckV4dGVuc2lvbnNcIilcblx0XHRcdFx0XHQuZmFpbCgob0Vycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yIGFzIHN0cmluZywgXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaGVsbFNlcnZpY2VzRmFjdG9yeS53YWl0Rm9yUGx1Z2luc0xvYWRcIik7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHJlc29sdmUodHJ1ZSkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcGVyc29uYWxpemVyIGZyb20gdGhlIHNoZWxsIHNlcnZpY2UuXG5cdCAqIFdlIHNldCBzb21lIGRlZmF1bHRzIGZvciB0aGUgc2NvcGUgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gcGVyc0lkIFBlcnNvbmFsaXphdGlvbiBvYmplY3Rcblx0ICogQHBhcmFtIHNjb3BlIFNjb3BlIG9iamVjdFxuXHQgKiBAcGFyYW0gY29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFBlcnNvbmFsaXplciBvYmplY3Qgd2hpY2ggaGFuZGxlcyBwZXJzb25hbGl6YXRpb25cblx0ICovXG5cdGFzeW5jIGdldFBlcnNvbmFsaXplcihwZXJzSWQ6IFBlcnNJZCwgc2NvcGU6IFNjb3BlLCBjb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRzY29wZSA9IHtcblx0XHRcdC8vIG1lcmdlIHNvbWUgZGVmYXVsdHNcblx0XHRcdGtleUNhdGVnb3J5OiB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5jb25zdGFudHMua2V5Q2F0ZWdvcnkuRklYRURfS0VZLFxuXHRcdFx0d3JpdGVGcmVxdWVuY3k6IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmNvbnN0YW50cy53cml0ZUZyZXF1ZW5jeS5MT1csXG5cdFx0XHRjbGllbnRTdG9yYWdlQWxsb3dlZDogZmFsc2UsXG5cdFx0XHR2YWxpZGl0eTogSW5maW5pdHksXG5cdFx0XHQuLi5zY29wZVxuXHRcdH07XG5cdFx0cmV0dXJuIChhd2FpdCB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5nZXRQZXJzb25hbGl6ZXIocGVyc0lkLCBzY29wZSwgY29tcG9uZW50KSkgYXMgUGVyc29uYWxpemVyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIGEgY29udGFpbmVyIGlkZW50aWZpZWQgYnkgc0NvbnRhaW5lcktleS5cblx0ICpcblx0ICogQHBhcmFtIGtleSBDb250YWluZXIga2V5XG5cdCAqIEBwYXJhbSBzY29wZSBTY29wZSBvYmplY3Rcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCB3aGVuIHRoZSBjb250YWluZXIgaXMgZGVsZXRlZFxuXHQgKi9cblx0YXN5bmMgZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKGtleTogc3RyaW5nLCBzY29wZT86IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5kZWxldGVDb250YWluZXIoa2V5LCBzY29wZSBhcyB1bmtub3duIGFzIG9iamVjdCkgYXMgUHJvbWlzZTx2b2lkPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNoZWxsIGNvbmZpZyBmcm9tIHRoZSB3aW5kb3dzIG9iamVjdC5cblx0ICpcblx0ICogQHJldHVybnMgU2hlbGwgY29uZmlnIG9iamVjdFxuXHQgKi9cblx0Z2V0U2hlbGxDb25maWcoKTogU2hlbGxDb25maWdUeXBlIHtcblx0XHRyZXR1cm4gKHdpbmRvdyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIG9iamVjdD4pW1wic2FwLXVzaGVsbC1jb25maWdcIl0gYXMgU2hlbGxDb25maWdUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlIHBhcmFtZXRlcnMgZnJvbSBhIFVSSSBxdWVyeSBzdHJpbmcgKHN0YXJ0aW5nIHdpdGggPykgaW50byBhIHBhcmFtZXRlciBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB1cmwgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogUGFyYW1ldGVyIHN0cmluZ1xuXHQgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmcgc3RyaW5nIGFycmF5c1xuXHQgKi9cblx0cGFyc2VQYXJhbWV0ZXJzKHVybDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5wYXJzZVBhcmFtZXRlcnModXJsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNoZWxsIGV4dGVuc2lvbiBzZXJ2aWNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBTaGVsbCBleHRlbnNpb24gc2VydmljZVxuXHQgKi9cblx0Z2V0RXh0ZW5zaW9uU2VydmljZSgpOiBFeHRlbnNpb24ge1xuXHRcdHJldHVybiB0aGlzLmV4dGVuc2lvblNlcnZpY2U7XG5cdH1cbn1cblxuLyoqXG4gKiBTZXJ2aWNlIEZhY3RvcnkgZm9yIHRoZSBTaGVsbFNlcnZpY2VzXG4gKlxuICovXG5jbGFzcyBTaGVsbFNlcnZpY2VzRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PFNoZWxsU2VydmljZXNTZXR0aW5ncz4ge1xuXHQvKipcblx0ICogQ3JlYXRlcyBlaXRoZXIgYSBzdGFuZGFyZCBvciBhIG1vY2sgU2hlbGwgc2VydmljZSBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBzZXJ2aWNlQ29udGV4dCBUaGUgc2hlbGxzZXJ2aWNlIGNvbnRleHRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGZvciBhIHNoZWxsIHNlcnZpY2UgaW1wbGVtZW50YXRpb25cblx0ICogQHNlZSBTZXJ2aWNlRmFjdG9yeSNjcmVhdGVJbnN0YW5jZVxuXHQgKi9cblx0YXN5bmMgY3JlYXRlSW5zdGFuY2Uoc2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFNoZWxsU2VydmljZXNTZXR0aW5ncz4pOiBQcm9taXNlPElTaGVsbFNlcnZpY2VzPiB7XG5cdFx0c2VydmljZUNvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXIgPSBzYXAudWkucmVxdWlyZShcInNhcC91c2hlbGwvQ29udGFpbmVyXCIpO1xuXHRcdGNvbnN0IHNoZWxsU2VydmljZSA9IHNlcnZpY2VDb250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyXG5cdFx0XHQ/IG5ldyBTaGVsbFNlcnZpY2VzKHNlcnZpY2VDb250ZXh0IGFzIFNlcnZpY2VDb250ZXh0PFJlcXVpcmVkPFNoZWxsU2VydmljZXNTZXR0aW5ncz4+KVxuXHRcdFx0OiBuZXcgU2hlbGxTZXJ2aWNlTW9jayhzZXJ2aWNlQ29udGV4dCk7XG5cdFx0YXdhaXQgc2hlbGxTZXJ2aWNlLmluaXRQcm9taXNlO1xuXHRcdC8vIEVucmljaCB0aGUgYXBwQ29tcG9uZW50IHdpdGggdGhpcyBtZXRob2Rcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBzZXJ2aWNlQ29udGV4dC5zY29wZU9iamVjdDtcblx0XHRhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcyA9ICgpOiBJU2hlbGxTZXJ2aWNlcyA9PiBzaGVsbFNlcnZpY2U7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGFwcENvbXBvbmVudC5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsKSB7XG5cdFx0XHRsZXQgc2VtYW50aWNPYmplY3RzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RzID0gYXdhaXQgc2hlbGxTZXJ2aWNlLl9fZmV0Y2hTZW1hbnRpY09iamVjdCgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY2FsbGluZyBnZXRTZW1hbnRpY09iamVjdHNcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdChpbnRlcm5hbE1vZGVsIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoXCIvc2VtYW50aWNPYmplY3RzXCIsIHNlbWFudGljT2JqZWN0cyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzaGVsbFNlcnZpY2U7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2hlbGxTZXJ2aWNlc0ZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7OztFQTBLQTtBQUNBO0FBQ0E7QUFDQTtFQUhBLElBSU1BLGdCQUFnQjtJQUFBO0lBQUE7TUFBQTtJQUFBO0lBQUE7SUFBQSxPQU9yQkMsSUFBSSxHQUFKLGdCQUFhO01BQ1osSUFBSSxDQUFDQyxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBbUI7TUFDMUQsSUFBSSxDQUFDQyxZQUFZLEdBQUcsTUFBTTtJQUMzQixDQUFDO0lBQUEsT0FFS0MsUUFBUSxHQUFkLHlCQUFlO0lBQUEsRUFBc0M7TUFDcEQsT0FBT0gsT0FBTyxDQUFDQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFBQSxPQUVLRyxxQkFBcUIsR0FBM0IsdUNBQWlEO01BQ2hELE9BQU9KLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUEsT0FFS0ksaUJBQWlCLEdBQXZCLGtDQUF3QjtJQUFBLEVBQXNDO01BQzdELE9BQU9MLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUEsT0FFREssVUFBVSxHQUFWLHFCQUFXO0lBQUEsRUFBK0Q7TUFDekU7SUFBQSxDQUNBO0lBQUEsT0FFS0Msa0JBQWtCLEdBQXhCLG1DQUF5QjtJQUFBLEVBQXlEO01BQ2pGLE9BQU9QLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDTyxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUFBLE9BRURDLFdBQVcsR0FBWCx1QkFBdUI7TUFDdEIsT0FBTyxLQUFLO0lBQ2IsQ0FBQztJQUFBLE9BRURD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
|
|
@@ -164,6 +164,8 @@ export interface IShellServices {
|
|
|
164
164
|
parseParameters(url: string): ReturnType<URLParsing["parseParameters"]>;
|
|
165
165
|
|
|
166
166
|
getExtensionService(): Extension;
|
|
167
|
+
|
|
168
|
+
getInframeUrl(): Promise<string | undefined>;
|
|
167
169
|
}
|
|
168
170
|
|
|
169
171
|
/**
|
|
@@ -385,6 +387,10 @@ class ShellServiceMock extends Service<ShellServicesSettings> implements IShellS
|
|
|
385
387
|
getExtensionService(): Extension {
|
|
386
388
|
return {} as Extension;
|
|
387
389
|
}
|
|
390
|
+
|
|
391
|
+
async getInframeUrl(): Promise<string | undefined> {
|
|
392
|
+
return Promise.resolve("");
|
|
393
|
+
}
|
|
388
394
|
}
|
|
389
395
|
|
|
390
396
|
/**
|
|
@@ -603,6 +609,19 @@ class ShellServices extends Service<Required<ShellServicesSettings>> implements
|
|
|
603
609
|
return this.oShellContainer;
|
|
604
610
|
}
|
|
605
611
|
|
|
612
|
+
async getInframeUrl(): Promise<string | undefined> {
|
|
613
|
+
const ushellContainer = this.getShellContainer();
|
|
614
|
+
let appUrl: string | undefined;
|
|
615
|
+
if (ushellContainer?.inAppRuntime()) {
|
|
616
|
+
try {
|
|
617
|
+
appUrl = await ushellContainer.getFLPUrlAsync(true);
|
|
618
|
+
} catch (error) {
|
|
619
|
+
Log.error("Error while getting the FLP URL", error as string);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
return appUrl;
|
|
623
|
+
}
|
|
624
|
+
|
|
606
625
|
/**
|
|
607
626
|
* Will call toExternal method of CrossApplicationNavigation service with Navigation Arguments and oComponent.
|
|
608
627
|
*
|