@sapui5/sap.fe.core 1.136.7 → 1.136.9
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/AppComponent.js +28 -16
- package/src/sap/fe/core/AppComponent.ts +36 -20
- package/src/sap/fe/core/AppStateHandler.js +6 -5
- package/src/sap/fe/core/AppStateHandler.ts +5 -5
- package/src/sap/fe/core/CommonUtils.js +22 -2
- package/src/sap/fe/core/CommonUtils.ts +22 -4
- package/src/sap/fe/core/ExtensionAPI.js +5 -2
- package/src/sap/fe/core/ExtensionAPI.ts +7 -1
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +3 -3
- package/src/sap/fe/core/TemplateComponent.js +3 -3
- package/src/sap/fe/core/TemplateComponent.ts +2 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +6 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +8 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +159 -34
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +177 -39
- package/src/sap/fe/core/controllerextensions/SideEffects.js +7 -3
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +28 -17
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +35 -18
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +5 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +3 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +13 -9
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +13 -9
- package/src/sap/fe/core/converters/annotations/DataField.js +6 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +7 -4
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +6 -5
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +5 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +2 -2
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +8 -9
- package/src/sap/fe/core/helpers/DeleteHelper.ts +10 -8
- package/src/sap/fe/core/library.js +3 -7
- package/src/sap/fe/core/library.ts +5 -21
- package/src/sap/fe/core/messagebundle_da.properties +3 -3
- package/src/sap/fe/core/messagebundle_es.properties +1 -1
- package/src/sap/fe/core/messagebundle_fr.properties +9 -9
- package/src/sap/fe/core/messagebundle_hu.properties +1 -1
- package/src/sap/fe/core/messagebundle_id.properties +1 -1
- package/src/sap/fe/core/messagebundle_ja.properties +1 -1
- package/src/sap/fe/core/messagebundle_lv.properties +1 -1
- package/src/sap/fe/core/messagebundle_uk.properties +1 -1
- package/src/sap/fe/core/messagebundle_zh_CN.properties +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +17 -17
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +24 -29
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +13 -6
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +17 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
- package/src/sap/fe/core/templating/UIFormatters.js +2 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +1 -1
|
@@ -397,7 +397,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/library",
|
|
|
397
397
|
let promises = localPromise ?? [];
|
|
398
398
|
// trigger actions from side effects
|
|
399
399
|
if (this.sideEffects && !this.parameters.disableSideEffects === true) {
|
|
400
|
-
promises = promises.concat((this.sideEffects.triggerActions ?? []).map(async action => sideEffectsService.executeAction(action, context,
|
|
400
|
+
promises = promises.concat((this.sideEffects.triggerActions ?? []).map(async action => sideEffectsService.executeAction(action, context, {
|
|
401
|
+
submitBatch: false,
|
|
402
|
+
groupId
|
|
403
|
+
})), this.sideEffects.pathExpressions ? sideEffectsService.requestSideEffects(this.sideEffects.pathExpressions, context, groupId) : []);
|
|
401
404
|
try {
|
|
402
405
|
await Promise.all(promises);
|
|
403
406
|
if (this.sideEffects.pathExpressions) {
|
|
@@ -413,4 +416,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/library",
|
|
|
413
416
|
_exports = ODataOperation;
|
|
414
417
|
return _exports;
|
|
415
418
|
}, false);
|
|
416
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YU9wZXJhdGlvbiIsIm9wZXJhdGlvbiIsInBhcmFtZXRlcnMiLCJvcGVyYXRpb25Qcm9wZXJ0aWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzIiwiZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zIiwiYXBpR3JvdXBJZHNUb1N1Ym1pdCIsIlNldCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwib3BlcmF0aW9uUGFyYW1ldGVycyIsIm5ldmVyU3VibWl0dGVkIiwiZmFpbGVkQ29udGV4dHMiLCJvcGVyYXRpb25Qcm9taXNlcyIsImFjdGlvbk5hbWUiLCJhY3Rpb25IZWxwZXIiLCJnZXRBY3Rpb25OYW1lIiwiaXNBY3Rpb24iLCJhY3Rpb24iLCJzaWRlRWZmZWN0cyIsImFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJjb250ZXh0cyIsImlzRnVuY3Rpb24iLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJvRGF0YVN0cmljdEhhbmRsaW5nIiwiT0RhdGFTdHJpY3RIYW5kbGluZyIsImxhYmVsIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiZXZlbnRzIiwib25SZXNwb25zZSIsIm9uU3RyaWN0UmVzcG9uc2UiLCJvblZhbGlkYXRpb24iLCJvblN0cmljdFZhbGlkYXRpb24iLCJiaW5kIiwib25DYW5jZWwiLCJvblN0cmljdENhbmNlbCIsImRlZmluZU9wZXJhdGlvblBhcmFtZXRlcnMiLCJzZXRCaW5kaW5nUGFyYW1ldGVycyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZGVlcENsb25lIiwiZW5oYW5jZSRzZWxlY3QiLCJleGlzdGluZ1NlbGVjdCIsIiRzZWxlY3QiLCJzcGxpdCIsInJldHVybkVudGl0eVR5cGUiLCJtZXRhTW9kZWwiLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsIm1lc3NhZ2VzUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWVzc2FnZXNQYXRoIiwiZ2V0UGF0aCIsImlzU2FtZUVudGl0eSIsInJldHVybkNvbGxlY3Rpb24iLCJzb3VyY2VFbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImZpbmQiLCJwcm9wZXJ0eSIsIm5hbWUiLCJpbmNsdWRlcyIsIiQkaW5oZXJpdEV4cGFuZFNlbGVjdCIsImdldEFjdGlvblBhcmFtZXRlcnMiLCJjbGVhciIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiZGVzdHJveSIsImV4ZWN1dGUiLCJyZXN1bHQiLCJDaGFuZ2VTZXQiLCJleGVjdXRlQ2hhbmdlc2V0IiwiZXhlY3V0ZVNlcXVlbnRpYWxseSIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZXhlY3V0ZUltcG9ydCIsImVycm9yIiwiTG9nIiwib25PRGF0YVJlc3BvbnNlIiwib3BlcmF0aW9uQ29udGV4dCIsImJpbmRDb250ZXh0IiwicHVzaCIsInNldFBhcmFtZXRlcnNWYWx1ZSIsImdyb3VwSWQiLCJwcm9taXNlcyIsImludm9rZSIsImRlZmF1bHRTdWJtaXQiLCJhZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uIiwiY3VycmVudFByb21pc2VWYWx1ZXMiLCJhbGwiLCJtYXAiLCJjb250ZXh0IiwiZXhlY3V0ZUJvdW5kT3BlcmF0aW9uIiwibWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscyIsIm9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbiIsInJlZHVjZSIsInByb21pc2UiLCJpZCIsInJlc29sdmUiLCJmaW5hbEdyb3VwSWQiLCJnZXRVcGRhdGVHcm91cElkIiwib3BlcmF0aW9uUHJvbWlzZSIsImVuaGFuY2VTaWRlRWZmZWN0cyIsInJldHVybmVkQ29udGV4dCIsImdob3N0Q29udGV4dEJpbmRpbmdQcm90ZWN0aW9uIiwib3JpZ2luIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJzb21lIiwicGFnZVZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsIkluc3RhbmNlTWFuYWdlciIsImdldE9wZW5EaWFsb2dzIiwiZGlhbG9nIiwiZmlyc3RJdGVyYXRpb25SZXNvbHZlIiwiZmlyc3RJdGVyYXRpb25SZWplY3QiLCJzdHJpY3RIYW5kbGluZ1Byb21pc2UiLCJyZWplY3QiLCJpc0FQSU1vZGUiLCJhZGQiLCJzaWRlRWZmZWN0c0NvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib3BlcmF0aW9uSW52b2tlIiwiaWdub3JlRVRhZyIsImhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmciLCJzdWJtaXRCYXRjaCIsInJlcGxhY2VXaXRoUlZDIiwicmFjZSIsIm9uQWZ0ZXJPRGF0YUludm9rZSIsImJvdW5kQ29udGV4dCIsInJldHJpZ2dlckZhaWxlZENvbnRleHRzIiwiaW5kZXgiLCJmYWlsZWRDb250ZXh0Iiwic3VibWl0Iiwic2l6ZSIsIkFycmF5IiwiZnJvbSIsInZhbHVlcyIsInN1Ym1pdE9uTW9kZWwiLCJvbk9EYXRhU3VibWl0IiwiaXNTdHJpY3RDYW5jZWxlZCIsImlzQ2FuY2VsZWQiLCJkZWxldGUiLCJzdGFydHNXaXRoIiwic3VibWl0TW9kZSIsImdldE1hbmlmZXN0RW50cnkiLCJtb2RlbHMiLCJzZXR0aW5ncyIsImdyb3VwUHJvcGVydGllcyIsIlN1Ym1pdE1vZGUiLCJBdXRvIiwiRGlyZWN0IiwiZmlyc3RTdWJtaXQiLCJkZWZlcnJlZFN1Ym1pdCIsImRlZmF1bHRWYWx1ZXMiLCJwYXJhbWV0ZXJzVmFsdWVzIiwicGFyYW1ldGVyIiwidHlwZSIsInNldFBhcmFtZXRlciIsImxvY2FsUHJvbWlzZSIsInNpZGVFZmZlY3RzU2VydmljZSIsImRpc2FibGVTaWRlRWZmZWN0cyIsImNvbmNhdCIsInRyaWdnZXJBY3Rpb25zIiwiZXhlY3V0ZUFjdGlvbiIsInBhdGhFeHByZXNzaW9ucyIsIm9uUmVxdWVzdFNpZGVFZmZlY3RzIiwiaW5mbyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT0RhdGFPcGVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25JbXBvcnQsIEFjdGlvblBhcmFtZXRlciwgQWN0aW9uIGFzIEVkbUFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBTdWJtaXRNb2RlIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvU3VibWl0TW9kZVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uU2lkZUVmZmVjdHNUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQmluZENvbnRleHRQYXJhbWV0ZXJzIH0gZnJvbSBcIi4uL2RyYWZ0XCI7XG5pbXBvcnQgT0RhdGFTdHJpY3RIYW5kbGluZyBmcm9tIFwiLi9PRGF0YVN0cmljdEhhbmRsaW5nXCI7XG5pbXBvcnQgYWN0aW9uSGVscGVyIGZyb20gXCIuL2FjdGlvbkhlbHBlclwiO1xuXG5jb25zdCBJbnZvY2F0aW9uR3JvdXBpbmcgPSBGRUxpYnJhcnkuSW52b2NhdGlvbkdyb3VwaW5nO1xuXG5leHBvcnQgdHlwZSBPcGVyYXRpb25SZXN1bHQgPSB7XG5cdHJldHVybmVkQ29udGV4dD86IE9EYXRhVjRDb250ZXh0O1xuXHRib3VuZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT0RhdGFPcGVyYXRpb24ge1xuXHRwcml2YXRlIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nczogT0RhdGFDb250ZXh0QmluZGluZ1tdID0gW107XG5cblx0cHJpdmF0ZSByZWFkb25seSBmaXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYXBpR3JvdXBJZHNUb1N1Ym1pdDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBzaWRlRWZmZWN0czogQWN0aW9uU2lkZUVmZmVjdHNUeXBlIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nO1xuXG5cdHByaXZhdGUgYmluZGluZ1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0cHJpdmF0ZSBvcGVyYXRpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXSA9IFtdO1xuXG5cdHByaXZhdGUgbmV2ZXJTdWJtaXR0ZWQgPSB0cnVlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgb0RhdGFTdHJpY3RIYW5kbGluZzogT0RhdGFTdHJpY3RIYW5kbGluZyB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGZhaWxlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cblx0cHJpdmF0ZSBvcGVyYXRpb25Qcm9taXNlczogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+W10gPSBbXTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IG9wZXJhdGlvbjogRWRtQWN0aW9uIHwgQWN0aW9uSW1wb3J0LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nPzogYm9vbGVhbjtcblx0XHRcdGRpc2FibGVTaWRlRWZmZWN0cz86IGJvb2xlYW47XG5cdFx0XHRnaG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25TdHJpY3RWYWxpZGF0aW9uPzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgdmFsaWRhdGVkIGJ5IHRoZSBlbmQgdXNlclxuXHRcdFx0XHRvblN0cmljdENhbmNlbD86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiB0aGUgc3RyaWN0IGhhbmRsaW5nIGlzIGNhbmNlbGVkIGJ5IHRoZSBlbmQgdXNlclxuXHRcdFx0XHRvblN0cmljdFJlc3BvbnNlPzogKG1lc3NhZ2VzNDEyOiBNZXNzYWdlW10pID0+IHZvaWQ7IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIGJhY2tlbmQgcmV0dXJucyAgNDEyIG1lc3NhZ2VzIChzdHJpY3QgaGFuZGxpbmcpXG5cdFx0XHRcdG9uT0RhdGFSZXNwb25zZT86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiBhbGwgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gdGhlIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWRcblx0XHRcdFx0b25PRGF0YVN1Ym1pdD86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiB0aGUgYmF0Y2ggaXMgc3VibWl0dGVkIChyZXF1ZXN0IHNlbnQgdG8gdGhlIGJhY2sgZW5kKVxuXHRcdFx0XHRvbkFmdGVyT0RhdGFJbnZva2U/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gdGhlIHByb21pc2Ugb2YgaW52b2tlIG1ldGhvZCBvZiB0aGUgb0RhdGFDb250ZXh0QmluZGluZyBpcyByZXNvbHZlZFxuXHRcdFx0XHRvbkFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gZmlyc3QgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gdGhlIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWQgKGJlZm9yZSBzdHJpY3QgaGFuZGxpbmcgb3IgZmluYWwgcmVzcG9uc2UgaWYgbm8gNDEyIGFyZSByZWNlaXZlZClcblx0XHRcdFx0b25SZXF1ZXN0U2lkZUVmZmVjdHM/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gc2lkZUVmZmVjdHMgYXJlIHRyaWdnZXJlZFxuXHRcdFx0fTtcblx0XHRcdHBhcmFtZXRlcnNWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHR9LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgb3BlcmF0aW9uUHJvcGVydGllczoge1xuXHRcdFx0ZW5oYW5jZSRzZWxlY3Q/OiBib29sZWFuO1xuXHRcdFx0Z3JvdXBJZD86IHN0cmluZztcblx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzO1xuXHRcdFx0ZGVmZXJyZWRTdWJtaXQ/OiBib29sZWFuO1xuXHRcdFx0aWdub3JlRVRhZz86IGJvb2xlYW47XG5cdFx0XHRyZXBsYWNlV2l0aFJWQz86IGJvb2xlYW47XG5cdFx0fSA9IHt9XG5cdCkge1xuXHRcdHRoaXMuYWN0aW9uTmFtZSA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25OYW1lKGlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSA/IHRoaXMub3BlcmF0aW9uIDogdGhpcy5vcGVyYXRpb24uYWN0aW9uKTtcblxuXHRcdHRoaXMuc2lkZUVmZmVjdHMgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdC5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKHRoaXMuYWN0aW9uTmFtZSwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA/IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXSA6IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAoISh0aGlzLm9wZXJhdGlvbiBhcyBFZG1BY3Rpb24pLmlzRnVuY3Rpb24gJiYgdGhpcy5wYXJhbWV0ZXJzLmRpc2FibGVTdHJpY3RIYW5kbGluZyAhPT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nID0gbmV3IE9EYXRhU3RyaWN0SGFuZGxpbmcoe1xuXHRcdFx0XHRhcHBDb21wb25lbnQ6IHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQsXG5cdFx0XHRcdGNvbnRleHRzOiB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMsXG5cdFx0XHRcdGxhYmVsOiB0aGlzLnBhcmFtZXRlcnMubGFiZWwgPz8gdGhpcy5hY3Rpb25OYW1lLFxuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcsXG5cdFx0XHRcdGV2ZW50czoge1xuXHRcdFx0XHRcdG9uUmVzcG9uc2U6IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uU3RyaWN0UmVzcG9uc2UsXG5cdFx0XHRcdFx0b25WYWxpZGF0aW9uOiB0aGlzLm9uU3RyaWN0VmFsaWRhdGlvbi5iaW5kKHRoaXMpLFxuXHRcdFx0XHRcdG9uQ2FuY2VsOiB0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdENhbmNlbFxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcy5kZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzKCk7XG5cdFx0dGhpcy5zZXRCaW5kaW5nUGFyYW1ldGVycygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyBmb3IgdGhlIG9wZXJhdGlvbnMuXG5cdCAqL1xuXHRwcml2YXRlIHNldEJpbmRpbmdQYXJhbWV0ZXJzKCk6IHZvaWQge1xuXHRcdHRoaXMuYmluZGluZ1BhcmFtZXRlcnMgPSBkZWVwQ2xvbmUodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmJpbmRpbmdQYXJhbWV0ZXJzID8/IHt9KTtcblxuXHRcdGlmIChcblx0XHRcdGlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSAmJlxuXHRcdFx0IXRoaXMub3BlcmF0aW9uLmlzRnVuY3Rpb24gJiZcblx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggJiZcblx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5lbmhhbmNlJHNlbGVjdCA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgZXhpc3RpbmdTZWxlY3QgPSAodGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0IGFzIHN0cmluZyB8IHVuZGVmaW5lZCk/LnNwbGl0KFwiLFwiKSA/PyBbXTtcblx0XHRcdGNvbnN0IHJldHVybkVudGl0eVR5cGUgPSB0aGlzLm9wZXJhdGlvbi5yZXR1cm5FbnRpdHlUeXBlO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZXNQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWVzc2FnZXNQYXRoKG1ldGFNb2RlbCwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldFBhdGgoKSkhO1xuXHRcdFx0Y29uc3QgaXNTYW1lRW50aXR5ID1cblx0XHRcdFx0IXRoaXMub3BlcmF0aW9uLnJldHVybkNvbGxlY3Rpb24gJiYgISFyZXR1cm5FbnRpdHlUeXBlICYmIHRoaXMub3BlcmF0aW9uLnNvdXJjZUVudGl0eVR5cGUgPT09IHJldHVybkVudGl0eVR5cGU7XG5cdFx0XHRpZiAoaXNTYW1lRW50aXR5KSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQvKiBUaGUgZm9ybWVyIGxvZ2ljIGNoZWNrZWQgaWYgdGhlIG1lc3NhZ2VzUGF0aCBpcyBjb250YWluZWQgaW50byB0aGUgU2lkZUVmZmVjdHNcbiAgICAgICAgICAgICAgICAgICAgICAgYnV0IHRoZSBjaGVjayB3YXMgaW52YWxpZCAoYWx3YXlzIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgIFRvIGJlIGNvbXBsaWFudCB3aXRoIGZvcm1lciB2ZXJzaW9uIHdlIGRvbid0IGNoZWNrIHRoZSBTaWRlRWZmZWN0cy4uXG5cdFx0XHRcdFx0ICAgXG5cdFx0XHRcdFx0ICAgdGhpcy5zaWRlRWZmZWN0cyAmJlxuXHRcdFx0XHRcdCAgIG1lc3NhZ2VzUGF0aCAmJlxuXHRcdFx0XHRcdCAgICh0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucyA/PyBbXSkuc29tZSgoZXhwKSA9PiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIFttZXNzYWdlc1BhdGgsIFwiKlwiXS5pbmNsdWRlcyhleHApKSovXG5cdFx0XHRcdFx0bWVzc2FnZXNQYXRoICYmXG5cdFx0XHRcdFx0ISFyZXR1cm5FbnRpdHlUeXBlPy5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBtZXNzYWdlc1BhdGgpICYmXG5cdFx0XHRcdFx0IWV4aXN0aW5nU2VsZWN0LmluY2x1ZGVzKG1lc3NhZ2VzUGF0aClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID0gdGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0XG5cdFx0XHRcdFx0XHQ/IGAke3RoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdH0sJHttZXNzYWdlc1BhdGh9YFxuXHRcdFx0XHRcdFx0OiBtZXNzYWdlc1BhdGg7XG5cblx0XHRcdFx0XHR0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzLiQkaW5oZXJpdEV4cGFuZFNlbGVjdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgb3BlcmF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBkZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzKCk6IHZvaWQge1xuXHRcdGlmICghaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pKSB7XG5cdFx0XHR0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMgPSB0aGlzLm9wZXJhdGlvbi5hY3Rpb24ucGFyYW1ldGVycztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9SZW1vdmUgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyBmcm9tIHRoZSBwYXJhbWV0ZXJzIGxpc3Rcblx0XHRcdHRoaXMub3BlcmF0aW9uUGFyYW1ldGVycyA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25QYXJhbWV0ZXJzKHRoaXMub3BlcmF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBvcGVyYXRpb25Db250ZXh0QmluZGluZyBvZiB0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncykge1xuXHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdH1cblx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuY2xlYXIoKTtcblx0XHR0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncyA9IFtdO1xuXHRcdHRoaXMuZmFpbGVkQ29udGV4dHMgPSBbXTtcblx0XHR0aGlzLm9wZXJhdGlvblByb21pc2VzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0YXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdGxldCByZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgKHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IHRoaXMuZXhlY3V0ZUNoYW5nZXNldCgpXG5cdFx0XHRcdFx0OiB0aGlzLmV4ZWN1dGVTZXF1ZW50aWFsbHkoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW3RoaXMuZXhlY3V0ZUltcG9ydCgpXSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBvcGVyYXRpb24gXCIgKyB0aGlzLmFjdGlvbk5hbWUsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVJlc3BvbnNlPy4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgaW1wb3J0IG9wZXJhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlSW1wb3J0KCk6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PiB7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQ29udGV4dCA9IHRoaXMucGFyYW1ldGVycy5tb2RlbC5iaW5kQ29udGV4dChgLyR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHR0aGlzLnNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBncm91cElkID0gdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQgPz8gXCJhY3Rpb25JbXBvcnRcIjtcblx0XHRjb25zdCBwcm9taXNlcyA9IFt0aGlzLmludm9rZShvcGVyYXRpb25Db250ZXh0LCBncm91cElkKV07XG5cblx0XHR0aGlzLmRlZmF1bHRTdWJtaXQoZ3JvdXBJZCk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHRhd2FpdCB0aGlzLmFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTtcblx0XHRjb25zdCBjdXJyZW50UHJvbWlzZVZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRyZXR1cm4gY3VycmVudFByb21pc2VWYWx1ZXNbMF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbnMgb24gb25lIGNoYW5nZXNldC5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvbnNcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZXhlY3V0ZUNoYW5nZXNldCgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKGFzeW5jIChjb250ZXh0KSA9PlxuXHRcdFx0dGhpcy5leGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dCwgdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQpXG5cdFx0KTtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMpO1xuXHRcdGF3YWl0IHRoaXMuYWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbigpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5tYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzKCk7XG5cdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uPy4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgb3BlcmF0aW9ucyBzZXF1ZW50aWFsbHkuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25zXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGV4ZWN1dGVTZXF1ZW50aWFsbHkoKTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W10+IHtcblx0XHQvLyBzZXJpYWxpemF0aW9uOiBleGVjdXRlQm91bmRPcGVyYXRpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdGF3YWl0IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRhd2FpdCBwcm9taXNlO1xuXHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGNvbnRleHQsIHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkID8/IGBhcGlNb2RlJHtpZCArIDF9YCkpO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHR9LCBQcm9taXNlLnJlc29sdmUoKSk7XG5cdFx0YXdhaXQgdGhpcy5hZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLm9wZXJhdGlvblByb21pc2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgYm91bmQgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgYm91bmQgY29udGV4dFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dDogT0RhdGFWNENvbnRleHQsIGdyb3VwSWQ/OiBzdHJpbmcpOiBQcm9taXNlPE9wZXJhdGlvblJlc3VsdD4ge1xuXHRcdGNvbnN0IG9wZXJhdGlvbkNvbnRleHQgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuYmluZENvbnRleHQoYCR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCwgY29udGV4dCwgdGhpcy5iaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0dGhpcy5zZXRQYXJhbWV0ZXJzVmFsdWUob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0Y29uc3QgZmluYWxHcm91cElkID0gZ3JvdXBJZCA/PyBvcGVyYXRpb25Db250ZXh0LmdldFVwZGF0ZUdyb3VwSWQoKTtcblx0XHRjb25zdCBvcGVyYXRpb25Qcm9taXNlID0gdGhpcy5pbnZva2Uob3BlcmF0aW9uQ29udGV4dCwgZmluYWxHcm91cElkKTtcblx0XHRwcm9taXNlcy5wdXNoKG9wZXJhdGlvblByb21pc2UpO1xuXHRcdHRoaXMuZGVmYXVsdFN1Ym1pdChmaW5hbEdyb3VwSWQpO1xuXHRcdFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cdFx0cmV0dXJuIG9wZXJhdGlvblByb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRW5oYW5jZXMgdGhlIHNpZGUgZWZmZWN0cyBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqXG5cdCAqIFdoZW4gYSBuZXcgZW50aXR5IGlzIGNyZWF0ZWQgdXNpbmcgYSBEYXRhRmllbGRGb3JBY3Rpb24sIGEgbmV3XG5cdCAqIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgY3JlYXRlZCB0byBleGVjdXRlIHRoZSBhY3Rpb24uIEJ5IGRlZmF1bHQsIHRoaXNcblx0ICogb0RhdGFDb250ZXh0QmluZGluZyBpcyByZWxhdGl2ZSB0byB0aGUgT2RhdGFMaXN0QmluZGluZyBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEJlY2F1c2Ugb2YgdGhpcyBkZXBlbmRlbmN5LCB3aGVuIGEgU2lkZUVmZmVjdHMgaXMgZXhlY3V0ZWQgb24gdGhlXG5cdCAqIGNvbnRleHQgaW50byB0aGUgT2RhdGFMaXN0QmluZGluZyB3aGVyZSB0aGUgb0RhdGFDb250ZXh0QmluZGluZyB3YXMgYm91bmQsIHRoaXMgU2lkZUVmZmVjdHMgaXMgYWxzbyB0cmlnZ2VyZWQgb24gdGhpc1xuXHQgKiBvRGF0YUNvbnRleHRCaW5kaW5nLiBXZSBkb24ndCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGVcblx0ICogb0RhdGFDb250ZXh0QmluZGluZy4gSXQgbWVhbnMgZXZlbiBpZiB0aGUgZHJhZnQgcmVsYXRlZCB0byB0aGUgYWN0aW9uXG5cdCAqIGlzIHJlbW92ZWQsIHRoZSBvZGF0YUNvbnRleHRCaW5kaW5nIGlzIHN0aWxsIHRoZXJlLCBzbyBpZiBhIFNpZGVFZmZlY3RzXG5cdCAqIGlzIGV4ZWN1dGVkIG9uIHRoZSBzb3VyY2UgdGFyZ2V0IGludG8gb0RhdGFDb250ZXh0QmluZGluZywgYW4gZXJyb3IgZnJvbSB0aGUgYmFjayBlbmQgd2lsbCBiZVxuXHQgKiByZWNlaXZlZCBiZWNhdXNlIHdlIGFzayB0byByZWZyZXNoIGEgcHJvcGVydHkgb24gYW4gdW5rbm93biBlbnRpdHkuXG5cdCAqXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmVxdWVzdGVkIG9ubHkgaWYgdGhlIHBhZ2UgaXMgc3RpbGwgb3Blbi5cblx0ICogVGhpcyBhdm9pZHMgZ2VuZXJhdGluZyBpc3N1ZXMgd2l0aCBnaG9zdCBvRGF0YUNvbnRleHRCaW5kaW5nIGxpbmtlZCB0byBkZXN0cm95ZWQgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIHJldHVybmVkQ29udGV4dCBUaGUgcmV0dXJuZWQgY29udGV4dCBvZiB0aGlzIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBlbmhhbmNlU2lkZUVmZmVjdHMob3BlcmF0aW9uQ29udGV4dEJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcsIHJldHVybmVkQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAocmV0dXJuZWRDb250ZXh0ICYmIHRoaXMucGFyYW1ldGVycy5naG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbiA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudDtcblx0XHRcdGNvbnN0IG9yaWdpbiA9IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nKTtcblx0XHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0Ly8gV2UgY2hlY2sgaWYgb25lIG9mIHRoZSBwYWdlcyBvciBhbiBvcGVuIGRpYWxvZyB1c2VzIHRoZSByZXR1cm5lZCBjb250ZXh0LlxuXHRcdFx0XHQvLyBJZiBub3QsIHNpZGUgZWZmZWN0cyBhcmUgbm90IHJlcXVlc3RlZC5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdFx0LnNvbWUoKHBhZ2VWaWV3OiBWaWV3KSA9PiBwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSByZXR1cm5lZENvbnRleHQpIHx8XG5cdFx0XHRcdFx0SW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCkuc29tZSgoZGlhbG9nKSA9PiBkaWFsb2cuZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gcmV0dXJuZWRDb250ZXh0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludm9rZXMgdGhlIG9wZXJhdGlvbiBvbiB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBncm91cElkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGludm9rZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRsZXQgcmV0dXJuZWRDb250ZXh0O1xuXHRcdGxldCBmaXJzdEl0ZXJhdGlvblJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRsZXQgZmlyc3RJdGVyYXRpb25SZWplY3QhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTx1bmtub3duPihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmaXJzdEl0ZXJhdGlvblJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0dGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMucHVzaChzdHJpY3RIYW5kbGluZ1Byb21pc2UpO1xuXHRcdGlmIChncm91cElkICYmIHRoaXMuaXNBUElNb2RlKGdyb3VwSWQpKSB7XG5cdFx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuYWRkKGdyb3VwSWQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNDb250ZXh0ID1cblx0XHRcdFx0KG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkgPz8gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvcGVyYXRpb25JbnZva2UgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5pbnZva2UoXG5cdFx0XHRcdGdyb3VwSWQsXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5pZ25vcmVFVGFnLFxuXHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmc/LmhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmcuYmluZChcblx0XHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmcsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzQ29udGV4dCwgZ3JvdXBJZCwgW10pO1xuXHRcdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSxcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLnJlcGxhY2VXaXRoUlZDXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNDb250ZXh0LCBncm91cElkLCBbb3BlcmF0aW9uSW52b2tlXSk7XG5cdFx0XHRhd2FpdCBQcm9taXNlLnJhY2UoW29wZXJhdGlvbkludm9rZSwgc3RyaWN0SGFuZGxpbmdQcm9taXNlXSk7XG5cblx0XHRcdHJldHVybmVkQ29udGV4dCA9IGF3YWl0IG9wZXJhdGlvbkludm9rZTtcblx0XHRcdHRoaXMuZW5oYW5jZVNpZGVFZmZlY3RzKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLCByZXR1cm5lZENvbnRleHQpO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlKCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGZpcnN0SXRlcmF0aW9uUmVqZWN0KGVycm9yKTtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5nZXRDb250ZXh0KCk7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHR0aGlzLmZhaWxlZENvbnRleHRzLnB1c2goY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhSW52b2tlPy4ob3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsIGdyb3VwSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXR1cm5lZENvbnRleHQsXG5cdFx0XHRib3VuZENvbnRleHQ6IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgTWFuYWdlcyB0aGUgc3RyaWN0IGhhbmRsaW5nIHZhbGlkYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIG9uU3RyaWN0VmFsaWRhdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdFZhbGlkYXRpb24/LigpO1xuXHRcdHRoaXMucmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgVHJpZ2dlcnMgdGhlIGZhaWxlZCBvcGVyYXRpb25zIGluIGNhc2Ugb2Ygc3RyaWN0IGhhbmRsaW5nLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgbmV3IG9wZXJhdGlvbnMgYXJlIHJlc29sdmVkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJldHJpZ2dlckZhaWxlZENvbnRleHRzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vUmV0cnkgdGhlIGFjdGlvbiBleGVjdXRpb24gaW4gY2FzZSBvZiBzdHJpY3QgaGFuZGxpbmcgYW5kIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmYWlsZWQgY29udGV4dCAoZ2l2ZSBpdCBhbm90aGVyIHRyeSB0byBzdWNjZWVkKVxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nICE9PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSB7XG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0Zm9yIChjb25zdCBmYWlsZWRDb250ZXh0IG9mIHRoaXMuZmFpbGVkQ29udGV4dHMpIHtcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGZhaWxlZENvbnRleHQsIGBhcGlSZXRyaWdnZXIke2luZGV4ICsgMX1gKSk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1Ym1pdHMgdGhlIGJhdGNoIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLm5ldmVyU3VibWl0dGVkIHx8IHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5zaXplID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgZ3JvdXBJZCBvZiBBcnJheS5mcm9tKHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC52YWx1ZXMoKSkpIHtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogIElzIHN0cmljdCBoYW5kbGluZyBjYW5jZWxlZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCBpcyBjYW5jZWxlZCwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqL1xuXHRwdWJsaWMgaXNTdHJpY3RDYW5jZWxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5pc0NhbmNlbGVkKCkgPz8gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogU3VibWl0cyB0aGUgYmF0Y2ggYXQgdGhlIG1vZGVsIGxldmVsIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIHN1Ym1pdE9uTW9kZWwoZ3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5kZWxldGUoZ3JvdXBJZCk7XG5cdH1cblxuXHQvKipcblx0ICogSXMgdGhlIFN1Ym1pdE1vZGUgb2YgdGhlIGdyb3VwSWQgc2V0IHRvIEFQSS5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIFN1Ym1pdE1vZGUgaXMgc2V0IHRvIEFQSSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGlzQVBJTW9kZShncm91cElkPzogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFncm91cElkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChncm91cElkLnN0YXJ0c1dpdGgoXCIkYXV0b1wiKSB8fCBncm91cElkLnN0YXJ0c1dpdGgoXCIkZGlyZWN0XCIpIHx8IGdyb3VwSWQuc3RhcnRzV2l0aChcIiRzaW5nbGVcIikpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3VibWl0TW9kZSA9IChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIik/Lm1vZGVsc1tcIlwiXT8uc2V0dGluZ3MgYXNcblx0XHRcdFx0fCB7IGdyb3VwUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHsgc3VibWl0OiBTdWJtaXRNb2RlIH0+IH1cblx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHQpPy5ncm91cFByb3BlcnRpZXM/Lltncm91cElkXT8uc3VibWl0O1xuXG5cdFx0aWYgKHN1Ym1pdE1vZGUgPT09IHVuZGVmaW5lZCB8fCBbU3VibWl0TW9kZS5BdXRvLCBTdWJtaXRNb2RlLkRpcmVjdF0uaW5jbHVkZXMoc3VibWl0TW9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgc3VibWl0IG9mIHRoZSBvcGVyYXRpb24gaWYgdGhlIHN1Ym1pdE1vZGUgaXMgb24gQVBJIGFuZCBkZWZlcnJlZFN1Ym1pdCBpcyBub3Qgc2V0IHRvIHRydWVcblx0ICogVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbC5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIGRlZmF1bHRTdWJtaXQoZ3JvdXBJZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0U3VibWl0ID0gdGhpcy5uZXZlclN1Ym1pdHRlZDtcblx0XHRjb25zdCBpc0FQSU1vZGUgPSB0aGlzLmlzQVBJTW9kZShncm91cElkKTtcblx0XHRpZiAoIWlzQVBJTW9kZSkge1xuXHRcdFx0Ly8gVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbFxuXHRcdFx0dGhpcy5uZXZlclN1Ym1pdHRlZCA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmRlZmVycmVkU3VibWl0ICE9PSB0cnVlICYmIGdyb3VwSWQpIHtcblx0XHRcdHRoaXMubmV2ZXJTdWJtaXR0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0aWYgKGZpcnN0U3VibWl0ICYmICF0aGlzLm5ldmVyU3VibWl0dGVkKSB7XG5cdFx0XHQvL1RyaWdnZXIgdGhlIGNhbGxiYWNrIG9ubHkgb25jZVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqICBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqL1xuXHRwcml2YXRlIHNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXMgPz8ge307XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiB0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHRpZiAoIWRlZmF1bHRWYWx1ZXNbbmFtZV0pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKHBhcmFtZXRlci50eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc1tuYW1lXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuc2V0UGFyYW1ldGVyKG5hbWUsIGRlZmF1bHRWYWx1ZXNbbmFtZV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3RzIGZvciB0aGUgYWN0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSBncm91cElkICBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHBhcmFtIGxvY2FsUHJvbWlzZSBUaGUgcHJvbWlzZSBvZiB0aGUgaW52b2tlZCBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIHNpZGUgZWZmZWN0XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJlcXVlc3RTaWRlRWZmZWN0cyhjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgZ3JvdXBJZDogc3RyaW5nLCBsb2NhbFByb21pc2U/OiBQcm9taXNlPHVua25vd24+W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGxldCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gbG9jYWxQcm9taXNlID8/IFtdO1xuXHRcdC8vIHRyaWdnZXIgYWN0aW9ucyBmcm9tIHNpZGUgZWZmZWN0c1xuXHRcdGlmICh0aGlzLnNpZGVFZmZlY3RzICYmICF0aGlzLnBhcmFtZXRlcnMuZGlzYWJsZVNpZGVFZmZlY3RzID09PSB0cnVlKSB7XG5cdFx0XHRwcm9taXNlcyA9IHByb21pc2VzLmNvbmNhdChcblx0XHRcdFx0KHRoaXMuc2lkZUVmZmVjdHMudHJpZ2dlckFjdGlvbnMgPz8gW10pLm1hcChhc3luYyAoYWN0aW9uKSA9PiBzaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbihhY3Rpb24sIGNvbnRleHQsIGdyb3VwSWQpKSxcblx0XHRcdFx0dGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnNcblx0XHRcdFx0XHQ/IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHModGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnMsIGNvbnRleHQsIGdyb3VwSWQpXG5cdFx0XHRcdFx0OiBbXVxuXHRcdFx0KTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdFx0aWYgKHRoaXMuc2lkZUVmZmVjdHMucGF0aEV4cHJlc3Npb25zKSB7XG5cdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25SZXF1ZXN0U2lkZUVmZmVjdHM/Lih0aGlzLnNpZGVFZmZlY3RzLCB0aGlzLm9wZXJhdGlvbiwgcHJvbWlzZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkVycm9yIHdoaWxlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzIGZvciB0aGUgb3BlcmF0aW9uIFwiICsgdGhpcy5hY3Rpb25OYW1lLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUFtQkEsTUFBTUEsa0JBQWtCLEdBQUdDLFNBQVMsQ0FBQ0Qsa0JBQWtCO0VBQUMsSUFPbkNFLGNBQWM7SUF1QmxDLFNBQUFBLGVBQ2tCQyxTQUFtQyxFQUNuQ0MsVUFvQmhCLEVBU0E7TUFBQSxJQVJnQkMsbUJBT2hCLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztNQUFBLEtBcERDRyx3QkFBd0IsR0FBMEIsRUFBRTtNQUFBLEtBRTNDQyx3QkFBd0IsR0FBdUIsRUFBRTtNQUFBLEtBRWpEQyxtQkFBbUIsR0FBZ0IsSUFBSUMsR0FBRyxDQUFDLENBQUM7TUFBQSxLQU1yREMsaUJBQWlCLEdBQTRCLENBQUMsQ0FBQztNQUFBLEtBRS9DQyxtQkFBbUIsR0FBc0IsRUFBRTtNQUFBLEtBRTNDQyxjQUFjLEdBQUcsSUFBSTtNQUFBLEtBSXJCQyxjQUFjLEdBQXFCLEVBQUU7TUFBQSxLQUVyQ0MsaUJBQWlCLEdBQStCLEVBQUU7TUFBQSxLQUd4Q2QsU0FBbUMsR0FBbkNBLFNBQW1DO01BQUEsS0FDbkNDLFVBb0JoQixHQXBCZ0JBLFVBb0JoQjtNQUFBLEtBQ2dCQyxtQkFPaEIsR0FQZ0JBLG1CQU9oQjtNQUVELElBQUksQ0FBQ2EsVUFBVSxHQUFHQyxZQUFZLENBQUNDLGFBQWEsQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQ2xCLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQ0EsU0FBUyxHQUFHLElBQUksQ0FBQ0EsU0FBUyxDQUFDbUIsTUFB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
|
|
419
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YU9wZXJhdGlvbiIsIm9wZXJhdGlvbiIsInBhcmFtZXRlcnMiLCJvcGVyYXRpb25Qcm9wZXJ0aWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzIiwiZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zIiwiYXBpR3JvdXBJZHNUb1N1Ym1pdCIsIlNldCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwib3BlcmF0aW9uUGFyYW1ldGVycyIsIm5ldmVyU3VibWl0dGVkIiwiZmFpbGVkQ29udGV4dHMiLCJvcGVyYXRpb25Qcm9taXNlcyIsImFjdGlvbk5hbWUiLCJhY3Rpb25IZWxwZXIiLCJnZXRBY3Rpb25OYW1lIiwiaXNBY3Rpb24iLCJhY3Rpb24iLCJzaWRlRWZmZWN0cyIsImFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJjb250ZXh0cyIsImlzRnVuY3Rpb24iLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJvRGF0YVN0cmljdEhhbmRsaW5nIiwiT0RhdGFTdHJpY3RIYW5kbGluZyIsImxhYmVsIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiZXZlbnRzIiwib25SZXNwb25zZSIsIm9uU3RyaWN0UmVzcG9uc2UiLCJvblZhbGlkYXRpb24iLCJvblN0cmljdFZhbGlkYXRpb24iLCJiaW5kIiwib25DYW5jZWwiLCJvblN0cmljdENhbmNlbCIsImRlZmluZU9wZXJhdGlvblBhcmFtZXRlcnMiLCJzZXRCaW5kaW5nUGFyYW1ldGVycyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZGVlcENsb25lIiwiZW5oYW5jZSRzZWxlY3QiLCJleGlzdGluZ1NlbGVjdCIsIiRzZWxlY3QiLCJzcGxpdCIsInJldHVybkVudGl0eVR5cGUiLCJtZXRhTW9kZWwiLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsIm1lc3NhZ2VzUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWVzc2FnZXNQYXRoIiwiZ2V0UGF0aCIsImlzU2FtZUVudGl0eSIsInJldHVybkNvbGxlY3Rpb24iLCJzb3VyY2VFbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImZpbmQiLCJwcm9wZXJ0eSIsIm5hbWUiLCJpbmNsdWRlcyIsIiQkaW5oZXJpdEV4cGFuZFNlbGVjdCIsImdldEFjdGlvblBhcmFtZXRlcnMiLCJjbGVhciIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiZGVzdHJveSIsImV4ZWN1dGUiLCJyZXN1bHQiLCJDaGFuZ2VTZXQiLCJleGVjdXRlQ2hhbmdlc2V0IiwiZXhlY3V0ZVNlcXVlbnRpYWxseSIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZXhlY3V0ZUltcG9ydCIsImVycm9yIiwiTG9nIiwib25PRGF0YVJlc3BvbnNlIiwib3BlcmF0aW9uQ29udGV4dCIsImJpbmRDb250ZXh0IiwicHVzaCIsInNldFBhcmFtZXRlcnNWYWx1ZSIsImdyb3VwSWQiLCJwcm9taXNlcyIsImludm9rZSIsImRlZmF1bHRTdWJtaXQiLCJhZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uIiwiY3VycmVudFByb21pc2VWYWx1ZXMiLCJhbGwiLCJtYXAiLCJjb250ZXh0IiwiZXhlY3V0ZUJvdW5kT3BlcmF0aW9uIiwibWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscyIsIm9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbiIsInJlZHVjZSIsInByb21pc2UiLCJpZCIsInJlc29sdmUiLCJmaW5hbEdyb3VwSWQiLCJnZXRVcGRhdGVHcm91cElkIiwib3BlcmF0aW9uUHJvbWlzZSIsImVuaGFuY2VTaWRlRWZmZWN0cyIsInJldHVybmVkQ29udGV4dCIsImdob3N0Q29udGV4dEJpbmRpbmdQcm90ZWN0aW9uIiwib3JpZ2luIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJzb21lIiwicGFnZVZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsIkluc3RhbmNlTWFuYWdlciIsImdldE9wZW5EaWFsb2dzIiwiZGlhbG9nIiwiZmlyc3RJdGVyYXRpb25SZXNvbHZlIiwiZmlyc3RJdGVyYXRpb25SZWplY3QiLCJzdHJpY3RIYW5kbGluZ1Byb21pc2UiLCJyZWplY3QiLCJpc0FQSU1vZGUiLCJhZGQiLCJzaWRlRWZmZWN0c0NvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib3BlcmF0aW9uSW52b2tlIiwiaWdub3JlRVRhZyIsImhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmciLCJzdWJtaXRCYXRjaCIsInJlcGxhY2VXaXRoUlZDIiwicmFjZSIsIm9uQWZ0ZXJPRGF0YUludm9rZSIsImJvdW5kQ29udGV4dCIsInJldHJpZ2dlckZhaWxlZENvbnRleHRzIiwiaW5kZXgiLCJmYWlsZWRDb250ZXh0Iiwic3VibWl0Iiwic2l6ZSIsIkFycmF5IiwiZnJvbSIsInZhbHVlcyIsInN1Ym1pdE9uTW9kZWwiLCJvbk9EYXRhU3VibWl0IiwiaXNTdHJpY3RDYW5jZWxlZCIsImlzQ2FuY2VsZWQiLCJkZWxldGUiLCJzdGFydHNXaXRoIiwic3VibWl0TW9kZSIsImdldE1hbmlmZXN0RW50cnkiLCJtb2RlbHMiLCJzZXR0aW5ncyIsImdyb3VwUHJvcGVydGllcyIsIlN1Ym1pdE1vZGUiLCJBdXRvIiwiRGlyZWN0IiwiZmlyc3RTdWJtaXQiLCJkZWZlcnJlZFN1Ym1pdCIsImRlZmF1bHRWYWx1ZXMiLCJwYXJhbWV0ZXJzVmFsdWVzIiwicGFyYW1ldGVyIiwidHlwZSIsInNldFBhcmFtZXRlciIsImxvY2FsUHJvbWlzZSIsInNpZGVFZmZlY3RzU2VydmljZSIsImRpc2FibGVTaWRlRWZmZWN0cyIsImNvbmNhdCIsInRyaWdnZXJBY3Rpb25zIiwiZXhlY3V0ZUFjdGlvbiIsInBhdGhFeHByZXNzaW9ucyIsIm9uUmVxdWVzdFNpZGVFZmZlY3RzIiwiaW5mbyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT0RhdGFPcGVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25JbXBvcnQsIEFjdGlvblBhcmFtZXRlciwgQWN0aW9uIGFzIEVkbUFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBTdWJtaXRNb2RlIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvU3VibWl0TW9kZVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uU2lkZUVmZmVjdHNUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQmluZENvbnRleHRQYXJhbWV0ZXJzIH0gZnJvbSBcIi4uL2RyYWZ0XCI7XG5pbXBvcnQgT0RhdGFTdHJpY3RIYW5kbGluZyBmcm9tIFwiLi9PRGF0YVN0cmljdEhhbmRsaW5nXCI7XG5pbXBvcnQgYWN0aW9uSGVscGVyIGZyb20gXCIuL2FjdGlvbkhlbHBlclwiO1xuXG5jb25zdCBJbnZvY2F0aW9uR3JvdXBpbmcgPSBGRUxpYnJhcnkuSW52b2NhdGlvbkdyb3VwaW5nO1xuXG5leHBvcnQgdHlwZSBPcGVyYXRpb25SZXN1bHQgPSB7XG5cdHJldHVybmVkQ29udGV4dD86IE9EYXRhVjRDb250ZXh0O1xuXHRib3VuZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT0RhdGFPcGVyYXRpb24ge1xuXHRwcml2YXRlIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nczogT0RhdGFDb250ZXh0QmluZGluZ1tdID0gW107XG5cblx0cHJpdmF0ZSByZWFkb25seSBmaXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYXBpR3JvdXBJZHNUb1N1Ym1pdDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBzaWRlRWZmZWN0czogQWN0aW9uU2lkZUVmZmVjdHNUeXBlIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nO1xuXG5cdHByaXZhdGUgYmluZGluZ1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0cHJpdmF0ZSBvcGVyYXRpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXSA9IFtdO1xuXG5cdHByaXZhdGUgbmV2ZXJTdWJtaXR0ZWQgPSB0cnVlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgb0RhdGFTdHJpY3RIYW5kbGluZzogT0RhdGFTdHJpY3RIYW5kbGluZyB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGZhaWxlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cblx0cHJpdmF0ZSBvcGVyYXRpb25Qcm9taXNlczogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+W10gPSBbXTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IG9wZXJhdGlvbjogRWRtQWN0aW9uIHwgQWN0aW9uSW1wb3J0LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nPzogYm9vbGVhbjtcblx0XHRcdGRpc2FibGVTaWRlRWZmZWN0cz86IGJvb2xlYW47XG5cdFx0XHRnaG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25TdHJpY3RWYWxpZGF0aW9uPzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgdmFsaWRhdGVkIGJ5IHRoZSBlbmQgdXNlclxuXHRcdFx0XHRvblN0cmljdENhbmNlbD86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiB0aGUgc3RyaWN0IGhhbmRsaW5nIGlzIGNhbmNlbGVkIGJ5IHRoZSBlbmQgdXNlclxuXHRcdFx0XHRvblN0cmljdFJlc3BvbnNlPzogKG1lc3NhZ2VzNDEyOiBNZXNzYWdlW10pID0+IHZvaWQ7IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIGJhY2tlbmQgcmV0dXJucyAgNDEyIG1lc3NhZ2VzIChzdHJpY3QgaGFuZGxpbmcpXG5cdFx0XHRcdG9uT0RhdGFSZXNwb25zZT86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiBhbGwgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gdGhlIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWRcblx0XHRcdFx0b25PRGF0YVN1Ym1pdD86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiB0aGUgYmF0Y2ggaXMgc3VibWl0dGVkIChyZXF1ZXN0IHNlbnQgdG8gdGhlIGJhY2sgZW5kKVxuXHRcdFx0XHRvbkFmdGVyT0RhdGFJbnZva2U/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gdGhlIHByb21pc2Ugb2YgaW52b2tlIG1ldGhvZCBvZiB0aGUgb0RhdGFDb250ZXh0QmluZGluZyBpcyByZXNvbHZlZFxuXHRcdFx0XHRvbkFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gZmlyc3QgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gdGhlIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWQgKGJlZm9yZSBzdHJpY3QgaGFuZGxpbmcgb3IgZmluYWwgcmVzcG9uc2UgaWYgbm8gNDEyIGFyZSByZWNlaXZlZClcblx0XHRcdFx0b25SZXF1ZXN0U2lkZUVmZmVjdHM/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gc2lkZUVmZmVjdHMgYXJlIHRyaWdnZXJlZFxuXHRcdFx0fTtcblx0XHRcdHBhcmFtZXRlcnNWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHR9LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgb3BlcmF0aW9uUHJvcGVydGllczoge1xuXHRcdFx0ZW5oYW5jZSRzZWxlY3Q/OiBib29sZWFuO1xuXHRcdFx0Z3JvdXBJZD86IHN0cmluZztcblx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzO1xuXHRcdFx0ZGVmZXJyZWRTdWJtaXQ/OiBib29sZWFuO1xuXHRcdFx0aWdub3JlRVRhZz86IGJvb2xlYW47XG5cdFx0XHRyZXBsYWNlV2l0aFJWQz86IGJvb2xlYW47XG5cdFx0fSA9IHt9XG5cdCkge1xuXHRcdHRoaXMuYWN0aW9uTmFtZSA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25OYW1lKGlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSA/IHRoaXMub3BlcmF0aW9uIDogdGhpcy5vcGVyYXRpb24uYWN0aW9uKTtcblxuXHRcdHRoaXMuc2lkZUVmZmVjdHMgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdC5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKHRoaXMuYWN0aW9uTmFtZSwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA/IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXSA6IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAoISh0aGlzLm9wZXJhdGlvbiBhcyBFZG1BY3Rpb24pLmlzRnVuY3Rpb24gJiYgdGhpcy5wYXJhbWV0ZXJzLmRpc2FibGVTdHJpY3RIYW5kbGluZyAhPT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nID0gbmV3IE9EYXRhU3RyaWN0SGFuZGxpbmcoe1xuXHRcdFx0XHRhcHBDb21wb25lbnQ6IHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQsXG5cdFx0XHRcdGNvbnRleHRzOiB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMsXG5cdFx0XHRcdGxhYmVsOiB0aGlzLnBhcmFtZXRlcnMubGFiZWwgPz8gdGhpcy5hY3Rpb25OYW1lLFxuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcsXG5cdFx0XHRcdGV2ZW50czoge1xuXHRcdFx0XHRcdG9uUmVzcG9uc2U6IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uU3RyaWN0UmVzcG9uc2UsXG5cdFx0XHRcdFx0b25WYWxpZGF0aW9uOiB0aGlzLm9uU3RyaWN0VmFsaWRhdGlvbi5iaW5kKHRoaXMpLFxuXHRcdFx0XHRcdG9uQ2FuY2VsOiB0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdENhbmNlbFxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcy5kZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzKCk7XG5cdFx0dGhpcy5zZXRCaW5kaW5nUGFyYW1ldGVycygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyBmb3IgdGhlIG9wZXJhdGlvbnMuXG5cdCAqL1xuXHRwcml2YXRlIHNldEJpbmRpbmdQYXJhbWV0ZXJzKCk6IHZvaWQge1xuXHRcdHRoaXMuYmluZGluZ1BhcmFtZXRlcnMgPSBkZWVwQ2xvbmUodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmJpbmRpbmdQYXJhbWV0ZXJzID8/IHt9KTtcblxuXHRcdGlmIChcblx0XHRcdGlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSAmJlxuXHRcdFx0IXRoaXMub3BlcmF0aW9uLmlzRnVuY3Rpb24gJiZcblx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggJiZcblx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5lbmhhbmNlJHNlbGVjdCA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgZXhpc3RpbmdTZWxlY3QgPSAodGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0IGFzIHN0cmluZyB8IHVuZGVmaW5lZCk/LnNwbGl0KFwiLFwiKSA/PyBbXTtcblx0XHRcdGNvbnN0IHJldHVybkVudGl0eVR5cGUgPSB0aGlzLm9wZXJhdGlvbi5yZXR1cm5FbnRpdHlUeXBlO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZXNQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWVzc2FnZXNQYXRoKG1ldGFNb2RlbCwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldFBhdGgoKSkhO1xuXHRcdFx0Y29uc3QgaXNTYW1lRW50aXR5ID1cblx0XHRcdFx0IXRoaXMub3BlcmF0aW9uLnJldHVybkNvbGxlY3Rpb24gJiYgISFyZXR1cm5FbnRpdHlUeXBlICYmIHRoaXMub3BlcmF0aW9uLnNvdXJjZUVudGl0eVR5cGUgPT09IHJldHVybkVudGl0eVR5cGU7XG5cdFx0XHRpZiAoaXNTYW1lRW50aXR5KSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQvKiBUaGUgZm9ybWVyIGxvZ2ljIGNoZWNrZWQgaWYgdGhlIG1lc3NhZ2VzUGF0aCBpcyBjb250YWluZWQgaW50byB0aGUgU2lkZUVmZmVjdHNcbiAgICAgICAgICAgICAgICAgICAgICAgYnV0IHRoZSBjaGVjayB3YXMgaW52YWxpZCAoYWx3YXlzIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgIFRvIGJlIGNvbXBsaWFudCB3aXRoIGZvcm1lciB2ZXJzaW9uIHdlIGRvbid0IGNoZWNrIHRoZSBTaWRlRWZmZWN0cy4uXG5cdFx0XHRcdFx0ICAgXG5cdFx0XHRcdFx0ICAgdGhpcy5zaWRlRWZmZWN0cyAmJlxuXHRcdFx0XHRcdCAgIG1lc3NhZ2VzUGF0aCAmJlxuXHRcdFx0XHRcdCAgICh0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucyA/PyBbXSkuc29tZSgoZXhwKSA9PiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIFttZXNzYWdlc1BhdGgsIFwiKlwiXS5pbmNsdWRlcyhleHApKSovXG5cdFx0XHRcdFx0bWVzc2FnZXNQYXRoICYmXG5cdFx0XHRcdFx0ISFyZXR1cm5FbnRpdHlUeXBlPy5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBtZXNzYWdlc1BhdGgpICYmXG5cdFx0XHRcdFx0IWV4aXN0aW5nU2VsZWN0LmluY2x1ZGVzKG1lc3NhZ2VzUGF0aClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID0gdGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0XG5cdFx0XHRcdFx0XHQ/IGAke3RoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdH0sJHttZXNzYWdlc1BhdGh9YFxuXHRcdFx0XHRcdFx0OiBtZXNzYWdlc1BhdGg7XG5cblx0XHRcdFx0XHR0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzLiQkaW5oZXJpdEV4cGFuZFNlbGVjdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgb3BlcmF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBkZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzKCk6IHZvaWQge1xuXHRcdGlmICghaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pKSB7XG5cdFx0XHR0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMgPSB0aGlzLm9wZXJhdGlvbi5hY3Rpb24ucGFyYW1ldGVycztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9SZW1vdmUgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyBmcm9tIHRoZSBwYXJhbWV0ZXJzIGxpc3Rcblx0XHRcdHRoaXMub3BlcmF0aW9uUGFyYW1ldGVycyA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25QYXJhbWV0ZXJzKHRoaXMub3BlcmF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBvcGVyYXRpb25Db250ZXh0QmluZGluZyBvZiB0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncykge1xuXHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdH1cblx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuY2xlYXIoKTtcblx0XHR0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncyA9IFtdO1xuXHRcdHRoaXMuZmFpbGVkQ29udGV4dHMgPSBbXTtcblx0XHR0aGlzLm9wZXJhdGlvblByb21pc2VzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0YXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdGxldCByZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgKHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IHRoaXMuZXhlY3V0ZUNoYW5nZXNldCgpXG5cdFx0XHRcdFx0OiB0aGlzLmV4ZWN1dGVTZXF1ZW50aWFsbHkoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW3RoaXMuZXhlY3V0ZUltcG9ydCgpXSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBvcGVyYXRpb24gXCIgKyB0aGlzLmFjdGlvbk5hbWUsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVJlc3BvbnNlPy4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgaW1wb3J0IG9wZXJhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlSW1wb3J0KCk6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PiB7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQ29udGV4dCA9IHRoaXMucGFyYW1ldGVycy5tb2RlbC5iaW5kQ29udGV4dChgLyR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHR0aGlzLnNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBncm91cElkID0gdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQgPz8gXCJhY3Rpb25JbXBvcnRcIjtcblx0XHRjb25zdCBwcm9taXNlcyA9IFt0aGlzLmludm9rZShvcGVyYXRpb25Db250ZXh0LCBncm91cElkKV07XG5cblx0XHR0aGlzLmRlZmF1bHRTdWJtaXQoZ3JvdXBJZCk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHRhd2FpdCB0aGlzLmFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTtcblx0XHRjb25zdCBjdXJyZW50UHJvbWlzZVZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRyZXR1cm4gY3VycmVudFByb21pc2VWYWx1ZXNbMF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbnMgb24gb25lIGNoYW5nZXNldC5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvbnNcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZXhlY3V0ZUNoYW5nZXNldCgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKGFzeW5jIChjb250ZXh0KSA9PlxuXHRcdFx0dGhpcy5leGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dCwgdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQpXG5cdFx0KTtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMpO1xuXHRcdGF3YWl0IHRoaXMuYWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbigpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5tYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzKCk7XG5cdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uPy4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgb3BlcmF0aW9ucyBzZXF1ZW50aWFsbHkuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25zXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGV4ZWN1dGVTZXF1ZW50aWFsbHkoKTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W10+IHtcblx0XHQvLyBzZXJpYWxpemF0aW9uOiBleGVjdXRlQm91bmRPcGVyYXRpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdGF3YWl0IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRhd2FpdCBwcm9taXNlO1xuXHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGNvbnRleHQsIHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkID8/IGBhcGlNb2RlJHtpZCArIDF9YCkpO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHR9LCBQcm9taXNlLnJlc29sdmUoKSk7XG5cdFx0YXdhaXQgdGhpcy5hZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLm9wZXJhdGlvblByb21pc2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgYm91bmQgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgYm91bmQgY29udGV4dFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dDogT0RhdGFWNENvbnRleHQsIGdyb3VwSWQ/OiBzdHJpbmcpOiBQcm9taXNlPE9wZXJhdGlvblJlc3VsdD4ge1xuXHRcdGNvbnN0IG9wZXJhdGlvbkNvbnRleHQgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuYmluZENvbnRleHQoYCR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCwgY29udGV4dCwgdGhpcy5iaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0dGhpcy5zZXRQYXJhbWV0ZXJzVmFsdWUob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0Y29uc3QgZmluYWxHcm91cElkID0gZ3JvdXBJZCA/PyBvcGVyYXRpb25Db250ZXh0LmdldFVwZGF0ZUdyb3VwSWQoKTtcblx0XHRjb25zdCBvcGVyYXRpb25Qcm9taXNlID0gdGhpcy5pbnZva2Uob3BlcmF0aW9uQ29udGV4dCwgZmluYWxHcm91cElkKTtcblx0XHRwcm9taXNlcy5wdXNoKG9wZXJhdGlvblByb21pc2UpO1xuXHRcdHRoaXMuZGVmYXVsdFN1Ym1pdChmaW5hbEdyb3VwSWQpO1xuXHRcdFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cdFx0cmV0dXJuIG9wZXJhdGlvblByb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRW5oYW5jZXMgdGhlIHNpZGUgZWZmZWN0cyBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqXG5cdCAqIFdoZW4gYSBuZXcgZW50aXR5IGlzIGNyZWF0ZWQgdXNpbmcgYSBEYXRhRmllbGRGb3JBY3Rpb24sIGEgbmV3XG5cdCAqIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgY3JlYXRlZCB0byBleGVjdXRlIHRoZSBhY3Rpb24uIEJ5IGRlZmF1bHQsIHRoaXNcblx0ICogb0RhdGFDb250ZXh0QmluZGluZyBpcyByZWxhdGl2ZSB0byB0aGUgT2RhdGFMaXN0QmluZGluZyBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEJlY2F1c2Ugb2YgdGhpcyBkZXBlbmRlbmN5LCB3aGVuIGEgU2lkZUVmZmVjdHMgaXMgZXhlY3V0ZWQgb24gdGhlXG5cdCAqIGNvbnRleHQgaW50byB0aGUgT2RhdGFMaXN0QmluZGluZyB3aGVyZSB0aGUgb0RhdGFDb250ZXh0QmluZGluZyB3YXMgYm91bmQsIHRoaXMgU2lkZUVmZmVjdHMgaXMgYWxzbyB0cmlnZ2VyZWQgb24gdGhpc1xuXHQgKiBvRGF0YUNvbnRleHRCaW5kaW5nLiBXZSBkb24ndCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGVcblx0ICogb0RhdGFDb250ZXh0QmluZGluZy4gSXQgbWVhbnMgZXZlbiBpZiB0aGUgZHJhZnQgcmVsYXRlZCB0byB0aGUgYWN0aW9uXG5cdCAqIGlzIHJlbW92ZWQsIHRoZSBvZGF0YUNvbnRleHRCaW5kaW5nIGlzIHN0aWxsIHRoZXJlLCBzbyBpZiBhIFNpZGVFZmZlY3RzXG5cdCAqIGlzIGV4ZWN1dGVkIG9uIHRoZSBzb3VyY2UgdGFyZ2V0IGludG8gb0RhdGFDb250ZXh0QmluZGluZywgYW4gZXJyb3IgZnJvbSB0aGUgYmFjayBlbmQgd2lsbCBiZVxuXHQgKiByZWNlaXZlZCBiZWNhdXNlIHdlIGFzayB0byByZWZyZXNoIGEgcHJvcGVydHkgb24gYW4gdW5rbm93biBlbnRpdHkuXG5cdCAqXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmVxdWVzdGVkIG9ubHkgaWYgdGhlIHBhZ2UgaXMgc3RpbGwgb3Blbi5cblx0ICogVGhpcyBhdm9pZHMgZ2VuZXJhdGluZyBpc3N1ZXMgd2l0aCBnaG9zdCBvRGF0YUNvbnRleHRCaW5kaW5nIGxpbmtlZCB0byBkZXN0cm95ZWQgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIHJldHVybmVkQ29udGV4dCBUaGUgcmV0dXJuZWQgY29udGV4dCBvZiB0aGlzIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBlbmhhbmNlU2lkZUVmZmVjdHMob3BlcmF0aW9uQ29udGV4dEJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcsIHJldHVybmVkQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAocmV0dXJuZWRDb250ZXh0ICYmIHRoaXMucGFyYW1ldGVycy5naG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbiA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudDtcblx0XHRcdGNvbnN0IG9yaWdpbiA9IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nKTtcblx0XHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0Ly8gV2UgY2hlY2sgaWYgb25lIG9mIHRoZSBwYWdlcyBvciBhbiBvcGVuIGRpYWxvZyB1c2VzIHRoZSByZXR1cm5lZCBjb250ZXh0LlxuXHRcdFx0XHQvLyBJZiBub3QsIHNpZGUgZWZmZWN0cyBhcmUgbm90IHJlcXVlc3RlZC5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdFx0LnNvbWUoKHBhZ2VWaWV3OiBWaWV3KSA9PiBwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSByZXR1cm5lZENvbnRleHQpIHx8XG5cdFx0XHRcdFx0SW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCkuc29tZSgoZGlhbG9nKSA9PiBkaWFsb2cuZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gcmV0dXJuZWRDb250ZXh0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludm9rZXMgdGhlIG9wZXJhdGlvbiBvbiB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBncm91cElkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGludm9rZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRsZXQgcmV0dXJuZWRDb250ZXh0O1xuXHRcdGxldCBmaXJzdEl0ZXJhdGlvblJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRsZXQgZmlyc3RJdGVyYXRpb25SZWplY3QhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTx1bmtub3duPihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmaXJzdEl0ZXJhdGlvblJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0dGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMucHVzaChzdHJpY3RIYW5kbGluZ1Byb21pc2UpO1xuXHRcdGlmIChncm91cElkICYmIHRoaXMuaXNBUElNb2RlKGdyb3VwSWQpKSB7XG5cdFx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuYWRkKGdyb3VwSWQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNDb250ZXh0ID1cblx0XHRcdFx0KG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkgPz8gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvcGVyYXRpb25JbnZva2UgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5pbnZva2UoXG5cdFx0XHRcdGdyb3VwSWQsXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5pZ25vcmVFVGFnLFxuXHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmc/LmhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmcuYmluZChcblx0XHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmcsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzQ29udGV4dCwgZ3JvdXBJZCwgW10pO1xuXHRcdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSxcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLnJlcGxhY2VXaXRoUlZDXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNDb250ZXh0LCBncm91cElkLCBbb3BlcmF0aW9uSW52b2tlXSk7XG5cdFx0XHRhd2FpdCBQcm9taXNlLnJhY2UoW29wZXJhdGlvbkludm9rZSwgc3RyaWN0SGFuZGxpbmdQcm9taXNlXSk7XG5cblx0XHRcdHJldHVybmVkQ29udGV4dCA9IGF3YWl0IG9wZXJhdGlvbkludm9rZTtcblx0XHRcdHRoaXMuZW5oYW5jZVNpZGVFZmZlY3RzKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLCByZXR1cm5lZENvbnRleHQpO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlKCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGZpcnN0SXRlcmF0aW9uUmVqZWN0KGVycm9yKTtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5nZXRDb250ZXh0KCk7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHR0aGlzLmZhaWxlZENvbnRleHRzLnB1c2goY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhSW52b2tlPy4ob3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsIGdyb3VwSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXR1cm5lZENvbnRleHQsXG5cdFx0XHRib3VuZENvbnRleHQ6IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgTWFuYWdlcyB0aGUgc3RyaWN0IGhhbmRsaW5nIHZhbGlkYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIG9uU3RyaWN0VmFsaWRhdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdFZhbGlkYXRpb24/LigpO1xuXHRcdHRoaXMucmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgVHJpZ2dlcnMgdGhlIGZhaWxlZCBvcGVyYXRpb25zIGluIGNhc2Ugb2Ygc3RyaWN0IGhhbmRsaW5nLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgbmV3IG9wZXJhdGlvbnMgYXJlIHJlc29sdmVkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJldHJpZ2dlckZhaWxlZENvbnRleHRzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vUmV0cnkgdGhlIGFjdGlvbiBleGVjdXRpb24gaW4gY2FzZSBvZiBzdHJpY3QgaGFuZGxpbmcgYW5kIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmYWlsZWQgY29udGV4dCAoZ2l2ZSBpdCBhbm90aGVyIHRyeSB0byBzdWNjZWVkKVxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nICE9PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSB7XG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0Zm9yIChjb25zdCBmYWlsZWRDb250ZXh0IG9mIHRoaXMuZmFpbGVkQ29udGV4dHMpIHtcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGZhaWxlZENvbnRleHQsIGBhcGlSZXRyaWdnZXIke2luZGV4ICsgMX1gKSk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1Ym1pdHMgdGhlIGJhdGNoIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLm5ldmVyU3VibWl0dGVkIHx8IHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5zaXplID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgZ3JvdXBJZCBvZiBBcnJheS5mcm9tKHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC52YWx1ZXMoKSkpIHtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogIElzIHN0cmljdCBoYW5kbGluZyBjYW5jZWxlZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCBpcyBjYW5jZWxlZCwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqL1xuXHRwdWJsaWMgaXNTdHJpY3RDYW5jZWxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5pc0NhbmNlbGVkKCkgPz8gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogU3VibWl0cyB0aGUgYmF0Y2ggYXQgdGhlIG1vZGVsIGxldmVsIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIHN1Ym1pdE9uTW9kZWwoZ3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5kZWxldGUoZ3JvdXBJZCk7XG5cdH1cblxuXHQvKipcblx0ICogSXMgdGhlIFN1Ym1pdE1vZGUgb2YgdGhlIGdyb3VwSWQgc2V0IHRvIEFQSS5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIFN1Ym1pdE1vZGUgaXMgc2V0IHRvIEFQSSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGlzQVBJTW9kZShncm91cElkPzogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFncm91cElkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChncm91cElkLnN0YXJ0c1dpdGgoXCIkYXV0b1wiKSB8fCBncm91cElkLnN0YXJ0c1dpdGgoXCIkZGlyZWN0XCIpIHx8IGdyb3VwSWQuc3RhcnRzV2l0aChcIiRzaW5nbGVcIikpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3VibWl0TW9kZSA9IChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIik/Lm1vZGVsc1tcIlwiXT8uc2V0dGluZ3MgYXNcblx0XHRcdFx0fCB7IGdyb3VwUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHsgc3VibWl0OiBTdWJtaXRNb2RlIH0+IH1cblx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHQpPy5ncm91cFByb3BlcnRpZXM/Lltncm91cElkXT8uc3VibWl0O1xuXG5cdFx0aWYgKHN1Ym1pdE1vZGUgPT09IHVuZGVmaW5lZCB8fCBbU3VibWl0TW9kZS5BdXRvLCBTdWJtaXRNb2RlLkRpcmVjdF0uaW5jbHVkZXMoc3VibWl0TW9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgc3VibWl0IG9mIHRoZSBvcGVyYXRpb24gaWYgdGhlIHN1Ym1pdE1vZGUgaXMgb24gQVBJIGFuZCBkZWZlcnJlZFN1Ym1pdCBpcyBub3Qgc2V0IHRvIHRydWVcblx0ICogVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbC5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIGRlZmF1bHRTdWJtaXQoZ3JvdXBJZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0U3VibWl0ID0gdGhpcy5uZXZlclN1Ym1pdHRlZDtcblx0XHRjb25zdCBpc0FQSU1vZGUgPSB0aGlzLmlzQVBJTW9kZShncm91cElkKTtcblx0XHRpZiAoIWlzQVBJTW9kZSkge1xuXHRcdFx0Ly8gVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbFxuXHRcdFx0dGhpcy5uZXZlclN1Ym1pdHRlZCA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmRlZmVycmVkU3VibWl0ICE9PSB0cnVlICYmIGdyb3VwSWQpIHtcblx0XHRcdHRoaXMubmV2ZXJTdWJtaXR0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0aWYgKGZpcnN0U3VibWl0ICYmICF0aGlzLm5ldmVyU3VibWl0dGVkKSB7XG5cdFx0XHQvL1RyaWdnZXIgdGhlIGNhbGxiYWNrIG9ubHkgb25jZVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqICBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqL1xuXHRwcml2YXRlIHNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXMgPz8ge307XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiB0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHRpZiAoIWRlZmF1bHRWYWx1ZXNbbmFtZV0pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKHBhcmFtZXRlci50eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc1tuYW1lXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuc2V0UGFyYW1ldGVyKG5hbWUsIGRlZmF1bHRWYWx1ZXNbbmFtZV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3RzIGZvciB0aGUgYWN0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSBncm91cElkICBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHBhcmFtIGxvY2FsUHJvbWlzZSBUaGUgcHJvbWlzZSBvZiB0aGUgaW52b2tlZCBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIHNpZGUgZWZmZWN0XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJlcXVlc3RTaWRlRWZmZWN0cyhjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgZ3JvdXBJZDogc3RyaW5nLCBsb2NhbFByb21pc2U/OiBQcm9taXNlPHVua25vd24+W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGxldCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gbG9jYWxQcm9taXNlID8/IFtdO1xuXHRcdC8vIHRyaWdnZXIgYWN0aW9ucyBmcm9tIHNpZGUgZWZmZWN0c1xuXHRcdGlmICh0aGlzLnNpZGVFZmZlY3RzICYmICF0aGlzLnBhcmFtZXRlcnMuZGlzYWJsZVNpZGVFZmZlY3RzID09PSB0cnVlKSB7XG5cdFx0XHRwcm9taXNlcyA9IHByb21pc2VzLmNvbmNhdChcblx0XHRcdFx0KHRoaXMuc2lkZUVmZmVjdHMudHJpZ2dlckFjdGlvbnMgPz8gW10pLm1hcChhc3luYyAoYWN0aW9uKSA9PlxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKGFjdGlvbiwgY29udGV4dCwgeyBzdWJtaXRCYXRjaDogZmFsc2UsIGdyb3VwSWQgfSlcblx0XHRcdFx0KSxcblx0XHRcdFx0dGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnNcblx0XHRcdFx0XHQ/IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHModGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnMsIGNvbnRleHQsIGdyb3VwSWQpXG5cdFx0XHRcdFx0OiBbXVxuXHRcdFx0KTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdFx0aWYgKHRoaXMuc2lkZUVmZmVjdHMucGF0aEV4cHJlc3Npb25zKSB7XG5cdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25SZXF1ZXN0U2lkZUVmZmVjdHM/Lih0aGlzLnNpZGVFZmZlY3RzLCB0aGlzLm9wZXJhdGlvbiwgcHJvbWlzZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkVycm9yIHdoaWxlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzIGZvciB0aGUgb3BlcmF0aW9uIFwiICsgdGhpcy5hY3Rpb25OYW1lLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUFtQkEsTUFBTUEsa0JBQWtCLEdBQUdDLFNBQVMsQ0FBQ0Qsa0JBQWtCO0VBQUMsSUFPbkNFLGNBQWM7SUF1QmxDLFNBQUFBLGVBQ2tCQyxTQUFtQyxFQUNuQ0MsVUFvQmhCLEVBU0E7TUFBQSxJQVJnQkMsbUJBT2hCLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztNQUFBLEtBcERDRyx3QkFBd0IsR0FBMEIsRUFBRTtNQUFBLEtBRTNDQyx3QkFBd0IsR0FBdUIsRUFBRTtNQUFBLEtBRWpEQyxtQkFBbUIsR0FBZ0IsSUFBSUMsR0FBRyxDQUFDLENBQUM7TUFBQSxLQU1yREMsaUJBQWlCLEdBQTRCLENBQUMsQ0FBQztNQUFBLEtBRS9DQyxtQkFBbUIsR0FBc0IsRUFBRTtNQUFBLEtBRTNDQyxjQUFjLEdBQUcsSUFBSTtNQUFBLEtBSXJCQyxjQUFjLEdBQXFCLEVBQUU7TUFBQSxLQUVyQ0MsaUJBQWlCLEdBQStCLEVBQUU7TUFBQSxLQUd4Q2QsU0FBbUMsR0FBbkNBLFNBQW1DO01BQUEsS0FDbkNDLFVBb0JoQixHQXBCZ0JBLFVBb0JoQjtNQUFBLEtBQ2dCQyxtQkFPaEIsR0FQZ0JBLG1CQU9oQjtNQUVELElBQUksQ0FBQ2EsVUFBVSxHQUFHQyxZQUFZLENBQUNDLGFBQWEsQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQ2xCLFNBQVMsQ0FBQyxHQUFHLElB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
|
|
@@ -501,7 +501,9 @@ export default class ODataOperation {
|
|
|
501
501
|
// trigger actions from side effects
|
|
502
502
|
if (this.sideEffects && !this.parameters.disableSideEffects === true) {
|
|
503
503
|
promises = promises.concat(
|
|
504
|
-
(this.sideEffects.triggerActions ?? []).map(async (action) =>
|
|
504
|
+
(this.sideEffects.triggerActions ?? []).map(async (action) =>
|
|
505
|
+
sideEffectsService.executeAction(action, context, { submitBatch: false, groupId })
|
|
506
|
+
),
|
|
505
507
|
this.sideEffects.pathExpressions
|
|
506
508
|
? sideEffectsService.requestSideEffects(this.sideEffects.pathExpressions, context, groupId)
|
|
507
509
|
: []
|