@sapui5/sap.fe.core 1.136.11 → 1.136.13
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/AppStateHandler.js +8 -2
- package/src/sap/fe/core/AppStateHandler.ts +9 -1
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +1 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +73 -23
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +113 -43
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +7 -4
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +8 -5
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +6 -2
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +8 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +8 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +1 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +6 -5
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +15 -5
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +29 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +32 -0
- package/src/sap/fe/core/converters/controls/Common/Action.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +31 -36
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +47 -57
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +4 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +3 -2
- package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +4 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +4 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle_da.properties +1 -1
- package/src/sap/fe/core/messagebundle_ko.properties +3 -3
- package/src/sap/fe/core/messagebundle_uk.properties +2 -2
- package/src/sap/fe/core/messagebundle_vi.properties +4 -4
- package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
- package/src/sap/fe/core/rootView/Fcl.controller.ts +6 -1
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +17 -29
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +23 -26
- package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -5
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +12 -6
|
@@ -191,13 +191,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
|
|
|
191
191
|
* @param bPreserveHistory If set to true, non-ancestor entries in history will be retained
|
|
192
192
|
* @param bDisablePreservationCache If set to true, cache preservation mechanism is disabled for the current navigation
|
|
193
193
|
* @param bForceFocus If set to true, the logic to set the focus once the navigation is finalized will be triggered (onPageReady)
|
|
194
|
-
* @param
|
|
194
|
+
* @param preserveShellBackNavigationHandler If set to true, the back navigation callback is preserved. If undefined or false, the back navigation callback is reset.
|
|
195
195
|
* @param skipHashGuardCheck
|
|
196
196
|
* @returns Promise (resolved when the navigation is finalized) that returns 'true' if a navigation took place, 'false' if the navigation didn't happen
|
|
197
197
|
*/;
|
|
198
|
-
_proto.navToHash = async function navToHash(sHash, bPreserveHistory, bDisablePreservationCache, bForceFocus,
|
|
198
|
+
_proto.navToHash = async function navToHash(sHash, bPreserveHistory, bDisablePreservationCache, bForceFocus, preserveShellBackNavigationHandler, skipHashGuardCheck) {
|
|
199
199
|
sHash = sHash.startsWith("/") ? sHash.substring(1) : sHash;
|
|
200
|
-
if (
|
|
200
|
+
if (!preserveShellBackNavigationHandler) {
|
|
201
201
|
await this._oShellServices.setBackNavigation();
|
|
202
202
|
}
|
|
203
203
|
sHash = this.removeRestoreHistoryFlagFromHash(sHash);
|
|
@@ -314,11 +314,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
|
|
|
314
314
|
* @param oParameters Parameters for the navigation
|
|
315
315
|
* @param oParameters.noPreservationCache
|
|
316
316
|
* @param oParameters.bIsStickyMode
|
|
317
|
+
* @param oParameters.isHiddenDraftEnabled
|
|
317
318
|
* @returns Promise that is resolved when the navigation is finalized
|
|
318
319
|
*/;
|
|
319
320
|
_proto.navTo = async function navTo(sRouteName, oParameters) {
|
|
320
321
|
const sHash = this._oRouter.getURL(sRouteName, oParameters);
|
|
321
|
-
return this.navToHash(sHash, false, oParameters?.noPreservationCache, false,
|
|
322
|
+
return this.navToHash(sHash, false, oParameters?.noPreservationCache, false, (oParameters?.bIsStickyMode ?? false) || (oParameters?.isHiddenDraftEnabled ?? false));
|
|
322
323
|
}
|
|
323
324
|
|
|
324
325
|
/**
|
|
@@ -925,4 +926,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/helpers/
|
|
|
925
926
|
}(BaseObject)) || _class);
|
|
926
927
|
return RouterProxy;
|
|
927
928
|
}, false);
|
|
928
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnVtU3RhdGUiLCJFUVVBTCIsIkNPTVBBVElCTEUiLCJBTkNFU1RPUiIsIkRJRkZFUkVOVCIsImVudW1VUkxQYXJhbXMiLCJMQVlPVVRQQVJBTSIsIklBUFBTVEFURVBBUkFNIiwiY3JlYXRlR3VhcmRGcm9tSGFzaCIsInNHdWFyZEhhc2giLCJoYXNoVHJha2VyIiwiX2d1YXJkSGFzaCIsInJlcGxhY2UiLCJoYXNoVHJhY2tlciIsInVuZGVmaW5lZCIsImNoZWNrIiwic0hhc2giLCJpbmRleE9mIiwicmVtb3ZlQXBwU3RhdGVJbkhhc2giLCJSZWdFeHAiLCJSb3V0ZXJQcm94eSIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9jbGFzcyIsIl9CYXNlT2JqZWN0IiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJiSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmciLCJiSXNDb21wdXRpbmdUaXRsZUhpZXJhY2h5IiwiYklzR3VhcmRDcm9zc0FsbG93ZWQiLCJzSUFwcFN0YXRlS2V5IiwiX2JBY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvIiwiX2JBcHBseVJlc3RvcmUiLCJfcGF0aE1hcHBpbmdzIiwicmVzdG9yZUhpc3RvcnlUcmlnZ2VyZWQiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImluaXQiLCJvQXBwQ29tcG9uZW50IiwiaXNmY2xFbmFibGVkIiwiZ2V0U2VydmljZSIsInRoZW4iLCJhc3luY0luaXQiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiX2ZuSGFzaEd1YXJkIiwiaGFzaEd1YXJkIiwiYmluZCIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJfYkRpc2FibGVPbkhhc2hDaGFuZ2UiLCJfYklnbm9yZVJlc3RvcmUiLCJfYkZvcmNlRm9jdXMiLCJfb1NoZWxsU2VydmljZXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaW5pdFJhdyIsImdldFJvdXRlciIsInJvdXRpbmdIaW50cyIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0Um91dGluZ0hpbnRzIiwid2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uIiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsIk9iamVjdCIsImFzc2lnbiIsImZlTGV2ZWwiLCJzdGF0ZSIsImxvY2F0aW9uIiwiZmNsRW5hYmxlZCIsIl9mbkJsb2NraW5nTmF2RmlsdGVyIiwiX2Jsb2NraW5nTmF2aWdhdGlvbkZpbHRlciIsInJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsImRlc3Ryb3kiLCJ1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJzZXRBcHBTdGF0ZUluSGFzaCIsInNBcHBTdGF0ZUtleSIsInNOZXdIYXNoIiwiaW5jbHVkZXMiLCJmaW5kQXBwU3RhdGVJbkhhc2giLCJhQXBwU3RhdGUiLCJtYXRjaCIsImdldERlY29kZWRXaW5kb3dIYXNoIiwiZGVjb2RlVVJJIiwiaGFzaCIsIm9Sb3V0ZXIiLCJfb1JvdXRlciIsIl9vTWFuYWdlZEhpc3RvcnkiLCJfb05hdmlnYXRpb25HdWFyZCIsInNDdXJyZW50QXBwSGFzaCIsImdldEhhc2giLCJwdXNoIiwiX2V4dHJhY3RTdGF0ZUZyb21IYXNoIiwiYXBwTmFtZSIsImdldEFwcE5hbWVGcm9tSGFzaCIsImdldEZ1bGxIYXNoIiwic3BsaXRIYXNoIiwiYXBwU3BlY2lmaWNSb3V0ZSIsImdldEhhc2hDaGFuZ2VyIiwic2hlbGxQYXJ0IiwiaXNGb2N1c0ZvcmNlZCIsInNldEZvY3VzRm9yY2VkIiwiYkZvcmNlZCIsInJlbW92ZUlBcHBTdGF0ZUtleSIsInJlbW92ZVJlc3RvcmVIaXN0b3J5RmxhZ0Zyb21IYXNoIiwibmF2VG9IYXNoIiwiYlByZXNlcnZlSGlzdG9yeSIsImJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGUiLCJiRm9yY2VGb2N1cyIsImJQcmVzZXJ2ZVNoZWxsQmFja05hdmlnYXRpb25IYW5kbGVyIiwic2tpcEhhc2hHdWFyZENoZWNrIiwic3RhcnRzV2l0aCIsInN1YnN0cmluZyIsInNldEJhY2tOYXZpZ2F0aW9uIiwiX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uIiwid2FpdEZvciIsIl9pbnRlcm5hbE5hdlRvSGFzaCIsImNoZWNrSGFzaFdpdGhHdWFyZCIsIm9SZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImNvbmZpcm0iLCJnZXRUZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJvTmV3U3RhdGUiLCJhQ3VycmVudEhhc2hLZXlzIiwiZXh0cmFjdEVudGl0eVNldHNGcm9tSGFzaCIsImtleXMiLCJldmVyeSIsImtleSIsImluZGV4Iiwib0hpc3RvcnlBY3Rpb24iLCJfcHVzaE5ld1N0YXRlIiwic3RvcmVGb2N1c0luZm9Gb3JDdXJyZW50SGFzaCIsIl9yZWJ1aWxkQnJvd3Nlckhpc3RvcnkiLCJyZXN0b3JlSGlzdG9yeSIsInNUYXJnZXRIYXNoIiwiY2hlY2tSZXN0b3JlSGlzdG9yeVdhc1RyaWdnZXJlZCIsInJlc2V0UmVzdG9yZUhpc3RvcnlGbGFnIiwibmF2QmFjayIsInNDdXJyZW50SGFzaCIsInNQcmV2aW91c0hhc2giLCJpIiwiYmFjayIsIm5hdlRvIiwic1JvdXRlTmFtZSIsIm9QYXJhbWV0ZXJzIiwiZ2V0VVJMIiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsImJJc1N0aWNreU1vZGUiLCJleGl0RnJvbUFwcCIsImJhY2tUb1ByZXZpb3VzQXBwIiwiaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5Iiwib0xvY2FsR3VhcmQiLCJpc05hdmlnYXRpb25GaW5hbGl6ZWQiLCJzZXROYXZpZ2F0aW9uR3VhcmQiLCJkaXNjYXJkTmF2aWdhdGlvbkd1YXJkIiwiaGFzTmF2aWdhdGlvbkd1YXJkIiwiaXNHdWFyZENyb3NzQWxsb3dlZEJ5VXNlciIsImFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiIsInJlc29sdmVSb3V0ZU1hdGNoIiwiU3luY2hyb25pemF0aW9uIiwic0hhc2hOb1BhcmFtcyIsInNwbGl0IiwiYVRva2VucyIsIm5hbWVzIiwiZm9yRWFjaCIsInNUb2tlbiIsIm9TdGF0ZSIsInNjcmVlbk1vZGUiLCJhTGF5b3V0Iiwic0xheW91dCIsImJSZWJ1aWxkT25seSIsImJEaXNhYmxlSGlzdG9yeVByZXNlcnZhdGlvbiIsImxhc3RJbmRleCIsImlQb3BDb3VudCIsInBvcCIsInByZXNlcnZlZCIsIm9MYXN0UmVtb3ZlZEl0ZW0iLCJvVG9wU3RhdGUiLCJfY29tcGFyZUNhY2hlU3RhdGVzIiwic1ByZXZpb3VzSUFwcFN0YXRlS2V5Iiwib0NvbXBhcmlzb25TdGF0ZVJlc3VsdCIsImJIYXNTYW1lSGFzaCIsImZvY3VzQ29udHJvbElkIiwic2Vjb25kYXJ5Rm9jdXNDb250cm9sSWQiLCJmb2N1c0luZm8iLCJzZWNvbmRhcnlGb2N1c0luZm8iLCJ0eXBlIiwic3RlcHMiLCJfZGlzYWJsZUV2ZW50T25IYXNoQ2hhbmdlIiwic3RvcCIsIl9lbmFibGVFdmVudE9uSGFzaENoYW5nZSIsImJJZ25vcmVDdXJyZW50SGFzaCIsImluaXRpYWxpemUiLCJ0aGF0Iiwib1RhcmdldFN0YXRlIiwibmV3TGV2ZWwiLCJyZXBsYWNlQXN5bmMiLCJyZXBsYWNlSGFzaCIsInNldFRpbWVvdXQiLCJiYWNrUmVwbGFjZUFzeW5jIiwiYmFja0FzeW5jIiwic2V0SGFzaCIsImdvIiwiZ2V0TGFzdEhpc3RvcnlFbnRyeSIsInNldFBhdGhNYXBwaW5nIiwibWFwcGluZ3MiLCJmaWx0ZXIiLCJtYXBwaW5nIiwib2xkUGF0aCIsIm5ld1BhdGgiLCJjdXJyZW50QXBwTmFtZSIsImZpbmQiLCJtIiwiZW5jb2RlVVJJIiwiYUhhc2hTcGxpdCIsInNBcHBIYXNoIiwib1N0YXRlMSIsIm9TdGF0ZTIiLCJlcXVhbCIsInBhcmVudE9mIiwic3BsaXRBcHBTcGVjaWZpY1JvdXRlIiwicm91dGVTcGxpdCIsInNoaWZ0IiwiY2hlY2tJZkJhY2tJc091dE9mR3VhcmQiLCJzZWdtZW50cyIsInByZXZpb3VzSGFzaCIsImNoZWNrSWZCYWNrRXhpdHNBcHAiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0Iiwib0N1cnJlbnRTdGF0ZSIsIm9QcmV2aW91c1N0YXRlIiwicmVzdG9yZUZvY3VzRm9yQ3VycmVudEhhc2giLCJjdXJyZW50SGFzaCIsInN0YXRlRm9ySGFzaCIsImZvY3VzQXBwbGllZCIsImZvY3VzQ29udHJvbCIsIkVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldEZvY3VzRG9tUmVmIiwiZ2V0UGFyZW50IiwiaXNBIiwiZ2V0QnVzeSIsImZvY3VzIiwiZ2V0QWN0aXZlRWxlbWVudCIsImdldElkIiwicGFyZW50VGFibGUiLCJwcmV2ZW50U2Nyb2xsIiwiZ2V0Rm9jdXNJbmZvIiwiZmluZExheW91dEZvckhhc2giLCJoYXNoTm9QYXJhbSIsInRhcmdldFN0YXRlIiwiQmFzZU9iamVjdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUm91dGVyUHJveHkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IFN5bmNocm9uaXphdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TeW5jaHJvbml6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIE1UYWJsZSBmcm9tIFwic2FwL20vVGFibGVcIjtcbmltcG9ydCBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgVUlUYWJsZSBmcm9tIFwic2FwL3VpL3RhYmxlL1RhYmxlXCI7XG5cbmNvbnN0IGVudW1TdGF0ZSA9IHtcblx0RVFVQUw6IDAsXG5cdENPTVBBVElCTEU6IDEsXG5cdEFOQ0VTVE9SOiAyLFxuXHRESUZGRVJFTlQ6IDNcbn07XG5jb25zdCBlbnVtVVJMUGFyYW1zID0ge1xuXHRMQVlPVVRQQVJBTTogXCJsYXlvdXRcIixcblx0SUFQUFNUQVRFUEFSQU06IFwic2FwLWlhcHAtc3RhdGVcIlxufTtcblxudHlwZSBSb3V0ZXJTdGF0ZSA9IHtcblx0a2V5czogc3RyaW5nW107XG5cdGhhc2g6IHN0cmluZztcblx0cHJlc2VydmVkPzogYm9vbGVhbjtcblx0c0xheW91dD86IHN0cmluZztcblx0c2NyZWVuTW9kZTogbnVtYmVyO1xuXHRmb2N1c0NvbnRyb2xJZD86IHN0cmluZztcblx0c2Vjb25kYXJ5Rm9jdXNDb250cm9sSWQ/OiBzdHJpbmc7XG5cdGZvY3VzSW5mbz86IHtcblx0XHRwcmV2ZW50U2Nyb2xsPzogYm9vbGVhbjtcblx0XHR0YXJnZXRJbmZvPzogdW5rbm93bjtcblx0fTtcblx0c2Vjb25kYXJ5Rm9jdXNJbmZvPzoge1xuXHRcdHByZXZlbnRTY3JvbGw/OiBib29sZWFuO1xuXHR9O1xufTtcblxudHlwZSBPdGhlckhpc3RvcnlBY3Rpb24gPSB7IHR5cGU6IFwiYXBwZW5kXCIgfCBcIm5vbmVcIiB8IFwicmVwbGFjZVwiIH07XG5leHBvcnQgdHlwZSBCYWNrSGlzdG9yeUFjdGlvbiA9IHsgdHlwZTogXCJiYWNrXCIgfCBcImJhY2stcmVwbGFjZVwiOyBzdGVwczogbnVtYmVyIH07XG50eXBlIEh5c3RvcnlBY3Rpb24gPSBCYWNrSGlzdG9yeUFjdGlvbiB8IE90aGVySGlzdG9yeUFjdGlvbjtcblxudHlwZSBOYXZpZ2F0aW9uR3VhcmQgPSB7IF9ndWFyZEhhc2g6IHN0cmluZzsgaGFzaFRyYWNrZXI6IHN0cmluZyB8IHVuZGVmaW5lZDsgY2hlY2s6IChoYXNoOiBzdHJpbmcpID0+IGJvb2xlYW4gfTtcbi8qKlxuICogQ3JlYXRlcyBhIEhhc2hHdWFyZCBvYmplY3QuXG4gKiBAcGFyYW0gc0d1YXJkSGFzaCBUaGUgaGFzaCB1c2VkIGZvciB0aGUgZ3VhcmQuXG4gKiBAcGFyYW0gW2hhc2hUcmFrZXJdIE9wdGlvbmFsIGhhc2ggdHJhY2tlciB1c2VkIGZvciBhZGRpdGlvbmFsIGd1YXJkIGNoZWNrcy5cbiAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGhhc2ggZ3VhcmQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUd1YXJkRnJvbUhhc2goc0d1YXJkSGFzaDogc3RyaW5nLCBoYXNoVHJha2VyPzogc3RyaW5nKTogTmF2aWdhdGlvbkd1YXJkIHtcblx0cmV0dXJuIHtcblx0XHRfZ3VhcmRIYXNoOiBzR3VhcmRIYXNoLnJlcGxhY2UoL1xcP1teP10qJC8sIFwiXCIpLCAvLyBSZW1vdmUgcXVlcnkgcGFydFxuXHRcdGhhc2hUcmFja2VyOiBoYXNoVHJha2VyID8gaGFzaFRyYWtlci5yZXBsYWNlKC9cXD9bXj9dKiQvLCBcIlwiKSA6IHVuZGVmaW5lZCxcblx0XHRjaGVjazogZnVuY3Rpb24gKHNIYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBzSGFzaC5pbmRleE9mKHRoaXMuX2d1YXJkSGFzaCkgPT09IDAgfHwgKHRoaXMuaGFzaFRyYWNrZXIgPyBzSGFzaC5pbmRleE9mKHRoaXMuaGFzaFRyYWNrZXIpID09PSAwIDogZmFsc2UpO1xuXHRcdH1cblx0fTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGhhc2ggd2l0aG91dCBpdHMgaUFwcFN0YXRlIHBhcnQuXG4gKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2hcbiAqIEByZXR1cm5zIFRoZSBoYXNoIHdpdGhvdXQgdGhlIGlBcHBTdGF0ZVxuICovXG5mdW5jdGlvbiByZW1vdmVBcHBTdGF0ZUluSGFzaChzSGFzaDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHNIYXNoLnJlcGxhY2UobmV3IFJlZ0V4cChgWyY/XSoke2VudW1VUkxQYXJhbXMuSUFQUFNUQVRFUEFSQU19PVteJl0qYCksIFwiXCIpO1xufVxuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eVwiKVxuY2xhc3MgUm91dGVyUHJveHkgZXh0ZW5kcyBCYXNlT2JqZWN0IHtcblx0YklzUmVidWlsZEhpc3RvcnlSdW5uaW5nID0gZmFsc2U7XG5cblx0YklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSA9IGZhbHNlO1xuXG5cdGJJc0d1YXJkQ3Jvc3NBbGxvd2VkID0gZmFsc2U7XG5cblx0c0lBcHBTdGF0ZUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0X29TaGVsbFNlcnZpY2VzITogSVNoZWxsU2VydmljZXM7XG5cblx0ZmNsRW5hYmxlZCE6IGJvb2xlYW47XG5cblx0X2ZuQmxvY2tpbmdOYXZGaWx0ZXIhOiBGdW5jdGlvbjtcblxuXHRfZm5IYXNoR3VhcmQhOiAodGhpczogV2luZG93LCBwb3BTdGF0ZUV2ZW50OiBQb3BTdGF0ZUV2ZW50KSA9PiB1bmtub3duO1xuXG5cdF9iRGlzYWJsZU9uSGFzaENoYW5nZSE6IGJvb2xlYW47XG5cblx0X2JJZ25vcmVSZXN0b3JlITogYm9vbGVhbjtcblxuXHRfYkZvcmNlRm9jdXMhOiBib29sZWFuO1xuXG5cdF9vUm91dGVyITogUm91dGVyO1xuXG5cdF9vTWFuYWdlZEhpc3RvcnkhOiBSb3V0ZXJTdGF0ZVtdO1xuXG5cdF9vTmF2aWdhdGlvbkd1YXJkITogTmF2aWdhdGlvbkd1YXJkIHwgbnVsbDtcblxuXHRvUmVzb3VyY2VCdW5kbGU/OiBSZXNvdXJjZUJ1bmRsZTtcblxuXHRfb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24/OiBTeW5jaHJvbml6YXRpb247XG5cblx0X2JBY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvID0gZmFsc2U7XG5cblx0X2JBcHBseVJlc3RvcmUgPSBmYWxzZTtcblxuXHRfcGF0aE1hcHBpbmdzOiB7IG9sZFBhdGg6IHN0cmluZzsgbmV3UGF0aDogc3RyaW5nIH1bXSA9IFtdO1xuXG5cdHJlc3RvcmVIaXN0b3J5VHJpZ2dlcmVkID0gZmFsc2U7XG5cblx0cm91dGluZ0hpbnRzPzogUmVjb3JkPHN0cmluZywgeyBwYXJlbnRPZjogc3RyaW5nW10gfT47XG5cblx0YXBwTmFtZSE6IHN0cmluZztcblxuXHRpbml0KG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgaXNmY2xFbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG5cdFx0Ly8gU2F2ZSB0aGUgbmFtZSBvZiB0aGUgYXBwIChpbmNsdWRpbmcgc3RhcnR1cCBwYXJhbWV0ZXJzKSBmb3IgcmVidWlsZGluZyBmdWxsIGhhc2hlcyBsYXRlclxuXHRcdG9BcHBDb21wb25lbnRcblx0XHRcdC5nZXRTZXJ2aWNlKFwic2hlbGxTZXJ2aWNlc1wiKVxuXHRcdFx0LnRoZW4oKCkgPT4gdGhpcy5hc3luY0luaXQob0FwcENvbXBvbmVudCwgaXNmY2xFbmFibGVkKSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgc2hlbGwgc2VydmljZXNcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0XHR0aGlzLl9mbkhhc2hHdWFyZCA9IHRoaXMuaGFzaEd1YXJkLmJpbmQodGhpcyk7XG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCB0aGlzLl9mbkhhc2hHdWFyZCk7XG5cdFx0dGhpcy5fYkRpc2FibGVPbkhhc2hDaGFuZ2UgPSBmYWxzZTtcblx0XHR0aGlzLl9iSWdub3JlUmVzdG9yZSA9IGZhbHNlO1xuXHRcdHRoaXMuX2JGb3JjZUZvY3VzID0gdHJ1ZTsgLy8gVHJpZ2dlciB0aGUgZm9jdXMgbWVjaGFuaXNtIGZvciB0aGUgZmlyc3QgdmlldyBkaXNwbGF5ZWQgYnkgdGhlIGFwcFxuXHR9XG5cblx0YXN5bmNJbml0KG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgaXNmY2xFbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5fb1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHR0aGlzLmluaXRSYXcob0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKSk7XG5cdFx0dGhpcy5yb3V0aW5nSGludHMgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0Um91dGluZ0hpbnRzKCk7XG5cdFx0Ly8gV2Ugd2FudCB0byB3YWl0IHVudGlsIHRoZSBpbml0aWFsIHJvdXRlTWF0Y2hlZCBpcyBkb25lIGJlZm9yZSBkb2luZyBhbnkgbmF2aWdhdGlvblxuXHRcdHRoaXMud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHQvLyBTZXQgZmVMZXZlbD0wIGZvciB0aGUgZmlyc3QgQXBwbGljYXRpb24gcGFnZSBpbiB0aGUgaGlzdG9yeVxuXHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKFxuXHRcdFx0T2JqZWN0LmFzc2lnbihcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGZlTGV2ZWw6IDBcblx0XHRcdFx0fSxcblx0XHRcdFx0aGlzdG9yeS5zdGF0ZVxuXHRcdFx0KSxcblx0XHRcdFwiXCIsXG5cdFx0XHR3aW5kb3cubG9jYXRpb24gYXMgdW5rbm93biBhcyBzdHJpbmdcblx0XHQpO1xuXHRcdHRoaXMuZmNsRW5hYmxlZCA9IGlzZmNsRW5hYmxlZDtcblxuXHRcdHRoaXMuX2ZuQmxvY2tpbmdOYXZGaWx0ZXIgPSB0aGlzLl9ibG9ja2luZ05hdmlnYXRpb25GaWx0ZXIuYmluZCh0aGlzKTtcblx0XHR0aGlzLl9vU2hlbGxTZXJ2aWNlcy5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIodGhpcy5fZm5CbG9ja2luZ05hdkZpbHRlcik7XG5cdH1cblxuXHRkZXN0cm95KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9vU2hlbGxTZXJ2aWNlcykge1xuXHRcdFx0dGhpcy5fb1NoZWxsU2VydmljZXMudW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIodGhpcy5fZm5CbG9ja2luZ05hdkZpbHRlcik7XG5cdFx0fVxuXHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgdGhpcy5fZm5IYXNoR3VhcmQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYW4gaUFwcFN0YXRlIGluc2lkZSBhIGhhc2ggKG9yIHJlcGxhY2VzIGFuIGV4aXN0aW5nIG9uZSkuXG5cdCAqIEBwYXJhbSBzSGFzaCBUaGUgaGFzaFxuXHQgKiBAcGFyYW0gc0FwcFN0YXRlS2V5IFRoZSBpQXBwU3RhdGUgdG8gYWRkXG5cdCAqIEByZXR1cm5zIFRoZSBoYXNoIHdpdGggdGhlIGFwcCBzdGF0ZVxuXHQgKi9cblx0c2V0QXBwU3RhdGVJbkhhc2goc0hhc2g6IHN0cmluZywgc0FwcFN0YXRlS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCBzTmV3SGFzaDogc3RyaW5nO1xuXG5cdFx0aWYgKHNIYXNoLmluY2x1ZGVzKGVudW1VUkxQYXJhbXMuSUFQUFNUQVRFUEFSQU0pKSB7XG5cdFx0XHQvLyBJZiB0aGVyZSdzIGFscmVhZHkgYW4gaUFwcFN0YXRlIHBhcmFtZXRlciBpbiB0aGUgaGFzaCwgcmVwbGFjZSBpdFxuXHRcdFx0c05ld0hhc2ggPSBzSGFzaC5yZXBsYWNlKFxuXHRcdFx0XHRuZXcgUmVnRXhwKGAke2VudW1VUkxQYXJhbXMuSUFQUFNUQVRFUEFSQU19PVteJl0qYCksXG5cdFx0XHRcdGAke2VudW1VUkxQYXJhbXMuSUFQUFNUQVRFUEFSQU19PSR7c0FwcFN0YXRlS2V5fWBcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEFkZCB0aGUgaUFwcFN0YXRlIHBhcmFtZXRlciBpbiB0aGUgaGFzaFxuXHRcdFx0aWYgKCFzSGFzaC5pbmNsdWRlcyhcIj9cIikpIHtcblx0XHRcdFx0c05ld0hhc2ggPSBgJHtzSGFzaH0/YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNOZXdIYXNoID0gYCR7c0hhc2h9JmA7XG5cdFx0XHR9XG5cdFx0XHRzTmV3SGFzaCArPSBgJHtlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNfT0ke3NBcHBTdGF0ZUtleX1gO1xuXHRcdH1cblxuXHRcdHJldHVybiBzTmV3SGFzaDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpQXBwU3RhdGUgcGFydCBmcm9tIGEgaGFzaCAob3IgbnVsbCBpZiBub3QgZm91bmQpLlxuXHQgKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2hcblx0ICogQHJldHVybnMgVGhlIGlBcHBTdGF0ZSBwYXJ0IG9mIHRoZSBoYXNoXG5cdCAqL1xuXHRmaW5kQXBwU3RhdGVJbkhhc2goc0hhc2g6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuXHRcdGNvbnN0IGFBcHBTdGF0ZSA9IHNIYXNoLm1hdGNoKG5ldyBSZWdFeHAoYFxcXFw/Lioke2VudW1VUkxQYXJhbXMuSUFQUFNUQVRFUEFSQU19PShbXiZdKilgKSk7XG5cdFx0cmV0dXJuIGFBcHBTdGF0ZSAmJiBhQXBwU3RhdGUubGVuZ3RoID4gMSA/IGFBcHBTdGF0ZVsxXSA6IG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGdldERlY29kZWRXaW5kb3dIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGRlY29kZVVSSSh3aW5kb3cubG9jYXRpb24uaGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogUmF3IGluaXRpYWxpemF0aW9uIChmb3IgdW5pdCB0ZXN0cykuXG5cdCAqIEBwYXJhbSBvUm91dGVyIFRoZSByb3V0ZXIgdXNlZCBieSB0aGlzIHByb3h5XG5cdCAqL1xuXHRpbml0UmF3KG9Sb3V0ZXI6IFJvdXRlcik6IHZvaWQge1xuXHRcdHRoaXMuX29Sb3V0ZXIgPSBvUm91dGVyO1xuXHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeSA9IFtdO1xuXHRcdHRoaXMuX29OYXZpZ2F0aW9uR3VhcmQgPSBudWxsO1xuXG5cdFx0Y29uc3Qgc0N1cnJlbnRBcHBIYXNoID0gdGhpcy5nZXRIYXNoKCk7XG5cdFx0dGhpcy5fb01hbmFnZWRIaXN0b3J5LnB1c2godGhpcy5fZXh0cmFjdFN0YXRlRnJvbUhhc2goc0N1cnJlbnRBcHBIYXNoKSk7XG5cblx0XHR0aGlzLmFwcE5hbWUgPSB0aGlzLmdldEFwcE5hbWVGcm9tSGFzaCh0aGlzLmdldERlY29kZWRXaW5kb3dIYXNoKCkpO1xuXG5cdFx0Ly8gU2V0IHRoZSBpQXBwU3RhdGUgaWYgdGhlIGluaXRpYWwgaGFzaCBjb250YWlucyBvbmVcblx0XHR0aGlzLnNJQXBwU3RhdGVLZXkgPSB0aGlzLmZpbmRBcHBTdGF0ZUluSGFzaChzQ3VycmVudEFwcEhhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybiB0aGUgZnVsbCBhcHAtc3BlY2lmaWMgaGFzaCBwYXJ0IGZyb20gd2luZG93LmxvY2F0aW9uLmhhc2guXG5cdCAqXG5cdCAqIENvbXBhcmVkIHRvIHtAbGluayBnZXRIYXNofSB0aGlzIGZ1bmN0aW9uIGluY2x1ZGVzIHN1Yi1yb3V0ZXMgb2YgbmVzdGVkIGNvbXBvbmVudHMuXG5cdCAqIEByZXR1cm5zIFRoZSBhcHAtc3BlY2lmaWMgaGFzaCBwYXJ0IChpLmUuLCB3aXRob3V0IHRoZSBzaGVsbCBwYXJ0KSwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vbmUuXG5cdCAqL1xuXHRnZXRGdWxsSGFzaCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNwbGl0SGFzaCA9IHRoaXMuX29TaGVsbFNlcnZpY2VzLnNwbGl0SGFzaCh0aGlzLmdldERlY29kZWRXaW5kb3dIYXNoKCkpO1xuXG5cdFx0aWYgKFwiYXBwU3BlY2lmaWNSb3V0ZVwiIGluIHNwbGl0SGFzaCkge1xuXHRcdFx0cmV0dXJuIHNwbGl0SGFzaC5hcHBTcGVjaWZpY1JvdXRlPy5yZXBsYWNlKC9eJlxcLy8sIFwiXCIpID8/IFwiXCI7IC8vIHJlbW92ZSB0aGUgbGVhZGluZyBcIiYvXCJcblx0XHR9XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRnZXRIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCkgPz8gXCJcIjtcblx0fVxuXG5cdHByb3RlY3RlZCBnZXRBcHBOYW1lRnJvbUhhc2goaGFzaDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBzcGxpdEhhc2ggPSB0aGlzLl9vU2hlbGxTZXJ2aWNlcz8uc3BsaXRIYXNoKGhhc2gpIGFzIHsgc2hlbGxQYXJ0OiBzdHJpbmc7IGFwcFNwZWNpZmljUm91dGU6IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuXHRcdHJldHVybiBzcGxpdEhhc2g/LnNoZWxsUGFydCA/PyBcIlwiO1xuXHR9XG5cblx0aXNGb2N1c0ZvcmNlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fYkZvcmNlRm9jdXM7XG5cdH1cblxuXHRzZXRGb2N1c0ZvcmNlZChiRm9yY2VkOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5fYkZvcmNlRm9jdXMgPSBiRm9yY2VkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0cyB0aGUgaW50ZXJuYWwgdmFyaWFibGUgc0lBcHBTdGF0ZUtleS5cblx0ICpcblx0ICovXG5cdHJlbW92ZUlBcHBTdGF0ZUtleSgpOiB2b2lkIHtcblx0XHR0aGlzLnNJQXBwU3RhdGVLZXkgPSBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVSZXN0b3JlSGlzdG9yeUZsYWdGcm9tSGFzaChoYXNoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBoYXNoLnJlcGxhY2UoXCJyZXN0b3JlSGlzdG9yeT10cnVlJlwiLCBcIlwiKS5yZXBsYWNlKC9bPyZdcmVzdG9yZUhpc3Rvcnk9dHJ1ZS8sIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmljIGhhc2guXG5cdCAqIEBwYXJhbSBzSGFzaCBIYXNoIHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gYlByZXNlcnZlSGlzdG9yeSBJZiBzZXQgdG8gdHJ1ZSwgbm9uLWFuY2VzdG9yIGVudHJpZXMgaW4gaGlzdG9yeSB3aWxsIGJlIHJldGFpbmVkXG5cdCAqIEBwYXJhbSBiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlIElmIHNldCB0byB0cnVlLCBjYWNoZSBwcmVzZXJ2YXRpb24gbWVjaGFuaXNtIGlzIGRpc2FibGVkIGZvciB0aGUgY3VycmVudCBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBiRm9yY2VGb2N1cyBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGxvZ2ljIHRvIHNldCB0aGUgZm9jdXMgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWQgd2lsbCBiZSB0cmlnZ2VyZWQgKG9uUGFnZVJlYWR5KVxuXHQgKiBAcGFyYW0gYlByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXIgSWYgbm90IHNldCB0byBmYWxzZSwgdGhlIGJhY2sgbmF2aWdhdGlvbiBpcyBzZXQgdG8gdW5kZWZpbmVkXG5cdCAqIEBwYXJhbSBza2lwSGFzaEd1YXJkQ2hlY2tcblx0ICogQHJldHVybnMgUHJvbWlzZSAocmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWQpIHRoYXQgcmV0dXJucyAndHJ1ZScgaWYgYSBuYXZpZ2F0aW9uIHRvb2sgcGxhY2UsICdmYWxzZScgaWYgdGhlIG5hdmlnYXRpb24gZGlkbid0IGhhcHBlblxuXHQgKi9cblx0YXN5bmMgbmF2VG9IYXNoKFxuXHRcdHNIYXNoOiBzdHJpbmcsXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0YkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZT86IGJvb2xlYW4sXG5cdFx0YkZvcmNlRm9jdXM/OiBib29sZWFuLFxuXHRcdGJQcmVzZXJ2ZVNoZWxsQmFja05hdmlnYXRpb25IYW5kbGVyPzogYm9vbGVhbixcblx0XHRza2lwSGFzaEd1YXJkQ2hlY2s/OiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHNIYXNoID0gc0hhc2guc3RhcnRzV2l0aChcIi9cIikgPyBzSGFzaC5zdWJzdHJpbmcoMSkgOiBzSGFzaDtcblx0XHRpZiAoYlByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXIgIT09IGZhbHNlKSB7XG5cdFx0XHRhd2FpdCB0aGlzLl9vU2hlbGxTZXJ2aWNlcy5zZXRCYWNrTmF2aWdhdGlvbigpO1xuXHRcdH1cblx0XHRzSGFzaCA9IHRoaXMucmVtb3ZlUmVzdG9yZUhpc3RvcnlGbGFnRnJvbUhhc2goc0hhc2gpO1xuXHRcdGlmICh0aGlzLl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbikge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uLndhaXRGb3IoKS50aGVuKGFzeW5jICgpID0+IHtcblx0XHRcdFx0dGhpcy5fb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9pbnRlcm5hbE5hdlRvSGFzaChzSGFzaCwgYlByZXNlcnZlSGlzdG9yeSwgYkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZSwgYkZvcmNlRm9jdXMsIHNraXBIYXNoR3VhcmRDaGVjayk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuX2JBY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvKSB7XG5cdFx0XHRcdHRoaXMud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5faW50ZXJuYWxOYXZUb0hhc2goc0hhc2gsIGJQcmVzZXJ2ZUhpc3RvcnksIGJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGUsIGJGb3JjZUZvY3VzLCBza2lwSGFzaEd1YXJkQ2hlY2spO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9pbnRlcm5hbE5hdlRvSGFzaChcblx0XHRzSGFzaDogc3RyaW5nLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGU/OiBib29sZWFuLFxuXHRcdGJGb3JjZUZvY3VzPzogYm9vbGVhbixcblx0XHRza2lwSGFzaEd1YXJkQ2hlY2s/OiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdC8vIEFkZCB0aGUgYXBwIHN0YXRlIGluIHRoZSBoYXNoIGlmIG5lZWRlZFxuXHRcdGlmICh0aGlzLmZjbEVuYWJsZWQgJiYgdGhpcy5zSUFwcFN0YXRlS2V5ICYmICF0aGlzLmZpbmRBcHBTdGF0ZUluSGFzaChzSGFzaCkpIHtcblx0XHRcdHNIYXNoID0gdGhpcy5zZXRBcHBTdGF0ZUluSGFzaChzSGFzaCwgdGhpcy5zSUFwcFN0YXRlS2V5KTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuY2hlY2tIYXNoV2l0aEd1YXJkKHNIYXNoKSAmJiAhKHNraXBIYXNoR3VhcmRDaGVjayA/PyBmYWxzZSkpIHtcblx0XHRcdGlmICghdGhpcy5vUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRcdFx0dGhpcy5vUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZSBoYXZlIHRvIHVzZSBhIGNvbmZpcm0gaGVyZSBmb3IgVUkgY29uc2lzdGVuY3kgcmVhc29ucywgYXMgd2l0aCBzb21lIHNjZW5hcmlvc1xuXHRcdFx0Ly8gaW4gdGhlIEVkaXRGbG93IHdlIHJlbHkgb24gYSBVSTUgbWVjaGFuaXNtIHRoYXQgZGlzcGxheXMgYSBjb25maXJtIGRpYWxvZy5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hbGVydFxuXHRcdFx0aWYgKCFjb25maXJtKHRoaXMub1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX1JPVVRFUl9QUk9YWV9TQVBGRV9FWElUX05PVFNBVkVEX01FU1NBR0VcIikpKSB7XG5cdFx0XHRcdC8vIFRoZSB1c2VyIGNsaWNrZWQgb24gQ2FuY2VsIC0tPiBjYW5jZWwgbmF2aWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYklzR3VhcmRDcm9zc0FsbG93ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEluIGNhc2UgdGhlIG5hdmlnYXRpb24gd2lsbCBjYXVzZSBhIG5ldyB2aWV3IHRvIGJlIGRpc3BsYXllZCwgd2UgZm9yY2UgdGhlIGZvY3VzXG5cdFx0Ly8gSS5lLiBpZiB0aGUga2V5cyBmb3IgdGhlIGhhc2ggd2UncmUgbmF2aWdhdGluZyB0byBpcyBhIHN1cGVyc2V0IG9mIHRoZSBjdXJyZW50IGhhc2gga2V5cy5cblx0XHRjb25zdCBvTmV3U3RhdGUgPSB0aGlzLl9leHRyYWN0U3RhdGVGcm9tSGFzaChzSGFzaCk7XG5cdFx0aWYgKCF0aGlzLl9iRm9yY2VGb2N1cykge1xuXHRcdFx0Ly8gSWYgdGhlIGZvY3VzIHdhcyBhbHJlYWR5IGZvcmNlZCwga2VlcCBpdFxuXHRcdFx0Y29uc3QgYUN1cnJlbnRIYXNoS2V5cyA9IFJvdXRlclByb3h5LmV4dHJhY3RFbnRpdHlTZXRzRnJvbUhhc2godGhpcy5nZXRIYXNoKCkpO1xuXHRcdFx0dGhpcy5fYkZvcmNlRm9jdXMgPVxuXHRcdFx0XHRiRm9yY2VGb2N1cyB8fFxuXHRcdFx0XHQoYUN1cnJlbnRIYXNoS2V5cy5sZW5ndGggPCBvTmV3U3RhdGUua2V5cy5sZW5ndGggJiZcblx0XHRcdFx0XHRhQ3VycmVudEhhc2hLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXk6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGtleSA9PT0gb05ld1N0YXRlLmtleXNbaW5kZXhdO1xuXHRcdFx0XHRcdH0pKTtcblx0XHR9XG5cblx0XHRjb25zdCBvSGlzdG9yeUFjdGlvbiA9IHRoaXMuX3B1c2hOZXdTdGF0ZShvTmV3U3RhdGUsIGZhbHNlLCBiUHJlc2VydmVIaXN0b3J5LCBiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlKTtcblx0XHR0aGlzLnN0b3JlRm9jdXNJbmZvRm9yQ3VycmVudEhhc2goKTtcblxuXHRcdHJldHVybiB0aGlzLl9yZWJ1aWxkQnJvd3Nlckhpc3Rvcnkob0hpc3RvcnlBY3Rpb24sIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgYnJvd3NlciBoaXN0b3J5IGlmIGVudHJpZXMgaGF2ZSBiZWVuIGFkZGVkIHdpdGhvdXQgdXNpbmcgdGhlIFJvdXRlclByb3h5LlxuXHQgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBoaXN0b3J5IGFjY29yZGluZ2x5LlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgb25jZSB0aGUgaGlzdG9yeSBpcyByZWJ1aWx0XG5cdCAqL1xuXHRhc3luYyByZXN0b3JlSGlzdG9yeSgpOiBQcm9taXNlPHZvaWQgfCBib29sZWFuPiB7XG5cdFx0aWYgKHRoaXMuX2JBcHBseVJlc3RvcmUpIHtcblx0XHRcdHRoaXMuX2JBcHBseVJlc3RvcmUgPSBmYWxzZTtcblx0XHRcdGxldCBzVGFyZ2V0SGFzaCA9IHRoaXMuZ2V0SGFzaCgpO1xuXHRcdFx0c1RhcmdldEhhc2ggPSB0aGlzLnJlbW92ZVJlc3RvcmVIaXN0b3J5RmxhZ0Zyb21IYXNoKHNUYXJnZXRIYXNoKTtcblx0XHRcdGNvbnN0IG9OZXdTdGF0ZSA9IHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNUYXJnZXRIYXNoKTtcblxuXHRcdFx0Y29uc3Qgb0hpc3RvcnlBY3Rpb24gPSB0aGlzLl9wdXNoTmV3U3RhdGUob05ld1N0YXRlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7XG5cblx0XHRcdHRoaXMucmVzdG9yZUhpc3RvcnlUcmlnZ2VyZWQgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIHRoaXMuX3JlYnVpbGRCcm93c2VySGlzdG9yeShvSGlzdG9yeUFjdGlvbiwgdHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIFJlc3RvcmVIaXN0b3J5IGhhcyBiZWVuIHRyaWdnZXJlZCBvbiB0aGUgUm91dGVyUHJveHkuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgaXQgaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdCAqL1xuXHRjaGVja1Jlc3RvcmVIaXN0b3J5V2FzVHJpZ2dlcmVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnJlc3RvcmVIaXN0b3J5VHJpZ2dlcmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0cyB0aGUgZmxhZyB0aGF0IHNheXMgaWYgUmVzdG9yZUhpc3RvcnkgaGFzIGJlZW4gdHJpZ2dlcmVkIG9uIHRoZSBSb3V0ZXJQcm94eS5cblx0ICovXG5cdHJlc2V0UmVzdG9yZUhpc3RvcnlGbGFnKCk6IHZvaWQge1xuXHRcdHRoaXMucmVzdG9yZUhpc3RvcnlUcmlnZ2VyZWQgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgYmFjayBpbiB0aGUgaGlzdG9yeS5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqL1xuXHRhc3luYyBuYXZCYWNrKCk6IFByb21pc2U8dm9pZCB8IGJvb2xlYW4+IHtcblx0XHRjb25zdCBzQ3VycmVudEhhc2ggPSB0aGlzLmdldEhhc2goKTtcblx0XHRsZXQgc1ByZXZpb3VzSGFzaDtcblxuXHRcdC8vIExvb2sgZm9yIHRoZSBjdXJyZW50IGhhc2ggaW4gdGhlIG1hbmFnZWQgaGlzdG9yeVxuXHRcdGZvciAobGV0IGkgPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuXHRcdFx0aWYgKHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtpXS5oYXNoID09PSBzQ3VycmVudEhhc2gpIHtcblx0XHRcdFx0c1ByZXZpb3VzSGFzaCA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtpIC0gMV0uaGFzaDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHNQcmV2aW91c0hhc2gpIHtcblx0XHRcdHJldHVybiB0aGlzLm5hdlRvSGFzaChzUHJldmlvdXNIYXNoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2UgY291bGRuJ3QgZmluZCBhIHByZXZpb3VzIGhhc2ggaW4gaGlzdG9yeVxuXHRcdFx0Ly8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gbmF2aWdhdGluZyBmcm9tIGEgdHJhbnNpZW50IGhhc2ggaW4gYSBjcmVhdGUgYXBwLCBhbmRcblx0XHRcdC8vIGluIHRoYXQgY2FzZSBoaXN0b3J5LmJhY2sgd291bGQgZ28gYmFjayB0byB0aGUgRkxQXG5cdFx0XHR3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIHJvdXRlIHdpdGggcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIHNSb3V0ZU5hbWUgVGhlIHJvdXRlIG5hbWUgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBvUGFyYW1ldGVycyBQYXJhbWV0ZXJzIGZvciB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMubm9QcmVzZXJ2YXRpb25DYWNoZVxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMuYklzU3RpY2t5TW9kZVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWRcblx0ICovXG5cdGFzeW5jIG5hdlRvKHNSb3V0ZU5hbWU6IHN0cmluZywgb1BhcmFtZXRlcnM/OiB7IG5vUHJlc2VydmF0aW9uQ2FjaGU/OiBib29sZWFuOyBiSXNTdGlja3lNb2RlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Y29uc3Qgc0hhc2ggPSB0aGlzLl9vUm91dGVyLmdldFVSTChzUm91dGVOYW1lLCBvUGFyYW1ldGVycyk7XG5cdFx0cmV0dXJuIHRoaXMubmF2VG9IYXNoKHNIYXNoISwgZmFsc2UsIG9QYXJhbWV0ZXJzPy5ub1ByZXNlcnZhdGlvbkNhY2hlLCBmYWxzZSwgIW9QYXJhbWV0ZXJzPy5iSXNTdGlja3lNb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGl0cyB0aGUgY3VycmVudCBhcHAgYnkgbmF2aWdhdGluZyBiYWNrXG5cdCAqIHRvIHRoZSBwcmV2aW91cyBhcHAgKGlmIGFueSkgb3IgdGhlIEZMUC5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gd2UgZXhpdCB0aGUgYXBwXG5cdCAqL1xuXHRleGl0RnJvbUFwcCgpOiB2b2lkIHtcblx0XHRyZXR1cm4gdGhpcy5fb1NoZWxsU2VydmljZXMuYmFja1RvUHJldmlvdXNBcHAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIGhhc2ggY2FuIGhhdmUgYW4gaW1wYWN0IG9uIHRoZSBjdXJyZW50IHN0YXRlXG5cdCAqIGkuZS4gaWYgdGhlIGhhc2ggaXMgZXF1YWwsIGNvbXBhdGlibGUgb3IgYW4gYW5jZXN0b3Igb2YgdGhlIGN1cnJlbnQgc3RhdGUuXG5cdCAqIEBwYXJhbSBzSGFzaCBgdHJ1ZWAgaWYgdGhlcmUgaXMgYW4gaW1wYWN0XG5cdCAqIEByZXR1cm5zIElmIHRoZXJlIGlzIGFuIGltcGFjdFxuXHQgKi9cblx0aXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNIYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRpZiAoc0hhc2hbMF0gPT09IFwiL1wiKSB7XG5cdFx0XHRzSGFzaCA9IHNIYXNoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cdFx0Y29uc3Qgb0xvY2FsR3VhcmQgPSBjcmVhdGVHdWFyZEZyb21IYXNoKHNIYXNoKTtcblx0XHRyZXR1cm4gb0xvY2FsR3VhcmQuY2hlY2sodGhpcy5nZXRIYXNoKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIG5hdmlnYXRpb24gaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5cblx0ICogQHJldHVybnMgYGZhbHNlYCBpZiBhIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIGluIHRoZSBSb3V0ZXJQcm94eSBhbmQgaXMgbm90IHlldCBmaW5hbGl6ZWRcblx0ICovXG5cdGlzTmF2aWdhdGlvbkZpbmFsaXplZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gIXRoaXMuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGxhc3Qgc3RhdGUgYXMgYSBndWFyZC5cblx0ICogRWFjaCBmdXR1cmUgbmF2aWdhdGlvbiB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCB0aGlzIGd1YXJkLCBhbmQgYSBjb25maXJtYXRpb24gZGlhbG9nIHdpbGxcblx0ICogYmUgZGlzcGxheWVkIGJlZm9yZSB0aGUgbmF2aWdhdGlvbiBnb2VzIHRvIGFuIGFuY2VzdG9yIG9mIHRoZSBndWFyZC5cblx0ICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoIGZvciB0aGUgZ3VhcmQuXG5cdCAqIEBwYXJhbSBbaGFzaFRyYWtlcl0gT3B0aW9uYWwgaGFzaCB0cmFja2VyIHVzZWQgZm9yIGFkZGl0aW9uYWwgZ3VhcmQgY2hlY2tzLlxuXHQgKi9cblx0c2V0TmF2aWdhdGlvbkd1YXJkKHNIYXNoOiBzdHJpbmcsIGhhc2hUcmFrZXI/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLl9vTmF2aWdhdGlvbkd1YXJkID0gY3JlYXRlR3VhcmRGcm9tSGFzaChzSGFzaCwgaGFzaFRyYWtlcik7XG5cdFx0dGhpcy5iSXNHdWFyZENyb3NzQWxsb3dlZCA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc2FibGVzIHRoZSBuYXZpZ2F0aW9uIGd1YXJkLlxuXHQgKi9cblx0ZGlzY2FyZE5hdmlnYXRpb25HdWFyZCgpOiB2b2lkIHtcblx0XHR0aGlzLl9vTmF2aWdhdGlvbkd1YXJkID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIG5hdmlnYXRpb24gZ3VhcmQuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBuYXZpZ2F0aW5nIGd1YXJkIGlzIGF2YWlsYWJsZVxuXHQgKi9cblx0aGFzTmF2aWdhdGlvbkd1YXJkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9vTmF2aWdhdGlvbkd1YXJkICE9PSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRlc3RzIGEgaGFzaCBhZ2FpbnN0IHRoZSBuYXZpZ2F0aW9uIGd1YXJkLlxuXHQgKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2ggdG8gYmUgdGVzdGVkXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBuYXZpZ2F0aW5nIHRvIHRoZSBoYXNoIGRvZXNuJ3QgY3Jvc3MgdGhlIGd1YXJkXG5cdCAqL1xuXHRjaGVja0hhc2hXaXRoR3VhcmQoc0hhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9vTmF2aWdhdGlvbkd1YXJkID09PSBudWxsIHx8IHRoaXMuX29OYXZpZ2F0aW9uR3VhcmQuY2hlY2soc0hhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgdXNlciBhbGxvd2VkIHRoZSBuYXZpZ2F0aW9uIGd1YXJkIHRvIGJlIGNyb3NzZWQuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBjcm9zc2luZyB0aGUgZ3VhcmQgaGFzIGJlZW4gYWxsb3dlZCBieSB0aGUgdXNlclxuXHQgKi9cblx0aXNHdWFyZENyb3NzQWxsb3dlZEJ5VXNlcigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5iSXNHdWFyZENyb3NzQWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBY3RpdmF0ZXMgdGhlIHN5bmNocm9uaXphdGlvbiBmb3Igcm91dGVNYXRjaGVkRXZlbnQuXG5cdCAqIFRoZSBuZXh0IE5hdlRvSGFzaCBjYWxsIHdpbGwgY3JlYXRlIGEgU3luY2hyb25pemF0aW9uIG9iamVjdCB0aGF0IHdpbGwgYmUgcmVzb2x2ZWRcblx0ICogYnkgdGhlIGNvcnJlc3BvbmRpbmcgb25Sb3V0ZU1hdGNoZWQgZXZlbnQsIHByZXZlbnRpbmcgYW5vdGhlciBOYXZUb0hhc2ggdG8gaGFwcGVuIGluIHBhcmFsbGVsLlxuXHQgKi9cblx0YWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uKCk6IHZvaWQge1xuXHRcdHRoaXMuX2JBY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNvbHZlIHRoZSByb3V0ZU1hdGNoIHN5bmNocm9uaXphdGlvbiBvYmplY3QsIHVubG9ja2luZyBwb3RlbnRpYWwgcGVuZGluZyBOYXZUb0hhc2ggY2FsbHMuXG5cdCAqL1xuXHRyZXNvbHZlUm91dGVNYXRjaCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24pIHtcblx0XHRcdHRoaXMuX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWFrZXMgc3VyZSBubyBuYXZpZ2F0aW9uIGNhbiBoYXBwZW4gYmVmb3JlIGEgcm91dGVNYXRjaCBoYXBwZW5lZC5cblx0ICovXG5cdHdhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiA9IG5ldyBTeW5jaHJvbml6YXRpb24oKTtcblx0XHR0aGlzLl9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybyA9IGZhbHNlO1xuXHR9XG5cblx0c3RhdGljIGV4dHJhY3RFbnRpdHlTZXRzRnJvbUhhc2goc0hhc2g6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcblx0XHRpZiAoc0hhc2ggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c0hhc2ggPSBcIlwiO1xuXHRcdH1cblx0XHRjb25zdCBzSGFzaE5vUGFyYW1zID0gc0hhc2guc3BsaXQoXCI/XCIpWzBdOyAvLyByZW1vdmUgcGFyYW1zXG5cdFx0Y29uc3QgYVRva2VucyA9IHNIYXNoTm9QYXJhbXMuc3BsaXQoXCIvXCIpO1xuXHRcdGNvbnN0IG5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdFx0YVRva2Vucy5mb3JFYWNoKChzVG9rZW4pID0+IHtcblx0XHRcdGlmIChzVG9rZW4ubGVuZ3RoKSB7XG5cdFx0XHRcdG5hbWVzLnB1c2goc1Rva2VuLnNwbGl0KFwiKFwiKVswXSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gbmFtZXM7XG5cdH1cblxuXHQvKipcblx0ICogQnVpbGRzIGEgc3RhdGUgZnJvbSBhIGhhc2guXG5cdCAqIEBwYXJhbSBzSGFzaCBUaGUgaGFzaCB0byBiZSB1c2VkIGFzIGVudHJ5XG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0ZVxuXHQgKi9cblx0X2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNIYXNoOiBzdHJpbmcpOiBSb3V0ZXJTdGF0ZSB7XG5cdFx0aWYgKHNIYXNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHNIYXNoID0gXCJcIjtcblx0XHR9XG5cblx0XHRjb25zdCBvU3RhdGU6IFJvdXRlclN0YXRlID0ge1xuXHRcdFx0a2V5czogUm91dGVyUHJveHkuZXh0cmFjdEVudGl0eVNldHNGcm9tSGFzaChzSGFzaCksXG5cdFx0XHRoYXNoOiBzSGFzaCxcblx0XHRcdHNjcmVlbk1vZGU6IDAgLy8gd2lsbCBiZSB1cGRhdGVkIGluIGEgc2VjXG5cdFx0fTtcblxuXHRcdC8vIFJldHJpZXZlIGxheW91dCAoaWYgYW55KVxuXHRcdGNvbnN0IGFMYXlvdXQgPSBzSGFzaC5tYXRjaChuZXcgUmVnRXhwKGBcXFxcPy4qJHtlbnVtVVJMUGFyYW1zLkxBWU9VVFBBUkFNfT0oW14mXSopYCkpO1xuXHRcdG9TdGF0ZS5zTGF5b3V0ID0gYUxheW91dCAmJiBhTGF5b3V0Lmxlbmd0aCA+IDEgPyBhTGF5b3V0WzFdIDogdW5kZWZpbmVkO1xuXHRcdGlmIChvU3RhdGUuc0xheW91dCA9PT0gXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCIpIHtcblx0XHRcdG9TdGF0ZS5zY3JlZW5Nb2RlID0gMTtcblx0XHR9IGVsc2UgaWYgKG9TdGF0ZS5zTGF5b3V0ID09PSBcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIikge1xuXHRcdFx0b1N0YXRlLnNjcmVlbk1vZGUgPSAyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvU3RhdGUuc2NyZWVuTW9kZSA9IDA7XG5cdFx0fVxuXHRcdHJldHVybiBvU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIG5ldyBzdGF0ZSBpbnRvIHRoZSBpbnRlcm5hbCBoaXN0b3J5IHN0cnVjdHVyZS5cblx0ICogTWFrZXMgc3VyZSB0aGlzIG5ldyBzdGF0ZSBpcyBhZGRlZCBhZnRlciBhbiBhbmNlc3Rvci5cblx0ICogQWxzbyBzZXRzIHRoZSBpQXBwU3RhdGUga2V5IGluIHRoZSB3aG9sZSBoaXN0b3J5LlxuXHQgKiBAcGFyYW0gb05ld1N0YXRlIFRoZSBuZXcgc3RhdGUgdG8gYmUgYWRkZWRcblx0ICogQHBhcmFtIGJSZWJ1aWxkT25seSBgdHJ1ZWAgaWYgd2UncmUgcmVidWlsZGluZyB0aGUgaGlzdG9yeSBhZnRlciBhIHNoZWxsIG1lbnUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gYlByZXNlcnZlSGlzdG9yeSBJZiBzZXQgdG8gdHJ1ZSwgbm9uLWFuY2VzdG9yIGVudHJpZXMgaW4gaGlzdG9yeSB3aWxsIGJlIHJldGFpbmVkXG5cdCAqIEBwYXJhbSBiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb24gRGlzYWJsZSB0aGUgbWVjaGFuaXNtIHRvIHJldGFpbmVkIG1hcmtlZCBlbnRyaWVzIGluIGNhY2hlXG5cdCAqIEByZXR1cm5zIFRoZSBuZXcgc3RhdGVcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfcHVzaE5ld1N0YXRlKFxuXHRcdG9OZXdTdGF0ZTogUm91dGVyU3RhdGUsXG5cdFx0YlJlYnVpbGRPbmx5OiBib29sZWFuLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGJEaXNhYmxlSGlzdG9yeVByZXNlcnZhdGlvbj86IGJvb2xlYW5cblx0KTogSHlzdG9yeUFjdGlvbiB7XG5cdFx0Y29uc3Qgc0N1cnJlbnRIYXNoID0gdGhpcy5yZW1vdmVSZXN0b3JlSGlzdG9yeUZsYWdGcm9tSGFzaCh0aGlzLmdldEhhc2goKSk7XG5cdFx0bGV0IGxhc3RJbmRleCA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxO1xuXHRcdGxldCBpUG9wQ291bnQgPSBiUmVidWlsZE9ubHkgPyAxIDogMDtcblxuXHRcdC8vIDEuIERvIHNvbWUgY2xlYW51cCBpbiB0aGUgbWFuYWdlZCBoaXN0b3J5IDogaW4gY2FzZSB0aGUgdXNlciBoYXMgbmF2aWdhdGVkIGJhY2sgaW4gdGhlIGJyb3dzZXIgaGlzdG9yeSwgd2UgbmVlZCB0byByZW1vdmVcblx0XHQvLyB0aGUgc3RhdGVzIGFoZWFkIGluIGhpc3RvcnkgYW5kIG1ha2Ugc3VyZSB0aGUgdG9wIHN0YXRlIGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IHBhZ2Vcblx0XHQvLyBXZSBkb24ndCBkbyB0aGF0IHdoZW4gcmVzdG9yaW5nIHRoZSBoaXN0b3J5LCBhcyB0aGUgY3VycmVudCBzdGF0ZSBoYXMgYmVlbiBhZGRlZCBvbiB0b3Agb2YgdGhlIGJyb3dzZXIgaGlzdG9yeVxuXHRcdC8vIGFuZCBpcyBub3QgcmVmbGVjdGVkIGluIHRoZSBtYW5hZ2VkIGhpc3Rvcnlcblx0XHRpZiAoIWJSZWJ1aWxkT25seSkge1xuXHRcdFx0d2hpbGUgKGxhc3RJbmRleCA+PSAwICYmIHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtsYXN0SW5kZXhdLmhhc2ggIT09IHNDdXJyZW50SGFzaCkge1xuXHRcdFx0XHR0aGlzLl9vTWFuYWdlZEhpc3RvcnkucG9wKCk7XG5cdFx0XHRcdGxhc3RJbmRleC0tO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHQvLyBXZSBjb3VsZG4ndCBmaW5kIHRoZSBjdXJyZW50IGxvY2F0aW9uIGluIHRoZSBoaXN0b3J5LiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBicm93c2VyIHJlbG9hZFxuXHRcdFx0XHQvLyBoYXBwZW5lZCwgY2F1c2luZyBhIHJlaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZWQgaGlzdG9yeS5cblx0XHRcdFx0Ly8gSW4gdGhhdCBjYXNlLCB3ZSB1c2UgdGhlIGN1cnJlbnQgbG9jYXRpb24gYXMgdGhlIG5ldyBzdGFydGluZyBwb2ludCBpbiB0aGUgbWFuYWdlZCBoaXN0b3J5XG5cdFx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5wdXNoKHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNDdXJyZW50SGFzaCkpO1xuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHsgZmVMZXZlbDogMCB9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gMi4gTWFyayB0aGUgdG9wIHN0YXRlIGFzIHByZXNlcnZlZCBpZiByZXF1aXJlZFxuXHRcdGlmIChiUHJlc2VydmVIaXN0b3J5ICYmICFiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb24pIHtcblx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV0ucHJlc2VydmVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyAzLiBUaGVuIHBvcCBhbGwgc3RhdGVzIHVudGlsIHdlIGZpbmQgYW4gYW5jZXN0b3Igb2YgdGhlIG5ldyBzdGF0ZSwgb3Igd2UgZmluZCBhIHN0YXRlIHRoYXQgbmVlZCB0byBiZSBwcmVzZXJ2ZWRcblx0XHRsZXQgb0xhc3RSZW1vdmVkSXRlbTtcblx0XHR3aGlsZSAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG9Ub3BTdGF0ZSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb24gfHwgIW9Ub3BTdGF0ZS5wcmVzZXJ2ZWQpICYmXG5cdFx0XHRcdHRoaXMuX2NvbXBhcmVDYWNoZVN0YXRlcyhvVG9wU3RhdGUsIG9OZXdTdGF0ZSkgIT09IGVudW1TdGF0ZS5BTkNFU1RPUlxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRoZSB0b3Agc3RhdGUgaXMgbm90IGFuIGFuY2VzdG9yIG9mIG9OZXdTdGF0ZSBhbmQgaXMgbm90IHByZXNlcnZlZCAtLT4gd2UgY2FuIHBvcCBpdFxuXHRcdFx0XHRvTGFzdFJlbW92ZWRJdGVtID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5LnBvcCgpO1xuXHRcdFx0XHRpUG9wQ291bnQrKztcblx0XHRcdH0gZWxzZSBpZiAob1RvcFN0YXRlLnByZXNlcnZlZCAmJiByZW1vdmVBcHBTdGF0ZUluSGFzaChvVG9wU3RhdGUuaGFzaCkgPT09IHJlbW92ZUFwcFN0YXRlSW5IYXNoKG9OZXdTdGF0ZS5oYXNoKSkge1xuXHRcdFx0XHQvLyBXZSB0cnkgdG8gYWRkIGEgc3RhdGUgdGhhdCBpcyBhbHJlYWR5IGluIGNhY2hlIChkdWUgdG8gcHJlc2VydmVkIGZsYWcpIGJ1dCB3aXRoIGEgZGlmZmVyZW50IGlhcHAtc3RhdGVcblx0XHRcdFx0Ly8gLS0+IHdlIHNob3VsZCBkZWxldGUgdGhlIHByZXZpb3VzIGVudHJ5IChpdCB3aWxsIGJlIGxhdGVyIHJlcGxhY2VkIGJ5IHRoZSBuZXcgb25lKSBhbmQgc3RvcCBwb3BwaW5nXG5cdFx0XHRcdG9MYXN0UmVtb3ZlZEl0ZW0gPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkucG9wKCk7XG5cdFx0XHRcdGlQb3BDb3VudCsrO1xuXHRcdFx0XHRvTmV3U3RhdGUucHJlc2VydmVkID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicmVhazsgLy8gQW5jZXN0b3Igb3IgcHJlc2VydmVkIHN0YXRlIGZvdW5kIC0tPiB3ZSBzdG9wIHBvcHBpbmcgb3V0IHN0YXRlc1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIDQuIGlBcHBTdGF0ZSBtYW5hZ2VtZW50XG5cdFx0dGhpcy5zSUFwcFN0YXRlS2V5ID0gdGhpcy5maW5kQXBwU3RhdGVJbkhhc2gob05ld1N0YXRlLmhhc2gpO1xuXHRcdGlmICghdGhpcy5mY2xFbmFibGVkICYmIG9MYXN0UmVtb3ZlZEl0ZW0pIHtcblx0XHRcdGNvbnN0IHNQcmV2aW91c0lBcHBTdGF0ZUtleSA9IHRoaXMuZmluZEFwcFN0YXRlSW5IYXNoKG9MYXN0UmVtb3ZlZEl0ZW0uaGFzaCk7XG5cdFx0XHRjb25zdCBvQ29tcGFyaXNvblN0YXRlUmVzdWx0ID0gdGhpcy5fY29tcGFyZUNhY2hlU3RhdGVzKG9MYXN0UmVtb3ZlZEl0ZW0sIG9OZXdTdGF0ZSk7XG5cdFx0XHQvLyBpZiBjdXJyZW50IHN0YXRlIGRvZXNuJ3QgY29udGFpbiBhIGktYXBwc3RhdGUgYW5kIHRoaXMgc3RhdGUgc2hvdWxkIHJlcGxhY2UgYSBzdGF0ZSBjb250YWluaW5nIGEgaUFwcFN0YXRlXG5cdFx0XHQvLyB0aGVuIHRoZSBwcmV2aW91cyBpQXBwU3RhdGUgaXMgcHJlc2VydmVkXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCF0aGlzLnNJQXBwU3RhdGVLZXkgJiZcblx0XHRcdFx0c1ByZXZpb3VzSUFwcFN0YXRlS2V5ICYmXG5cdFx0XHRcdChvQ29tcGFyaXNvblN0YXRlUmVzdWx0ID09PSBlbnVtU3RhdGUuRVFVQUwgfHwgb0NvbXBhcmlzb25TdGF0ZVJlc3VsdCA9PT0gZW51bVN0YXRlLkNPTVBBVElCTEUpXG5cdFx0XHQpIHtcblx0XHRcdFx0b05ld1N0YXRlLmhhc2ggPSB0aGlzLnNldEFwcFN0YXRlSW5IYXNoKG9OZXdTdGF0ZS5oYXNoLCBzUHJldmlvdXNJQXBwU3RhdGVLZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIDUuIE5vdyB3ZSBjYW4gcHVzaCB0aGUgc3RhdGUgYXQgdGhlIHRvcCBvZiB0aGUgaW50ZXJuYWwgaGlzdG9yeVxuXHRcdGNvbnN0IGJIYXNTYW1lSGFzaCA9IG9MYXN0UmVtb3ZlZEl0ZW0gJiYgb05ld1N0YXRlLmhhc2ggPT09IG9MYXN0UmVtb3ZlZEl0ZW0uaGFzaDtcblx0XHRpZiAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDFdLmhhc2ggIT09IG9OZXdTdGF0ZS5oYXNoKSB7XG5cdFx0XHR0aGlzLl9vTWFuYWdlZEhpc3RvcnkucHVzaChvTmV3U3RhdGUpO1xuXHRcdFx0aWYgKG9MYXN0UmVtb3ZlZEl0ZW0gJiYgcmVtb3ZlQXBwU3RhdGVJbkhhc2gob0xhc3RSZW1vdmVkSXRlbS5oYXNoKSA9PT0gcmVtb3ZlQXBwU3RhdGVJbkhhc2gob05ld1N0YXRlLmhhc2gpKSB7XG5cdFx0XHRcdG9OZXdTdGF0ZS5mb2N1c0NvbnRyb2xJZCA9IG9MYXN0UmVtb3ZlZEl0ZW0uZm9jdXNDb250cm9sSWQ7XG5cdFx0XHRcdG9OZXdTdGF0ZS5zZWNvbmRhcnlGb2N1c0NvbnRyb2xJZCA9IG9MYXN0UmVtb3ZlZEl0ZW0uc2Vjb25kYXJ5Rm9jdXNDb250cm9sSWQ7XG5cdFx0XHRcdG9OZXdTdGF0ZS5mb2N1c0luZm8gPSBvTGFzdFJlbW92ZWRJdGVtLmZvY3VzSW5mbztcblx0XHRcdFx0b05ld1N0YXRlLnNlY29uZGFyeUZvY3VzSW5mbyA9IG9MYXN0UmVtb3ZlZEl0ZW0uc2Vjb25kYXJ5Rm9jdXNJbmZvO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIDYuIERldGVybWluZSB3aGljaCBhY3Rpb25zIHRvIGRvIG9uIHRoZSBoaXN0b3J5XG5cdFx0aWYgKGlQb3BDb3VudCA9PT0gMCkge1xuXHRcdFx0Ly8gTm8gc3RhdGUgd2FzIHBvcHBlZCAtLT4gYXBwZW5kXG5cdFx0XHRyZXR1cm4geyB0eXBlOiBcImFwcGVuZFwiIH07XG5cdFx0fSBlbHNlIGlmIChpUG9wQ291bnQgPT09IDEpIHtcblx0XHRcdC8vIE9ubHkgMSBzdGF0ZSB3YXMgcG9wcGVkIC0tPiByZXBsYWNlIGN1cnJlbnQgaGFzaCB1bmxlc3MgaGFzaCBpcyB0aGUgc2FtZSAodGhlbiBub3RoaW5nIHRvIGRvKVxuXHRcdFx0cmV0dXJuIGJIYXNTYW1lSGFzaCA/IHsgdHlwZTogXCJub25lXCIgfSA6IHsgdHlwZTogXCJyZXBsYWNlXCIgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gTW9yZSB0aGFuIDEgc3RhdGUgd2FzIHBvcHBlZCAtLT4gZ28gYmFrYyBpbiBoaXN0b3J5IGFuZCByZXBsYWNlIGhhc2ggaWYgbmVjZXNzYXJ5XG5cdFx0XHRyZXR1cm4gYkhhc1NhbWVIYXNoID8geyB0eXBlOiBcImJhY2tcIiwgc3RlcHM6IGlQb3BDb3VudCAtIDEgfSA6IHsgdHlwZTogXCJiYWNrLXJlcGxhY2VcIiwgc3RlcHM6IGlQb3BDb3VudCAtIDEgfTtcblx0XHR9XG5cdH1cblxuXHRfYmxvY2tpbmdOYXZpZ2F0aW9uRmlsdGVyKCk6IFwiQ3VzdG9tXCIgfCBcIkNvbnRpbnVlXCIge1xuXHRcdHJldHVybiB0aGlzLl9iRGlzYWJsZU9uSGFzaENoYW5nZSA/IFwiQ3VzdG9tXCIgOiBcIkNvbnRpbnVlXCI7XG5cdH1cblxuXHQvKipcblx0ICogRGlzYWJsZSB0aGUgcm91dGluZyBieSBjYWxsaW5nIHRoZSByb3V0ZXIgc3RvcCBtZXRob2QuXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0X2Rpc2FibGVFdmVudE9uSGFzaENoYW5nZSgpOiB2b2lkIHtcblx0XHR0aGlzLl9iRGlzYWJsZU9uSGFzaENoYW5nZSA9IHRydWU7XG5cdFx0dGhpcy5fb1JvdXRlci5zdG9wKCk7XG5cdH1cblxuXHQvKipcblx0ICogRW5hYmxlIHRoZSByb3V0aW5nIGJ5IGNhbGxpbmcgdGhlIHJvdXRlciBpbml0aWFsaXplIG1ldGhvZC5cblx0ICogQHBhcmFtIFtiSWdub3JlQ3VycmVudEhhc2hdIElnbm9yZSB0aGUgbGFzdCBoYXNoIGV2ZW50IHRyaWdnZXJlZCBiZWZvcmUgdGhlIHJvdXRlciBoYXMgaW5pdGlhbGl6ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfZW5hYmxlRXZlbnRPbkhhc2hDaGFuZ2UoYklnbm9yZUN1cnJlbnRIYXNoOiBib29sZWFuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0dGhpcy5fYkRpc2FibGVPbkhhc2hDaGFuZ2UgPSBmYWxzZTtcblx0XHR0aGlzLl9vUm91dGVyLmluaXRpYWxpemUoYklnbm9yZUN1cnJlbnRIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTeW5jaHJvbml6ZXMgdGhlIGJyb3dzZXIgaGlzdG9yeSB3aXRoIHRoZSBpbnRlcm5hbCBoaXN0b3J5IG9mIHRoZSByb3V0ZXJQcm94eSwgYW5kIHRyaWdnZXJzIGEgbmF2aWdhdGlvbiBpZiBuZWVkZWQuXG5cdCAqIEBwYXJhbSBvSGlzdG9yeUFjdGlvbiBTcGVjaWZpZXMgdGhlIG5hdmlnYXRpb24gYWN0aW9uIHRvIGJlIHBlcmZvcm1lZFxuXHQgKiBAcGFyYW0gYlJlYnVpbGRPbmx5IGB0cnVlYCBpZiBpbnRlcm5hbCBoaXN0b3J5IGlzIGN1cnJlbnRseSBiZWluZyByZWJ1aWx0XG5cdCAqIEByZXR1cm5zIFByb21pc2UgKHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkKSB0aGF0IHJldHVybnMgJ3RydWUnIGlmIGEgbmF2aWdhdGlvbiB0b29rIHBsYWNlLCAnZmFsc2UnIGlmIHRoZSBuYXZpZ2F0aW9uIGRpZG4ndCBoYXBwZW5cblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyBfcmVidWlsZEJyb3dzZXJIaXN0b3J5KG9IaXN0b3J5QWN0aW9uOiBIeXN0b3J5QWN0aW9uLCBiUmVidWlsZE9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHRoaXMuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nID0gdHJ1ZTtcblx0XHRcdGNvbnN0IG9UYXJnZXRTdGF0ZSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV0sXG5cdFx0XHRcdG5ld0xldmVsID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7XG5cblx0XHRcdGZ1bmN0aW9uIHJlcGxhY2VBc3luYygpOiB2b2lkIHtcblx0XHRcdFx0aWYgKCFiUmVidWlsZE9ubHkpIHtcblx0XHRcdFx0XHR0aGF0Ll9lbmFibGVFdmVudE9uSGFzaENoYW5nZSh0cnVlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCh0aGF0Ll9vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkucmVwbGFjZUhhc2ggYXMgRnVuY3Rpb24pKG9UYXJnZXRTdGF0ZS5oYXNoKTtcblx0XHRcdFx0aGlzdG9yeS5yZXBsYWNlU3RhdGUoT2JqZWN0LmFzc2lnbih7IGZlTGV2ZWw6IG5ld0xldmVsIH0sIGhpc3Rvcnkuc3RhdGUpLCBcIlwiKTtcblxuXHRcdFx0XHRpZiAoYlJlYnVpbGRPbmx5KSB7XG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHQvLyBUaW1lb3V0IHRvIGxldCAnaGFzaGNoYW5nZScgZXZlbnQgYmUgcHJvY2Vzc2VkIGJlZm9yZSBieSB0aGUgSGFzaENoYW5nZXIsIHNvIHRoYXRcblx0XHRcdFx0XHRcdC8vIG9uUm91dGVNYXRjaGVkIG5vdGlmaWNhdGlvbiBpc24ndCByYWlzZWRcblx0XHRcdFx0XHRcdHRoYXQuX2VuYWJsZUV2ZW50T25IYXNoQ2hhbmdlKHRydWUpO1xuXHRcdFx0XHRcdH0sIDApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhhdC5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0cmVzb2x2ZSh0cnVlKTsgLy8gYSBuYXZpZ2F0aW9uIG9jY3VycmVkXG5cdFx0XHR9XG5cblx0XHRcdC8vIEFzeW5jIGNhbGxiYWNrcyB3aGVuIG5hdmlnYXRpbmcgYmFjaywgaW4gb3JkZXIgdG8gbGV0IGFsbCBub3RpZmljYXRpb25zIGFuZCBldmVudHMgZ2V0IHByb2Nlc3NlZFxuXHRcdFx0ZnVuY3Rpb24gYmFja1JlcGxhY2VBc3luYygpOiB2b2lkIHtcblx0XHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBiYWNrUmVwbGFjZUFzeW5jKTtcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gVGltZW91dCB0byBsZXQgJ2hhc2hjaGFuZ2UnIGV2ZW50IGJlIHByb2Nlc3NlZCBiZWZvcmUgYnkgdGhlIEhhc2hDaGFuZ2VyXG5cdFx0XHRcdFx0cmVwbGFjZUFzeW5jKCk7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBiYWNrQXN5bmMoKTogdm9pZCB7XG5cdFx0XHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgYmFja0FzeW5jKTtcblx0XHRcdFx0dGhhdC5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0cmVzb2x2ZSh0cnVlKTsgLy8gYSBuYXZpZ2F0aW9uIG9jY3VycmVkXG5cdFx0XHR9XG5cblx0XHRcdHRoYXQuX2JJZ25vcmVSZXN0b3JlID0gdHJ1ZTtcblxuXHRcdFx0c3dpdGNoIChvSGlzdG9yeUFjdGlvbi50eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJyZXBsYWNlXCI6XG5cdFx0XHRcdFx0Y29uc3QgZm9jdXNJbmZvID0gaGlzdG9yeS5zdGF0ZT8uZm9jdXNJbmZvO1xuXHRcdFx0XHRcdCh0aGF0Ll9vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkucmVwbGFjZUhhc2ggYXMgRnVuY3Rpb24pKG9UYXJnZXRTdGF0ZS5oYXNoKTtcblx0XHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShcblx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRmZUxldmVsOiBuZXdMZXZlbCxcblx0XHRcdFx0XHRcdFx0XHRmb2N1c0luZm86IGZvY3VzSW5mb1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRoaXN0b3J5LnN0YXRlXG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dGhhdC5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpOyAvLyBhIG5hdmlnYXRpb24gb2NjdXJyZWRcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiYXBwZW5kXCI6XG5cdFx0XHRcdFx0dGhhdC5fb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnNldEhhc2gob1RhcmdldFN0YXRlLmhhc2gpO1xuXHRcdFx0XHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oeyBmZUxldmVsOiBuZXdMZXZlbCB9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIik7XG5cdFx0XHRcdFx0dGhhdC5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpOyAvLyBhIG5hdmlnYXRpb24gb2NjdXJyZWRcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiYmFja1wiOlxuXHRcdFx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgYmFja0FzeW5jKTtcblx0XHRcdFx0XHRoaXN0b3J5LmdvKC1vSGlzdG9yeUFjdGlvbi5zdGVwcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcImJhY2stcmVwbGFjZVwiOlxuXHRcdFx0XHRcdHRoaXMuX2Rpc2FibGVFdmVudE9uSGFzaENoYW5nZSgpO1xuXHRcdFx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgYmFja1JlcGxhY2VBc3luYyk7XG5cdFx0XHRcdFx0aGlzdG9yeS5nbygtb0hpc3RvcnlBY3Rpb24uc3RlcHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gTm8gbmF2aWdhdGlvblxuXHRcdFx0XHRcdHRoaXMuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nID0gZmFsc2U7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7IC8vIG5vIG5hdmlnYXRpb24gLS0+IHJlc29sdmUgdG8gZmFsc2Vcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldExhc3RIaXN0b3J5RW50cnkoKTogUm91dGVyU3RhdGUge1xuXHRcdHJldHVybiB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0c2V0UGF0aE1hcHBpbmcobWFwcGluZ3M6IHsgb2xkUGF0aDogc3RyaW5nOyBuZXdQYXRoOiBzdHJpbmcgfVtdKTogdm9pZCB7XG5cdFx0dGhpcy5fcGF0aE1hcHBpbmdzID0gbWFwcGluZ3MuZmlsdGVyKChtYXBwaW5nKSA9PiB7XG5cdFx0XHRyZXR1cm4gbWFwcGluZy5vbGRQYXRoICE9PSBtYXBwaW5nLm5ld1BhdGg7XG5cdFx0fSk7XG5cdH1cblxuXHRoYXNoR3VhcmQoKTogdm9pZCB7XG5cdFx0bGV0IHNIYXNoID0gdGhpcy5nZXREZWNvZGVkV2luZG93SGFzaCgpO1xuXHRcdGNvbnN0IGN1cnJlbnRBcHBOYW1lID0gdGhpcy5nZXRBcHBOYW1lRnJvbUhhc2goc0hhc2gpO1xuXHRcdGlmIChjdXJyZW50QXBwTmFtZSAhPSB0aGlzLmFwcE5hbWUpIHtcblx0XHRcdC8vIFdoZW4gZG9pbmcgZXh0ZXJuYWwgbmF2aWdhdGlvbiBpbiBhbm90aGVyIHdpbmRvdywgdGhlIGN1cnJlbnQgd2luZG93IGxvY2F0aW9uIGlzIHRlbXBvcmFyaWx5IG1vZGlmaWVkIHdpdGggdGhlIFVSTCBvZiB0aGUgdGFyZ2V0IGFwcFxuXHRcdFx0Ly8gSW4gdGhpcyBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSB0aGUgaW50ZXJuYWxseSBtYW5hZ2VkIGhpc3RvcnksIHNvIHdlIHNpbXBseSBkbyBub3RoaW5nXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHNIYXNoLmluY2x1ZGVzKFwicmVzdG9yZUhpc3Rvcnk9dHJ1ZVwiKSkge1xuXHRcdFx0dGhpcy5fYkFwcGx5UmVzdG9yZSA9IHRydWU7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBoYXNoIG5lZWRzIHRvIGJlIGNoYW5nZWQgKHRoaXMgaGFwcGVucyBpbiBGQ0wgd2hlbiBzd2l0Y2hpbmcgYi93IGVkaXQgYW5kIHJlYWQtb25seSB3aXRoIDMgY29sdW1ucyBvcGVuKVxuXHRcdFx0Y29uc3QgbWFwcGluZyA9IHRoaXMuX3BhdGhNYXBwaW5ncy5maW5kKChtKSA9PiB7XG5cdFx0XHRcdHJldHVybiBzSGFzaC5pbmNsdWRlcyhtLm9sZFBhdGgpO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAobWFwcGluZykge1xuXHRcdFx0XHQvLyBSZXBsYWNlIHRoZSBjdXJyZW50IGhhc2hcblx0XHRcdFx0c0hhc2ggPSBzSGFzaC5yZXBsYWNlKG1hcHBpbmcub2xkUGF0aCwgbWFwcGluZy5uZXdQYXRoKTtcblx0XHRcdFx0aGlzdG9yeS5yZXBsYWNlU3RhdGUoT2JqZWN0LmFzc2lnbih7fSwgaGlzdG9yeS5zdGF0ZSksIFwiXCIsIGVuY29kZVVSSShzSGFzaCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBhSGFzaFNwbGl0ID0gc0hhc2guc3BsaXQoXCImL1wiKTtcblx0XHRcdGNvbnN0IHNBcHBIYXNoID0gYUhhc2hTcGxpdFsxXSA/IGFIYXNoU3BsaXRbMV0gOiBcIlwiO1xuXHRcdFx0aWYgKHRoaXMuY2hlY2tIYXNoV2l0aEd1YXJkKHNBcHBIYXNoKSkge1xuXHRcdFx0XHRjb25zdCBvTmV3U3RhdGUgPSB0aGlzLl9leHRyYWN0U3RhdGVGcm9tSGFzaChzQXBwSGFzaCk7XG5cdFx0XHRcdHRoaXMuX3B1c2hOZXdTdGF0ZShvTmV3U3RhdGUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbXBhcmVzIDIgc3RhdGVzLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1N0YXRlMVxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1N0YXRlMlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uOlxuXHQgKiAgICAgICAgLSBlbnVtU3RhdGUuRVFVQUwgaWYgb1N0YXRlMSBhbmQgb1N0YXRlMiBhcmUgZXF1YWxcblx0ICogICAgICAgIC0gZW51bVN0YXRlLkNPTVBBVElCTEUgaWYgb1N0YXRlMSBhbmQgb1N0YXRlMiBhcmUgY29tcGF0aWJsZVxuXHQgKiAgICAgICAgLSBlbnVtU3RhdGUuQU5DRVNUT1IgaWYgb1N0YXRlMSBpcyBhbiBhbmNlc3RvciBvZiBvU3RhdGUyXG5cdCAqICAgICAgICAtIGVudW1TdGF0ZS5ESUZGRVJFTlQgaWYgdGhlIDIgc3RhdGVzIGFyZSBkaWZmZXJlbnRcblx0ICovXG5cblx0X2NvbXBhcmVDYWNoZVN0YXRlcyhvU3RhdGUxOiBSb3V0ZXJTdGF0ZSwgb1N0YXRlMjogUm91dGVyU3RhdGUpOiBudW1iZXIge1xuXHRcdC8vIEZpcnN0IGNvbXBhcmUgb2JqZWN0IGtleXNcblx0XHRpZiAob1N0YXRlMS5rZXlzLmxlbmd0aCA+IG9TdGF0ZTIua2V5cy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBlbnVtU3RhdGUuRElGRkVSRU5UO1xuXHRcdH1cblx0XHRsZXQgZXF1YWwgPSB0cnVlO1xuXHRcdGxldCBpbmRleDtcblxuXHRcdGZvciAoaW5kZXggPSAwOyBlcXVhbCAmJiBpbmRleCA8IG9TdGF0ZTEua2V5cy5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRcdGlmIChvU3RhdGUxLmtleXNbaW5kZXhdICE9PSBvU3RhdGUyLmtleXNbaW5kZXhdKSB7XG5cdFx0XHRcdGVxdWFsID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFlcXVhbCkge1xuXHRcdFx0Ly8gQ2hlY2sgcm91dGluZ0hpbnRzXG5cdFx0XHRpZiAob1N0YXRlMS5rZXlzLmxlbmd0aCA9PT0gMSAmJiBvU3RhdGUyLmtleXMubGVuZ3RoID09PSAxICYmIHRoaXMucm91dGluZ0hpbnRzPy5bb1N0YXRlMS5rZXlzWzBdXSkge1xuXHRcdFx0XHRpZiAodGhpcy5yb3V0aW5nSGludHNbb1N0YXRlMS5rZXlzWzBdXS5wYXJlbnRPZiAmJiB0aGlzLnJvdXRpbmdIaW50c1tvU3RhdGUxLmtleXNbMF1dLnBhcmVudE9mLmluY2x1ZGVzKG9TdGF0ZTIua2V5c1swXSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZW51bVN0YXRlLkFOQ0VTVE9SO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBTb21lIG9iamVjdHMga2V5cyBhcmUgZGlmZmVyZW50XG5cdFx0XHRyZXR1cm4gZW51bVN0YXRlLkRJRkZFUkVOVDtcblx0XHR9XG5cblx0XHQvLyBBbGwga2V5cyBmcm9tIG9TdGF0ZTEgYXJlIGluIG9TdGF0ZTIgLS0+IGNoZWNrIGlmIGFuY2VzdG9yXG5cdFx0aWYgKG9TdGF0ZTEua2V5cy5sZW5ndGggPCBvU3RhdGUyLmtleXMubGVuZ3RoIHx8IG9TdGF0ZTEuc2NyZWVuTW9kZSA8IG9TdGF0ZTIuc2NyZWVuTW9kZSkge1xuXHRcdFx0cmV0dXJuIGVudW1TdGF0ZS5BTkNFU1RPUjtcblx0XHR9XG5cdFx0aWYgKG9TdGF0ZTEuc2NyZWVuTW9kZSA+IG9TdGF0ZTIuc2NyZWVuTW9kZSkge1xuXHRcdFx0cmV0dXJuIGVudW1TdGF0ZS5ESUZGRVJFTlQ7IC8vIE5vdCBzdXJlIHRoaXMgY2FzZSBjYW4gaGFwcGVuLi4uXG5cdFx0fVxuXG5cdFx0Ly8gQXQgdGhpcyBzdGFnZSwgdGhlIDIgc3RhdGVzIGhhdmUgdGhlIHNhbWUgb2JqZWN0IGtleXMgKGluIHRoZSBzYW1lIG9yZGVyKSBhbmQgc2FtZSBzY3JlZW5tb2RlXG5cdFx0Ly8gVGhleSBjYW4gYmUgZWl0aGVyIGNvbXBhdGlibGUgb3IgZXF1YWxcblx0XHRyZXR1cm4gb1N0YXRlMS5zTGF5b3V0ID09PSBvU3RhdGUyLnNMYXlvdXQgPyBlbnVtU3RhdGUuRVFVQUwgOiBlbnVtU3RhdGUuQ09NUEFUSUJMRTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTcGxpdCB0aGUgYXBwLXNwZWNpZmljIHJvdXRlIGF0IHRoZSBcIiYvXCIgc2VwYXJhdG9yLlxuXHQgKlxuXHQgKiBUaGUgYXBwLXNwZWNpZmljIHJvdXRlIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIHNlZ21lbnRzIHNlcGFyYXRlZCBieSBcIiYvXCIuXG5cdCAqIEBleGFtcGxlXG5cdCAqIHNwbGl0QXBwU3BlY2lmaWNSb3V0ZShcIiYvRW50aXR5KCdhYmMnKS9OZXh0RW50aXR5KCd4eXonKVwiKTtcblx0ICogLy8gW1wiRW50aXR5KCdhYmMnKS9OZXh0RW50aXR5KCd4eXonKVwiXVxuXHQgKlxuXHQgKiBzcGxpdEFwcFNwZWNpZmljUm91dGUoXCImL0VudGl0eSgnYWJjJykvTmV4dEVudGl0eSgneHl6JykmL1ByZWZpeC9OZXN0ZWRSb3V0ZVwiKTtcblx0ICogLy8gW1wiRW50aXR5KCdhYmMnKS9OZXh0RW50aXR5KCd4eXonKVwiLCBcIlByZWZpeC9OZXN0ZWRSb3V0ZVwiXVxuXHQgKiBAcGFyYW0gYXBwU3BlY2lmaWNSb3V0ZVx0VGhlIGFwcC1zcGVjaWZpYyByb3V0ZS5cblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgYXBwLXNwZWNpZmljIHJvdXRlIHNlZ21lbnRzLlxuXHQgKi9cblx0cHJpdmF0ZSBzdGF0aWMgc3BsaXRBcHBTcGVjaWZpY1JvdXRlKGFwcFNwZWNpZmljUm91dGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCByb3V0ZVNwbGl0ID0gYXBwU3BlY2lmaWNSb3V0ZT8uc3BsaXQoXCImL1wiKSA/PyBbXTtcblx0XHRpZiAoIXJvdXRlU3BsaXRbMF0pIHtcblx0XHRcdHJvdXRlU3BsaXQuc2hpZnQoKTsgLy8gcmVtb3ZlIHRoZSBsZWFkaW5nIGVtcHR5IHNlZ21lbnQgKHRoZSBhcHAtc3BlY2lmaWMgcm91dGUgc3RhcnRzIHdpdGggXCImL1wiKVxuXHRcdH1cblx0XHRyZXR1cm4gcm91dGVTcGxpdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYmFjayBleGl0cyB0aGUgcHJlc2VudCBndWFyZCBzZXQuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBiYWNrIGV4aXRzIHRoZSBndWFyZFxuXHQgKi9cblx0Y2hlY2tJZkJhY2tJc091dE9mR3VhcmQoKTogYm9vbGVhbiB7XG5cdFx0Ly8gV2UgdXNlIHdpbmRvdy5sb2NhdGlvbi5oYXNoIGluc3RlYWQgb2YgSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5nZXRIYXNoKCkgYmVjYXVzZSB0aGUgbGF0dGVyXG5cdFx0Ly8gcmVwbGFjZXMgY2hhcmFjdGVycyBpbiB0aGUgVVJMIChlLmcuICUyNCByZXBsYWNlZCBieSAkKSBhbmQgaXQgY2F1c2VzIGlzc3VlcyB3aGVuIGNvbXBhcmluZ1xuXHRcdC8vIHdpdGggdGhlIFVSTHMgaW4gdGhlIG1hbmFnZWQgaGlzdG9yeVxuXHRcdGNvbnN0IHNwbGl0SGFzaCA9IHRoaXMuZ2V0RnVsbEhhc2goKTtcblxuXHRcdGNvbnN0IHNlZ21lbnRzID0gUm91dGVyUHJveHkuc3BsaXRBcHBTcGVjaWZpY1JvdXRlKHNwbGl0SGFzaCk7XG5cblx0XHRpZiAoc2VnbWVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gdGhlcmUgaXMgYSBuZXN0ZWQgcm91dGUgaW52b2x2ZWQgLT4gYXNzdW1lIHdlIGFyZSBzdGlsbCBpbnNpZGUgdGhlIGd1YXJkXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGFzaCA9IHNlZ21lbnRzWzBdID8/IFwiXCI7XG5cblx0XHRsZXQgcHJldmlvdXNIYXNoO1xuXHRcdGlmICh0aGlzLl9vTmF2aWdhdGlvbkd1YXJkKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcblx0XHRcdFx0aWYgKHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtpXS5oYXNoID09PSBoYXNoKSB7XG5cdFx0XHRcdFx0cHJldmlvdXNIYXNoID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5W2kgLSAxXS5oYXNoO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAhcHJldmlvdXNIYXNoIHx8ICF0aGlzLmNoZWNrSGFzaFdpdGhHdWFyZChwcmV2aW91c0hhc2gpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgYmFjayBuYXZpZ2F0aW9uIHdpbGwgZXhpdCB0aGUgYXBwLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGJhY2sgZXhpdHMgdGhlIGFwcFxuXHQgKi9cblx0Y2hlY2tJZkJhY2tFeGl0c0FwcCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBzcGxpdEhhc2ggPSB0aGlzLmdldEZ1bGxIYXNoKCk7XG5cblx0XHRjb25zdCBzZWdtZW50cyA9IFJvdXRlclByb3h5LnNwbGl0QXBwU3BlY2lmaWNSb3V0ZShzcGxpdEhhc2gpO1xuXG5cdFx0aWYgKHNlZ21lbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdC8vIHRoZXJlIGlzIGEgbmVzdGVkIHJvdXRlIGludm9sdmVkIC0+IGFzc3VtZSB3ZSBhcmUgc3RpbGwgaW5zaWRlIHRoZSBhcHBcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgY3VycmVudCBoYXNoIGlzIHRoZSBmaXJzdCBvbmUgaW4gdGhlIGhpc3RvcnksIHRoZW4gYSBuYXZiYWNrIHdpbGwgZXhpdCB0aGUgYXBwXG5cdFx0Y29uc3QgaGFzaCA9IHNlZ21lbnRzWzBdID8/IFwiXCI7XG5cdFx0cmV0dXJuIHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggPiAwICYmIHRoaXMuX29NYW5hZ2VkSGlzdG9yeVswXS5oYXNoID09PSBoYXNoO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgbGFzdCAyIGVudHJpZXMgaW4gdGhlIGhpc3Rvcnkgc2hhcmUgdGhlIHNhbWUgY29udGV4dC5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZXkgc2hhcmUgdGhlIHNhbWUgY29udGV4dC5cblx0ICovXG5cdGNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggPCAyKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0N1cnJlbnRTdGF0ZSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV07XG5cdFx0Y29uc3Qgb1ByZXZpb3VzU3RhdGUgPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDJdO1xuXG5cdFx0cmV0dXJuIG9DdXJyZW50U3RhdGUuaGFzaC5zcGxpdChcIj9cIilbMF0gPT09IG9QcmV2aW91c1N0YXRlLmhhc2guc3BsaXQoXCI/XCIpWzBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc3RvcmVzIHRoZSBmb2N1cyBmb3IgdGhlIGN1cnJlbnQgaGFzaCwgaWYgd2UgY2FuIGZpbmQgaXQgaW4gdGhlIGhpc3RvcnkuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgZm9jdXMgd2FzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cmVzdG9yZUZvY3VzRm9yQ3VycmVudEhhc2goKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY3VycmVudEhhc2ggPSByZW1vdmVBcHBTdGF0ZUluSGFzaCh0aGlzLmdldEhhc2goKSk7XG5cdFx0Y29uc3Qgc3RhdGVGb3JIYXNoID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5LmZpbmQoKHN0YXRlKSA9PiB7XG5cdFx0XHRyZXR1cm4gcmVtb3ZlQXBwU3RhdGVJbkhhc2goc3RhdGUuaGFzaCkgPT09IGN1cnJlbnRIYXNoO1xuXHRcdH0pO1xuXG5cdFx0bGV0IGZvY3VzQXBwbGllZCA9IGZhbHNlO1xuXHRcdGlmIChzdGF0ZUZvckhhc2g/LmZvY3VzQ29udHJvbElkKSB7XG5cdFx0XHRsZXQgZm9jdXNDb250cm9sID0gRWxlbWVudC5nZXRFbGVtZW50QnlJZChzdGF0ZUZvckhhc2guZm9jdXNDb250cm9sSWQpO1xuXHRcdFx0bGV0IGZvY3VzSW5mbyA9IHN0YXRlRm9ySGFzaC5mb2N1c0luZm87XG5cdFx0XHRpZiAoKCFmb2N1c0NvbnRyb2wgfHwgIWZvY3VzQ29udHJvbC5nZXRGb2N1c0RvbVJlZigpKSAmJiBzdGF0ZUZvckhhc2guc2Vjb25kYXJ5Rm9jdXNDb250cm9sSWQpIHtcblx0XHRcdFx0Ly8gVGhlIGNvbnRyb2wgZm9yIGZvY3VzIGlzIGVpdGhlciBub3QgZm91bmQgb3IgaXMgbm90IGRpc3BsYXllZCBvbiBzY3JlZW4gKG5vIGZvY3VzRG9tUmVmKVxuXHRcdFx0XHQvLyAtLT4gdHJ5IHRoZSBzZWNvbmRhcnkgY29udHJvbCBpZiB0aGVyZSdzIG9uZVxuXHRcdFx0XHRmb2N1c0NvbnRyb2wgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKHN0YXRlRm9ySGFzaC5zZWNvbmRhcnlGb2N1c0NvbnRyb2xJZCk7XG5cdFx0XHRcdGZvY3VzSW5mbyA9IHN0YXRlRm9ySGFzaC5zZWNvbmRhcnlGb2N1c0luZm87XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdC8vIGlmIHRoZSBjb250cm9sIGlzIGEgYnVzeSB0YWJsZSwgd2UgZG9uJ3Qgd2FudCB0byBmb2N1cyBpdC5cblx0XHRcdFx0Ly8gdGFibGVzIGhhdmUgdGhlaXIgb3duIGhhbmRsaW5nIHRvIHJlc3RvcmUgZm9jdXMsIHNvIHdlIGRvbid0IHdhbnQgdG8gaW50ZXJmZXJlIHdpdGggdGhhdFxuXHRcdFx0XHRmb2N1c0NvbnRyb2w/LmdldFBhcmVudCgpPy5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJlxuXHRcdFx0XHQoZm9jdXNDb250cm9sIGFzIE1UYWJsZSB8IFVJVGFibGUpLmdldEJ1c3koKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGZvY3VzQ29udHJvbD8uZm9jdXMoZm9jdXNJbmZvKTtcblx0XHRcdGZvY3VzQXBwbGllZCA9IGZvY3VzQ29udHJvbCAhPT0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiBmb2N1c0FwcGxpZWQ7XG5cdH1cblxuXHQvKipcblx0ICogU3RvcmVzIHRoZSBJRCBvZiB0aGUgY3VycmVudGx5IGZvY3VzZWQgY29udHJvbCBpbiB0aGUgaGlzdG9yeSBmb3IgdGhlIGN1cnJlbnQgaGFzaC5cblx0ICpcblx0ICovXG5cdHByaXZhdGUgc3RvcmVGb2N1c0luZm9Gb3JDdXJyZW50SGFzaCgpOiB2b2lkIHtcblx0XHRjb25zdCBjdXJyZW50SGFzaCA9IHJlbW92ZUFwcFN0YXRlSW5IYXNoKHRoaXMuZ2V0SGFzaCgpKTtcblx0XHRjb25zdCBzdGF0ZUZvckhhc2ggPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkuZmluZCgoc3RhdGUpID0+IHtcblx0XHRcdHJldHVybiByZW1vdmVBcHBTdGF0ZUluSGFzaChzdGF0ZS5oYXNoKSA9PT0gY3VycmVudEhhc2g7XG5cdFx0fSk7XG5cdFx0aWYgKHN0YXRlRm9ySGFzaCkge1xuXHRcdFx0Y29uc3QgZm9jdXNDb250cm9sID0gRWxlbWVudC5nZXRBY3RpdmVFbGVtZW50KCk7XG5cdFx0XHRzdGF0ZUZvckhhc2guZm9jdXNDb250cm9sSWQgPSBmb2N1c0NvbnRyb2w/LmdldElkKCk7XG5cdFx0XHRpZiAoZm9jdXNDb250cm9sKSB7XG5cdFx0XHRcdC8vIFRoZSBzZWNvbmRhcnkgZm9jdXMgY29udHJvbCBpcyB0aGUgcGFyZW50IHRhYmxlIGlmIHRoZXJlJ3Mgb25lXG5cdFx0XHRcdGxldCBwYXJlbnRUYWJsZSA9IGZvY3VzQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0XHRcdFx0d2hpbGUgKHBhcmVudFRhYmxlICYmICFwYXJlbnRUYWJsZS5pc0E8VUlUYWJsZT4oXCJzYXAudWkudGFibGUuVGFibGVcIikgJiYgIXBhcmVudFRhYmxlLmlzQTxNVGFibGU+KFwic2FwLm0uVGFibGVcIikpIHtcblx0XHRcdFx0XHRwYXJlbnRUYWJsZSA9IHBhcmVudFRhYmxlLmdldFBhcmVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0YXRlRm9ySGFzaC5zZWNvbmRhcnlGb2N1c0NvbnRyb2xJZCA9IHBhcmVudFRhYmxlPy5nZXRJZCgpO1xuXHRcdFx0XHRzdGF0ZUZvckhhc2guc2Vjb25kYXJ5Rm9jdXNJbmZvID0geyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH07XG5cdFx0XHR9XG5cdFx0XHRzdGF0ZUZvckhhc2guZm9jdXNJbmZvID0gZm9jdXNDb250cm9sPy5nZXRGb2N1c0luZm8oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmluZHMgYSBsYXlvdXQgdmFsdWUgZm9yIGEgaGFzaCBpbiB0aGUgaGlzdG9yeS5cblx0ICogQHBhcmFtIGhhc2ggVGhlIGhhc2ggdG8gbG9vayBmb3IgaW4gdGhlIGhpc3RvcnkuXG5cdCAqIEByZXR1cm5zIEEgbGF5b3V0IHZhbHVlIGlmIGl0IGNvdWxkIGJlIGZvdW5kLCB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuXHQgKi9cblx0ZmluZExheW91dEZvckhhc2goaGFzaDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuZmNsRW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgYWxsIHF1ZXJ5IHBhcmFtZXRlcnMgZnJvbSB0aGUgaGFzaFxuXHRcdGNvbnN0IGhhc2hOb1BhcmFtID0gaGFzaC5zcGxpdChcIj9cIilbMF07XG5cblx0XHQvLyBMb29rIGZvciB0aGUgc3RhdGUgYmFja3dhcmRzLCBzbyB0aGF0IHdlIGZpbmQgdGhlIGxhc3Qgc3RhdGUgaW4gdGhlIGhpc3RvcnkgKGUuZy4gaWYgd2UgaGF2ZSAyIHN0YXRlcyB3aXRoIHRoZSBzYW1lIGhhc2ggYnV0IDIgZGlmZmVyZW50IGxheW91dHMpXG5cdFx0bGV0IHRhcmdldFN0YXRlOiBSb3V0ZXJTdGF0ZSB8IHVuZGVmaW5lZDtcblx0XHRmb3IgKGxldCBpbmRleCA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxOyBpbmRleCA+PSAwICYmIHRhcmdldFN0YXRlID09PSB1bmRlZmluZWQ7IGluZGV4LS0pIHtcblx0XHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaW5kZXhdLmhhc2guc3BsaXQoXCI/XCIpWzBdID09PSBoYXNoTm9QYXJhbSkge1xuXHRcdFx0XHR0YXJnZXRTdGF0ZSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtpbmRleF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRhcmdldFN0YXRlPy5zTGF5b3V0O1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlclByb3h5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztFQWNBLE1BQU1BLFNBQVMsR0FBRztJQUNqQkMsS0FBSyxFQUFFLENBQUM7SUFDUkMsVUFBVSxFQUFFLENBQUM7SUFDYkMsUUFBUSxFQUFFLENBQUM7SUFDWEMsU0FBUyxFQUFFO0VBQ1osQ0FBQztFQUNELE1BQU1DLGFBQWEsR0FBRztJQUNyQkMsV0FBVyxFQUFFLFFBQVE7SUFDckJDLGNBQWMsRUFBRTtFQUNqQixDQUFDO0VBd0JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLG1CQUFtQkEsQ0FBQ0MsVUFBa0IsRUFBRUMsVUFBbUIsRUFBbUI7SUFDdEYsT0FBTztNQUNOQyxVQUFVLEVBQUVGLFVBQVUsQ0FBQ0csT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7TUFBRTtNQUNoREMsV0FBVyxFQUFFSCxVQUFVLEdBQUdBLFVBQVUsQ0FBQ0UsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsR0FBR0UsU0FBUztNQUN4RUMsS0FBSyxFQUFFLFNBQUFBLENBQVVDLEtBQWEsRUFBVztRQUN4QyxPQUFPQSxLQUFLLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUNOLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUNFLFdBQVcsR0FBR0csS0FBSyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDSixXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO01BQ2xIO0lBQ0QsQ0FBQztFQUNGO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNLLG9CQUFvQkEsQ0FBQ0YsS0FBYSxFQUFVO0lBQ3BELE9BQU9BLEtBQUssQ0FBQ0osT0FBTyxDQUFDLElBQUlPLE1BQU0sQ0FBQyxRQUFRZCxhQUFhLENBQUNFLGNBQWMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ25GO0VBQUMsSUFHS2EsV0FBVyxJQUFBQyxJQUFBLEdBRGhCQyxjQUFjLENBQUMseUJBQXlCLENBQUMsRUFBQUQsSUFBQSxDQUFBRSxNQUFBLDBCQUFBQyxXQUFBO0lBQUEsU0FBQUosWUFBQTtNQUFBLElBQUFLLEtBQUE7TUFBQSxTQUFBQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUFBQyxJQUFBLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxHQUFBSyxJQUFBLE1BQUFBLElBQUEsR0FBQUwsSUFBQSxFQUFBSyxJQUFBO1FBQUFGLElBQUEsQ0FBQUUsSUFBQSxJQUFBSixTQUFBLENBQUFJLElBQUE7TUFBQTtNQUFBTixLQUFBLEdBQUFELFdBQUEsQ0FBQVEsSUFBQSxVQUFBSCxJQUFBO01BQUFKLEtBQUEsQ0FFekNRLHdCQUF3QixHQUFHLEtBQUs7TUFBQVIsS0FBQSxDQUVoQ1MseUJBQXlCLEdBQUcsS0FBSztNQUFBVCxLQUFBLENBRWpDVSxvQkFBb0IsR0FBRyxLQUFLO01BQUFWLEtBQUEsQ0FFNUJXLGFBQWEsR0FBa0IsSUFBSTtNQUFBWCxLQUFBLENBMEJuQ1ksMkJBQTJCLEdBQUcsS0FBSztNQUFBWixLQUFBLENBRW5DYSxjQUFjLEdBQUcsS0FBSztNQUFBYixLQUFBLENBRXRCYyxhQUFhLEdBQTJDLEVBQUU7TUFBQWQsS0FBQSxDQUUxRGUsdUJBQXVCLEdBQUcsS0FBSztNQUFBLE9BQUFmLEtBQUE7SUFBQTtJQUFBZ0IsY0FBQSxDQUFBckIsV0FBQSxFQUFBSSxXQUFBO0lBQUEsSUFBQWtCLE1BQUEsR0FBQXRCLFdBQUEsQ0FBQXVCLFNBQUE7SUFBQUQsTUFBQSxDQU0vQkUsSUFBSSxHQUFKLFNBQUFBLElBQUlBLENBQUNDLGFBQTJCLEVBQUVDLFlBQXFCLEVBQVE7TUFDOUQ7TUFDQUQsYUFBYSxDQUNYRSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQzNCQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUNDLFNBQVMsQ0FBQ0osYUFBYSxFQUFFQyxZQUFZLENBQUMsQ0FBQyxDQUN2REksS0FBSyxDQUFDLFVBQVVDLE1BQWUsRUFBRTtRQUNqQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUMsb0NBQW9DLEVBQUVGLE1BQWdCLENBQUM7TUFDbEUsQ0FBQyxDQUFDO01BQ0gsSUFBSSxDQUFDRyxZQUFZLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDN0NDLE1BQU0sQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQ0osWUFBWSxDQUFDO01BQ3RELElBQUksQ0FBQ0sscUJBQXFCLEdBQUcsS0FBSztNQUNsQyxJQUFJLENBQUNDLGVBQWUsR0FBRyxLQUFLO01BQzVCLElBQUksQ0FBQ0MsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFBQW5CLE1BQUEsQ0FFRE8sU0FBUyxHQUFULFNBQUFBLFNBQVNBLENBQUNKLGFBQTJCLEVBQUVDLFlBQXFCLEVBQVE7TUFDbkUsSUFBSSxDQUFDZ0IsZUFBZSxHQUFHakIsYUFBYSxDQUFDa0IsZ0JBQWdCLENBQUMsQ0FBQztNQUN2RCxJQUFJLENBQUNDLE9BQU8sQ0FBQ25CLGFBQWEsQ0FBQ29CLFNBQVMsQ0FBQyxDQUFDLENBQUM7TUFDdkMsSUFBSSxDQUFDQyxZQUFZLEdBQUdyQixhQUFhLENBQUNzQixpQkFBaUIsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FBQyxDQUFDO01BQ3ZFO01BQ0EsSUFBSSxDQUFDQyxpQ0FBaUMsQ0FBQyxDQUFDOztNQUV4QztNQUNBQyxPQUFPLENBQUNDLFlBQVksQ0FDbkJDLE1BQU0sQ0FBQ0MsTUFBTSxDQUNaO1FBQ0NDLE9BQU8sRUFBRTtNQUNWLENBQUMsRUFDREosT0FBTyxDQUFDSyxLQUNULENBQUMsRUFDRCxFQUFFLEVBQ0ZsQixNQUFNLENBQUNtQixRQUNSLENBQUM7TUFDRCxJQUFJLENBQUNDLFVBQVUsR0FBRy9CLFlBQVk7TUFFOUIsSUFBSSxDQUFDZ0Msb0JBQW9CLEdBQUcsSUFBSSxDQUFDQyx5QkFBeUIsQ0FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDckUsSUFBSSxDQUFDTSxlQUFlLENBQUNrQix3QkFBd0IsQ0FBQyxJQUFJLENBQUNGLG9CQUFvQixDQUFDO0lBQ3pFLENBQUM7SUFBQXBDLE1BQUEsQ0FFRHVDLE9BQU8sR0FBUCxTQUFBQSxPQUFPQSxDQUFBLEVBQVM7TUFDZixJQUFJLElBQUksQ0FBQ25CLGVBQWUsRUFBRTtRQUN6QixJQUFJLENBQUNBLGVBQWUsQ0FBQ29CLDBCQUEwQixDQUFDLElBQUksQ0FBQ0osb0JBQW9CLENBQUM7TUFDM0U7TUFDQXJCLE1BQU0sQ0FBQzBCLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM3QixZQUFZLENBQUM7SUFDMUQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQVosTUFBQSxDQU1BMEMsaUJBQWlCLEdBQWpCLFNBQUFBLGlCQUFpQkEsQ0FBQ3BFLEtBQWEsRUFBRXFFLFlBQW9CLEVBQVU7TUFDOUQsSUFBSUMsUUFBZ0I7TUFFcEIsSUFBSXRFLEtBQUssQ0FBQ3VFLFFBQVEsQ0FBQ2xGLGFBQWEsQ0FBQ0UsY0FBYyxDQUFDLEVBQUU7UUFDakQ7UUFDQStFLFFBQVEsR0FBR3RFLEtBQUssQ0FBQ0osT0FBTyxDQUN2QixJQUFJTyxNQUFNLENBQUMsR0FBR2QsYUFBYSxDQUFDRSxjQUFjLFFBQVEsQ0FBQyxFQUNuRCxHQUFHRixhQUFhLENBQUNFLGNBQWMsSUFBSThFLFlBQVksRUFDaEQsQ0FBQztNQUNGLENBQUMsTUFBTTtRQUNOO1FBQ0EsSUFBSSxDQUFDckUsS0FBSyxDQUFDdUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQ3pCRCxRQUFRLEdBQUcsR0FBR3RFLEtBQUssR0FBRztRQUN2QixDQUFDLE1BQU07VUFDTnNFLFFBQVEsR0FBRyxHQUFHdEUsS0FBSyxHQUFHO1FBQ3ZCO1FBQ0FzRSxRQUFRLElBQUksR0FBR2pGLGFBQWEsQ0FBQ0UsY0FBYyxJQUFJOEUsWUFBWSxFQUFFO01BQzlEO01BRUEsT0FBT0MsUUFBUTtJQUNoQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTVDLE1BQUEsQ0FLQThDLGtCQUFrQixHQUFsQixTQUFBQSxrQkFBa0JBLENBQUN4RSxLQUFhLEVBQWlCO01BQ2hELE1BQU15RSxTQUFTLEdBQUd6RSxLQUFLLENBQUMwRSxLQUFLLENBQUMsSUFBSXZFLE1BQU0sQ0FBQyxRQUFRZCxhQUFhLENBQUNFLGNBQWMsVUFBVSxDQUFDLENBQUM7TUFDekYsT0FBT2tGLFNBQVMsSUFBSUEsU0FBUyxDQUFDN0QsTUFBTSxHQUFHLENBQUMsR0FBRzZELFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO0lBQy9ELENBQUM7SUFBQS9DLE1BQUEsQ0FFT2lELG9CQUFvQixHQUE1QixTQUFRQSxvQkFBb0JBLENBQUEsRUFBVztNQUN0QyxPQUFPQyxTQUFTLENBQUNuQyxNQUFNLENBQUNtQixRQUFRLENBQUNpQixJQUFJLENBQUM7SUFDdkM7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBbkQsTUFBQSxDQUlBc0IsT0FBTyxHQUFQLFNBQUFBLE9BQU9BLENBQUM4QixPQUFlLEVBQVE7TUFDOUIsSUFBSSxDQUFDQyxRQUFRLEdBQUdELE9BQU87TUFDdkIsSUFBSSxDQUFDRSxnQkFBZ0IsR0FBRyxFQUFFO01BQzFCLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUcsSUFBSTtNQUU3QixNQUFNQyxlQUFlLEdBQUcsSUFBSSxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUN0QyxJQUFJLENBQUNILGdCQUFnQixDQUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDQyxxQkFBcUIsQ0FBQ0gsZUFBZSxDQUFDLENBQUM7TUFFdkUsSUFBSSxDQUFDSSxPQUFPLEdBQUcsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUNaLG9CQUFvQixDQUFDLENBQUMsQ0FBQzs7TUFFbkU7TUFDQSxJQUFJLENBQUN2RCxhQUFhLEdBQUcsSUFBSSxDQUFDb0Qsa0JBQWtCLENBQUNVLGVBQWUsQ0FBQztJQUM5RDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBeEQsTUFBQSxDQU1BOEQsV0FBVyxHQUFYLFNBQUFBLFdBQVdBLENBQUEsRUFBVztNQUNyQixNQUFNQyxTQUFTLEdBQUcsSUFBSSxDQUFDM0MsZUFBZSxDQUFDMkMsU0FBUyxDQUFDLElBQUksQ0FBQ2Qsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO01BRTdFLElBQUksa0JBQWtCLElBQUljLFNBQVMsRUFBRTtRQUNwQyxPQUFPQSxTQUFTLENBQUNDLGdCQUFnQixFQUFFOUYsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztNQUMvRDtNQUNBLE9BQU8sRUFBRTtJQUNWLENBQUM7SUFBQThCLE1BQUEsQ0FFRHlELE9BQU8sR0FBUCxTQUFBQSxPQUFPQSxDQUFBLEVBQVc7TUFDakIsT0FBTyxJQUFJLENBQUNKLFFBQVEsQ0FBQ1ksY0FBYyxDQUFDLENBQUMsQ0FBQ1IsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFO0lBQ3RELENBQUM7SUFBQXpELE1BQUEsQ0FFUzZELGtCQUFrQixHQUE1QixTQUFVQSxrQkFBa0JBLENBQUNWLElBQVksRUFBVTtNQUNsRCxNQUFNWSxTQUFTLEdBQUcsSUFBSSxDQUFDM0MsZUFBZSxFQUFFMkMsU0FBUyxDQUFDWixJQUFJLENBQWdFO01BQ3RILE9BQU9ZLFNBQVMsRUFBRUcsU0FBUyxJQUFJLEVBQUU7SUFDbEMsQ0FBQztJQUFBbEUsTUFBQSxDQUVEbUUsYUFBYSxHQUFiLFNBQUFBLGFBQWFBLENBQUEsRUFBWTtNQUN4QixPQUFPLElBQUksQ0FBQ2hELFlBQVk7SUFDekIsQ0FBQztJQUFBbkIsTUFBQSxDQUVEb0UsY0FBYyxHQUFkLFNBQUFBLGNBQWNBLENBQUNDLE9BQWdCLEVBQVE7TUFDdEMsSUFBSSxDQUFDbEQsWUFBWSxHQUFHa0QsT0FBTztJQUM1Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFyRSxNQUFBLENBSUFzRSxrQkFBa0IsR0FBbEIsU0FBQUEsa0JBQWtCQSxDQUFBLEVBQVM7TUFDMUIsSUFBSSxDQUFDNUUsYUFBYSxHQUFHLElBQUk7SUFDMUIsQ0FBQztJQUFBTSxNQUFBLENBRU91RSxnQ0FBZ0MsR0FBeEMsU0FBUUEsZ0NBQWdDQSxDQUFDcEIsSUFBWSxFQUFVO01BQzlELE9BQU9BLElBQUksQ0FBQ2pGLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQ0EsT0FBTyxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQztJQUN2Rjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVRDO0lBQUE4QixNQUFBLENBVU13RSxTQUFTLEdBQWYsZUFBTUEsU0FBU0EsQ0FDZGxHLEtBQWEsRUFDYm1HLGdCQUEwQixFQUMxQkMseUJBQW1DLEVBQ25DQyxXQUFxQixFQUNyQkMsbUNBQTZDLEVBQzdDQyxrQkFBNEIsRUFDVDtNQUNuQnZHLEtBQUssR0FBR0EsS0FBSyxDQUFDd0csVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHeEcsS0FBSyxDQUFDeUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHekcsS0FBSztNQUMxRCxJQUFJc0csbUNBQW1DLEtBQUssS0FBSyxFQUFFO1FBQ2xELE1BQU0sSUFBSSxDQUFDeEQsZUFBZSxDQUFDNEQsaUJBQWlCLENBQUMsQ0FBQztNQUMvQztNQUNBMUcsS0FBSyxHQUFHLElBQUksQ0FBQ2lHLGdDQUFnQyxDQUFDakcsS0FBSyxDQUFDO01BQ3BELElBQUksSUFBSSxDQUFDMkcsMkJBQTJCLEVBQUU7UUFDckMsT0FBTyxJQUFJLENBQUNBLDJCQUEyQixDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDNUUsSUFBSSxDQUFDLFlBQVk7VUFDbEUsSUFBSSxDQUFDMkUsMkJBQTJCLEdBQUc3RyxTQUFTO1VBQzVDLE9BQU8sSUFBSSxDQUFDK0csa0JBQWtCLENBQUM3RyxLQUFLLEVBQUVtRyxnQkFBZ0IsRUFBRUMseUJBQXlCLEVBQUVDLFdBQVcsRUFBRUUsa0JBQWtCLENBQUM7UUFDcEgsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxNQUFNO1FBQ04sSUFBSSxJQUFJLENBQUNsRiwyQkFBMkIsRUFBRTtVQUNyQyxJQUFJLENBQUNnQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3pDO1FBQ0EsT0FBTyxJQUFJLENBQUN3RCxrQkFBa0IsQ0FBQzdHLEtBQUssRUFBRW1HLGdCQUFnQixFQUFFQyx5QkFBeUIsRUFBRUMsV0FBVyxFQUFFRSxrQkFBa0IsQ0FBQztNQUNwSDtJQUNELENBQUM7SUFBQTdFLE1BQUEsQ0FFS21GLGtCQUFrQixHQUF4QixlQUFNQSxrQkFBa0JBLENBQ3ZCN0csS0FBYSxFQUNibUcsZ0JBQTBCLEVBQzFCQyx5QkFBbUMsRUFDbkNDLFdBQXFCLEVBQ3JCRSxrQkFBNEIsRUFDVDtNQUNuQjtNQUNBLElBQUksSUFBSSxDQUFDMUMsVUFBVSxJQUFJLElBQUksQ0FBQ3pDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQ29ELGtCQUFrQixDQUFDeEUsS0FBSyxDQUFDLEVBQUU7UUFDN0VBLEtBQUssR0FBRyxJQUFJLENBQUNvRSxpQkFBaUIsQ0FBQ3BFLEtBQUssRUFBRSxJQUFJLENBQUNvQixhQUFhLENBQUM7TUFDMUQ7TUFFQSxJQUFJLENBQUMsSUFBSSxDQUFDMEYsa0JBQWtCLENBQUM5RyxLQUFLLENBQUMsSUFBSSxFQUFFdUcsa0JBQWtCLElBQUksS0FBSyxDQUFDLEVBQUU7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQ1EsZUFBZSxFQUFFO1VBQzFCLElBQUksQ0FBQ0EsZUFBZSxHQUFHQyxPQUFPLENBQUNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBRTtRQUNwRTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSxJQUFJLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUNILGVBQWUsQ0FBQ0ksT0FBTyxDQUFDLDRDQUE0QyxDQUFDLENBQUMsRUFBRTtVQUN6RjtVQUNBLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUM5QjtRQUNBLElBQUksQ0FBQ2xHLG9CQUFvQixHQUFHLElBQUk7TUFDakM7O01BRUE7TUFDQTtNQUNBLE1BQU1tRyxTQUFTLEdBQUcsSUFBSSxDQUFDakMscUJBQXFCLENBQUNyRixLQUFLLENBQUM7TUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQzZDLFlBQVksRUFBRTtRQUN2QjtRQUNBLE1BQU0wRSxnQkFBZ0IsR0FBR25ILFdBQVcsQ0FBQ29ILHlCQUF5QixDQUFDLElBQUksQ0FBQ3JDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDdEMsWUFBWSxHQUNoQndELFdBQVcsSUFDVmtCLGdCQUFnQixDQUFDM0csTUFBTSxHQUFHMEcsU0FBUyxDQUFDRyxJQUFJLENBQUM3RyxNQUFNLElBQy9DMkcsZ0JBQWdCLENBQUNHLEtBQUssQ0FBQyxVQUFVQyxHQUFXLEVBQUVDLEtBQWEsRUFBRTtVQUM1RCxPQUFPRCxHQUFHLEtBQUtMLFNBQVMsQ0FBQ0csSUFBSSxDQUFDRyxLQUFLLENBQUM7UUFDckMsQ0FBQyxDQUFFO01BQ047TUFFQSxNQUFNQyxjQUFjLEdBQUcsSUFBSSxDQUFDQyxhQUFhLENBQUNSLFNBQVMsRUFBRSxLQUFLLEVBQUVuQixnQkFBZ0IsRUFBRUMseUJBQXlCLENBQUM7TUFDeEcsSUFBSSxDQUFDMkIsNEJBQTRCLENBQUMsQ0FBQztNQUVuQyxPQUFPLElBQUksQ0FBQ0Msc0JBQXNCLENBQUNILGNBQWMsRUFBRSxLQUFLLENBQUM7SUFDMUQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFuRyxNQUFBLENBS011RyxjQUFjLEdBQXBCLGVBQU1BLGNBQWNBLENBQUEsRUFBNEI7TUFDL0MsSUFBSSxJQUFJLENBQUMzRyxjQUFjLEVBQUU7UUFDeEIsSUFBSSxDQUFDQSxjQUFjLEdBQUcsS0FBSztRQUMzQixJQUFJNEcsV0FBVyxHQUFHLElBQUksQ0FBQy9DLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDK0MsV0FBVyxHQUFHLElBQUksQ0FBQ2pDLGdDQUFnQyxDQUFDaUMsV0FBVyxDQUFDO1FBQ2hFLE1BQU1aLFNBQVMsR0FBRyxJQUFJLENBQUNqQyxxQkFBcUIsQ0FBQzZDLFdBQVcsQ0FBQztRQUV6RCxNQUFNTCxjQUFjLEdBQUcsSUFBSSxDQUFDQyxhQUFhLENBQUNSLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQztRQUV2RSxJQUFJLENBQUM5Rix1QkFBdUIsR0FBRyxJQUFJO1FBQ25DLE9BQU8sSUFBSSxDQUFDd0csc0JBQXNCLENBQUNILGNBQWMsRUFBRSxJQUFJLENBQUM7TUFDekQsQ0FBQyxNQUFNO1FBQ04sT0FBT1QsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUN6QjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTNGLE1BQUEsQ0FJQXlHLCtCQUErQixHQUEvQixTQUFBQSwrQkFBK0JBLENBQUEsRUFBWTtNQUMxQyxPQUFPLElBQUksQ0FBQzNHLHVCQUF1QjtJQUNwQzs7SUFFQTtBQUNEO0FBQ0EsT0FGQztJQUFBRSxNQUFBLENBR0EwRyx1QkFBdUIsR0FBdkIsU0FBQUEsdUJBQXVCQSxDQUFBLEVBQVM7TUFDL0IsSUFBSSxDQUFDNUcsdUJBQXVCLEdBQUcsS0FBSztJQUNyQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFFLE1BQUEsQ0FJTTJHLE9BQU8sR0FBYixlQUFNQSxPQUFPQSxDQUFBLEVBQTRCO01BQ3hDLE1BQU1DLFlBQVksR0FBRyxJQUFJLENBQUNuRCxPQUFPLENBQUMsQ0FBQztNQUNuQyxJQUFJb0QsYUFBYTs7TUFFakI7TUFDQSxLQUFLLElBQUlDLENBQUMsR0FBRyxJQUFJLENBQUN4RCxnQkFBZ0IsQ0FBQ3BFLE1BQU0sR0FBRyxDQUFDLEVBQUU0SCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEVBQUUsRUFBRTtRQUMxRCxJQUFJLElBQUksQ0FBQ3hELGdCQUFnQixDQUFDd0QsQ0FBQyxDQUFDLENBQUMzRCxJQUFJLEtBQUt5RCxZQUFZLEVBQUU7VUFDbkRDLGFBQWEsR0FBRyxJQUFJLENBQUN2RCxnQkFBZ0IsQ0FBQ3dELENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzNELElBQUk7VUFDakQ7UUFDRDtNQUNEO01BRUEsSUFBSTBELGFBQWEsRUFBRTtRQUNsQixPQUFPLElBQUksQ0FBQ3JDLFNBQVMsQ0FBQ3FDLGFBQWEsQ0FBQztNQUNyQyxDQUFDLE1BQU07UUFDTjtRQUNBO1FBQ0E7UUFDQTlGLE1BQU0sQ0FBQ2EsT0FBTyxDQUFDbUYsSUFBSSxDQUFDLENBQUM7UUFDckIsT0FBT3JCLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7TUFDekI7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQTNGLE1BQUEsQ0FRTWdILEtBQUssR0FBWCxlQUFNQSxLQUFLQSxDQUFDQyxVQUFrQixFQUFFQyxXQUF3RSxFQUFvQjtNQUMzSCxNQUFNNUksS0FBSyxHQUFHLElBQUksQ0FBQytFLFFBQVEsQ0FBQzhELE1BQU0sQ0FBQ0YsVUFBVSxFQUFFQyxXQUFXLENBQUM7TUFDM0QsT0FBTyxJQUFJLENBQUMxQyxTQUFTLENBQUNsRyxLQUFLLEVBQUcsS0FBSyxFQUFFNEksV0FBVyxFQUFFRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQ0YsV0FBVyxFQUFFRyxhQUFhLENBQUM7SUFDM0c7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFySCxNQUFBLENBS0FzSCxXQUFXLEdBQVgsU0FBQUEsV0FBV0EsQ0FBQSxFQUFTO01BQ25CLE9BQU8sSUFBSSxDQUFDbEcsZUFBZSxDQUFDbUcsaUJBQWlCLENBQUMsQ0FBQztJQUNoRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBdkgsTUFBQSxDQU1Bd0gsd0JBQXdCLEdBQXhCLFNBQUFBLHdCQUF3QkEsQ0FBQ2xKLEtBQWEsRUFBVztNQUNoRCxJQUFJQSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1FBQ3JCQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3lHLFNBQVMsQ0FBQyxDQUFDLENBQUM7TUFDM0I7TUFDQSxNQUFNMEMsV0FBVyxHQUFHM0osbUJBQW1CLENBQUNRLEtBQUssQ0FBQztNQUM5QyxPQUFPbUosV0FBVyxDQUFDcEosS0FBSyxDQUFDLElBQUksQ0FBQ29GLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekM7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBekQsTUFBQSxDQUlBMEgscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQSxFQUFZO01BQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUNuSSx3QkFBd0I7SUFDdEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBUyxNQUFBLENBT0EySCxrQkFBa0IsR0FBbEIsU0FBQUEsa0JBQWtCQSxDQUFDckosS0FBYSxFQUFFTixVQUFtQixFQUFRO01BQzVELElBQUksQ0FBQ3VGLGlCQUFpQixHQUFHekYsbUJBQW1CLENBQUNRLEtBQUssRUFBRU4sVUFBVSxDQUFDO01BQy9ELElBQUksQ0FBQ3lCLG9CQUFvQixHQUFHLEtBQUs7SUFDbEM7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQU8sTUFBQSxDQUdBNEgsc0JBQXNCLEdBQXRCLFNBQUFBLHNCQUFzQkEsQ0FBQSxFQUFTO01BQzlCLElBQUksQ0FBQ3JFLGlCQUFpQixHQUFHLElBQUk7SUFDOUI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBdkQsTUFBQSxDQUlBNkgsa0JBQWtCLEdBQWxCLFNBQUFBLGtCQUFrQkEsQ0FBQSxFQUFZO01BQzdCLE9BQU8sSUFBSSxDQUFDdEUsaUJBQWlCLEtBQUssSUFBSTtJQUN2Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXZELE1BQUEsQ0FLQW9GLGtCQUFrQixHQUFsQixTQUFBQSxrQkFBa0JBLENBQUM5RyxLQUFhLEVBQVc7TUFDMUMsT0FBTyxJQUFJLENBQUNpRixpQkFBaUIsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDQSxpQkFBaUIsQ0FBQ2xGLEtBQUssQ0FBQ0MsS0FBSyxDQUFDO0lBQzlFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTBCLE1BQUEsQ0FJQThILHlCQUF5QixHQUF6QixTQUFBQSx5QkFBeUJBLENBQUEsRUFBWTtNQUNwQyxPQUFPLElBQUksQ0FBQ3JJLG9CQUFvQjtJQUNqQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQU8sTUFBQSxDQUtBK0gsaUNBQWlDLEdBQWpDLFNBQUFBLGlDQUFpQ0EsQ0FBQSxFQUFTO01BQ3pDLElBQUksQ0FBQ3BJLDJCQUEyQixHQUFHLElBQUk7SUFDeEM7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQUssTUFBQSxDQUdBZ0ksaUJBQWlCLEdBQWpCLFNBQUFBLGlCQUFpQkEsQ0FBQSxFQUFTO01BQ3pCLElBQUksSUFBSSxDQUFDL0MsMkJBQTJCLEVBQUU7UUFDckMsSUFBSSxDQUFDQSwyQkFBMkIsQ0FBQ1UsT0FBTyxDQUFDLENBQUM7TUFDM0M7SUFDRDs7SUFFQTtBQUNEO0FBQ0EsT0FGQztJQUFBM0YsTUFBQSxDQUdBMkIsaUNBQWlDLEdBQWpDLFNBQUFBLGlDQUFpQ0EsQ0FBQSxFQUFTO01BQ3pDLElBQUksQ0FBQ3NELDJCQUEyQixHQUFHLElBQUlnRCxlQUFlLENBQUMsQ0FBQztNQUN4RCxJQUFJLENBQUN0SSwyQkFBMkIsR0FBRyxLQUFLO0lBQ3pDLENBQUM7SUFBQWpCLFdBQUEsQ0FFTW9ILHlCQUF5QixHQUFoQyxTQUFPQSx5QkFBeUJBLENBQUN4SCxLQUF5QixFQUFZO01BQ3JFLElBQUlBLEtBQUssS0FBS0YsU0FBUyxFQUFFO1FBQ3hCRSxLQUFLLEdBQUcsRUFBRTtNQUNYO01BQ0EsTUFBTTRKLGFBQWEsR0FBRzVKLEtBQUssQ0FBQzZKLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzNDLE1BQU1DLE9BQU8sR0FBR0YsYUFBYSxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDO01BQ3hDLE1BQU1FLEtBQWUsR0FBRyxFQUFFO01BRTFCRCxPQUFPLENBQUNFLE9BQU8sQ0FBRUMsTUFBTSxJQUFLO1FBQzNCLElBQUlBLE1BQU0sQ0FBQ3JKLE1BQU0sRUFBRTtVQUNsQm1KLEtBQUssQ0FBQzNFLElBQUksQ0FBQzZFLE1BQU0sQ0FBQ0osS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDO01BQ0QsQ0FBQyxDQUFDO01BRUYsT0FBT0UsS0FBSztJQUNiOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBckksTUFBQSxDQUtBMkQscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQ3JGLEtBQWEsRUFBZTtNQUNqRCxJQUFJQSxLQUFLLEtBQUtGLFNBQVMsRUFBRTtRQUN4QkUsS0FBSyxHQUFHLEVBQUU7TUFDWDtNQUVBLE1BQU1rSyxNQUFtQixHQUFHO1FBQzNCekMsSUFBSSxFQUFFckgsV0FBVyxDQUFDb0gseUJBQXlCLENBQUN4SCxLQUFLLENBQUM7UUFDbEQ2RSxJQUFJLEVBQUU3RSxLQUFLO1FBQ1htSyxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQ2YsQ0FBQzs7TUFFRDtNQUNBLE1BQU1DLE9BQU8sR0FBR3BLLEtBQUssQ0FBQzBFLEtBQUssQ0FBQyxJQUFJdkUsTUFBTSxDQUFDLFFBQVFkLGFBQWEsQ0FBQ0MsV0FBVyxVQUFVLENBQUMsQ0FBQztNQUNwRjRLLE1BQU0sQ0FBQ0csT0FBTyxHQUFHRCxPQUFPLElBQUlBLE9BQU8sQ0FBQ3hKLE1BQU0sR0FBRyxDQUFDLEdBQUd3SixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUd0SyxTQUFTO01BQ3ZFLElBQUlvSyxNQUFNLENBQUNHLE9BQU8sS0FBSyxxQkFBcUIsRUFBRTtRQUM3Q0gsTUFBTSxDQUFDQyxVQUFVLEdBQUcsQ0FBQztNQUN0QixDQUFDLE1BQU0sSUFBSUQsTUFBTSxDQUFDRyxPQUFPLEtBQUsscUJBQXFCLEVBQUU7UUFDcERILE1BQU0sQ0FBQ0MsVUFBVSxHQUFHLENBQUM7TUFDdEIsQ0FBQyxNQUFNO1FBQ05ELE1BQU0sQ0FBQ0MsVUFBVSxHQUFHLENBQUM7TUFDdEI7TUFDQSxPQUFPRCxNQUFNO0lBQ2Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVZDO0lBQUF4SSxNQUFBLENBV0FvRyxhQUFhLEdBQWIsU0FBQUEsYUFBYUEsQ0FDWlIsU0FBc0IsRUFDdEJnRCxZQUFxQixFQUNyQm5FLGdCQUEwQixFQUMxQm9FLDJCQUFxQyxFQUNyQjtNQUNoQixNQUFNakMsWUFBWSxHQUFHLElBQUksQ0FBQ3JDLGdDQUFnQyxDQUFDLElBQUksQ0FBQ2QsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUMxRSxJQUFJcUYsU0FBUyxHQUFHLElBQUksQ0FBQ3hGLGdCQUFnQixDQUFDcEUsTUFBTSxHQUFHLENBQUM7TUFDaEQsSUFBSTZKLFNBQVMsR0FBR0gsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDOztNQUVwQztNQUNBO01BQ0E7TUFDQTtNQUNBLElBQUksQ0FBQ0EsWUFBWSxFQUFFO1FBQ2xCLE9BQU9FLFNBQVMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDeEYsZ0JBQWdCLENBQUN3RixTQUFTLENBQUMsQ0FBQzNGLElBQUksS0FBS3lELFlBQVksRUFBRTtVQUNoRixJQUFJLENBQUN0RCxnQkFBZ0IsQ0FBQzBGLEdBQUcsQ0FBQyxDQUFDO1VBQzNCRixTQUFTLEVBQUU7UUFDWjtRQUVBLElBQUksSUFBSSxDQUFDeEYsZ0JBQWdCLENBQUNwRSxNQUFNLEtBQUssQ0FBQyxFQUFFO1VBQ3ZDO1VBQ0E7VUFDQTtVQUNBLElBQUksQ0FBQ29FLGdCQUFnQixDQUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDQyxxQkFBcUIsQ0FBQ2lELFlBQVksQ0FBQyxDQUFDO1VBQ3BFaEYsT0FBTyxDQUFDQyxZQUFZLENBQUNDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO1lBQUVDLE9BQU8sRUFBRTtVQUFFLENBQUMsRUFBRUosT0FBTyxDQUFDSyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdkU7TUFDRDs7TUFFQTtNQUNBLElBQUl3QyxnQkFBZ0IsSUFBSSxDQUFDb0UsMkJBQTJCLEVBQUU7UUFDckQsSUFBSSxDQUFDdkYsZ0JBQWdCLENBQUMsSUFBSSxDQUFDQSxnQkFBZ0IsQ0FBQ3BFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQytKLFNBQVMsR0FBRyxJQUFJO01BQ3pFOztNQUVBO01BQ0EsSUFBSUMsZ0JBQWdCO01BQ3BCLE9BQU8sSUFBSSxDQUFDNUYsZ0JBQWdCLENBQUNwRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3hDLE1BQU1pSyxTQUFTLEdBQUcsSUFBSSxDQUFDN0YsZ0JBQWdCLENBQUMsSUFBSSxDQUFDQSxnQkFBZ0IsQ0FBQ3BFLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDekUsSUFDQyxDQUFDMkosMkJBQTJCLElBQUksQ0FBQ00sU0FBUyxDQUFDRixTQUFTLEtBQ3BELElBQUksQ0FBQ0csbUJBQW1CLENBQUNELFNBQVMsRUFBRXZELFNBQVMsQ0FBQyxLQUFLdEksU0FBUyxDQUFDRyxRQUFRLEVBQ3BFO1VBQ0Q7VUFDQXlMLGdCQUFnQixHQUFHLElBQUksQ0FBQzVGLGdCQUFnQixDQUFDMEYsR0FBRyxDQUFDLENBQUM7VUFDOUNELFNBQVMsRUFBRTtRQUNaLENBQUMsTUFBTSxJQUFJSSxTQUFTLENBQUNGLFNBQVMsSUFBSXpLLG9CQUFvQixDQUFDMkssU0FBUyxDQUFDaEcsSUFBSSxDQUFDLEtBQUszRSxvQkFBb0IsQ0FBQ29ILFNBQVMsQ0FBQ3pDLElBQUksQ0FBQyxFQUFFO1VBQ2hIO1VBQ0E7VUFDQStGLGdCQUFnQixHQUFHLElBQUksQ0FBQzVGLGdCQUFnQixDQUFDMEYsR0FBRyxDQUFDLENBQUM7VUFDOUNELFNBQVMsRUFBRTtVQUNYbkQsU0FBUyxDQUFDcUQsU0FBUyxHQUFHLElBQUk7VUFDMUI7UUFDRCxDQUFDLE1BQU07VUFDTixNQUFNLENBQUM7UUFDUjtNQUNEOztNQUVBO01BQ0EsSUFBSSxDQUFDdkosYUFBYSxHQUFHLElBQUksQ0FBQ29ELGtCQUFrQixDQUFDOEMsU0FBUyxDQUFDekMsSUFBSSxDQUFDO01BQzVELElBQUksQ0FBQyxJQUFJLENBQUNoQixVQUFVLElBQUkrRyxnQkFBZ0IsRUFBRTtRQUN6QyxNQUFNRyxxQkFBcUIsR0FBRyxJQUFJLENBQUN2RyxrQkFBa0IsQ0FBQ29HLGdCQUFnQixDQUFDL0YsSUFBSSxDQUFDO1FBQzVFLE1BQU1tRyxzQkFBc0IsR0FBRyxJQUFJLENBQUNGLG1CQUFtQixDQUFDRixnQkFBZ0IsRUFBRXRELFNBQVMsQ0FBQztRQUNwRjtRQUNBO1FBQ0EsSUFDQyxDQUFDLElBQUksQ0FBQ2xHLGFBQWEsSUFDbkIySixxQkFBcUIsS0FDcEJDLHNCQUFzQixLQUFLaE0sU0FBUyxDQUFDQyxLQUFLLElBQUkrTCxzQkFBc0IsS0FBS2hNLFNBQVMsQ0FBQ0UsVUFBVSxDQUFDLEVBQzlGO1VBQ0RvSSxTQUFTLENBQUN6QyxJQUFJLEdBQUcsSUFBSSxDQUFDVCxpQkFBaUIsQ0FBQ2tELFNBQVMsQ0FBQ3pDLElBQUksRUFBRWtHLHFCQUFxQixDQUFDO1FBQy9FO01BQ0Q7O01BRUE7TUFDQSxNQUFNRSxZQUFZLEdBQUdMLGdCQUFnQixJQUFJdEQsU0FBUyxDQUFDekMsSUFBSSxLQUFLK0YsZ0JBQWdCLENBQUMvRixJQUFJO01BQ2pGLElBQUksSUFBSSxDQUFDRyxnQkFBZ0IsQ0FBQ3BFLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDb0UsZ0JBQWdCLENBQUMsSUFBSSxDQUFDQSxnQkFBZ0IsQ0FBQ3BFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ2lFLElBQUksS0FBS3lDLFNBQVMsQ0FBQ3pDLElBQUksRUFBRTtRQUMxSCxJQUFJLENBQUNHLGdCQUFnQixDQUFDSSxJQUFJLENBQUNrQyxTQUFTLENBQUM7UUFDckMsSUFBSXNELGdCQUFnQixJQUFJMUssb0JBQW9CLENBQUMwSyxnQkFBZ0IsQ0FBQy9GLElBQUksQ0FBQyxLQUFLM0Usb0JBQW9CLENBQUNvSCxTQUFTLENBQUN6QyxJQUFJLENBQUMsRUFBRTtVQUM3R3lDLFNBQVMsQ0FBQzRELGNBQWMsR0FBR04sZ0JBQWdCLENBQUNNLGNBQWM7VUFDMUQ1RCxTQUFTLENBQUM2RCx1QkFBdUIsR0FBR1AsZ0JBQWdCLENBQUNPLHVCQUF1QjtVQUM1RTdELFNBQVMsQ0FBQzhELFNBQVMsR0FBR1IsZ0JBQWdCLENBQUNRLFNBQVM7VUFDaEQ5RCxTQUFTLENBQUMrRCxrQkFBa0IsR0FBR1QsZ0JBQWdCLENBQUNTLGtCQUFrQjtRQUNuRTtNQUNEOztNQUVBO01BQ0EsSUFBSVosU0FBUyxLQUFLLENBQUMsRUFBRTtRQUNwQjtRQUNBLE9BQU87VUFBRWEsSUFBSSxFQUFFO1FBQVMsQ0FBQztNQUMxQixDQUFDLE1BQU0sSUFBSWIsU0FBUyxLQUFLLENBQUMsRUFBRTtRQUMzQjtRQUNBLE9BQU9RLFlBQVksR0FBRztVQUFFSyxJQUFJLEVBQUU7UUFBTyxDQUFDLEdBQUc7VUFBRUEsSUFBSSxFQUFFO1FBQVUsQ0FBQztNQUM3RCxDQUFDLE1BQU07UUFDTjtRQUNBLE9BQU9MLFlBQVksR0FBRztVQUFFSyxJQUFJLEVBQUUsTUFBTTtVQUFFQyxLQUFLLEVBQUVkLFNBQVMsR0FBRztRQUFFLENBQUMsR0FBRztVQUFFYSxJQUFJLEVBQUUsY0FBYztVQUFFQyxLQUFLLEVBQUVkLFNBQVMsR0FBRztRQUFFLENBQUM7TUFDOUc7SUFDRCxDQUFDO0lBQUEvSSxNQUFBLENBRURxQyx5QkFBeUIsR0FBekIsU0FBQUEseUJBQXlCQSxDQUFBLEVBQTBCO01BQ2xELE9BQU8sSUFBSSxDQUFDcEIscUJBQXFCLEdBQUcsUUFBUSxHQUFHLFVBQVU7SUFDMUQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBakIsTUFBQSxDQUlBOEoseUJBQXlCLEdBQXpCLFNBQUFBLHlCQUF5QkEsQ0FBQSxFQUFTO01BQ2pDLElBQUksQ0FBQzdJLHFCQUFxQixHQUFHLElBQUk7TUFDakMsSUFBSSxDQUFDb0MsUUFBUSxDQUFDMEcsSUFBSSxDQUFDLENBQUM7SUFDckI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEvSixNQUFBLENBS0FnSyx3QkFBd0IsR0FBeEIsU0FBQUEsd0JBQXdCQSxDQUFDQyxrQkFBdUMsRUFBUTtNQUN2RSxJQUFJLENBQUNoSixxQkFBcUIsR0FBRyxLQUFLO01BQ2xDLElBQUksQ0FBQ29DLFFBQVEsQ0FBQzZHLFVBQVUsQ0FBQ0Qsa0JBQWtCLENBQUM7SUFDN0M7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBakssTUFBQSxDQU9Nc0csc0JBQXNCLEdBQTVCLGVBQU1BLHNCQUFzQkEsQ0FBQ0gsY0FBNkIsRUFBRXlDLFlBQXFCLEVBQW9CO01BQ3BHO01BQ0EsTUFBTXVCLElBQUksR0FBRyxJQUFJO01BQ2pCLE9BQU8sSUFBSXpFLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO1FBQy9CLElBQUksQ0FBQ3BHLHdCQUF3QixHQUFHLElBQUk7UUFDcEMsTUFBTTZLLFlBQVksR0FBRyxJQUFJLENBQUM5RyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNBLGdCQUFnQixDQUFDcEUsTUFBTSxHQUFHLENBQUMsQ0FBQztVQUMzRW1MLFFBQVEsR0FBRyxJQUFJLENBQUMvRyxnQkFBZ0IsQ0FBQ3BFLE1BQU0sR0FBRyxDQUFDO1FBRTVDLFNBQVNvTCxZQUFZQSxDQUFBLEVBQVM7VUFDN0IsSUFBSSxDQUFDMUIsWUFBWSxFQUFFO1lBQ2xCdUIsSUFBSSxDQUFDSCx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7VUFDcEM7VUFFQ0csSUFBSSxDQUFDOUcsUUFBUSxDQUFDWSxjQUFjLENBQUMsQ0FBQyxDQUFDc0csV0FBVyxDQUFjSCxZQUFZLENBQUNqSCxJQUFJLENBQUM7VUFDM0V2QixPQUFPLENBQUNDLFlBQVksQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUM7WUFBRUMsT0FBTyxFQUFFcUk7VUFBUyxDQUFDLEVBQUV6SSxPQUFPLENBQUNLLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztVQUU3RSxJQUFJMkcsWUFBWSxFQUFFO1lBQ2pCNEIsVUFBVSxDQUFDLFlBQVk7Y0FDdEI7Y0FDQTtjQUNBTCxJQUFJLENBQUNILHdCQUF3QixDQUFDLElBQUksQ0FBQztZQUNwQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1VBQ047VUFFQUcsSUFBSSxDQUFDNUssd0JBQXdCLEdBQUcsS0FBSztVQUNyQ29HLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hCOztRQUVBO1FBQ0EsU0FBUzhFLGdCQUFnQkEsQ0FBQSxFQUFTO1VBQ2pDMUosTUFBTSxDQUFDMEIsbUJBQW1CLENBQUMsVUFBVSxFQUFFZ0ksZ0JBQWdCLENBQUM7VUFDeERELFVBQVUsQ0FBQyxZQUFZO1lBQ3RCO1lBQ0FGLFlBQVksQ0FBQyxDQUFDO1VBQ2YsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNOO1FBRUEsU0FBU0ksU0FBU0EsQ0FBQSxFQUFTO1VBQzFCM0osTUFBTSxDQUFDMEIsbUJBQW1CLENBQUMsVUFBVSxFQUFFaUksU0FBUyxDQUFDO1VBQ2pEUCxJQUFJLENBQUM1Syx3QkFBd0IsR0FBRyxLQUFLO1VBQ3JDb0csT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEI7UUFFQXdFLElBQUksQ0FBQ2pKLGVBQWUsR0FBRyxJQUFJO1FBRTNCLFFBQVFpRixjQUFjLENBQUN5RCxJQUFJO1VBQzFCLEtBQUssU0FBUztZQUNiLE1BQU1GLFNBQVMsR0FBRzlILE9BQU8sQ0FBQ0ssS0FBSyxFQUFFeUgsU0FBUztZQUN6Q1MsSUFBSSxDQUFDOUcsUUFBUSxDQUFDWSxjQUFjLENBQUMsQ0FBQyxDQUFDc0csV0FBVyxDQUFjSCxZQUFZLENBQUNqSCxJQUFJLENBQUM7WUFDM0V2QixPQUFPLENBQUNDLFlBQVksQ0FDbkJDLE1BQU0sQ0FBQ0MsTUFBTSxDQUNaO2NBQ0NDLE9BQU8sRUFBRXFJLFFBQVE7Y0FDakJYLFNBQVMsRUFBRUE7WUFDWixDQUFDLEVBQ0Q5SCxPQUFPLENBQUNLLEtBQ1QsQ0FBQyxFQUNELEVBQ0QsQ0FBQztZQUNEa0ksSUFBSSxDQUFDNUssd0JBQXdCLEdBQUcsS0FBSztZQUNyQ29HLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2Y7VUFFRCxLQUFLLFFBQVE7WUFDWndFLElBQUksQ0FBQzlHLFFBQVEsQ0FBQ1ksY0FBYyxDQUFDLENBQUMsQ0FBQzBHLE9BQU8sQ0FBQ1AsWUFBWSxDQUFDakgsSUFBSSxDQUFDO1lBQ3pEdkIsT0FBTyxDQUFDQyxZQUFZLENBQUNDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDO2NBQUVDLE9BQU8sRUFBRXFJO1lBQVMsQ0FBQyxFQUFFekksT0FBTyxDQUFDSyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0VrSSxJQUFJLENBQUM1Syx3QkFBd0IsR0FBRyxLQUFLO1lBQ3JDb0csT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDZjtVQUVELEtBQUssTUFBTTtZQUNWNUUsTUFBTSxDQUFDQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUwSixTQUFTLENBQUM7WUFDOUM5SSxPQUFPLENBQUNnSixFQUFFLENBQUMsQ0FBQ3pFLGNBQWMsQ0FBQzBELEtBQUssQ0FBQztZQUNqQztVQUVELEtBQUssY0FBYztZQUNsQixJQUFJLENBQUNDLHlCQUF5QixDQUFDLENBQUM7WUFDaEMvSSxNQUFNLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRXlKLGdCQUFnQixDQUFDO1lBQ3JEN0ksT0FBTyxDQUFDZ0osRUFBRSxDQUFDLENBQUN6RSxjQUFjLENBQUMwRCxLQUFLLENBQUM7WUFDakM7VUFFRDtZQUNDO1lBQ0EsSUFBSSxDQUFDdEssd0JBQXdCLEdBQUcsS0FBSztZQUNyQ29HLE9BQU8sQ0FBQyxLQUFLLENBQUM7VUFBRTtRQUNsQjtNQUNELENBQUMsQ0FBQztJQUNILENBQUM7SUFBQTNGLE1BQUEsQ0FFRDZLLG1CQUFtQixHQUFuQixTQUFBQSxtQkFBbUJBLENBQUEsRUFBZ0I7TUFDbEMsT0FBTyxJQUFJLENBQUN2SCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNBLGdCQUFnQixDQUFDcEUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQUFjLE1BQUEsQ0FFRDhLLGNBQWMsR0FBZCxTQUFBQSxjQUFjQSxDQUFDQyxRQUFnRCxFQUFRO01BQ3RFLElBQUksQ0FBQ2xMLGFBQWEsR0FBR2tMLFFBQVEsQ0FBQ0MsTUFBTSxDQUFFQyxPQUFPLElBQUs7UUFDakQsT0FBT0EsT0FBTyxDQUFDQyxPQUFPLEtBQUtELE9BQU8sQ0FBQ0UsT0FBTztNQUMzQyxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQUFuTCxNQUFBLENBRURhLFNBQVMsR0FBVCxTQUFBQSxTQUFTQSxDQUFBLEVBQVM7TUFDakIsSUFBSXZDLEtBQUssR0FBRyxJQUFJLENBQUMyRSxvQkFBb0IsQ0FBQyxDQUFDO01BQ3ZDLE1BQU1tSSxjQUFjLEdBQUcsSUFBSSxDQUFDdkgsa0JBQWtCLENBQUN2RixLQUFLLENBQUM7TUFDckQsSUFBSThNLGNBQWMsSUFBSSxJQUFJLENBQUN4SCxPQUFPLEVBQUU7UUFDbkM7UUFDQTtRQUNBO01BQ0Q7TUFFQSxJQUFJdEYsS0FBSyxDQUFDdUUsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUU7UUFDMUMsSUFBSSxDQUFDakQsY0FBYyxHQUFHLElBQUk7TUFDM0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUNMLHdCQUF3QixFQUFFO1FBQzFDO1FBQ0EsTUFBTTBMLE9BQU8sR0FBRyxJQUFJLENBQUNwTCxhQUFhLENBQUN3TCxJQUFJLENBQUVDLENBQUMsSUFBSztVQUM5QyxPQUFPaE4sS0FBSyxDQUFDdUUsUUFBUSxDQUFDeUksQ0FBQyxDQUFDSixPQUFPLENBQUM7UUFDakMsQ0FBQyxDQUFDO1FBQ0YsSUFBSUQsT0FBTyxFQUFFO1VBQ1o7VUFDQTNNLEtBQUssR0FBR0EsS0FBSyxDQUFDSixPQUFPLENBQUMrTSxPQUFPLENBQUNDLE9BQU8sRUFBRUQsT0FBTyxDQUFDRSxPQUFPLENBQUM7VUFDdkR2SixPQUFPLENBQUNDLFlBQVksQ0FBQ0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVILE9BQU8sQ0FBQ0ssS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFc0osU0FBUyxDQUFDak4sS0FBSyxDQUFDLENBQUM7UUFDN0U7UUFFQSxNQUFNa04sVUFBVSxHQUFHbE4sS0FBSyxDQUFDNkosS0FBSyxDQUFDLElBQUksQ0FBQztRQUNwQyxNQUFNc0QsUUFBUSxHQUFHRCxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUdBLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO1FBQ25ELElBQUksSUFBSSxDQUFDcEcsa0JBQWtCLENBQUNxRyxRQUFRLENBQUMsRUFBRTtVQUN0QyxNQUFNN0YsU0FBUyxHQUFHLElBQUksQ0FBQ2pDLHFCQUFxQixDQUFDOEgsUUFBUSxDQUFDO1VBQ3RELElBQUksQ0FBQ3JGLGFBQWEsQ0FBQ1IsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO1FBQ2xEO01BQ0Q7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVRDO0lBQUE1RixNQUFBLENBV0FvSixtQkFBbUIsR0FBbkIsU0FBQUEsbUJBQW1CQSxDQUFDc0MsT0FBb0IsRUFBRUMsT0FBb0IsRUFBVTtNQUN2RTtNQUNBLElBQUlELE9BQU8sQ0FBQzNGLElBQUksQ0FBQzdHLE1BQU0sR0FBR3lNLE9BQU8sQ0FBQzVGLElBQUksQ0FBQzdHLE1BQU0sRUFBRTtRQUM5QyxPQUFPNUIsU0FBUyxDQUFDSSxTQUFTO01BQzNCO01BQ0EsSUFBSWtPLEtBQUssR0FBRyxJQUFJO01BQ2hCLElBQUkxRixLQUFLO01BRVQsS0FBS0EsS0FBSyxHQUFHLENBQUMsRUFBRTBGLEtBQUssSUFBSTFGLEtBQUssR0FBR3dGLE9BQU8sQ0FBQzNGLElBQUksQ0FBQzdHLE1BQU0sRUFBRWdILEtBQUssRUFBRSxFQUFFO1FBQzlELElBQUl3RixPQUFPLENBQUMzRixJQUFJLENBQUNHLEtBQUssQ0FBQyxLQUFLeUYsT0FBTyxDQUFDNUYsSUFBSSxDQUFDRyxLQUFLLENBQUMsRUFBRTtVQUNoRDBGLEtBQUssR0FBRyxLQUFLO1FBQ2Q7TUFDRDtNQUVBLElBQUksQ0FBQ0EsS0FBSyxFQUFFO1FBQ1g7UUFDQSxJQUFJRixPQUFPLENBQUMzRixJQUFJLENBQUM3RyxNQUFNLEtBQUssQ0FBQyxJQUFJeU0sT0FBTyxDQUFDNUYsSUFBSSxDQUFDN0csTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUNzQyxZQUFZLEdBQUdrSyxPQUFPLENBQUMzRixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUNuRyxJQUFJLElBQUksQ0FBQ3ZFLFlBQVksQ0FBQ2tLLE9BQU8sQ0FBQzNGLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOEYsUUFBUSxJQUFJLElBQUksQ0FBQ3JLLFlBQVksQ0FBQ2tLLE9BQU8sQ0FBQzNGLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOEYsUUFBUSxDQUFDaEosUUFBUSxDQUFDOEksT0FBTyxDQUFDNUYsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekgsT0FBT3pJLFNBQVMsQ0FBQ0csUUFBUTtVQUMxQjtRQUNEO1FBQ0E7UUFDQSxPQUFPSCxTQUFTLENBQUNJLFNBQVM7TUFDM0I7O01BRUE7TUFDQSxJQUFJZ08sT0FBTyxDQUFDM0YsSUFBSSxDQUFDN0csTUFBTSxHQUFHeU0sT0FBTyxDQUFDNUYsSUFBSSxDQUFDN0csTUFBTSxJQUFJd00sT0FBTyxDQUFDakQsVUFBVSxHQUFHa0QsT0FBTyxDQUFDbEQsVUFBVSxFQUFFO1FBQ3pGLE9BQU9uTCxTQUFTLENBQUNHLFFBQVE7TUFDMUI7TUFDQSxJQUFJaU8sT0FBTyxDQUFDakQsVUFBVSxHQUFHa0QsT0FBTyxDQUFDbEQsVUFBVSxFQUFFO1FBQzVDLE9BQU9uTCxTQUFTLENBQUNJLFNBQVMsQ0FBQyxDQUFDO01BQzdCOztNQUVBO01BQ0E7TUFDQSxPQUFPZ08sT0FBTyxDQUFDL0MsT0FBTyxLQUFLZ0QsT0FBTyxDQUFDaEQsT0FBTyxHQUFHckwsU0FBUyxDQUFDQyxLQUFLLEdBQUdELFNBQVMsQ0FBQ0UsVUFBVTtJQUNwRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVpDO0lBQUFrQixXQUFBLENBYWVvTixxQkFBcUIsR0FBcEMsU0FBZUEscUJBQXFCQSxDQUFDOUgsZ0JBQW9DLEVBQVk7TUFDcEYsTUFBTStILFVBQVUsR0FBRy9ILGdCQUFnQixFQUFFbUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7TUFDdEQsSUFBSSxDQUFDNEQsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ25CQSxVQUFVLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNyQjtNQUNBLE9BQU9ELFVBQVU7SUFDbEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBL0wsTUFBQSxDQUlBaU0sdUJBQXVCLEdBQXZCLFNBQUFBLHVCQUF1QkEsQ0FBQSxFQUFZO01BQ2xDO01BQ0E7TUFDQTtNQUNBLE1BQU1sSSxTQUFTLEdBQUcsSUFBSSxDQUFDRCxXQUFXLENBQUMsQ0FBQztNQUVwQyxNQUFNb0ksUUFBUSxHQUFHeE4sV0FBVyxDQUFDb04scUJBQXFCLENBQUMvSCxTQUFTLENBQUM7TUFFN0QsSUFBSW1JLFFBQVEsQ0FBQ2hOLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDeEI7UUFDQSxPQUFPLEtBQUs7TUFDYjtNQUVBLE1BQU1pRSxJQUFJLEdBQUcrSSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtNQUU5QixJQUFJQyxZQUFZO01BQ2hCLElBQUksSUFBSSxDQUFDNUksaUJBQWlCLEVBQUU7UUFDM0IsS0FBSyxJQUFJdUQsQ0FBQyxHQUFHLElBQUksQ0FBQ3hELGdCQUFnQixDQUFDcEUsTUFBTSxHQUFHLENBQUMsRUFBRTRILENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsRUFBRSxFQUFFO1VBQzFELElBQUksSUFBSSxDQUFDeEQsZ0JBQWdCLENBQUN3RCxDQUFDLENBQUMsQ0FBQzNELElBQUksS0FBS0EsSUFBSSxFQUFFO1lBQzNDZ0osWUFBWSxHQUFHLElBQUksQ0FBQzdJLGdCQUFnQixDQUFDd0QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDM0QsSUFBSTtZQUNoRDtVQUNEO1FBQ0Q7UUFFQSxPQUFPLENBQUNnSixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMvRyxrQkFBa0IsQ0FBQytHLFlBQVksQ0FBQztNQUMvRDtNQUNBLE9BQU8sS0FBSztJQUNiOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQW5NLE1BQUEsQ0FJQW9NLG1CQUFtQixHQUFuQixTQUFBQSxtQkFBbUJBLENBQUEsRUFBWTtNQUM5QixNQUFNckksU0FBUyxHQUFHLElBQUksQ0FBQ0QsV0FBVyxDQUFDLENBQUM7TUFFcEMsTUFBTW9JLFFBQVEsR0FBR3hOLFdBQVcsQ0FBQ29OLHFCQUFxQixDQUFDL0gsU0FBUyxDQUFDO01BRTdELElBQUltSSxRQUFRLENBQUNoTixNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3hCO1FBQ0EsT0FBTyxLQUFLO01BQ2I7O01BRUE7TUFDQSxNQUFNaUUsSUFBSSxHQUFHK0ksUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7TUFDOUIsT0FBTyxJQUFJLENBQUM1SSxnQkFBZ0IsQ0FBQ3BFLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDb0UsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNILElBQUksS0FBS0EsSUFBSTtJQUNsRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFuRCxNQUFBLENBSUFxTSx5QkFBeUIsR0FBekIsU0FBQUEseUJBQXlCQSxDQUFBLEVBQVk7TUFDcEMsSUFBSSxJQUFJLENBQUMvSSxnQkFBZ0IsQ0FBQ3BFLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDckMsT0FBTyxLQUFLO01BQ2I7TUFFQSxNQUFNb04sYUFBYSxHQUFHLElBQUksQ0FBQ2hKLGdCQUFnQixDQUFDLElBQUksQ0FBQ0EsZ0JBQWdCLENBQUNwRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQzdFLE1BQU1xTixjQUFjLEdBQUcsSUFBSSxDQUFDakosZ0JBQWdCLENBQUMsSUFBSSxDQUFDQSxnQkFBZ0IsQ0FBQ3BFLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFFOUUsT0FBT29OLGFBQWEsQ0FBQ25KLElBQUksQ0FBQ2dGLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBS29FLGNBQWMsQ0FBQ3BKLElBQUksQ0FBQ2dGLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUU7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBbkksTUFBQSxDQUlBd00sMEJBQTBCLEdBQTFCLFNBQUFBLDBCQUEwQkEsQ0FBQSxFQUFZO01BQ3JDLE1BQU1DLFdBQVcsR0FBR2pPLG9CQUFvQixDQUFDLElBQUksQ0FBQ2lGLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDeEQsTUFBTWlKLFlBQVksR0FBRyxJQUFJLENBQUNwSixnQkFBZ0IsQ0FBQytILElBQUksQ0FBRXBKLEtBQUssSUFBSztRQUMxRCxPQUFPekQsb0JBQW9CLENBQUN5RCxLQUFLLENBQUNrQixJQUFJLENBQUMsS0FBS3NKLFdBQVc7TUFDeEQsQ0FBQyxDQUFDO01BRUYsSUFBSUUsWUFBWSxHQUFHLEtBQUs7TUFDeEIsSUFBSUQsWUFBWSxFQUFFbEQsY0FBYyxFQUFFO1FBQ2pDLElBQUlvRCxZQUFZLEdBQUdDLE9BQU8sQ0FBQ0MsY0FBYyxDQUFDSixZQUFZLENBQUNsRCxjQUFjLENBQUM7UUFDdEUsSUFBSUUsU0FBUyxHQUFHZ0QsWUFBWSxDQUFDaEQsU0FBUztRQUN0QyxJQUFJLENBQUMsQ0FBQ2tELFlBQVksSUFBSSxDQUFDQSxZQUFZLENBQUNHLGNBQWMsQ0FBQyxDQUFDLEtBQUtMLFlBQVksQ0FBQ2pELHVCQUF1QixFQUFFO1VBQzlGO1VBQ0E7VUFDQW1ELFlBQVksR0FBR0MsT0FBTyxDQUFDQyxjQUFjLENBQUNKLFlBQVksQ0FBQ2pELHVCQUF1QixDQUFDO1VBQzNFQyxTQUFTLEdBQUdnRCxZQUFZLENBQUMvQyxrQkFBa0I7UUFDNUM7UUFDQTtRQUNDO1FBQ0E7UUFDQWlELFlBQVksRUFBRUksU0FBUyxDQUFDLENBQUMsRUFBRUMsR0FBRyxDQUFRLGtCQUFrQixDQUFDLElBQ3hETCxZQUFZLENBQXNCTSxPQUFPLENBQUMsQ0FBQyxFQUMzQztVQUNELE9BQU8sS0FBSztRQUNiO1FBQ0FOLFlBQVksRUFBRU8sS0FBSyxDQUFDekQsU0FBUyxDQUFDO1FBQzlCaUQsWUFBWSxHQUFHQyxZQUFZLEtBQUt4TyxTQUFTO01BQzFDO01BRUEsT0FBT3VPLFlBQVk7SUFDcEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBM00sTUFBQSxDQUlRcUcsNEJBQTRCLEdBQXBDLFNBQVFBLDRCQUE0QkEsQ0FBQSxFQUFTO01BQzVDLE1BQU1vRyxXQUFXLEdBQUdqTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUNpRixPQUFPLENBQUMsQ0FBQyxDQUFDO01BQ3hELE1BQU1pSixZQUFZLEdBQUcsSUFBSSxDQUFDcEosZ0JBQWdCLENBQUMrSCxJQUFJLENBQUVwSixLQUFLLElBQUs7UUFDMUQsT0FBT3pELG9CQUFvQixDQUFDeUQsS0FBSyxDQUFDa0IsSUFBSSxDQUFDLEtBQUtzSixXQUFXO01BQ3hELENBQUMsQ0FBQztNQUNGLElBQUlDLFlBQVksRUFBRTtRQUNqQixNQUFNRSxZQUFZLEdBQUdDLE9BQU8sQ0FBQ08sZ0JBQWdCLENBQUMsQ0FBQztRQUMvQ1YsWUFBWSxDQUFDbEQsY0FBYyxHQUFHb0QsWUFBWSxFQUFFUyxLQUFLLENBQUMsQ0FBQztRQUNuRCxJQUFJVCxZQUFZLEVBQUU7VUFDakI7VUFDQSxJQUFJVSxXQUFXLEdBQUdWLFlBQVksQ0FBQ0ksU0FBUyxDQUFDLENBQUM7VUFDMUMsT0FBT00sV0FBVyxJQUFJLENBQUNBLFdBQVcsQ0FBQ0wsR0FBRyxDQUFVLG9CQUFvQixDQUFDLElBQUksQ0FBQ0ssV0FBVyxDQUFDTCxHQUFHLENBQVMsYUFBYSxDQUFDLEVBQUU7WUFDakhLLFdBQVcsR0FBR0EsV0FBVyxDQUFDTixTQUFTLENBQUMsQ0FBQztVQUN0QztVQUNBTixZQUFZLENBQUNqRCx1QkFBdUIsR0FBRzZELFdBQVcsRUFBRUQsS0FBSyxDQUFDLENBQUM7VUFDM0RYLFlBQVksQ0FBQy9DLGtCQUFrQixHQUFHO1lBQUU0RCxhQUFhLEVBQUU7VUFBSyxDQUFDO1FBQzFEO1FBQ0FiLFlBQVksQ0FBQ2hELFNBQVMsR0FBR2tELFlBQVksRUFBRVksWUFBWSxDQUFDLENBQUM7TUFDdEQ7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXhOLE1BQUEsQ0FLQXlOLGlCQUFpQixHQUFqQixTQUFBQSxpQkFBaUJBLENBQUN0SyxJQUFZLEVBQXNCO01BQ25ELElBQUksQ0FBQyxJQUFJLENBQUNoQixVQUFVLEVBQUU7UUFDckIsT0FBTy9ELFNBQVM7TUFDakI7O01BRUE7TUFDQSxNQUFNc1AsV0FBVyxHQUFHdkssSUFBSSxDQUFDZ0YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7TUFFdEM7TUFDQSxJQUFJd0YsV0FBb0M7TUFDeEMsS0FBSyxJQUFJekgsS0FBSyxHQUFHLElBQUksQ0FBQzVDLGdCQUFnQixDQUFDcEUsTUFBTSxHQUFHLENBQUMsRUFBRWdILEtBQUssSUFBSSxDQUFDLElBQUl5SCxXQUFXLEtBQUt2UCxTQUFTLEVBQUU4SCxLQUFLLEVBQUUsRUFBRTtRQUNwRyxJQUFJLElBQUksQ0FBQzVDLGdCQUFnQixDQUFDNEMsS0FBSyxDQUFDLENBQUMvQyxJQUFJLENBQUNnRixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUt1RixXQUFXLEVBQUU7VUFDcEVDLFdBQVcsR0FBRyxJQUFJLENBQUNySyxnQkFBZ0IsQ0FBQzRDLEtBQUssQ0FBQztRQUMzQztNQUNEO01BRUEsT0FBT3lILFdBQVcsRUFBRWhGLE9BQU87SUFDNUIsQ0FBQztJQUFBLE9BQUFqSyxXQUFBO0VBQUEsRUE3OUJ3QmtQLFVBQVUsTUFBQS9PLE1BQUE7RUFBQSxPQWcrQnJCSCxXQUFXO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
929
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnVtU3RhdGUiLCJFUVVBTCIsIkNPTVBBVElCTEUiLCJBTkNFU1RPUiIsIkRJRkZFUkVOVCIsImVudW1VUkxQYXJhbXMiLCJMQVlPVVRQQVJBTSIsIklBUFBTVEFURVBBUkFNIiwiY3JlYXRlR3VhcmRGcm9tSGFzaCIsInNHdWFyZEhhc2giLCJoYXNoVHJha2VyIiwiX2d1YXJkSGFzaCIsInJlcGxhY2UiLCJoYXNoVHJhY2tlciIsInVuZGVmaW5lZCIsImNoZWNrIiwic0hhc2giLCJpbmRleE9mIiwicmVtb3ZlQXBwU3RhdGVJbkhhc2giLCJSZWdFeHAiLCJSb3V0ZXJQcm94eSIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9jbGFzcyIsIl9CYXNlT2JqZWN0IiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJiSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmciLCJiSXNDb21wdXRpbmdUaXRsZUhpZXJhY2h5IiwiYklzR3VhcmRDcm9zc0FsbG93ZWQiLCJzSUFwcFN0YXRlS2V5IiwiX2JBY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvIiwiX2JBcHBseVJlc3RvcmUiLCJfcGF0aE1hcHBpbmdzIiwicmVzdG9yZUhpc3RvcnlUcmlnZ2VyZWQiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImluaXQiLCJvQXBwQ29tcG9uZW50IiwiaXNmY2xFbmFibGVkIiwiZ2V0U2VydmljZSIsInRoZW4iLCJhc3luY0luaXQiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiX2ZuSGFzaEd1YXJkIiwiaGFzaEd1YXJkIiwiYmluZCIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJfYkRpc2FibGVPbkhhc2hDaGFuZ2UiLCJfYklnbm9yZVJlc3RvcmUiLCJfYkZvcmNlRm9jdXMiLCJfb1NoZWxsU2VydmljZXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaW5pdFJhdyIsImdldFJvdXRlciIsInJvdXRpbmdIaW50cyIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0Um91dGluZ0hpbnRzIiwid2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uIiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsIk9iamVjdCIsImFzc2lnbiIsImZlTGV2ZWwiLCJzdGF0ZSIsImxvY2F0aW9uIiwiZmNsRW5hYmxlZCIsIl9mbkJsb2NraW5nTmF2RmlsdGVyIiwiX2Jsb2NraW5nTmF2aWdhdGlvbkZpbHRlciIsInJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsImRlc3Ryb3kiLCJ1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJzZXRBcHBTdGF0ZUluSGFzaCIsInNBcHBTdGF0ZUtleSIsInNOZXdIYXNoIiwiaW5jbHVkZXMiLCJmaW5kQXBwU3RhdGVJbkhhc2giLCJhQXBwU3RhdGUiLCJtYXRjaCIsImdldERlY29kZWRXaW5kb3dIYXNoIiwiZGVjb2RlVVJJIiwiaGFzaCIsIm9Sb3V0ZXIiLCJfb1JvdXRlciIsIl9vTWFuYWdlZEhpc3RvcnkiLCJfb05hdmlnYXRpb25HdWFyZCIsInNDdXJyZW50QXBwSGFzaCIsImdldEhhc2giLCJwdXNoIiwiX2V4dHJhY3RTdGF0ZUZyb21IYXNoIiwiYXBwTmFtZSIsImdldEFwcE5hbWVGcm9tSGFzaCIsImdldEZ1bGxIYXNoIiwic3BsaXRIYXNoIiwiYXBwU3BlY2lmaWNSb3V0ZSIsImdldEhhc2hDaGFuZ2VyIiwic2hlbGxQYXJ0IiwiaXNGb2N1c0ZvcmNlZCIsInNldEZvY3VzRm9yY2VkIiwiYkZvcmNlZCIsInJlbW92ZUlBcHBTdGF0ZUtleSIsInJlbW92ZVJlc3RvcmVIaXN0b3J5RmxhZ0Zyb21IYXNoIiwibmF2VG9IYXNoIiwiYlByZXNlcnZlSGlzdG9yeSIsImJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGUiLCJiRm9yY2VGb2N1cyIsInByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXIiLCJza2lwSGFzaEd1YXJkQ2hlY2siLCJzdGFydHNXaXRoIiwic3Vic3RyaW5nIiwic2V0QmFja05hdmlnYXRpb24iLCJfb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24iLCJ3YWl0Rm9yIiwiX2ludGVybmFsTmF2VG9IYXNoIiwiY2hlY2tIYXNoV2l0aEd1YXJkIiwib1Jlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29uZmlybSIsImdldFRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9OZXdTdGF0ZSIsImFDdXJyZW50SGFzaEtleXMiLCJleHRyYWN0RW50aXR5U2V0c0Zyb21IYXNoIiwia2V5cyIsImV2ZXJ5Iiwia2V5IiwiaW5kZXgiLCJvSGlzdG9yeUFjdGlvbiIsIl9wdXNoTmV3U3RhdGUiLCJzdG9yZUZvY3VzSW5mb0ZvckN1cnJlbnRIYXNoIiwiX3JlYnVpbGRCcm93c2VySGlzdG9yeSIsInJlc3RvcmVIaXN0b3J5Iiwic1RhcmdldEhhc2giLCJjaGVja1Jlc3RvcmVIaXN0b3J5V2FzVHJpZ2dlcmVkIiwicmVzZXRSZXN0b3JlSGlzdG9yeUZsYWciLCJuYXZCYWNrIiwic0N1cnJlbnRIYXNoIiwic1ByZXZpb3VzSGFzaCIsImkiLCJiYWNrIiwibmF2VG8iLCJzUm91dGVOYW1lIiwib1BhcmFtZXRlcnMiLCJnZXRVUkwiLCJub1ByZXNlcnZhdGlvbkNhY2hlIiwiYklzU3RpY2t5TW9kZSIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwiZXhpdEZyb21BcHAiLCJiYWNrVG9QcmV2aW91c0FwcCIsImlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeSIsIm9Mb2NhbEd1YXJkIiwiaXNOYXZpZ2F0aW9uRmluYWxpemVkIiwic2V0TmF2aWdhdGlvbkd1YXJkIiwiZGlzY2FyZE5hdmlnYXRpb25HdWFyZCIsImhhc05hdmlnYXRpb25HdWFyZCIsImlzR3VhcmRDcm9zc0FsbG93ZWRCeVVzZXIiLCJhY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24iLCJyZXNvbHZlUm91dGVNYXRjaCIsIlN5bmNocm9uaXphdGlvbiIsInNIYXNoTm9QYXJhbXMiLCJzcGxpdCIsImFUb2tlbnMiLCJuYW1lcyIsImZvckVhY2giLCJzVG9rZW4iLCJvU3RhdGUiLCJzY3JlZW5Nb2RlIiwiYUxheW91dCIsInNMYXlvdXQiLCJiUmVidWlsZE9ubHkiLCJiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb24iLCJsYXN0SW5kZXgiLCJpUG9wQ291bnQiLCJwb3AiLCJwcmVzZXJ2ZWQiLCJvTGFzdFJlbW92ZWRJdGVtIiwib1RvcFN0YXRlIiwiX2NvbXBhcmVDYWNoZVN0YXRlcyIsInNQcmV2aW91c0lBcHBTdGF0ZUtleSIsIm9Db21wYXJpc29uU3RhdGVSZXN1bHQiLCJiSGFzU2FtZUhhc2giLCJmb2N1c0NvbnRyb2xJZCIsInNlY29uZGFyeUZvY3VzQ29udHJvbElkIiwiZm9jdXNJbmZvIiwic2Vjb25kYXJ5Rm9jdXNJbmZvIiwidHlwZSIsInN0ZXBzIiwiX2Rpc2FibGVFdmVudE9uSGFzaENoYW5nZSIsInN0b3AiLCJfZW5hYmxlRXZlbnRPbkhhc2hDaGFuZ2UiLCJiSWdub3JlQ3VycmVudEhhc2giLCJpbml0aWFsaXplIiwidGhhdCIsIm9UYXJnZXRTdGF0ZSIsIm5ld0xldmVsIiwicmVwbGFjZUFzeW5jIiwicmVwbGFjZUhhc2giLCJzZXRUaW1lb3V0IiwiYmFja1JlcGxhY2VBc3luYyIsImJhY2tBc3luYyIsInNldEhhc2giLCJnbyIsImdldExhc3RIaXN0b3J5RW50cnkiLCJzZXRQYXRoTWFwcGluZyIsIm1hcHBpbmdzIiwiZmlsdGVyIiwibWFwcGluZyIsIm9sZFBhdGgiLCJuZXdQYXRoIiwiY3VycmVudEFwcE5hbWUiLCJmaW5kIiwibSIsImVuY29kZVVSSSIsImFIYXNoU3BsaXQiLCJzQXBwSGFzaCIsIm9TdGF0ZTEiLCJvU3RhdGUyIiwiZXF1YWwiLCJwYXJlbnRPZiIsInNwbGl0QXBwU3BlY2lmaWNSb3V0ZSIsInJvdXRlU3BsaXQiLCJzaGlmdCIsImNoZWNrSWZCYWNrSXNPdXRPZkd1YXJkIiwic2VnbWVudHMiLCJwcmV2aW91c0hhc2giLCJjaGVja0lmQmFja0V4aXRzQXBwIiwiY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCIsIm9DdXJyZW50U3RhdGUiLCJvUHJldmlvdXNTdGF0ZSIsInJlc3RvcmVGb2N1c0ZvckN1cnJlbnRIYXNoIiwiY3VycmVudEhhc2giLCJzdGF0ZUZvckhhc2giLCJmb2N1c0FwcGxpZWQiLCJmb2N1c0NvbnRyb2wiLCJFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRGb2N1c0RvbVJlZiIsImdldFBhcmVudCIsImlzQSIsImdldEJ1c3kiLCJmb2N1cyIsImdldEFjdGl2ZUVsZW1lbnQiLCJnZXRJZCIsInBhcmVudFRhYmxlIiwicHJldmVudFNjcm9sbCIsImdldEZvY3VzSW5mbyIsImZpbmRMYXlvdXRGb3JIYXNoIiwiaGFzaE5vUGFyYW0iLCJ0YXJnZXRTdGF0ZSIsIkJhc2VPYmplY3QiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJvdXRlclByb3h5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBTeW5jaHJvbml6YXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3luY2hyb25pemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IElTaGVsbFNlcnZpY2VzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NoZWxsU2VydmljZXNGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBNVGFibGUgZnJvbSBcInNhcC9tL1RhYmxlXCI7XG5pbXBvcnQgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIFVJVGFibGUgZnJvbSBcInNhcC91aS90YWJsZS9UYWJsZVwiO1xuXG5jb25zdCBlbnVtU3RhdGUgPSB7XG5cdEVRVUFMOiAwLFxuXHRDT01QQVRJQkxFOiAxLFxuXHRBTkNFU1RPUjogMixcblx0RElGRkVSRU5UOiAzXG59O1xuY29uc3QgZW51bVVSTFBhcmFtcyA9IHtcblx0TEFZT1VUUEFSQU06IFwibGF5b3V0XCIsXG5cdElBUFBTVEFURVBBUkFNOiBcInNhcC1pYXBwLXN0YXRlXCJcbn07XG5cbnR5cGUgUm91dGVyU3RhdGUgPSB7XG5cdGtleXM6IHN0cmluZ1tdO1xuXHRoYXNoOiBzdHJpbmc7XG5cdHByZXNlcnZlZD86IGJvb2xlYW47XG5cdHNMYXlvdXQ/OiBzdHJpbmc7XG5cdHNjcmVlbk1vZGU6IG51bWJlcjtcblx0Zm9jdXNDb250cm9sSWQ/OiBzdHJpbmc7XG5cdHNlY29uZGFyeUZvY3VzQ29udHJvbElkPzogc3RyaW5nO1xuXHRmb2N1c0luZm8/OiB7XG5cdFx0cHJldmVudFNjcm9sbD86IGJvb2xlYW47XG5cdFx0dGFyZ2V0SW5mbz86IHVua25vd247XG5cdH07XG5cdHNlY29uZGFyeUZvY3VzSW5mbz86IHtcblx0XHRwcmV2ZW50U2Nyb2xsPzogYm9vbGVhbjtcblx0fTtcbn07XG5cbnR5cGUgT3RoZXJIaXN0b3J5QWN0aW9uID0geyB0eXBlOiBcImFwcGVuZFwiIHwgXCJub25lXCIgfCBcInJlcGxhY2VcIiB9O1xuZXhwb3J0IHR5cGUgQmFja0hpc3RvcnlBY3Rpb24gPSB7IHR5cGU6IFwiYmFja1wiIHwgXCJiYWNrLXJlcGxhY2VcIjsgc3RlcHM6IG51bWJlciB9O1xudHlwZSBIeXN0b3J5QWN0aW9uID0gQmFja0hpc3RvcnlBY3Rpb24gfCBPdGhlckhpc3RvcnlBY3Rpb247XG5cbnR5cGUgTmF2aWdhdGlvbkd1YXJkID0geyBfZ3VhcmRIYXNoOiBzdHJpbmc7IGhhc2hUcmFja2VyOiBzdHJpbmcgfCB1bmRlZmluZWQ7IGNoZWNrOiAoaGFzaDogc3RyaW5nKSA9PiBib29sZWFuIH07XG4vKipcbiAqIENyZWF0ZXMgYSBIYXNoR3VhcmQgb2JqZWN0LlxuICogQHBhcmFtIHNHdWFyZEhhc2ggVGhlIGhhc2ggdXNlZCBmb3IgdGhlIGd1YXJkLlxuICogQHBhcmFtIFtoYXNoVHJha2VyXSBPcHRpb25hbCBoYXNoIHRyYWNrZXIgdXNlZCBmb3IgYWRkaXRpb25hbCBndWFyZCBjaGVja3MuXG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBoYXNoIGd1YXJkLlxuICovXG5mdW5jdGlvbiBjcmVhdGVHdWFyZEZyb21IYXNoKHNHdWFyZEhhc2g6IHN0cmluZywgaGFzaFRyYWtlcj86IHN0cmluZyk6IE5hdmlnYXRpb25HdWFyZCB7XG5cdHJldHVybiB7XG5cdFx0X2d1YXJkSGFzaDogc0d1YXJkSGFzaC5yZXBsYWNlKC9cXD9bXj9dKiQvLCBcIlwiKSwgLy8gUmVtb3ZlIHF1ZXJ5IHBhcnRcblx0XHRoYXNoVHJhY2tlcjogaGFzaFRyYWtlciA/IGhhc2hUcmFrZXIucmVwbGFjZSgvXFw/W14/XSokLywgXCJcIikgOiB1bmRlZmluZWQsXG5cdFx0Y2hlY2s6IGZ1bmN0aW9uIChzSGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gc0hhc2guaW5kZXhPZih0aGlzLl9ndWFyZEhhc2gpID09PSAwIHx8ICh0aGlzLmhhc2hUcmFja2VyID8gc0hhc2guaW5kZXhPZih0aGlzLmhhc2hUcmFja2VyKSA9PT0gMCA6IGZhbHNlKTtcblx0XHR9XG5cdH07XG59XG4vKipcbiAqIFJldHVybnMgYSBoYXNoIHdpdGhvdXQgaXRzIGlBcHBTdGF0ZSBwYXJ0LlxuICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoXG4gKiBAcmV0dXJucyBUaGUgaGFzaCB3aXRob3V0IHRoZSBpQXBwU3RhdGVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXBwU3RhdGVJbkhhc2goc0hhc2g6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBzSGFzaC5yZXBsYWNlKG5ldyBSZWdFeHAoYFsmP10qJHtlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNfT1bXiZdKmApLCBcIlwiKTtcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuUm91dGVyUHJveHlcIilcbmNsYXNzIFJvdXRlclByb3h5IGV4dGVuZHMgQmFzZU9iamVjdCB7XG5cdGJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXG5cdGJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkgPSBmYWxzZTtcblxuXHRiSXNHdWFyZENyb3NzQWxsb3dlZCA9IGZhbHNlO1xuXG5cdHNJQXBwU3RhdGVLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5cdF9vU2hlbGxTZXJ2aWNlcyE6IElTaGVsbFNlcnZpY2VzO1xuXG5cdGZjbEVuYWJsZWQhOiBib29sZWFuO1xuXG5cdF9mbkJsb2NraW5nTmF2RmlsdGVyITogRnVuY3Rpb247XG5cblx0X2ZuSGFzaEd1YXJkITogKHRoaXM6IFdpbmRvdywgcG9wU3RhdGVFdmVudDogUG9wU3RhdGVFdmVudCkgPT4gdW5rbm93bjtcblxuXHRfYkRpc2FibGVPbkhhc2hDaGFuZ2UhOiBib29sZWFuO1xuXG5cdF9iSWdub3JlUmVzdG9yZSE6IGJvb2xlYW47XG5cblx0X2JGb3JjZUZvY3VzITogYm9vbGVhbjtcblxuXHRfb1JvdXRlciE6IFJvdXRlcjtcblxuXHRfb01hbmFnZWRIaXN0b3J5ITogUm91dGVyU3RhdGVbXTtcblxuXHRfb05hdmlnYXRpb25HdWFyZCE6IE5hdmlnYXRpb25HdWFyZCB8IG51bGw7XG5cblx0b1Jlc291cmNlQnVuZGxlPzogUmVzb3VyY2VCdW5kbGU7XG5cblx0X29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uPzogU3luY2hyb25pemF0aW9uO1xuXG5cdF9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybyA9IGZhbHNlO1xuXG5cdF9iQXBwbHlSZXN0b3JlID0gZmFsc2U7XG5cblx0X3BhdGhNYXBwaW5nczogeyBvbGRQYXRoOiBzdHJpbmc7IG5ld1BhdGg6IHN0cmluZyB9W10gPSBbXTtcblxuXHRyZXN0b3JlSGlzdG9yeVRyaWdnZXJlZCA9IGZhbHNlO1xuXG5cdHJvdXRpbmdIaW50cz86IFJlY29yZDxzdHJpbmcsIHsgcGFyZW50T2Y6IHN0cmluZ1tdIH0+O1xuXG5cdGFwcE5hbWUhOiBzdHJpbmc7XG5cblx0aW5pdChvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIGlzZmNsRW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdC8vIFNhdmUgdGhlIG5hbWUgb2YgdGhlIGFwcCAoaW5jbHVkaW5nIHN0YXJ0dXAgcGFyYW1ldGVycykgZm9yIHJlYnVpbGRpbmcgZnVsbCBoYXNoZXMgbGF0ZXJcblx0XHRvQXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2VydmljZShcInNoZWxsU2VydmljZXNcIilcblx0XHRcdC50aGVuKCgpID0+IHRoaXMuYXN5bmNJbml0KG9BcHBDb21wb25lbnQsIGlzZmNsRW5hYmxlZCkpXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIHNoZWxsIHNlcnZpY2VzXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdFx0dGhpcy5fZm5IYXNoR3VhcmQgPSB0aGlzLmhhc2hHdWFyZC5iaW5kKHRoaXMpO1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgdGhpcy5fZm5IYXNoR3VhcmQpO1xuXHRcdHRoaXMuX2JEaXNhYmxlT25IYXNoQ2hhbmdlID0gZmFsc2U7XG5cdFx0dGhpcy5fYklnbm9yZVJlc3RvcmUgPSBmYWxzZTtcblx0XHR0aGlzLl9iRm9yY2VGb2N1cyA9IHRydWU7IC8vIFRyaWdnZXIgdGhlIGZvY3VzIG1lY2hhbmlzbSBmb3IgdGhlIGZpcnN0IHZpZXcgZGlzcGxheWVkIGJ5IHRoZSBhcHBcblx0fVxuXG5cdGFzeW5jSW5pdChvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIGlzZmNsRW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuX29TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0dGhpcy5pbml0UmF3KG9BcHBDb21wb25lbnQuZ2V0Um91dGVyKCkpO1xuXHRcdHRoaXMucm91dGluZ0hpbnRzID0gb0FwcENvbXBvbmVudC5nZXRSb3V0aW5nU2VydmljZSgpLmdldFJvdXRpbmdIaW50cygpO1xuXHRcdC8vIFdlIHdhbnQgdG8gd2FpdCB1bnRpbCB0aGUgaW5pdGlhbCByb3V0ZU1hdGNoZWQgaXMgZG9uZSBiZWZvcmUgZG9pbmcgYW55IG5hdmlnYXRpb25cblx0XHR0aGlzLndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbigpO1xuXG5cdFx0Ly8gU2V0IGZlTGV2ZWw9MCBmb3IgdGhlIGZpcnN0IEFwcGxpY2F0aW9uIHBhZ2UgaW4gdGhlIGhpc3Rvcnlcblx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShcblx0XHRcdE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRmZUxldmVsOiAwXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGhpc3Rvcnkuc3RhdGVcblx0XHRcdCksXG5cdFx0XHRcIlwiLFxuXHRcdFx0d2luZG93LmxvY2F0aW9uIGFzIHVua25vd24gYXMgc3RyaW5nXG5cdFx0KTtcblx0XHR0aGlzLmZjbEVuYWJsZWQgPSBpc2ZjbEVuYWJsZWQ7XG5cblx0XHR0aGlzLl9mbkJsb2NraW5nTmF2RmlsdGVyID0gdGhpcy5fYmxvY2tpbmdOYXZpZ2F0aW9uRmlsdGVyLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5fb1NoZWxsU2VydmljZXMucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKHRoaXMuX2ZuQmxvY2tpbmdOYXZGaWx0ZXIpO1xuXHR9XG5cblx0ZGVzdHJveSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fb1NoZWxsU2VydmljZXMpIHtcblx0XHRcdHRoaXMuX29TaGVsbFNlcnZpY2VzLnVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKHRoaXMuX2ZuQmxvY2tpbmdOYXZGaWx0ZXIpO1xuXHRcdH1cblx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHRoaXMuX2ZuSGFzaEd1YXJkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGlBcHBTdGF0ZSBpbnNpZGUgYSBoYXNoIChvciByZXBsYWNlcyBhbiBleGlzdGluZyBvbmUpLlxuXHQgKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2hcblx0ICogQHBhcmFtIHNBcHBTdGF0ZUtleSBUaGUgaUFwcFN0YXRlIHRvIGFkZFxuXHQgKiBAcmV0dXJucyBUaGUgaGFzaCB3aXRoIHRoZSBhcHAgc3RhdGVcblx0ICovXG5cdHNldEFwcFN0YXRlSW5IYXNoKHNIYXNoOiBzdHJpbmcsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgc05ld0hhc2g6IHN0cmluZztcblxuXHRcdGlmIChzSGFzaC5pbmNsdWRlcyhlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNKSkge1xuXHRcdFx0Ly8gSWYgdGhlcmUncyBhbHJlYWR5IGFuIGlBcHBTdGF0ZSBwYXJhbWV0ZXIgaW4gdGhlIGhhc2gsIHJlcGxhY2UgaXRcblx0XHRcdHNOZXdIYXNoID0gc0hhc2gucmVwbGFjZShcblx0XHRcdFx0bmV3IFJlZ0V4cChgJHtlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNfT1bXiZdKmApLFxuXHRcdFx0XHRgJHtlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNfT0ke3NBcHBTdGF0ZUtleX1gXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBBZGQgdGhlIGlBcHBTdGF0ZSBwYXJhbWV0ZXIgaW4gdGhlIGhhc2hcblx0XHRcdGlmICghc0hhc2guaW5jbHVkZXMoXCI/XCIpKSB7XG5cdFx0XHRcdHNOZXdIYXNoID0gYCR7c0hhc2h9P2A7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzTmV3SGFzaCA9IGAke3NIYXNofSZgO1xuXHRcdFx0fVxuXHRcdFx0c05ld0hhc2ggKz0gYCR7ZW51bVVSTFBhcmFtcy5JQVBQU1RBVEVQQVJBTX09JHtzQXBwU3RhdGVLZXl9YDtcblx0XHR9XG5cblx0XHRyZXR1cm4gc05ld0hhc2g7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgaUFwcFN0YXRlIHBhcnQgZnJvbSBhIGhhc2ggKG9yIG51bGwgaWYgbm90IGZvdW5kKS5cblx0ICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoXG5cdCAqIEByZXR1cm5zIFRoZSBpQXBwU3RhdGUgcGFydCBvZiB0aGUgaGFzaFxuXHQgKi9cblx0ZmluZEFwcFN0YXRlSW5IYXNoKHNIYXNoOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcblx0XHRjb25zdCBhQXBwU3RhdGUgPSBzSGFzaC5tYXRjaChuZXcgUmVnRXhwKGBcXFxcPy4qJHtlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNfT0oW14mXSopYCkpO1xuXHRcdHJldHVybiBhQXBwU3RhdGUgJiYgYUFwcFN0YXRlLmxlbmd0aCA+IDEgPyBhQXBwU3RhdGVbMV0gOiBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXREZWNvZGVkV2luZG93SGFzaCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBkZWNvZGVVUkkod2luZG93LmxvY2F0aW9uLmhhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJhdyBpbml0aWFsaXphdGlvbiAoZm9yIHVuaXQgdGVzdHMpLlxuXHQgKiBAcGFyYW0gb1JvdXRlciBUaGUgcm91dGVyIHVzZWQgYnkgdGhpcyBwcm94eVxuXHQgKi9cblx0aW5pdFJhdyhvUm91dGVyOiBSb3V0ZXIpOiB2b2lkIHtcblx0XHR0aGlzLl9vUm91dGVyID0gb1JvdXRlcjtcblx0XHR0aGlzLl9vTWFuYWdlZEhpc3RvcnkgPSBbXTtcblx0XHR0aGlzLl9vTmF2aWdhdGlvbkd1YXJkID0gbnVsbDtcblxuXHRcdGNvbnN0IHNDdXJyZW50QXBwSGFzaCA9IHRoaXMuZ2V0SGFzaCgpO1xuXHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5wdXNoKHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNDdXJyZW50QXBwSGFzaCkpO1xuXG5cdFx0dGhpcy5hcHBOYW1lID0gdGhpcy5nZXRBcHBOYW1lRnJvbUhhc2godGhpcy5nZXREZWNvZGVkV2luZG93SGFzaCgpKTtcblxuXHRcdC8vIFNldCB0aGUgaUFwcFN0YXRlIGlmIHRoZSBpbml0aWFsIGhhc2ggY29udGFpbnMgb25lXG5cdFx0dGhpcy5zSUFwcFN0YXRlS2V5ID0gdGhpcy5maW5kQXBwU3RhdGVJbkhhc2goc0N1cnJlbnRBcHBIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm4gdGhlIGZ1bGwgYXBwLXNwZWNpZmljIGhhc2ggcGFydCBmcm9tIHdpbmRvdy5sb2NhdGlvbi5oYXNoLlxuXHQgKlxuXHQgKiBDb21wYXJlZCB0byB7QGxpbmsgZ2V0SGFzaH0gdGhpcyBmdW5jdGlvbiBpbmNsdWRlcyBzdWItcm91dGVzIG9mIG5lc3RlZCBjb21wb25lbnRzLlxuXHQgKiBAcmV0dXJucyBUaGUgYXBwLXNwZWNpZmljIGhhc2ggcGFydCAoaS5lLiwgd2l0aG91dCB0aGUgc2hlbGwgcGFydCksIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBub25lLlxuXHQgKi9cblx0Z2V0RnVsbEhhc2goKTogc3RyaW5nIHtcblx0XHRjb25zdCBzcGxpdEhhc2ggPSB0aGlzLl9vU2hlbGxTZXJ2aWNlcy5zcGxpdEhhc2godGhpcy5nZXREZWNvZGVkV2luZG93SGFzaCgpKTtcblxuXHRcdGlmIChcImFwcFNwZWNpZmljUm91dGVcIiBpbiBzcGxpdEhhc2gpIHtcblx0XHRcdHJldHVybiBzcGxpdEhhc2guYXBwU3BlY2lmaWNSb3V0ZT8ucmVwbGFjZSgvXiZcXC8vLCBcIlwiKSA/PyBcIlwiOyAvLyByZW1vdmUgdGhlIGxlYWRpbmcgXCImL1wiXG5cdFx0fVxuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0Z2V0SGFzaCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLl9vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpID8/IFwiXCI7XG5cdH1cblxuXHRwcm90ZWN0ZWQgZ2V0QXBwTmFtZUZyb21IYXNoKGhhc2g6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc3BsaXRIYXNoID0gdGhpcy5fb1NoZWxsU2VydmljZXM/LnNwbGl0SGFzaChoYXNoKSBhcyB7IHNoZWxsUGFydDogc3RyaW5nOyBhcHBTcGVjaWZpY1JvdXRlOiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gc3BsaXRIYXNoPy5zaGVsbFBhcnQgPz8gXCJcIjtcblx0fVxuXG5cdGlzRm9jdXNGb3JjZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2JGb3JjZUZvY3VzO1xuXHR9XG5cblx0c2V0Rm9jdXNGb3JjZWQoYkZvcmNlZDogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuX2JGb3JjZUZvY3VzID0gYkZvcmNlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldHMgdGhlIGludGVybmFsIHZhcmlhYmxlIHNJQXBwU3RhdGVLZXkuXG5cdCAqXG5cdCAqL1xuXHRyZW1vdmVJQXBwU3RhdGVLZXkoKTogdm9pZCB7XG5cdFx0dGhpcy5zSUFwcFN0YXRlS2V5ID0gbnVsbDtcblx0fVxuXG5cdHByaXZhdGUgcmVtb3ZlUmVzdG9yZUhpc3RvcnlGbGFnRnJvbUhhc2goaGFzaDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gaGFzaC5yZXBsYWNlKFwicmVzdG9yZUhpc3Rvcnk9dHJ1ZSZcIiwgXCJcIikucmVwbGFjZSgvWz8mXXJlc3RvcmVIaXN0b3J5PXRydWUvLCBcIlwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpYyBoYXNoLlxuXHQgKiBAcGFyYW0gc0hhc2ggSGFzaCB0byBiZSBuYXZpZ2F0ZWQgdG9cblx0ICogQHBhcmFtIGJQcmVzZXJ2ZUhpc3RvcnkgSWYgc2V0IHRvIHRydWUsIG5vbi1hbmNlc3RvciBlbnRyaWVzIGluIGhpc3Rvcnkgd2lsbCBiZSByZXRhaW5lZFxuXHQgKiBAcGFyYW0gYkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZSBJZiBzZXQgdG8gdHJ1ZSwgY2FjaGUgcHJlc2VydmF0aW9uIG1lY2hhbmlzbSBpcyBkaXNhYmxlZCBmb3IgdGhlIGN1cnJlbnQgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gYkZvcmNlRm9jdXMgSWYgc2V0IHRvIHRydWUsIHRoZSBsb2dpYyB0byBzZXQgdGhlIGZvY3VzIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkIHdpbGwgYmUgdHJpZ2dlcmVkIChvblBhZ2VSZWFkeSlcblx0ICogQHBhcmFtIHByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXIgSWYgc2V0IHRvIHRydWUsIHRoZSBiYWNrIG5hdmlnYXRpb24gY2FsbGJhY2sgaXMgcHJlc2VydmVkLiBJZiB1bmRlZmluZWQgb3IgZmFsc2UsIHRoZSBiYWNrIG5hdmlnYXRpb24gY2FsbGJhY2sgaXMgcmVzZXQuXG5cdCAqIEBwYXJhbSBza2lwSGFzaEd1YXJkQ2hlY2tcblx0ICogQHJldHVybnMgUHJvbWlzZSAocmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWQpIHRoYXQgcmV0dXJucyAndHJ1ZScgaWYgYSBuYXZpZ2F0aW9uIHRvb2sgcGxhY2UsICdmYWxzZScgaWYgdGhlIG5hdmlnYXRpb24gZGlkbid0IGhhcHBlblxuXHQgKi9cblx0YXN5bmMgbmF2VG9IYXNoKFxuXHRcdHNIYXNoOiBzdHJpbmcsXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0YkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZT86IGJvb2xlYW4sXG5cdFx0YkZvcmNlRm9jdXM/OiBib29sZWFuLFxuXHRcdHByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXI/OiBib29sZWFuLFxuXHRcdHNraXBIYXNoR3VhcmRDaGVjaz86IGJvb2xlYW5cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0c0hhc2ggPSBzSGFzaC5zdGFydHNXaXRoKFwiL1wiKSA/IHNIYXNoLnN1YnN0cmluZygxKSA6IHNIYXNoO1xuXHRcdGlmICghcHJlc2VydmVTaGVsbEJhY2tOYXZpZ2F0aW9uSGFuZGxlcikge1xuXHRcdFx0YXdhaXQgdGhpcy5fb1NoZWxsU2VydmljZXMuc2V0QmFja05hdmlnYXRpb24oKTtcblx0XHR9XG5cdFx0c0hhc2ggPSB0aGlzLnJlbW92ZVJlc3RvcmVIaXN0b3J5RmxhZ0Zyb21IYXNoKHNIYXNoKTtcblx0XHRpZiAodGhpcy5fb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24pIHtcblx0XHRcdHJldHVybiB0aGlzLl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbi53YWl0Rm9yKCkudGhlbihhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5faW50ZXJuYWxOYXZUb0hhc2goc0hhc2gsIGJQcmVzZXJ2ZUhpc3RvcnksIGJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGUsIGJGb3JjZUZvY3VzLCBza2lwSGFzaEd1YXJkQ2hlY2spO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0aGlzLl9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybykge1xuXHRcdFx0XHR0aGlzLndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuX2ludGVybmFsTmF2VG9IYXNoKHNIYXNoLCBiUHJlc2VydmVIaXN0b3J5LCBiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlLCBiRm9yY2VGb2N1cywgc2tpcEhhc2hHdWFyZENoZWNrKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBfaW50ZXJuYWxOYXZUb0hhc2goXG5cdFx0c0hhc2g6IHN0cmluZyxcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlPzogYm9vbGVhbixcblx0XHRiRm9yY2VGb2N1cz86IGJvb2xlYW4sXG5cdFx0c2tpcEhhc2hHdWFyZENoZWNrPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyBBZGQgdGhlIGFwcCBzdGF0ZSBpbiB0aGUgaGFzaCBpZiBuZWVkZWRcblx0XHRpZiAodGhpcy5mY2xFbmFibGVkICYmIHRoaXMuc0lBcHBTdGF0ZUtleSAmJiAhdGhpcy5maW5kQXBwU3RhdGVJbkhhc2goc0hhc2gpKSB7XG5cdFx0XHRzSGFzaCA9IHRoaXMuc2V0QXBwU3RhdGVJbkhhc2goc0hhc2gsIHRoaXMuc0lBcHBTdGF0ZUtleSk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmNoZWNrSGFzaFdpdGhHdWFyZChzSGFzaCkgJiYgIShza2lwSGFzaEd1YXJkQ2hlY2sgPz8gZmFsc2UpKSB7XG5cdFx0XHRpZiAoIXRoaXMub1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRcdHRoaXMub1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2UgaGF2ZSB0byB1c2UgYSBjb25maXJtIGhlcmUgZm9yIFVJIGNvbnNpc3RlbmN5IHJlYXNvbnMsIGFzIHdpdGggc29tZSBzY2VuYXJpb3Ncblx0XHRcdC8vIGluIHRoZSBFZGl0RmxvdyB3ZSByZWx5IG9uIGEgVUk1IG1lY2hhbmlzbSB0aGF0IGRpc3BsYXlzIGEgY29uZmlybSBkaWFsb2cuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYWxlcnRcblx0XHRcdGlmICghY29uZmlybSh0aGlzLm9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19ST1VURVJfUFJPWFlfU0FQRkVfRVhJVF9OT1RTQVZFRF9NRVNTQUdFXCIpKSkge1xuXHRcdFx0XHQvLyBUaGUgdXNlciBjbGlja2VkIG9uIENhbmNlbCAtLT4gY2FuY2VsIG5hdmlnYXRpb25cblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmJJc0d1YXJkQ3Jvc3NBbGxvd2VkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBJbiBjYXNlIHRoZSBuYXZpZ2F0aW9uIHdpbGwgY2F1c2UgYSBuZXcgdmlldyB0byBiZSBkaXNwbGF5ZWQsIHdlIGZvcmNlIHRoZSBmb2N1c1xuXHRcdC8vIEkuZS4gaWYgdGhlIGtleXMgZm9yIHRoZSBoYXNoIHdlJ3JlIG5hdmlnYXRpbmcgdG8gaXMgYSBzdXBlcnNldCBvZiB0aGUgY3VycmVudCBoYXNoIGtleXMuXG5cdFx0Y29uc3Qgb05ld1N0YXRlID0gdGhpcy5fZXh0cmFjdFN0YXRlRnJvbUhhc2goc0hhc2gpO1xuXHRcdGlmICghdGhpcy5fYkZvcmNlRm9jdXMpIHtcblx0XHRcdC8vIElmIHRoZSBmb2N1cyB3YXMgYWxyZWFkeSBmb3JjZWQsIGtlZXAgaXRcblx0XHRcdGNvbnN0IGFDdXJyZW50SGFzaEtleXMgPSBSb3V0ZXJQcm94eS5leHRyYWN0RW50aXR5U2V0c0Zyb21IYXNoKHRoaXMuZ2V0SGFzaCgpKTtcblx0XHRcdHRoaXMuX2JGb3JjZUZvY3VzID1cblx0XHRcdFx0YkZvcmNlRm9jdXMgfHxcblx0XHRcdFx0KGFDdXJyZW50SGFzaEtleXMubGVuZ3RoIDwgb05ld1N0YXRlLmtleXMubGVuZ3RoICYmXG5cdFx0XHRcdFx0YUN1cnJlbnRIYXNoS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcblx0XHRcdFx0XHRcdHJldHVybiBrZXkgPT09IG9OZXdTdGF0ZS5rZXlzW2luZGV4XTtcblx0XHRcdFx0XHR9KSk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0hpc3RvcnlBY3Rpb24gPSB0aGlzLl9wdXNoTmV3U3RhdGUob05ld1N0YXRlLCBmYWxzZSwgYlByZXNlcnZlSGlzdG9yeSwgYkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZSk7XG5cdFx0dGhpcy5zdG9yZUZvY3VzSW5mb0ZvckN1cnJlbnRIYXNoKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5fcmVidWlsZEJyb3dzZXJIaXN0b3J5KG9IaXN0b3J5QWN0aW9uLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXJzIGJyb3dzZXIgaGlzdG9yeSBpZiBlbnRyaWVzIGhhdmUgYmVlbiBhZGRlZCB3aXRob3V0IHVzaW5nIHRoZSBSb3V0ZXJQcm94eS5cblx0ICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgaGlzdG9yeSBhY2NvcmRpbmdseS5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIG9uY2UgdGhlIGhpc3RvcnkgaXMgcmVidWlsdFxuXHQgKi9cblx0YXN5bmMgcmVzdG9yZUhpc3RvcnkoKTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbj4ge1xuXHRcdGlmICh0aGlzLl9iQXBwbHlSZXN0b3JlKSB7XG5cdFx0XHR0aGlzLl9iQXBwbHlSZXN0b3JlID0gZmFsc2U7XG5cdFx0XHRsZXQgc1RhcmdldEhhc2ggPSB0aGlzLmdldEhhc2goKTtcblx0XHRcdHNUYXJnZXRIYXNoID0gdGhpcy5yZW1vdmVSZXN0b3JlSGlzdG9yeUZsYWdGcm9tSGFzaChzVGFyZ2V0SGFzaCk7XG5cdFx0XHRjb25zdCBvTmV3U3RhdGUgPSB0aGlzLl9leHRyYWN0U3RhdGVGcm9tSGFzaChzVGFyZ2V0SGFzaCk7XG5cblx0XHRcdGNvbnN0IG9IaXN0b3J5QWN0aW9uID0gdGhpcy5fcHVzaE5ld1N0YXRlKG9OZXdTdGF0ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpO1xuXG5cdFx0XHR0aGlzLnJlc3RvcmVIaXN0b3J5VHJpZ2dlcmVkID0gdHJ1ZTtcblx0XHRcdHJldHVybiB0aGlzLl9yZWJ1aWxkQnJvd3Nlckhpc3Rvcnkob0hpc3RvcnlBY3Rpb24sIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBSZXN0b3JlSGlzdG9yeSBoYXMgYmVlbiB0cmlnZ2VyZWQgb24gdGhlIFJvdXRlclByb3h5LlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGl0IGhhcyBiZWVuIHRyaWdnZXJlZFxuXHQgKi9cblx0Y2hlY2tSZXN0b3JlSGlzdG9yeVdhc1RyaWdnZXJlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5yZXN0b3JlSGlzdG9yeVRyaWdnZXJlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldHMgdGhlIGZsYWcgdGhhdCBzYXlzIGlmIFJlc3RvcmVIaXN0b3J5IGhhcyBiZWVuIHRyaWdnZXJlZCBvbiB0aGUgUm91dGVyUHJveHkuXG5cdCAqL1xuXHRyZXNldFJlc3RvcmVIaXN0b3J5RmxhZygpOiB2b2lkIHtcblx0XHR0aGlzLnJlc3RvcmVIaXN0b3J5VHJpZ2dlcmVkID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIGJhY2sgaW4gdGhlIGhpc3RvcnkuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZFxuXHQgKi9cblx0YXN5bmMgbmF2QmFjaygpOiBQcm9taXNlPHZvaWQgfCBib29sZWFuPiB7XG5cdFx0Y29uc3Qgc0N1cnJlbnRIYXNoID0gdGhpcy5nZXRIYXNoKCk7XG5cdFx0bGV0IHNQcmV2aW91c0hhc2g7XG5cblx0XHQvLyBMb29rIGZvciB0aGUgY3VycmVudCBoYXNoIGluIHRoZSBtYW5hZ2VkIGhpc3Rvcnlcblx0XHRmb3IgKGxldCBpID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcblx0XHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaV0uaGFzaCA9PT0gc0N1cnJlbnRIYXNoKSB7XG5cdFx0XHRcdHNQcmV2aW91c0hhc2ggPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaSAtIDFdLmhhc2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzUHJldmlvdXNIYXNoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5uYXZUb0hhc2goc1ByZXZpb3VzSGFzaCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdlIGNvdWxkbid0IGZpbmQgYSBwcmV2aW91cyBoYXNoIGluIGhpc3Rvcnlcblx0XHRcdC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIG5hdmlnYXRpbmcgZnJvbSBhIHRyYW5zaWVudCBoYXNoIGluIGEgY3JlYXRlIGFwcCwgYW5kXG5cdFx0XHQvLyBpbiB0aGF0IGNhc2UgaGlzdG9yeS5iYWNrIHdvdWxkIGdvIGJhY2sgdG8gdGhlIEZMUFxuXHRcdFx0d2luZG93Lmhpc3RvcnkuYmFjaygpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSByb3V0ZSB3aXRoIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBzUm91dGVOYW1lIFRoZSByb3V0ZSBuYW1lIHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMgUGFyYW1ldGVycyBmb3IgdGhlIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIG9QYXJhbWV0ZXJzLm5vUHJlc2VydmF0aW9uQ2FjaGVcblx0ICogQHBhcmFtIG9QYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGVcblx0ICogQHBhcmFtIG9QYXJhbWV0ZXJzLmlzSGlkZGVuRHJhZnRFbmFibGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZFxuXHQgKi9cblx0YXN5bmMgbmF2VG8oXG5cdFx0c1JvdXRlTmFtZTogc3RyaW5nLFxuXHRcdG9QYXJhbWV0ZXJzPzogeyBub1ByZXNlcnZhdGlvbkNhY2hlPzogYm9vbGVhbjsgYklzU3RpY2t5TW9kZT86IGJvb2xlYW47IGlzSGlkZGVuRHJhZnRFbmFibGVkPzogYm9vbGVhbiB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IHNIYXNoID0gdGhpcy5fb1JvdXRlci5nZXRVUkwoc1JvdXRlTmFtZSwgb1BhcmFtZXRlcnMpO1xuXHRcdHJldHVybiB0aGlzLm5hdlRvSGFzaChcblx0XHRcdHNIYXNoISxcblx0XHRcdGZhbHNlLFxuXHRcdFx0b1BhcmFtZXRlcnM/Lm5vUHJlc2VydmF0aW9uQ2FjaGUsXG5cdFx0XHRmYWxzZSxcblx0XHRcdChvUGFyYW1ldGVycz8uYklzU3RpY2t5TW9kZSA/PyBmYWxzZSkgfHwgKG9QYXJhbWV0ZXJzPy5pc0hpZGRlbkRyYWZ0RW5hYmxlZCA/PyBmYWxzZSlcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4aXRzIHRoZSBjdXJyZW50IGFwcCBieSBuYXZpZ2F0aW5nIGJhY2tcblx0ICogdG8gdGhlIHByZXZpb3VzIGFwcCAoaWYgYW55KSBvciB0aGUgRkxQLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB3ZSBleGl0IHRoZSBhcHBcblx0ICovXG5cdGV4aXRGcm9tQXBwKCk6IHZvaWQge1xuXHRcdHJldHVybiB0aGlzLl9vU2hlbGxTZXJ2aWNlcy5iYWNrVG9QcmV2aW91c0FwcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gaGFzaCBjYW4gaGF2ZSBhbiBpbXBhY3Qgb24gdGhlIGN1cnJlbnQgc3RhdGVcblx0ICogaS5lLiBpZiB0aGUgaGFzaCBpcyBlcXVhbCwgY29tcGF0aWJsZSBvciBhbiBhbmNlc3RvciBvZiB0aGUgY3VycmVudCBzdGF0ZS5cblx0ICogQHBhcmFtIHNIYXNoIGB0cnVlYCBpZiB0aGVyZSBpcyBhbiBpbXBhY3Rcblx0ICogQHJldHVybnMgSWYgdGhlcmUgaXMgYW4gaW1wYWN0XG5cdCAqL1xuXHRpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc0hhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGlmIChzSGFzaFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdHNIYXNoID0gc0hhc2guc3Vic3RyaW5nKDEpO1xuXHRcdH1cblx0XHRjb25zdCBvTG9jYWxHdWFyZCA9IGNyZWF0ZUd1YXJkRnJvbUhhc2goc0hhc2gpO1xuXHRcdHJldHVybiBvTG9jYWxHdWFyZC5jaGVjayh0aGlzLmdldEhhc2goKSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgbmF2aWdhdGlvbiBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKiBAcmV0dXJucyBgZmFsc2VgIGlmIGEgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgaW4gdGhlIFJvdXRlclByb3h5IGFuZCBpcyBub3QgeWV0IGZpbmFsaXplZFxuXHQgKi9cblx0aXNOYXZpZ2F0aW9uRmluYWxpemVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhdGhpcy5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmc7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbGFzdCBzdGF0ZSBhcyBhIGd1YXJkLlxuXHQgKiBFYWNoIGZ1dHVyZSBuYXZpZ2F0aW9uIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoaXMgZ3VhcmQsIGFuZCBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2lsbFxuXHQgKiBiZSBkaXNwbGF5ZWQgYmVmb3JlIHRoZSBuYXZpZ2F0aW9uIGdvZXMgdG8gYW4gYW5jZXN0b3Igb2YgdGhlIGd1YXJkLlxuXHQgKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2ggZm9yIHRoZSBndWFyZC5cblx0ICogQHBhcmFtIFtoYXNoVHJha2VyXSBPcHRpb25hbCBoYXNoIHRyYWNrZXIgdXNlZCBmb3IgYWRkaXRpb25hbCBndWFyZCBjaGVja3MuXG5cdCAqL1xuXHRzZXROYXZpZ2F0aW9uR3VhcmQoc0hhc2g6IHN0cmluZywgaGFzaFRyYWtlcj86IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuX29OYXZpZ2F0aW9uR3VhcmQgPSBjcmVhdGVHdWFyZEZyb21IYXNoKHNIYXNoLCBoYXNoVHJha2VyKTtcblx0XHR0aGlzLmJJc0d1YXJkQ3Jvc3NBbGxvd2VkID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogRGlzYWJsZXMgdGhlIG5hdmlnYXRpb24gZ3VhcmQuXG5cdCAqL1xuXHRkaXNjYXJkTmF2aWdhdGlvbkd1YXJkKCk6IHZvaWQge1xuXHRcdHRoaXMuX29OYXZpZ2F0aW9uR3VhcmQgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgbmF2aWdhdGlvbiBndWFyZC5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIG5hdmlnYXRpbmcgZ3VhcmQgaXMgYXZhaWxhYmxlXG5cdCAqL1xuXHRoYXNOYXZpZ2F0aW9uR3VhcmQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX29OYXZpZ2F0aW9uR3VhcmQgIT09IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogVGVzdHMgYSBoYXNoIGFnYWluc3QgdGhlIG5hdmlnYXRpb24gZ3VhcmQuXG5cdCAqIEBwYXJhbSBzSGFzaCBUaGUgaGFzaCB0byBiZSB0ZXN0ZWRcblx0ICogQHJldHVybnMgYHRydWVgIGlmIG5hdmlnYXRpbmcgdG8gdGhlIGhhc2ggZG9lc24ndCBjcm9zcyB0aGUgZ3VhcmRcblx0ICovXG5cdGNoZWNrSGFzaFdpdGhHdWFyZChzSGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX29OYXZpZ2F0aW9uR3VhcmQgPT09IG51bGwgfHwgdGhpcy5fb05hdmlnYXRpb25HdWFyZC5jaGVjayhzSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSB1c2VyIGFsbG93ZWQgdGhlIG5hdmlnYXRpb24gZ3VhcmQgdG8gYmUgY3Jvc3NlZC5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIGNyb3NzaW5nIHRoZSBndWFyZCBoYXMgYmVlbiBhbGxvd2VkIGJ5IHRoZSB1c2VyXG5cdCAqL1xuXHRpc0d1YXJkQ3Jvc3NBbGxvd2VkQnlVc2VyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmJJc0d1YXJkQ3Jvc3NBbGxvd2VkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFjdGl2YXRlcyB0aGUgc3luY2hyb25pemF0aW9uIGZvciByb3V0ZU1hdGNoZWRFdmVudC5cblx0ICogVGhlIG5leHQgTmF2VG9IYXNoIGNhbGwgd2lsbCBjcmVhdGUgYSBTeW5jaHJvbml6YXRpb24gb2JqZWN0IHRoYXQgd2lsbCBiZSByZXNvbHZlZFxuXHQgKiBieSB0aGUgY29ycmVzcG9uZGluZyBvblJvdXRlTWF0Y2hlZCBldmVudCwgcHJldmVudGluZyBhbm90aGVyIE5hdlRvSGFzaCB0byBoYXBwZW4gaW4gcGFyYWxsZWwuXG5cdCAqL1xuXHRhY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24oKTogdm9pZCB7XG5cdFx0dGhpcy5fYkFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm8gPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc29sdmUgdGhlIHJvdXRlTWF0Y2ggc3luY2hyb25pemF0aW9uIG9iamVjdCwgdW5sb2NraW5nIHBvdGVudGlhbCBwZW5kaW5nIE5hdlRvSGFzaCBjYWxscy5cblx0ICovXG5cdHJlc29sdmVSb3V0ZU1hdGNoKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbikge1xuXHRcdFx0dGhpcy5fb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24ucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNYWtlcyBzdXJlIG5vIG5hdmlnYXRpb24gY2FuIGhhcHBlbiBiZWZvcmUgYSByb3V0ZU1hdGNoIGhhcHBlbmVkLlxuXHQgKi9cblx0d2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk6IHZvaWQge1xuXHRcdHRoaXMuX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uID0gbmV3IFN5bmNocm9uaXphdGlvbigpO1xuXHRcdHRoaXMuX2JBY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvID0gZmFsc2U7XG5cdH1cblxuXHRzdGF0aWMgZXh0cmFjdEVudGl0eVNldHNGcm9tSGFzaChzSGFzaDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuXHRcdGlmIChzSGFzaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzSGFzaCA9IFwiXCI7XG5cdFx0fVxuXHRcdGNvbnN0IHNIYXNoTm9QYXJhbXMgPSBzSGFzaC5zcGxpdChcIj9cIilbMF07IC8vIHJlbW92ZSBwYXJhbXNcblx0XHRjb25zdCBhVG9rZW5zID0gc0hhc2hOb1BhcmFtcy5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XG5cblx0XHRhVG9rZW5zLmZvckVhY2goKHNUb2tlbikgPT4ge1xuXHRcdFx0aWYgKHNUb2tlbi5sZW5ndGgpIHtcblx0XHRcdFx0bmFtZXMucHVzaChzVG9rZW4uc3BsaXQoXCIoXCIpWzBdKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBuYW1lcztcblx0fVxuXG5cdC8qKlxuXHQgKiBCdWlsZHMgYSBzdGF0ZSBmcm9tIGEgaGFzaC5cblx0ICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoIHRvIGJlIHVzZWQgYXMgZW50cnlcblx0ICogQHJldHVybnMgVGhlIHN0YXRlXG5cdCAqL1xuXHRfZXh0cmFjdFN0YXRlRnJvbUhhc2goc0hhc2g6IHN0cmluZyk6IFJvdXRlclN0YXRlIHtcblx0XHRpZiAoc0hhc2ggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c0hhc2ggPSBcIlwiO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9TdGF0ZTogUm91dGVyU3RhdGUgPSB7XG5cdFx0XHRrZXlzOiBSb3V0ZXJQcm94eS5leHRyYWN0RW50aXR5U2V0c0Zyb21IYXNoKHNIYXNoKSxcblx0XHRcdGhhc2g6IHNIYXNoLFxuXHRcdFx0c2NyZWVuTW9kZTogMCAvLyB3aWxsIGJlIHVwZGF0ZWQgaW4gYSBzZWNcblx0XHR9O1xuXG5cdFx0Ly8gUmV0cmlldmUgbGF5b3V0IChpZiBhbnkpXG5cdFx0Y29uc3QgYUxheW91dCA9IHNIYXNoLm1hdGNoKG5ldyBSZWdFeHAoYFxcXFw/Lioke2VudW1VUkxQYXJhbXMuTEFZT1VUUEFSQU19PShbXiZdKilgKSk7XG5cdFx0b1N0YXRlLnNMYXlvdXQgPSBhTGF5b3V0ICYmIGFMYXlvdXQubGVuZ3RoID4gMSA/IGFMYXlvdXRbMV0gOiB1bmRlZmluZWQ7XG5cdFx0aWYgKG9TdGF0ZS5zTGF5b3V0ID09PSBcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIikge1xuXHRcdFx0b1N0YXRlLnNjcmVlbk1vZGUgPSAxO1xuXHRcdH0gZWxzZSBpZiAob1N0YXRlLnNMYXlvdXQgPT09IFwiRW5kQ29sdW1uRnVsbFNjcmVlblwiKSB7XG5cdFx0XHRvU3RhdGUuc2NyZWVuTW9kZSA9IDI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9TdGF0ZS5zY3JlZW5Nb2RlID0gMDtcblx0XHR9XG5cdFx0cmV0dXJuIG9TdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgbmV3IHN0YXRlIGludG8gdGhlIGludGVybmFsIGhpc3Rvcnkgc3RydWN0dXJlLlxuXHQgKiBNYWtlcyBzdXJlIHRoaXMgbmV3IHN0YXRlIGlzIGFkZGVkIGFmdGVyIGFuIGFuY2VzdG9yLlxuXHQgKiBBbHNvIHNldHMgdGhlIGlBcHBTdGF0ZSBrZXkgaW4gdGhlIHdob2xlIGhpc3RvcnkuXG5cdCAqIEBwYXJhbSBvTmV3U3RhdGUgVGhlIG5ldyBzdGF0ZSB0byBiZSBhZGRlZFxuXHQgKiBAcGFyYW0gYlJlYnVpbGRPbmx5IGB0cnVlYCBpZiB3ZSdyZSByZWJ1aWxkaW5nIHRoZSBoaXN0b3J5IGFmdGVyIGEgc2hlbGwgbWVudSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBiUHJlc2VydmVIaXN0b3J5IElmIHNldCB0byB0cnVlLCBub24tYW5jZXN0b3IgZW50cmllcyBpbiBoaXN0b3J5IHdpbGwgYmUgcmV0YWluZWRcblx0ICogQHBhcmFtIGJEaXNhYmxlSGlzdG9yeVByZXNlcnZhdGlvbiBEaXNhYmxlIHRoZSBtZWNoYW5pc20gdG8gcmV0YWluZWQgbWFya2VkIGVudHJpZXMgaW4gY2FjaGVcblx0ICogQHJldHVybnMgVGhlIG5ldyBzdGF0ZVxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9wdXNoTmV3U3RhdGUoXG5cdFx0b05ld1N0YXRlOiBSb3V0ZXJTdGF0ZSxcblx0XHRiUmVidWlsZE9ubHk6IGJvb2xlYW4sXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0YkRpc2FibGVIaXN0b3J5UHJlc2VydmF0aW9uPzogYm9vbGVhblxuXHQpOiBIeXN0b3J5QWN0aW9uIHtcblx0XHRjb25zdCBzQ3VycmVudEhhc2ggPSB0aGlzLnJlbW92ZVJlc3RvcmVIaXN0b3J5RmxhZ0Zyb21IYXNoKHRoaXMuZ2V0SGFzaCgpKTtcblx0XHRsZXQgbGFzdEluZGV4ID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7XG5cdFx0bGV0IGlQb3BDb3VudCA9IGJSZWJ1aWxkT25seSA/IDEgOiAwO1xuXG5cdFx0Ly8gMS4gRG8gc29tZSBjbGVhbnVwIGluIHRoZSBtYW5hZ2VkIGhpc3RvcnkgOiBpbiBjYXNlIHRoZSB1c2VyIGhhcyBuYXZpZ2F0ZWQgYmFjayBpbiB0aGUgYnJvd3NlciBoaXN0b3J5LCB3ZSBuZWVkIHRvIHJlbW92ZVxuXHRcdC8vIHRoZSBzdGF0ZXMgYWhlYWQgaW4gaGlzdG9yeSBhbmQgbWFrZSBzdXJlIHRoZSB0b3Agc3RhdGUgY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgcGFnZVxuXHRcdC8vIFdlIGRvbid0IGRvIHRoYXQgd2hlbiByZXN0b3JpbmcgdGhlIGhpc3RvcnksIGFzIHRoZSBjdXJyZW50IHN0YXRlIGhhcyBiZWVuIGFkZGVkIG9uIHRvcCBvZiB0aGUgYnJvd3NlciBoaXN0b3J5XG5cdFx0Ly8gYW5kIGlzIG5vdCByZWZsZWN0ZWQgaW4gdGhlIG1hbmFnZWQgaGlzdG9yeVxuXHRcdGlmICghYlJlYnVpbGRPbmx5KSB7XG5cdFx0XHR3aGlsZSAobGFzdEluZGV4ID49IDAgJiYgdGhpcy5fb01hbmFnZWRIaXN0b3J5W2xhc3RJbmRleF0uaGFzaCAhPT0gc0N1cnJlbnRIYXNoKSB7XG5cdFx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5wb3AoKTtcblx0XHRcdFx0bGFzdEluZGV4LS07XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdC8vIFdlIGNvdWxkbid0IGZpbmQgdGhlIGN1cnJlbnQgbG9jYXRpb24gaW4gdGhlIGhpc3RvcnkuIFRoaXMgY2FuIGhhcHBlbiBpZiBhIGJyb3dzZXIgcmVsb2FkXG5cdFx0XHRcdC8vIGhhcHBlbmVkLCBjYXVzaW5nIGEgcmVpbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlZCBoaXN0b3J5LlxuXHRcdFx0XHQvLyBJbiB0aGF0IGNhc2UsIHdlIHVzZSB0aGUgY3VycmVudCBsb2NhdGlvbiBhcyB0aGUgbmV3IHN0YXJ0aW5nIHBvaW50IGluIHRoZSBtYW5hZ2VkIGhpc3Rvcnlcblx0XHRcdFx0dGhpcy5fb01hbmFnZWRIaXN0b3J5LnB1c2godGhpcy5fZXh0cmFjdFN0YXRlRnJvbUhhc2goc0N1cnJlbnRIYXNoKSk7XG5cdFx0XHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oeyBmZUxldmVsOiAwIH0sIGhpc3Rvcnkuc3RhdGUpLCBcIlwiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyAyLiBNYXJrIHRoZSB0b3Agc3RhdGUgYXMgcHJlc2VydmVkIGlmIHJlcXVpcmVkXG5cdFx0aWYgKGJQcmVzZXJ2ZUhpc3RvcnkgJiYgIWJEaXNhYmxlSGlzdG9yeVByZXNlcnZhdGlvbikge1xuXHRcdFx0dGhpcy5fb01hbmFnZWRIaXN0b3J5W3RoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxXS5wcmVzZXJ2ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIDMuIFRoZW4gcG9wIGFsbCBzdGF0ZXMgdW50aWwgd2UgZmluZCBhbiBhbmNlc3RvciBvZiB0aGUgbmV3IHN0YXRlLCBvciB3ZSBmaW5kIGEgc3RhdGUgdGhhdCBuZWVkIHRvIGJlIHByZXNlcnZlZFxuXHRcdGxldCBvTGFzdFJlbW92ZWRJdGVtO1xuXHRcdHdoaWxlICh0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3Qgb1RvcFN0YXRlID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5W3RoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxXTtcblx0XHRcdGlmIChcblx0XHRcdFx0KGJEaXNhYmxlSGlzdG9yeVByZXNlcnZhdGlvbiB8fCAhb1RvcFN0YXRlLnByZXNlcnZlZCkgJiZcblx0XHRcdFx0dGhpcy5fY29tcGFyZUNhY2hlU3RhdGVzKG9Ub3BTdGF0ZSwgb05ld1N0YXRlKSAhPT0gZW51bVN0YXRlLkFOQ0VTVE9SXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gVGhlIHRvcCBzdGF0ZSBpcyBub3QgYW4gYW5jZXN0b3Igb2Ygb05ld1N0YXRlIGFuZCBpcyBub3QgcHJlc2VydmVkIC0tPiB3ZSBjYW4gcG9wIGl0XG5cdFx0XHRcdG9MYXN0UmVtb3ZlZEl0ZW0gPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkucG9wKCk7XG5cdFx0XHRcdGlQb3BDb3VudCsrO1xuXHRcdFx0fSBlbHNlIGlmIChvVG9wU3RhdGUucHJlc2VydmVkICYmIHJlbW92ZUFwcFN0YXRlSW5IYXNoKG9Ub3BTdGF0ZS5oYXNoKSA9PT0gcmVtb3ZlQXBwU3RhdGVJbkhhc2gob05ld1N0YXRlLmhhc2gpKSB7XG5cdFx0XHRcdC8vIFdlIHRyeSB0byBhZGQgYSBzdGF0ZSB0aGF0IGlzIGFscmVhZHkgaW4gY2FjaGUgKGR1ZSB0byBwcmVzZXJ2ZWQgZmxhZykgYnV0IHdpdGggYSBkaWZmZXJlbnQgaWFwcC1zdGF0ZVxuXHRcdFx0XHQvLyAtLT4gd2Ugc2hvdWxkIGRlbGV0ZSB0aGUgcHJldmlvdXMgZW50cnkgKGl0IHdpbGwgYmUgbGF0ZXIgcmVwbGFjZWQgYnkgdGhlIG5ldyBvbmUpIGFuZCBzdG9wIHBvcHBpbmdcblx0XHRcdFx0b0xhc3RSZW1vdmVkSXRlbSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5wb3AoKTtcblx0XHRcdFx0aVBvcENvdW50Kys7XG5cdFx0XHRcdG9OZXdTdGF0ZS5wcmVzZXJ2ZWQgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJyZWFrOyAvLyBBbmNlc3RvciBvciBwcmVzZXJ2ZWQgc3RhdGUgZm91bmQgLS0+IHdlIHN0b3AgcG9wcGluZyBvdXQgc3RhdGVzXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gNC4gaUFwcFN0YXRlIG1hbmFnZW1lbnRcblx0XHR0aGlzLnNJQXBwU3RhdGVLZXkgPSB0aGlzLmZpbmRBcHBTdGF0ZUluSGFzaChvTmV3U3RhdGUuaGFzaCk7XG5cdFx0aWYgKCF0aGlzLmZjbEVuYWJsZWQgJiYgb0xhc3RSZW1vdmVkSXRlbSkge1xuXHRcdFx0Y29uc3Qgc1ByZXZpb3VzSUFwcFN0YXRlS2V5ID0gdGhpcy5maW5kQXBwU3RhdGVJbkhhc2gob0xhc3RSZW1vdmVkSXRlbS5oYXNoKTtcblx0XHRcdGNvbnN0IG9Db21wYXJpc29uU3RhdGVSZXN1bHQgPSB0aGlzLl9jb21wYXJlQ2FjaGVTdGF0ZXMob0xhc3RSZW1vdmVkSXRlbSwgb05ld1N0YXRlKTtcblx0XHRcdC8vIGlmIGN1cnJlbnQgc3RhdGUgZG9lc24ndCBjb250YWluIGEgaS1hcHBzdGF0ZSBhbmQgdGhpcyBzdGF0ZSBzaG91bGQgcmVwbGFjZSBhIHN0YXRlIGNvbnRhaW5pbmcgYSBpQXBwU3RhdGVcblx0XHRcdC8vIHRoZW4gdGhlIHByZXZpb3VzIGlBcHBTdGF0ZSBpcyBwcmVzZXJ2ZWRcblx0XHRcdGlmIChcblx0XHRcdFx0IXRoaXMuc0lBcHBTdGF0ZUtleSAmJlxuXHRcdFx0XHRzUHJldmlvdXNJQXBwU3RhdGVLZXkgJiZcblx0XHRcdFx0KG9Db21wYXJpc29uU3RhdGVSZXN1bHQgPT09IGVudW1TdGF0ZS5FUVVBTCB8fCBvQ29tcGFyaXNvblN0YXRlUmVzdWx0ID09PSBlbnVtU3RhdGUuQ09NUEFUSUJMRSlcblx0XHRcdCkge1xuXHRcdFx0XHRvTmV3U3RhdGUuaGFzaCA9IHRoaXMuc2V0QXBwU3RhdGVJbkhhc2gob05ld1N0YXRlLmhhc2gsIHNQcmV2aW91c0lBcHBTdGF0ZUtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gNS4gTm93IHdlIGNhbiBwdXNoIHRoZSBzdGF0ZSBhdCB0aGUgdG9wIG9mIHRoZSBpbnRlcm5hbCBoaXN0b3J5XG5cdFx0Y29uc3QgYkhhc1NhbWVIYXNoID0gb0xhc3RSZW1vdmVkSXRlbSAmJiBvTmV3U3RhdGUuaGFzaCA9PT0gb0xhc3RSZW1vdmVkSXRlbS5oYXNoO1xuXHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoID09PSAwIHx8IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV0uaGFzaCAhPT0gb05ld1N0YXRlLmhhc2gpIHtcblx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5wdXNoKG9OZXdTdGF0ZSk7XG5cdFx0XHRpZiAob0xhc3RSZW1vdmVkSXRlbSAmJiByZW1vdmVBcHBTdGF0ZUluSGFzaChvTGFzdFJlbW92ZWRJdGVtLmhhc2gpID09PSByZW1vdmVBcHBTdGF0ZUluSGFzaChvTmV3U3RhdGUuaGFzaCkpIHtcblx0XHRcdFx0b05ld1N0YXRlLmZvY3VzQ29udHJvbElkID0gb0xhc3RSZW1vdmVkSXRlbS5mb2N1c0NvbnRyb2xJZDtcblx0XHRcdFx0b05ld1N0YXRlLnNlY29uZGFyeUZvY3VzQ29udHJvbElkID0gb0xhc3RSZW1vdmVkSXRlbS5zZWNvbmRhcnlGb2N1c0NvbnRyb2xJZDtcblx0XHRcdFx0b05ld1N0YXRlLmZvY3VzSW5mbyA9IG9MYXN0UmVtb3ZlZEl0ZW0uZm9jdXNJbmZvO1xuXHRcdFx0XHRvTmV3U3RhdGUuc2Vjb25kYXJ5Rm9jdXNJbmZvID0gb0xhc3RSZW1vdmVkSXRlbS5zZWNvbmRhcnlGb2N1c0luZm87XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gNi4gRGV0ZXJtaW5lIHdoaWNoIGFjdGlvbnMgdG8gZG8gb24gdGhlIGhpc3Rvcnlcblx0XHRpZiAoaVBvcENvdW50ID09PSAwKSB7XG5cdFx0XHQvLyBObyBzdGF0ZSB3YXMgcG9wcGVkIC0tPiBhcHBlbmRcblx0XHRcdHJldHVybiB7IHR5cGU6IFwiYXBwZW5kXCIgfTtcblx0XHR9IGVsc2UgaWYgKGlQb3BDb3VudCA9PT0gMSkge1xuXHRcdFx0Ly8gT25seSAxIHN0YXRlIHdhcyBwb3BwZWQgLS0+IHJlcGxhY2UgY3VycmVudCBoYXNoIHVubGVzcyBoYXNoIGlzIHRoZSBzYW1lICh0aGVuIG5vdGhpbmcgdG8gZG8pXG5cdFx0XHRyZXR1cm4gYkhhc1NhbWVIYXNoID8geyB0eXBlOiBcIm5vbmVcIiB9IDogeyB0eXBlOiBcInJlcGxhY2VcIiB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBNb3JlIHRoYW4gMSBzdGF0ZSB3YXMgcG9wcGVkIC0tPiBnbyBiYWtjIGluIGhpc3RvcnkgYW5kIHJlcGxhY2UgaGFzaCBpZiBuZWNlc3Nhcnlcblx0XHRcdHJldHVybiBiSGFzU2FtZUhhc2ggPyB7IHR5cGU6IFwiYmFja1wiLCBzdGVwczogaVBvcENvdW50IC0gMSB9IDogeyB0eXBlOiBcImJhY2stcmVwbGFjZVwiLCBzdGVwczogaVBvcENvdW50IC0gMSB9O1xuXHRcdH1cblx0fVxuXG5cdF9ibG9ja2luZ05hdmlnYXRpb25GaWx0ZXIoKTogXCJDdXN0b21cIiB8IFwiQ29udGludWVcIiB7XG5cdFx0cmV0dXJuIHRoaXMuX2JEaXNhYmxlT25IYXNoQ2hhbmdlID8gXCJDdXN0b21cIiA6IFwiQ29udGludWVcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlIHRoZSByb3V0aW5nIGJ5IGNhbGxpbmcgdGhlIHJvdXRlciBzdG9wIG1ldGhvZC5cblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfZGlzYWJsZUV2ZW50T25IYXNoQ2hhbmdlKCk6IHZvaWQge1xuXHRcdHRoaXMuX2JEaXNhYmxlT25IYXNoQ2hhbmdlID0gdHJ1ZTtcblx0XHR0aGlzLl9vUm91dGVyLnN0b3AoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbmFibGUgdGhlIHJvdXRpbmcgYnkgY2FsbGluZyB0aGUgcm91dGVyIGluaXRpYWxpemUgbWV0aG9kLlxuXHQgKiBAcGFyYW0gW2JJZ25vcmVDdXJyZW50SGFzaF0gSWdub3JlIHRoZSBsYXN0IGhhc2ggZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSB0aGUgcm91dGVyIGhhcyBpbml0aWFsaXplZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9lbmFibGVFdmVudE9uSGFzaENoYW5nZShiSWdub3JlQ3VycmVudEhhc2g6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHR0aGlzLl9iRGlzYWJsZU9uSGFzaENoYW5nZSA9IGZhbHNlO1xuXHRcdHRoaXMuX29Sb3V0ZXIuaW5pdGlhbGl6ZShiSWdub3JlQ3VycmVudEhhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN5bmNocm9uaXplcyB0aGUgYnJvd3NlciBoaXN0b3J5IHdpdGggdGhlIGludGVybmFsIGhpc3Rvcnkgb2YgdGhlIHJvdXRlclByb3h5LCBhbmQgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIGlmIG5lZWRlZC5cblx0ICogQHBhcmFtIG9IaXN0b3J5QWN0aW9uIFNwZWNpZmllcyB0aGUgbmF2aWdhdGlvbiBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkXG5cdCAqIEBwYXJhbSBiUmVidWlsZE9ubHkgYHRydWVgIGlmIGludGVybmFsIGhpc3RvcnkgaXMgY3VycmVudGx5IGJlaW5nIHJlYnVpbHRcblx0ICogQHJldHVybnMgUHJvbWlzZSAocmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWQpIHRoYXQgcmV0dXJucyAndHJ1ZScgaWYgYSBuYXZpZ2F0aW9uIHRvb2sgcGxhY2UsICdmYWxzZScgaWYgdGhlIG5hdmlnYXRpb24gZGlkbid0IGhhcHBlblxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIF9yZWJ1aWxkQnJvd3Nlckhpc3Rvcnkob0hpc3RvcnlBY3Rpb246IEh5c3RvcnlBY3Rpb24sIGJSZWJ1aWxkT25seTogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGhpcy5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSB0cnVlO1xuXHRcdFx0Y29uc3Qgb1RhcmdldFN0YXRlID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5W3RoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxXSxcblx0XHRcdFx0bmV3TGV2ZWwgPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMTtcblxuXHRcdFx0ZnVuY3Rpb24gcmVwbGFjZUFzeW5jKCk6IHZvaWQge1xuXHRcdFx0XHRpZiAoIWJSZWJ1aWxkT25seSkge1xuXHRcdFx0XHRcdHRoYXQuX2VuYWJsZUV2ZW50T25IYXNoQ2hhbmdlKHRydWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0KHRoYXQuX29Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBGdW5jdGlvbikob1RhcmdldFN0YXRlLmhhc2gpO1xuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHsgZmVMZXZlbDogbmV3TGV2ZWwgfSwgaGlzdG9yeS5zdGF0ZSksIFwiXCIpO1xuXG5cdFx0XHRcdGlmIChiUmVidWlsZE9ubHkpIHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdC8vIFRpbWVvdXQgdG8gbGV0ICdoYXNoY2hhbmdlJyBldmVudCBiZSBwcm9jZXNzZWQgYmVmb3JlIGJ5IHRoZSBIYXNoQ2hhbmdlciwgc28gdGhhdFxuXHRcdFx0XHRcdFx0Ly8gb25Sb3V0ZU1hdGNoZWQgbm90aWZpY2F0aW9uIGlzbid0IHJhaXNlZFxuXHRcdFx0XHRcdFx0dGhhdC5fZW5hYmxlRXZlbnRPbkhhc2hDaGFuZ2UodHJ1ZSk7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGF0LmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRyZXNvbHZlKHRydWUpOyAvLyBhIG5hdmlnYXRpb24gb2NjdXJyZWRcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXN5bmMgY2FsbGJhY2tzIHdoZW4gbmF2aWdhdGluZyBiYWNrLCBpbiBvcmRlciB0byBsZXQgYWxsIG5vdGlmaWNhdGlvbnMgYW5kIGV2ZW50cyBnZXQgcHJvY2Vzc2VkXG5cdFx0XHRmdW5jdGlvbiBiYWNrUmVwbGFjZUFzeW5jKCk6IHZvaWQge1xuXHRcdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIGJhY2tSZXBsYWNlQXN5bmMpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQvLyBUaW1lb3V0IHRvIGxldCAnaGFzaGNoYW5nZScgZXZlbnQgYmUgcHJvY2Vzc2VkIGJlZm9yZSBieSB0aGUgSGFzaENoYW5nZXJcblx0XHRcdFx0XHRyZXBsYWNlQXN5bmMoKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGJhY2tBc3luYygpOiB2b2lkIHtcblx0XHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBiYWNrQXN5bmMpO1xuXHRcdFx0XHR0aGF0LmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRyZXNvbHZlKHRydWUpOyAvLyBhIG5hdmlnYXRpb24gb2NjdXJyZWRcblx0XHRcdH1cblxuXHRcdFx0dGhhdC5fYklnbm9yZVJlc3RvcmUgPSB0cnVlO1xuXG5cdFx0XHRzd2l0Y2ggKG9IaXN0b3J5QWN0aW9uLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInJlcGxhY2VcIjpcblx0XHRcdFx0XHRjb25zdCBmb2N1c0luZm8gPSBoaXN0b3J5LnN0YXRlPy5mb2N1c0luZm87XG5cdFx0XHRcdFx0KHRoYXQuX29Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBGdW5jdGlvbikob1RhcmdldFN0YXRlLmhhc2gpO1xuXHRcdFx0XHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKFxuXHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGZlTGV2ZWw6IG5ld0xldmVsLFxuXHRcdFx0XHRcdFx0XHRcdGZvY3VzSW5mbzogZm9jdXNJbmZvXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdGhpc3Rvcnkuc3RhdGVcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR0aGF0LmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7IC8vIGEgbmF2aWdhdGlvbiBvY2N1cnJlZFxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJhcHBlbmRcIjpcblx0XHRcdFx0XHR0aGF0Ll9vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuc2V0SGFzaChvVGFyZ2V0U3RhdGUuaGFzaCk7XG5cdFx0XHRcdFx0aGlzdG9yeS5yZXBsYWNlU3RhdGUoT2JqZWN0LmFzc2lnbih7IGZlTGV2ZWw6IG5ld0xldmVsIH0sIGhpc3Rvcnkuc3RhdGUpLCBcIlwiKTtcblx0XHRcdFx0XHR0aGF0LmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7IC8vIGEgbmF2aWdhdGlvbiBvY2N1cnJlZFxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJiYWNrXCI6XG5cdFx0XHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBiYWNrQXN5bmMpO1xuXHRcdFx0XHRcdGhpc3RvcnkuZ28oLW9IaXN0b3J5QWN0aW9uLnN0ZXBzKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiYmFjay1yZXBsYWNlXCI6XG5cdFx0XHRcdFx0dGhpcy5fZGlzYWJsZUV2ZW50T25IYXNoQ2hhbmdlKCk7XG5cdFx0XHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBiYWNrUmVwbGFjZUFzeW5jKTtcblx0XHRcdFx0XHRoaXN0b3J5LmdvKC1vSGlzdG9yeUFjdGlvbi5zdGVwcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQvLyBObyBuYXZpZ2F0aW9uXG5cdFx0XHRcdFx0dGhpcy5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTsgLy8gbm8gbmF2aWdhdGlvbiAtLT4gcmVzb2x2ZSB0byBmYWxzZVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0TGFzdEhpc3RvcnlFbnRyeSgpOiBSb3V0ZXJTdGF0ZSB7XG5cdFx0cmV0dXJuIHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV07XG5cdH1cblxuXHRzZXRQYXRoTWFwcGluZyhtYXBwaW5nczogeyBvbGRQYXRoOiBzdHJpbmc7IG5ld1BhdGg6IHN0cmluZyB9W10pOiB2b2lkIHtcblx0XHR0aGlzLl9wYXRoTWFwcGluZ3MgPSBtYXBwaW5ncy5maWx0ZXIoKG1hcHBpbmcpID0+IHtcblx0XHRcdHJldHVybiBtYXBwaW5nLm9sZFBhdGggIT09IG1hcHBpbmcubmV3UGF0aDtcblx0XHR9KTtcblx0fVxuXG5cdGhhc2hHdWFyZCgpOiB2b2lkIHtcblx0XHRsZXQgc0hhc2ggPSB0aGlzLmdldERlY29kZWRXaW5kb3dIYXNoKCk7XG5cdFx0Y29uc3QgY3VycmVudEFwcE5hbWUgPSB0aGlzLmdldEFwcE5hbWVGcm9tSGFzaChzSGFzaCk7XG5cdFx0aWYgKGN1cnJlbnRBcHBOYW1lICE9IHRoaXMuYXBwTmFtZSkge1xuXHRcdFx0Ly8gV2hlbiBkb2luZyBleHRlcm5hbCBuYXZpZ2F0aW9uIGluIGFub3RoZXIgd2luZG93LCB0aGUgY3VycmVudCB3aW5kb3cgbG9jYXRpb24gaXMgdGVtcG9yYXJpbHkgbW9kaWZpZWQgd2l0aCB0aGUgVVJMIG9mIHRoZSB0YXJnZXQgYXBwXG5cdFx0XHQvLyBJbiB0aGlzIGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHRoZSBpbnRlcm5hbGx5IG1hbmFnZWQgaGlzdG9yeSwgc28gd2Ugc2ltcGx5IGRvIG5vdGhpbmdcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoc0hhc2guaW5jbHVkZXMoXCJyZXN0b3JlSGlzdG9yeT10cnVlXCIpKSB7XG5cdFx0XHR0aGlzLl9iQXBwbHlSZXN0b3JlID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZykge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGhhc2ggbmVlZHMgdG8gYmUgY2hhbmdlZCAodGhpcyBoYXBwZW5zIGluIEZDTCB3aGVuIHN3aXRjaGluZyBiL3cgZWRpdCBhbmQgcmVhZC1vbmx5IHdpdGggMyBjb2x1bW5zIG9wZW4pXG5cdFx0XHRjb25zdCBtYXBwaW5nID0gdGhpcy5fcGF0aE1hcHBpbmdzLmZpbmQoKG0pID0+IHtcblx0XHRcdFx0cmV0dXJuIHNIYXNoLmluY2x1ZGVzKG0ub2xkUGF0aCk7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChtYXBwaW5nKSB7XG5cdFx0XHRcdC8vIFJlcGxhY2UgdGhlIGN1cnJlbnQgaGFzaFxuXHRcdFx0XHRzSGFzaCA9IHNIYXNoLnJlcGxhY2UobWFwcGluZy5vbGRQYXRoLCBtYXBwaW5nLm5ld1BhdGgpO1xuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHt9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIiwgZW5jb2RlVVJJKHNIYXNoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGFIYXNoU3BsaXQgPSBzSGFzaC5zcGxpdChcIiYvXCIpO1xuXHRcdFx0Y29uc3Qgc0FwcEhhc2ggPSBhSGFzaFNwbGl0WzFdID8gYUhhc2hTcGxpdFsxXSA6IFwiXCI7XG5cdFx0XHRpZiAodGhpcy5jaGVja0hhc2hXaXRoR3VhcmQoc0FwcEhhc2gpKSB7XG5cdFx0XHRcdGNvbnN0IG9OZXdTdGF0ZSA9IHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNBcHBIYXNoKTtcblx0XHRcdFx0dGhpcy5fcHVzaE5ld1N0YXRlKG9OZXdTdGF0ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ29tcGFyZXMgMiBzdGF0ZXMuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU3RhdGUxXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU3RhdGUyXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb246XG5cdCAqICAgICAgICAtIGVudW1TdGF0ZS5FUVVBTCBpZiBvU3RhdGUxIGFuZCBvU3RhdGUyIGFyZSBlcXVhbFxuXHQgKiAgICAgICAgLSBlbnVtU3RhdGUuQ09NUEFUSUJMRSBpZiBvU3RhdGUxIGFuZCBvU3RhdGUyIGFyZSBjb21wYXRpYmxlXG5cdCAqICAgICAgICAtIGVudW1TdGF0ZS5BTkNFU1RPUiBpZiBvU3RhdGUxIGlzIGFuIGFuY2VzdG9yIG9mIG9TdGF0ZTJcblx0ICogICAgICAgIC0gZW51bVN0YXRlLkRJRkZFUkVOVCBpZiB0aGUgMiBzdGF0ZXMgYXJlIGRpZmZlcmVudFxuXHQgKi9cblxuXHRfY29tcGFyZUNhY2hlU3RhdGVzKG9TdGF0ZTE6IFJvdXRlclN0YXRlLCBvU3RhdGUyOiBSb3V0ZXJTdGF0ZSk6IG51bWJlciB7XG5cdFx0Ly8gRmlyc3QgY29tcGFyZSBvYmplY3Qga2V5c1xuXHRcdGlmIChvU3RhdGUxLmtleXMubGVuZ3RoID4gb1N0YXRlMi5rZXlzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGVudW1TdGF0ZS5ESUZGRVJFTlQ7XG5cdFx0fVxuXHRcdGxldCBlcXVhbCA9IHRydWU7XG5cdFx0bGV0IGluZGV4O1xuXG5cdFx0Zm9yIChpbmRleCA9IDA7IGVxdWFsICYmIGluZGV4IDwgb1N0YXRlMS5rZXlzLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdFx0aWYgKG9TdGF0ZTEua2V5c1tpbmRleF0gIT09IG9TdGF0ZTIua2V5c1tpbmRleF0pIHtcblx0XHRcdFx0ZXF1YWwgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIWVxdWFsKSB7XG5cdFx0XHQvLyBDaGVjayByb3V0aW5nSGludHNcblx0XHRcdGlmIChvU3RhdGUxLmtleXMubGVuZ3RoID09PSAxICYmIG9TdGF0ZTIua2V5cy5sZW5ndGggPT09IDEgJiYgdGhpcy5yb3V0aW5nSGludHM/LltvU3RhdGUxLmtleXNbMF1dKSB7XG5cdFx0XHRcdGlmICh0aGlzLnJvdXRpbmdIaW50c1tvU3RhdGUxLmtleXNbMF1dLnBhcmVudE9mICYmIHRoaXMucm91dGluZ0hpbnRzW29TdGF0ZTEua2V5c1swXV0ucGFyZW50T2YuaW5jbHVkZXMob1N0YXRlMi5rZXlzWzBdKSkge1xuXHRcdFx0XHRcdHJldHVybiBlbnVtU3RhdGUuQU5DRVNUT1I7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFNvbWUgb2JqZWN0cyBrZXlzIGFyZSBkaWZmZXJlbnRcblx0XHRcdHJldHVybiBlbnVtU3RhdGUuRElGRkVSRU5UO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBrZXlzIGZyb20gb1N0YXRlMSBhcmUgaW4gb1N0YXRlMiAtLT4gY2hlY2sgaWYgYW5jZXN0b3Jcblx0XHRpZiAob1N0YXRlMS5rZXlzLmxlbmd0aCA8IG9TdGF0ZTIua2V5cy5sZW5ndGggfHwgb1N0YXRlMS5zY3JlZW5Nb2RlIDwgb1N0YXRlMi5zY3JlZW5Nb2RlKSB7XG5cdFx0XHRyZXR1cm4gZW51bVN0YXRlLkFOQ0VTVE9SO1xuXHRcdH1cblx0XHRpZiAob1N0YXRlMS5zY3JlZW5Nb2RlID4gb1N0YXRlMi5zY3JlZW5Nb2RlKSB7XG5cdFx0XHRyZXR1cm4gZW51bVN0YXRlLkRJRkZFUkVOVDsgLy8gTm90IHN1cmUgdGhpcyBjYXNlIGNhbiBoYXBwZW4uLi5cblx0XHR9XG5cblx0XHQvLyBBdCB0aGlzIHN0YWdlLCB0aGUgMiBzdGF0ZXMgaGF2ZSB0aGUgc2FtZSBvYmplY3Qga2V5cyAoaW4gdGhlIHNhbWUgb3JkZXIpIGFuZCBzYW1lIHNjcmVlbm1vZGVcblx0XHQvLyBUaGV5IGNhbiBiZSBlaXRoZXIgY29tcGF0aWJsZSBvciBlcXVhbFxuXHRcdHJldHVybiBvU3RhdGUxLnNMYXlvdXQgPT09IG9TdGF0ZTIuc0xheW91dCA/IGVudW1TdGF0ZS5FUVVBTCA6IGVudW1TdGF0ZS5DT01QQVRJQkxFO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNwbGl0IHRoZSBhcHAtc3BlY2lmaWMgcm91dGUgYXQgdGhlIFwiJi9cIiBzZXBhcmF0b3IuXG5cdCAqXG5cdCAqIFRoZSBhcHAtc3BlY2lmaWMgcm91dGUgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgc2VnbWVudHMgc2VwYXJhdGVkIGJ5IFwiJi9cIi5cblx0ICogQGV4YW1wbGVcblx0ICogc3BsaXRBcHBTcGVjaWZpY1JvdXRlKFwiJi9FbnRpdHkoJ2FiYycpL05leHRFbnRpdHkoJ3h5eicpXCIpO1xuXHQgKiAvLyBbXCJFbnRpdHkoJ2FiYycpL05leHRFbnRpdHkoJ3h5eicpXCJdXG5cdCAqXG5cdCAqIHNwbGl0QXBwU3BlY2lmaWNSb3V0ZShcIiYvRW50aXR5KCdhYmMnKS9OZXh0RW50aXR5KCd4eXonKSYvUHJlZml4L05lc3RlZFJvdXRlXCIpO1xuXHQgKiAvLyBbXCJFbnRpdHkoJ2FiYycpL05leHRFbnRpdHkoJ3h5eicpXCIsIFwiUHJlZml4L05lc3RlZFJvdXRlXCJdXG5cdCAqIEBwYXJhbSBhcHBTcGVjaWZpY1JvdXRlXHRUaGUgYXBwLXNwZWNpZmljIHJvdXRlLlxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhcHAtc3BlY2lmaWMgcm91dGUgc2VnbWVudHMuXG5cdCAqL1xuXHRwcml2YXRlIHN0YXRpYyBzcGxpdEFwcFNwZWNpZmljUm91dGUoYXBwU3BlY2lmaWNSb3V0ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IHJvdXRlU3BsaXQgPSBhcHBTcGVjaWZpY1JvdXRlPy5zcGxpdChcIiYvXCIpID8/IFtdO1xuXHRcdGlmICghcm91dGVTcGxpdFswXSkge1xuXHRcdFx0cm91dGVTcGxpdC5zaGlmdCgpOyAvLyByZW1vdmUgdGhlIGxlYWRpbmcgZW1wdHkgc2VnbWVudCAodGhlIGFwcC1zcGVjaWZpYyByb3V0ZSBzdGFydHMgd2l0aCBcIiYvXCIpXG5cdFx0fVxuXHRcdHJldHVybiByb3V0ZVNwbGl0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBiYWNrIGV4aXRzIHRoZSBwcmVzZW50IGd1YXJkIHNldC5cblx0ICogQHJldHVybnMgYHRydWVgIGlmIGJhY2sgZXhpdHMgdGhlIGd1YXJkXG5cdCAqL1xuXHRjaGVja0lmQmFja0lzT3V0T2ZHdWFyZCgpOiBib29sZWFuIHtcblx0XHQvLyBXZSB1c2Ugd2luZG93LmxvY2F0aW9uLmhhc2ggaW5zdGVhZCBvZiBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKSBiZWNhdXNlIHRoZSBsYXR0ZXJcblx0XHQvLyByZXBsYWNlcyBjaGFyYWN0ZXJzIGluIHRoZSBVUkwgKGUuZy4gJTI0IHJlcGxhY2VkIGJ5ICQpIGFuZCBpdCBjYXVzZXMgaXNzdWVzIHdoZW4gY29tcGFyaW5nXG5cdFx0Ly8gd2l0aCB0aGUgVVJMcyBpbiB0aGUgbWFuYWdlZCBoaXN0b3J5XG5cdFx0Y29uc3Qgc3BsaXRIYXNoID0gdGhpcy5nZXRGdWxsSGFzaCgpO1xuXG5cdFx0Y29uc3Qgc2VnbWVudHMgPSBSb3V0ZXJQcm94eS5zcGxpdEFwcFNwZWNpZmljUm91dGUoc3BsaXRIYXNoKTtcblxuXHRcdGlmIChzZWdtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyB0aGVyZSBpcyBhIG5lc3RlZCByb3V0ZSBpbnZvbHZlZCAtPiBhc3N1bWUgd2UgYXJlIHN0aWxsIGluc2lkZSB0aGUgZ3VhcmRcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCBoYXNoID0gc2VnbWVudHNbMF0gPz8gXCJcIjtcblxuXHRcdGxldCBwcmV2aW91c0hhc2g7XG5cdFx0aWYgKHRoaXMuX29OYXZpZ2F0aW9uR3VhcmQpIHtcblx0XHRcdGZvciAobGV0IGkgPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuXHRcdFx0XHRpZiAodGhpcy5fb01hbmFnZWRIaXN0b3J5W2ldLmhhc2ggPT09IGhhc2gpIHtcblx0XHRcdFx0XHRwcmV2aW91c0hhc2ggPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaSAtIDFdLmhhc2g7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICFwcmV2aW91c0hhc2ggfHwgIXRoaXMuY2hlY2tIYXNoV2l0aEd1YXJkKHByZXZpb3VzSGFzaCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBiYWNrIG5hdmlnYXRpb24gd2lsbCBleGl0IHRoZSBhcHAuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYmFjayBleGl0cyB0aGUgYXBwXG5cdCAqL1xuXHRjaGVja0lmQmFja0V4aXRzQXBwKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHNwbGl0SGFzaCA9IHRoaXMuZ2V0RnVsbEhhc2goKTtcblxuXHRcdGNvbnN0IHNlZ21lbnRzID0gUm91dGVyUHJveHkuc3BsaXRBcHBTcGVjaWZpY1JvdXRlKHNwbGl0SGFzaCk7XG5cblx0XHRpZiAoc2VnbWVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gdGhlcmUgaXMgYSBuZXN0ZWQgcm91dGUgaW52b2x2ZWQgLT4gYXNzdW1lIHdlIGFyZSBzdGlsbCBpbnNpZGUgdGhlIGFwcFxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBjdXJyZW50IGhhc2ggaXMgdGhlIGZpcnN0IG9uZSBpbiB0aGUgaGlzdG9yeSwgdGhlbiBhIG5hdmJhY2sgd2lsbCBleGl0IHRoZSBhcHBcblx0XHRjb25zdCBoYXNoID0gc2VnbWVudHNbMF0gPz8gXCJcIjtcblx0XHRyZXR1cm4gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA+IDAgJiYgdGhpcy5fb01hbmFnZWRIaXN0b3J5WzBdLmhhc2ggPT09IGhhc2g7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBsYXN0IDIgZW50cmllcyBpbiB0aGUgaGlzdG9yeSBzaGFyZSB0aGUgc2FtZSBjb250ZXh0LlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhleSBzaGFyZSB0aGUgc2FtZSBjb250ZXh0LlxuXHQgKi9cblx0Y2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA8IDIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCBvQ3VycmVudFN0YXRlID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5W3RoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxXTtcblx0XHRjb25zdCBvUHJldmlvdXNTdGF0ZSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMl07XG5cblx0XHRyZXR1cm4gb0N1cnJlbnRTdGF0ZS5oYXNoLnNwbGl0KFwiP1wiKVswXSA9PT0gb1ByZXZpb3VzU3RhdGUuaGFzaC5zcGxpdChcIj9cIilbMF07XG5cdH1cblxuXHQvKipcblx0ICogUmVzdG9yZXMgdGhlIGZvY3VzIGZvciB0aGUgY3VycmVudCBoYXNoLCBpZiB3ZSBjYW4gZmluZCBpdCBpbiB0aGUgaGlzdG9yeS5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBmb2N1cyB3YXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRyZXN0b3JlRm9jdXNGb3JDdXJyZW50SGFzaCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBjdXJyZW50SGFzaCA9IHJlbW92ZUFwcFN0YXRlSW5IYXNoKHRoaXMuZ2V0SGFzaCgpKTtcblx0XHRjb25zdCBzdGF0ZUZvckhhc2ggPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkuZmluZCgoc3RhdGUpID0+IHtcblx0XHRcdHJldHVybiByZW1vdmVBcHBTdGF0ZUluSGFzaChzdGF0ZS5oYXNoKSA9PT0gY3VycmVudEhhc2g7XG5cdFx0fSk7XG5cblx0XHRsZXQgZm9jdXNBcHBsaWVkID0gZmFsc2U7XG5cdFx0aWYgKHN0YXRlRm9ySGFzaD8uZm9jdXNDb250cm9sSWQpIHtcblx0XHRcdGxldCBmb2N1c0NvbnRyb2wgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKHN0YXRlRm9ySGFzaC5mb2N1c0NvbnRyb2xJZCk7XG5cdFx0XHRsZXQgZm9jdXNJbmZvID0gc3RhdGVGb3JIYXNoLmZvY3VzSW5mbztcblx0XHRcdGlmICgoIWZvY3VzQ29udHJvbCB8fCAhZm9jdXNDb250cm9sLmdldEZvY3VzRG9tUmVmKCkpICYmIHN0YXRlRm9ySGFzaC5zZWNvbmRhcnlGb2N1c0NvbnRyb2xJZCkge1xuXHRcdFx0XHQvLyBUaGUgY29udHJvbCBmb3IgZm9jdXMgaXMgZWl0aGVyIG5vdCBmb3VuZCBvciBpcyBub3QgZGlzcGxheWVkIG9uIHNjcmVlbiAobm8gZm9jdXNEb21SZWYpXG5cdFx0XHRcdC8vIC0tPiB0cnkgdGhlIHNlY29uZGFyeSBjb250cm9sIGlmIHRoZXJlJ3Mgb25lXG5cdFx0XHRcdGZvY3VzQ29udHJvbCA9IEVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3RhdGVGb3JIYXNoLnNlY29uZGFyeUZvY3VzQ29udHJvbElkKTtcblx0XHRcdFx0Zm9jdXNJbmZvID0gc3RhdGVGb3JIYXNoLnNlY29uZGFyeUZvY3VzSW5mbztcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0Ly8gaWYgdGhlIGNvbnRyb2wgaXMgYSBidXN5IHRhYmxlLCB3ZSBkb24ndCB3YW50IHRvIGZvY3VzIGl0LlxuXHRcdFx0XHQvLyB0YWJsZXMgaGF2ZSB0aGVpciBvd24gaGFuZGxpbmcgdG8gcmVzdG9yZSBmb2N1cywgc28gd2UgZG9uJ3Qgd2FudCB0byBpbnRlcmZlcmUgd2l0aCB0aGF0XG5cdFx0XHRcdGZvY3VzQ29udHJvbD8uZ2V0UGFyZW50KCk/LmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpICYmXG5cdFx0XHRcdChmb2N1c0NvbnRyb2wgYXMgTVRhYmxlIHwgVUlUYWJsZSkuZ2V0QnVzeSgpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0Zm9jdXNDb250cm9sPy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdFx0Zm9jdXNBcHBsaWVkID0gZm9jdXNDb250cm9sICE9PSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZvY3VzQXBwbGllZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9yZXMgdGhlIElEIG9mIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBjb250cm9sIGluIHRoZSBoaXN0b3J5IGZvciB0aGUgY3VycmVudCBoYXNoLlxuXHQgKlxuXHQgKi9cblx0cHJpdmF0ZSBzdG9yZUZvY3VzSW5mb0ZvckN1cnJlbnRIYXNoKCk6IHZvaWQge1xuXHRcdGNvbnN0IGN1cnJlbnRIYXNoID0gcmVtb3ZlQXBwU3RhdGVJbkhhc2godGhpcy5nZXRIYXNoKCkpO1xuXHRcdGNvbnN0IHN0YXRlRm9ySGFzaCA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5maW5kKChzdGF0ZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHJlbW92ZUFwcFN0YXRlSW5IYXNoKHN0YXRlLmhhc2gpID09PSBjdXJyZW50SGFzaDtcblx0XHR9KTtcblx0XHRpZiAoc3RhdGVGb3JIYXNoKSB7XG5cdFx0XHRjb25zdCBmb2N1c0NvbnRyb2wgPSBFbGVtZW50LmdldEFjdGl2ZUVsZW1lbnQoKTtcblx0XHRcdHN0YXRlRm9ySGFzaC5mb2N1c0NvbnRyb2xJZCA9IGZvY3VzQ29udHJvbD8uZ2V0SWQoKTtcblx0XHRcdGlmIChmb2N1c0NvbnRyb2wpIHtcblx0XHRcdFx0Ly8gVGhlIHNlY29uZGFyeSBmb2N1cyBjb250cm9sIGlzIHRoZSBwYXJlbnQgdGFibGUgaWYgdGhlcmUncyBvbmVcblx0XHRcdFx0bGV0IHBhcmVudFRhYmxlID0gZm9jdXNDb250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0XHR3aGlsZSAocGFyZW50VGFibGUgJiYgIXBhcmVudFRhYmxlLmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJiAhcGFyZW50VGFibGUuaXNBPE1UYWJsZT4oXCJzYXAubS5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdHBhcmVudFRhYmxlID0gcGFyZW50VGFibGUuZ2V0UGFyZW50KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RhdGVGb3JIYXNoLnNlY29uZGFyeUZvY3VzQ29udHJvbElkID0gcGFyZW50VGFibGU/LmdldElkKCk7XG5cdFx0XHRcdHN0YXRlRm9ySGFzaC5zZWNvbmRhcnlGb2N1c0luZm8gPSB7IHByZXZlbnRTY3JvbGw6IHRydWUgfTtcblx0XHRcdH1cblx0XHRcdHN0YXRlRm9ySGFzaC5mb2N1c0luZm8gPSBmb2N1c0NvbnRyb2w/LmdldEZvY3VzSW5mbygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyBhIGxheW91dCB2YWx1ZSBmb3IgYSBoYXNoIGluIHRoZSBoaXN0b3J5LlxuXHQgKiBAcGFyYW0gaGFzaCBUaGUgaGFzaCB0byBsb29rIGZvciBpbiB0aGUgaGlzdG9yeS5cblx0ICogQHJldHVybnMgQSBsYXlvdXQgdmFsdWUgaWYgaXQgY291bGQgYmUgZm91bmQsIHVuZGVmaW5lZCBvdGhlcndpc2UuXG5cdCAqL1xuXHRmaW5kTGF5b3V0Rm9ySGFzaChoYXNoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5mY2xFbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBhbGwgcXVlcnkgcGFyYW1ldGVycyBmcm9tIHRoZSBoYXNoXG5cdFx0Y29uc3QgaGFzaE5vUGFyYW0gPSBoYXNoLnNwbGl0KFwiP1wiKVswXTtcblxuXHRcdC8vIExvb2sgZm9yIHRoZSBzdGF0ZSBiYWNrd2FyZHMsIHNvIHRoYXQgd2UgZmluZCB0aGUgbGFzdCBzdGF0ZSBpbiB0aGUgaGlzdG9yeSAoZS5nLiBpZiB3ZSBoYXZlIDIgc3RhdGVzIHdpdGggdGhlIHNhbWUgaGFzaCBidXQgMiBkaWZmZXJlbnQgbGF5b3V0cylcblx0XHRsZXQgdGFyZ2V0U3RhdGU6IFJvdXRlclN0YXRlIHwgdW5kZWZpbmVkO1xuXHRcdGZvciAobGV0IGluZGV4ID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7IGluZGV4ID49IDAgJiYgdGFyZ2V0U3RhdGUgPT09IHVuZGVmaW5lZDsgaW5kZXgtLSkge1xuXHRcdFx0aWYgKHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtpbmRleF0uaGFzaC5zcGxpdChcIj9cIilbMF0gPT09IGhhc2hOb1BhcmFtKSB7XG5cdFx0XHRcdHRhcmdldFN0YXRlID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5W2luZGV4XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGFyZ2V0U3RhdGU/LnNMYXlvdXQ7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGVyUHJveHk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0VBY0EsTUFBTUEsU0FBUyxHQUFHO0lBQ2pCQyxLQUFLLEVBQUUsQ0FBQztJQUNSQyxVQUFVLEVBQUUsQ0FBQztJQUNiQyxRQUFRLEVBQUUsQ0FBQztJQUNYQyxTQUFTLEVBQUU7RUFDWixDQUFDO0VBQ0QsTUFBTUMsYUFBYSxHQUFHO0lBQ3JCQyxXQUFXLEVBQUUsUUFBUTtJQUNyQkMsY0FBYyxFQUFFO0VBQ2pCLENBQUM7RUF3QkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0MsbUJBQW1CQSxDQUFDQyxVQUFrQixFQUFFQyxVQUFtQixFQUFtQjtJQUN0RixPQUFPO01BQ05DLFVBQVUsRUFBRUYsVUFBVSxDQUFDRyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztNQUFFO01BQ2hEQyxXQUFXLEVBQUVILFVBQVUsR0FBR0EsVUFBVSxDQUFDRSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHRSxTQUFTO01BQ3hFQyxLQUFLLEVBQUUsU0FBQUEsQ0FBVUMsS0FBYSxFQUFXO1FBQ3hDLE9BQU9BLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ04sVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQ0UsV0FBVyxHQUFHRyxLQUFLLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUNKLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7TUFDbEg7SUFDRCxDQUFDO0VBQ0Y7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0ssb0JBQW9CQSxDQUFDRixLQUFhLEVBQVU7SUFDcEQsT0FBT0EsS0FBSyxDQUFDSixPQUFP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
|
|
@@ -271,7 +271,7 @@ class RouterProxy extends BaseObject {
|
|
|
271
271
|
* @param bPreserveHistory If set to true, non-ancestor entries in history will be retained
|
|
272
272
|
* @param bDisablePreservationCache If set to true, cache preservation mechanism is disabled for the current navigation
|
|
273
273
|
* @param bForceFocus If set to true, the logic to set the focus once the navigation is finalized will be triggered (onPageReady)
|
|
274
|
-
* @param
|
|
274
|
+
* @param preserveShellBackNavigationHandler If set to true, the back navigation callback is preserved. If undefined or false, the back navigation callback is reset.
|
|
275
275
|
* @param skipHashGuardCheck
|
|
276
276
|
* @returns Promise (resolved when the navigation is finalized) that returns 'true' if a navigation took place, 'false' if the navigation didn't happen
|
|
277
277
|
*/
|
|
@@ -280,11 +280,11 @@ class RouterProxy extends BaseObject {
|
|
|
280
280
|
bPreserveHistory?: boolean,
|
|
281
281
|
bDisablePreservationCache?: boolean,
|
|
282
282
|
bForceFocus?: boolean,
|
|
283
|
-
|
|
283
|
+
preserveShellBackNavigationHandler?: boolean,
|
|
284
284
|
skipHashGuardCheck?: boolean
|
|
285
285
|
): Promise<boolean> {
|
|
286
286
|
sHash = sHash.startsWith("/") ? sHash.substring(1) : sHash;
|
|
287
|
-
if (
|
|
287
|
+
if (!preserveShellBackNavigationHandler) {
|
|
288
288
|
await this._oShellServices.setBackNavigation();
|
|
289
289
|
}
|
|
290
290
|
sHash = this.removeRestoreHistoryFlagFromHash(sHash);
|
|
@@ -417,11 +417,21 @@ class RouterProxy extends BaseObject {
|
|
|
417
417
|
* @param oParameters Parameters for the navigation
|
|
418
418
|
* @param oParameters.noPreservationCache
|
|
419
419
|
* @param oParameters.bIsStickyMode
|
|
420
|
+
* @param oParameters.isHiddenDraftEnabled
|
|
420
421
|
* @returns Promise that is resolved when the navigation is finalized
|
|
421
422
|
*/
|
|
422
|
-
async navTo(
|
|
423
|
+
async navTo(
|
|
424
|
+
sRouteName: string,
|
|
425
|
+
oParameters?: { noPreservationCache?: boolean; bIsStickyMode?: boolean; isHiddenDraftEnabled?: boolean }
|
|
426
|
+
): Promise<boolean> {
|
|
423
427
|
const sHash = this._oRouter.getURL(sRouteName, oParameters);
|
|
424
|
-
return this.navToHash(
|
|
428
|
+
return this.navToHash(
|
|
429
|
+
sHash!,
|
|
430
|
+
false,
|
|
431
|
+
oParameters?.noPreservationCache,
|
|
432
|
+
false,
|
|
433
|
+
(oParameters?.bIsStickyMode ?? false) || (oParameters?.isHiddenDraftEnabled ?? false)
|
|
434
|
+
);
|
|
425
435
|
}
|
|
426
436
|
|
|
427
437
|
/**
|