@sapui5/sap.fe.core 1.136.9 → 1.136.11
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/ActionRuntime.js +48 -23
- package/src/sap/fe/core/ActionRuntime.ts +61 -35
- package/src/sap/fe/core/AppStateHandler.js +4 -5
- package/src/sap/fe/core/AppStateHandler.ts +6 -5
- package/src/sap/fe/core/CommonUtils.js +3 -3
- package/src/sap/fe/core/CommonUtils.ts +2 -2
- package/src/sap/fe/core/PageController.controller.js +10 -0
- package/src/sap/fe/core/PageController.controller.ts +3 -0
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +4 -4
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +5 -2
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +26 -16
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +37 -16
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +20 -10
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +29 -13
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +12 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +14 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +5 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -6
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +8 -5
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +1 -0
- package/src/sap/fe/core/converters/controls/Common/Action.js +15 -1
- package/src/sap/fe/core/converters/controls/Common/Action.ts +21 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +54 -46
- package/src/sap/fe/core/converters/controls/Common/Table.ts +65 -45
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +26 -6
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +32 -10
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +75 -18
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +79 -25
- package/src/sap/fe/core/helpers/MetaModelFunction.js +10 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +9 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +5 -2
- package/src/sap/fe/core/helpers/ModelHelper.ts +7 -3
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle_ar.properties +1 -1
- package/src/sap/fe/core/messagebundle_bg.properties +3 -3
- package/src/sap/fe/core/messagebundle_es.properties +1 -1
- package/src/sap/fe/core/messagebundle_fr.properties +1 -1
- package/src/sap/fe/core/messagebundle_ko.properties +1 -1
- package/src/sap/fe/core/messagebundle_no.properties +2 -2
- package/src/sap/fe/core/rootView/RootViewBaseController.js +3 -2
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +2 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +4 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +5 -2
- package/ui5.yaml +1 -0
|
@@ -512,7 +512,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/contro
|
|
|
512
512
|
if (isPathAnnotationExpression(externalIdProperty)) {
|
|
513
513
|
const externalIdPropPath = externalIdProperty.path;
|
|
514
514
|
const propertiesToRequest = [externalIdPropPath.substring(0, externalIdPropPath.lastIndexOf("/"))];
|
|
515
|
-
const textProperty = metaPath.getMetaPathForPath(externalIdPropPath)?.getTarget().annotations.Common?.Text;
|
|
515
|
+
const textProperty = metaPath.getMetaPathForPath(metaPath.getPath() + "/" + externalIdPropPath)?.getTarget().annotations.Common?.Text;
|
|
516
|
+
if (value === null) {
|
|
517
|
+
context.setProperty(externalIdPropPath, null, null);
|
|
518
|
+
}
|
|
516
519
|
if (isPathAnnotationExpression(textProperty)) {
|
|
517
520
|
const textPropPath = textProperty.path;
|
|
518
521
|
if (textPropPath.includes("/")) {
|
|
@@ -865,4 +868,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/contro
|
|
|
865
868
|
};
|
|
866
869
|
return ModelHelper;
|
|
867
870
|
}, false);
|
|
868
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2RlbEhlbHBlciIsImRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJtZXRhTW9kZWwiLCJlbnRpdHlDb250YWluZXIiLCJnZXRPYmplY3QiLCJlbnRpdHlTZXROYW1lIiwiJGtpbmQiLCJpc0RyYWZ0U3VwcG9ydGVkIiwicGF0aCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJvYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiY3VycmVudEVudGl0eVNldCIsInRhcmdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsImlzRHJhZnRSb290IiwiYklzRHJhZnROb2RlIiwiaXNEcmFmdE5vZGUiLCJiSXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50IiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0YXJnZXRPYmplY3QiLCJjb250YWluc1RhcmdldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJEcmFmdE5vZGUiLCJpc01ldGFQYXRoRHJhZnRTdXBwb3J0ZWQiLCJnZXRDbG9zZXN0RW50aXR5U2V0IiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWRGcm9tQ29udmVydGVyQ29udGV4dCIsImNvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImVudGl0eVNldHMiLCJzb21lIiwiZW50aXR5U2V0IiwiU2hhcmVBY3Rpb24iLCJ1bmRlZmluZWQiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsIm1ldGFPYmplY3QiLCJ0ZW1wbGF0ZUludGVyZmFjZSIsIm9NZXRhTW9kZWwiLCJjb250ZXh0IiwiZ2V0TW9kZWwiLCJfXyRmZUlzQ29sbGFib3JhdGlvbkRyYWZ0RW5hYmxlZCIsIm9FbnRpdHlDb250YWluZXIiLCJzRW50aXR5U2V0IiwiZ2V0RHJhZnRSb290UGF0aCIsIm9Db250ZXh0IiwiZ2V0TWV0YU1vZGVsIiwiZ2V0Um9vdFBhdGgiLCJzUGF0aCIsIm1vZGVsIiwiZmlyc3RJdGVyYXRpb24iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzSXRlcmF0aW9uUGF0aCIsIlJlZ0V4cCIsImV4ZWMiLCJzRW50aXR5UGF0aCIsImdldE1ldGFQYXRoIiwibURhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldENvbnRleHQiLCJnZXRQYXRoIiwiZ2V0U3RpY2t5Um9vdFBhdGgiLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImdldFRhcmdldEVudGl0eVNldCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0RW50aXR5U2V0UGF0aCIsIm9kYXRhTWV0YU1vZGVsIiwiZW50aXR5U2V0UGF0aCIsInNwbGl0IiwiZmlsdGVyIiwiZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmciLCJqb2luIiwicGF0aFBhcnRzIiwiaW5pdGlhbFBhdGhPYmplY3QiLCJncm93aW5nUGF0aCIsInBlbmRpbmdOYXZQcm9wQmluZGluZyIsInBhdGhPYmplY3QiLCJyZWR1Y2UiLCJwYXRoVW5kZXJDb25zdHJ1Y3Rpb24iLCJwYXRoUGFydCIsImlkeCIsImRlbGltaXRlciIsInRlbXBQYXRoIiwibmF2UHJvcEJpbmRpbmdzIiwibmF2UHJvcEJpbmRpbmdUb0NoZWNrIiwiT2JqZWN0Iiwia2V5cyIsImhhc093blByb3BlcnR5IiwicmVwbGFjZSIsImdldEFjdGlvblBhcmFtZXRlckl0ZW1zTW9kZWxQYXRoIiwib1BhcmFtZXRlciIsIiROYW1lIiwic1BhdGhQYXJ0IiwiZW5oYW5jZUludGVybmFsSlNPTk1vZGVsIiwib0ludGVybmFsTW9kZWwiLCJmbkJpbmRDb250ZXh0IiwiYmluZENvbnRleHQiLCJtUGFyYW1ldGVycyIsIm9FdmVudHMiLCJjb250ZXh0QmluZGluZyIsImFwcGx5IiwiZm5HZXRCb3VuZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvQm91bmRDb250ZXh0Iiwic2V0UHJvcGVydHkiLCJwcm9wZXJ0eVBhdGgiLCJ2YWx1ZSIsInByb3BlcnR5UGF0aFNwbGl0IiwiaSIsImdldFByb3BlcnR5IiwiZW5oYW5jZVVpSlNPTk1vZGVsIiwidWlNb2RlbCIsImxpYnJhcnkiLCJmblNldFByb3BlcnR5IiwiYXN5bmNVcGRhdGUiLCJFZGl0TW9kZSIsIkVkaXRhYmxlIiwiRGlzcGxheSIsImVuaGFuY2VWaWV3SlNPTk1vZGVsIiwidmlld01vZGVsIiwiZm5HZXRPYmplY3QiLCJfZ2V0T2JqZWN0IiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiZmlsdGVyRnVuY3Rpb25zIiwiX2ZpbHRlckZ1bmN0aW9ucyIsImluZGV4T2YiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJvTW9kZWwiLCJnZXRSb290RW50aXR5U2V0UGF0aCIsImNvbnRleHRQYXRoIiwicm9vdEVudGl0eVNldFBhdGgiLCJhUGF0aHMiLCJnZXRBYnNvbHV0ZU1ldGFQYXRoRm9yTGlzdEJpbmRpbmciLCJvVmlldyIsInZMaXN0QmluZGluZyIsInNNZXRhUGF0aCIsInN0YXJ0c1dpdGgiLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNSb290Q29udGV4dFBhdGgiLCJvQmluZGluZyIsIm9Sb290QmluZGluZyIsImdldFJvb3RCaW5kaW5nIiwic1Jvb3RCaW5kaW5nUGF0aCIsInNSZWxhdGl2ZVBhdGgiLCJnZXRSZWxhdGl2ZU1ldGFQYXRoRm9yTGlzdEJpbmRpbmciLCJwYXJlbnRDb250ZXh0IiwibGlzdEJpbmRpbmciLCJsaXN0QmluZGluZ0NvbnRleHQiLCJwYXJlbnRDb250ZXh0UGF0aCIsInZpZXdCaW5kaW5nTWV0YVBhdGgiLCJnZXREcmFmdFJvb3QiLCJnZXREcmFmdE5vZGUiLCJpc1N0aWNreSIsImdldFN0aWNreVNlc3Npb24iLCJpc1VwZGF0ZUhpZGRlbiIsImVudGl0eVR5cGUiLCJpc0VudGl0eVNldCIsIlVJIiwiVXBkYXRlSGlkZGVuIiwiZ2V0RGVsZXRlSGlkZGVuIiwiRGVsZXRlSGlkZGVuIiwiZ2V0QWJzb2x1dGVQYXRoRnJvbUxpc3RCaW5kaW5nIiwibWV0YW1vZGVsIiwibWV0YVBhdGgiLCJyb290QmluZGluZyIsInJvb3RCaW5kaW5nUGF0aCIsInJlbGF0aXZlUGF0aCIsImVuaGFuY2VPRGF0YU1vZGVsIiwib2RhdGFNb2RlbCIsImFwcENvbXBvbmVudCIsInZpcnR1YWxQcm9wZXJ0eUJpbmRpbmdSZWdpc3RyeSIsIkFycmF5IiwiZm5NZXNzYWdlIiwic2V0TWVzc2FnZXMiLCJsb2NhbEFubm90YXRpb25Nb2RlbCIsIkpTT05Nb2RlbCIsInNldERlZmF1bHRCaW5kaW5nTW9kZSIsIkJpbmRpbmdNb2RlIiwiT25lV2F5IiwiYmFzZVNldFByb3BlcnR5IiwiYmFzZUdldFByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiYW5ub3RhdGlvblR5cGUiLCJpc1RyYW5zaWVudCIsImNvbnRleHRPYmplY3QiLCJNZXRhUGF0aCIsImNvbnZlcnRUeXBlcyIsImV4dGVybmFsSWRQcm9wZXJ0eSIsImdldE1ldGFQYXRoRm9yUGF0aCIsImdldFRhcmdldCIsIkV4dGVybmFsSUQiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImZ1bGxQYXRoIiwiX3JlZnJlc2hMb2NhbE1vZGVsIiwicmVmcmVzaCIsImV4dGVybmFsSWRQcm9wUGF0aCIsInByb3BlcnRpZXNUb1JlcXVlc3QiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInRleHRQcm9wZXJ0eSIsIlRleHQiLCJ0ZXh0UHJvcFBhdGgiLCJpbmNsdWRlcyIsInB1c2giLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJ0aGVuIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsInBhdGhGcm9tUm9vdCIsImNsZWFyQW5ub3RhdGlvblR5cGUiLCJhbm5vdGF0aW9uVHlwZXMiLCJkYXRhU2V0IiwiaXNDb250ZXh0IiwiaXNBIiwiZW5kc1dpdGgiLCJfbG9jYWxBbm5vdGF0aW9uTW9kZWwiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsIm1lc3NhZ2VzIiwiY2xlYW5lZERhdGEiLCJnZXREYXRhIiwic2V0RGF0YSIsIm1lc3NhZ2VUYXJnZXQiLCJnZXRUeXBlIiwiZ2V0TWVzc2FnZSIsImZuQmluZFByb3BlcnR5IiwiYmluZFByb3BlcnR5IiwiYmluZCIsInBhcmFtZXRlcnMiLCJyZWNvbW1lbmRhdGlvbkZlYXR1cmVEaXNhYmxlZCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiRGlzYWJsZUlucHV0QXNzaXN0YW5jZSIsInJlY29tbWVuZGF0aW9uUHJvcGVydHlCaW5kaW5nIiwic2V0VXBSZWNvbW1lbmRhdGlvbkxvY2FsTW9kZWxCaW5kaW5nIiwiaW50ZXJuYWxJZEJpbmRpbmciLCJleHRlcm5hbElkQmluZGluZyIsImF0dGFjaENoYW5nZSIsInJlcXVlc3RWYWx1ZSIsInByb3BCaW5kaW5nIiwidXBkYXRlUmVxdWlyZWQiLCJleHByZXNzaW9uIiwiZ2V0VmlydHVhbEJpbmRpbmdFeHByZXNzaW9uIiwiZ2hvc3RDb250cm9sIiwiQW55IiwiYW55IiwiY29tcGlsZUV4cHJlc3Npb24iLCJiaW5kQmFja1Byb3BlcnR5IiwiZm5EZXN0cm95UHJvcGVydHlCaW5kaW5nIiwiZGVzdHJveSIsImZuU2V0Q29udGV4dCIsInNldENvbnRleHQiLCJuZXdDb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJzZXRNb2RlbCIsImdob3N0QmluZGluZyIsImdldEJpbmRpbmdJbmZvIiwiYmluZGluZyIsImZuQ2hlY2tVcGRhdGUiLCJjaGVja1VwZGF0ZSIsImZvcmNlVXBkYXRlIiwiaXNDb250ZXh0TG9hZGVkIiwiZ2V0QmluZEJhY2tQcm9wZXJ0eSIsInZhbHVlSW5Mb2NhbEFubm90YXRpb24iLCJnZXRFeHRlcm5hbFZhbHVlIiwiZm5EZXN0cm95IiwidnBCaW5kaW5nIiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsInRleHQiLCJtZXRhTW9kZWxQYXRoIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwidG9TdHJpbmciLCJlIiwiaW5mbyIsImdldE1lc3NhZ2VzUGF0aCIsInRhcmdldEVudGl0eVR5cGUiLCJNZXNzYWdlcyIsInJlY29tbWVuZGF0aW9uYmluZGluZyIsInNldENvbnRleHRPblJlY29tbWVuZGF0aW9uQmluZGluZyIsIm9kYXRhUHJvcGVydHlCaW5kaW5nIiwicmVjb21tZW5kYXRpb25Db21wbGV4UHJvcGVydHkiLCJpc1JlY29tbWVuZGVkUHJvcGVydHkiLCJ2YWxpZGF0ZVJlY29tbWVuZGF0aW9uQmluZGluZ1BhdGgiLCJhbHJlYWR5Qm91bmQiLCJleGlzdGluZ0JpbmRpbmciLCJzZXRUeXBlIiwiUmF3Iiwic2V0QmluZGluZ01vZGUiLCJldmVudCIsInByb3BlcnR5QmluZGluZyIsImdldFNvdXJjZSIsImN1cnJlbnRDb250ZXh0IiwiY29udGV4dFJlY29tbWVuZGF0aW9ucyIsImdldFZhbHVlIiwic2V0UmVjb21tZW5kYXRpb25zT25Mb2NhbEFubm90YXRpb25Nb2RlbCIsImJpbmRpbmdQYXRoIiwiY29udGV4dE1ldGFQYXRoIiwiUmVjb21tZW5kYXRpb25zIiwiZW50aXR5UHJvcGVydGllcyIsImVudGl0eVByb3BlcnR5IiwibmFtZSIsInRhcmdldFR5cGUiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJyZWNvbW1lbmRlZFByb3BlcnR5IiwicHJvcGVydHlSZWNvbW1lbmRhdGlvbnMiLCJsb2NhbE1vZGVsUGF0aCIsInR5cGVBaGVhZFZhbHVlcyIsInByb3BlcnR5UmVjb21tZW5kYXRpb24iLCJSZWNvbW1lbmRlZEZpZWxkSXNTdWdnZXN0aW9uIiwicGxhY2Vob2xkZXJWYWx1ZUFubm90YXRpb25QYXRoIiwicGxhY2Vob2xkZXJEZXNjcmlwdGlvbkFubm90YXRpb25QYXRoIiwiUmVjb21tZW5kZWRGaWVsZFZhbHVlIiwiUmVjb21tZW5kZWRGaWVsZERlc2NyaXB0aW9uIiwiZ2V0QWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsImFsdGVybmF0ZUtleXMiLCJfZmV0Y2hBbHRlcm5hdGVLZXlzIiwiZW50aXR5VHlwZU9yU2V0IiwiQ29yZSIsIkFsdGVybmF0ZUtleXMiLCJmb3JFYWNoIiwiYWx0ZXJuYXRlS2V5IiwiS2V5Iiwia2V5IiwiTmFtZSIsIl9mZXRjaFNlY29uZGFyeUtleXMiLCJlVCIsIlNlY29uZGFyeUtleSIsInNlY29uZGFyeUtleSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTW9kZWxIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogVGhpcyBjbGFzcyBjb250YWlucyBoZWxwZXJzIHRvIGJlIHVzZWQgYXQgcnVudGltZSB0byByZXRyaWV2ZSBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoZSBtb2RlbCAqL1xuaW1wb3J0IHR5cGUgeyBDb21wbGV4VHlwZSwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoLCBTaW5nbGV0b24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRnVuY3Rpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHsgRHJhZnROb2RlLCBEcmFmdFJvb3QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBBbHRlcm5hdGVLZXksIFByb3BlcnR5UmVmIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db3JlXCI7XG5pbXBvcnQgdHlwZSB7IFN0aWNreVNlc3Npb25TdXBwb3J0ZWQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb25cIjtcbmltcG9ydCB0eXBlIHsgRGVsZXRlSGlkZGVuLCBVcGRhdGVIaWRkZW4gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVR5cGVBbm5vdGF0aW9uc19VSSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlfRWRtXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IEFueSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQW55XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsQWN0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IE1ldGFQYXRoIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFQYXRoXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCwgaXNOYXZpZ2F0aW9uUHJvcGVydHksIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgQmluZGluZ01vZGUgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nTW9kZVwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIFByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL1Byb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgUmF3IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9SYXdcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBDb250ZXh0LCBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFMaXN0QmluZGluZyB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIHsgT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uL0FwcENvbXBvbmVudFwiO1xuXG4vLyBUT0RPOiBSaWdodCBub3cgcmVjb21tZW5kYXRpb25zIGlzIG5vdCBwYXJ0IG9mIHRoZSBVSSB2b2NhYnVsYXJ5LlxuLy8gaGVuY2Ugd2UgYXJlIGFkZGluZyBpdCB0byB0aGUgdHlwZS5cbi8vIG9uY2UgdGhpcyBiZWNvbWVzIHBhcnQgb2YgdGhlIFVJIHZvY2FidWxhcnkgdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMuXG5leHBvcnQgdHlwZSBFbnRpdHlUeXBlQW5ub3RhdGlvbnNfVUlfV2l0aF9SZWNvbW1lbmRhdGlvbnMgPSBFbnRpdHlUeXBlQW5ub3RhdGlvbnNfVUkgJiB7XG5cdFJlY29tbWVuZGF0aW9ucz86IHtcblx0XHRwYXRoOiBzdHJpbmc7XG5cdH07XG59O1xuXG5jb25zdCBNb2RlbEhlbHBlciA9IHtcblx0Ly8gZ2xvYmFsIHN3aXRjaCB0byBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGJ5IGEgcHJpdmF0ZSBtYW5pZmVzdCBmbGFnXG5cdC8vIHRoaXMgYWxsb3dzIGN1c3RvbWVycyB0byBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGluIGNhc2Ugd2UgcnVuIGludG8gaXNzdWVzIHdpdGggdGhlIGZpcnN0IGRlbGl2ZXJ5XG5cdC8vIHRoaXMgd2lsbCBiZSByZW1vdmVkIHdpdGggdGhlIG5leHQgUy80IHJlbGVhc2Vcblx0ZGlzYWJsZUNvbGxhYm9yYXRpb25EcmFmdDogZmFsc2UsXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwcm9ncmFtbWluZyBtb2RlbCBpcyBzdGlja3kuXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgT0RhdGFNb2RlbE1ldGFNb2RlbCB0byBjaGVjayBmb3Igc3RpY2t5IGVuYWJsZWQgZW50aXR5XG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBzdGlja3ksIGVsc2UgZmFsc2Vcblx0ICovXG5cdGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZDogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBib29sZWFuIHtcblx0XHRjb25zdCBlbnRpdHlDb250YWluZXIgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0XHRmb3IgKGNvbnN0IGVudGl0eVNldE5hbWUgaW4gZW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGVudGl0eUNvbnRhaW5lcltlbnRpdHlTZXROYW1lXS4ka2luZCA9PT0gXCJFbnRpdHlTZXRcIiAmJlxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtlbnRpdHlTZXROYW1lfUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRgKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2dyYW1taW5nIG1vZGVsIGlzIGRyYWZ0LlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE9EYXRhTW9kZWxNZXRhTW9kZWwgb2YgdGhlIGNvbnRleHQgZm9yIHdoaWNoIGRyYWZ0IHN1cHBvcnQgc2hhbGwgYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gcGF0aCBQYXRoIGZvciB3aGljaCBkcmFmdCBzdXBwb3J0IHNoYWxsIGJlIGNoZWNrZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGRyYWZ0LCBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc0RyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQocGF0aCk7XG5cdFx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFDb250ZXh0KTtcblx0XHRyZXR1cm4gdGhpcy5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChvYmplY3RQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGRyYWZ0IGlzIHN1cHBvcnRlZCBmb3IgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGguXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcblx0ICovXG5cdGlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQ7XG5cdFx0Y29uc3QgYklzRHJhZnRSb290ID0gTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY3VycmVudEVudGl0eVNldCk7XG5cdFx0Y29uc3QgYklzRHJhZnROb2RlID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoY3VycmVudEVudGl0eVNldCk7XG5cdFx0Y29uc3QgYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCA9XG5cdFx0XHRpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5jb250YWluc1RhcmdldCAmJlxuXHRcdFx0KChkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fFxuXHRcdFx0XHQoZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGUpXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IGZhbHNlO1xuXG5cdFx0cmV0dXJuIGJJc0RyYWZ0Um9vdCB8fCBiSXNEcmFmdE5vZGUgfHwgKCFjdXJyZW50RW50aXR5U2V0ICYmIGJJc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQpO1xuXHR9LFxuXG5cdGlzTWV0YVBhdGhEcmFmdFN1cHBvcnRlZDogZnVuY3Rpb24gKGRhdGFNb2RlbE9iamVjdFBhdGg6IE1ldGFQYXRoPHVua25vd24+KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGRhdGFNb2RlbE9iamVjdFBhdGguZ2V0Q2xvc2VzdEVudGl0eVNldCgpIGFzIEVudGl0eVNldDtcblx0XHRjb25zdCBiSXNEcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChjdXJyZW50RW50aXR5U2V0KTtcblx0XHRjb25zdCBiSXNEcmFmdE5vZGUgPSBNb2RlbEhlbHBlci5pc0RyYWZ0Tm9kZShjdXJyZW50RW50aXR5U2V0KTtcblx0XHRyZXR1cm4gYklzRHJhZnRSb290IHx8IGJJc0RyYWZ0Tm9kZTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGEgU2hhcmVBY3Rpb24gaW4gYW55IEVudGl0eVNldCBvZiB0aGUgYXBwbGljYXRpb24uXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgYW5ub3RhdGlvbiBleGlzdHMuIEZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdGlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkRnJvbUNvbnZlcnRlckNvbnRleHQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCkuZW50aXR5U2V0cy5zb21lKChlbnRpdHlTZXQpID0+IHtcblx0XHRcdHJldHVybiBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290Py5TaGFyZUFjdGlvbiAhPT0gdW5kZWZpbmVkO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzZXJ2aWNlLCBzdXBwb3J0cyBjb2xsYWJvcmF0aW9uIGRyYWZ0LlxuXHQgKiBAcGFyYW0gbWV0YU9iamVjdCBNZXRhT2JqZWN0IHRvIGJlIHVzZWQgZm9yIGRldGVybWluYXRpb25cblx0ICogQHBhcmFtIHRlbXBsYXRlSW50ZXJmYWNlIEFQSSBwcm92aWRlZCBieSBVSTUgdGVtcGxhdGluZyBpZiB1c2VkXG5cdCAqIEBwYXJhbSB0ZW1wbGF0ZUludGVyZmFjZS5jb250ZXh0IENvbnRleHQgb2YgdGhlIHRlbXBsYXRlXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VydmljZSBzdXBwb3J0cyBjb2xsYWJvcmF0aW9uIGRyYWZ0LCBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZDogZnVuY3Rpb24gKG1ldGFPYmplY3Q6IHVua25vd24sIHRlbXBsYXRlSW50ZXJmYWNlPzogeyBjb250ZXh0OiBDb250ZXh0IH0pOiBib29sZWFuIHtcblx0XHRpZiAoIU1vZGVsSGVscGVyLmRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQpIHtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSAodGVtcGxhdGVJbnRlcmZhY2U/LmNvbnRleHQ/LmdldE1vZGVsKCkgfHwgbWV0YU9iamVjdCkgYXMgT0RhdGFNZXRhTW9kZWwgJiB7XG5cdFx0XHRcdF9fJGZlSXNDb2xsYWJvcmF0aW9uRHJhZnRFbmFibGVkPzogYm9vbGVhbjtcblx0XHRcdH07XG5cdFx0XHRpZiAob01ldGFNb2RlbC5fXyRmZUlzQ29sbGFib3JhdGlvbkRyYWZ0RW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBvTWV0YU1vZGVsLl9fJGZlSXNDb2xsYWJvcmF0aW9uRHJhZnRFbmFibGVkO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0XHRcdGZvciAoY29uc3Qgc0VudGl0eVNldCBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvRW50aXR5Q29udGFpbmVyW3NFbnRpdHlTZXRdLiRraW5kID09PSBcIkVudGl0eVNldFwiICYmXG5cdFx0XHRcdFx0b01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3NFbnRpdHlTZXR9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvU2hhcmVBY3Rpb25gKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRvTWV0YU1vZGVsLl9fJGZlSXNDb2xsYWJvcmF0aW9uRHJhZnRFbmFibGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b01ldGFNb2RlbC5fXyRmZUlzQ29sbGFib3JhdGlvbkRyYWZ0RW5hYmxlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHBhdGggb2YgdGhlIERyYWZ0Um9vdCBwYXRoIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgY29udGV4dC5cblx0ICogQHBhcmFtIG9Db250ZXh0IE9kYXRhTW9kZWwgY29udGV4dFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSBkcmFmdFJvb3QgZW50aXR5LCBvciB1bmRlZmluZWQgaWYgbm8gZHJhZnRSb290IGlzIGZvdW5kXG5cdCAqL1xuXHRnZXREcmFmdFJvb3RQYXRoOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGdldFJvb3RQYXRoID0gZnVuY3Rpb24gKHNQYXRoOiBzdHJpbmcsIG1vZGVsOiBPRGF0YU1vZGVsLCBmaXJzdEl0ZXJhdGlvbiA9IHRydWUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdFx0Y29uc3Qgc0l0ZXJhdGlvblBhdGggPSBmaXJzdEl0ZXJhdGlvbiA/IHNQYXRoIDogbmV3IFJlZ0V4cCgvLiooPz1cXC8pLykuZXhlYyhzUGF0aCk/LlswXTsgLy8gKlJlZ2V4IHRvIGdldCB0aGUgYW5jZXN0b3Jcblx0XHRcdGlmIChzSXRlcmF0aW9uUGF0aCAmJiBzSXRlcmF0aW9uUGF0aCAhPT0gXCIvXCIpIHtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNJdGVyYXRpb25QYXRoKTtcblx0XHRcdFx0Y29uc3QgbURhdGFNb2RlbCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5nZXRDb250ZXh0KHNFbnRpdHlQYXRoKSk7XG5cdFx0XHRcdGlmICgobURhdGFNb2RlbC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gc0l0ZXJhdGlvblBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGdldFJvb3RQYXRoKHNJdGVyYXRpb25QYXRoLCBtb2RlbCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9O1xuXHRcdHJldHVybiBnZXRSb290UGF0aChvQ29udGV4dC5nZXRQYXRoKCksIG9Db250ZXh0LmdldE1vZGVsKCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBwYXRoIG9mIHRoZSBTdGlja3lSb290IHBhdGggYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgT2RhdGFNb2RlbCBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIHBhdGggb2YgdGhlIFN0aWNreVJvb3QgZW50aXR5LCBvciB1bmRlZmluZWQgaWYgbm8gU3RpY2t5Um9vdCBpcyBmb3VuZFxuXHQgKi9cblx0Z2V0U3RpY2t5Um9vdFBhdGg6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZ2V0Um9vdFBhdGggPSBmdW5jdGlvbiAoc1BhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwsIGZpcnN0SXRlcmF0aW9uID0gdHJ1ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRjb25zdCBzSXRlcmF0aW9uUGF0aCA9IGZpcnN0SXRlcmF0aW9uID8gc1BhdGggOiBuZXcgUmVnRXhwKC8uKig/PVxcLykvKS5leGVjKHNQYXRoKT8uWzBdOyAvLyAqUmVnZXggdG8gZ2V0IHRoZSBhbmNlc3RvclxuXHRcdFx0aWYgKHNJdGVyYXRpb25QYXRoICYmIHNJdGVyYXRpb25QYXRoICE9PSBcIi9cIikge1xuXHRcdFx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc0l0ZXJhdGlvblBhdGgpO1xuXHRcdFx0XHRjb25zdCBtRGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmdldENvbnRleHQoc0VudGl0eVBhdGgpKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG1EYXRhTW9kZWwuc3RhcnRpbmdFbnRpdHlTZXQgPT09IG1EYXRhTW9kZWwudGFyZ2V0RW50aXR5U2V0ICYmXG5cdFx0XHRcdFx0KG1EYXRhTW9kZWwudGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBzSXRlcmF0aW9uUGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZ2V0Um9vdFBhdGgoc0l0ZXJhdGlvblBhdGgsIG1vZGVsLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH07XG5cdFx0cmV0dXJuIGdldFJvb3RQYXRoKG9Db250ZXh0LmdldFBhdGgoKSwgb0NvbnRleHQuZ2V0TW9kZWwoKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSB0YXJnZXQgZW50aXR5IHNldCB3aXRoIG5hdmlnYXRpb24gcHJvcGVydHkgYmluZGluZy5cblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSB0YXJnZXQgZW50aXR5IHNldCB3aWxsIGJlIGRldGVybWluZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgdGFyZ2V0IGVudGl0eSBzZXRcblx0ICovXG5cdGdldFRhcmdldEVudGl0eVNldDogZnVuY3Rpb24gKG9Db250ZXh0OiBCYXNlQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0b0NvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgPT09IFwiRW50aXR5U2V0XCIgfHxcblx0XHRcdG9Db250ZXh0LmdldE9iamVjdChcIiRraW5kXCIpID09PSBcIkFjdGlvblwiIHx8XG5cdFx0XHRvQ29udGV4dC5nZXRPYmplY3QoXCIwLyRraW5kXCIpID09PSBcIkFjdGlvblwiXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fVxuXHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChzUGF0aCk7XG5cdFx0cmV0dXJuIGAvJHtvQ29udGV4dC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGgpfWA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgY29tcGxldGUgcGF0aCB0byB0aGUgZW50aXR5IHNldCB2aWEgdXNpbmcgbmF2aWdhdGlvbiBwcm9wZXJ0eSBiaW5kaW5nLiBOb3RlOiBUbyBiZSB1c2VkIG9ubHkgYWZ0ZXIgdGhlIG1ldGFtb2RlbCBoYXMgbG9hZGVkLlxuXHQgKiBAcGFyYW0gcGF0aCBQYXRoIGZvciB3aGljaCBjb21wbGV0ZSBlbnRpdHlTZXQgcGF0aCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIGZyb20gZW50aXR5VHlwZSBwYXRoXG5cdCAqIEBwYXJhbSBvZGF0YU1ldGFNb2RlbCBNZXRhbW9kZWwgdG8gYmUgdXNlZC4oT3B0aW9uYWwgaW4gbm9ybWFsIHNjZW5hcmlvcywgYnV0IG5lZWRlZCBmb3IgcGFyYW1ldGVyaXplZCBzZXJ2aWNlIHNjZW5hcmlvcylcblx0ICogQHJldHVybnMgUmV0dXJucyBjb21wbGV0ZSBwYXRoIHRvIHRoZSBlbnRpdHkgc2V0XG5cdCAqL1xuXHRnZXRFbnRpdHlTZXRQYXRoOiBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBvZGF0YU1ldGFNb2RlbD86IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHtcblx0XHRsZXQgZW50aXR5U2V0UGF0aCA9IFwiXCI7XG5cdFx0aWYgKCFvZGF0YU1ldGFNb2RlbCkge1xuXHRcdFx0Ly8gUHJldmlvdXMgaW1wbGVtZW50YXRpb24gZm9yIGdldHRpbmcgZW50aXR5U2V0UGF0aCBmcm9tIGVudGl0eVR5cGVQYXRoXG5cdFx0XHRlbnRpdHlTZXRQYXRoID0gYC8ke3BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZykuam9pbihcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIil9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ2FsY3VsYXRpbmcgdGhlIGVudGl0eVNldFBhdGggZnJvbSBNZXRhTW9kZWwuXG5cdFx0XHRjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRcdFx0aWYgKHBhdGhQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdGNvbnN0IGluaXRpYWxQYXRoT2JqZWN0ID0ge1xuXHRcdFx0XHRcdGdyb3dpbmdQYXRoOiBcIi9cIixcblx0XHRcdFx0XHRwZW5kaW5nTmF2UHJvcEJpbmRpbmc6IFwiXCJcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCBwYXRoT2JqZWN0ID0gcGF0aFBhcnRzLnJlZHVjZShcblx0XHRcdFx0XHQocGF0aFVuZGVyQ29uc3RydWN0aW9uOiB7IGdyb3dpbmdQYXRoOiBzdHJpbmc7IHBlbmRpbmdOYXZQcm9wQmluZGluZzogc3RyaW5nIH0sIHBhdGhQYXJ0OiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBkZWxpbWl0ZXIgPSAoISFpZHggJiYgXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIpIHx8IFwiXCI7XG5cdFx0XHRcdFx0XHRsZXQgeyBncm93aW5nUGF0aCwgcGVuZGluZ05hdlByb3BCaW5kaW5nIH0gPSBwYXRoVW5kZXJDb25zdHJ1Y3Rpb247XG5cdFx0XHRcdFx0XHRjb25zdCB0ZW1wUGF0aCA9IGdyb3dpbmdQYXRoICsgZGVsaW1pdGVyO1xuXHRcdFx0XHRcdFx0Y29uc3QgbmF2UHJvcEJpbmRpbmdzID0gb2RhdGFNZXRhTW9kZWwuZ2V0T2JqZWN0KHRlbXBQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IG5hdlByb3BCaW5kaW5nVG9DaGVjayA9IHBlbmRpbmdOYXZQcm9wQmluZGluZyA/IGAke3BlbmRpbmdOYXZQcm9wQmluZGluZ30vJHtwYXRoUGFydH1gIDogcGF0aFBhcnQ7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdG5hdlByb3BCaW5kaW5ncyAmJlxuXHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhuYXZQcm9wQmluZGluZ3MpLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHRcdFx0bmF2UHJvcEJpbmRpbmdzLmhhc093blByb3BlcnR5KG5hdlByb3BCaW5kaW5nVG9DaGVjaylcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRncm93aW5nUGF0aCA9IHRlbXBQYXRoICsgbmF2UHJvcEJpbmRpbmdUb0NoZWNrLnJlcGxhY2UoXCIvXCIsIFwiJTJGXCIpO1xuXHRcdFx0XHRcdFx0XHRwZW5kaW5nTmF2UHJvcEJpbmRpbmcgPSBcIlwiO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cGVuZGluZ05hdlByb3BCaW5kaW5nICs9IHBlbmRpbmdOYXZQcm9wQmluZGluZyA/IGAvJHtwYXRoUGFydH1gIDogcGF0aFBhcnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4geyBncm93aW5nUGF0aCwgcGVuZGluZ05hdlByb3BCaW5kaW5nIH07XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRpbml0aWFsUGF0aE9iamVjdFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGVudGl0eVNldFBhdGggPSBwYXRoT2JqZWN0Lmdyb3dpbmdQYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZW50aXR5U2V0UGF0aCA9IGAvJHtwYXRoUGFydHNbMF19YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZW50aXR5U2V0UGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgcGF0aCBmb3IgdGhlIGl0ZW1zIHByb3BlcnR5IG9mIE11bHRpVmFsdWVGaWVsZCBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlciBBY3Rpb24gUGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbXBsZXRlIG1vZGVsIHBhdGggZm9yIHRoZSBpdGVtcyBwcm9wZXJ0eSBvZiBNdWx0aVZhbHVlRmllbGQgcGFyYW1ldGVyc1xuXHQgKi9cblx0Z2V0QWN0aW9uUGFyYW1ldGVySXRlbXNNb2RlbFBhdGg6IGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBNZXRhTW9kZWxBY3Rpb25QYXJhbWV0ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBvUGFyYW1ldGVyICYmIG9QYXJhbWV0ZXIuJE5hbWUgPyBge3BhdGg6ICdtdmZ2aWV3Pi8ke29QYXJhbWV0ZXIuJE5hbWV9J31gIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGZpbHRlck91dE5hdlByb3BCaW5kaW5nOiBmdW5jdGlvbiAoc1BhdGhQYXJ0OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc1BhdGhQYXJ0ICE9PSBcIlwiICYmIHNQYXRoUGFydCAhPT0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgc2V0UHJvcGVydHkgdG8gdGhlIGNyZWF0ZWQgYmluZGluZyBjb250ZXh0cyBvZiB0aGUgaW50ZXJuYWwgSlNPTiBtb2RlbC5cblx0ICogQHBhcmFtIEludGVybmFsIEpTT04gTW9kZWwgd2hpY2ggaXMgZW5oYW5jZWRcblx0ICovXG5cblx0ZW5oYW5jZUludGVybmFsSlNPTk1vZGVsOiBmdW5jdGlvbiAob0ludGVybmFsTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IGZuQmluZENvbnRleHQgPSBvSW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dCA9IGZ1bmN0aW9uIChcblx0XHRcdHNQYXRoOiBzdHJpbmcsXG5cdFx0XHRjb250ZXh0OiBCYXNlQ29udGV4dCxcblx0XHRcdG1QYXJhbWV0ZXJzOiBvYmplY3QgfCB1bmRlZmluZWQsXG5cdFx0XHRvRXZlbnRzOiBvYmplY3QgfCB1bmRlZmluZWRcblx0XHQpOiBDb250ZXh0QmluZGluZyB7XG5cdFx0XHRjb25zdCBjb250ZXh0QmluZGluZyA9IGZuQmluZENvbnRleHQuYXBwbHkodGhpcywgW3NQYXRoLCBjb250ZXh0LCBtUGFyYW1ldGVycywgb0V2ZW50c10pO1xuXHRcdFx0Y29uc3QgZm5HZXRCb3VuZENvbnRleHQgPSBjb250ZXh0QmluZGluZy5nZXRCb3VuZENvbnRleHQ7XG5cblx0XHRcdGNvbnRleHRCaW5kaW5nLmdldEJvdW5kQ29udGV4dCA9IGZ1bmN0aW9uICgpOiBCYXNlQ29udGV4dCB8IG51bGwge1xuXHRcdFx0XHRjb25zdCBvQm91bmRDb250ZXh0ID0gZm5HZXRCb3VuZENvbnRleHQuYXBwbHkodGhpcyk7XG5cdFx0XHRcdGlmIChvQm91bmRDb250ZXh0KSB7XG5cdFx0XHRcdFx0b0JvdW5kQ29udGV4dC5zZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmdldE9iamVjdCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaW5pdGlhbGl6ZVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkuc2V0UHJvcGVydHkodGhpcy5nZXRQYXRoKCksIHt9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aFNwbGl0ID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0XHRcdGxldCBwYXRoID0gdGhpcy5nZXRQYXRoKCkucmVwbGFjZSgvXFwvJC8sIFwiXCIpOyAvLyBSZW1vdmUgc2xhc2ggaWYgaXQgaXMgYXQgdGhlIGVuZFxuXHRcdFx0XHRcdFx0Ly8gbGV0J3MgZW5zdXJlIHRoYXQgc3ViIG9iamVjdHMgYXJlIGluaXRpYWxpemVkXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnR5UGF0aFNwbGl0Lmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRwYXRoID0gYCR7cGF0aH0vJHtwcm9wZXJ0eVBhdGhTcGxpdFtpXX1gO1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5nZXRNb2RlbCgpLmdldFByb3BlcnR5KHBhdGgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBpbml0aWFsaXplXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHBhdGgsIHt9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHByb3BlcnR5UGF0aCwgdmFsdWUsIHRoaXMpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9Cb3VuZENvbnRleHQ7XG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIGNvbnRleHRCaW5kaW5nO1xuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIEFkZHMgYW4gaGFuZGxlciBvbiBwcm9wZXJ0eUNoYW5nZS5cblx0ICogVGhlIHByb3BlcnR5IFwiL2VkaXRNb2RlXCIgaXMgY2hhbmdlZCBhY2NvcmRpbmcgdG8gcHJvcGVydHkgJy9pc0VkaXRhYmxlJyB3aGVuIHRoaXMgbGFzdCBvbmUgaXMgc2V0XG5cdCAqIGluIG9yZGVyIHRvIGJlIGNvbXBsaWFudCB3aXRoIGZvcm1lciB2ZXJzaW9ucyB3aGVyZSBidWlsZGluZyBibG9ja3MgdXNlIHRoZSBwcm9wZXJ0eSBcIi9lZGl0TW9kZVwiXG5cdCAqIEBwYXJhbSB1aU1vZGVsIEpTT04gTW9kZWwgd2hpY2ggaXMgZW5oYW5jZWRcblx0ICogQHBhcmFtIGxpYnJhcnkgQ29yZSBsaWJyYXJ5IG9mIFNBUCBGaW9yaSBlbGVtZW50c1xuXHQgKi9cblxuXHRlbmhhbmNlVWlKU09OTW9kZWw6IGZ1bmN0aW9uICh1aU1vZGVsOiBKU09OTW9kZWwsIGxpYnJhcnk6IHsgRWRpdE1vZGU6IHsgRWRpdGFibGU6IHN0cmluZzsgRGlzcGxheTogc3RyaW5nIH0gfSk6IHZvaWQge1xuXHRcdGNvbnN0IGZuU2V0UHJvcGVydHkgPSB1aU1vZGVsLnNldFByb3BlcnR5O1xuXHRcdHVpTW9kZWwuc2V0UHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdFx0XHRwYXRoOiBzdHJpbmcsXG5cdFx0XHR2YWx1ZTogdW5rbm93bixcblx0XHRcdGNvbnRleHQ6IEJhc2VDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdFx0YXN5bmNVcGRhdGU6IGJvb2xlYW4gfCB1bmRlZmluZWRcblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGlmIChwYXRoID09PSBcIi9pc0VkaXRhYmxlXCIpIHtcblx0XHRcdFx0dWlNb2RlbC5zZXRQcm9wZXJ0eShcIi9lZGl0TW9kZVwiLCB2YWx1ZSA/IGxpYnJhcnkuRWRpdE1vZGUuRWRpdGFibGUgOiBsaWJyYXJ5LkVkaXRNb2RlLkRpc3BsYXksIGNvbnRleHQsIGFzeW5jVXBkYXRlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmblNldFByb3BlcnR5LmFwcGx5KHRoaXMsIFtwYXRoLCB2YWx1ZSwgY29udGV4dCwgYXN5bmNVcGRhdGVdKTtcblx0XHR9O1xuXHR9LFxuXG5cdGVuaGFuY2VWaWV3SlNPTk1vZGVsOiBmdW5jdGlvbiAodmlld01vZGVsOiBKU09OTW9kZWwgJiB7IF9nZXRPYmplY3Q6IEZ1bmN0aW9uIH0pOiB2b2lkIHtcblx0XHRjb25zdCBmbkdldE9iamVjdCA9IHZpZXdNb2RlbC5fZ2V0T2JqZWN0O1xuXHRcdHZpZXdNb2RlbC5fZ2V0T2JqZWN0ID0gZnVuY3Rpb24gKHNQYXRoOiBzdHJpbmcsIG9Db250ZXh0PzogQ29udGV4dCk6IHVua25vd24ge1xuXHRcdFx0aWYgKHNQYXRoID09PSB1bmRlZmluZWQgfHwgc1BhdGggPT09IFwiXCIpIHtcblx0XHRcdFx0c1BhdGggPSBcIi9cIjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmbkdldE9iamVjdC5hcHBseSh0aGlzLCBbc1BhdGgsIG9Db250ZXh0XSk7XG5cdFx0fTtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgd2hldGhlciBmaWx0ZXJpbmcgb24gdGhlIHRhYmxlIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgaW5zdGFuY2Ugb2YgdGhlIG1ldGEgbW9kZWxcblx0ICogQHBhcmFtIGZpbHRlckZ1bmN0aW9ucyBGaWx0ZXIgZnVuY3Rpb25zIHN1cHBvcnRlZCBieSB0aGUgc2VydmljZVxuXHQgKiBAcmV0dXJucyBSZXR1cm5zICdmYWxzZScgaWYgdGhlIHNlcnZpY2Ugc3VwcG9ydHMgJ3RvbG93ZXInLCBlbHNlICd0cnVlJ1xuXHQgKi9cblx0aXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiBmdW5jdGlvbiAob01ldGFNb2RlbD86IE9EYXRhTWV0YU1vZGVsLCBmaWx0ZXJGdW5jdGlvbnM/OiBGaWx0ZXJGdW5jdGlvbnMgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IF9maWx0ZXJGdW5jdGlvbnMgPSBmaWx0ZXJGdW5jdGlvbnMgPz8gb01ldGFNb2RlbD8uZ2V0T2JqZWN0KFwiL0BPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckZ1bmN0aW9uc1wiKTtcblxuXHRcdGlmICghX2ZpbHRlckZ1bmN0aW9ucykge1xuXHRcdFx0Ly8gaWYgbm8gZmlsdGVycyBmdW5jdGlvbiBkZWZpbmVkIGluIHNlcnZpY2UsIHdlIGFzc3VtZSB0aGF0IHRoZSBzZXJ2aWNlIGlzIGNhc2Ugc2Vuc2l0aXZlXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gX2ZpbHRlckZ1bmN0aW9ucy5pbmRleE9mKFwidG9sb3dlclwiKSA9PT0gLTE7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBNZXRhUGF0aCBmb3IgdGhlIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHRvIGJlIHVzZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgbWV0YXBhdGggZm9yIHRoZSBjb250ZXh0LlxuXHQgKi9cblx0Z2V0TWV0YVBhdGhGb3JDb250ZXh0OiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0c1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIG9NZXRhTW9kZWwgJiYgc1BhdGggJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBNZXRhUGF0aCBmb3IgdGhlIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBNZXRhUGF0aCB0byBiZSB1c2VkXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIHJvb3QgZW50aXR5IHNldCBwYXRoLlxuXHQgKi9cblx0Z2V0Um9vdEVudGl0eVNldFBhdGg6IGZ1bmN0aW9uIChjb250ZXh0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgcm9vdEVudGl0eVNldFBhdGggPSBcIlwiO1xuXHRcdGNvbnN0IGFQYXRocyA9IGNvbnRleHRQYXRoID8gY29udGV4dFBhdGguc3BsaXQoXCIvXCIpIDogW107XG5cdFx0aWYgKGFQYXRocy5sZW5ndGggPiAxKSB7XG5cdFx0XHRyb290RW50aXR5U2V0UGF0aCA9IGFQYXRoc1sxXTtcblx0XHR9XG5cdFx0cmV0dXJuIHJvb3RFbnRpdHlTZXRQYXRoO1xuXHR9LFxuXHQvKipcblx0ICogR2V0IE1ldGFQYXRoIGZvciB0aGUgbGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBvVmlldyBWaWV3IG9mIHRoZSBjb250cm9sIHVzaW5nIGxpc3RCaW5kaW5nXG5cdCAqIEBwYXJhbSB2TGlzdEJpbmRpbmcgT0RhdGFMaXN0QmluZGluZyBvYmplY3Qgb3IgdGhlIGJpbmRpbmcgcGF0aCBmb3IgYSB0ZW1wb3JhcnkgbGlzdCBiaW5kaW5nXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIG1ldGFwYXRoIGZvciB0aGUgbGlzdGJpbmRpbmcuXG5cdCAqL1xuXHRnZXRBYnNvbHV0ZU1ldGFQYXRoRm9yTGlzdEJpbmRpbmc6IGZ1bmN0aW9uIChvVmlldzogRkVWaWV3LCB2TGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcgfCBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzTWV0YVBhdGg7XG5cblx0XHRpZiAodHlwZW9mIHZMaXN0QmluZGluZyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0aWYgKHZMaXN0QmluZGluZy5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0XHQvLyBhYnNvbHV0ZSBwYXRoXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgodkxpc3RCaW5kaW5nKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHJlbGF0aXZlIHBhdGhcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3Qgc1Jvb3RDb250ZXh0UGF0aCA9IG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoYCR7c1Jvb3RDb250ZXh0UGF0aH0vJHt2TGlzdEJpbmRpbmd9YCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHdlIGFscmVhZHkgZ2V0IGEgbGlzdCBiaW5kaW5nIHVzZSB0aGlzIG9uZVxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB2TGlzdEJpbmRpbmc7XG5cdFx0XHRjb25zdCBvUm9vdEJpbmRpbmcgPSBvQmluZGluZy5nZXRSb290QmluZGluZygpO1xuXHRcdFx0aWYgKG9CaW5kaW5nID09PSBvUm9vdEJpbmRpbmcpIHtcblx0XHRcdFx0Ly8gYWJzb2x1dGUgcGF0aFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9CaW5kaW5nLmdldFBhdGgoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyByZWxhdGl2ZSBwYXRoXG5cdFx0XHRcdGNvbnN0IHNSb290QmluZGluZ1BhdGggPSBvUm9vdEJpbmRpbmchLmdldFBhdGgoKTtcblx0XHRcdFx0Y29uc3Qgc1JlbGF0aXZlUGF0aCA9IG9CaW5kaW5nLmdldFBhdGgoKTtcblx0XHRcdFx0aWYgKHZMaXN0QmluZGluZy5nZXRDb250ZXh0KCkgPT09IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGAke3NSb290QmluZGluZ1BhdGh9LyR7c1JlbGF0aXZlUGF0aH1gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvL09uIHRoZSBjYXNlIG9mIGEgbXVsdGkgdmFsdWUgZmllbGQsIHRoZSBjb250ZXh0IG9mIHRoZSBsaXN0IGJpbmRpbmcgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSB2aWV3IGJpbmRpbmcgY29udGV4dC5cblx0XHRcdFx0XHQvLyB3ZSBoYXZlIHRvIGdldCB0aGUgbWV0YSBwYXRoIGZyb20gdGhlIGNvbnRleHQgb2YgdGhlIGxpc3QgYmluZGluZ1xuXHRcdFx0XHRcdHNNZXRhUGF0aCA9IGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgodkxpc3RCaW5kaW5nLmdldENvbnRleHQoKS5nZXRQYXRoKCkpfS8ke3NSZWxhdGl2ZVBhdGh9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc01ldGFQYXRoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHJlbGF0aXZlIG1ldGFQYXRoIGZyb20gdGhlIHZpZXcgZm9yIHRoZSBsaXN0QmluZGluZy5cblx0ICogQHBhcmFtIHBhcmVudENvbnRleHQgQ29udGV4dCBvZiB0aGUgdmlldyBvciB0aGUgcGFyZW50IGNvbnRyb2xcblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIE9EYXRhTGlzdEJpbmRpbmcgb2JqZWN0IG9yIHRoZSBiaW5kaW5nIHBhdGggZm9yIGEgdGVtcG9yYXJ5IGxpc3QgYmluZGluZ1xuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBtZXRhUGF0aCBmb3IgdGhlIE9EYXRhTGlzdEJpbmRpbmcuXG5cdCAqL1xuXHRnZXRSZWxhdGl2ZU1ldGFQYXRoRm9yTGlzdEJpbmRpbmcocGFyZW50Q29udGV4dDogQ29udGV4dCwgbGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGxpc3RCaW5kaW5nQ29udGV4dCA9IGxpc3RCaW5kaW5nLmdldENvbnRleHQoKTtcblx0XHRjb25zdCBwYXJlbnRDb250ZXh0UGF0aCA9IHBhcmVudENvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0Ly9Gb3IgYWJzb2x1dGUgcGF0aCB3ZSByZXR1cm4gdW5kZWZpbmVkXG5cdFx0aWYgKCFsaXN0QmluZGluZ0NvbnRleHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Ly8gaWYgdGhlIGxpc3QgYmluZGluZyBjb250ZXh0IGlzIHRoZSBwYXJlbnQgY29udGV4dCwgd2UgcmV0dXJuIHRoZSBsaXN0IGJpbmRpbmcgcGF0aFxuXHRcdGlmIChsaXN0QmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpID09PSBwYXJlbnRDb250ZXh0UGF0aCkge1xuXHRcdFx0cmV0dXJuIGxpc3RCaW5kaW5nLmdldFBhdGgoKTtcblx0XHR9XG5cdFx0Ly8gaWYgdGhlIGxpc3QgYmluZGluZyBjb250ZXh0IGlzIG5vdCB0aGUgcGFyZW50IGNvbnRleHQsIHdlIHRyeSB0byBmaW5kIHRoZSByZWxhdGl2ZSBwYXRoXG5cdFx0aWYgKGxpc3RCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChwYXJlbnRDb250ZXh0UGF0aCkpIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCB2aWV3QmluZGluZ01ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHBhcmVudENvbnRleHRQYXRoKTtcblx0XHRcdHJldHVybiBgJHttZXRhTW9kZWwuZ2V0TWV0YVBhdGgobGlzdEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSl9LyR7bGlzdEJpbmRpbmcuZ2V0UGF0aCgpfWAucmVwbGFjZShgJHt2aWV3QmluZGluZ01ldGFQYXRofS9gLCBcIlwiKTtcblx0XHR9XG5cdFx0Ly8gb3RoZXJ3aXNlLCB3ZSByZXR1cm4gdW5kZWZpbmVkIHNpbmNlIHRoZSBsaXN0IGJpbmRpbmcgaXMgbm90IHJlbGF0aXZlIHRvIHRoZSB2aWV3IGJpbmRpbmcgY29udGV4dFxuXHRcdHJldHVybjtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIGRyYWZ0IHJvb3QuXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgZHJhZnQgcm9vdFxuXHQgKi9cblx0aXNEcmFmdFJvb3Q6IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVua25vd24gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXREcmFmdFJvb3QoZW50aXR5U2V0KSAhPT0gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgZHJhZnQgbm9kZS5cblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBkcmFmdCBub2RlXG5cdCAqL1xuXHRpc0RyYWZ0Tm9kZTogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5rbm93biB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldERyYWZ0Tm9kZShlbnRpdHlTZXQpICE9PSB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBzdGlja3kgc2Vzc2lvbiByb290LlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHN0aWNreSBzZXNzaW9uIHJvb3Rcblx0ICovXG5cdGlzU3RpY2t5OiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRTdGlja3lTZXNzaW9uKGVudGl0eVNldCkgIT09IHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSBpZiBlbnRpdHkgaXMgdXBkYXRhYmxlIG9yIG5vdC5cblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgRW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHVwZGF0YWJsZSBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc1VwZGF0ZUhpZGRlbjogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogVXBkYXRlSGlkZGVuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoaXNFbnRpdHlTZXQoZW50aXR5U2V0KSkge1xuXHRcdFx0cmV0dXJuIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuID8/IGVudGl0eVR5cGU/LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW47XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgQENvbW1vbi5EcmFmdFJvb3QgYW5ub3RhdGlvbiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gRW50aXR5U2V0LlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcmV0dXJucyBEcmFmdFJvb3Rcblx0ICovXG5cdGdldERyYWZ0Um9vdDogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5rbm93biB8IHVuZGVmaW5lZCk6IERyYWZ0Um9vdCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIEBDb21tb24uRHJhZnROb2RlIGFubm90YXRpb24gaWYgdGhlIGFyZ3VtZW50IGlzIGFuIEVudGl0eVNldC5cblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgRHJhZnRSb290XG5cdCAqL1xuXHRnZXREcmFmdE5vZGU6IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVua25vd24gfCB1bmRlZmluZWQpOiBEcmFmdE5vZGUgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnROb2RlIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgbWV0aG9kIHRvIGdldCBzdGlja3kgc2Vzc2lvbi5cblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgU2Vzc2lvbiBTdGlja3lTZXNzaW9uU3VwcG9ydGVkXG5cdCAqL1xuXHRnZXRTdGlja3lTZXNzaW9uOiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmtub3duIHwgdW5kZWZpbmVkKTogU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA6IHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiBkZWxldGUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBFbnRpdHlUeXBlXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgZGVsZXRlIGJ1dHRvbiBpcyBoaWRkZW5cblx0ICovXG5cdGdldERlbGV0ZUhpZGRlbjogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogRGVsZXRlSGlkZGVuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoaXNFbnRpdHlTZXQoZW50aXR5U2V0KSkge1xuXHRcdFx0cmV0dXJuIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuID8/IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkRlbGV0ZUhpZGRlbjtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIG1ldGFwYXRoIGZvciB0aGUgZ2l2ZW4gbGlzdCBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgTGlzdEJpbmRpbmcuXG5cdCAqIEByZXR1cm5zIE1ldGFQYXRoXG5cdCAqL1xuXHRnZXRBYnNvbHV0ZVBhdGhGcm9tTGlzdEJpbmRpbmcobGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG1ldGFtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IG1ldGFQYXRoO1xuXHRcdGNvbnN0IHJvb3RCaW5kaW5nID0gbGlzdEJpbmRpbmcuZ2V0Um9vdEJpbmRpbmcoKTtcblx0XHRpZiAobGlzdEJpbmRpbmcgPT09IHJvb3RCaW5kaW5nKSB7XG5cdFx0XHRtZXRhUGF0aCA9IG1ldGFtb2RlbC5nZXRNZXRhUGF0aChsaXN0QmluZGluZy5nZXRQYXRoKCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByb290QmluZGluZ1BhdGggPSByb290QmluZGluZz8uZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gbGlzdEJpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0bWV0YVBhdGggPSBtZXRhbW9kZWwuZ2V0TWV0YVBhdGgoYCR7cm9vdEJpbmRpbmdQYXRofS8ke3JlbGF0aXZlUGF0aH1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1ldGFQYXRoO1xuXHR9LFxuXG5cdGVuaGFuY2VPRGF0YU1vZGVsKG9kYXRhTW9kZWw6IE9EYXRhTW9kZWwsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0b2RhdGFNb2RlbC52aXJ0dWFsUHJvcGVydHlCaW5kaW5nUmVnaXN0cnkgPSBuZXcgQXJyYXk8T0RhdGFQcm9wZXJ0eUJpbmRpbmc+KCk7XG5cdFx0Y29uc3QgZm5NZXNzYWdlID0gb2RhdGFNb2RlbC5zZXRNZXNzYWdlcztcblx0XHRjb25zdCBsb2NhbEFubm90YXRpb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pO1xuXHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldERlZmF1bHRCaW5kaW5nTW9kZShCaW5kaW5nTW9kZS5PbmVXYXkpO1xuXHRcdGNvbnN0IGJhc2VTZXRQcm9wZXJ0eSA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5O1xuXHRcdGNvbnN0IGJhc2VHZXRQcm9wZXJ0eSA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldFByb3BlcnR5O1xuXHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldFByb3BlcnR5ID0gZnVuY3Rpb24gKHBhdGgsIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogdW5rbm93biB7XG5cdFx0XHRjb25zdCBbcHJvcGVydHlOYW1lLCBhbm5vdGF0aW9uVHlwZV0gPSBwYXRoLnNwbGl0KFwiQCR1aTUuZmUuXCIpO1xuXG5cdFx0XHRpZiAoY29udGV4dCAmJiBjb250ZXh0LmlzVHJhbnNpZW50KCkgIT09IHRydWUgJiYgYW5ub3RhdGlvblR5cGUgPT09IFwiQENvbW1vbi9FeHRlcm5hbElEXCIpIHtcblx0XHRcdFx0Y29uc3QgY29udGV4dE9iamVjdCA9IGNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGlmIChjb250ZXh0T2JqZWN0KSB7XG5cdFx0XHRcdFx0Y29uc3QgbWV0YVBhdGggPSBuZXcgTWV0YVBhdGg8RW50aXR5U2V0Pihcblx0XHRcdFx0XHRcdGNvbnZlcnRUeXBlcyhvZGF0YU1vZGVsLmdldE1ldGFNb2RlbCgpKSxcblx0XHRcdFx0XHRcdG9kYXRhTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YVBhdGgoY29udGV4dC5nZXRQYXRoKCkpLFxuXHRcdFx0XHRcdFx0b2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWRQcm9wZXJ0eSA9IG1ldGFQYXRoLmdldE1ldGFQYXRoRm9yUGF0aDxQcm9wZXJ0eT4ocHJvcGVydHlOYW1lKT8uZ2V0VGFyZ2V0KCkuYW5ub3RhdGlvbnMuQ29tbW9uXG5cdFx0XHRcdFx0XHQ/LkV4dGVybmFsSUQ7XG5cdFx0XHRcdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGV4dGVybmFsSWRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBjb250ZXh0LmdldE9iamVjdChleHRlcm5hbElkUHJvcGVydHkucGF0aCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBjb250ZXh0LmdldE9iamVjdChwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRleHQgJiYgYW5ub3RhdGlvblR5cGUgPT09IFwiY29udGV4dFBhdGhcIikge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBiYXNlR2V0UHJvcGVydHkuYXBwbHkodGhpcywgW3BhdGgsIGNvbnRleHRdKTtcblx0XHR9O1xuXG5cdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkgPSBmdW5jdGlvbiAocGF0aCwgdmFsdWUsIGNvbnRleHQsIGFzeW5jVXBkYXRlKTogYm9vbGVhbiB7XG5cdFx0XHRsZXQgZnVsbFBhdGggPSBwYXRoO1xuXHRcdFx0aWYgKGNvbnRleHQpIHtcblx0XHRcdFx0ZnVsbFBhdGggPSBjb250ZXh0LmdldFBhdGgocGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBfcmVmcmVzaExvY2FsTW9kZWwgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdHRoaXMucmVmcmVzaCgpO1xuXHRcdFx0fTtcblx0XHRcdGNvbnN0IFtwcm9wZXJ0eU5hbWUsIGFubm90YXRpb25UeXBlXSA9IHBhdGguc3BsaXQoXCJAJHVpNS5mZS5cIik7XG5cdFx0XHRpZiAoY29udGV4dCAmJiBhbm5vdGF0aW9uVHlwZSA9PT0gXCJAQ29tbW9uL0V4dGVybmFsSURcIikge1xuXHRcdFx0XHRjb250ZXh0LnNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpO1xuXHRcdFx0XHQvLyByZWZyZXNoaW5nIEV4dGVybmFsSUQgYW5kIHRleHQgcHJvcGVydGllcyAocGF0aHMgbmVlZCB0byBiZSBkZXRlcm1pbmVkIGdlbmVyaWNhbGx5KVxuXHRcdFx0XHRjb25zdCBtZXRhUGF0aCA9IG5ldyBNZXRhUGF0aDxFbnRpdHlTZXQ+KFxuXHRcdFx0XHRcdGNvbnZlcnRUeXBlcyhvZGF0YU1vZGVsLmdldE1ldGFNb2RlbCgpKSxcblx0XHRcdFx0XHRvZGF0YU1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKGNvbnRleHQuZ2V0UGF0aCgpKSxcblx0XHRcdFx0XHRvZGF0YU1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKGNvbnRleHQuZ2V0UGF0aCgpKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBleHRlcm5hbElkUHJvcGVydHkgPSBtZXRhUGF0aC5nZXRNZXRhUGF0aEZvclBhdGg8UHJvcGVydHk+KHByb3BlcnR5TmFtZSk/LmdldFRhcmdldCgpLmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRDtcblx0XHRcdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGV4dGVybmFsSWRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRjb25zdCBleHRlcm5hbElkUHJvcFBhdGggPSBleHRlcm5hbElkUHJvcGVydHkucGF0aDtcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0aWVzVG9SZXF1ZXN0ID0gW2V4dGVybmFsSWRQcm9wUGF0aC5zdWJzdHJpbmcoMCwgZXh0ZXJuYWxJZFByb3BQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSldO1xuXHRcdFx0XHRcdGNvbnN0IHRleHRQcm9wZXJ0eSA9IG1ldGFQYXRoLmdldE1ldGFQYXRoRm9yUGF0aDxQcm9wZXJ0eT4oZXh0ZXJuYWxJZFByb3BQYXRoKT8uZ2V0VGFyZ2V0KCkuYW5ub3RhdGlvbnMuQ29tbW9uPy5UZXh0O1xuXHRcdFx0XHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0ZXh0UHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB0ZXh0UHJvcFBhdGggPSB0ZXh0UHJvcGVydHkucGF0aDtcblx0XHRcdFx0XHRcdGlmICh0ZXh0UHJvcFBhdGguaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnRpZXNUb1JlcXVlc3QucHVzaCh0ZXh0UHJvcFBhdGgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQoY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dClcblx0XHRcdFx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHMocHJvcGVydGllc1RvUmVxdWVzdClcblx0XHRcdFx0XHRcdC50aGVuKF9yZWZyZXNoTG9jYWxNb2RlbClcblx0XHRcdFx0XHRcdC5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnIgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGhTcGxpdCA9IGZ1bGxQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdC8vIGxldCdzIGVuc3VyZSB0aGF0IHN1YiBvYmplY3RzIGFyZSBpbml0aWFsaXplZFxuXHRcdFx0bGV0IHBhdGhGcm9tUm9vdCA9IFwiXCI7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnR5UGF0aFNwbGl0Lmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRpZiAoaSA+IDApIHtcblx0XHRcdFx0XHRwYXRoRnJvbVJvb3QgKz0gXCIvXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cGF0aEZyb21Sb290ICs9IHByb3BlcnR5UGF0aFNwbGl0W2ldO1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPYmplY3QocGF0aEZyb21Sb290KSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Ly8gaW5pdGlhbGl6ZVxuXHRcdFx0XHRcdHRoaXMuc2V0UHJvcGVydHkocGF0aEZyb21Sb290LCB7fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBiYXNlU2V0UHJvcGVydHkuYXBwbHkodGhpcywgW3BhdGgsIHZhbHVlLCBjb250ZXh0LCBhc3luY1VwZGF0ZV0pO1xuXHRcdH07XG5cdFx0ZnVuY3Rpb24gY2xlYXJBbm5vdGF0aW9uVHlwZShhbm5vdGF0aW9uVHlwZXM6IHN0cmluZ1tdLCBkYXRhU2V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IG9iamVjdCB7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbnRleHRQYXRoIGluIGRhdGFTZXQpIHtcblx0XHRcdFx0Ly8gd2UgYWRkZWQgYSBjb250ZXh0IGZvciBhY2NlcHRpbmcgcmVjb21tZW5kYXRpb25zIGV2ZW50dWFsbHkuXG5cdFx0XHRcdC8vIHRoZSBjb250ZXh0IGlzIGEgZGVlcGx5IG5lc3RlZCBvYmplY3QgaXRlcmF0aW5nIG92ZXIgaXQgY2F1c2UgdGhlIGNvZGUgdGhlIGJyZWFrXG5cdFx0XHRcdC8vIGhlbmNlIHdlIGFyZSBza2lwcGluZyBpdCBoZXJlLlxuXHRcdFx0XHRjb25zdCBjb250ZXh0ID0gZGF0YVNldD8uW2NvbnRleHRQYXRoXSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdFx0Y29uc3QgaXNDb250ZXh0ID0gY29udGV4dD8uaXNBPy4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKTtcblx0XHRcdFx0aWYgKHR5cGVvZiBjb250ZXh0ID09PSBcIm9iamVjdFwiICYmICFpc0NvbnRleHQpIHtcblx0XHRcdFx0XHRkYXRhU2V0W2NvbnRleHRQYXRoXSA9IGNsZWFyQW5ub3RhdGlvblR5cGUoYW5ub3RhdGlvblR5cGVzLCBkYXRhU2V0W2NvbnRleHRQYXRoXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG5cdFx0XHRcdFx0aWYgKGRhdGFTZXRbY29udGV4dFBhdGhdICYmIE9iamVjdC5rZXlzKGRhdGFTZXRbY29udGV4dFBhdGhdIGFzIG9iamVjdCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgZGF0YVNldFtjb250ZXh0UGF0aF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgYW5ub3RhdGlvblR5cGUgb2YgYW5ub3RhdGlvblR5cGVzKSB7XG5cdFx0XHRcdFx0aWYgKGNvbnRleHRQYXRoLmVuZHNXaXRoKGFubm90YXRpb25UeXBlKSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGRhdGFTZXRbY29udGV4dFBhdGhdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRhdGFTZXQ7XG5cdFx0fVxuXHRcdG9kYXRhTW9kZWwuX2xvY2FsQW5ub3RhdGlvbk1vZGVsID0gbG9jYWxBbm5vdGF0aW9uTW9kZWw7XG5cdFx0b2RhdGFNb2RlbC5nZXRMb2NhbEFubm90YXRpb25Nb2RlbCA9IGZ1bmN0aW9uICgpOiBKU09OTW9kZWwge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsO1xuXHRcdH07XG5cdFx0b2RhdGFNb2RlbC5zZXRNZXNzYWdlcyA9IGZ1bmN0aW9uIChtZXNzYWdlczogUmVjb3JkPHN0cmluZywgTWVzc2FnZVtdPik6IHZvaWQge1xuXHRcdFx0Y29uc3QgY2xlYW5lZERhdGEgPSBjbGVhckFubm90YXRpb25UeXBlKFtcIkAkdWk1LmZlLm1lc3NhZ2VUeXBlXCIsIFwiQCR1aTUuZmUubWVzc2FnZVRleHRcIl0sIHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLmdldERhdGEoKSk7XG5cdFx0XHR0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbC5zZXREYXRhKGNsZWFuZWREYXRhKTtcblx0XHRcdGZvciAoY29uc3QgbWVzc2FnZVRhcmdldCBpbiBtZXNzYWdlcykge1xuXHRcdFx0XHR0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbC5zZXRQcm9wZXJ0eShgJHttZXNzYWdlVGFyZ2V0fUAkdWk1LmZlLm1lc3NhZ2VUeXBlYCwgbWVzc2FnZXNbbWVzc2FnZVRhcmdldF1bMF0uZ2V0VHlwZSgpKTtcblx0XHRcdFx0dGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkoYCR7bWVzc2FnZVRhcmdldH1AJHVpNS5mZS5tZXNzYWdlVGV4dGAsIG1lc3NhZ2VzW21lc3NhZ2VUYXJnZXRdWzBdLmdldE1lc3NhZ2UoKSk7XG5cdFx0XHR9XG5cdFx0XHRmbk1lc3NhZ2UuYXBwbHkodGhpcywgW21lc3NhZ2VzXSk7XG5cdFx0fTtcblx0XHRjb25zdCBmbkJpbmRQcm9wZXJ0eSA9IG9kYXRhTW9kZWwuYmluZFByb3BlcnR5LmJpbmQob2RhdGFNb2RlbCk7XG5cdFx0b2RhdGFNb2RlbC5iaW5kUHJvcGVydHkgPSBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgcGFyYW1ldGVycyk6IE9EYXRhUHJvcGVydHlCaW5kaW5nIHtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uRmVhdHVyZURpc2FibGVkID0gYXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcz8uKCkuRGlzYWJsZUlucHV0QXNzaXN0YW5jZTtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uUHJvcGVydHlCaW5kaW5nID0gTW9kZWxIZWxwZXIuc2V0VXBSZWNvbW1lbmRhdGlvbkxvY2FsTW9kZWxCaW5kaW5nKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmbkJpbmRQcm9wZXJ0eSxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0cmVjb21tZW5kYXRpb25GZWF0dXJlRGlzYWJsZWRcblx0XHRcdCk7XG5cdFx0XHRpZiAocmVjb21tZW5kYXRpb25Qcm9wZXJ0eUJpbmRpbmcpIHtcblx0XHRcdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uUHJvcGVydHlCaW5kaW5nIGFzIE9EYXRhUHJvcGVydHlCaW5kaW5nO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhdGguZW5kc1dpdGgoXCJAJHVpNS5mZS5AQ29tbW9uL0V4dGVybmFsSURcIikgJiYgY29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbElkQmluZGluZyA9IGZuQmluZFByb3BlcnR5KHBhdGgsIGNvbnRleHQpO1xuXHRcdFx0XHRvZGF0YU1vZGVsLnZpcnR1YWxQcm9wZXJ0eUJpbmRpbmdSZWdpc3RyeS5wdXNoKGludGVybmFsSWRCaW5kaW5nKTtcblx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZEJpbmRpbmcgPSB0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbC5iaW5kUHJvcGVydHkocGF0aCwgY29udGV4dCkgYXMgdW5rbm93biBhcyBPRGF0YVByb3BlcnR5QmluZGluZztcblxuXHRcdFx0XHRpbnRlcm5hbElkQmluZGluZy5hdHRhY2hDaGFuZ2UoKCkgPT4ge1xuXHRcdFx0XHRcdGV4dGVybmFsSWRCaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGludGVybmFsSWRCaW5kaW5nXG5cdFx0XHRcdFx0LnJlcXVlc3RWYWx1ZSgpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0ZXh0ZXJuYWxJZEJpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKChlcnIpID0+IHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnIgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIGV4dGVybmFsSWRCaW5kaW5nO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhdGguaW5jbHVkZXMoXCJAJHVpNS5mZS5cIikpIHtcblx0XHRcdFx0Y29uc3QgcHJvcEJpbmRpbmcgPSB0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbC5iaW5kUHJvcGVydHkocGF0aCwgY29udGV4dCkgYXMgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgJiB7XG5cdFx0XHRcdFx0c2V0Q29udGV4dD86IEZ1bmN0aW9uO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAocGF0aC5lbmRzV2l0aChcIkAkdWk1LmZlLkBDb21tb24vRXh0ZXJuYWxJRFwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBwcm9wQmluZGluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRwcm9wQmluZGluZy51cGRhdGVSZXF1aXJlZCA9IGZ1bmN0aW9uIChtb2RlbDogb2JqZWN0KTogYm9vbGVhbiB7XG5cdFx0XHRcdFx0cmV0dXJuIG1vZGVsICYmIG1vZGVsID09PSBvZGF0YU1vZGVsO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAocGF0aC5pbmNsdWRlcyhcIkAkdWk1LmZlLnZpcnR1YWwuXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZXhwcmVzc2lvbiA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRWaXJ0dWFsQmluZGluZ0V4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRcdFx0TWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRUeXBlcyh0aGlzLmdldE1ldGFNb2RlbCgpKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgZ2hvc3RDb250cm9sID0gbmV3IEFueSh7IGFueTogY29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbiksIGJpbmRCYWNrUHJvcGVydHk6IHBhdGggfSk7XG5cdFx0XHRcdFx0Y29uc3QgZm5EZXN0cm95UHJvcGVydHlCaW5kaW5nID0gcHJvcEJpbmRpbmcuZGVzdHJveS5iaW5kKHByb3BCaW5kaW5nKTtcblx0XHRcdFx0XHRwcm9wQmluZGluZy5kZXN0cm95ID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0Z2hvc3RDb250cm9sPy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5EZXN0cm95UHJvcGVydHlCaW5kaW5nKCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBmblNldENvbnRleHQgPSBwcm9wQmluZGluZy5zZXRDb250ZXh0O1xuXHRcdFx0XHRcdGlmIChmblNldENvbnRleHQpIHtcblx0XHRcdFx0XHRcdHByb3BCaW5kaW5nLnNldENvbnRleHQgPSAobmV3Q29udGV4dDogQ29udGV4dCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRnaG9zdENvbnRyb2w/LnNldEJpbmRpbmdDb250ZXh0KG5ld0NvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRDb250ZXh0LmJpbmQocHJvcEJpbmRpbmcpKG5ld0NvbnRleHQpO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRnaG9zdENvbnRyb2wuc2V0TW9kZWwodGhpcyk7XG5cdFx0XHRcdFx0Y29uc3QgZ2hvc3RCaW5kaW5nID0gZ2hvc3RDb250cm9sLmdldEJpbmRpbmdJbmZvKFwiYW55XCIpPy5iaW5kaW5nO1xuXHRcdFx0XHRcdGNvbnN0IGZuQ2hlY2tVcGRhdGUgPSBnaG9zdEJpbmRpbmc/LmNoZWNrVXBkYXRlO1xuXHRcdFx0XHRcdGlmIChmbkNoZWNrVXBkYXRlKSB7XG5cdFx0XHRcdFx0XHRnaG9zdENvbnRyb2wuZ2V0QmluZGluZ0luZm8oXCJhbnlcIikuYmluZGluZy5jaGVja1VwZGF0ZSA9IChmb3JjZVVwZGF0ZTogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGZvcmNlIHRoZSB1cGRhdGUgb25seSBpZiB0aGUgZ2hvc3QgY29udHJvbCBpcyBib3VuZCB0byBhIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0Ly8gYW5kIHRoZSB2YWx1ZSBpbiB0aGUgbG9jYWwgYW5ub3RhdGlvbiBtb2RlbCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZXh0ZXJuYWwgdmFsdWUuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGdob3N0IGNvbnRyb2wgaXMgdXBkYXRlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LlxuXHRcdFx0XHRcdFx0XHRjb25zdCBpc0NvbnRleHRMb2FkZWQgPSBnaG9zdENvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0T2JqZWN0KCkgIT09IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZEJhY2tQcm9wZXJ0eSA9IGdob3N0Q29udHJvbC5nZXRCaW5kQmFja1Byb3BlcnR5KCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlSW5Mb2NhbEFubm90YXRpb24gPSBpc0NvbnRleHRMb2FkZWRcblx0XHRcdFx0XHRcdFx0XHQ/IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldFByb3BlcnR5KGdob3N0Q29udHJvbC5nZXRCaW5kaW5nQ29udGV4dCgpIS5nZXRQYXRoKGJpbmRCYWNrUHJvcGVydHkpKVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZm5DaGVja1VwZGF0ZS5iaW5kKGdob3N0QmluZGluZykoXG5cdFx0XHRcdFx0XHRcdFx0Zm9yY2VVcGRhdGUgfHxcblx0XHRcdFx0XHRcdFx0XHRcdChiaW5kQmFja1Byb3BlcnR5ICYmIGlzQ29udGV4dExvYWRlZCAmJiBnaG9zdEJpbmRpbmcuZ2V0RXh0ZXJuYWxWYWx1ZSgpICE9PSB2YWx1ZUluTG9jYWxBbm5vdGF0aW9uKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Z2hvc3RDb250cm9sLnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBwcm9wQmluZGluZztcblx0XHRcdH1cblx0XHRcdHJldHVybiBmbkJpbmRQcm9wZXJ0eShwYXRoLCBjb250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHR9O1xuXHRcdGNvbnN0IGZuRGVzdHJveSA9IG9kYXRhTW9kZWwuZGVzdHJveS5iaW5kKG9kYXRhTW9kZWwpO1xuXHRcdG9kYXRhTW9kZWwuZGVzdHJveSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3QgdnBCaW5kaW5nIG9mIG9kYXRhTW9kZWwudmlydHVhbFByb3BlcnR5QmluZGluZ1JlZ2lzdHJ5KSB7XG5cdFx0XHRcdHZwQmluZGluZy5kZXN0cm95KCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbC5kZXN0cm95KCk7XG5cdFx0XHRyZXR1cm4gZm5EZXN0cm95LmFwcGx5KHRoaXMpO1xuXHRcdH07XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXNvbHZlcyBhIG1ldGFkYXRhIGJpbmRpbmcgdG8gaXRzIHRleHQsIGVpdGhlciB1c2luZyB0aGUgY29udmVydGVyQ29udGV4dCBvciB0aGUgbWV0YU1vZGVsIGRpcmVjdGx5LlxuXHQgKiBAcGFyYW0gcGF0aFxuXHQgKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCB0ZXh0IGlmIHBvc3NpYmxlLCBlbHNlIHRoZSBpbnB1dCB2YWx1ZSBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIHBhdGggd2FzIHVuZGVmaW5lZFxuXHQgKi9cblx0ZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQ/OiBDb252ZXJ0ZXJDb250ZXh0PHVua25vd24+LCBtZXRhTW9kZWw/OiBNZXRhTW9kZWwpOiBzdHJpbmcge1xuXHRcdGxldCB0ZXh0ID0gcGF0aCAhPT0gdW5kZWZpbmVkID8gcGF0aCA6IFwiXCI7XG5cdFx0aWYgKHBhdGg/LnN0YXJ0c1dpdGgoXCJ7bWV0YU1vZGVsPlwiKSkge1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsUGF0aCA9IHBhdGguc3Vic3RyaW5nKDExLCBwYXRoLmxlbmd0aCAtIDEpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQpIHtcblx0XHRcdFx0XHR0ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihtZXRhTW9kZWxQYXRoKS5hbm5vdGF0aW9uPy50b1N0cmluZygpID8/IFwiXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGV4dCA9IG1ldGFNb2RlbD8uZ2V0T2JqZWN0KG1ldGFNb2RlbFBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdExvZy5pbmZvKGBVbmFibGUgdG8gcmV0cmlldmUgdGV4dCBmcm9tIG1ldGEgbW9kZWwgdXNpbmcgcGF0aCAke21ldGFNb2RlbFBhdGh9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0ZXh0O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmV0cmlldmUgdGhlIHByb3BlcnR5IHBhdGggY29ycmVzcG9uZGluZyB0byBzdGF0ZSBtZXNzYWdlcy5cblx0ICogQHBhcmFtIG1ldGFNb2RlbCBUaGUgbWV0YW1vZGVsXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBQYXRoIGZvciB0aGUgY29udGV4dCBvbiB3aGljaCB3ZSB3aGF0IHRvIHJldHJlaXZlIHRoZSBtZXNzYWdlIHBhdGhcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCwgb3IgdW5kZWZpbmVkIGlmIG5vIE1lc3NhZ2VzIGFubm90YXRpb24gaXMgZGVmaW5lZFxuXHQgKi9cblx0Z2V0TWVzc2FnZXNQYXRoOiBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgY29udGV4dFBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoY29udGV4dFBhdGgpO1xuXHRcdGNvbnN0IG9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YUNvbnRleHQpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gb2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uTWVzc2FnZXM7XG5cdFx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG1lc3NhZ2VzKSA/IG1lc3NhZ2VzLnBhdGggOiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBTZXR1cCByZWNvbW1lbmRhdGlvbiBsb2NhbCBiaW5kaW5nIHRvIG1ha2UgcmVjb21tZW5kYXRpb25zIGFjY2Vzc2libGUgdmlhIGNsaWVudCBzaWRlIGluc3RhbmNlIGFubm90YXRpb25zLlxuXHQgKlxuXHQgKiBSZWNvbW1lbmRhdGlvbnMgaXMgYSBjb21wbGV4IHByb3BlcnR5LlxuXHQgKiBNb2RlbCBkb2VzIG5vdCBwcm92aWRlIGFuIGVhc3kgd2F5IHRvIGJpbmQgdG8gY29tcGxleCBwcm9wZXJ0aWVzLiBJdCBoYXMgMiBtYWpvciBsaW1pdGF0aW9ucy5cblx0ICpcblx0ICogSXQgb25seSBzdXBwb3J0cyBvbmUgdGltZSBiaW5kaW5nIHRvIGNvbXBsZXggcHJvcGVydGllcy4gVGhpcyBpcyBuZWVkZWQgdG8gc2hvdyB1cGRhdGVkIHJlY29tbWVuZGF0aW9ucyBvbiB0aGUgVUkuXG5cdCAqIEl0IGRvZXMgbm90IHN1cHBvcnQgYmluZGluZ3MgdG8gcHJvcGVydGllcyBpbnNpZGUgYSBjb21wbGV4IHByb3BlcnR5IHdoaWNoIGlzIG5lZWRlZCBmb3IgcmVjb21tZW5kYXRpb25zLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgd29ya2Fyb3VuZCB0byBvdmVyY29tZSB0aGUgYWJvdmUgdHdvIHNob3J0IGNvbWluZ3MgYW5kXG5cdCAqIHRvIHN1cHBvcnQgY2xpZW50IHNpZGUgaW5zdGFuY2UgYW5ub3RhdGlvbnMgZm9yIHJlY29tbWVuZGF0aW9ucy5cblx0ICogQHBhcmFtIG9kYXRhTW9kZWwgVGhlIG9kYXRhIG1vZGVsIGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gZm5CaW5kUHJvcGVydHkgT3JpZ2luYWwgYmluZCBwcm9wZXJ0eSBvZiB0aGUgb0RhdGFNb2RlbFxuXHQgKiBAcGFyYW0gcGF0aCBCaW5kaW5nIHBhdGggZm9yIHdoaWNoIHJlY29tbWVuZGF0aW9uIGlzIGJlaW5nIHJlcXVlc3RlZFxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHdoZXJlIHJlY29tbWVuZGF0aW9uIGlzIGJlaW5nIHJlcXVlc3RlZFxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25GZWF0dXJlRGlzYWJsZWQgRmxhZyB3aGljaCB0b2dnbGVzIHRoZSByZWNvbW1lbmRhdGlvbiBmZWF0dXJlXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uIHByb3BlcnR5IHBhdGggZm9yIHRoZSBlbnRpdHkgcmVsYXRlZCB0byB0aGUgY29udGV4dCBhbmQgd2hldGhlciB0aGUgYmluZGluZ1BhdGggaXMgcmVsZXZhbnQgb3Igbm90IGJhc2VkIG9uIG1ldGFkYXRhLlxuXHQgKi9cblx0c2V0VXBSZWNvbW1lbmRhdGlvbkxvY2FsTW9kZWxCaW5kaW5nOiBmdW5jdGlvbiAoXG5cdFx0b2RhdGFNb2RlbDogT0RhdGFNb2RlbCxcblx0XHRmbkJpbmRQcm9wZXJ0eTogRnVuY3Rpb24sXG5cdFx0cGF0aDogc3RyaW5nLFxuXHRcdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdHJlY29tbWVuZGF0aW9uRmVhdHVyZURpc2FibGVkOiBib29sZWFuXG5cdCk6IFByb3BlcnR5QmluZGluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHBhdGguaW5jbHVkZXMoXCJ1aTUuZmUucmVjb21tZW5kYXRpb25zXCIpKSB7XG5cdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvbmJpbmRpbmcgPSBvZGF0YU1vZGVsLmdldExvY2FsQW5ub3RhdGlvbk1vZGVsKCkuYmluZFByb3BlcnR5KHBhdGgsIGNvbnRleHQpIGFzIE9EYXRhUHJvcGVydHlCaW5kaW5nICYge1xuXHRcdFx0XHRzZXRDb250ZXh0OiBGdW5jdGlvbjtcblx0XHRcdH07XG5cdFx0XHRjb25zdCBzZXRDb250ZXh0T25SZWNvbW1lbmRhdGlvbkJpbmRpbmcgPSAob2RhdGFQcm9wZXJ0eUJpbmRpbmc6IE9EYXRhUHJvcGVydHlCaW5kaW5nICYgeyBzZXRDb250ZXh0OiBGdW5jdGlvbiB9KTogdm9pZCA9PiB7XG5cdFx0XHRcdC8vd2UgbWFrZSBzdXJlIHRoZSBwYXJlbnQgY29udGV4dCBpcyBzZXQgdG8gdGhlIHByb3BlcnR5YmluZGluZ1xuXHRcdFx0XHRjb25zdCBmblNldENvbnRleHQgPSByZWNvbW1lbmRhdGlvbmJpbmRpbmcuc2V0Q29udGV4dDtcblx0XHRcdFx0aWYgKGZuU2V0Q29udGV4dCkge1xuXHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uYmluZGluZy5zZXRDb250ZXh0ID0gKG5ld0NvbnRleHQ6IENvbnRleHQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdG9kYXRhUHJvcGVydHlCaW5kaW5nPy5zZXRDb250ZXh0KG5ld0NvbnRleHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuU2V0Q29udGV4dC5iaW5kKG9kYXRhUHJvcGVydHlCaW5kaW5nKShuZXdDb250ZXh0KTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKGNvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgeyByZWNvbW1lbmRhdGlvbkNvbXBsZXhQcm9wZXJ0eSwgaXNSZWNvbW1lbmRlZFByb3BlcnR5IH0gPSBNb2RlbEhlbHBlci52YWxpZGF0ZVJlY29tbWVuZGF0aW9uQmluZGluZ1BhdGgoXG5cdFx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0XHRwYXRoXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbkNvbXBsZXhQcm9wZXJ0eSAmJiBpc1JlY29tbWVuZGVkUHJvcGVydHkgJiYgIXJlY29tbWVuZGF0aW9uRmVhdHVyZURpc2FibGVkKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWxyZWFkeUJvdW5kID0gb2RhdGFNb2RlbC52aXJ0dWFsUHJvcGVydHlCaW5kaW5nUmVnaXN0cnkuc29tZSgoZXhpc3RpbmdCaW5kaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQvLyBiaW5kaW5nIGV4aXN0cyBidXQgdGhlIGNvbnRleHQgY2FuIGJlIGRlc3Ryb3llZCBzb21ldGltZXMgYmVjYXVzZSBvZiBkaXNjYXJkIGFuZCBkZWxldGUuXG5cdFx0XHRcdFx0XHRcdC8vIGhlbmNlIHdlIG5lZWQgdG8gY2hlY2sgaWYgY29udGV4dCBleGlzdHMgb3Igbm90IGJlZm9yZSBkZWNpZGluZyBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBiaW5kaW5nIG9yIG5vdC5cblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogV2UgbWlnaHQgd2FudCB0byBjbGVhciB0aGUgcHJvcGVydHkgYmluZGluZyB3aGVuIHRoZSBjb250ZXggaXMgZGVzdHJveWVkLlxuXHRcdFx0XHRcdFx0XHRjb250ZXh0LmdldFBhdGgoKSA9PT0gZXhpc3RpbmdCaW5kaW5nLmdldENvbnRleHQoKT8uZ2V0UGF0aCgpICYmXG5cdFx0XHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uQ29tcGxleFByb3BlcnR5ID09PSBleGlzdGluZ0JpbmRpbmcuZ2V0UGF0aCgpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGlmICghYWxyZWFkeUJvdW5kKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvZGF0YVByb3BlcnR5QmluZGluZyA9IGZuQmluZFByb3BlcnR5KHJlY29tbWVuZGF0aW9uQ29tcGxleFByb3BlcnR5LCBjb250ZXh0KSBhcyBPRGF0YVByb3BlcnR5QmluZGluZyAmIHtcblx0XHRcdFx0XHRcdFx0c2V0Q29udGV4dDogRnVuY3Rpb247XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0Ly8gQmVjdWFzZSByZWNvbW1lbmRhdGlvbnMgaXMgYSBjb21wbGV4IHByb3BlcnR5IGFuZCBub3QgYSBwcmltaXRpdmUgdHlwZSBoZW5jZSB1c2UgYSByYXcgdHlwZS5cblx0XHRcdFx0XHRcdG9kYXRhUHJvcGVydHlCaW5kaW5nLnNldFR5cGUobmV3IFJhdygpLCBcImFueVwiKTtcblx0XHRcdFx0XHRcdG9kYXRhUHJvcGVydHlCaW5kaW5nLnNldEJpbmRpbmdNb2RlKEJpbmRpbmdNb2RlLk9uZVdheSk7XG5cdFx0XHRcdFx0XHRvZGF0YU1vZGVsLnZpcnR1YWxQcm9wZXJ0eUJpbmRpbmdSZWdpc3RyeS5wdXNoKG9kYXRhUHJvcGVydHlCaW5kaW5nKTtcblx0XHRcdFx0XHRcdG9kYXRhUHJvcGVydHlCaW5kaW5nLmF0dGFjaENoYW5nZSgoZXZlbnQ6IE9EYXRhUHJvcGVydHlCaW5kaW5nJENoYW5nZUV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdC8vIHJlZnJlc2ggdGhlIGxvY2FsIGFubm90YXRpb24gYmluZGluZyBvbmNlIHJlY29tbWVuZGF0aW9uIGJpbmRpbmcgaXMgdXBkYXRlZC5cblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlCaW5kaW5nID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRDb250ZXh0ID0gZXZlbnQuZ2V0U291cmNlKCkuZ2V0Q29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0XHRcdFx0XHRpZiAoY3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBjb250ZXh0UmVjb21tZW5kYXRpb25zID0gcHJvcGVydHlCaW5kaW5nLmdldFZhbHVlKCk7XG5cdFx0XHRcdFx0XHRcdFx0TW9kZWxIZWxwZXIuc2V0UmVjb21tZW5kYXRpb25zT25Mb2NhbEFubm90YXRpb25Nb2RlbChjb250ZXh0UmVjb21tZW5kYXRpb25zLCBjdXJyZW50Q29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0cmVjb21tZW5kYXRpb25iaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHQvLyByZXVlc3RWYWx1ZSB3aWxsIGFkZCB0aGUgcmVjb21tZW5kYXRpb24gcHJvcGVydHkgdG8gdGhlICRzZWxlY3Rcblx0XHRcdFx0XHRcdC8vIGhlbmNlIHdlIGRvIG5vdCBuZWVkIHRvIGFkZCBpdCB0byB0aGUgJHNlbGVjdCB3aGVuIGNvbnN0cnVjdGluZyB0aGUgYmluZGluZyBhdCB2YXJpb3VzIHBsYWNlcyAoZm9ybXMsIHRhYmxlIGV0Yy4pXG5cdFx0XHRcdFx0XHRvZGF0YVByb3BlcnR5QmluZGluZy5yZXF1ZXN0VmFsdWUoKS5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiUmVjb21tZW5kYXRpb25zIGNvdWxkIG5vdCBiZSByZXNvbHZlZFwiLCBlcnJvcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHNldENvbnRleHRPblJlY29tbWVuZGF0aW9uQmluZGluZyhvZGF0YVByb3BlcnR5QmluZGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBiaW5kaW5nIGJlY29tZXMgaW52YWxpZCBhbmQgYSBuZXcgYmluZGluZyBpcyBjcmVhdGVkIHNvIHRoZSByZWNvbW1lbmRhdGlvbiBwcm9wZXJ0eSBiaW5kaW5nIGNhbiBiZSBjcmVhdGVkLlxuXHRcdFx0Ly9cblx0XHRcdC8vIEZvciB0aGlzIHdlIG5lZWQgdG8gb3ZlcnJpZGUgdXBkYXRlUmVxdWlyZWQgc28gdGhhdCB0aGUgYmluZGluZyBpcyB1cGRhdGVkIHVudGlsIGl0IGhhcyBub3QgcmVjZWl2ZWQgYSBjb250ZXh0XG5cdFx0XHQvLyBwb3N0IHRoYXQgd2UgZG8gbm90IG5lZWQgdGhlIGJpbmRpbmcgdG8gYmUgdXBkYXRlZC5cblx0XHRcdC8vIElmIHdlIHJlbW92ZSB0aGUgdXBkYXRlUmVxdWlyZWQgb3ZlcnJpZGUgdGhlbiByZWNvbW1lbmRhdGlvbnMgd29yayBmaW5lIGJ5IGR1cmluZyBzYXZlIG9mIGEgbmV3bHkgY3JlYXRlZCBkb2N1bWVudFxuXHRcdFx0Ly8gd2UgZ2V0IGJpbmRpbmcgcmVsYXRlZCBpc3N1ZXMuXG5cdFx0XHQvL1xuXHRcdFx0Ly8gVXBkYXRpbmcgdGhlIGJpbmRpbmcgdG8gcmVjb21tZW5kYXRpb25zIHdpbGwgYmUgZG9uZSBieSBzZXRQcm9wZXJ0eSBvbiB0aGUgbG9jYWxBbm5vdGF0aW9uTW9kZWxcblx0XHRcdC8vIHdoZW4gdGhlIHJlY29tbWVuZGF0aW9uIHByb3BlcnR5IGlzIGFjdHVhbGx5IHVwZGF0ZWQuXG5cdFx0XHRyZWNvbW1lbmRhdGlvbmJpbmRpbmcudXBkYXRlUmVxdWlyZWQgPSBmdW5jdGlvbiAobW9kZWw6IG9iamVjdCk6IGJvb2xlYW4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRDb250ZXh0KCkgPyBtb2RlbCAmJiBtb2RlbCA9PT0gb2RhdGFNb2RlbCA6IG1vZGVsICYmIHRoaXMuZ2V0TW9kZWwoKSA9PT0gbW9kZWw7XG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uYmluZGluZztcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgYmFzZWQgb24gbWV0YWRhdGEgd2hldGhlciBhIGdpdmVuIGJpbmRpbmcgc2hvdWxkIGRlYWwgd2l0aCByZWNvbW1lbmRhdGlvbnMgb3Igbm90LlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHdoZXJlIHJlY29tbWVuZGF0aW9uIGlzIGJlaW5nIHJlcXVlc3RlZC5cblx0ICogQHBhcmFtIGJpbmRpbmdQYXRoIEJpbmRpbmcgcGF0aCBmb3Igd2hpY2ggcmVjb21tZW5kYXRpb24gaXMgYmVpbmcgcmVxdWVzdGVkLlxuXHQgKiBAcmV0dXJucyBSZWNvbW1lbmRhdGlvbiBwcm9wZXJ0eSBwYXRoIGZvciB0aGUgZW50aXR5IHJlbGF0ZWQgdG8gdGhlIGNvbnRleHQgYW5kIHdoZXRoZXIgdGhlIGJpbmRpbmdQYXRoIGlzIHJlbGV2YW50IG9yIG5vdCBiYXNlZCBvbiBtZXRhZGF0YS5cblx0ICovXG5cdHZhbGlkYXRlUmVjb21tZW5kYXRpb25CaW5kaW5nUGF0aDogZnVuY3Rpb24gKFxuXHRcdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdGJpbmRpbmdQYXRoOiBzdHJpbmdcblx0KTogeyByZWNvbW1lbmRhdGlvbkNvbXBsZXhQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkOyBpc1JlY29tbWVuZGVkUHJvcGVydHk6IGJvb2xlYW4gfSB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGNvbnRleHRNZXRhUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoY29udGV4dE1ldGFQYXRoKTtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KS50YXJnZXRFbnRpdHlUeXBlO1xuXHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uQ29tcGxleFByb3BlcnR5ID0gKHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VSSBhcyBFbnRpdHlUeXBlQW5ub3RhdGlvbnNfVUlfV2l0aF9SZWNvbW1lbmRhdGlvbnMpXG5cdFx0XHQ/LlJlY29tbWVuZGF0aW9ucz8ucGF0aDtcblx0XHQvLyBzYW1wbGUgYmluZGluZyAtIFNoaXBwaW5nQ29uZGl0aW9uQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcblx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBiaW5kaW5nUGF0aC5zcGxpdChcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9uc1wiKVswXTtcblx0XHRjb25zdCBpc1JlY29tbWVuZGVkUHJvcGVydHkgPSB0YXJnZXRFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuc29tZSgoZW50aXR5UHJvcGVydHkpID0+IHtcblx0XHRcdGlmIChlbnRpdHlQcm9wZXJ0eS5uYW1lID09PSByZWNvbW1lbmRhdGlvbkNvbXBsZXhQcm9wZXJ0eSkge1xuXHRcdFx0XHRyZXR1cm4gKGVudGl0eVByb3BlcnR5Py50YXJnZXRUeXBlIGFzIENvbXBsZXhUeXBlKT8ucHJvcGVydGllcy5zb21lKChwcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRyZWNvbW1lbmRhdGlvbkNvbXBsZXhQcm9wZXJ0eSxcblx0XHRcdGlzUmVjb21tZW5kZWRQcm9wZXJ0eVxuXHRcdH07XG5cdH0sXG5cdC8qKlxuXHQgKiBVcGRhdGUgcmVjb21tZW5kYXRpb24gY2xpZW50IHNpZGUgaW5zdGFuY2UgYW5ub3RhdGlvbnMuXG5cdCAqIEBwYXJhbSBjb250ZXh0UmVjb21tZW5kYXRpb25zIFVwZGF0ZWQgcmVjb21tZW5kYXRpb25zLlxuXHQgKiBAcGFyYW0gY3VycmVudENvbnRleHQgQ29udGV4dCB3aGVyZSByZWNvbW1lbmRhdGlvbiB3YXMgdXBkYXRlZC5cblx0ICovXG5cdHNldFJlY29tbWVuZGF0aW9uc09uTG9jYWxBbm5vdGF0aW9uTW9kZWw6IGZ1bmN0aW9uIChjb250ZXh0UmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbnMsIGN1cnJlbnRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQge1xuXHRcdGlmIChjb250ZXh0UmVjb21tZW5kYXRpb25zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHJlY29tbWVuZGVkUHJvcGVydHkgaW4gY29udGV4dFJlY29tbWVuZGF0aW9ucykge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eVJlY29tbWVuZGF0aW9ucyA9IGNvbnRleHRSZWNvbW1lbmRhdGlvbnNbcmVjb21tZW5kZWRQcm9wZXJ0eV07XG5cdFx0XHRcdGNvbnN0IGxvY2FsTW9kZWxQYXRoID0gcmVjb21tZW5kZWRQcm9wZXJ0eTtcblx0XHRcdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uTW9kZWwgPSBjdXJyZW50Q29udGV4dC5nZXRNb2RlbCgpLmdldExvY2FsQW5ub3RhdGlvbk1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IHR5cGVBaGVhZFZhbHVlcyA9IFtdO1xuXHRcdFx0XHRmb3IgKGNvbnN0IHByb3BlcnR5UmVjb21tZW5kYXRpb24gb2YgcHJvcGVydHlSZWNvbW1lbmRhdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAocHJvcGVydHlSZWNvbW1lbmRhdGlvbi5SZWNvbW1lbmRlZEZpZWxkSXNTdWdnZXN0aW9uKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBwbGFjZWhvbGRlclZhbHVlQW5ub3RhdGlvblBhdGggPSBjdXJyZW50Q29udGV4dC5nZXRQYXRoKFxuXHRcdFx0XHRcdFx0XHRsb2NhbE1vZGVsUGF0aCArIFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyRGVzY3JpcHRpb25Bbm5vdGF0aW9uUGF0aCA9IGN1cnJlbnRDb250ZXh0LmdldFBhdGgoXG5cdFx0XHRcdFx0XHRcdGxvY2FsTW9kZWxQYXRoICsgXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyVmFsdWVBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlSZWNvbW1lbmRhdGlvbi5SZWNvbW1lbmRlZEZpZWxkVmFsdWUsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlckRlc2NyaXB0aW9uQW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UmVjb21tZW5kYXRpb24uUmVjb21tZW5kZWRGaWVsZERlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHQvLyBzZXQgcGxhY2Vob2xkZXIgZGVzY3JpcHRpb24gYW5kIHZhbHVlc1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvL2xvY2FsQW5ub3RhdGlvbk1vZGVsLlxuXHRcdFx0XHRcdC8vIHB1c2ggdG9wIDMgcmVjb21tZW5kYXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0aWYgKHByb3BlcnR5UmVjb21tZW5kYXRpb24uUmVjb21tZW5kZWRGaWVsZFZhbHVlKSB7XG5cdFx0XHRcdFx0XHR0eXBlQWhlYWRWYWx1ZXMucHVzaChwcm9wZXJ0eVJlY29tbWVuZGF0aW9uLlJlY29tbWVuZGVkRmllbGRWYWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghcHJvcGVydHlSZWNvbW1lbmRhdGlvbnMgfHwgIXByb3BlcnR5UmVjb21tZW5kYXRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyVmFsdWVBbm5vdGF0aW9uUGF0aCA9IGN1cnJlbnRDb250ZXh0LmdldFBhdGgoXG5cdFx0XHRcdFx0XHRsb2NhbE1vZGVsUGF0aCArIFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgcGxhY2Vob2xkZXJEZXNjcmlwdGlvbkFubm90YXRpb25QYXRoID0gY3VycmVudENvbnRleHQuZ2V0UGF0aChcblx0XHRcdFx0XHRcdGxvY2FsTW9kZWxQYXRoICsgXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRsb2NhbEFubm90YXRpb25Nb2RlbC5zZXRQcm9wZXJ0eShwbGFjZWhvbGRlclZhbHVlQW5ub3RhdGlvblBhdGgsIG51bGwsIGN1cnJlbnRDb250ZXh0LCBmYWxzZSk7XG5cdFx0XHRcdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkocGxhY2Vob2xkZXJEZXNjcmlwdGlvbkFubm90YXRpb25QYXRoLCBcIlwiLCBjdXJyZW50Q29udGV4dCwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdGN1cnJlbnRDb250ZXh0LmdldFBhdGgobG9jYWxNb2RlbFBhdGggKyBcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy50eXBlQWhlYWRWYWx1ZXNcIiksXG5cdFx0XHRcdFx0dHlwZUFoZWFkVmFsdWVzLFxuXHRcdFx0XHRcdGN1cnJlbnRDb250ZXh0LFxuXHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5KGN1cnJlbnRDb250ZXh0LmdldFBhdGgoXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIiksIGN1cnJlbnRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSBTZWNvbmRhcnlLZXlzIGZyb20gZW50aXR5dHlwZS5cblx0ICogQHBhcmFtIGVudGl0eVR5cGUgRGF0YW1vZGVsIG9iamVjdCBvZiBlbnRpdHlUeXBlXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgRGF0YW1vZGVsIG9iamVjdCBvZiBlbnRpdHlTZXRcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWx0ZXJuYXRlIGtleXNcblx0ICovXG5cdGdldEFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXM6IChlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBlbnRpdHlTZXQ6IEVudGl0eVNldCk6IHN0cmluZ1tdID0+IHtcblx0XHRjb25zdCBhbHRlcm5hdGVLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IF9mZXRjaEFsdGVybmF0ZUtleXMgPSAoZW50aXR5VHlwZU9yU2V0OiBFbnRpdHlTZXQgfCBFbnRpdHlUeXBlKTogdm9pZCA9PiB7XG5cdFx0XHRlbnRpdHlUeXBlT3JTZXQ/LmFubm90YXRpb25zPy5Db3JlPy5BbHRlcm5hdGVLZXlzPy5mb3JFYWNoKChhbHRlcm5hdGVLZXk6IEFsdGVybmF0ZUtleSkgPT4ge1xuXHRcdFx0XHRhbHRlcm5hdGVLZXkuS2V5LmZvckVhY2goKGtleTogUHJvcGVydHlSZWYpID0+IHtcblx0XHRcdFx0XHRhbHRlcm5hdGVLZXlzLnB1c2goa2V5Lk5hbWUudmFsdWUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0Y29uc3QgX2ZldGNoU2Vjb25kYXJ5S2V5cyA9IChlVDogRW50aXR5VHlwZSk6IHZvaWQgPT4ge1xuXHRcdFx0ZVQ/LmFubm90YXRpb25zPy5Db21tb24/LlNlY29uZGFyeUtleT8uZm9yRWFjaCgoc2Vjb25kYXJ5S2V5OiBQcm9wZXJ0eVBhdGgpID0+IHtcblx0XHRcdFx0aWYgKCFhbHRlcm5hdGVLZXlzLmluY2x1ZGVzKHNlY29uZGFyeUtleS52YWx1ZSkpIHtcblx0XHRcdFx0XHRhbHRlcm5hdGVLZXlzLnB1c2goc2Vjb25kYXJ5S2V5LnZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fTtcblx0XHRfZmV0Y2hBbHRlcm5hdGVLZXlzKGVudGl0eVNldCk7XG5cdFx0aWYgKCFhbHRlcm5hdGVLZXlzLmxlbmd0aCkge1xuXHRcdFx0X2ZldGNoQWx0ZXJuYXRlS2V5cyhlbnRpdHlUeXBlKTtcblx0XHR9XG5cdFx0X2ZldGNoU2Vjb25kYXJ5S2V5cyhlbnRpdHlUeXBlKTtcblx0XHRyZXR1cm4gYWx0ZXJuYXRlS2V5cztcblx0fVxufTtcblxudHlwZSBSZWNvbW1lbmRhdGlvbnMgPSBSZWNvcmQ8c3RyaW5nLCBSZWNvbW1lbmRhdGlvbkRldGFpbHNbXT47XG50eXBlIFJlY29tbWVuZGF0aW9uRGV0YWlscyA9IHtcblx0UmVjb21tZW5kZWRGaWVsZFZhbHVlOiBzdHJpbmc7XG5cdFJlY29tbWVuZGVkRmllbGRJc1N1Z2dlc3Rpb246IGJvb2xlYW47XG5cdFJlY29tbWVuZGVkRmllbGREZXNjcmlwdGlvbjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgSW50ZXJuYWxNb2RlbENvbnRleHQgPSB7IGdldE1vZGVsKCk6IEpTT05Nb2RlbCB9ICYgQmFzZUNvbnRleHQgJiB7XG5cdFx0c2V0UHJvcGVydHkoc1BhdGg6IHN0cmluZywgdlZhbHVlOiB1bmtub3duKTogdm9pZDtcblx0fTtcblxuZXhwb3J0IGRlZmF1bHQgTW9kZWxIZWxwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7RUFBQTtFQW9DQTtFQUNBO0VBQ0E7O0VBT0EsTUFBTUEsV0FBVyxHQUFHO0lBQ25CO0lBQ0E7SUFDQTtJQUNBQyx5QkFBeUIsRUFBRSxLQUFLO0lBQ2hDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ0Msd0JBQXdCLEVBQUUsU0FBQUEsQ0FBVUMsU0FBeUIsRUFBVztNQUN2RSxNQUFNQyxlQUFlLEdBQUdELFNBQVMsQ0FBQ0UsU0FBUyxDQUFDLEdBQUcsQ0FBQztNQUNoRCxLQUFLLE1BQU1DLGFBQWEsSUFBSUYsZUFBZSxFQUFFO1FBQzVDLElBQ0NBLGVBQWUsQ0FBQ0Us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
|
|
871
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2RlbEhlbHBlciIsImRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJtZXRhTW9kZWwiLCJlbnRpdHlDb250YWluZXIiLCJnZXRPYmplY3QiLCJlbnRpdHlTZXROYW1lIiwiJGtpbmQiLCJpc0RyYWZ0U3VwcG9ydGVkIiwicGF0aCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJvYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiY3VycmVudEVudGl0eVNldCIsInRhcmdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsImlzRHJhZnRSb290IiwiYklzRHJhZnROb2RlIiwiaXNEcmFmdE5vZGUiLCJiSXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50IiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0YXJnZXRPYmplY3QiLCJjb250YWluc1RhcmdldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJEcmFmdE5vZGUiLCJpc01ldGFQYXRoRHJhZnRTdXBwb3J0ZWQiLCJnZXRDbG9zZXN0RW50aXR5U2V0IiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWRGcm9tQ29udmVydGVyQ29udGV4dCIsImNvbnZlcnRlckNvbnRleHQiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImVudGl0eVNldHMiLCJzb21lIiwiZW50aXR5U2V0IiwiU2hhcmVBY3Rpb24iLCJ1bmRlZmluZWQiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsIm1ldGFPYmplY3QiLCJ0ZW1wbGF0ZUludGVyZmFjZSIsIm9NZXRhTW9kZWwiLCJjb250ZXh0IiwiZ2V0TW9kZWwiLCJfXyRmZUlzQ29sbGFib3JhdGlvbkRyYWZ0RW5hYmxlZCIsIm9FbnRpdHlDb250YWluZXIiLCJzRW50aXR5U2V0IiwiZ2V0RHJhZnRSb290UGF0aCIsIm9Db250ZXh0IiwiZ2V0TWV0YU1vZGVsIiwiZ2V0Um9vdFBhdGgiLCJzUGF0aCIsIm1vZGVsIiwiZmlyc3RJdGVyYXRpb24iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzSXRlcmF0aW9uUGF0aCIsIlJlZ0V4cCIsImV4ZWMiLCJzRW50aXR5UGF0aCIsImdldE1ldGFQYXRoIiwibURhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldENvbnRleHQiLCJnZXRQYXRoIiwiZ2V0U3RpY2t5Um9vdFBhdGgiLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImdldFRhcmdldEVudGl0eVNldCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0RW50aXR5U2V0UGF0aCIsIm9kYXRhTWV0YU1vZGVsIiwiZW50aXR5U2V0UGF0aCIsInNwbGl0IiwiZmlsdGVyIiwiZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmciLCJqb2luIiwicGF0aFBhcnRzIiwiaW5pdGlhbFBhdGhPYmplY3QiLCJncm93aW5nUGF0aCIsInBlbmRpbmdOYXZQcm9wQmluZGluZyIsInBhdGhPYmplY3QiLCJyZWR1Y2UiLCJwYXRoVW5kZXJDb25zdHJ1Y3Rpb24iLCJwYXRoUGFydCIsImlkeCIsImRlbGltaXRlciIsInRlbXBQYXRoIiwibmF2UHJvcEJpbmRpbmdzIiwibmF2UHJvcEJpbmRpbmdUb0NoZWNrIiwiT2JqZWN0Iiwia2V5cyIsImhhc093blByb3BlcnR5IiwicmVwbGFjZSIsImdldEFjdGlvblBhcmFtZXRlckl0ZW1zTW9kZWxQYXRoIiwib1BhcmFtZXRlciIsIiROYW1lIiwic1BhdGhQYXJ0IiwiZW5oYW5jZUludGVybmFsSlNPTk1vZGVsIiwib0ludGVybmFsTW9kZWwiLCJmbkJpbmRDb250ZXh0IiwiYmluZENvbnRleHQiLCJtUGFyYW1ldGVycyIsIm9FdmVudHMiLCJjb250ZXh0QmluZGluZyIsImFwcGx5IiwiZm5HZXRCb3VuZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJvQm91bmRDb250ZXh0Iiwic2V0UHJvcGVydHkiLCJwcm9wZXJ0eVBhdGgiLCJ2YWx1ZSIsInByb3BlcnR5UGF0aFNwbGl0IiwiaSIsImdldFByb3BlcnR5IiwiZW5oYW5jZVVpSlNPTk1vZGVsIiwidWlNb2RlbCIsImxpYnJhcnkiLCJmblNldFByb3BlcnR5IiwiYXN5bmNVcGRhdGUiLCJFZGl0TW9kZSIsIkVkaXRhYmxlIiwiRGlzcGxheSIsImVuaGFuY2VWaWV3SlNPTk1vZGVsIiwidmlld01vZGVsIiwiZm5HZXRPYmplY3QiLCJfZ2V0T2JqZWN0IiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwiZmlsdGVyRnVuY3Rpb25zIiwiX2ZpbHRlckZ1bmN0aW9ucyIsImluZGV4T2YiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJvTW9kZWwiLCJnZXRSb290RW50aXR5U2V0UGF0aCIsImNvbnRleHRQYXRoIiwicm9vdEVudGl0eVNldFBhdGgiLCJhUGF0aHMiLCJnZXRBYnNvbHV0ZU1ldGFQYXRoRm9yTGlzdEJpbmRpbmciLCJvVmlldyIsInZMaXN0QmluZGluZyIsInNNZXRhUGF0aCIsInN0YXJ0c1dpdGgiLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNSb290Q29udGV4dFBhdGgiLCJvQmluZGluZyIsIm9Sb290QmluZGluZyIsImdldFJvb3RCaW5kaW5nIiwic1Jvb3RCaW5kaW5nUGF0aCIsInNSZWxhdGl2ZVBhdGgiLCJnZXRSZWxhdGl2ZU1ldGFQYXRoRm9yTGlzdEJpbmRpbmciLCJwYXJlbnRDb250ZXh0IiwibGlzdEJpbmRpbmciLCJsaXN0QmluZGluZ0NvbnRleHQiLCJwYXJlbnRDb250ZXh0UGF0aCIsInZpZXdCaW5kaW5nTWV0YVBhdGgiLCJnZXREcmFmdFJvb3QiLCJnZXREcmFmdE5vZGUiLCJpc1N0aWNreSIsImdldFN0aWNreVNlc3Npb24iLCJpc1VwZGF0ZUhpZGRlbiIsImVudGl0eVR5cGUiLCJpc0VudGl0eVNldCIsIlVJIiwiVXBkYXRlSGlkZGVuIiwiZ2V0RGVsZXRlSGlkZGVuIiwiRGVsZXRlSGlkZGVuIiwiZ2V0QWJzb2x1dGVQYXRoRnJvbUxpc3RCaW5kaW5nIiwibWV0YW1vZGVsIiwibWV0YVBhdGgiLCJyb290QmluZGluZyIsInJvb3RCaW5kaW5nUGF0aCIsInJlbGF0aXZlUGF0aCIsImVuaGFuY2VPRGF0YU1vZGVsIiwib2RhdGFNb2RlbCIsImFwcENvbXBvbmVudCIsInZpcnR1YWxQcm9wZXJ0eUJpbmRpbmdSZWdpc3RyeSIsIkFycmF5IiwiZm5NZXNzYWdlIiwic2V0TWVzc2FnZXMiLCJsb2NhbEFubm90YXRpb25Nb2RlbCIsIkpTT05Nb2RlbCIsInNldERlZmF1bHRCaW5kaW5nTW9kZSIsIkJpbmRpbmdNb2RlIiwiT25lV2F5IiwiYmFzZVNldFByb3BlcnR5IiwiYmFzZUdldFByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiYW5ub3RhdGlvblR5cGUiLCJpc1RyYW5zaWVudCIsImNvbnRleHRPYmplY3QiLCJNZXRhUGF0aCIsImNvbnZlcnRUeXBlcyIsImV4dGVybmFsSWRQcm9wZXJ0eSIsImdldE1ldGFQYXRoRm9yUGF0aCIsImdldFRhcmdldCIsIkV4dGVybmFsSUQiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImZ1bGxQYXRoIiwiX3JlZnJlc2hMb2NhbE1vZGVsIiwicmVmcmVzaCIsImV4dGVybmFsSWRQcm9wUGF0aCIsInByb3BlcnRpZXNUb1JlcXVlc3QiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInRleHRQcm9wZXJ0eSIsIlRleHQiLCJ0ZXh0UHJvcFBhdGgiLCJpbmNsdWRlcyIsInB1c2giLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJ0aGVuIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsInBhdGhGcm9tUm9vdCIsImNsZWFyQW5ub3RhdGlvblR5cGUiLCJhbm5vdGF0aW9uVHlwZXMiLCJkYXRhU2V0IiwiaXNDb250ZXh0IiwiaXNBIiwiZW5kc1dpdGgiLCJfbG9jYWxBbm5vdGF0aW9uTW9kZWwiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsIm1lc3NhZ2VzIiwiY2xlYW5lZERhdGEiLCJnZXREYXRhIiwic2V0RGF0YSIsIm1lc3NhZ2VUYXJnZXQiLCJnZXRUeXBlIiwiZ2V0TWVzc2FnZSIsImZuQmluZFByb3BlcnR5IiwiYmluZFByb3BlcnR5IiwiYmluZCIsInBhcmFtZXRlcnMiLCJyZWNvbW1lbmRhdGlvbkZlYXR1cmVEaXNhYmxlZCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiRGlzYWJsZUlucHV0QXNzaXN0YW5jZSIsInJlY29tbWVuZGF0aW9uUHJvcGVydHlCaW5kaW5nIiwic2V0VXBSZWNvbW1lbmRhdGlvbkxvY2FsTW9kZWxCaW5kaW5nIiwiaW50ZXJuYWxJZEJpbmRpbmciLCJleHRlcm5hbElkQmluZGluZyIsImF0dGFjaENoYW5nZSIsInJlcXVlc3RWYWx1ZSIsInByb3BCaW5kaW5nIiwidXBkYXRlUmVxdWlyZWQiLCJleHByZXNzaW9uIiwiZ2V0VmlydHVhbEJpbmRpbmdFeHByZXNzaW9uIiwiZ2hvc3RDb250cm9sIiwiQW55IiwiYW55IiwiY29tcGlsZUV4cHJlc3Npb24iLCJiaW5kQmFja1Byb3BlcnR5IiwiZm5EZXN0cm95UHJvcGVydHlCaW5kaW5nIiwiZGVzdHJveSIsImZuU2V0Q29udGV4dCIsInNldENvbnRleHQiLCJuZXdDb250ZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJzZXRNb2RlbCIsImdob3N0QmluZGluZyIsImdldEJpbmRpbmdJbmZvIiwiYmluZGluZyIsImZuQ2hlY2tVcGRhdGUiLCJjaGVja1VwZGF0ZSIsImZvcmNlVXBkYXRlIiwiaXNDb250ZXh0TG9hZGVkIiwiZ2V0QmluZEJhY2tQcm9wZXJ0eSIsInZhbHVlSW5Mb2NhbEFubm90YXRpb24iLCJnZXRFeHRlcm5hbFZhbHVlIiwiZm5EZXN0cm95IiwidnBCaW5kaW5nIiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsInRleHQiLCJtZXRhTW9kZWxQYXRoIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwidG9TdHJpbmciLCJlIiwiaW5mbyIsImdldE1lc3NhZ2VzUGF0aCIsInRhcmdldEVudGl0eVR5cGUiLCJNZXNzYWdlcyIsInJlY29tbWVuZGF0aW9uYmluZGluZyIsInNldENvbnRleHRPblJlY29tbWVuZGF0aW9uQmluZGluZyIsIm9kYXRhUHJvcGVydHlCaW5kaW5nIiwicmVjb21tZW5kYXRpb25Db21wbGV4UHJvcGVydHkiLCJpc1JlY29tbWVuZGVkUHJvcGVydHkiLCJ2YWxpZGF0ZVJlY29tbWVuZGF0aW9uQmluZGluZ1BhdGgiLCJhbHJlYWR5Qm91bmQiLCJleGlzdGluZ0JpbmRpbmciLCJzZXRUeXBlIiwiUmF3Iiwic2V0QmluZGluZ01vZGUiLCJldmVudCIsInByb3BlcnR5QmluZGluZyIsImdldFNvdXJjZSIsImN1cnJlbnRDb250ZXh0IiwiY29udGV4dFJlY29tbWVuZGF0aW9ucyIsImdldFZhbHVlIiwic2V0UmVjb21tZW5kYXRpb25zT25Mb2NhbEFubm90YXRpb25Nb2RlbCIsImJpbmRpbmdQYXRoIiwiY29udGV4dE1ldGFQYXRoIiwiUmVjb21tZW5kYXRpb25zIiwiZW50aXR5UHJvcGVydGllcyIsImVudGl0eVByb3BlcnR5IiwibmFtZSIsInRhcmdldFR5cGUiLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJyZWNvbW1lbmRlZFByb3BlcnR5IiwicHJvcGVydHlSZWNvbW1lbmRhdGlvbnMiLCJsb2NhbE1vZGVsUGF0aCIsInR5cGVBaGVhZFZhbHVlcyIsInByb3BlcnR5UmVjb21tZW5kYXRpb24iLCJSZWNvbW1lbmRlZEZpZWxkSXNTdWdnZXN0aW9uIiwicGxhY2Vob2xkZXJWYWx1ZUFubm90YXRpb25QYXRoIiwicGxhY2Vob2xkZXJEZXNjcmlwdGlvbkFubm90YXRpb25QYXRoIiwiUmVjb21tZW5kZWRGaWVsZFZhbHVlIiwiUmVjb21tZW5kZWRGaWVsZERlc2NyaXB0aW9uIiwiZ2V0QWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsImFsdGVybmF0ZUtleXMiLCJfZmV0Y2hBbHRlcm5hdGVLZXlzIiwiZW50aXR5VHlwZU9yU2V0IiwiQ29yZSIsIkFsdGVybmF0ZUtleXMiLCJmb3JFYWNoIiwiYWx0ZXJuYXRlS2V5IiwiS2V5Iiwia2V5IiwiTmFtZSIsIl9mZXRjaFNlY29uZGFyeUtleXMiLCJlVCIsIlNlY29uZGFyeUtleSIsInNlY29uZGFyeUtleSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTW9kZWxIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogVGhpcyBjbGFzcyBjb250YWlucyBoZWxwZXJzIHRvIGJlIHVzZWQgYXQgcnVudGltZSB0byByZXRyaWV2ZSBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoZSBtb2RlbCAqL1xuaW1wb3J0IHR5cGUgeyBDb21wbGV4VHlwZSwgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoLCBTaW5nbGV0b24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRnVuY3Rpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHsgRHJhZnROb2RlLCBEcmFmdFJvb3QgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBBbHRlcm5hdGVLZXksIFByb3BlcnR5UmVmIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db3JlXCI7XG5pbXBvcnQgdHlwZSB7IFN0aWNreVNlc3Npb25TdXBwb3J0ZWQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb25cIjtcbmltcG9ydCB0eXBlIHsgRGVsZXRlSGlkZGVuLCBVcGRhdGVIaWRkZW4gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVR5cGVBbm5vdGF0aW9uc19VSSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlfRWRtXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IEFueSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQW55XCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsQWN0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IE1ldGFQYXRoIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFQYXRoXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCwgaXNOYXZpZ2F0aW9uUHJvcGVydHksIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgQmluZGluZ01vZGUgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nTW9kZVwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIFByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL1Byb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgUmF3IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9SYXdcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBDb250ZXh0LCBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFMaXN0QmluZGluZyB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIHsgT0RhdGFQcm9wZXJ0eUJpbmRpbmckQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcIi4uL0FwcENvbXBvbmVudFwiO1xuXG4vLyBUT0RPOiBSaWdodCBub3cgcmVjb21tZW5kYXRpb25zIGlzIG5vdCBwYXJ0IG9mIHRoZSBVSSB2b2NhYnVsYXJ5LlxuLy8gaGVuY2Ugd2UgYXJlIGFkZGluZyBpdCB0byB0aGUgdHlwZS5cbi8vIG9uY2UgdGhpcyBiZWNvbWVzIHBhcnQgb2YgdGhlIFVJIHZvY2FidWxhcnkgdGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMuXG5leHBvcnQgdHlwZSBFbnRpdHlUeXBlQW5ub3RhdGlvbnNfVUlfV2l0aF9SZWNvbW1lbmRhdGlvbnMgPSBFbnRpdHlUeXBlQW5ub3RhdGlvbnNfVUkgJiB7XG5cdFJlY29tbWVuZGF0aW9ucz86IHtcblx0XHRwYXRoOiBzdHJpbmc7XG5cdH07XG59O1xuXG5jb25zdCBNb2RlbEhlbHBlciA9IHtcblx0Ly8gZ2xvYmFsIHN3aXRjaCB0byBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGJ5IGEgcHJpdmF0ZSBtYW5pZmVzdCBmbGFnXG5cdC8vIHRoaXMgYWxsb3dzIGN1c3RvbWVycyB0byBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGluIGNhc2Ugd2UgcnVuIGludG8gaXNzdWVzIHdpdGggdGhlIGZpcnN0IGRlbGl2ZXJ5XG5cdC8vIHRoaXMgd2lsbCBiZSByZW1vdmVkIHdpdGggdGhlIG5leHQgUy80IHJlbGVhc2Vcblx0ZGlzYWJsZUNvbGxhYm9yYXRpb25EcmFmdDogZmFsc2UsXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwcm9ncmFtbWluZyBtb2RlbCBpcyBzdGlja3kuXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgT0RhdGFNb2RlbE1ldGFNb2RlbCB0byBjaGVjayBmb3Igc3RpY2t5IGVuYWJsZWQgZW50aXR5XG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBzdGlja3ksIGVsc2UgZmFsc2Vcblx0ICovXG5cdGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZDogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBib29sZWFuIHtcblx0XHRjb25zdCBlbnRpdHlDb250YWluZXIgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0XHRmb3IgKGNvbnN0IGVudGl0eVNldE5hbWUgaW4gZW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGVudGl0eUNvbnRhaW5lcltlbnRpdHlTZXROYW1lXS4ka2luZCA9PT0gXCJFbnRpdHlTZXRcIiAmJlxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtlbnRpdHlTZXROYW1lfUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRgKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2dyYW1taW5nIG1vZGVsIGlzIGRyYWZ0LlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE9EYXRhTW9kZWxNZXRhTW9kZWwgb2YgdGhlIGNvbnRleHQgZm9yIHdoaWNoIGRyYWZ0IHN1cHBvcnQgc2hhbGwgYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gcGF0aCBQYXRoIGZvciB3aGljaCBkcmFmdCBzdXBwb3J0IHNoYWxsIGJlIGNoZWNrZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGRyYWZ0LCBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc0RyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQocGF0aCk7XG5cdFx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFDb250ZXh0KTtcblx0XHRyZXR1cm4gdGhpcy5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChvYmplY3RQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGRyYWZ0IGlzIHN1cHBvcnRlZCBmb3IgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGguXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcblx0ICovXG5cdGlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQ7XG5cdFx0Y29uc3QgYklzRHJhZnRSb290ID0gTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY3VycmVudEVudGl0eVNldCk7XG5cdFx0Y29uc3QgYklzRHJhZnROb2RlID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoY3VycmVudEVudGl0eVNldCk7XG5cdFx0Y29uc3QgYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCA9XG5cdFx0XHRpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5jb250YWluc1RhcmdldCAmJlxuXHRcdFx0KChkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fFxuXHRcdFx0XHQoZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGUpXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IGZhbHNlO1xuXG5cdFx0cmV0dXJuIGJJc0RyYWZ0Um9vdCB8fCBiSXNEcmFmdE5vZGUgfHwgKCFjdXJyZW50RW50aXR5U2V0ICYmIGJJc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQpO1xuXHR9LFxuXG5cdGlzTWV0YVBhdGhEcmFmdFN1cHBvcnRlZDogZnVuY3Rpb24gKGRhdGFNb2RlbE9iamVjdFBhdGg6IE1ldGFQYXRoPHVua25vd24+KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGRhdGFNb2RlbE9iamVjdFBhdGguZ2V0Q2xvc2VzdEVudGl0eVNldCgpIGFzIEVudGl0eVNldDtcblx0XHRjb25zdCBiSXNEcmFmdFJvb3QgPSBNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChjdXJyZW50RW50aXR5U2V0KTtcblx0XHRjb25zdCBiSXNEcmFmdE5vZGUgPSBNb2RlbEhlbHBlci5pc0RyYWZ0Tm9kZShjdXJyZW50RW50aXR5U2V0KTtcblx0XHRyZXR1cm4gYklzRHJhZnRSb290IHx8IGJJc0RyYWZ0Tm9kZTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGEgU2hhcmVBY3Rpb24gaW4gYW55IEVudGl0eVNldCBvZiB0aGUgYXBwbGljYXRpb24uXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgYW5ub3RhdGlvbiBleGlzdHMuIEZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdGlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkRnJvbUNvbnZlcnRlckNvbnRleHQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCkuZW50aXR5U2V0cy5zb21lKChlbnRpdHlTZXQpID0+IHtcblx0XHRcdHJldHVybiBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290Py5TaGFyZUFjdGlvbiAhPT0gdW5kZWZpbmVkO1xuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzZXJ2aWNlLCBzdXBwb3J0cyBjb2xsYWJvcmF0aW9uIGRyYWZ0LlxuXHQgKiBAcGFyYW0gbWV0YU9iamVjdCBNZXRhT2JqZWN0IHRvIGJlIHVzZWQgZm9yIGRldGVybWluYXRpb25cblx0ICogQHBhcmFtIHRlbXBsYXRlSW50ZXJmYWNlIEFQSSBwcm92aWRlZCBieSBVSTUgdGVtcGxhdGluZyBpZiB1c2VkXG5cdCAqIEBwYXJhbSB0ZW1wbGF0ZUludGVyZmFjZS5jb250ZXh0IENvbnRleHQgb2YgdGhlIHRlbXBsYXRlXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VydmljZSBzdXBwb3J0cyBjb2xsYWJvcmF0aW9uIGRyYWZ0LCBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZDogZnVuY3Rpb24gKG1ldGFPYmplY3Q6IHVua25vd24sIHRlbXBsYXRlSW50ZXJmYWNlPzogeyBjb250ZXh0OiBDb250ZXh0IH0pOiBib29sZWFuIHtcblx0XHRpZiAoIU1vZGVsSGVscGVyLmRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQpIHtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSAodGVtcGxhdGVJbnRlcmZhY2U/LmNvbnRleHQ/LmdldE1vZGVsKCkgfHwgbWV0YU9iamVjdCkgYXMgT0RhdGFNZXRhTW9kZWwgJiB7XG5cdFx0XHRcdF9fJGZlSXNDb2xsYWJvcmF0aW9uRHJhZnRFbmFibGVkPzogYm9vbGVhbjtcblx0XHRcdH07XG5cdFx0XHRpZiAob01ldGFNb2RlbC5fXyRmZUlzQ29sbGFib3JhdGlvbkRyYWZ0RW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBvTWV0YU1vZGVsLl9fJGZlSXNDb2xsYWJvcmF0aW9uRHJhZnRFbmFibGVkO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0XHRcdGZvciAoY29uc3Qgc0VudGl0eVNldCBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvRW50aXR5Q29udGFpbmVyW3NFbnRpdHlTZXRdLiRraW5kID09PSBcIkVudGl0eVNldFwiICYmXG5cdFx0XHRcdFx0b01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke3NFbnRpdHlTZXR9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvU2hhcmVBY3Rpb25gKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRvTWV0YU1vZGVsLl9fJGZlSXNDb2xsYWJvcmF0aW9uRHJhZnRFbmFibGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b01ldGFNb2RlbC5fXyRmZUlzQ29sbGFib3JhdGlvbkRyYWZ0RW5hYmxlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHBhdGggb2YgdGhlIERyYWZ0Um9vdCBwYXRoIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgY29udGV4dC5cblx0ICogQHBhcmFtIG9Db250ZXh0IE9kYXRhTW9kZWwgY29udGV4dFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSBkcmFmdFJvb3QgZW50aXR5LCBvciB1bmRlZmluZWQgaWYgbm8gZHJhZnRSb290IGlzIGZvdW5kXG5cdCAqL1xuXHRnZXREcmFmdFJvb3RQYXRoOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGdldFJvb3RQYXRoID0gZnVuY3Rpb24gKHNQYXRoOiBzdHJpbmcsIG1vZGVsOiBPRGF0YU1vZGVsLCBmaXJzdEl0ZXJhdGlvbiA9IHRydWUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdFx0Y29uc3Qgc0l0ZXJhdGlvblBhdGggPSBmaXJzdEl0ZXJhdGlvbiA/IHNQYXRoIDogbmV3IFJlZ0V4cCgvLiooPz1cXC8pLykuZXhlYyhzUGF0aCk/LlswXTsgLy8gKlJlZ2V4IHRvIGdldCB0aGUgYW5jZXN0b3Jcblx0XHRcdGlmIChzSXRlcmF0aW9uUGF0aCAmJiBzSXRlcmF0aW9uUGF0aCAhPT0gXCIvXCIpIHtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNJdGVyYXRpb25QYXRoKTtcblx0XHRcdFx0Y29uc3QgbURhdGFNb2RlbCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5nZXRDb250ZXh0KHNFbnRpdHlQYXRoKSk7XG5cdFx0XHRcdGlmICgobURhdGFNb2RlbC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gc0l0ZXJhdGlvblBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGdldFJvb3RQYXRoKHNJdGVyYXRpb25QYXRoLCBtb2RlbCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9O1xuXHRcdHJldHVybiBnZXRSb290UGF0aChvQ29udGV4dC5nZXRQYXRoKCksIG9Db250ZXh0LmdldE1vZGVsKCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBwYXRoIG9mIHRoZSBTdGlja3lSb290IHBhdGggYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgT2RhdGFNb2RlbCBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIHBhdGggb2YgdGhlIFN0aWNreVJvb3QgZW50aXR5LCBvciB1bmRlZmluZWQgaWYgbm8gU3RpY2t5Um9vdCBpcyBmb3VuZFxuXHQgKi9cblx0Z2V0U3RpY2t5Um9vdFBhdGg6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZ2V0Um9vdFBhdGggPSBmdW5jdGlvbiAoc1BhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwsIGZpcnN0SXRlcmF0aW9uID0gdHJ1ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRjb25zdCBzSXRlcmF0aW9uUGF0aCA9IGZpcnN0SXRlcmF0aW9uID8gc1BhdGggOiBuZXcgUmVnRXhwKC8uKig/PVxcLykvKS5leGVjKHNQYXRoKT8uWzBdOyAvLyAqUmVnZXggdG8gZ2V0IHRoZSBhbmNlc3RvclxuXHRcdFx0aWYgKHNJdGVyYXRpb25QYXRoICYmIHNJdGVyYXRpb25QYXRoICE9PSBcIi9cIikge1xuXHRcdFx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc0l0ZXJhdGlvblBhdGgpO1xuXHRcdFx0XHRjb25zdCBtRGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmdldENvbnRleHQoc0VudGl0eVBhdGgpKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG1EYXRhTW9kZWwuc3RhcnRpbmdFbnRpdHlTZXQgPT09IG1EYXRhTW9kZWwudGFyZ2V0RW50aXR5U2V0ICYmXG5cdFx0XHRcdFx0KG1EYXRhTW9kZWwudGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBzSXRlcmF0aW9uUGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZ2V0Um9vdFBhdGgoc0l0ZXJhdGlvblBhdGgsIG1vZGVsLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH07XG5cdFx0cmV0dXJuIGdldFJvb3RQYXRoKG9Db250ZXh0LmdldFBhdGgoKSwgb0NvbnRleHQuZ2V0TW9kZWwoKSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSB0YXJnZXQgZW50aXR5IHNldCB3aXRoIG5hdmlnYXRpb24gcHJvcGVydHkgYmluZGluZy5cblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSB0YXJnZXQgZW50aXR5IHNldCB3aWxsIGJlIGRldGVybWluZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgdGFyZ2V0IGVudGl0eSBzZXRcblx0ICovXG5cdGdldFRhcmdldEVudGl0eVNldDogZnVuY3Rpb24gKG9Db250ZXh0OiBCYXNlQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0b0NvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgPT09IFwiRW50aXR5U2V0XCIgfHxcblx0XHRcdG9Db250ZXh0LmdldE9iamVjdChcIiRraW5kXCIpID09PSBcIkFjdGlvblwiIHx8XG5cdFx0XHRvQ29udGV4dC5nZXRPYmplY3QoXCIwLyRraW5kXCIpID09PSBcIkFjdGlvblwiXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fVxuXHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChzUGF0aCk7XG5cdFx0cmV0dXJuIGAvJHtvQ29udGV4dC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGgpfWA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgY29tcGxldGUgcGF0aCB0byB0aGUgZW50aXR5IHNldCB2aWEgdXNpbmcgbmF2aWdhdGlvbiBwcm9wZXJ0eSBiaW5kaW5nLiBOb3RlOiBUbyBiZSB1c2VkIG9ubHkgYWZ0ZXIgdGhlIG1ldGFtb2RlbCBoYXMgbG9hZGVkLlxuXHQgKiBAcGFyYW0gcGF0aCBQYXRoIGZvciB3aGljaCBjb21wbGV0ZSBlbnRpdHlTZXQgcGF0aCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIGZyb20gZW50aXR5VHlwZSBwYXRoXG5cdCAqIEBwYXJhbSBvZGF0YU1ldGFNb2RlbCBNZXRhbW9kZWwgdG8gYmUgdXNlZC4oT3B0aW9uYWwgaW4gbm9ybWFsIHNjZW5hcmlvcywgYnV0IG5lZWRlZCBmb3IgcGFyYW1ldGVyaXplZCBzZXJ2aWNlIHNjZW5hcmlvcylcblx0ICogQHJldHVybnMgUmV0dXJucyBjb21wbGV0ZSBwYXRoIHRvIHRoZSBlbnRpdHkgc2V0XG5cdCAqL1xuXHRnZXRFbnRpdHlTZXRQYXRoOiBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBvZGF0YU1ldGFNb2RlbD86IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHtcblx0XHRsZXQgZW50aXR5U2V0UGF0aCA9IFwiXCI7XG5cdFx0aWYgKCFvZGF0YU1ldGFNb2RlbCkge1xuXHRcdFx0Ly8gUHJldmlvdXMgaW1wbGVtZW50YXRpb24gZm9yIGdldHRpbmcgZW50aXR5U2V0UGF0aCBmcm9tIGVudGl0eVR5cGVQYXRoXG5cdFx0XHRlbnRpdHlTZXRQYXRoID0gYC8ke3BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZykuam9pbihcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIil9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ2FsY3VsYXRpbmcgdGhlIGVudGl0eVNldFBhdGggZnJvbSBNZXRhTW9kZWwuXG5cdFx0XHRjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRcdFx0aWYgKHBhdGhQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdGNvbnN0IGluaXRpYWxQYXRoT2JqZWN0ID0ge1xuXHRcdFx0XHRcdGdyb3dpbmdQYXRoOiBcIi9cIixcblx0XHRcdFx0XHRwZW5kaW5nTmF2UHJvcEJpbmRpbmc6IFwiXCJcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCBwYXRoT2JqZWN0ID0gcGF0aFBhcnRzLnJlZHVjZShcblx0XHRcdFx0XHQocGF0aFVuZGVyQ29uc3RydWN0aW9uOiB7IGdyb3dpbmdQYXRoOiBzdHJpbmc7IHBlbmRpbmdOYXZQcm9wQmluZGluZzogc3RyaW5nIH0sIHBhdGhQYXJ0OiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBkZWxpbWl0ZXIgPSAoISFpZHggJiYgXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIpIHx8IFwiXCI7XG5cdFx0XHRcdFx0XHRsZXQgeyBncm93aW5nUGF0aCwgcGVuZGluZ05hdlByb3BCaW5kaW5nIH0gPSBwYXRoVW5kZXJDb25zdHJ1Y3Rpb247XG5cdFx0XHRcdFx0XHRjb25zdCB0ZW1wUGF0aCA9IGdyb3dpbmdQYXRoICsgZGVsaW1pdGVyO1xuXHRcdFx0XHRcdFx0Y29uc3QgbmF2UHJvcEJpbmRpbmdzID0gb2RhdGFNZXRhTW9kZWwuZ2V0T2JqZWN0KHRlbXBQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IG5hdlByb3BCaW5kaW5nVG9DaGVjayA9IHBlbmRpbmdOYXZQcm9wQmluZGluZyA/IGAke3BlbmRpbmdOYXZQcm9wQmluZGluZ30vJHtwYXRoUGFydH1gIDogcGF0aFBhcnQ7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdG5hdlByb3BCaW5kaW5ncyAmJlxuXHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhuYXZQcm9wQmluZGluZ3MpLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHRcdFx0bmF2UHJvcEJpbmRpbmdzLmhhc093blByb3BlcnR5KG5hdlByb3BCaW5kaW5nVG9DaGVjaylcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRncm93aW5nUGF0aCA9IHRlbXBQYXRoICsgbmF2UHJvcEJpbmRpbmdUb0NoZWNrLnJlcGxhY2UoXCIvXCIsIFwiJTJGXCIpO1xuXHRcdFx0XHRcdFx0XHRwZW5kaW5nTmF2UHJvcEJpbmRpbmcgPSBcIlwiO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cGVuZGluZ05hdlByb3BCaW5kaW5nICs9IHBlbmRpbmdOYXZQcm9wQmluZGluZyA/IGAvJHtwYXRoUGFydH1gIDogcGF0aFBhcnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4geyBncm93aW5nUGF0aCwgcGVuZGluZ05hdlByb3BCaW5kaW5nIH07XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRpbml0aWFsUGF0aE9iamVjdFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGVudGl0eVNldFBhdGggPSBwYXRoT2JqZWN0Lmdyb3dpbmdQYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZW50aXR5U2V0UGF0aCA9IGAvJHtwYXRoUGFydHNbMF19YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZW50aXR5U2V0UGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgcGF0aCBmb3IgdGhlIGl0ZW1zIHByb3BlcnR5IG9mIE11bHRpVmFsdWVGaWVsZCBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlciBBY3Rpb24gUGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbXBsZXRlIG1vZGVsIHBhdGggZm9yIHRoZSBpdGVtcyBwcm9wZXJ0eSBvZiBNdWx0aVZhbHVlRmllbGQgcGFyYW1ldGVyc1xuXHQgKi9cblx0Z2V0QWN0aW9uUGFyYW1ldGVySXRlbXNNb2RlbFBhdGg6IGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBNZXRhTW9kZWxBY3Rpb25QYXJhbWV0ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBvUGFyYW1ldGVyICYmIG9QYXJhbWV0ZXIuJE5hbWUgPyBge3BhdGg6ICdtdmZ2aWV3Pi8ke29QYXJhbWV0ZXIuJE5hbWV9J31gIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGZpbHRlck91dE5hdlByb3BCaW5kaW5nOiBmdW5jdGlvbiAoc1BhdGhQYXJ0OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc1BhdGhQYXJ0ICE9PSBcIlwiICYmIHNQYXRoUGFydCAhPT0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgc2V0UHJvcGVydHkgdG8gdGhlIGNyZWF0ZWQgYmluZGluZyBjb250ZXh0cyBvZiB0aGUgaW50ZXJuYWwgSlNPTiBtb2RlbC5cblx0ICogQHBhcmFtIEludGVybmFsIEpTT04gTW9kZWwgd2hpY2ggaXMgZW5oYW5jZWRcblx0ICovXG5cblx0ZW5oYW5jZUludGVybmFsSlNPTk1vZGVsOiBmdW5jdGlvbiAob0ludGVybmFsTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IGZuQmluZENvbnRleHQgPSBvSW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dCA9IGZ1bmN0aW9uIChcblx0XHRcdHNQYXRoOiBzdHJpbmcsXG5cdFx0XHRjb250ZXh0OiBCYXNlQ29udGV4dCxcblx0XHRcdG1QYXJhbWV0ZXJzOiBvYmplY3QgfCB1bmRlZmluZWQsXG5cdFx0XHRvRXZlbnRzOiBvYmplY3QgfCB1bmRlZmluZWRcblx0XHQpOiBDb250ZXh0QmluZGluZyB7XG5cdFx0XHRjb25zdCBjb250ZXh0QmluZGluZyA9IGZuQmluZENvbnRleHQuYXBwbHkodGhpcywgW3NQYXRoLCBjb250ZXh0LCBtUGFyYW1ldGVycywgb0V2ZW50c10pO1xuXHRcdFx0Y29uc3QgZm5HZXRCb3VuZENvbnRleHQgPSBjb250ZXh0QmluZGluZy5nZXRCb3VuZENvbnRleHQ7XG5cblx0XHRcdGNvbnRleHRCaW5kaW5nLmdldEJvdW5kQ29udGV4dCA9IGZ1bmN0aW9uICgpOiBCYXNlQ29udGV4dCB8IG51bGwge1xuXHRcdFx0XHRjb25zdCBvQm91bmRDb250ZXh0ID0gZm5HZXRCb3VuZENvbnRleHQuYXBwbHkodGhpcyk7XG5cdFx0XHRcdGlmIChvQm91bmRDb250ZXh0KSB7XG5cdFx0XHRcdFx0b0JvdW5kQ29udGV4dC5zZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmdldE9iamVjdCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaW5pdGlhbGl6ZVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkuc2V0UHJvcGVydHkodGhpcy5nZXRQYXRoKCksIHt9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aFNwbGl0ID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0XHRcdGxldCBwYXRoID0gdGhpcy5nZXRQYXRoKCkucmVwbGFjZSgvXFwvJC8sIFwiXCIpOyAvLyBSZW1vdmUgc2xhc2ggaWYgaXQgaXMgYXQgdGhlIGVuZFxuXHRcdFx0XHRcdFx0Ly8gbGV0J3MgZW5zdXJlIHRoYXQgc3ViIG9iamVjdHMgYXJlIGluaXRpYWxpemVkXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnR5UGF0aFNwbGl0Lmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRwYXRoID0gYCR7cGF0aH0vJHtwcm9wZXJ0eVBhdGhTcGxpdFtpXX1gO1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5nZXRNb2RlbCgpLmdldFByb3BlcnR5KHBhdGgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBpbml0aWFsaXplXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHBhdGgsIHt9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHByb3BlcnR5UGF0aCwgdmFsdWUsIHRoaXMpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9Cb3VuZENvbnRleHQ7XG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIGNvbnRleHRCaW5kaW5nO1xuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIEFkZHMgYW4gaGFuZGxlciBvbiBwcm9wZXJ0eUNoYW5nZS5cblx0ICogVGhlIHByb3BlcnR5IFwiL2VkaXRNb2RlXCIgaXMgY2hhbmdlZCBhY2NvcmRpbmcgdG8gcHJvcGVydHkgJy9pc0VkaXRhYmxlJyB3aGVuIHRoaXMgbGFzdCBvbmUgaXMgc2V0XG5cdCAqIGluIG9yZGVyIHRvIGJlIGNvbXBsaWFudCB3aXRoIGZvcm1lciB2ZXJzaW9ucyB3aGVyZSBidWlsZGluZyBibG9ja3MgdXNlIHRoZSBwcm9wZXJ0eSBcIi9lZGl0TW9kZVwiXG5cdCAqIEBwYXJhbSB1aU1vZGVsIEpTT04gTW9kZWwgd2hpY2ggaXMgZW5oYW5jZWRcblx0ICogQHBhcmFtIGxpYnJhcnkgQ29yZSBsaWJyYXJ5IG9mIFNBUCBGaW9yaSBlbGVtZW50c1xuXHQgKi9cblxuXHRlbmhhbmNlVWlKU09OTW9kZWw6IGZ1bmN0aW9uICh1aU1vZGVsOiBKU09OTW9kZWwsIGxpYnJhcnk6IHsgRWRpdE1vZGU6IHsgRWRpdGFibGU6IHN0cmluZzsgRGlzcGxheTogc3RyaW5nIH0gfSk6IHZvaWQge1xuXHRcdGNvbnN0IGZuU2V0UHJvcGVydHkgPSB1aU1vZGVsLnNldFByb3BlcnR5O1xuXHRcdHVpTW9kZWwuc2V0UHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdFx0XHRwYXRoOiBzdHJpbmcsXG5cdFx0XHR2YWx1ZTogdW5rbm93bixcblx0XHRcdGNvbnRleHQ6IEJhc2VDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdFx0YXN5bmNVcGRhdGU6IGJvb2xlYW4gfCB1bmRlZmluZWRcblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGlmIChwYXRoID09PSBcIi9pc0VkaXRhYmxlXCIpIHtcblx0XHRcdFx0dWlNb2RlbC5zZXRQcm9wZXJ0eShcIi9lZGl0TW9kZVwiLCB2YWx1ZSA/IGxpYnJhcnkuRWRpdE1vZGUuRWRpdGFibGUgOiBsaWJyYXJ5LkVkaXRNb2RlLkRpc3BsYXksIGNvbnRleHQsIGFzeW5jVXBkYXRlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmblNldFByb3BlcnR5LmFwcGx5KHRoaXMsIFtwYXRoLCB2YWx1ZSwgY29udGV4dCwgYXN5bmNVcGRhdGVdKTtcblx0XHR9O1xuXHR9LFxuXG5cdGVuaGFuY2VWaWV3SlNPTk1vZGVsOiBmdW5jdGlvbiAodmlld01vZGVsOiBKU09OTW9kZWwgJiB7IF9nZXRPYmplY3Q6IEZ1bmN0aW9uIH0pOiB2b2lkIHtcblx0XHRjb25zdCBmbkdldE9iamVjdCA9IHZpZXdNb2RlbC5fZ2V0T2JqZWN0O1xuXHRcdHZpZXdNb2RlbC5fZ2V0T2JqZWN0ID0gZnVuY3Rpb24gKHNQYXRoOiBzdHJpbmcsIG9Db250ZXh0PzogQ29udGV4dCk6IHVua25vd24ge1xuXHRcdFx0aWYgKHNQYXRoID09PSB1bmRlZmluZWQgfHwgc1BhdGggPT09IFwiXCIpIHtcblx0XHRcdFx0c1BhdGggPSBcIi9cIjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmbkdldE9iamVjdC5hcHBseSh0aGlzLCBbc1BhdGgsIG9Db250ZXh0XSk7XG5cdFx0fTtcblx0fSxcblx0LyoqXG5cdCAqIFJldHVybnMgd2hldGhlciBmaWx0ZXJpbmcgb24gdGhlIHRhYmxlIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgaW5zdGFuY2Ugb2YgdGhlIG1ldGEgbW9kZWxcblx0ICogQHBhcmFtIGZpbHRlckZ1bmN0aW9ucyBGaWx0ZXIgZnVuY3Rpb25zIHN1cHBvcnRlZCBieSB0aGUgc2VydmljZVxuXHQgKiBAcmV0dXJucyBSZXR1cm5zICdmYWxzZScgaWYgdGhlIHNlcnZpY2Ugc3VwcG9ydHMgJ3RvbG93ZXInLCBlbHNlICd0cnVlJ1xuXHQgKi9cblx0aXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiBmdW5jdGlvbiAob01ldGFNb2RlbD86IE9EYXRhTWV0YU1vZGVsLCBmaWx0ZXJGdW5jdGlvbnM/OiBGaWx0ZXJGdW5jdGlvbnMgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IF9maWx0ZXJGdW5jdGlvbnMgPSBmaWx0ZXJGdW5jdGlvbnMgPz8gb01ldGFNb2RlbD8uZ2V0T2JqZWN0KFwiL0BPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckZ1bmN0aW9uc1wiKTtcblxuXHRcdGlmICghX2ZpbHRlckZ1bmN0aW9ucykge1xuXHRcdFx0Ly8gaWYgbm8gZmlsdGVycyBmdW5jdGlvbiBkZWZpbmVkIGluIHNlcnZpY2UsIHdlIGFzc3VtZSB0aGF0IHRoZSBzZXJ2aWNlIGlzIGNhc2Ugc2Vuc2l0aXZlXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gX2ZpbHRlckZ1bmN0aW9ucy5pbmRleE9mKFwidG9sb3dlclwiKSA9PT0gLTE7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBNZXRhUGF0aCBmb3IgdGhlIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IHRvIGJlIHVzZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgbWV0YXBhdGggZm9yIHRoZSBjb250ZXh0LlxuXHQgKi9cblx0Z2V0TWV0YVBhdGhGb3JDb250ZXh0OiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0XHRvTWV0YU1vZGVsID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0c1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIG9NZXRhTW9kZWwgJiYgc1BhdGggJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBNZXRhUGF0aCBmb3IgdGhlIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBNZXRhUGF0aCB0byBiZSB1c2VkXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIHJvb3QgZW50aXR5IHNldCBwYXRoLlxuXHQgKi9cblx0Z2V0Um9vdEVudGl0eVNldFBhdGg6IGZ1bmN0aW9uIChjb250ZXh0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgcm9vdEVudGl0eVNldFBhdGggPSBcIlwiO1xuXHRcdGNvbnN0IGFQYXRocyA9IGNvbnRleHRQYXRoID8gY29udGV4dFBhdGguc3BsaXQoXCIvXCIpIDogW107XG5cdFx0aWYgKGFQYXRocy5sZW5ndGggPiAxKSB7XG5cdFx0XHRyb290RW50aXR5U2V0UGF0aCA9IGFQYXRoc1sxXTtcblx0XHR9XG5cdFx0cmV0dXJuIHJvb3RFbnRpdHlTZXRQYXRoO1xuXHR9LFxuXHQvKipcblx0ICogR2V0IE1ldGFQYXRoIGZvciB0aGUgbGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBvVmlldyBWaWV3IG9mIHRoZSBjb250cm9sIHVzaW5nIGxpc3RCaW5kaW5nXG5cdCAqIEBwYXJhbSB2TGlzdEJpbmRpbmcgT0RhdGFMaXN0QmluZGluZyBvYmplY3Qgb3IgdGhlIGJpbmRpbmcgcGF0aCBmb3IgYSB0ZW1wb3JhcnkgbGlzdCBiaW5kaW5nXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIG1ldGFwYXRoIGZvciB0aGUgbGlzdGJpbmRpbmcuXG5cdCAqL1xuXHRnZXRBYnNvbHV0ZU1ldGFQYXRoRm9yTGlzdEJpbmRpbmc6IGZ1bmN0aW9uIChvVmlldzogRkVWaWV3LCB2TGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcgfCBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzTWV0YVBhdGg7XG5cblx0XHRpZiAodHlwZW9mIHZMaXN0QmluZGluZyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0aWYgKHZMaXN0QmluZGluZy5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0XHQvLyBhYnNvbHV0ZSBwYXRoXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgodkxpc3RCaW5kaW5nKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHJlbGF0aXZlIHBhdGhcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3Qgc1Jvb3RDb250ZXh0UGF0aCA9IG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoYCR7c1Jvb3RDb250ZXh0UGF0aH0vJHt2TGlzdEJpbmRpbmd9YCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHdlIGFscmVhZHkgZ2V0IGEgbGlzdCBiaW5kaW5nIHVzZSB0aGlzIG9uZVxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB2TGlzdEJpbmRpbmc7XG5cdFx0XHRjb25zdCBvUm9vdEJpbmRpbmcgPSBvQmluZGluZy5nZXRSb290QmluZGluZygpO1xuXHRcdFx0aWYgKG9CaW5kaW5nID09PSBvUm9vdEJpbmRpbmcpIHtcblx0XHRcdFx0Ly8gYWJzb2x1dGUgcGF0aFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9CaW5kaW5nLmdldFBhdGgoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyByZWxhdGl2ZSBwYXRoXG5cdFx0XHRcdGNvbnN0IHNSb290QmluZGluZ1BhdGggPSBvUm9vdEJpbmRpbmchLmdldFBhdGgoKTtcblx0XHRcdFx0Y29uc3Qgc1JlbGF0aXZlUGF0aCA9IG9CaW5kaW5nLmdldFBhdGgoKTtcblx0XHRcdFx0aWYgKHZMaXN0QmluZGluZy5nZXRDb250ZXh0KCkgPT09IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGAke3NSb290QmluZGluZ1BhdGh9LyR7c1JlbGF0aXZlUGF0aH1gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvL09uIHRoZSBjYXNlIG9mIGEgbXVsdGkgdmFsdWUgZmllbGQsIHRoZSBjb250ZXh0IG9mIHRoZSBsaXN0IGJpbmRpbmcgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSB2aWV3IGJpbmRpbmcgY29udGV4dC5cblx0XHRcdFx0XHQvLyB3ZSBoYXZlIHRvIGdldCB0aGUgbWV0YSBwYXRoIGZyb20gdGhlIGNvbnRleHQgb2YgdGhlIGxpc3QgYmluZGluZ1xuXHRcdFx0XHRcdHNNZXRhUGF0aCA9IGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgodkxpc3RCaW5kaW5nLmdldENvbnRleHQoKS5nZXRQYXRoKCkpfS8ke3NSZWxhdGl2ZVBhdGh9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc01ldGFQYXRoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHJlbGF0aXZlIG1ldGFQYXRoIGZyb20gdGhlIHZpZXcgZm9yIHRoZSBsaXN0QmluZGluZy5cblx0ICogQHBhcmFtIHBhcmVudENvbnRleHQgQ29udGV4dCBvZiB0aGUgdmlldyBvciB0aGUgcGFyZW50IGNvbnRyb2xcblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIE9EYXRhTGlzdEJpbmRpbmcgb2JqZWN0IG9yIHRoZSBiaW5kaW5nIHBhdGggZm9yIGEgdGVtcG9yYXJ5IGxpc3QgYmluZGluZ1xuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBtZXRhUGF0aCBmb3IgdGhlIE9EYXRhTGlzdEJpbmRpbmcuXG5cdCAqL1xuXHRnZXRSZWxhdGl2ZU1ldGFQYXRoRm9yTGlzdEJpbmRpbmcocGFyZW50Q29udGV4dDogQ29udGV4dCwgbGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGxpc3RCaW5kaW5nQ29udGV4dCA9IGxpc3RCaW5kaW5nLmdldENvbnRleHQoKTtcblx0XHRjb25zdCBwYXJlbnRDb250ZXh0UGF0aCA9IHBhcmVudENvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0Ly9Gb3IgYWJzb2x1dGUgcGF0aCB3ZSByZXR1cm4gdW5kZWZpbmVkXG5cdFx0aWYgKCFsaXN0QmluZGluZ0NvbnRleHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Ly8gaWYgdGhlIGxpc3QgYmluZGluZyBjb250ZXh0IGlzIHRoZSBwYXJlbnQgY29udGV4dCwgd2UgcmV0dXJuIHRoZSBsaXN0IGJpbmRpbmcgcGF0aFxuXHRcdGlmIChsaXN0QmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpID09PSBwYXJlbnRDb250ZXh0UGF0aCkge1xuXHRcdFx0cmV0dXJuIGxpc3RCaW5kaW5nLmdldFBhdGgoKTtcblx0XHR9XG5cdFx0Ly8gaWYgdGhlIGxpc3QgYmluZGluZyBjb250ZXh0IGlzIG5vdCB0aGUgcGFyZW50IGNvbnRleHQsIHdlIHRyeSB0byBmaW5kIHRoZSByZWxhdGl2ZSBwYXRoXG5cdFx0aWYgKGxpc3RCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkuc3RhcnRzV2l0aChwYXJlbnRDb250ZXh0UGF0aCkpIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCB2aWV3QmluZGluZ01ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHBhcmVudENvbnRleHRQYXRoKTtcblx0XHRcdHJldHVybiBgJHttZXRhTW9kZWwuZ2V0TWV0YVBhdGgobGlzdEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSl9LyR7bGlzdEJpbmRpbmcuZ2V0UGF0aCgpfWAucmVwbGFjZShgJHt2aWV3QmluZGluZ01ldGFQYXRofS9gLCBcIlwiKTtcblx0XHR9XG5cdFx0Ly8gb3RoZXJ3aXNlLCB3ZSByZXR1cm4gdW5kZWZpbmVkIHNpbmNlIHRoZSBsaXN0IGJpbmRpbmcgaXMgbm90IHJlbGF0aXZlIHRvIHRoZSB2aWV3IGJpbmRpbmcgY29udGV4dFxuXHRcdHJldHVybjtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIGRyYWZ0IHJvb3QuXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgZHJhZnQgcm9vdFxuXHQgKi9cblx0aXNEcmFmdFJvb3Q6IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVua25vd24gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXREcmFmdFJvb3QoZW50aXR5U2V0KSAhPT0gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgZHJhZnQgbm9kZS5cblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBkcmFmdCBub2RlXG5cdCAqL1xuXHRpc0RyYWZ0Tm9kZTogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5rbm93biB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldERyYWZ0Tm9kZShlbnRpdHlTZXQpICE9PSB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBzdGlja3kgc2Vzc2lvbiByb290LlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHN0aWNreSBzZXNzaW9uIHJvb3Rcblx0ICovXG5cdGlzU3RpY2t5OiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRTdGlja3lTZXNzaW9uKGVudGl0eVNldCkgIT09IHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSBpZiBlbnRpdHkgaXMgdXBkYXRhYmxlIG9yIG5vdC5cblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgRW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHVwZGF0YWJsZSBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc1VwZGF0ZUhpZGRlbjogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogVXBkYXRlSGlkZGVuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoaXNFbnRpdHlTZXQoZW50aXR5U2V0KSkge1xuXHRcdFx0cmV0dXJuIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuID8/IGVudGl0eVR5cGU/LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW47XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgQENvbW1vbi5EcmFmdFJvb3QgYW5ub3RhdGlvbiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gRW50aXR5U2V0LlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcmV0dXJucyBEcmFmdFJvb3Rcblx0ICovXG5cdGdldERyYWZ0Um9vdDogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5rbm93biB8IHVuZGVmaW5lZCk6IERyYWZ0Um9vdCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIEBDb21tb24uRHJhZnROb2RlIGFubm90YXRpb24gaWYgdGhlIGFyZ3VtZW50IGlzIGFuIEVudGl0eVNldC5cblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgRHJhZnRSb290XG5cdCAqL1xuXHRnZXREcmFmdE5vZGU6IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVua25vd24gfCB1bmRlZmluZWQpOiBEcmFmdE5vZGUgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnROb2RlIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgbWV0aG9kIHRvIGdldCBzdGlja3kgc2Vzc2lvbi5cblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgU2Vzc2lvbiBTdGlja3lTZXNzaW9uU3VwcG9ydGVkXG5cdCAqL1xuXHRnZXRTdGlja3lTZXNzaW9uOiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmtub3duIHwgdW5kZWZpbmVkKTogU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA6IHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiBkZWxldGUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBFbnRpdHlUeXBlXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgZGVsZXRlIGJ1dHRvbiBpcyBoaWRkZW5cblx0ICovXG5cdGdldERlbGV0ZUhpZGRlbjogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogRGVsZXRlSGlkZGVuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoaXNFbnRpdHlTZXQoZW50aXR5U2V0KSkge1xuXHRcdFx0cmV0dXJuIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuID8/IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkRlbGV0ZUhpZGRlbjtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIG1ldGFwYXRoIGZvciB0aGUgZ2l2ZW4gbGlzdCBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgTGlzdEJpbmRpbmcuXG5cdCAqIEByZXR1cm5zIE1ldGFQYXRoXG5cdCAqL1xuXHRnZXRBYnNvbHV0ZVBhdGhGcm9tTGlzdEJpbmRpbmcobGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG1ldGFtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IG1ldGFQYXRoO1xuXHRcdGNvbnN0IHJvb3RCaW5kaW5nID0gbGlzdEJpbmRpbmcuZ2V0Um9vdEJpbmRpbmcoKTtcblx0XHRpZiAobGlzdEJpbmRpbmcgPT09IHJvb3RCaW5kaW5nKSB7XG5cdFx0XHRtZXRhUGF0aCA9IG1ldGFtb2RlbC5nZXRNZXRhUGF0aChsaXN0QmluZGluZy5nZXRQYXRoKCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByb290QmluZGluZ1BhdGggPSByb290QmluZGluZz8uZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gbGlzdEJpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0bWV0YVBhdGggPSBtZXRhbW9kZWwuZ2V0TWV0YVBhdGgoYCR7cm9vdEJpbmRpbmdQYXRofS8ke3JlbGF0aXZlUGF0aH1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1ldGFQYXRoO1xuXHR9LFxuXG5cdGVuaGFuY2VPRGF0YU1vZGVsKG9kYXRhTW9kZWw6IE9EYXRhTW9kZWwsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0b2RhdGFNb2RlbC52aXJ0dWFsUHJvcGVydHlCaW5kaW5nUmVnaXN0cnkgPSBuZXcgQXJyYXk8T0RhdGFQcm9wZXJ0eUJpbmRpbmc+KCk7XG5cdFx0Y29uc3QgZm5NZXNzYWdlID0gb2RhdGFNb2RlbC5zZXRNZXNzYWdlcztcblx0XHRjb25zdCBsb2NhbEFubm90YXRpb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwoe30pO1xuXHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldERlZmF1bHRCaW5kaW5nTW9kZShCaW5kaW5nTW9kZS5PbmVXYXkpO1xuXHRcdGNvbnN0IGJhc2VTZXRQcm9wZXJ0eSA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5O1xuXHRcdGNvbnN0IGJhc2VHZXRQcm9wZXJ0eSA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldFByb3BlcnR5O1xuXHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldFByb3BlcnR5ID0gZnVuY3Rpb24gKHBhdGgsIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogdW5rbm93biB7XG5cdFx0XHRjb25zdCBbcHJvcGVydHlOYW1lLCBhbm5vdGF0aW9uVHlwZV0gPSBwYXRoLnNwbGl0KFwiQCR1aTUuZmUuXCIpO1xuXG5cdFx0XHRpZiAoY29udGV4dCAmJiBjb250ZXh0LmlzVHJhbnNpZW50KCkgIT09IHRydWUgJiYgYW5ub3RhdGlvblR5cGUgPT09IFwiQENvbW1vbi9FeHRlcm5hbElEXCIpIHtcblx0XHRcdFx0Y29uc3QgY29udGV4dE9iamVjdCA9IGNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGlmIChjb250ZXh0T2JqZWN0KSB7XG5cdFx0XHRcdFx0Y29uc3QgbWV0YVBhdGggPSBuZXcgTWV0YVBhdGg8RW50aXR5U2V0Pihcblx0XHRcdFx0XHRcdGNvbnZlcnRUeXBlcyhvZGF0YU1vZGVsLmdldE1ldGFNb2RlbCgpKSxcblx0XHRcdFx0XHRcdG9kYXRhTW9kZWwuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YVBhdGgoY29udGV4dC5nZXRQYXRoKCkpLFxuXHRcdFx0XHRcdFx0b2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsSWRQcm9wZXJ0eSA9IG1ldGFQYXRoLmdldE1ldGFQYXRoRm9yUGF0aDxQcm9wZXJ0eT4ocHJvcGVydHlOYW1lKT8uZ2V0VGFyZ2V0KCkuYW5ub3RhdGlvbnMuQ29tbW9uXG5cdFx0XHRcdFx0XHQ/LkV4dGVybmFsSUQ7XG5cdFx0XHRcdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGV4dGVybmFsSWRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBjb250ZXh0LmdldE9iamVjdChleHRlcm5hbElkUHJvcGVydHkucGF0aCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBjb250ZXh0LmdldE9iamVjdChwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRleHQgJiYgYW5ub3RhdGlvblR5cGUgPT09IFwiY29udGV4dFBhdGhcIikge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBiYXNlR2V0UHJvcGVydHkuYXBwbHkodGhpcywgW3BhdGgsIGNvbnRleHRdKTtcblx0XHR9O1xuXG5cdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkgPSBmdW5jdGlvbiAocGF0aCwgdmFsdWUsIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBhc3luY1VwZGF0ZSk6IGJvb2xlYW4ge1xuXHRcdFx0bGV0IGZ1bGxQYXRoID0gcGF0aDtcblx0XHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRcdGZ1bGxQYXRoID0gY29udGV4dC5nZXRQYXRoKHBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgX3JlZnJlc2hMb2NhbE1vZGVsID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLnJlZnJlc2goKTtcblx0XHRcdH07XG5cdFx0XHRjb25zdCBbcHJvcGVydHlOYW1lLCBhbm5vdGF0aW9uVHlwZV0gPSBwYXRoLnNwbGl0KFwiQCR1aTUuZmUuXCIpO1xuXHRcdFx0aWYgKGNvbnRleHQgJiYgYW5ub3RhdGlvblR5cGUgPT09IFwiQENvbW1vbi9FeHRlcm5hbElEXCIpIHtcblx0XHRcdFx0Y29udGV4dC5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcblx0XHRcdFx0Ly8gcmVmcmVzaGluZyBFeHRlcm5hbElEIGFuZCB0ZXh0IHByb3BlcnRpZXMgKHBhdGhzIG5lZWQgdG8gYmUgZGV0ZXJtaW5lZCBnZW5lcmljYWxseSlcblx0XHRcdFx0Y29uc3QgbWV0YVBhdGggPSBuZXcgTWV0YVBhdGg8RW50aXR5U2V0Pihcblx0XHRcdFx0XHRjb252ZXJ0VHlwZXMob2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKSksXG5cdFx0XHRcdFx0b2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSksXG5cdFx0XHRcdFx0b2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSlcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZFByb3BlcnR5ID0gbWV0YVBhdGguZ2V0TWV0YVBhdGhGb3JQYXRoPFByb3BlcnR5Pihwcm9wZXJ0eU5hbWUpPy5nZXRUYXJnZXQoKS5hbm5vdGF0aW9ucy5Db21tb24/LkV4dGVybmFsSUQ7XG5cdFx0XHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihleHRlcm5hbElkUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZFByb3BQYXRoID0gZXh0ZXJuYWxJZFByb3BlcnR5LnBhdGg7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydGllc1RvUmVxdWVzdCA9IFtleHRlcm5hbElkUHJvcFBhdGguc3Vic3RyaW5nKDAsIGV4dGVybmFsSWRQcm9wUGF0aC5sYXN0SW5kZXhPZihcIi9cIikpXTtcblx0XHRcdFx0XHRjb25zdCB0ZXh0UHJvcGVydHkgPSBtZXRhUGF0aC5nZXRNZXRhUGF0aEZvclBhdGg8UHJvcGVydHk+KG1ldGFQYXRoLmdldFBhdGgoKSArIFwiL1wiICsgZXh0ZXJuYWxJZFByb3BQYXRoKT8uZ2V0VGFyZ2V0KClcblx0XHRcdFx0XHRcdC5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnNldFByb3BlcnR5KGV4dGVybmFsSWRQcm9wUGF0aCwgbnVsbCwgbnVsbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih0ZXh0UHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCB0ZXh0UHJvcFBhdGggPSB0ZXh0UHJvcGVydHkucGF0aDtcblx0XHRcdFx0XHRcdGlmICh0ZXh0UHJvcFBhdGguaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnRpZXNUb1JlcXVlc3QucHVzaCh0ZXh0UHJvcFBhdGgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzKHByb3BlcnRpZXNUb1JlcXVlc3QpXG5cdFx0XHRcdFx0XHQudGhlbihfcmVmcmVzaExvY2FsTW9kZWwpXG5cdFx0XHRcdFx0XHQuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoU3BsaXQgPSBmdWxsUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHQvLyBsZXQncyBlbnN1cmUgdGhhdCBzdWIgb2JqZWN0cyBhcmUgaW5pdGlhbGl6ZWRcblx0XHRcdGxldCBwYXRoRnJvbVJvb3QgPSBcIlwiO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0eVBhdGhTcGxpdC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdFx0cGF0aEZyb21Sb290ICs9IFwiL1wiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBhdGhGcm9tUm9vdCArPSBwcm9wZXJ0eVBhdGhTcGxpdFtpXTtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T2JqZWN0KHBhdGhGcm9tUm9vdCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdC8vIGluaXRpYWxpemVcblx0XHRcdFx0XHR0aGlzLnNldFByb3BlcnR5KHBhdGhGcm9tUm9vdCwge30pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYmFzZVNldFByb3BlcnR5LmFwcGx5KHRoaXMsIFtwYXRoLCB2YWx1ZSwgY29udGV4dCwgYXN5bmNVcGRhdGVdKTtcblx0XHR9O1xuXHRcdGZ1bmN0aW9uIGNsZWFyQW5ub3RhdGlvblR5cGUoYW5ub3RhdGlvblR5cGVzOiBzdHJpbmdbXSwgZGF0YVNldDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBvYmplY3Qge1xuXHRcdFx0Zm9yIChjb25zdCBjb250ZXh0UGF0aCBpbiBkYXRhU2V0KSB7XG5cdFx0XHRcdC8vIHdlIGFkZGVkIGEgY29udGV4dCBmb3IgYWNjZXB0aW5nIHJlY29tbWVuZGF0aW9ucyBldmVudHVhbGx5LlxuXHRcdFx0XHQvLyB0aGUgY29udGV4dCBpcyBhIGRlZXBseSBuZXN0ZWQgb2JqZWN0IGl0ZXJhdGluZyBvdmVyIGl0IGNhdXNlIHRoZSBjb2RlIHRoZSBicmVha1xuXHRcdFx0XHQvLyBoZW5jZSB3ZSBhcmUgc2tpcHBpbmcgaXQgaGVyZS5cblx0XHRcdFx0Y29uc3QgY29udGV4dCA9IGRhdGFTZXQ/Lltjb250ZXh0UGF0aF0gYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IGlzQ29udGV4dCA9IGNvbnRleHQ/LmlzQT8uKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIik7XG5cdFx0XHRcdGlmICh0eXBlb2YgY29udGV4dCA9PT0gXCJvYmplY3RcIiAmJiAhaXNDb250ZXh0KSB7XG5cdFx0XHRcdFx0ZGF0YVNldFtjb250ZXh0UGF0aF0gPSBjbGVhckFubm90YXRpb25UeXBlKGFubm90YXRpb25UeXBlcywgZGF0YVNldFtjb250ZXh0UGF0aF0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXHRcdFx0XHRcdGlmIChkYXRhU2V0W2NvbnRleHRQYXRoXSAmJiBPYmplY3Qua2V5cyhkYXRhU2V0W2NvbnRleHRQYXRoXSBhcyBvYmplY3QpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGRhdGFTZXRbY29udGV4dFBhdGhdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGNvbnN0IGFubm90YXRpb25UeXBlIG9mIGFubm90YXRpb25UeXBlcykge1xuXHRcdFx0XHRcdGlmIChjb250ZXh0UGF0aC5lbmRzV2l0aChhbm5vdGF0aW9uVHlwZSkpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBkYXRhU2V0W2NvbnRleHRQYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBkYXRhU2V0O1xuXHRcdH1cblx0XHRvZGF0YU1vZGVsLl9sb2NhbEFubm90YXRpb25Nb2RlbCA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsO1xuXHRcdG9kYXRhTW9kZWwuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwgPSBmdW5jdGlvbiAoKTogSlNPTk1vZGVsIHtcblx0XHRcdHJldHVybiB0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbDtcblx0XHR9O1xuXHRcdG9kYXRhTW9kZWwuc2V0TWVzc2FnZXMgPSBmdW5jdGlvbiAobWVzc2FnZXM6IFJlY29yZDxzdHJpbmcsIE1lc3NhZ2VbXT4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IGNsZWFuZWREYXRhID0gY2xlYXJBbm5vdGF0aW9uVHlwZShbXCJAJHVpNS5mZS5tZXNzYWdlVHlwZVwiLCBcIkAkdWk1LmZlLm1lc3NhZ2VUZXh0XCJdLCB0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbC5nZXREYXRhKCkpO1xuXHRcdFx0dGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0RGF0YShjbGVhbmVkRGF0YSk7XG5cdFx0XHRmb3IgKGNvbnN0IG1lc3NhZ2VUYXJnZXQgaW4gbWVzc2FnZXMpIHtcblx0XHRcdFx0dGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkoYCR7bWVzc2FnZVRhcmdldH1AJHVpNS5mZS5tZXNzYWdlVHlwZWAsIG1lc3NhZ2VzW21lc3NhZ2VUYXJnZXRdWzBdLmdldFR5cGUoKSk7XG5cdFx0XHRcdHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5KGAke21lc3NhZ2VUYXJnZXR9QCR1aTUuZmUubWVzc2FnZVRleHRgLCBtZXNzYWdlc1ttZXNzYWdlVGFyZ2V0XVswXS5nZXRNZXNzYWdlKCkpO1xuXHRcdFx0fVxuXHRcdFx0Zm5NZXNzYWdlLmFwcGx5KHRoaXMsIFttZXNzYWdlc10pO1xuXHRcdH07XG5cdFx0Y29uc3QgZm5CaW5kUHJvcGVydHkgPSBvZGF0YU1vZGVsLmJpbmRQcm9wZXJ0eS5iaW5kKG9kYXRhTW9kZWwpO1xuXHRcdG9kYXRhTW9kZWwuYmluZFByb3BlcnR5ID0gZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgY29udGV4dDogT0RhdGFWNENvbnRleHQsIHBhcmFtZXRlcnMpOiBPRGF0YVByb3BlcnR5QmluZGluZyB7XG5cdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvbkZlYXR1cmVEaXNhYmxlZCA9IGFwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXM/LigpLkRpc2FibGVJbnB1dEFzc2lzdGFuY2U7XG5cdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvblByb3BlcnR5QmluZGluZyA9IE1vZGVsSGVscGVyLnNldFVwUmVjb21tZW5kYXRpb25Mb2NhbE1vZGVsQmluZGluZyhcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0Zm5CaW5kUHJvcGVydHksXG5cdFx0XHRcdHBhdGgsXG5cdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRmVhdHVyZURpc2FibGVkXG5cdFx0XHQpO1xuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uUHJvcGVydHlCaW5kaW5nKSB7XG5cdFx0XHRcdHJldHVybiByZWNvbW1lbmRhdGlvblByb3BlcnR5QmluZGluZyBhcyBPRGF0YVByb3BlcnR5QmluZGluZztcblx0XHRcdH1cblx0XHRcdGlmIChwYXRoLmVuZHNXaXRoKFwiQCR1aTUuZmUuQENvbW1vbi9FeHRlcm5hbElEXCIpICYmIGNvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxJZEJpbmRpbmcgPSBmbkJpbmRQcm9wZXJ0eShwYXRoLCBjb250ZXh0KTtcblx0XHRcdFx0b2RhdGFNb2RlbC52aXJ0dWFsUHJvcGVydHlCaW5kaW5nUmVnaXN0cnkucHVzaChpbnRlcm5hbElkQmluZGluZyk7XG5cdFx0XHRcdGNvbnN0IGV4dGVybmFsSWRCaW5kaW5nID0gdGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuYmluZFByb3BlcnR5KHBhdGgsIGNvbnRleHQpIGFzIHVua25vd24gYXMgT0RhdGFQcm9wZXJ0eUJpbmRpbmc7XG5cblx0XHRcdFx0aW50ZXJuYWxJZEJpbmRpbmcuYXR0YWNoQ2hhbmdlKCgpID0+IHtcblx0XHRcdFx0XHRleHRlcm5hbElkQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpbnRlcm5hbElkQmluZGluZ1xuXHRcdFx0XHRcdC5yZXF1ZXN0VmFsdWUoKVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdGV4dGVybmFsSWRCaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoZXJyKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBleHRlcm5hbElkQmluZGluZztcblx0XHRcdH1cblx0XHRcdGlmIChwYXRoLmluY2x1ZGVzKFwiQCR1aTUuZmUuXCIpKSB7XG5cdFx0XHRcdGNvbnN0IHByb3BCaW5kaW5nID0gdGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuYmluZFByb3BlcnR5KHBhdGgsIGNvbnRleHQpIGFzIE9EYXRhUHJvcGVydHlCaW5kaW5nICYge1xuXHRcdFx0XHRcdHNldENvbnRleHQ/OiBGdW5jdGlvbjtcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKHBhdGguZW5kc1dpdGgoXCJAJHVpNS5mZS5AQ29tbW9uL0V4dGVybmFsSURcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvcEJpbmRpbmc7XG5cdFx0XHRcdH1cblx0XHRcdFx0cHJvcEJpbmRpbmcudXBkYXRlUmVxdWlyZWQgPSBmdW5jdGlvbiAobW9kZWw6IG9iamVjdCk6IGJvb2xlYW4ge1xuXHRcdFx0XHRcdHJldHVybiBtb2RlbCAmJiBtb2RlbCA9PT0gb2RhdGFNb2RlbDtcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKHBhdGguaW5jbHVkZXMoXCJAJHVpNS5mZS52aXJ0dWFsLlwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IGV4cHJlc3Npb24gPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0VmlydHVhbEJpbmRpbmdFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHRcdE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0VHlwZXModGhpcy5nZXRNZXRhTW9kZWwoKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IGdob3N0Q29udHJvbCA9IG5ldyBBbnkoeyBhbnk6IGNvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24pLCBiaW5kQmFja1Byb3BlcnR5OiBwYXRoIH0pO1xuXHRcdFx0XHRcdGNvbnN0IGZuRGVzdHJveVByb3BlcnR5QmluZGluZyA9IHByb3BCaW5kaW5nLmRlc3Ryb3kuYmluZChwcm9wQmluZGluZyk7XG5cdFx0XHRcdFx0cHJvcEJpbmRpbmcuZGVzdHJveSA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdGdob3N0Q29udHJvbD8uZGVzdHJveSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuRGVzdHJveVByb3BlcnR5QmluZGluZygpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgZm5TZXRDb250ZXh0ID0gcHJvcEJpbmRpbmcuc2V0Q29udGV4dDtcblx0XHRcdFx0XHRpZiAoZm5TZXRDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRwcm9wQmluZGluZy5zZXRDb250ZXh0ID0gKG5ld0NvbnRleHQ6IENvbnRleHQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0Z2hvc3RDb250cm9sPy5zZXRCaW5kaW5nQ29udGV4dChuZXdDb250ZXh0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZuU2V0Q29udGV4dC5iaW5kKHByb3BCaW5kaW5nKShuZXdDb250ZXh0KTtcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Z2hvc3RDb250cm9sLnNldE1vZGVsKHRoaXMpO1xuXHRcdFx0XHRcdGNvbnN0IGdob3N0QmluZGluZyA9IGdob3N0Q29udHJvbC5nZXRCaW5kaW5nSW5mbyhcImFueVwiKT8uYmluZGluZztcblx0XHRcdFx0XHRjb25zdCBmbkNoZWNrVXBkYXRlID0gZ2hvc3RCaW5kaW5nPy5jaGVja1VwZGF0ZTtcblx0XHRcdFx0XHRpZiAoZm5DaGVja1VwZGF0ZSkge1xuXHRcdFx0XHRcdFx0Z2hvc3RDb250cm9sLmdldEJpbmRpbmdJbmZvKFwiYW55XCIpLmJpbmRpbmcuY2hlY2tVcGRhdGUgPSAoZm9yY2VVcGRhdGU6IGJvb2xlYW4pOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0Ly8gV2UgbmVlZCB0byBmb3JjZSB0aGUgdXBkYXRlIG9ubHkgaWYgdGhlIGdob3N0IGNvbnRyb2wgaXMgYm91bmQgdG8gYSBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdC8vIGFuZCB0aGUgdmFsdWUgaW4gdGhlIGxvY2FsIGFubm90YXRpb24gbW9kZWwgaXMgZGlmZmVyZW50IGZyb20gdGhlIGV4dGVybmFsIHZhbHVlLlxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBnaG9zdCBjb250cm9sIGlzIHVwZGF0ZWQgb25seSB3aGVuIG5lY2Vzc2FyeS5cblx0XHRcdFx0XHRcdFx0Y29uc3QgaXNDb250ZXh0TG9hZGVkID0gZ2hvc3RDb250cm9sLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldE9iamVjdCgpICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJpbmRCYWNrUHJvcGVydHkgPSBnaG9zdENvbnRyb2wuZ2V0QmluZEJhY2tQcm9wZXJ0eSgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCB2YWx1ZUluTG9jYWxBbm5vdGF0aW9uID0gaXNDb250ZXh0TG9hZGVkXG5cdFx0XHRcdFx0XHRcdFx0PyBsb2NhbEFubm90YXRpb25Nb2RlbC5nZXRQcm9wZXJ0eShnaG9zdENvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKSEuZ2V0UGF0aChiaW5kQmFja1Byb3BlcnR5KSlcblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGZuQ2hlY2tVcGRhdGUuYmluZChnaG9zdEJpbmRpbmcpKFxuXHRcdFx0XHRcdFx0XHRcdGZvcmNlVXBkYXRlIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoYmluZEJhY2tQcm9wZXJ0eSAmJiBpc0NvbnRleHRMb2FkZWQgJiYgZ2hvc3RCaW5kaW5nLmdldEV4dGVybmFsVmFsdWUoKSAhPT0gdmFsdWVJbkxvY2FsQW5ub3RhdGlvbilcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGdob3N0Q29udHJvbC5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcHJvcEJpbmRpbmc7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm5CaW5kUHJvcGVydHkocGF0aCwgY29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0fTtcblx0XHRjb25zdCBmbkRlc3Ryb3kgPSBvZGF0YU1vZGVsLmRlc3Ryb3kuYmluZChvZGF0YU1vZGVsKTtcblx0XHRvZGF0YU1vZGVsLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRmb3IgKGNvbnN0IHZwQmluZGluZyBvZiBvZGF0YU1vZGVsLnZpcnR1YWxQcm9wZXJ0eUJpbmRpbmdSZWdpc3RyeSkge1xuXHRcdFx0XHR2cEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuZGVzdHJveSgpO1xuXHRcdFx0cmV0dXJuIGZuRGVzdHJveS5hcHBseSh0aGlzKTtcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogUmVzb2x2ZXMgYSBtZXRhZGF0YSBiaW5kaW5nIHRvIGl0cyB0ZXh0LCBlaXRoZXIgdXNpbmcgdGhlIGNvbnZlcnRlckNvbnRleHQgb3IgdGhlIG1ldGFNb2RlbCBkaXJlY3RseS5cblx0ICogQHBhcmFtIHBhdGhcblx0ICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcblx0ICogQHBhcmFtIG1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgdGV4dCBpZiBwb3NzaWJsZSwgZWxzZSB0aGUgaW5wdXQgdmFsdWUgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBwYXRoIHdhcyB1bmRlZmluZWRcblx0ICovXG5cdGZldGNoVGV4dEZyb21NZXRhTW9kZWwocGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0PzogQ29udmVydGVyQ29udGV4dDx1bmtub3duPiwgbWV0YU1vZGVsPzogTWV0YU1vZGVsKTogc3RyaW5nIHtcblx0XHRsZXQgdGV4dCA9IHBhdGggIT09IHVuZGVmaW5lZCA/IHBhdGggOiBcIlwiO1xuXHRcdGlmIChwYXRoPy5zdGFydHNXaXRoKFwie21ldGFNb2RlbD5cIikpIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbFBhdGggPSBwYXRoLnN1YnN0cmluZygxMSwgcGF0aC5sZW5ndGggLSAxKTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24obWV0YU1vZGVsUGF0aCkuYW5ub3RhdGlvbj8udG9TdHJpbmcoKSA/PyBcIlwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRleHQgPSBtZXRhTW9kZWw/LmdldE9iamVjdChtZXRhTW9kZWxQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRMb2cuaW5mbyhgVW5hYmxlIHRvIHJldHJpZXZlIHRleHQgZnJvbSBtZXRhIG1vZGVsIHVzaW5nIHBhdGggJHttZXRhTW9kZWxQYXRofWApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGV4dDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBwYXRoIGNvcnJlc3BvbmRpbmcgdG8gc3RhdGUgbWVzc2FnZXMuXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIG1ldGFtb2RlbFxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggUGF0aCBmb3IgdGhlIGNvbnRleHQgb24gd2hpY2ggd2Ugd2hhdCB0byByZXRyZWl2ZSB0aGUgbWVzc2FnZSBwYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGgsIG9yIHVuZGVmaW5lZCBpZiBubyBNZXNzYWdlcyBhbm5vdGF0aW9uIGlzIGRlZmluZWRcblx0ICovXG5cdGdldE1lc3NhZ2VzUGF0aDogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGNvbnRleHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGNvbnRleHRQYXRoKTtcblx0XHRjb25zdCBvYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IG9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucy5Db21tb24/Lk1lc3NhZ2VzO1xuXHRcdHJldHVybiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihtZXNzYWdlcykgPyBtZXNzYWdlcy5wYXRoIDogdW5kZWZpbmVkO1xuXHR9LFxuXHQvKipcblx0ICogU2V0dXAgcmVjb21tZW5kYXRpb24gbG9jYWwgYmluZGluZyB0byBtYWtlIHJlY29tbWVuZGF0aW9ucyBhY2Nlc3NpYmxlIHZpYSBjbGllbnQgc2lkZSBpbnN0YW5jZSBhbm5vdGF0aW9ucy5cblx0ICpcblx0ICogUmVjb21tZW5kYXRpb25zIGlzIGEgY29tcGxleCBwcm9wZXJ0eS5cblx0ICogTW9kZWwgZG9lcyBub3QgcHJvdmlkZSBhbiBlYXN5IHdheSB0byBiaW5kIHRvIGNvbXBsZXggcHJvcGVydGllcy4gSXQgaGFzIDIgbWFqb3IgbGltaXRhdGlvbnMuXG5cdCAqXG5cdCAqIEl0IG9ubHkgc3VwcG9ydHMgb25lIHRpbWUgYmluZGluZyB0byBjb21wbGV4IHByb3BlcnRpZXMuIFRoaXMgaXMgbmVlZGVkIHRvIHNob3cgdXBkYXRlZCByZWNvbW1lbmRhdGlvbnMgb24gdGhlIFVJLlxuXHQgKiBJdCBkb2VzIG5vdCBzdXBwb3J0IGJpbmRpbmdzIHRvIHByb3BlcnRpZXMgaW5zaWRlIGEgY29tcGxleCBwcm9wZXJ0eSB3aGljaCBpcyBuZWVkZWQgZm9yIHJlY29tbWVuZGF0aW9ucy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHdvcmthcm91bmQgdG8gb3ZlcmNvbWUgdGhlIGFib3ZlIHR3byBzaG9ydCBjb21pbmdzIGFuZFxuXHQgKiB0byBzdXBwb3J0IGNsaWVudCBzaWRlIGluc3RhbmNlIGFubm90YXRpb25zIGZvciByZWNvbW1lbmRhdGlvbnMuXG5cdCAqIEBwYXJhbSBvZGF0YU1vZGVsIFRoZSBvZGF0YSBtb2RlbCBpbnN0YW5jZS5cblx0ICogQHBhcmFtIGZuQmluZFByb3BlcnR5IE9yaWdpbmFsIGJpbmQgcHJvcGVydHkgb2YgdGhlIG9EYXRhTW9kZWxcblx0ICogQHBhcmFtIHBhdGggQmluZGluZyBwYXRoIGZvciB3aGljaCByZWNvbW1lbmRhdGlvbiBpcyBiZWluZyByZXF1ZXN0ZWRcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSByZWNvbW1lbmRhdGlvbiBpcyBiZWluZyByZXF1ZXN0ZWRcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRmVhdHVyZURpc2FibGVkIEZsYWcgd2hpY2ggdG9nZ2xlcyB0aGUgcmVjb21tZW5kYXRpb24gZmVhdHVyZVxuXHQgKiBAcmV0dXJucyBSZWNvbW1lbmRhdGlvbiBwcm9wZXJ0eSBwYXRoIGZvciB0aGUgZW50aXR5IHJlbGF0ZWQgdG8gdGhlIGNvbnRleHQgYW5kIHdoZXRoZXIgdGhlIGJpbmRpbmdQYXRoIGlzIHJlbGV2YW50IG9yIG5vdCBiYXNlZCBvbiBtZXRhZGF0YS5cblx0ICovXG5cdHNldFVwUmVjb21tZW5kYXRpb25Mb2NhbE1vZGVsQmluZGluZzogZnVuY3Rpb24gKFxuXHRcdG9kYXRhTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0Zm5CaW5kUHJvcGVydHk6IEZ1bmN0aW9uLFxuXHRcdHBhdGg6IHN0cmluZyxcblx0XHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRyZWNvbW1lbmRhdGlvbkZlYXR1cmVEaXNhYmxlZDogYm9vbGVhblxuXHQpOiBQcm9wZXJ0eUJpbmRpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmIChwYXRoLmluY2x1ZGVzKFwidWk1LmZlLnJlY29tbWVuZGF0aW9uc1wiKSkge1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25iaW5kaW5nID0gb2RhdGFNb2RlbC5nZXRMb2NhbEFubm90YXRpb25Nb2RlbCgpLmJpbmRQcm9wZXJ0eShwYXRoLCBjb250ZXh0KSBhcyBPRGF0YVByb3BlcnR5QmluZGluZyAmIHtcblx0XHRcdFx0c2V0Q29udGV4dDogRnVuY3Rpb247XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc2V0Q29udGV4dE9uUmVjb21tZW5kYXRpb25CaW5kaW5nID0gKG9kYXRhUHJvcGVydHlCaW5kaW5nOiBPRGF0YVByb3BlcnR5QmluZGluZyAmIHsgc2V0Q29udGV4dDogRnVuY3Rpb24gfSk6IHZvaWQgPT4ge1xuXHRcdFx0XHQvL3dlIG1ha2Ugc3VyZSB0aGUgcGFyZW50IGNvbnRleHQgaXMgc2V0IHRvIHRoZSBwcm9wZXJ0eWJpbmRpbmdcblx0XHRcdFx0Y29uc3QgZm5TZXRDb250ZXh0ID0gcmVjb21tZW5kYXRpb25iaW5kaW5nLnNldENvbnRleHQ7XG5cdFx0XHRcdGlmIChmblNldENvbnRleHQpIHtcblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbmJpbmRpbmcuc2V0Q29udGV4dCA9IChuZXdDb250ZXh0OiBDb250ZXh0KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRvZGF0YVByb3BlcnR5QmluZGluZz8uc2V0Q29udGV4dChuZXdDb250ZXh0KTtcblx0XHRcdFx0XHRcdHJldHVybiBmblNldENvbnRleHQuYmluZChvZGF0YVByb3BlcnR5QmluZGluZykobmV3Q29udGV4dCk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IHsgcmVjb21tZW5kYXRpb25Db21wbGV4UHJvcGVydHksIGlzUmVjb21tZW5kZWRQcm9wZXJ0eSB9ID0gTW9kZWxIZWxwZXIudmFsaWRhdGVSZWNvbW1lbmRhdGlvbkJpbmRpbmdQYXRoKFxuXHRcdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdFx0cGF0aFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAocmVjb21tZW5kYXRpb25Db21wbGV4UHJvcGVydHkgJiYgaXNSZWNvbW1lbmRlZFByb3BlcnR5ICYmICFyZWNvbW1lbmRhdGlvbkZlYXR1cmVEaXNhYmxlZCkge1xuXHRcdFx0XHRcdGNvbnN0IGFscmVhZHlCb3VuZCA9IG9kYXRhTW9kZWwudmlydHVhbFByb3BlcnR5QmluZGluZ1JlZ2lzdHJ5LnNvbWUoKGV4aXN0aW5nQmluZGluZykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0Ly8gYmluZGluZyBleGlzdHMgYnV0IHRoZSBjb250ZXh0IGNhbiBiZSBkZXN0cm95ZWQgc29tZXRpbWVzIGJlY2F1c2Ugb2YgZGlzY2FyZCBhbmQgZGVsZXRlLlxuXHRcdFx0XHRcdFx0XHQvLyBoZW5jZSB3ZSBuZWVkIHRvIGNoZWNrIGlmIGNvbnRleHQgZXhpc3RzIG9yIG5vdCBiZWZvcmUgZGVjaWRpbmcgaWYgd2UgYWxyZWFkeSBoYXZlIGEgYmluZGluZyBvciBub3QuXG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IFdlIG1pZ2h0IHdhbnQgdG8gY2xlYXIgdGhlIHByb3BlcnR5IGJpbmRpbmcgd2hlbiB0aGUgY29udGV4IGlzIGRlc3Ryb3llZC5cblx0XHRcdFx0XHRcdFx0Y29udGV4dC5nZXRQYXRoKCkgPT09IGV4aXN0aW5nQmluZGluZy5nZXRDb250ZXh0KCk/LmdldFBhdGgoKSAmJlxuXHRcdFx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbkNvbXBsZXhQcm9wZXJ0eSA9PT0gZXhpc3RpbmdCaW5kaW5nLmdldFBhdGgoKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRpZiAoIWFscmVhZHlCb3VuZCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb2RhdGFQcm9wZXJ0eUJpbmRpbmcgPSBmbkJpbmRQcm9wZXJ0eShyZWNvbW1lbmRhdGlvbkNvbXBsZXhQcm9wZXJ0eSwgY29udGV4dCkgYXMgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgJiB7XG5cdFx0XHRcdFx0XHRcdHNldENvbnRleHQ6IEZ1bmN0aW9uO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdC8vIEJlY3Vhc2UgcmVjb21tZW5kYXRpb25zIGlzIGEgY29tcGxleCBwcm9wZXJ0eSBhbmQgbm90IGEgcHJpbWl0aXZlIHR5cGUgaGVuY2UgdXNlIGEgcmF3IHR5cGUuXG5cdFx0XHRcdFx0XHRvZGF0YVByb3BlcnR5QmluZGluZy5zZXRUeXBlKG5ldyBSYXcoKSwgXCJhbnlcIik7XG5cdFx0XHRcdFx0XHRvZGF0YVByb3BlcnR5QmluZGluZy5zZXRCaW5kaW5nTW9kZShCaW5kaW5nTW9kZS5PbmVXYXkpO1xuXHRcdFx0XHRcdFx0b2RhdGFNb2RlbC52aXJ0dWFsUHJvcGVydHlCaW5kaW5nUmVnaXN0cnkucHVzaChvZGF0YVByb3BlcnR5QmluZGluZyk7XG5cdFx0XHRcdFx0XHRvZGF0YVByb3BlcnR5QmluZGluZy5hdHRhY2hDaGFuZ2UoKGV2ZW50OiBPRGF0YVByb3BlcnR5QmluZGluZyRDaGFuZ2VFdmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHQvLyByZWZyZXNoIHRoZSBsb2NhbCBhbm5vdGF0aW9uIGJpbmRpbmcgb25jZSByZWNvbW1lbmRhdGlvbiBiaW5kaW5nIGlzIHVwZGF0ZWQuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5QmluZGluZyA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50Q29udGV4dCA9IGV2ZW50LmdldFNvdXJjZSgpLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgY29udGV4dFJlY29tbWVuZGF0aW9ucyA9IHByb3BlcnR5QmluZGluZy5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdE1vZGVsSGVscGVyLnNldFJlY29tbWVuZGF0aW9uc09uTG9jYWxBbm5vdGF0aW9uTW9kZWwoY29udGV4dFJlY29tbWVuZGF0aW9ucywgY3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uYmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Ly8gcmV1ZXN0VmFsdWUgd2lsbCBhZGQgdGhlIHJlY29tbWVuZGF0aW9uIHByb3BlcnR5IHRvIHRoZSAkc2VsZWN0XG5cdFx0XHRcdFx0XHQvLyBoZW5jZSB3ZSBkbyBub3QgbmVlZCB0byBhZGQgaXQgdG8gdGhlICRzZWxlY3Qgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGJpbmRpbmcgYXQgdmFyaW91cyBwbGFjZXMgKGZvcm1zLCB0YWJsZSBldGMuKVxuXHRcdFx0XHRcdFx0b2RhdGFQcm9wZXJ0eUJpbmRpbmcucmVxdWVzdFZhbHVlKCkuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdFx0XHRcdExvZy5lcnJvcihcIlJlY29tbWVuZGF0aW9ucyBjb3VsZCBub3QgYmUgcmVzb2x2ZWRcIiwgZXJyb3IpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRzZXRDb250ZXh0T25SZWNvbW1lbmRhdGlvbkJpbmRpbmcob2RhdGFQcm9wZXJ0eUJpbmRpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgYmluZGluZyBiZWNvbWVzIGludmFsaWQgYW5kIGEgbmV3IGJpbmRpbmcgaXMgY3JlYXRlZCBzbyB0aGUgcmVjb21tZW5kYXRpb24gcHJvcGVydHkgYmluZGluZyBjYW4gYmUgY3JlYXRlZC5cblx0XHRcdC8vXG5cdFx0XHQvLyBGb3IgdGhpcyB3ZSBuZWVkIHRvIG92ZXJyaWRlIHVwZGF0ZVJlcXVpcmVkIHNvIHRoYXQgdGhlIGJpbmRpbmcgaXMgdXBkYXRlZCB1bnRpbCBpdCBoYXMgbm90IHJlY2VpdmVkIGEgY29udGV4dFxuXHRcdFx0Ly8gcG9zdCB0aGF0IHdlIGRvIG5vdCBuZWVkIHRoZSBiaW5kaW5nIHRvIGJlIHVwZGF0ZWQuXG5cdFx0XHQvLyBJZiB3ZSByZW1vdmUgdGhlIHVwZGF0ZVJlcXVpcmVkIG92ZXJyaWRlIHRoZW4gcmVjb21tZW5kYXRpb25zIHdvcmsgZmluZSBieSBkdXJpbmcgc2F2ZSBvZiBhIG5ld2x5IGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHdlIGdldCBiaW5kaW5nIHJlbGF0ZWQgaXNzdWVzLlxuXHRcdFx0Ly9cblx0XHRcdC8vIFVwZGF0aW5nIHRoZSBiaW5kaW5nIHRvIHJlY29tbWVuZGF0aW9ucyB3aWxsIGJlIGRvbmUgYnkgc2V0UHJvcGVydHkgb24gdGhlIGxvY2FsQW5ub3RhdGlvbk1vZGVsXG5cdFx0XHQvLyB3aGVuIHRoZSByZWNvbW1lbmRhdGlvbiBwcm9wZXJ0eSBpcyBhY3R1YWxseSB1cGRhdGVkLlxuXHRcdFx0cmVjb21tZW5kYXRpb25iaW5kaW5nLnVwZGF0ZVJlcXVpcmVkID0gZnVuY3Rpb24gKG1vZGVsOiBvYmplY3QpOiBib29sZWFuIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0Q29udGV4dCgpID8gbW9kZWwgJiYgbW9kZWwgPT09IG9kYXRhTW9kZWwgOiBtb2RlbCAmJiB0aGlzLmdldE1vZGVsKCkgPT09IG1vZGVsO1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiByZWNvbW1lbmRhdGlvbmJpbmRpbmc7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogVmFsaWRhdGVzIGJhc2VkIG9uIG1ldGFkYXRhIHdoZXRoZXIgYSBnaXZlbiBiaW5kaW5nIHNob3VsZCBkZWFsIHdpdGggcmVjb21tZW5kYXRpb25zIG9yIG5vdC5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB3aGVyZSByZWNvbW1lbmRhdGlvbiBpcyBiZWluZyByZXF1ZXN0ZWQuXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGF0aCBCaW5kaW5nIHBhdGggZm9yIHdoaWNoIHJlY29tbWVuZGF0aW9uIGlzIGJlaW5nIHJlcXVlc3RlZC5cblx0ICogQHJldHVybnMgUmVjb21tZW5kYXRpb24gcHJvcGVydHkgcGF0aCBmb3IgdGhlIGVudGl0eSByZWxhdGVkIHRvIHRoZSBjb250ZXh0IGFuZCB3aGV0aGVyIHRoZSBiaW5kaW5nUGF0aCBpcyByZWxldmFudCBvciBub3QgYmFzZWQgb24gbWV0YWRhdGEuXG5cdCAqL1xuXHR2YWxpZGF0ZVJlY29tbWVuZGF0aW9uQmluZGluZ1BhdGg6IGZ1bmN0aW9uIChcblx0XHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRiaW5kaW5nUGF0aDogc3RyaW5nXG5cdCk6IHsgcmVjb21tZW5kYXRpb25Db21wbGV4UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZDsgaXNSZWNvbW1lbmRlZFByb3BlcnR5OiBib29sZWFuIH0ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBjb250ZXh0TWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGNvbnRleHRNZXRhUGF0aCk7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhQ29udGV4dCkudGFyZ2V0RW50aXR5VHlwZTtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvbkNvbXBsZXhQcm9wZXJ0eSA9ICh0YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUkgYXMgRW50aXR5VHlwZUFubm90YXRpb25zX1VJX1dpdGhfUmVjb21tZW5kYXRpb25zKVxuXHRcdFx0Py5SZWNvbW1lbmRhdGlvbnM/LnBhdGg7XG5cdFx0Ly8gc2FtcGxlIGJpbmRpbmcgLSBTaGlwcGluZ0NvbmRpdGlvbkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXG5cdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gYmluZGluZ1BhdGguc3BsaXQoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnNcIilbMF07XG5cdFx0Y29uc3QgaXNSZWNvbW1lbmRlZFByb3BlcnR5ID0gdGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLnNvbWUoKGVudGl0eVByb3BlcnR5KSA9PiB7XG5cdFx0XHRpZiAoZW50aXR5UHJvcGVydHkubmFtZSA9PT0gcmVjb21tZW5kYXRpb25Db21wbGV4UHJvcGVydHkpIHtcblx0XHRcdFx0cmV0dXJuIChlbnRpdHlQcm9wZXJ0eT8udGFyZ2V0VHlwZSBhcyBDb21wbGV4VHlwZSk/LnByb3BlcnRpZXMuc29tZSgocHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHlQYXRoID09PSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cmVjb21tZW5kYXRpb25Db21wbGV4UHJvcGVydHksXG5cdFx0XHRpc1JlY29tbWVuZGVkUHJvcGVydHlcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogVXBkYXRlIHJlY29tbWVuZGF0aW9uIGNsaWVudCBzaWRlIGluc3RhbmNlIGFubm90YXRpb25zLlxuXHQgKiBAcGFyYW0gY29udGV4dFJlY29tbWVuZGF0aW9ucyBVcGRhdGVkIHJlY29tbWVuZGF0aW9ucy5cblx0ICogQHBhcmFtIGN1cnJlbnRDb250ZXh0IENvbnRleHQgd2hlcmUgcmVjb21tZW5kYXRpb24gd2FzIHVwZGF0ZWQuXG5cdCAqL1xuXHRzZXRSZWNvbW1lbmRhdGlvbnNPbkxvY2FsQW5ub3RhdGlvbk1vZGVsOiBmdW5jdGlvbiAoY29udGV4dFJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25zLCBjdXJyZW50Q29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkIHtcblx0XHRpZiAoY29udGV4dFJlY29tbWVuZGF0aW9ucykge1xuXHRcdFx0Zm9yIChjb25zdCByZWNvbW1lbmRlZFByb3BlcnR5IGluIGNvbnRleHRSZWNvbW1lbmRhdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlSZWNvbW1lbmRhdGlvbnMgPSBjb250ZXh0UmVjb21tZW5kYXRpb25zW3JlY29tbWVuZGVkUHJvcGVydHldO1xuXHRcdFx0XHRjb25zdCBsb2NhbE1vZGVsUGF0aCA9IHJlY29tbWVuZGVkUHJvcGVydHk7XG5cdFx0XHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk1vZGVsID0gY3VycmVudENvbnRleHQuZ2V0TW9kZWwoKS5nZXRMb2NhbEFubm90YXRpb25Nb2RlbCgpO1xuXHRcdFx0XHRjb25zdCB0eXBlQWhlYWRWYWx1ZXMgPSBbXTtcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wZXJ0eVJlY29tbWVuZGF0aW9uIG9mIHByb3BlcnR5UmVjb21tZW5kYXRpb25zKSB7XG5cdFx0XHRcdFx0aWYgKHByb3BlcnR5UmVjb21tZW5kYXRpb24uUmVjb21tZW5kZWRGaWVsZElzU3VnZ2VzdGlvbikge1xuXHRcdFx0XHRcdFx0Y29uc3QgcGxhY2Vob2xkZXJWYWx1ZUFubm90YXRpb25QYXRoID0gY3VycmVudENvbnRleHQuZ2V0UGF0aChcblx0XHRcdFx0XHRcdFx0bG9jYWxNb2RlbFBhdGggKyBcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCJcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRjb25zdCBwbGFjZWhvbGRlckRlc2NyaXB0aW9uQW5ub3RhdGlvblBhdGggPSBjdXJyZW50Q29udGV4dC5nZXRQYXRoKFxuXHRcdFx0XHRcdFx0XHRsb2NhbE1vZGVsUGF0aCArIFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25cIlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlclZhbHVlQW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UmVjb21tZW5kYXRpb24uUmVjb21tZW5kZWRGaWVsZFZhbHVlLFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRsb2NhbEFubm90YXRpb25Nb2RlbC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXJEZXNjcmlwdGlvbkFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVJlY29tbWVuZGF0aW9uLlJlY29tbWVuZGVkRmllbGREZXNjcmlwdGlvbixcblx0XHRcdFx0XHRcdFx0Y3VycmVudENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Ly8gc2V0IHBsYWNlaG9sZGVyIGRlc2NyaXB0aW9uIGFuZCB2YWx1ZXNcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly9sb2NhbEFubm90YXRpb25Nb2RlbC5cblx0XHRcdFx0XHQvLyBwdXNoIHRvcCAzIHJlY29tbWVuZGF0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdGlmIChwcm9wZXJ0eVJlY29tbWVuZGF0aW9uLlJlY29tbWVuZGVkRmllbGRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0dHlwZUFoZWFkVmFsdWVzLnB1c2gocHJvcGVydHlSZWNvbW1lbmRhdGlvbi5SZWNvbW1lbmRlZEZpZWxkVmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXByb3BlcnR5UmVjb21tZW5kYXRpb25zIHx8ICFwcm9wZXJ0eVJlY29tbWVuZGF0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb25zdCBwbGFjZWhvbGRlclZhbHVlQW5ub3RhdGlvblBhdGggPSBjdXJyZW50Q29udGV4dC5nZXRQYXRoKFxuXHRcdFx0XHRcdFx0bG9jYWxNb2RlbFBhdGggKyBcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHBsYWNlaG9sZGVyRGVzY3JpcHRpb25Bbm5vdGF0aW9uUGF0aCA9IGN1cnJlbnRDb250ZXh0LmdldFBhdGgoXG5cdFx0XHRcdFx0XHRsb2NhbE1vZGVsUGF0aCArIFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25cIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkocGxhY2Vob2xkZXJWYWx1ZUFubm90YXRpb25QYXRoLCBudWxsLCBjdXJyZW50Q29udGV4dCwgZmFsc2UpO1xuXHRcdFx0XHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5KHBsYWNlaG9sZGVyRGVzY3JpcHRpb25Bbm5vdGF0aW9uUGF0aCwgXCJcIiwgY3VycmVudENvbnRleHQsIGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsb2NhbEFubm90YXRpb25Nb2RlbC5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRjdXJyZW50Q29udGV4dC5nZXRQYXRoKGxvY2FsTW9kZWxQYXRoICsgXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMudHlwZUFoZWFkVmFsdWVzXCIpLFxuXHRcdFx0XHRcdHR5cGVBaGVhZFZhbHVlcyxcblx0XHRcdFx0XHRjdXJyZW50Q29udGV4dCxcblx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRsb2NhbEFubm90YXRpb25Nb2RlbC5zZXRQcm9wZXJ0eShjdXJyZW50Q29udGV4dC5nZXRQYXRoKFwicmVjb21tZW5kYXRpb25Db250ZXh0XCIpLCBjdXJyZW50Q29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgU2Vjb25kYXJ5S2V5cyBmcm9tIGVudGl0eXR5cGUuXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIERhdGFtb2RlbCBvYmplY3Qgb2YgZW50aXR5VHlwZVxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IERhdGFtb2RlbCBvYmplY3Qgb2YgZW50aXR5U2V0XG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFsdGVybmF0ZSBrZXlzXG5cdCAqL1xuXHRnZXRBbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzOiAoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgZW50aXR5U2V0OiBFbnRpdHlTZXQpOiBzdHJpbmdbXSA9PiB7XG5cdFx0Y29uc3QgYWx0ZXJuYXRlS2V5czogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBfZmV0Y2hBbHRlcm5hdGVLZXlzID0gKGVudGl0eVR5cGVPclNldDogRW50aXR5U2V0IHwgRW50aXR5VHlwZSk6IHZvaWQgPT4ge1xuXHRcdFx0ZW50aXR5VHlwZU9yU2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uQWx0ZXJuYXRlS2V5cz8uZm9yRWFjaCgoYWx0ZXJuYXRlS2V5OiBBbHRlcm5hdGVLZXkpID0+IHtcblx0XHRcdFx0YWx0ZXJuYXRlS2V5LktleS5mb3JFYWNoKChrZXk6IFByb3BlcnR5UmVmKSA9PiB7XG5cdFx0XHRcdFx0YWx0ZXJuYXRlS2V5cy5wdXNoKGtleS5OYW1lLnZhbHVlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdGNvbnN0IF9mZXRjaFNlY29uZGFyeUtleXMgPSAoZVQ6IEVudGl0eVR5cGUpOiB2b2lkID0+IHtcblx0XHRcdGVUPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZWNvbmRhcnlLZXk/LmZvckVhY2goKHNlY29uZGFyeUtleTogUHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRcdGlmICghYWx0ZXJuYXRlS2V5cy5pbmNsdWRlcyhzZWNvbmRhcnlLZXkudmFsdWUpKSB7XG5cdFx0XHRcdFx0YWx0ZXJuYXRlS2V5cy5wdXNoKHNlY29uZGFyeUtleS52YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0X2ZldGNoQWx0ZXJuYXRlS2V5cyhlbnRpdHlTZXQpO1xuXHRcdGlmICghYWx0ZXJuYXRlS2V5cy5sZW5ndGgpIHtcblx0XHRcdF9mZXRjaEFsdGVybmF0ZUtleXMoZW50aXR5VHlwZSk7XG5cdFx0fVxuXHRcdF9mZXRjaFNlY29uZGFyeUtleXMoZW50aXR5VHlwZSk7XG5cdFx0cmV0dXJuIGFsdGVybmF0ZUtleXM7XG5cdH1cbn07XG5cbnR5cGUgUmVjb21tZW5kYXRpb25zID0gUmVjb3JkPHN0cmluZywgUmVjb21tZW5kYXRpb25EZXRhaWxzW10+O1xudHlwZSBSZWNvbW1lbmRhdGlvbkRldGFpbHMgPSB7XG5cdFJlY29tbWVuZGVkRmllbGRWYWx1ZTogc3RyaW5nO1xuXHRSZWNvbW1lbmRlZEZpZWxkSXNTdWdnZXN0aW9uOiBib29sZWFuO1xuXHRSZWNvbW1lbmRlZEZpZWxkRGVzY3JpcHRpb246IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEludGVybmFsTW9kZWxDb250ZXh0ID0geyBnZXRNb2RlbCgpOiBKU09OTW9kZWwgfSAmIEJhc2VDb250ZXh0ICYge1xuXHRcdHNldFByb3BlcnR5KHNQYXRoOiBzdHJpbmcsIHZWYWx1ZTogdW5rbm93bik6IHZvaWQ7XG5cdH07XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGVsSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0VBQUE7RUFvQ0E7RUFDQTtFQUNBOztFQU9BLE1BQU1BLFdBQVcsR0FBRztJQUNuQjtJQUNBO0lBQ0E7SUFDQUMseUJBQXlCLEVBQUUsS0FBSztJQUNoQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0ND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
|
|
@@ -592,7 +592,7 @@ const ModelHelper = {
|
|
|
592
592
|
return baseGetProperty.apply(this, [path, context]);
|
|
593
593
|
};
|
|
594
594
|
|
|
595
|
-
localAnnotationModel.setProperty = function (path, value, context, asyncUpdate): boolean {
|
|
595
|
+
localAnnotationModel.setProperty = function (path, value, context: ODataV4Context, asyncUpdate): boolean {
|
|
596
596
|
let fullPath = path;
|
|
597
597
|
if (context) {
|
|
598
598
|
fullPath = context.getPath(path);
|
|
@@ -613,14 +613,18 @@ const ModelHelper = {
|
|
|
613
613
|
if (isPathAnnotationExpression(externalIdProperty)) {
|
|
614
614
|
const externalIdPropPath = externalIdProperty.path;
|
|
615
615
|
const propertiesToRequest = [externalIdPropPath.substring(0, externalIdPropPath.lastIndexOf("/"))];
|
|
616
|
-
const textProperty = metaPath.getMetaPathForPath<Property>(externalIdPropPath)?.getTarget()
|
|
616
|
+
const textProperty = metaPath.getMetaPathForPath<Property>(metaPath.getPath() + "/" + externalIdPropPath)?.getTarget()
|
|
617
|
+
.annotations.Common?.Text;
|
|
618
|
+
if (value === null) {
|
|
619
|
+
context.setProperty(externalIdPropPath, null, null);
|
|
620
|
+
}
|
|
617
621
|
if (isPathAnnotationExpression(textProperty)) {
|
|
618
622
|
const textPropPath = textProperty.path;
|
|
619
623
|
if (textPropPath.includes("/")) {
|
|
620
624
|
propertiesToRequest.push(textPropPath);
|
|
621
625
|
}
|
|
622
626
|
}
|
|
623
|
-
|
|
627
|
+
context
|
|
624
628
|
.requestSideEffects(propertiesToRequest)
|
|
625
629
|
.then(_refreshLocalModel)
|
|
626
630
|
.catch((err) => {
|
|
@@ -44,7 +44,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/library", "sap/fe/core/formatters/Cr
|
|
|
44
44
|
controls: [],
|
|
45
45
|
elements: [],
|
|
46
46
|
// eslint-disable-next-line no-template-curly-in-string
|
|
47
|
-
version: "1.136.
|
|
47
|
+
version: "1.136.11",
|
|
48
48
|
noLibraryCSS: true,
|
|
49
49
|
extensions: {
|
|
50
50
|
//Configuration used for rule loading of Support Assistant
|
|
@@ -101,7 +101,7 @@ C_TRANSACTION_HELPER_DRAFT_DISCARD_MESSAGE=\u0647\u0644 \u062A\u0631\u064A\u062F
|
|
|
101
101
|
|
|
102
102
|
C_TRANSACTION_HELPER_DRAFT_DISCARD_BUTTON=\u062A\u062C\u0627\u0647\u0644
|
|
103
103
|
|
|
104
|
-
ST_DRAFT_DATALOSS_POPUP_MESSAGE_SAVE=\u062A\u063A\u064A\u064A\u0631\u0643\u0627\u0626\u0646.\n\u0645\u0627 \u062A\u0631\u064A\u062F\u061F
|
|
104
|
+
ST_DRAFT_DATALOSS_POPUP_MESSAGE_SAVE=\u0644\u0642\u062F \u0623\u062C\u0631\u064A\u062A \u062A\u063A\u064A\u064A\u0631\u0627\u062A \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0643\u0627\u0626\u0646.\n\u0645\u0627 \u0627\u0644\u0630\u064A \u062A\u0631\u064A\u062F \u0641\u0639\u0644\u0647\u061F
|
|
105
105
|
|
|
106
106
|
ST_DRAFT_DATALOSS_POPUP_MESSAGE_CREATE=\u0644\u0645 \u062A\u0646\u0634\u0626 \u0647\u0630\u0627 \u0627\u0644\u0643\u0627\u0626\u0646 \u062D\u062A\u0649 \u0627\u0644\u0622\u0646. \u0645\u0627\u0630\u0627 \u062A\u0631\u064A\u062F \u0623\u0646 \u062A\u0641\u0639\u0644\u061F
|
|
107
107
|
|
|
@@ -101,7 +101,7 @@ C_TRANSACTION_HELPER_DRAFT_DISCARD_MESSAGE=\u041E\u0442\u0445\u0432\u044A\u0440\
|
|
|
101
101
|
|
|
102
102
|
C_TRANSACTION_HELPER_DRAFT_DISCARD_BUTTON=\u041E\u0442\u0445\u0432\u044A\u0440\u043B\u044F\u043D\u0435
|
|
103
103
|
|
|
104
|
-
ST_DRAFT_DATALOSS_POPUP_MESSAGE_SAVE=\
|
|
104
|
+
ST_DRAFT_DATALOSS_POPUP_MESSAGE_SAVE=\u041E\u0431\u0435\u043A\u0442\u044A\u0442 \u0435 \u043F\u0440\u043E\u043C\u0435\u043D\u0435\u043D.\n\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435.
|
|
105
105
|
|
|
106
106
|
ST_DRAFT_DATALOSS_POPUP_MESSAGE_CREATE=\u041E\u0431\u0435\u043A\u0442\u044A\u0442 \u043E\u0449\u0435 \u043D\u0435 \u0435 \u0441\u044A\u0437\u0434\u0430\u0434\u0435\u043D.\u041A\u043E\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0438\u0441\u043A\u0430\u0442\u0435 \u0434\u0430 \u0438\u0437\u043F\u044A\u043B\u043D\u0438\u0442\u0435?
|
|
107
107
|
|
|
@@ -115,9 +115,9 @@ ST_DRAFT_DATALOSS_SAVE_HIDDEN_DRAFT_TOL=\u041F\u0440\u043E\u043C\u0435\u043D\u04
|
|
|
115
115
|
|
|
116
116
|
ST_DRAFT_DATALOSS_CREATE_ENTITY_TOL=\u0421\u044A\u0437\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u043E\u0431\u0435\u043A\u0442.
|
|
117
117
|
|
|
118
|
-
ST_DRAFT_DATALOSS_KEEP_DRAFT_RBL=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0447\u0435\u0440\u043D\u043E\u0432\u0430
|
|
118
|
+
ST_DRAFT_DATALOSS_KEEP_DRAFT_RBL=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0447\u0435\u0440\u043D\u043E\u0432\u0430\u0442\u0430
|
|
119
119
|
|
|
120
|
-
ST_DRAFT_DATALOSS_KEEP_DRAFT_TOL=\u041F\u0440\u043E\u043C\u0435\u043D\u0438\u0442\u0435 \u0441\u0430 \u0432\u0438\u0434\u0438\u043C\u0438 \u0441\u0430\u043C\u043E \u0437\u0430 \
|
|
120
|
+
ST_DRAFT_DATALOSS_KEEP_DRAFT_TOL=\u041F\u0440\u043E\u043C\u0435\u043D\u0438\u0442\u0435 \u0441\u0430 \u0432\u0438\u0434\u0438\u043C\u0438 \u0441\u0430\u043C\u043E \u0437\u0430 \u0432\u0430\u0441 \u0438 \u043D\u0435 \u0441\u0435 \u043E\u0442\u0440\u0430\u0437\u044F\u0432\u0430\u0442 \u043D\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u0438\u0442\u0435 \u043F\u0440\u043E\u0446\u0435\u0441\u0438 \u0438 \u0444\u0443\u043D\u043A\u0446\u0438\u0438.
|
|
121
121
|
|
|
122
122
|
ST_DRAFT_DATALOSS_DISCARD_DRAFT_RBL=\u041E\u0442\u0445\u0432\u044A\u0440\u043B\u044F\u043D\u0435 \u043D\u0430 \u0447\u0435\u0440\u043D\u043E\u0432\u0430\u0442\u0430
|
|
123
123
|
|