@sapui5/sap.fe.templates 1.140.0 → 1.141.1
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/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +6 -8
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +6 -8
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +8 -3
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +7 -2
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +7 -23
- package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +7 -26
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +36 -33
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +51 -41
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +14 -3
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +11 -0
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/CollaborationManager.js +4 -3
- package/src/sap/fe/templates/ObjectPage/overrides/CollaborationManager.ts +32 -29
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +2 -2
- package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +8 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +4 -1
- package/src/sap/fe/templates/library.js +1 -1
|
@@ -1,39 +1,42 @@
|
|
|
1
1
|
import Log from "sap/base/Log";
|
|
2
2
|
import { type RetrieveCardType } from "sap/cards/ap/common/services/RetrieveCard";
|
|
3
|
+
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
3
4
|
import type CollaborationManager from "sap/fe/core/controllerextensions/cards/CollaborationManager";
|
|
4
5
|
import { type WrappedCard } from "sap/fe/core/services/CollaborationManagerServiceFactory";
|
|
5
|
-
import { type CardManifest } from "sap/insights/CardHelper";
|
|
6
6
|
import { showGenericErrorMessage } from "sap/fe/macros/insights/CommonInsightsHelper";
|
|
7
|
-
import
|
|
7
|
+
import { type CardManifest } from "sap/insights/CardHelper";
|
|
8
8
|
export const RetrieveCardTypes: Record<string, RetrieveCardType> = {
|
|
9
|
-
|
|
10
|
-
}
|
|
9
|
+
INTEGRATION: "integration"
|
|
10
|
+
};
|
|
11
11
|
|
|
12
12
|
const CollaborationManagerOverride = {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
13
|
+
async collectAvailableCards(this: CollaborationManager, cards: WrappedCard[]): Promise<void> {
|
|
14
|
+
const view = this.base.getView();
|
|
15
|
+
const controller = view.getController();
|
|
16
|
+
const appComponent = controller.getOwnerComponent().getAppComponent();
|
|
17
|
+
const isEditable = CommonUtils.getIsEditable(view);
|
|
18
|
+
const card = !isEditable
|
|
19
|
+
? await appComponent.getCollaborationManagerService().getDesignTimeCard(RetrieveCardTypes.INTEGRATION)
|
|
20
|
+
: undefined;
|
|
21
|
+
if (card) {
|
|
22
|
+
const onAddCardToCollaborationManagerCallback = (): void => {
|
|
23
|
+
try {
|
|
24
|
+
if (card) {
|
|
25
|
+
appComponent.getCollaborationManagerService().publishCard(card as CardManifest);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
} catch (e) {
|
|
29
|
+
showGenericErrorMessage(view);
|
|
30
|
+
Log.error(e as string);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const pageTitleInformation = await controller._getPageTitleInformation();
|
|
34
|
+
cards.push({
|
|
35
|
+
card: card,
|
|
36
|
+
title: pageTitleInformation.subtitle || "",
|
|
37
|
+
callback: onAddCardToCollaborationManagerCallback
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
38
41
|
};
|
|
39
42
|
export default CollaborationManagerOverride;
|
|
@@ -317,7 +317,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
|
|
|
317
317
|
const appId = manifest?.["sap.app"]?.id;
|
|
318
318
|
const appTitle = manifest?.["sap.app"]?.title;
|
|
319
319
|
const aActiveContextPaths = await fetchActiveContextPaths(oContext, this.base.getView().getController());
|
|
320
|
-
const oPageTitleInfo = this.base.getView().getController()._getPageTitleInformation();
|
|
320
|
+
const oPageTitleInfo = await this.base.getView().getController()._getPageTitleInformation();
|
|
321
321
|
const oData = await Promise.all([getJamUrl(bIsEditable, bGlobalIsStickySupported, aActiveContextPaths), getShareUrl(bIsEditable, bGlobalIsStickySupported, aActiveContextPaths), getShareEmailUrl()]);
|
|
322
322
|
let sTitle = oPageTitleInfo.title;
|
|
323
323
|
const sObjectSubtitle = oPageTitleInfo.subtitle ? oPageTitleInfo.subtitle.toString() : "";
|
|
@@ -509,4 +509,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
|
|
|
509
509
|
};
|
|
510
510
|
return ShareExtensionOverride;
|
|
511
511
|
}, false);
|
|
512
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGQUNFVF9JREVOVElGSUVSIiwiQURBUFRJVkVDQVJEIiwiYkdsb2JhbElzU3RpY2t5U3VwcG9ydGVkIiwiY3JlYXRlRmlsdGVyVG9GZXRjaEFjdGl2ZUNvbnRleHQiLCJtS2V5VmFsdWVzIiwiYklzQWN0aXZlRW50aXR5RGVmaW5lZCIsImFLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImFGaWx0ZXJzIiwiZmlsdGVyIiwic0tleSIsInNWYWx1ZSIsInVuZGVmaW5lZCIsIm1hcCIsIkZpbHRlciIsIkZpbHRlck9wZXJhdG9yIiwiRVEiLCJvQWN0aXZlRmlsdGVyIiwiZmlsdGVycyIsImFuZCIsInB1c2giLCJnZXRBY3RpdmVDb250ZXh0UGF0aCIsIm9Db250cm9sbGVyIiwic1BhZ2VFbnRpdHlOYW1lIiwib0ZpbHRlciIsIm9MaXN0QmluZGluZyIsImdldFZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldE1vZGVsIiwiYmluZExpc3QiLCIkJGdyb3VwSWQiLCJyZXF1ZXN0Q29udGV4dHMiLCJ0aGVuIiwib0NvbnRleHRzIiwibGVuZ3RoIiwiZ2V0UGF0aCIsImdldEFjdGl2ZUNvbnRleHRJbnN0YW5jZXMiLCJvQ29udGV4dCIsIm9FbnRpdHlTZXQiLCJhQWN0aXZlQ29udGV4dHByb21pc2VzIiwiYVBhZ2VzIiwic01ldGFQYXRoIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwiYU1ldGFQYXRoQXJyYXkiLCJzcGxpdCIsInNDdXJyZW50SGFzaE5vUGFyYW1zIiwiSGFzaENoYW5nZXIiLCJnZXRJbnN0YW5jZSIsImdldEhhc2giLCJhQ3VycmVudEhhc2hBcnJheSIsIm9QYWdlTWFwIiwiYVBhZ2VIYXNoQXJyYXkiLCJmb3JFYWNoIiwic1BhZ2VIYXNoIiwiYUtleVZhbHVlcyIsInNQYWdlSGFzaE5hbWUiLCJNb2RlbEhlbHBlciIsImlzRHJhZnRTdXBwb3J0ZWQiLCJzS2V5QXNzaWdubWVudCIsImFQYXJ0cyIsInNLZXlWYWx1ZSIsImluY2x1ZGVzIiwib01ldGFNb2RlbCIsImFUZWNobmljYWxLZXlzIiwiZ2V0T2JqZWN0Iiwiam9pbiIsImxhc3RJbmRleE9mIiwiZGVjb2RlVVJJQ29tcG9uZW50Iiwib1BhZ2VFbnRpdHlTZXQiLCJzTmF2aWdhdGlvblBhdGgiLCJvUGFnZUluZm8iLCJzUGFnZUVudGl0eVNldE5hbWUiLCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsInBhZ2VFbnRpdHlOYW1lIiwiZ2V0QWN0aXZlQ29udGV4dFBhdGhzIiwic1Jvb3RFbnRpdHlOYW1lIiwib1BhZ2VDb250ZXh0IiwiUHJvbWlzZSIsImFsbCIsImFEYXRhIiwiYUFjdGl2ZUNvbnRleHRQYXRocyIsImkiLCJzQWN0aXZlQ29udGV4dFBhdGgiLCJzTmF2aWdhdGlvUHJvcGVydHkiLCJzRW50aXR5U2V0TmFtZSIsInZhbHVlcyIsInJlcGxhY2UiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImluZm8iLCJyZXNvbHZlIiwiZmV0Y2hBY3RpdmVDb250ZXh0UGF0aHMiLCJvUHJvbWlzZSIsImFTZW1hbnRpY0tleXMiLCJvTW9kZWwiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJTZW1hbnRpY0tleUhlbHBlciIsImdldFNlbWFudGljS2V5cyIsIm9WaWV3RGF0YSIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwiZ2V0U2hhcmVVcmwiLCJiSXNFZGl0YWJsZSIsImJJc1N0aWNreVN1cHBvcnRlZCIsInNTaGFyZVVybCIsInNIYXNoIiwic0Jhc2VQYXRoIiwiaHJlZkZvckFwcFNwZWNpZmljSGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaGFzaCIsIm9yaWdpbiIsInBhdGhuYW1lIiwic2VhcmNoIiwiZ2V0U2hhcmVFbWFpbFVybCIsIm9VU2hlbGxDb250YWluZXIiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJnZXRGTFBVcmxBc3luYyIsInNGTFBVcmwiLCJzRXJyb3IiLCJlcnJvciIsImRvY3VtZW50IiwiVVJMIiwiZ2V0SmFtVXJsIiwiYklzRWRpdE1vZGUiLCJzSmFtVXJsIiwidXNoZWxsQ29udGFpbmVyIiwicnVubmluZ0luSWZyYW1lIiwiZ2V0RkxQVXJsIiwic1VybCIsImdldFF1ZXJ5VXJsRm9yQ2FyZERlZmluaXRpb24iLCJjb250ZXh0IiwicGF0aHNUb1F1ZXJ5IiwiRFVNTVlfR1JPVVBfSUQiLCJtb2RlbCIsInJlcXVlc3RvciIsIm9SZXF1ZXN0b3IiLCJzZWxlY3RPcHRpb25zIiwicGF0aCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsInJlcXVlc3RzIiwibUJhdGNoUXVldWUiLCJzcGxpY2UiLCJsb25nVXJsIiwicmVkdWNlIiwidXJsIiwicmVxIiwiJG93bmVyIiwibWVyZ2VkUmVxIiwibWVyZ2VHZXRSZXF1ZXN0cyIsImFic29sdXRlU2VydmljZVVSTCIsImdldEFic29sdXRlVVJMIiwiZ2V0U2VydmljZVVybCIsImdldEFjdGlvbkNvbnRyb2xzIiwib3BMYXlvdXQiLCJoZWFkZXJUaXRsZSIsImdldEhlYWRlclRpdGxlIiwiaGVhZGVyQWN0aW9uc0luVUkiLCJnZXRBY3Rpb25zIiwiY29udHJvbHMiLCJhY3Rpb25JblVJIiwiaXNBIiwibWVudSIsImdldE1lbnUiLCJtZW51SXRlbXMiLCJnZXRJdGVtcyIsInNlcnZpY2VVUkwiLCJyZWdleCIsIlJlZ0V4cCIsInRlc3QiLCJTaGFyZUV4dGVuc2lvbk92ZXJyaWRlIiwiYWRhcHRTaGFyZU1ldGFkYXRhIiwib1NoYXJlTWV0YWRhdGEiLCJiYXNlIiwiQ29tbW9uVXRpbHMiLCJnZXRJc0VkaXRhYmxlIiwibWFuaWZlc3QiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRNYW5pZmVzdCIsImFwcElkIiwiaWQiLCJhcHBUaXRsZSIsInRpdGxlIiwiZ2V0Q29udHJvbGxlciIsIm9QYWdlVGl0bGVJbmZvIiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib0RhdGEiLCJzVGl0bGUiLCJzT2JqZWN0U3VidGl0bGUiLCJzdWJ0aXRsZSIsInRvU3RyaW5nIiwidGlsZSIsImVtYWlsIiwiamFtIiwic2hhcmVJbmZvTW9kZWwiLCJ0ZWFtc1VybCIsImdldFRlYW1zVXJsIiwic2V0UHJvcGVydHkiLCJnZXRDYXJkRGVmaW5pdGlvbiIsImNhcmREZWZpbml0aW9uIiwidmlldyIsImJpbmRpbmdDb250ZXh0IiwibWV0YU1vZGVsIiwib3BDb250cm9sbGVyIiwiYXBwQ29tcG9uZW50IiwiZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiZ2V0RGVzaWduVGltZUNhcmQiLCJzZXJ2aWNlVVJJIiwiY29udmV0ZXJkVHlwZXMiLCJjb252ZXJ0VHlwZXMiLCJiaW5kaW5nQ29udGV4dFBhdGgiLCJ3ZWJVcmwiLCJjb250ZXh0UGF0aCIsInNoZWxsU2VydmljZUhlbHBlciIsImdldFNoZWxsU2VydmljZXMiLCJjb250ZXh0SW5mbyIsImNhcmRDb25maWciLCJoZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNDb25maWciLCJhY3Rpb25zIiwiZ2V0QWN0aW9uc0NvbmZpZyIsIm9iamVjdFRpdGxlIiwiZ2V0VGl0bGUiLCJhcHBVcmwiLCJnZXRQcm9wZXJ0eSIsImNhcmRHZW5lcmF0b3IiLCJBZGFwdGl2ZUNhcmRHZW5lcmF0b3IiLCJnZXRQYXRoc1RvUXVlcnkiLCJxdWVyeVVybCIsImNvbnRyb2xsZXIiLCJtYW5pZmVzdEFjdGlvbnNDb25maWciLCJjb250ZW50IiwiaGVhZGVyIiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwiYWN0aW9uQ29udHJvbHNJblVJIiwiYWN0aW9uQ29uZmlnIiwiY29uZmlnIiwiYWN0aW9uQ29udHJvbCIsImNvbmZpZ0tleSIsImRhdGEiLCJnZXRUZXh0IiwiaXNWaXNpYmxlIiwiZ2V0QWN0aW9uVmlzaWJpbGl0eVZpYU1hbmlmZXN0IiwiYWN0aW9uS2V5Iiwic3RhcnRzV2l0aCIsImFjdGlvblZpc2libGUiLCJ2aXNpYmxlIiwiZW5hYmxlZCIsImR5bmFtaWNIZWFkZXJDb250cm9scyIsImdldEhlYWRlckNvbnRlbnQiLCJoZWFkZXJJdGVtcyIsImN1bW11bGF0aXZlQ29uZmlncyIsImN1cnJlbnRGYWNldCIsImZhY2V0SWRlbnRpZmVyIiwiZm9ybUVsZW1lbnRzQ29uZmlnIiwiX2dldEZhY2V0TGFiZWxzSW5mbyIsImN1cnJlbnRJdGVtIiwiaXNCb3VuZCIsImdldFZpc2libGUiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiYW5jaG9yIiwicG9wIiwiZmFjZXRDb250cm9sIiwibGFiZWxDdHJscyIsImdldEZvcm1MYWJlbHMiLCJhbGxDb25maWdzIiwibGFiZWwiLCJsYWJlbElkZW50aWZpZXIiLCJsYWJlbFRleHQiLCJlbmRzV2l0aCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2hhcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IHR5cGUgeyBTaGFyZU1ldGFkYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgeyB0eXBlIE1hbmlmZXN0QWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNLZXlIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNLZXlIZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgQWRhcHRpdmVDYXJkR2VuZXJhdG9yIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY2FyZC9HZW5lcmF0b3JcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tQWN0aW9uQ29uZmlncyB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY2FyZC9hY3Rpb25zL0hlYWRlckFjdGlvbnNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q3VzdG9tRm9ybUVsZW1lbnRzQ29uZmlnLFxuXHRDdXN0b21IZWFkZXJGYWNldENvbmZpZ3MsXG5cdEhlYWRlckZhY2V0Q29uZmlnXG59IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY2FyZC9mYWNldHMvSGVhZGVyQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgU3Rhc2hhYmxlSEJveCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL2NvbnRyb2xzL1N0YXNoYWJsZUhCb3hcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgdHlwZSBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCB0eXBlIE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCB0eXBlIE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEhhc2hDaGFuZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL0hhc2hDaGFuZ2VyXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgeyBJQWRhcHRpdmVDYXJkIH0gZnJvbSBcInR5cGVzL2FkYXB0aXZlQ2FyZF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxFbnRpdHlTZXQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmNvbnN0IEZBQ0VUX0lERU5USUZJRVIgPSBcImZhY2V0SWRlbnRpZmllclwiO1xuY29uc3QgQURBUFRJVkVDQVJEID0gXCJhZGFwdGl2ZVwiO1xubGV0IGJHbG9iYWxJc1N0aWNreVN1cHBvcnRlZDogYm9vbGVhbjtcblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyVG9GZXRjaEFjdGl2ZUNvbnRleHQobUtleVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGJJc0FjdGl2ZUVudGl0eURlZmluZWQ6IGJvb2xlYW4pOiBGaWx0ZXIge1xuXHRjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKG1LZXlWYWx1ZXMpO1xuXG5cdGNvbnN0IGFGaWx0ZXJzID0gYUtleXNcblx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IHNWYWx1ZSA9IG1LZXlWYWx1ZXNbc0tleV07XG5cdFx0XHRyZXR1cm4gc1ZhbHVlICE9PSB1bmRlZmluZWQ7XG5cdFx0fSlcblx0XHQubWFwKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IHNWYWx1ZSA9IG1LZXlWYWx1ZXNbc0tleV07XG5cdFx0XHRyZXR1cm4gbmV3IEZpbHRlcihzS2V5LCBGaWx0ZXJPcGVyYXRvci5FUSwgc1ZhbHVlKTtcblx0XHR9KTtcblxuXHRpZiAoYklzQWN0aXZlRW50aXR5RGVmaW5lZCkge1xuXHRcdGNvbnN0IG9BY3RpdmVGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdGZpbHRlcnM6IFtuZXcgRmlsdGVyKFwiU2libGluZ0VudGl0eS9Jc0FjdGl2ZUVudGl0eVwiLCBGaWx0ZXJPcGVyYXRvci5FUSwgdHJ1ZSldLFxuXHRcdFx0YW5kOiBmYWxzZVxuXHRcdH0pO1xuXG5cdFx0YUZpbHRlcnMucHVzaChvQWN0aXZlRmlsdGVyKTtcblx0fVxuXG5cdHJldHVybiBuZXcgRmlsdGVyKGFGaWx0ZXJzLCB0cnVlKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldEFjdGl2ZUNvbnRleHRQYXRoKG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgc1BhZ2VFbnRpdHlOYW1lOiBzdHJpbmcsIG9GaWx0ZXI6IEZpbHRlcik6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IG9MaXN0QmluZGluZyA9IG9Db250cm9sbGVyXG5cdFx0LmdldFZpZXcoKVxuXHRcdC5nZXRCaW5kaW5nQ29udGV4dCgpXG5cdFx0LmdldE1vZGVsKClcblx0XHQuYmluZExpc3QoYC8ke3NQYWdlRW50aXR5TmFtZX1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb0ZpbHRlciwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCIgfSk7XG5cdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpLnRoZW4oZnVuY3Rpb24gKG9Db250ZXh0cykge1xuXHRcdGlmIChvQ29udGV4dHMgJiYgb0NvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIG9Db250ZXh0c1swXS5nZXRQYXRoKCk7XG5cdFx0fVxuXHRcdHJldHVybiBcIlwiO1xuXHR9KTtcbn1cbnR5cGUgUGFnZUluZm8gPSB7IHBhZ2VFbnRpdHlOYW1lPzogc3RyaW5nOyBtS2V5VmFsdWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGJJc0FjdGl2ZUVudGl0eURlZmluZWQ/OiBib29sZWFuIH07XG5mdW5jdGlvbiBnZXRBY3RpdmVDb250ZXh0SW5zdGFuY2VzKG9Db250ZXh0OiBDb250ZXh0LCBvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIG9FbnRpdHlTZXQ6IE1ldGFNb2RlbEVudGl0eVNldCk6IFByb21pc2U8c3RyaW5nPltdIHtcblx0Y29uc3QgYUFjdGl2ZUNvbnRleHRwcm9taXNlczogUHJvbWlzZTxzdHJpbmc+W10gPSBbXTtcblx0Y29uc3QgYVBhZ2VzOiBQYWdlSW5mb1tdID0gW107XG5cdGxldCBzTWV0YVBhdGggPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdGlmIChzTWV0YVBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRzTWV0YVBhdGggPSBzTWV0YVBhdGguc3Vic3RyaW5nKDEpO1xuXHR9XG5cdGNvbnN0IGFNZXRhUGF0aEFycmF5ID0gc01ldGFQYXRoLnNwbGl0KFwiL1wiKTtcblx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9QYXJhbXMgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKS5zcGxpdChcIj9cIilbMF07XG5cdGNvbnN0IGFDdXJyZW50SGFzaEFycmF5ID0gc0N1cnJlbnRIYXNoTm9QYXJhbXMuc3BsaXQoXCIvXCIpO1xuXG5cdC8vIG9QYWdlTWFwIC0gY3JlYXRpbmcgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgbWFwIG9mIG1ldGFwYXRoIG5hbWUgYW5kIGl0J3MgdGVjaG5pY2FsIGRldGFpbHNcblx0Ly8gd2hpY2ggaXMgcmVxdWlyZWQgdG8gY3JlYXRlIGEgZmlsdGVyIHRvIGZldGNoIHRoZSByZWxhdmFudC9jb3JyZWN0IGFjdGl2ZSBjb250ZXh0XG5cdC8vIEV4YW1wbGU6IHtTYWxlc09yZGVyTWFuYWdlOnt0ZWNobmljYWxJRDp0ZWNobmljYWxJRFZhbHVlfSwgX0l0ZW06e3RlY2huaWNhbElEOnRlY2huaWNhbElEVmFsdWV9fSBldGMuLFxuXHRjb25zdCBvUGFnZU1hcDogUmVjb3JkPHN0cmluZywgUGFnZUluZm8+ID0ge307XG5cdGNvbnN0IGFQYWdlSGFzaEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuXHRhQ3VycmVudEhhc2hBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChzUGFnZUhhc2g6IHN0cmluZykge1xuXHRcdGNvbnN0IGFLZXlWYWx1ZXMgPSBzUGFnZUhhc2guc3Vic3RyaW5nKHNQYWdlSGFzaC5pbmRleE9mKFwiKFwiKSArIDEsIHNQYWdlSGFzaC5sZW5ndGggLSAxKS5zcGxpdChcIixcIik7XG5cdFx0Y29uc3QgbUtleVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRjb25zdCBzUGFnZUhhc2hOYW1lID0gc1BhZ2VIYXNoLnNwbGl0KFwiKFwiKVswXTtcblx0XHRvUGFnZU1hcFtzUGFnZUhhc2hOYW1lXSA9IHt9O1xuXHRcdGFQYWdlSGFzaEFycmF5LnB1c2goc1BhZ2VIYXNoTmFtZSk7XG5cdFx0b1BhZ2VNYXBbc1BhZ2VIYXNoTmFtZV1bXCJiSXNBY3RpdmVFbnRpdHlEZWZpbmVkXCJdID0gTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChcblx0XHRcdG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRvQ29udGV4dC5nZXRQYXRoKClcblx0XHQpXG5cdFx0XHQ/IHRydWVcblx0XHRcdDogZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBzS2V5QXNzaWdubWVudCBvZiBhS2V5VmFsdWVzKSB7XG5cdFx0XHRjb25zdCBhUGFydHMgPSBzS2V5QXNzaWdubWVudC5zcGxpdChcIj1cIik7XG5cdFx0XHRsZXQgc0tleVZhbHVlID0gYVBhcnRzWzFdO1xuXHRcdFx0bGV0IHNLZXkgPSBhUGFydHNbMF07XG5cdFx0XHQvLyBJbiBjYXNlIGlmIG9ubHkgb25lIHRlY2huaWNhbCBrZXkgaXMgZGVmaW5lZCB0aGVuIHRoZSB1cmwganVzdCBjb250YWlucyB0aGUgdGVjaG5pY2FsSURWYWx1ZSBidXQgbm90IHRoZSB0ZWNobmljYWxJRFxuXHRcdFx0Ly8gRXhhbXBsZTogU2FsZXNPcmRlck1hbmFnZShJRD0xMTExMTEyOS1hYWFhLWJiYmItY2NjYy1kZGRkZWVlZWZmZmYsSXNBY3RpdmVFbnRpdHk9ZmFsc2UpL19JdGVtKDExMTExMTI5LWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcblx0XHRcdC8vIEluIGFib3ZlIGV4YW1wbGUgU2FsZXNPcmRlckl0ZW0gaGFzIG9ubHkgb25lIHRlY2huaWNhbCBrZXkgZGVmaW5lZCwgaGVuY2UgdGVjaG5pY2FsSUQgaW5mbyBpcyBub3QgcHJlc2VudCBpbiB0aGUgdXJsXG5cdFx0XHQvLyBIZW5jZSBpbiBzdWNoIGNhc2VzIHdlIGdldCB0ZWNobmljYWwga2V5IGFuZCB1c2UgdGhlbSB0byBmZXRjaCBhY3RpdmUgY29udGV4dFxuXHRcdFx0aWYgKCFzS2V5QXNzaWdubWVudC5pbmNsdWRlcyhcIj1cIikpIHtcblx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke2FQYWdlSGFzaEFycmF5LmpvaW4oXCIvXCIpfS8kVHlwZS8kS2V5YCk7XG5cdFx0XHRcdHNLZXlWYWx1ZSA9IGFQYXJ0c1swXTtcblx0XHRcdFx0c0tleSA9IGFUZWNobmljYWxLZXlzWzBdO1xuXHRcdFx0XHRvUGFnZU1hcFtzUGFnZUhhc2guc3BsaXQoXCIoXCIpWzBdXVtcImJJc0FjdGl2ZUVudGl0eURlZmluZWRcIl0gPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNLZXkgIT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRpZiAoc0tleVZhbHVlLmluZGV4T2YoXCInXCIpID09PSAwICYmIHNLZXlWYWx1ZS5sYXN0SW5kZXhPZihcIidcIikgPT09IHNLZXlWYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIHRoZSBxdW90ZXMgZnJvbSB0aGUgdmFsdWUgYW5kIGRlY29kZSBzcGVjaWFsIGNoYXJzXG5cdFx0XHRcdFx0c0tleVZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KHNLZXlWYWx1ZS5zdWJzdHJpbmcoMSwgc0tleVZhbHVlLmxlbmd0aCAtIDEpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtS2V5VmFsdWVzW3NLZXldID0gc0tleVZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRvUGFnZU1hcFtzUGFnZUhhc2hOYW1lXS5tS2V5VmFsdWVzID0gbUtleVZhbHVlcztcblx0fSk7XG5cblx0bGV0IG9QYWdlRW50aXR5U2V0ID0gb0VudGl0eVNldDtcblx0YU1ldGFQYXRoQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoc05hdmlnYXRpb25QYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBvUGFnZUluZm86IFBhZ2VJbmZvID0ge307XG5cdFx0Y29uc3Qgc1BhZ2VFbnRpdHlTZXROYW1lID0gb1BhZ2VFbnRpdHlTZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcgJiYgb1BhZ2VFbnRpdHlTZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbc05hdmlnYXRpb25QYXRoXTtcblx0XHRpZiAoc1BhZ2VFbnRpdHlTZXROYW1lKSB7XG5cdFx0XHRvUGFnZUluZm8ucGFnZUVudGl0eU5hbWUgPSBvUGFnZUVudGl0eVNldC4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tzTmF2aWdhdGlvblBhdGhdO1xuXHRcdFx0b1BhZ2VFbnRpdHlTZXQgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7c1BhZ2VFbnRpdHlTZXROYW1lfWApIHx8IG9FbnRpdHlTZXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9QYWdlSW5mby5wYWdlRW50aXR5TmFtZSA9IHNOYXZpZ2F0aW9uUGF0aDtcblx0XHR9XG5cdFx0b1BhZ2VJbmZvLm1LZXlWYWx1ZXMgPSBvUGFnZU1hcFtzTmF2aWdhdGlvblBhdGhdPy5tS2V5VmFsdWVzO1xuXHRcdG9QYWdlSW5mby5iSXNBY3RpdmVFbnRpdHlEZWZpbmVkID0gb1BhZ2VNYXBbc05hdmlnYXRpb25QYXRoXT8uYklzQWN0aXZlRW50aXR5RGVmaW5lZDtcblx0XHRhUGFnZXMucHVzaChvUGFnZUluZm8pO1xuXHR9KTtcblxuXHRhUGFnZXMuZm9yRWFjaChmdW5jdGlvbiAob1BhZ2VJbmZvOiBQYWdlSW5mbykge1xuXHRcdGNvbnN0IG9GaWx0ZXIgPSBjcmVhdGVGaWx0ZXJUb0ZldGNoQWN0aXZlQ29udGV4dChvUGFnZUluZm8ubUtleVZhbHVlcyEsICEhb1BhZ2VJbmZvLmJJc0FjdGl2ZUVudGl0eURlZmluZWQpO1xuXHRcdGFBY3RpdmVDb250ZXh0cHJvbWlzZXMucHVzaChnZXRBY3RpdmVDb250ZXh0UGF0aChvQ29udHJvbGxlciwgb1BhZ2VJbmZvLnBhZ2VFbnRpdHlOYW1lISwgb0ZpbHRlcikpO1xuXHR9KTtcblxuXHRyZXR1cm4gYUFjdGl2ZUNvbnRleHRwcm9taXNlcztcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZmV0Y2ggYWN0aXZlIGNvbnRleHQgcGF0aCdzLlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBQYWdlIENvbnRleHRcbiAqIEBwYXJhbSBvQ29udHJvbGxlclxuICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBhY3RpdmUgY29udGV4dCdzIGFyZSBmZXRjaGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFjdGl2ZUNvbnRleHRQYXRocyhvQ29udGV4dDogQ29udGV4dCwgb0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuXHRjb25zdCBzQ3VycmVudEhhc2hOb1BhcmFtcyA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpLnNwbGl0KFwiP1wiKVswXTtcblx0bGV0IHNSb290RW50aXR5TmFtZSA9IHNDdXJyZW50SGFzaE5vUGFyYW1zICYmIHNDdXJyZW50SGFzaE5vUGFyYW1zLnN1YnN0cmluZygwLCBzQ3VycmVudEhhc2hOb1BhcmFtcy5pbmRleE9mKFwiKFwiKSk7XG5cdGlmIChzUm9vdEVudGl0eU5hbWUuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRzUm9vdEVudGl0eU5hbWUgPSBzUm9vdEVudGl0eU5hbWUuc3Vic3RyaW5nKDEpO1xuXHR9XG5cdGNvbnN0IG9FbnRpdHlTZXQgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7c1Jvb3RFbnRpdHlOYW1lfWApO1xuXHRjb25zdCBvUGFnZUNvbnRleHQgPSBvQ29udGV4dDtcblx0Y29uc3QgYUFjdGl2ZUNvbnRleHRwcm9taXNlcyA9IGdldEFjdGl2ZUNvbnRleHRJbnN0YW5jZXMob0NvbnRleHQsIG9Db250cm9sbGVyLCBvRW50aXR5U2V0KTtcblx0aWYgKGFBY3RpdmVDb250ZXh0cHJvbWlzZXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhQWN0aXZlQ29udGV4dHByb21pc2VzKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFEYXRhOiBzdHJpbmdbXSkge1xuXHRcdFx0XHRjb25zdCBhQWN0aXZlQ29udGV4dFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0XHRsZXQgb1BhZ2VFbnRpdHlTZXQgPSBvRW50aXR5U2V0O1xuXHRcdFx0XHRpZiAoYURhdGFbMF0/LmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHRcdFx0YUFjdGl2ZUNvbnRleHRQYXRocy5wdXNoKGFEYXRhWzBdLnN1YnN0cmluZygxKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUFjdGl2ZUNvbnRleHRQYXRocy5wdXNoKGFEYXRhWzBdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJbiB0aGUgYWN0aXZlIGNvbnRleHQgcGF0aHMgaWRlbnRpZnkgYW5kIHJlcGxhY2UgdGhlIGVudGl0eVNldCBOYW1lIHdpdGggY29ycmVzcG9uZGluZyBuYXZpZ2F0aW9uIHByb3BlcnR5IG5hbWVcblx0XHRcdFx0Ly8gUmVxdWlyZWQgdG8gZm9ybSB0aGUgdXJsIHBvaW50aW5nIHRvIGFjdGl2ZSBjb250ZXh0XG5cdFx0XHRcdC8vIEV4YW1wbGUgOiBTYWxlc09yZGVySXRlbSAtLT4gX0l0ZW0sIE1hdGVyaWFsRGV0YWlscyAtLT4gX01hdGVyaWFsRGV0YWlscyBldGMuLFxuXHRcdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IGFEYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0bGV0IHNBY3RpdmVDb250ZXh0UGF0aCA9IGFEYXRhW2ldO1xuXHRcdFx0XHRcdGxldCBzTmF2aWdhdGlvUHJvcGVydHkgPSBcIlwiO1xuXHRcdFx0XHRcdGxldCBzRW50aXR5U2V0TmFtZSA9IHNBY3RpdmVDb250ZXh0UGF0aCAmJiBzQWN0aXZlQ29udGV4dFBhdGguc3Vic3RyaW5nKDAsIHNBY3RpdmVDb250ZXh0UGF0aC5pbmRleE9mKFwiKFwiKSk7XG5cdFx0XHRcdFx0aWYgKHNFbnRpdHlTZXROYW1lPy5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0c0VudGl0eVNldE5hbWUgPSBzRW50aXR5U2V0TmFtZS5zdWJzdHJpbmcoMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChzQWN0aXZlQ29udGV4dFBhdGg/LmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRzQWN0aXZlQ29udGV4dFBhdGggPSBzQWN0aXZlQ29udGV4dFBhdGguc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzTmF2aWdhdGlvUHJvcGVydHkgPSBPYmplY3Qua2V5cyhvUGFnZUVudGl0eVNldC4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZylbXG5cdFx0XHRcdFx0XHRPYmplY3QudmFsdWVzKG9QYWdlRW50aXR5U2V0LiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKS5pbmRleE9mKHNFbnRpdHlTZXROYW1lKVxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0aWYgKHNOYXZpZ2F0aW9Qcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0YUFjdGl2ZUNvbnRleHRQYXRocy5wdXNoKHNBY3RpdmVDb250ZXh0UGF0aD8ucmVwbGFjZShzRW50aXR5U2V0TmFtZSwgc05hdmlnYXRpb1Byb3BlcnR5KSk7XG5cdFx0XHRcdFx0XHRvUGFnZUVudGl0eVNldCA9IG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7c0VudGl0eVNldE5hbWV9YCkgfHwgb0VudGl0eVNldDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YUFjdGl2ZUNvbnRleHRQYXRocy5wdXNoKHNBY3RpdmVDb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBhQWN0aXZlQ29udGV4dFBhdGhzO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5pbmZvKFwiRmFpbGVkIHRvIHJldHJpZXZlIG9uZSBvciBtb3JlIGFjdGl2ZSBjb250ZXh0IHBhdGgnc1wiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQWN0aXZlQ29udGV4dFBhdGhzKG9Db250ZXh0OiBDb250ZXh0LCBvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG5cdGxldCBvUHJvbWlzZSwgYVNlbWFudGljS2V5cztcblx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9QYXJhbXMgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKS5zcGxpdChcIj9cIilbMF07XG5cdGlmIChvQ29udGV4dCkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRiR2xvYmFsSXNTdGlja3lTdXBwb3J0ZWQgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob01ldGFNb2RlbCk7XG5cdFx0bGV0IHNSb290RW50aXR5TmFtZSA9IHNDdXJyZW50SGFzaE5vUGFyYW1zICYmIHNDdXJyZW50SGFzaE5vUGFyYW1zLnN1YnN0cmluZygwLCBzQ3VycmVudEhhc2hOb1BhcmFtcy5pbmRleE9mKFwiKFwiKSk7XG5cdFx0aWYgKHNSb290RW50aXR5TmFtZS5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0c1Jvb3RFbnRpdHlOYW1lID0gc1Jvb3RFbnRpdHlOYW1lLnN1YnN0cmluZygxKTtcblx0XHR9XG5cdFx0YVNlbWFudGljS2V5cyA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljS2V5cyhvTWV0YU1vZGVsLCBzUm9vdEVudGl0eU5hbWUpO1xuXHR9XG5cdC8vIEZldGNoIGFjdGl2ZSBjb250ZXh0IGRldGFpbHMgaW5jYXNlIG9mIGJlbG93IHNjZW5hcmlvJ3Mod2hlcmUgcGFnZSBpcyBub3Qgc3RpY2t5IHN1cHBvcnRlZCh3ZSBkbyBub3QgaGF2ZSBkcmFmdCBpbnN0YW5jZSkpXG5cdC8vIDEuIEluIGNhc2Ugb2YgZHJhZnQgZW5hYmxlZCBPYmplY3QgcGFnZSB3aGVyZSBzZW1hbnRpYyBrZXkgYmFzZWQgVVJMIGlzIG5vdCBwb3NzaWJsZShsaWtlIHNlbWFudGljIGtleXMgYXJlIG5vdCBtb2RlbGVkIGluIHRoZSBlbnRpdHkgc2V0KVxuXHQvLyAyLiBJbiBjYXNlIG9mIGRyYWZ0IGVuYWJsZWQgU3ViIE9iamVjdCBQYWdlcyAod2hlcmUgc2VtYW50aWMgYm9va21hcmtpbmcgaXMgbm90IHN1cHBvcnRlZClcblx0Y29uc3Qgb1ZpZXdEYXRhID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCk7XG5cdGlmIChvQ29udGV4dCAmJiAhYkdsb2JhbElzU3RpY2t5U3VwcG9ydGVkICYmICgob1ZpZXdEYXRhLnZpZXdMZXZlbCA9PT0gMSAmJiAhYVNlbWFudGljS2V5cykgfHwgb1ZpZXdEYXRhLnZpZXdMZXZlbCA+PSAyKSkge1xuXHRcdG9Qcm9taXNlID0gZ2V0QWN0aXZlQ29udGV4dFBhdGhzKG9Db250ZXh0LCBvQ29udHJvbGxlcik7XG5cdFx0cmV0dXJuIG9Qcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG59XG5cbi8vIC8qKlxuLy8gICogR2V0IHNoYXJlIFVSTC5cbi8vICAqIEBwYXJhbSBiSXNFZGl0YWJsZVxuLy8gICogQHBhcmFtIGJJc1N0aWNreVN1cHBvcnRlZFxuLy8gICogQHBhcmFtIGFBY3RpdmVDb250ZXh0UGF0aHNcbi8vICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzaGFyZSBVUkxcbi8vICAqIEBwcm90ZWN0ZWRcbi8vICAqIEBzdGF0aWNcbi8vICAqL1xuZnVuY3Rpb24gZ2V0U2hhcmVVcmwoYklzRWRpdGFibGU6IGJvb2xlYW4sIGJJc1N0aWNreVN1cHBvcnRlZDogYm9vbGVhbiwgYUFjdGl2ZUNvbnRleHRQYXRoczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRsZXQgc1NoYXJlVXJsO1xuXHRjb25zdCBzSGFzaCA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpO1xuXHRjb25zdCBzQmFzZVBhdGggPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2ggPyBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2ghKFwiXCIpIDogXCJcIjtcblx0aWYgKGJJc0VkaXRhYmxlICYmICFiSXNTdGlja3lTdXBwb3J0ZWQgJiYgYUFjdGl2ZUNvbnRleHRQYXRocykge1xuXHRcdHNTaGFyZVVybCA9IHNCYXNlUGF0aCArIGFBY3RpdmVDb250ZXh0UGF0aHMuam9pbihcIi9cIik7XG5cdH0gZWxzZSB7XG5cdFx0c1NoYXJlVXJsID0gc0hhc2ggPyBzQmFzZVBhdGggKyBzSGFzaCA6IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHR9XG5cdHJldHVybiB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCArIHNTaGFyZVVybDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldFNoYXJlRW1haWxVcmwoKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3Qgb1VTaGVsbENvbnRhaW5lciA9IHNhcC51aS5yZXF1aXJlKFwic2FwL3VzaGVsbC9Db250YWluZXJcIik7XG5cdGlmIChvVVNoZWxsQ29udGFpbmVyKSB7XG5cdFx0cmV0dXJuIG9VU2hlbGxDb250YWluZXJcblx0XHRcdC5nZXRGTFBVcmxBc3luYyh0cnVlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKHNGTFBVcmw6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gc0ZMUFVybDtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKHNFcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDb3VsZCBub3QgcmV0cmlldmUgY0ZMUCBVUkwgZm9yIHRoZSBzaGFyaW5nIGRpYWxvZyAoZGlhbG9nIHdpbGwgbm90IGJlIG9wZW5lZClcIiwgc0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRvY3VtZW50LlVSTCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0SmFtVXJsKGJJc0VkaXRNb2RlOiBib29sZWFuLCBiSXNTdGlja3lTdXBwb3J0ZWQ6IGJvb2xlYW4sIGFBY3RpdmVDb250ZXh0UGF0aHM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmc+IHwgdW5kZWZpbmVkIHtcblx0bGV0IHNKYW1Vcmw6IHN0cmluZztcblx0Y29uc3Qgc0hhc2ggPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKTtcblx0Y29uc3Qgc0Jhc2VQYXRoID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoID8gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoIShcIlwiKSA6IFwiXCI7XG5cdGlmIChiSXNFZGl0TW9kZSAmJiAhYklzU3RpY2t5U3VwcG9ydGVkICYmIGFBY3RpdmVDb250ZXh0UGF0aHMpIHtcblx0XHRzSmFtVXJsID0gc0Jhc2VQYXRoICsgYUFjdGl2ZUNvbnRleHRQYXRocy5qb2luKFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRzSmFtVXJsID0gc0hhc2ggPyBzQmFzZVBhdGggKyBzSGFzaCA6IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHR9XG5cdC8vIGluIGNhc2Ugd2UgYXJlIGluIGNGTFAgc2NlbmFyaW8sIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nXG5cdC8vIGluc2lkZSBhbiBpZnJhbWUsIGFuZCB0aGVyZSBmb3Igd2UgbmVlZCB0byBnZXQgdGhlIGNGTFAgVVJMXG5cdC8vIGFuZCBub3QgJ2RvY3VtZW50LlVSTCcgdGhhdCByZXByZXNlbnRzIHRoZSBpZnJhbWUgVVJMXG5cdGNvbnN0IHVzaGVsbENvbnRhaW5lciA9IHNhcC51aS5yZXF1aXJlKFwic2FwL3VzaGVsbC9Db250YWluZXJcIik7XG5cdGlmICh1c2hlbGxDb250YWluZXIgJiYgdXNoZWxsQ29udGFpbmVyLnJ1bm5pbmdJbklmcmFtZSAmJiB1c2hlbGxDb250YWluZXIucnVubmluZ0luSWZyYW1lKCkpIHtcblx0XHR1c2hlbGxDb250YWluZXJcblx0XHRcdC5nZXRGTFBVcmwodHJ1ZSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIHNVcmwuc3Vic3RyaW5nKDAsIHNVcmwuaW5kZXhPZihcIiNcIikpICsgc0phbVVybDtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKHNFcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDb3VsZCBub3QgcmV0cmlldmUgY0ZMUCBVUkwgZm9yIHRoZSBzaGFyaW5nIGRpYWxvZyAoZGlhbG9nIHdpbGwgbm90IGJlIG9wZW5lZClcIiwgc0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyBzSmFtVXJsKTtcblx0fVxufVxuXG4vKipcbiAqIEdldCBxdWVyeSB1cmwgZm9ybWVkIGJ5IGNvbnRleHQgYW5kIHBhdGhzIHRvIHJlcXVlc3QuXG4gKiBAcGFyYW0gY29udGV4dCBCaW5kaW5nIGNvbnRleHQgb2YgdGhlIHZpZXdcbiAqIEBwYXJhbSBwYXRoc1RvUXVlcnkgUGF0aHMgdG8gcmVxdWVzdC4gQWRkIHRvICRzZWxlY3QgYW5kICRleHBhbmQgcXVlcnkgb2YgdGhlIGRhdGEgVVJMLlxuICogQHJldHVybnMgUXVlcnkgVVJMIGZvciBkYXRhIHRvIGJlIHNob3duIGluIHRoZSBjYXJkLlxuICovXG5mdW5jdGlvbiBnZXRRdWVyeVVybEZvckNhcmREZWZpbml0aW9uKGNvbnRleHQ6IENvbnRleHQsIHBhdGhzVG9RdWVyeTogc3RyaW5nW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHQvLyBOT1RFOiBCZWxvdyBhcHByb2FjaCB1c2VzIHByaXZhdGUgaW1wbGVtZW50YXRpb25zIGZyb20gVUk1IFY0IG1vZGVsIGFuZCByZXF1ZXN0b3IuXG5cdC8vIFRoaXMgd291bGQgbmVlZCB0byBjaGFuZ2Ugb25jZSB3ZSBnZXQgYSBwdWJsaWMgQVBJIHRvIHN1cHBvcnQgdGhpcyByZXF1aXJlbWVudCBmcm9tIFVJNSBWNCBtb2RlbCAoSklSQTogRklPUklURUNIUDEtMjg3NTYpLlxuXHRjb25zdCBEVU1NWV9HUk9VUF9JRCA9IFwiX2ZlX21zX3RlYW1zXCI7XG5cdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpO1xuXHRjb25zdCByZXF1ZXN0b3IgPSBjb250ZXh0LmdldE1vZGVsKCkub1JlcXVlc3Rvcjtcblx0Y29uc3Qgc2VsZWN0T3B0aW9ucyA9IHBhdGhzVG9RdWVyeS5tYXAoKHBhdGgpID0+IHBhdGgucmVwbGFjZShcIi5cIiwgXCIvXCIpKTtcblx0Y29udGV4dC5yZXF1ZXN0U2lkZUVmZmVjdHMoc2VsZWN0T3B0aW9ucywgRFVNTVlfR1JPVVBfSUQpO1xuXHQvLyBGb3IgdGhpcyBzY2VuYXJpbywgMXN0IHJlcXVlc3QgaW4gdGhlIGJhdGNoIGlzIGFsd2F5cyBlbXB0eSBhY2NvcmRpbmcgdG8gbW9kZWwuXG5cdGNvbnN0IHJlcXVlc3RzID0gcmVxdWVzdG9yLm1CYXRjaFF1ZXVlPy5bRFVNTVlfR1JPVVBfSURdPy5zcGxpY2UoMSk7XG5cblx0Ly8gQmF0Y2ggcXVldWUgY29udGFpbnMgc2VwYXJhdGUgcmVxdWVzdHMgZnJvbSBjb250cm9sIGJpbmRpbmdzIHdpdGggZGlmZmVyZW50IGdyb3VwSWRzLlxuXHQvLyBXZSBuZWVkIHRvIG1lcmdlIHRoZSBhbGwgdGhlIHJlcXVlc3RzIGFzIHdlIG5lZWQgYSBzaW5nbGUgZGF0YSB1cmwuXG5cdGlmIChyZXF1ZXN0cyAmJiByZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG5cdFx0Ly8gVXJsIGZvciByZXF1ZXN0IGNhbiBiZSBkaWZmZXJlbnQgYmFzZWQgb24gJHNlbGVjdC8kZXhwYW5kIHBhcmFtZXRlcnMuXG5cdFx0Y29uc3QgbG9uZ1VybCA9IHJlcXVlc3RzLnJlZHVjZSgodXJsLCByZXEpID0+IChyZXEudXJsLmxlbmd0aCA+IHVybC5sZW5ndGggPyByZXEudXJsIDogdXJsKSwgXCJcIik7XG5cdFx0cmVxdWVzdHMuZm9yRWFjaCgocmVxKSA9PiB7XG5cdFx0XHRkZWxldGUgcmVxLiRvd25lcjtcblx0XHRcdHJlcS51cmwgPSBsb25nVXJsO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG1lcmdlZFJlcSA9IHJlcXVlc3Rvci5tZXJnZUdldFJlcXVlc3RzKHJlcXVlc3RzKVswXTtcblx0XHRjb25zdCBhYnNvbHV0ZVNlcnZpY2VVUkwgPSBnZXRBYnNvbHV0ZVVSTChtb2RlbC5nZXRTZXJ2aWNlVXJsKCkpO1xuXHRcdGRlbGV0ZSByZXF1ZXN0b3IubUJhdGNoUXVldWVbRFVNTVlfR1JPVVBfSURdO1xuXHRcdHJldHVybiBgJHthYnNvbHV0ZVNlcnZpY2VVUkx9JHttZXJnZWRSZXEudXJsfWA7XG5cdH1cbn1cblxuLyoqXG4gKiBHZXQgYWN0aW9uIGNvbnRyb2xzIGZyb20gb2JqZWN0IHBhZ2UgbGF5b3V0LlxuICogQHBhcmFtIG9wTGF5b3V0IE9iamVjdFBhZ2VMYXlvdXQgY29udHJvbC5cbiAqIEByZXR1cm5zIEFjdGlvbiBidXR0b25zIGFuZCBtZW51IGl0ZW1zIHByZXNlbnQgaW4gT1AgaGVhZGVyLlxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb25Db250cm9scyhvcExheW91dDogT2JqZWN0UGFnZUxheW91dCk6IChCdXR0b24gfCBNZW51SXRlbSlbXSB7XG5cdGNvbnN0IGhlYWRlclRpdGxlID0gb3BMYXlvdXQuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zSW5VSSA9IGhlYWRlclRpdGxlLmdldEFjdGlvbnMoKTtcblx0cmV0dXJuIGhlYWRlckFjdGlvbnNJblVJLnJlZHVjZShcblx0XHQoY29udHJvbHMsIGFjdGlvbkluVUkpOiAoQnV0dG9uIHwgTWVudUl0ZW0pW10gPT4ge1xuXHRcdFx0aWYgKGFjdGlvbkluVUk/LmlzQT8uPEJ1dHRvbj4oXCJzYXAubS5CdXR0b25cIikpIHtcblx0XHRcdFx0Y29udHJvbHMucHVzaChhY3Rpb25JblVJKTtcblx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uSW5VST8uaXNBPy48TWVudUJ1dHRvbj4oXCJzYXAubS5NZW51QnV0dG9uXCIpKSB7XG5cdFx0XHRcdGNvbnN0IG1lbnUgPSBhY3Rpb25JblVJLmdldE1lbnUoKTtcblx0XHRcdFx0Y29uc3QgbWVudUl0ZW1zID0gbWVudS5nZXRJdGVtcygpO1xuXHRcdFx0XHRjb250cm9scyA9IFsuLi5jb250cm9scywgLi4ubWVudUl0ZW1zXTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb250cm9scztcblx0XHR9LFxuXHRcdFtdIGFzIChCdXR0b24gfCBNZW51SXRlbSlbXVxuXHQpO1xufVxuXG4vKipcbiAqIEdldCBhYnNvbHV0ZSBzZXJ2aWNlIHVybC5cbiAqIEBwYXJhbSBzZXJ2aWNlVVJMIFNlcnZpY2UgVVJMXG4gKiBAcmV0dXJucyBBYnNvbHV0ZSBzZXJ2aWNlIFVSTC5cbiAqL1xuZnVuY3Rpb24gZ2V0QWJzb2x1dGVVUkwoc2VydmljZVVSTDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiXig/OlthLXpdKzopPy8vXCIsIFwiaVwiKTtcblx0aWYgKHJlZ2V4LnRlc3Qoc2VydmljZVVSTCkpIHtcblx0XHRyZXR1cm4gc2VydmljZVVSTDtcblx0fVxuXHRyZXR1cm4gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0ke3NlcnZpY2VVUkx9YDtcbn1cblxuY29uc3QgU2hhcmVFeHRlbnNpb25PdmVycmlkZSA9IHtcblx0YWRhcHRTaGFyZU1ldGFkYXRhOiBhc3luYyBmdW5jdGlvbiAodGhpczogU2hhcmUsIG9TaGFyZU1ldGFkYXRhOiBTaGFyZU1ldGFkYXRhKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgYklzRWRpdGFibGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuYmFzZS5nZXRWaWV3KCkpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1hbmlmZXN0KCk7XG5cdFx0XHRjb25zdCBhcHBJZCA9IG1hbmlmZXN0Py5bXCJzYXAuYXBwXCJdPy5pZDtcblx0XHRcdGNvbnN0IGFwcFRpdGxlID0gbWFuaWZlc3Q/LltcInNhcC5hcHBcIl0/LnRpdGxlO1xuXHRcdFx0Y29uc3QgYUFjdGl2ZUNvbnRleHRQYXRocyA9IGF3YWl0IGZldGNoQWN0aXZlQ29udGV4dFBhdGhzKG9Db250ZXh0LCB0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSk7XG5cdFx0XHRjb25zdCBvUGFnZVRpdGxlSW5mbyA9ICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCk7XG5cdFx0XHRjb25zdCBvRGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0Z2V0SmFtVXJsKGJJc0VkaXRhYmxlLCBiR2xvYmFsSXNTdGlja3lTdXBwb3J0ZWQsIGFBY3RpdmVDb250ZXh0UGF0aHMpLFxuXHRcdFx0XHRnZXRTaGFyZVVybChiSXNFZGl0YWJsZSwgYkdsb2JhbElzU3RpY2t5U3VwcG9ydGVkLCBhQWN0aXZlQ29udGV4dFBhdGhzKSxcblx0XHRcdFx0Z2V0U2hhcmVFbWFpbFVybCgpXG5cdFx0XHRdKTtcblxuXHRcdFx0bGV0IHNUaXRsZSA9IG9QYWdlVGl0bGVJbmZvLnRpdGxlO1xuXHRcdFx0Y29uc3Qgc09iamVjdFN1YnRpdGxlID0gb1BhZ2VUaXRsZUluZm8uc3VidGl0bGUgPyBvUGFnZVRpdGxlSW5mby5zdWJ0aXRsZS50b1N0cmluZygpIDogXCJcIjtcblx0XHRcdGlmIChzT2JqZWN0U3VidGl0bGUpIHtcblx0XHRcdFx0c1RpdGxlID0gYCR7c1RpdGxlfSAtICR7c09iamVjdFN1YnRpdGxlfWA7XG5cdFx0XHR9XG5cdFx0XHRvU2hhcmVNZXRhZGF0YS50aWxlID0ge1xuXHRcdFx0XHR0aXRsZTogb1BhZ2VUaXRsZUluZm8udGl0bGUsXG5cdFx0XHRcdHN1YnRpdGxlOiBzT2JqZWN0U3VidGl0bGVcblx0XHRcdH07XG5cdFx0XHRvU2hhcmVNZXRhZGF0YS5lbWFpbC50aXRsZSA9IHNUaXRsZTtcblx0XHRcdG9TaGFyZU1ldGFkYXRhLnRpdGxlID0gc1RpdGxlO1xuXHRcdFx0b1NoYXJlTWV0YWRhdGEuamFtLnVybCA9IG9EYXRhWzBdO1xuXHRcdFx0b1NoYXJlTWV0YWRhdGEudXJsID0gb0RhdGFbMV07XG5cdFx0XHRvU2hhcmVNZXRhZGF0YS5lbWFpbC51cmwgPSBvRGF0YVsyXTtcblx0XHRcdC8vIE1TIFRlYW1zIGNvbGxhYm9yYXRpb24gZG9lcyBub3Qgd2FudCB0byBhbGxvdyBmdXJ0aGVyIGNoYW5nZXMgdG8gdGhlIFVSTFxuXHRcdFx0Ly8gc28gdXBkYXRlIGNvbGxvYm9yYXRpb25JbmZvIG1vZGVsIGF0IExSIG92ZXJyaWRlIHRvIGlnbm9yZSBmdXJ0aGVyIGV4dGVuc2lvbiBjaGFuZ2VzIGF0IG11bHRpcGxlIGxldmVsc1xuXHRcdFx0Y29uc3Qgc2hhcmVJbmZvTW9kZWwgPSB0aGlzLmJhc2U/LmdldFZpZXcoKT8uZ2V0TW9kZWwoXCJzaGFyZUluZm9cIikgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgdGVhbXNVcmwgPSBhd2FpdCB0aGlzLmdldFRlYW1zVXJsKG9TaGFyZU1ldGFkYXRhLnVybCk7XG5cdFx0XHRpZiAoc2hhcmVJbmZvTW9kZWwpIHtcblx0XHRcdFx0c2hhcmVJbmZvTW9kZWwuc2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGlvbkluZm8vdXJsXCIsIHRlYW1zVXJsKTtcblx0XHRcdFx0c2hhcmVJbmZvTW9kZWwuc2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGlvbkluZm8vYXBwVGl0bGVcIiwgYXBwVGl0bGUpO1xuXHRcdFx0XHRzaGFyZUluZm9Nb2RlbC5zZXRQcm9wZXJ0eShcIi9jb2xsYWJvcmF0aW9uSW5mby9zdWJUaXRsZVwiLCBzT2JqZWN0U3VidGl0bGUpO1xuXHRcdFx0XHRzaGFyZUluZm9Nb2RlbC5zZXRQcm9wZXJ0eShcIi9jb2xsYWJvcmF0aW9uSW5mby9hcHBJZFwiLCBhcHBJZCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvU2hhcmVNZXRhZGF0YTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IGFkYXB0aXZlIGNhcmQgZGVmaW5pdGlvbiBmb3Igb2JqZWN0IHBhZ2UgdG8gIHNoYXJlIHZpYSBNUyB0ZWFtcyBjb2xsYWJvcmF0aW9uLlxuXHQgKiBAcmV0dXJucyBBZGFwdGl2ZSBjYXJkIGRlZmluaXRpb24uXG5cdCAqL1xuXHRnZXRDYXJkRGVmaW5pdGlvbjogYXN5bmMgZnVuY3Rpb24gKHRoaXM6IFNoYXJlKTogUHJvbWlzZTxJQWRhcHRpdmVDYXJkIHwgdW5kZWZpbmVkIHwgV3JhcHBlZENhcmQ+IHtcblx0XHRsZXQgY2FyZERlZmluaXRpb246IElBZGFwdGl2ZUNhcmQgfCB1bmRlZmluZWQgfCBXcmFwcGVkQ2FyZDtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBtb2RlbCA9IGJpbmRpbmdDb250ZXh0Py5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWw/LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG9wQ29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IG9wQ29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRjYXJkRGVmaW5pdGlvbiA9IChhd2FpdCBhcHBDb21wb25lbnQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuZ2V0RGVzaWduVGltZUNhcmQoQURBUFRJVkVDQVJEKSkgYXMgV3JhcHBlZENhcmQ7XG5cdFx0aWYgKCFjYXJkRGVmaW5pdGlvbiAmJiBtb2RlbCAmJiBtZXRhTW9kZWwgJiYgYmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IHNlcnZpY2VVUkkgPSBnZXRBYnNvbHV0ZVVSTChtb2RlbC5nZXRTZXJ2aWNlVXJsKCkpO1xuXHRcdFx0Y29uc3QgY29udmV0ZXJkVHlwZXMgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0UGF0aCA9IGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IHdlYlVybCA9IGAke3NlcnZpY2VVUkl9JHtiaW5kaW5nQ29udGV4dFBhdGguc3Vic3RyaW5nKDEpfWA7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGAke21ldGFNb2RlbC5nZXRNZXRhUGF0aChiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpfS9gO1xuXHRcdFx0Y29uc3Qgc2hlbGxTZXJ2aWNlSGVscGVyID0gb3BDb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRcdGNvbnN0IGNvbnRleHRJbmZvID0ge1xuXHRcdFx0XHRjb250ZXh0UGF0aCxcblx0XHRcdFx0YmluZGluZ0NvbnRleHRQYXRoXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBwYXNzIGZhY2V0IGFzIHBhcnQgb2YgY2FyZENvbmZpZ1xuXHRcdFx0Y29uc3QgY2FyZENvbmZpZyA9IHtcblx0XHRcdFx0aGVhZGVyRmFjZXRzOiBTaGFyZUV4dGVuc2lvbk92ZXJyaWRlLmdldEhlYWRlckZhY2V0c0NvbmZpZyhvcENvbnRyb2xsZXIpLFxuXHRcdFx0XHRhY3Rpb25zOiBTaGFyZUV4dGVuc2lvbk92ZXJyaWRlLmdldEFjdGlvbnNDb25maWcob3BDb250cm9sbGVyKSxcblx0XHRcdFx0d2ViVXJsLFxuXHRcdFx0XHRzZXJ2aWNlVVJJLFxuXHRcdFx0XHRvYmplY3RUaXRsZTogYXdhaXQgc2hlbGxTZXJ2aWNlSGVscGVyLmdldFRpdGxlKCksXG5cdFx0XHRcdGFwcFVybDogdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbChcInNoYXJlSW5mb1wiKT8uZ2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGlvbkluZm8vdXJsXCIpLFxuXHRcdFx0XHRjb250ZXh0SW5mb1xuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGNhcmRHZW5lcmF0b3IgPSBuZXcgQWRhcHRpdmVDYXJkR2VuZXJhdG9yKGNvbnZldGVyZFR5cGVzLCBjYXJkQ29uZmlnKTtcblx0XHRcdGNvbnN0IHBhdGhzVG9RdWVyeSA9IGNhcmRHZW5lcmF0b3IuZ2V0UGF0aHNUb1F1ZXJ5KCk7XG5cdFx0XHQvLyBUT0RPOlxuXHRcdFx0Ly8gJ2dldFF1ZXJ5VXJsRm9yQ2FyZERlZmluaXRpb24nIHVzZXMgYSBwcml2YXRlIGltcGxlbWVudGF0aW9uIGZyb20gVjQgbW9kZWwgdG8gY3JlYXRlIHF1ZXJ5IHVybC5cblx0XHRcdC8vIFRoaXMgd29ya2Fyb3VuZCB3YXMgZGlzY3Vzc2VkIHdpdGggVjQgbW9kZWwgZm9yIHRlbXBvcmFyeSB1c2UuXG5cdFx0XHQvLyBXZSB3b3VsZCBuZWVkIHRvIHJldmVydCB0aGlzIG9uY2Ugd2UgaGF2ZSBhbiBBUEkgb3IgYmV0dGVyIGFwcHJvYWNoIGZyb20gVjQgbW9kZWwuKEpJUkE6IEZJT1JJVEVDSFAxLTI4NzU2KVxuXHRcdFx0Y29uc3QgcXVlcnlVcmwgPSBnZXRRdWVyeVVybEZvckNhcmREZWZpbml0aW9uKGJpbmRpbmdDb250ZXh0LCBwYXRoc1RvUXVlcnkpO1xuXHRcdFx0Y2FyZERlZmluaXRpb24gPSBjYXJkR2VuZXJhdG9yLmdldENhcmREZWZpbml0aW9uKHF1ZXJ5VXJsKTtcblx0XHR9IGVsc2UgaWYgKCFjYXJkRGVmaW5pdGlvbikge1xuXHRcdFx0TG9nLmVycm9yKFwiRkUgVjQgOiBTaGFyZSBPYmplY3QgUGFnZSBjb250cm9sbGVyIGV4dGVuc2lvbiA6IENhcmQgd2FzIG5vdCBjcmVhdGVkXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2FyZERlZmluaXRpb247XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBhY3Rpb24gY29uZmlncyBmb3IgY2FyZCBjcmVhdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVmlldyBjb250cm9sbGVyLlxuXHQgKiBAcmV0dXJucyBBY3Rpb24gY29uZmlnc1xuXHQgKi9cblx0Z2V0QWN0aW9uc0NvbmZpZzogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogQ3VzdG9tQWN0aW9uQ29uZmlncyB7XG5cdFx0Ly8gZmV0Y2ggdGhlIGluZm9ybWF0aW9uIGFib3V0IFVJIGZyb20gb2JqZWN0IHBhZ2UgbGF5b3V0XG5cdFx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zQ29uZmlnID0gY29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5jb250ZW50Py5oZWFkZXI/LmFjdGlvbnMgfHwge307XG5cdFx0Y29uc3Qgb3BMYXlvdXQgPSBjb250cm9sbGVyLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFjdGlvbkNvbnRyb2xzSW5VSSA9IGdldEFjdGlvbkNvbnRyb2xzKG9wTGF5b3V0KTtcblx0XHRjb25zdCBhY3Rpb25Db25maWcgPSBhY3Rpb25Db250cm9sc0luVUkucmVkdWNlKChjb25maWcsIGFjdGlvbkNvbnRyb2wpID0+IHtcblx0XHRcdGNvbnN0IGNvbmZpZ0tleSA9IGFjdGlvbkNvbnRyb2wuZGF0YShcImFubm90YXRlZEFjdGlvbklkZW50aWZpZXJcIik7XG5cdFx0XHRpZiAoY29uZmlnS2V5KSB7XG5cdFx0XHRcdGNvbmZpZ1tjb25maWdLZXldID0ge1xuXHRcdFx0XHRcdHRpdGxlOiBhY3Rpb25Db250cm9sLmdldFRleHQoKVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAobWFuaWZlc3RBY3Rpb25zQ29uZmlnW2NvbmZpZ0tleV0pIHtcblx0XHRcdFx0XHRjb25maWdbY29uZmlnS2V5XS5pc1Zpc2libGUgPSB0aGlzLmdldEFjdGlvblZpc2liaWxpdHlWaWFNYW5pZmVzdChtYW5pZmVzdEFjdGlvbnNDb25maWdbY29uZmlnS2V5XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBjb25maWc7XG5cdFx0fSwge30gYXMgQ3VzdG9tQWN0aW9uQ29uZmlncyk7XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zQ29uZmlnKS5mb3JFYWNoKChhY3Rpb25LZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKGFjdGlvbktleS5zdGFydHNXaXRoKFwiRGF0YUZpZWxkRm9yQWN0aW9uXCIpICYmICFhY3Rpb25Db25maWdbYWN0aW9uS2V5XSkge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25WaXNpYmxlID0gdGhpcy5nZXRBY3Rpb25WaXNpYmlsaXR5VmlhTWFuaWZlc3QobWFuaWZlc3RBY3Rpb25zQ29uZmlnW2FjdGlvbktleV0pO1xuXHRcdFx0XHRpZiAoYWN0aW9uVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0YWN0aW9uQ29uZmlnW2FjdGlvbktleV0gPSB7XG5cdFx0XHRcdFx0XHRpc1Zpc2libGU6IGFjdGlvblZpc2libGVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFjdGlvbkNvbmZpZztcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyBhY3Rpb24gdmlzaWJsaXR5IGJhc2VkIG9uIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24uXG5cdCAqIElmIHRoZSBhY3Rpb24gaGFzIGhhdmUgZHluYW1pYyB2aXNpYmlsaXR5IG9yIGVuYWJsZW1lbnQgZnJvbSBtYW5pZmVzdCwgaXQgaXMgbm90IHZpc2libGUgaW4gdGhlIGNhcmQuXG5cdCAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnNDb25maWcgTWFuaWZlc3QgQWN0aW9uIGNvbmZpZ1xuXHQgKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIHRvIGluZGljYXRlIHZpc2liaWxpdHkgb2YgYWN0aW9uXG5cdCAqL1xuXHRnZXRBY3Rpb25WaXNpYmlsaXR5VmlhTWFuaWZlc3Q6IGZ1bmN0aW9uIChtYW5pZmVzdEFjdGlvbnNDb25maWc6IE1hbmlmZXN0QWN0aW9uKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGFjdGlvblZpc2libGUgPSB0eXBlb2YgbWFuaWZlc3RBY3Rpb25zQ29uZmlnLnZpc2libGUgPT09IFwiYm9vbGVhblwiID8gbWFuaWZlc3RBY3Rpb25zQ29uZmlnLnZpc2libGUgOiB1bmRlZmluZWQ7XG5cdFx0aWYgKHR5cGVvZiBtYW5pZmVzdEFjdGlvbnNDb25maWcudmlzaWJsZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0YWN0aW9uVmlzaWJsZSA9IG1hbmlmZXN0QWN0aW9uc0NvbmZpZy52aXNpYmxlID09PSBcInRydWVcIiA/IHRydWUgOiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBFbmFibGUgaXMgZHluYW1pYyBvciBzdGF0aWNhbGx5IGZhbHNlLlxuXHRcdGlmIChhY3Rpb25WaXNpYmxlICE9PSBmYWxzZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbnNDb25maWcuZW5hYmxlZCA9PT0gZmFsc2UgfHxcblx0XHRcdFx0KHR5cGVvZiBtYW5pZmVzdEFjdGlvbnNDb25maWcuZW5hYmxlZCA9PT0gXCJzdHJpbmdcIiAmJiBtYW5pZmVzdEFjdGlvbnNDb25maWcuZW5hYmxlZCAhPT0gXCJ0cnVlXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0YWN0aW9uVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYWN0aW9uVmlzaWJsZTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IGhlYWRlciBmYWNldHMgd2l0aCB0aXRsZSwgcG9zaXRpb24gYW5kIHZpc2liaWxpdHkuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIE9iamVjdCBwYWdlIGNvbnRyb2xsZXJcblx0ICogQHJldHVybnMgT2JqZWN0IG9mIGZhY2V0c1xuXHQgKi9cblx0Z2V0SGVhZGVyRmFjZXRzQ29uZmlnOiBmdW5jdGlvbiAoY29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiBDdXN0b21IZWFkZXJGYWNldENvbmZpZ3Mge1xuXHRcdC8vIGZldGNoIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBVSSBmcm9tIG9iamVjdCBwYWdlIGxheW91dFxuXHRcdGNvbnN0IGR5bmFtaWNIZWFkZXJDb250cm9scyA9IChjb250cm9sbGVyLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEhlYWRlckNvbnRlbnQoKVswXSBhcyBIQm94KT8uZ2V0SXRlbXMoKTtcblx0XHQvLyBnZXQgdmlzaWJpbGl0eSwgdGl0bGUgYW5kIG1hbnVhbGx5IGNhbGN1bGF0ZSBwb3NpdGlvbiBmcm9tIFVJIGNoYW5nZXNcblxuXHRcdGNvbnN0IGhlYWRlckl0ZW1zOiBDdXN0b21IZWFkZXJGYWNldENvbmZpZ3MgPSBkeW5hbWljSGVhZGVyQ29udHJvbHM/LnJlZHVjZShcblx0XHRcdChjdW1tdWxhdGl2ZUNvbmZpZ3M6IEN1c3RvbUhlYWRlckZhY2V0Q29uZmlncywgY3VycmVudEZhY2V0OiBDb250cm9sIHwgU3Rhc2hhYmxlSEJveCkgPT4ge1xuXHRcdFx0XHRjb25zdCBmYWNldElkZW50aWZlcjogc3RyaW5nIHwgbnVsbCA9IGN1cnJlbnRGYWNldC5kYXRhKEZBQ0VUX0lERU5USUZJRVIpO1xuXHRcdFx0XHRpZiAoZmFjZXRJZGVudGlmZXIgJiYgY3VycmVudEZhY2V0LmlzQTxTdGFzaGFibGVIQm94PihcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdGFzaGFibGVIQm94XCIpKSB7XG5cdFx0XHRcdFx0Ly8gRGlyZWN0IFN0YXNoYWJsZUhCb3ggaXMgYW4gZXF1aXZhbGVudCBvZiBSZWZlcmVuY2VGYWNldC5cblx0XHRcdFx0XHRjb25zdCBmb3JtRWxlbWVudHNDb25maWcgPSBTaGFyZUV4dGVuc2lvbk92ZXJyaWRlLl9nZXRGYWNldExhYmVsc0luZm8oY3VycmVudEZhY2V0KTtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50SXRlbTogSGVhZGVyRmFjZXRDb25maWcgPSB7XG5cdFx0XHRcdFx0XHQvLyBJbiBjYXNlIG9mIGtleSB1c2VyIGNoYW5nZXMgZnJvbSBGTFAsIHRoZSB2aXNpYmxlIHByb3BlcnR5IGlzIG5vdCBib3VuZChtb2RpZmllciB1bmJpbmRzIHRoZSBjb250cm9sIHByb3BlcnR5KS5cblxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYSBiaW5kaW5nIHRoZW4gaXQgY2FuIGNvbWUgZnJvbSBhbm5vdGF0aW9ucyBvciBtYW5pZmVzdC5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IHN1cHBvcnQgbWFuaWZlc3Qgb3ZlcnJpZGVzIGZvciB2aXNpYmxlIHlldCBmb3IgaGVhZGVyIGNvbnRlbnQgaW4gY2FyZHMuXG5cdFx0XHRcdFx0XHQvLyBTbywgaWYgdGhlcmUgaXMgYSBiaW5kaW5nIHdlIGZhbGwgYmFjayB0byBhbm5vdGF0aW9ucyhkZWZhdWx0IGJlaGF2aW91ciBvZiBBZGFwdGl2ZSBDYXJkIEdlbmVyYXRvcikuXG5cblx0XHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIG5vIGJpbmRpbmcsIGl0IG1pZ2h0IG1lYW4gdGhhdCB0aGVyZSBtaWdodCBiZSBrZXkgdXNlciBjaGFuZ2Ugb3IgdmlzaWJsZSBieSBkZWZhdWx0LlxuXHRcdFx0XHRcdFx0aXNWaXNpYmxlOiBjdXJyZW50RmFjZXQuaXNCb3VuZChcInZpc2libGVcIikgPyB1bmRlZmluZWQgOiBjdXJyZW50RmFjZXQuZ2V0VmlzaWJsZSgpLFxuXHRcdFx0XHRcdFx0dGl0bGU6IGN1cnJlbnRGYWNldC5nZXRUaXRsZSgpLFxuXHRcdFx0XHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0XHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXIsXG5cdFx0XHRcdFx0XHRcdGFuY2hvcjogT2JqZWN0LmtleXMoY3VtbXVsYXRpdmVDb25maWdzKS5wb3AoKSB8fCBcIlwiXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRzQ29uZmlnXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjdW1tdWxhdGl2ZUNvbmZpZ3NbZmFjZXRJZGVudGlmZXJdID0gY3VycmVudEl0ZW07XG5cdFx0XHRcdFx0cmV0dXJuIGN1bW11bGF0aXZlQ29uZmlncztcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY3VtbXVsYXRpdmVDb25maWdzO1xuXHRcdFx0fSxcblx0XHRcdHt9XG5cdFx0KTtcblx0XHRyZXR1cm4gaGVhZGVySXRlbXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBmb3JtIGVsZW1lbnRzIGxhYmVsIGNvbmZpZ3VyYXRpb25zIGZyb20gZmFjZXQuXG5cdCAqIEBwYXJhbSBmYWNldENvbnRyb2wgU3Rhc2hhYmxlSEJveCBjb250cm9sIHRoYXQgcmVwcmVzZW50cyB0aGUgcmVmZXJlbmNlIGZhY2V0LlxuXHQgKiBAcmV0dXJucyBGb3JtIGVsZW1lbnRzJyBsYWJlbCB0ZXh0IGNvbmZpZ3VyYXRpb25zXG5cdCAqL1xuXHRfZ2V0RmFjZXRMYWJlbHNJbmZvKGZhY2V0Q29udHJvbDogU3Rhc2hhYmxlSEJveCk6IEN1c3RvbUZvcm1FbGVtZW50c0NvbmZpZyB7XG5cdFx0Y29uc3QgbGFiZWxDdHJscyA9IGZhY2V0Q29udHJvbC5nZXRGb3JtTGFiZWxzKCk7XG5cblx0XHRyZXR1cm4gbGFiZWxDdHJscy5yZWR1Y2UoKGFsbENvbmZpZ3M6IEN1c3RvbUZvcm1FbGVtZW50c0NvbmZpZywgbGFiZWw6IExhYmVsKSA9PiB7XG5cdFx0XHRjb25zdCBsYWJlbElkZW50aWZpZXIgPSBsYWJlbC5kYXRhKFwibGFiZWxJZGVudGlmaWVyXCIpO1xuXHRcdFx0Y29uc3QgbGFiZWxUZXh0ID0gbGFiZWwuZ2V0VGV4dCgpO1xuXHRcdFx0aWYgKGxhYmVsSWRlbnRpZmllcikge1xuXHRcdFx0XHRhbGxDb25maWdzW2xhYmVsSWRlbnRpZmllcl0gPSB7XG5cdFx0XHRcdFx0bGFiZWxUZXh0OiBsYWJlbFRleHQuZW5kc1dpdGgoXCI6XCIpID8gbGFiZWxUZXh0LnN1YnN0cmluZygwLCBsYWJlbFRleHQubGVuZ3RoIC0gMSkgOiBsYWJlbFRleHRcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhbGxDb25maWdzO1xuXHRcdH0sIHt9IGFzIEN1c3RvbUZvcm1FbGVtZW50c0NvbmZpZyk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNoYXJlRXh0ZW5zaW9uT3ZlcnJpZGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztFQXFDQSxNQUFNQSxnQkFBZ0IsR0FBRyxpQkFBaUI7RUFDMUMsTUFBTUMsWUFBWSxHQUFHLFVBQVU7RUFDL0IsSUFBSUMsd0JB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
|
|
512
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGQUNFVF9JREVOVElGSUVSIiwiQURBUFRJVkVDQVJEIiwiYkdsb2JhbElzU3RpY2t5U3VwcG9ydGVkIiwiY3JlYXRlRmlsdGVyVG9GZXRjaEFjdGl2ZUNvbnRleHQiLCJtS2V5VmFsdWVzIiwiYklzQWN0aXZlRW50aXR5RGVmaW5lZCIsImFLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImFGaWx0ZXJzIiwiZmlsdGVyIiwic0tleSIsInNWYWx1ZSIsInVuZGVmaW5lZCIsIm1hcCIsIkZpbHRlciIsIkZpbHRlck9wZXJhdG9yIiwiRVEiLCJvQWN0aXZlRmlsdGVyIiwiZmlsdGVycyIsImFuZCIsInB1c2giLCJnZXRBY3RpdmVDb250ZXh0UGF0aCIsIm9Db250cm9sbGVyIiwic1BhZ2VFbnRpdHlOYW1lIiwib0ZpbHRlciIsIm9MaXN0QmluZGluZyIsImdldFZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldE1vZGVsIiwiYmluZExpc3QiLCIkJGdyb3VwSWQiLCJyZXF1ZXN0Q29udGV4dHMiLCJ0aGVuIiwib0NvbnRleHRzIiwibGVuZ3RoIiwiZ2V0UGF0aCIsImdldEFjdGl2ZUNvbnRleHRJbnN0YW5jZXMiLCJvQ29udGV4dCIsIm9FbnRpdHlTZXQiLCJhQWN0aXZlQ29udGV4dHByb21pc2VzIiwiYVBhZ2VzIiwic01ldGFQYXRoIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwiYU1ldGFQYXRoQXJyYXkiLCJzcGxpdCIsInNDdXJyZW50SGFzaE5vUGFyYW1zIiwiSGFzaENoYW5nZXIiLCJnZXRJbnN0YW5jZSIsImdldEhhc2giLCJhQ3VycmVudEhhc2hBcnJheSIsIm9QYWdlTWFwIiwiYVBhZ2VIYXNoQXJyYXkiLCJmb3JFYWNoIiwic1BhZ2VIYXNoIiwiYUtleVZhbHVlcyIsInNQYWdlSGFzaE5hbWUiLCJNb2RlbEhlbHBlciIsImlzRHJhZnRTdXBwb3J0ZWQiLCJzS2V5QXNzaWdubWVudCIsImFQYXJ0cyIsInNLZXlWYWx1ZSIsImluY2x1ZGVzIiwib01ldGFNb2RlbCIsImFUZWNobmljYWxLZXlzIiwiZ2V0T2JqZWN0Iiwiam9pbiIsImxhc3RJbmRleE9mIiwiZGVjb2RlVVJJQ29tcG9uZW50Iiwib1BhZ2VFbnRpdHlTZXQiLCJzTmF2aWdhdGlvblBhdGgiLCJvUGFnZUluZm8iLCJzUGFnZUVudGl0eVNldE5hbWUiLCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsInBhZ2VFbnRpdHlOYW1lIiwiZ2V0QWN0aXZlQ29udGV4dFBhdGhzIiwic1Jvb3RFbnRpdHlOYW1lIiwib1BhZ2VDb250ZXh0IiwiUHJvbWlzZSIsImFsbCIsImFEYXRhIiwiYUFjdGl2ZUNvbnRleHRQYXRocyIsImkiLCJzQWN0aXZlQ29udGV4dFBhdGgiLCJzTmF2aWdhdGlvUHJvcGVydHkiLCJzRW50aXR5U2V0TmFtZSIsInZhbHVlcyIsInJlcGxhY2UiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImluZm8iLCJyZXNvbHZlIiwiZmV0Y2hBY3RpdmVDb250ZXh0UGF0aHMiLCJvUHJvbWlzZSIsImFTZW1hbnRpY0tleXMiLCJvTW9kZWwiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJTZW1hbnRpY0tleUhlbHBlciIsImdldFNlbWFudGljS2V5cyIsIm9WaWV3RGF0YSIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwiZ2V0U2hhcmVVcmwiLCJiSXNFZGl0YWJsZSIsImJJc1N0aWNreVN1cHBvcnRlZCIsInNTaGFyZVVybCIsInNIYXNoIiwic0Jhc2VQYXRoIiwiaHJlZkZvckFwcFNwZWNpZmljSGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaGFzaCIsIm9yaWdpbiIsInBhdGhuYW1lIiwic2VhcmNoIiwiZ2V0U2hhcmVFbWFpbFVybCIsIm9VU2hlbGxDb250YWluZXIiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJnZXRGTFBVcmxBc3luYyIsInNGTFBVcmwiLCJzRXJyb3IiLCJlcnJvciIsImRvY3VtZW50IiwiVVJMIiwiZ2V0SmFtVXJsIiwiYklzRWRpdE1vZGUiLCJzSmFtVXJsIiwidXNoZWxsQ29udGFpbmVyIiwicnVubmluZ0luSWZyYW1lIiwiZ2V0RkxQVXJsIiwic1VybCIsImdldFF1ZXJ5VXJsRm9yQ2FyZERlZmluaXRpb24iLCJjb250ZXh0IiwicGF0aHNUb1F1ZXJ5IiwiRFVNTVlfR1JPVVBfSUQiLCJtb2RlbCIsInJlcXVlc3RvciIsIm9SZXF1ZXN0b3IiLCJzZWxlY3RPcHRpb25zIiwicGF0aCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsInJlcXVlc3RzIiwibUJhdGNoUXVldWUiLCJzcGxpY2UiLCJsb25nVXJsIiwicmVkdWNlIiwidXJsIiwicmVxIiwiJG93bmVyIiwibWVyZ2VkUmVxIiwibWVyZ2VHZXRSZXF1ZXN0cyIsImFic29sdXRlU2VydmljZVVSTCIsImdldEFic29sdXRlVVJMIiwiZ2V0U2VydmljZVVybCIsImdldEFjdGlvbkNvbnRyb2xzIiwib3BMYXlvdXQiLCJoZWFkZXJUaXRsZSIsImdldEhlYWRlclRpdGxlIiwiaGVhZGVyQWN0aW9uc0luVUkiLCJnZXRBY3Rpb25zIiwiY29udHJvbHMiLCJhY3Rpb25JblVJIiwiaXNBIiwibWVudSIsImdldE1lbnUiLCJtZW51SXRlbXMiLCJnZXRJdGVtcyIsInNlcnZpY2VVUkwiLCJyZWdleCIsIlJlZ0V4cCIsInRlc3QiLCJTaGFyZUV4dGVuc2lvbk92ZXJyaWRlIiwiYWRhcHRTaGFyZU1ldGFkYXRhIiwib1NoYXJlTWV0YWRhdGEiLCJiYXNlIiwiQ29tbW9uVXRpbHMiLCJnZXRJc0VkaXRhYmxlIiwibWFuaWZlc3QiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRNYW5pZmVzdCIsImFwcElkIiwiaWQiLCJhcHBUaXRsZSIsInRpdGxlIiwiZ2V0Q29udHJvbGxlciIsIm9QYWdlVGl0bGVJbmZvIiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib0RhdGEiLCJzVGl0bGUiLCJzT2JqZWN0U3VidGl0bGUiLCJzdWJ0aXRsZSIsInRvU3RyaW5nIiwidGlsZSIsImVtYWlsIiwiamFtIiwic2hhcmVJbmZvTW9kZWwiLCJ0ZWFtc1VybCIsImdldFRlYW1zVXJsIiwic2V0UHJvcGVydHkiLCJnZXRDYXJkRGVmaW5pdGlvbiIsImNhcmREZWZpbml0aW9uIiwidmlldyIsImJpbmRpbmdDb250ZXh0IiwibWV0YU1vZGVsIiwib3BDb250cm9sbGVyIiwiYXBwQ29tcG9uZW50IiwiZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiZ2V0RGVzaWduVGltZUNhcmQiLCJzZXJ2aWNlVVJJIiwiY29udmV0ZXJkVHlwZXMiLCJjb252ZXJ0VHlwZXMiLCJiaW5kaW5nQ29udGV4dFBhdGgiLCJ3ZWJVcmwiLCJjb250ZXh0UGF0aCIsInNoZWxsU2VydmljZUhlbHBlciIsImdldFNoZWxsU2VydmljZXMiLCJjb250ZXh0SW5mbyIsImNhcmRDb25maWciLCJoZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNDb25maWciLCJhY3Rpb25zIiwiZ2V0QWN0aW9uc0NvbmZpZyIsIm9iamVjdFRpdGxlIiwiZ2V0VGl0bGUiLCJhcHBVcmwiLCJnZXRQcm9wZXJ0eSIsImNhcmRHZW5lcmF0b3IiLCJBZGFwdGl2ZUNhcmRHZW5lcmF0b3IiLCJnZXRQYXRoc1RvUXVlcnkiLCJxdWVyeVVybCIsImNvbnRyb2xsZXIiLCJtYW5pZmVzdEFjdGlvbnNDb25maWciLCJjb250ZW50IiwiaGVhZGVyIiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwiYWN0aW9uQ29udHJvbHNJblVJIiwiYWN0aW9uQ29uZmlnIiwiY29uZmlnIiwiYWN0aW9uQ29udHJvbCIsImNvbmZpZ0tleSIsImRhdGEiLCJnZXRUZXh0IiwiaXNWaXNpYmxlIiwiZ2V0QWN0aW9uVmlzaWJpbGl0eVZpYU1hbmlmZXN0IiwiYWN0aW9uS2V5Iiwic3RhcnRzV2l0aCIsImFjdGlvblZpc2libGUiLCJ2aXNpYmxlIiwiZW5hYmxlZCIsImR5bmFtaWNIZWFkZXJDb250cm9scyIsImdldEhlYWRlckNvbnRlbnQiLCJoZWFkZXJJdGVtcyIsImN1bW11bGF0aXZlQ29uZmlncyIsImN1cnJlbnRGYWNldCIsImZhY2V0SWRlbnRpZmVyIiwiZm9ybUVsZW1lbnRzQ29uZmlnIiwiX2dldEZhY2V0TGFiZWxzSW5mbyIsImN1cnJlbnRJdGVtIiwiaXNCb3VuZCIsImdldFZpc2libGUiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiYW5jaG9yIiwicG9wIiwiZmFjZXRDb250cm9sIiwibGFiZWxDdHJscyIsImdldEZvcm1MYWJlbHMiLCJhbGxDb25maWdzIiwibGFiZWwiLCJsYWJlbElkZW50aWZpZXIiLCJsYWJlbFRleHQiLCJlbmRzV2l0aCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2hhcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IHR5cGUgeyBTaGFyZU1ldGFkYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgeyB0eXBlIE1hbmlmZXN0QWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNLZXlIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNLZXlIZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgV3JhcHBlZENhcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgQWRhcHRpdmVDYXJkR2VuZXJhdG9yIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY2FyZC9HZW5lcmF0b3JcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tQWN0aW9uQ29uZmlncyB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY2FyZC9hY3Rpb25zL0hlYWRlckFjdGlvbnNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q3VzdG9tRm9ybUVsZW1lbnRzQ29uZmlnLFxuXHRDdXN0b21IZWFkZXJGYWNldENvbmZpZ3MsXG5cdEhlYWRlckZhY2V0Q29uZmlnXG59IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY2FyZC9mYWNldHMvSGVhZGVyQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgU3Rhc2hhYmxlSEJveCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL2NvbnRyb2xzL1N0YXNoYWJsZUhCb3hcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgdHlwZSBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCB0eXBlIE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCB0eXBlIE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEhhc2hDaGFuZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL0hhc2hDaGFuZ2VyXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgeyBJQWRhcHRpdmVDYXJkIH0gZnJvbSBcInR5cGVzL2FkYXB0aXZlQ2FyZF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxFbnRpdHlTZXQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmNvbnN0IEZBQ0VUX0lERU5USUZJRVIgPSBcImZhY2V0SWRlbnRpZmllclwiO1xuY29uc3QgQURBUFRJVkVDQVJEID0gXCJhZGFwdGl2ZVwiO1xubGV0IGJHbG9iYWxJc1N0aWNreVN1cHBvcnRlZDogYm9vbGVhbjtcblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyVG9GZXRjaEFjdGl2ZUNvbnRleHQobUtleVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGJJc0FjdGl2ZUVudGl0eURlZmluZWQ6IGJvb2xlYW4pOiBGaWx0ZXIge1xuXHRjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKG1LZXlWYWx1ZXMpO1xuXG5cdGNvbnN0IGFGaWx0ZXJzID0gYUtleXNcblx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IHNWYWx1ZSA9IG1LZXlWYWx1ZXNbc0tleV07XG5cdFx0XHRyZXR1cm4gc1ZhbHVlICE9PSB1bmRlZmluZWQ7XG5cdFx0fSlcblx0XHQubWFwKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IHNWYWx1ZSA9IG1LZXlWYWx1ZXNbc0tleV07XG5cdFx0XHRyZXR1cm4gbmV3IEZpbHRlcihzS2V5LCBGaWx0ZXJPcGVyYXRvci5FUSwgc1ZhbHVlKTtcblx0XHR9KTtcblxuXHRpZiAoYklzQWN0aXZlRW50aXR5RGVmaW5lZCkge1xuXHRcdGNvbnN0IG9BY3RpdmVGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdGZpbHRlcnM6IFtuZXcgRmlsdGVyKFwiU2libGluZ0VudGl0eS9Jc0FjdGl2ZUVudGl0eVwiLCBGaWx0ZXJPcGVyYXRvci5FUSwgdHJ1ZSldLFxuXHRcdFx0YW5kOiBmYWxzZVxuXHRcdH0pO1xuXG5cdFx0YUZpbHRlcnMucHVzaChvQWN0aXZlRmlsdGVyKTtcblx0fVxuXG5cdHJldHVybiBuZXcgRmlsdGVyKGFGaWx0ZXJzLCB0cnVlKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldEFjdGl2ZUNvbnRleHRQYXRoKG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgc1BhZ2VFbnRpdHlOYW1lOiBzdHJpbmcsIG9GaWx0ZXI6IEZpbHRlcik6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IG9MaXN0QmluZGluZyA9IG9Db250cm9sbGVyXG5cdFx0LmdldFZpZXcoKVxuXHRcdC5nZXRCaW5kaW5nQ29udGV4dCgpXG5cdFx0LmdldE1vZGVsKClcblx0XHQuYmluZExpc3QoYC8ke3NQYWdlRW50aXR5TmFtZX1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb0ZpbHRlciwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCIgfSk7XG5cdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDIpLnRoZW4oZnVuY3Rpb24gKG9Db250ZXh0cykge1xuXHRcdGlmIChvQ29udGV4dHMgJiYgb0NvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIG9Db250ZXh0c1swXS5nZXRQYXRoKCk7XG5cdFx0fVxuXHRcdHJldHVybiBcIlwiO1xuXHR9KTtcbn1cbnR5cGUgUGFnZUluZm8gPSB7IHBhZ2VFbnRpdHlOYW1lPzogc3RyaW5nOyBtS2V5VmFsdWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGJJc0FjdGl2ZUVudGl0eURlZmluZWQ/OiBib29sZWFuIH07XG5mdW5jdGlvbiBnZXRBY3RpdmVDb250ZXh0SW5zdGFuY2VzKG9Db250ZXh0OiBDb250ZXh0LCBvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIG9FbnRpdHlTZXQ6IE1ldGFNb2RlbEVudGl0eVNldCk6IFByb21pc2U8c3RyaW5nPltdIHtcblx0Y29uc3QgYUFjdGl2ZUNvbnRleHRwcm9taXNlczogUHJvbWlzZTxzdHJpbmc+W10gPSBbXTtcblx0Y29uc3QgYVBhZ2VzOiBQYWdlSW5mb1tdID0gW107XG5cdGxldCBzTWV0YVBhdGggPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdGlmIChzTWV0YVBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRzTWV0YVBhdGggPSBzTWV0YVBhdGguc3Vic3RyaW5nKDEpO1xuXHR9XG5cdGNvbnN0IGFNZXRhUGF0aEFycmF5ID0gc01ldGFQYXRoLnNwbGl0KFwiL1wiKTtcblx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9QYXJhbXMgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKS5zcGxpdChcIj9cIilbMF07XG5cdGNvbnN0IGFDdXJyZW50SGFzaEFycmF5ID0gc0N1cnJlbnRIYXNoTm9QYXJhbXMuc3BsaXQoXCIvXCIpO1xuXG5cdC8vIG9QYWdlTWFwIC0gY3JlYXRpbmcgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgbWFwIG9mIG1ldGFwYXRoIG5hbWUgYW5kIGl0J3MgdGVjaG5pY2FsIGRldGFpbHNcblx0Ly8gd2hpY2ggaXMgcmVxdWlyZWQgdG8gY3JlYXRlIGEgZmlsdGVyIHRvIGZldGNoIHRoZSByZWxhdmFudC9jb3JyZWN0IGFjdGl2ZSBjb250ZXh0XG5cdC8vIEV4YW1wbGU6IHtTYWxlc09yZGVyTWFuYWdlOnt0ZWNobmljYWxJRDp0ZWNobmljYWxJRFZhbHVlfSwgX0l0ZW06e3RlY2huaWNhbElEOnRlY2huaWNhbElEVmFsdWV9fSBldGMuLFxuXHRjb25zdCBvUGFnZU1hcDogUmVjb3JkPHN0cmluZywgUGFnZUluZm8+ID0ge307XG5cdGNvbnN0IGFQYWdlSGFzaEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuXHRhQ3VycmVudEhhc2hBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChzUGFnZUhhc2g6IHN0cmluZykge1xuXHRcdGNvbnN0IGFLZXlWYWx1ZXMgPSBzUGFnZUhhc2guc3Vic3RyaW5nKHNQYWdlSGFzaC5pbmRleE9mKFwiKFwiKSArIDEsIHNQYWdlSGFzaC5sZW5ndGggLSAxKS5zcGxpdChcIixcIik7XG5cdFx0Y29uc3QgbUtleVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRjb25zdCBzUGFnZUhhc2hOYW1lID0gc1BhZ2VIYXNoLnNwbGl0KFwiKFwiKVswXTtcblx0XHRvUGFnZU1hcFtzUGFnZUhhc2hOYW1lXSA9IHt9O1xuXHRcdGFQYWdlSGFzaEFycmF5LnB1c2goc1BhZ2VIYXNoTmFtZSk7XG5cdFx0b1BhZ2VNYXBbc1BhZ2VIYXNoTmFtZV1bXCJiSXNBY3RpdmVFbnRpdHlEZWZpbmVkXCJdID0gTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChcblx0XHRcdG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRvQ29udGV4dC5nZXRQYXRoKClcblx0XHQpXG5cdFx0XHQ/IHRydWVcblx0XHRcdDogZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBzS2V5QXNzaWdubWVudCBvZiBhS2V5VmFsdWVzKSB7XG5cdFx0XHRjb25zdCBhUGFydHMgPSBzS2V5QXNzaWdubWVudC5zcGxpdChcIj1cIik7XG5cdFx0XHRsZXQgc0tleVZhbHVlID0gYVBhcnRzWzFdO1xuXHRcdFx0bGV0IHNLZXkgPSBhUGFydHNbMF07XG5cdFx0XHQvLyBJbiBjYXNlIGlmIG9ubHkgb25lIHRlY2huaWNhbCBrZXkgaXMgZGVmaW5lZCB0aGVuIHRoZSB1cmwganVzdCBjb250YWlucyB0aGUgdGVjaG5pY2FsSURWYWx1ZSBidXQgbm90IHRoZSB0ZWNobmljYWxJRFxuXHRcdFx0Ly8gRXhhbXBsZTogU2FsZXNPcmRlck1hbmFnZShJRD0xMTExMTEyOS1hYWFhLWJiYmItY2NjYy1kZGRkZWVlZWZmZmYsSXNBY3RpdmVFbnRpdHk9ZmFsc2UpL19JdGVtKDExMTExMTI5LWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcblx0XHRcdC8vIEluIGFib3ZlIGV4YW1wbGUgU2FsZXNPcmRlckl0ZW0gaGFzIG9ubHkgb25lIHRlY2huaWNhbCBrZXkgZGVmaW5lZCwgaGVuY2UgdGVjaG5pY2FsSUQgaW5mbyBpcyBub3QgcHJlc2VudCBpbiB0aGUgdXJsXG5cdFx0XHQvLyBIZW5jZSBpbiBzdWNoIGNhc2VzIHdlIGdldCB0ZWNobmljYWwga2V5IGFuZCB1c2UgdGhlbSB0byBmZXRjaCBhY3RpdmUgY29udGV4dFxuXHRcdFx0aWYgKCFzS2V5QXNzaWdubWVudC5pbmNsdWRlcyhcIj1cIikpIHtcblx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8ke2FQYWdlSGFzaEFycmF5LmpvaW4oXCIvXCIpfS8kVHlwZS8kS2V5YCk7XG5cdFx0XHRcdHNLZXlWYWx1ZSA9IGFQYXJ0c1swXTtcblx0XHRcdFx0c0tleSA9IGFUZWNobmljYWxLZXlzWzBdO1xuXHRcdFx0XHRvUGFnZU1hcFtzUGFnZUhhc2guc3BsaXQoXCIoXCIpWzBdXVtcImJJc0FjdGl2ZUVudGl0eURlZmluZWRcIl0gPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNLZXkgIT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRpZiAoc0tleVZhbHVlLmluZGV4T2YoXCInXCIpID09PSAwICYmIHNLZXlWYWx1ZS5sYXN0SW5kZXhPZihcIidcIikgPT09IHNLZXlWYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIHRoZSBxdW90ZXMgZnJvbSB0aGUgdmFsdWUgYW5kIGRlY29kZSBzcGVjaWFsIGNoYXJzXG5cdFx0XHRcdFx0c0tleVZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KHNLZXlWYWx1ZS5zdWJzdHJpbmcoMSwgc0tleVZhbHVlLmxlbmd0aCAtIDEpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtS2V5VmFsdWVzW3NLZXldID0gc0tleVZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRvUGFnZU1hcFtzUGFnZUhhc2hOYW1lXS5tS2V5VmFsdWVzID0gbUtleVZhbHVlcztcblx0fSk7XG5cblx0bGV0IG9QYWdlRW50aXR5U2V0ID0gb0VudGl0eVNldDtcblx0YU1ldGFQYXRoQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoc05hdmlnYXRpb25QYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBvUGFnZUluZm86IFBhZ2VJbmZvID0ge307XG5cdFx0Y29uc3Qgc1BhZ2VFbnRpdHlTZXROYW1lID0gb1BhZ2VFbnRpdHlTZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcgJiYgb1BhZ2VFbnRpdHlTZXQuJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdbc05hdmlnYXRpb25QYXRoXTtcblx0XHRpZiAoc1BhZ2VFbnRpdHlTZXROYW1lKSB7XG5cdFx0XHRvUGFnZUluZm8ucGFnZUVudGl0eU5hbWUgPSBvUGFnZUVudGl0eVNldC4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1tzTmF2aWdhdGlvblBhdGhdO1xuXHRcdFx0b1BhZ2VFbnRpdHlTZXQgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7c1BhZ2VFbnRpdHlTZXROYW1lfWApIHx8IG9FbnRpdHlTZXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9QYWdlSW5mby5wYWdlRW50aXR5TmFtZSA9IHNOYXZpZ2F0aW9uUGF0aDtcblx0XHR9XG5cdFx0b1BhZ2VJbmZvLm1LZXlWYWx1ZXMgPSBvUGFnZU1hcFtzTmF2aWdhdGlvblBhdGhdPy5tS2V5VmFsdWVzO1xuXHRcdG9QYWdlSW5mby5iSXNBY3RpdmVFbnRpdHlEZWZpbmVkID0gb1BhZ2VNYXBbc05hdmlnYXRpb25QYXRoXT8uYklzQWN0aXZlRW50aXR5RGVmaW5lZDtcblx0XHRhUGFnZXMucHVzaChvUGFnZUluZm8pO1xuXHR9KTtcblxuXHRhUGFnZXMuZm9yRWFjaChmdW5jdGlvbiAob1BhZ2VJbmZvOiBQYWdlSW5mbykge1xuXHRcdGNvbnN0IG9GaWx0ZXIgPSBjcmVhdGVGaWx0ZXJUb0ZldGNoQWN0aXZlQ29udGV4dChvUGFnZUluZm8ubUtleVZhbHVlcyEsICEhb1BhZ2VJbmZvLmJJc0FjdGl2ZUVudGl0eURlZmluZWQpO1xuXHRcdGFBY3RpdmVDb250ZXh0cHJvbWlzZXMucHVzaChnZXRBY3RpdmVDb250ZXh0UGF0aChvQ29udHJvbGxlciwgb1BhZ2VJbmZvLnBhZ2VFbnRpdHlOYW1lISwgb0ZpbHRlcikpO1xuXHR9KTtcblxuXHRyZXR1cm4gYUFjdGl2ZUNvbnRleHRwcm9taXNlcztcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZmV0Y2ggYWN0aXZlIGNvbnRleHQgcGF0aCdzLlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBQYWdlIENvbnRleHRcbiAqIEBwYXJhbSBvQ29udHJvbGxlclxuICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBhY3RpdmUgY29udGV4dCdzIGFyZSBmZXRjaGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEFjdGl2ZUNvbnRleHRQYXRocyhvQ29udGV4dDogQ29udGV4dCwgb0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuXHRjb25zdCBzQ3VycmVudEhhc2hOb1BhcmFtcyA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpLnNwbGl0KFwiP1wiKVswXTtcblx0bGV0IHNSb290RW50aXR5TmFtZSA9IHNDdXJyZW50SGFzaE5vUGFyYW1zICYmIHNDdXJyZW50SGFzaE5vUGFyYW1zLnN1YnN0cmluZygwLCBzQ3VycmVudEhhc2hOb1BhcmFtcy5pbmRleE9mKFwiKFwiKSk7XG5cdGlmIChzUm9vdEVudGl0eU5hbWUuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRzUm9vdEVudGl0eU5hbWUgPSBzUm9vdEVudGl0eU5hbWUuc3Vic3RyaW5nKDEpO1xuXHR9XG5cdGNvbnN0IG9FbnRpdHlTZXQgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7c1Jvb3RFbnRpdHlOYW1lfWApO1xuXHRjb25zdCBvUGFnZUNvbnRleHQgPSBvQ29udGV4dDtcblx0Y29uc3QgYUFjdGl2ZUNvbnRleHRwcm9taXNlcyA9IGdldEFjdGl2ZUNvbnRleHRJbnN0YW5jZXMob0NvbnRleHQsIG9Db250cm9sbGVyLCBvRW50aXR5U2V0KTtcblx0aWYgKGFBY3RpdmVDb250ZXh0cHJvbWlzZXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhQWN0aXZlQ29udGV4dHByb21pc2VzKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFEYXRhOiBzdHJpbmdbXSkge1xuXHRcdFx0XHRjb25zdCBhQWN0aXZlQ29udGV4dFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0XHRsZXQgb1BhZ2VFbnRpdHlTZXQgPSBvRW50aXR5U2V0O1xuXHRcdFx0XHRpZiAoYURhdGFbMF0/LmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHRcdFx0YUFjdGl2ZUNvbnRleHRQYXRocy5wdXNoKGFEYXRhWzBdLnN1YnN0cmluZygxKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUFjdGl2ZUNvbnRleHRQYXRocy5wdXNoKGFEYXRhWzBdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBJbiB0aGUgYWN0aXZlIGNvbnRleHQgcGF0aHMgaWRlbnRpZnkgYW5kIHJlcGxhY2UgdGhlIGVudGl0eVNldCBOYW1lIHdpdGggY29ycmVzcG9uZGluZyBuYXZpZ2F0aW9uIHByb3BlcnR5IG5hbWVcblx0XHRcdFx0Ly8gUmVxdWlyZWQgdG8gZm9ybSB0aGUgdXJsIHBvaW50aW5nIHRvIGFjdGl2ZSBjb250ZXh0XG5cdFx0XHRcdC8vIEV4YW1wbGUgOiBTYWxlc09yZGVySXRlbSAtLT4gX0l0ZW0sIE1hdGVyaWFsRGV0YWlscyAtLT4gX01hdGVyaWFsRGV0YWlscyBldGMuLFxuXHRcdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IGFEYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0bGV0IHNBY3RpdmVDb250ZXh0UGF0aCA9IGFEYXRhW2ldO1xuXHRcdFx0XHRcdGxldCBzTmF2aWdhdGlvUHJvcGVydHkgPSBcIlwiO1xuXHRcdFx0XHRcdGxldCBzRW50aXR5U2V0TmFtZSA9IHNBY3RpdmVDb250ZXh0UGF0aCAmJiBzQWN0aXZlQ29udGV4dFBhdGguc3Vic3RyaW5nKDAsIHNBY3RpdmVDb250ZXh0UGF0aC5pbmRleE9mKFwiKFwiKSk7XG5cdFx0XHRcdFx0aWYgKHNFbnRpdHlTZXROYW1lPy5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0XHRcdFx0c0VudGl0eVNldE5hbWUgPSBzRW50aXR5U2V0TmFtZS5zdWJzdHJpbmcoMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChzQWN0aXZlQ29udGV4dFBhdGg/LmluZGV4T2YoXCIvXCIpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRzQWN0aXZlQ29udGV4dFBhdGggPSBzQWN0aXZlQ29udGV4dFBhdGguc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzTmF2aWdhdGlvUHJvcGVydHkgPSBPYmplY3Qua2V5cyhvUGFnZUVudGl0eVNldC4kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZylbXG5cdFx0XHRcdFx0XHRPYmplY3QudmFsdWVzKG9QYWdlRW50aXR5U2V0LiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKS5pbmRleE9mKHNFbnRpdHlTZXROYW1lKVxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0aWYgKHNOYXZpZ2F0aW9Qcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0YUFjdGl2ZUNvbnRleHRQYXRocy5wdXNoKHNBY3RpdmVDb250ZXh0UGF0aD8ucmVwbGFjZShzRW50aXR5U2V0TmFtZSwgc05hdmlnYXRpb1Byb3BlcnR5KSk7XG5cdFx0XHRcdFx0XHRvUGFnZUVudGl0eVNldCA9IG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLmdldE9iamVjdChgLyR7c0VudGl0eVNldE5hbWV9YCkgfHwgb0VudGl0eVNldDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YUFjdGl2ZUNvbnRleHRQYXRocy5wdXNoKHNBY3RpdmVDb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBhQWN0aXZlQ29udGV4dFBhdGhzO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5pbmZvKFwiRmFpbGVkIHRvIHJldHJpZXZlIG9uZSBvciBtb3JlIGFjdGl2ZSBjb250ZXh0IHBhdGgnc1wiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQWN0aXZlQ29udGV4dFBhdGhzKG9Db250ZXh0OiBDb250ZXh0LCBvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG5cdGxldCBvUHJvbWlzZSwgYVNlbWFudGljS2V5cztcblx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9QYXJhbXMgPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKS5zcGxpdChcIj9cIilbMF07XG5cdGlmIChvQ29udGV4dCkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRiR2xvYmFsSXNTdGlja3lTdXBwb3J0ZWQgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob01ldGFNb2RlbCk7XG5cdFx0bGV0IHNSb290RW50aXR5TmFtZSA9IHNDdXJyZW50SGFzaE5vUGFyYW1zICYmIHNDdXJyZW50SGFzaE5vUGFyYW1zLnN1YnN0cmluZygwLCBzQ3VycmVudEhhc2hOb1BhcmFtcy5pbmRleE9mKFwiKFwiKSk7XG5cdFx0aWYgKHNSb290RW50aXR5TmFtZS5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdFx0c1Jvb3RFbnRpdHlOYW1lID0gc1Jvb3RFbnRpdHlOYW1lLnN1YnN0cmluZygxKTtcblx0XHR9XG5cdFx0YVNlbWFudGljS2V5cyA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljS2V5cyhvTWV0YU1vZGVsLCBzUm9vdEVudGl0eU5hbWUpO1xuXHR9XG5cdC8vIEZldGNoIGFjdGl2ZSBjb250ZXh0IGRldGFpbHMgaW5jYXNlIG9mIGJlbG93IHNjZW5hcmlvJ3Mod2hlcmUgcGFnZSBpcyBub3Qgc3RpY2t5IHN1cHBvcnRlZCh3ZSBkbyBub3QgaGF2ZSBkcmFmdCBpbnN0YW5jZSkpXG5cdC8vIDEuIEluIGNhc2Ugb2YgZHJhZnQgZW5hYmxlZCBPYmplY3QgcGFnZSB3aGVyZSBzZW1hbnRpYyBrZXkgYmFzZWQgVVJMIGlzIG5vdCBwb3NzaWJsZShsaWtlIHNlbWFudGljIGtleXMgYXJlIG5vdCBtb2RlbGVkIGluIHRoZSBlbnRpdHkgc2V0KVxuXHQvLyAyLiBJbiBjYXNlIG9mIGRyYWZ0IGVuYWJsZWQgU3ViIE9iamVjdCBQYWdlcyAod2hlcmUgc2VtYW50aWMgYm9va21hcmtpbmcgaXMgbm90IHN1cHBvcnRlZClcblx0Y29uc3Qgb1ZpZXdEYXRhID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCk7XG5cdGlmIChvQ29udGV4dCAmJiAhYkdsb2JhbElzU3RpY2t5U3VwcG9ydGVkICYmICgob1ZpZXdEYXRhLnZpZXdMZXZlbCA9PT0gMSAmJiAhYVNlbWFudGljS2V5cykgfHwgb1ZpZXdEYXRhLnZpZXdMZXZlbCA+PSAyKSkge1xuXHRcdG9Qcm9taXNlID0gZ2V0QWN0aXZlQ29udGV4dFBhdGhzKG9Db250ZXh0LCBvQ29udHJvbGxlcik7XG5cdFx0cmV0dXJuIG9Qcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG59XG5cbi8vIC8qKlxuLy8gICogR2V0IHNoYXJlIFVSTC5cbi8vICAqIEBwYXJhbSBiSXNFZGl0YWJsZVxuLy8gICogQHBhcmFtIGJJc1N0aWNreVN1cHBvcnRlZFxuLy8gICogQHBhcmFtIGFBY3RpdmVDb250ZXh0UGF0aHNcbi8vICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzaGFyZSBVUkxcbi8vICAqIEBwcm90ZWN0ZWRcbi8vICAqIEBzdGF0aWNcbi8vICAqL1xuZnVuY3Rpb24gZ2V0U2hhcmVVcmwoYklzRWRpdGFibGU6IGJvb2xlYW4sIGJJc1N0aWNreVN1cHBvcnRlZDogYm9vbGVhbiwgYUFjdGl2ZUNvbnRleHRQYXRoczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRsZXQgc1NoYXJlVXJsO1xuXHRjb25zdCBzSGFzaCA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpO1xuXHRjb25zdCBzQmFzZVBhdGggPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2ggPyBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2ghKFwiXCIpIDogXCJcIjtcblx0aWYgKGJJc0VkaXRhYmxlICYmICFiSXNTdGlja3lTdXBwb3J0ZWQgJiYgYUFjdGl2ZUNvbnRleHRQYXRocykge1xuXHRcdHNTaGFyZVVybCA9IHNCYXNlUGF0aCArIGFBY3RpdmVDb250ZXh0UGF0aHMuam9pbihcIi9cIik7XG5cdH0gZWxzZSB7XG5cdFx0c1NoYXJlVXJsID0gc0hhc2ggPyBzQmFzZVBhdGggKyBzSGFzaCA6IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHR9XG5cdHJldHVybiB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCArIHNTaGFyZVVybDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldFNoYXJlRW1haWxVcmwoKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3Qgb1VTaGVsbENvbnRhaW5lciA9IHNhcC51aS5yZXF1aXJlKFwic2FwL3VzaGVsbC9Db250YWluZXJcIik7XG5cdGlmIChvVVNoZWxsQ29udGFpbmVyKSB7XG5cdFx0cmV0dXJuIG9VU2hlbGxDb250YWluZXJcblx0XHRcdC5nZXRGTFBVcmxBc3luYyh0cnVlKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKHNGTFBVcmw6IHN0cmluZykge1xuXHRcdFx0XHRyZXR1cm4gc0ZMUFVybDtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKHNFcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDb3VsZCBub3QgcmV0cmlldmUgY0ZMUCBVUkwgZm9yIHRoZSBzaGFyaW5nIGRpYWxvZyAoZGlhbG9nIHdpbGwgbm90IGJlIG9wZW5lZClcIiwgc0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRvY3VtZW50LlVSTCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0SmFtVXJsKGJJc0VkaXRNb2RlOiBib29sZWFuLCBiSXNTdGlja3lTdXBwb3J0ZWQ6IGJvb2xlYW4sIGFBY3RpdmVDb250ZXh0UGF0aHM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmc+IHwgdW5kZWZpbmVkIHtcblx0bGV0IHNKYW1Vcmw6IHN0cmluZztcblx0Y29uc3Qgc0hhc2ggPSBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKTtcblx0Y29uc3Qgc0Jhc2VQYXRoID0gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoID8gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoIShcIlwiKSA6IFwiXCI7XG5cdGlmIChiSXNFZGl0TW9kZSAmJiAhYklzU3RpY2t5U3VwcG9ydGVkICYmIGFBY3RpdmVDb250ZXh0UGF0aHMpIHtcblx0XHRzSmFtVXJsID0gc0Jhc2VQYXRoICsgYUFjdGl2ZUNvbnRleHRQYXRocy5qb2luKFwiL1wiKTtcblx0fSBlbHNlIHtcblx0XHRzSmFtVXJsID0gc0hhc2ggPyBzQmFzZVBhdGggKyBzSGFzaCA6IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHR9XG5cdC8vIGluIGNhc2Ugd2UgYXJlIGluIGNGTFAgc2NlbmFyaW8sIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nXG5cdC8vIGluc2lkZSBhbiBpZnJhbWUsIGFuZCB0aGVyZSBmb3Igd2UgbmVlZCB0byBnZXQgdGhlIGNGTFAgVVJMXG5cdC8vIGFuZCBub3QgJ2RvY3VtZW50LlVSTCcgdGhhdCByZXByZXNlbnRzIHRoZSBpZnJhbWUgVVJMXG5cdGNvbnN0IHVzaGVsbENvbnRhaW5lciA9IHNhcC51aS5yZXF1aXJlKFwic2FwL3VzaGVsbC9Db250YWluZXJcIik7XG5cdGlmICh1c2hlbGxDb250YWluZXIgJiYgdXNoZWxsQ29udGFpbmVyLnJ1bm5pbmdJbklmcmFtZSAmJiB1c2hlbGxDb250YWluZXIucnVubmluZ0luSWZyYW1lKCkpIHtcblx0XHR1c2hlbGxDb250YWluZXJcblx0XHRcdC5nZXRGTFBVcmwodHJ1ZSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIHNVcmwuc3Vic3RyaW5nKDAsIHNVcmwuaW5kZXhPZihcIiNcIikpICsgc0phbVVybDtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKHNFcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDb3VsZCBub3QgcmV0cmlldmUgY0ZMUCBVUkwgZm9yIHRoZSBzaGFyaW5nIGRpYWxvZyAoZGlhbG9nIHdpbGwgbm90IGJlIG9wZW5lZClcIiwgc0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyBzSmFtVXJsKTtcblx0fVxufVxuXG4vKipcbiAqIEdldCBxdWVyeSB1cmwgZm9ybWVkIGJ5IGNvbnRleHQgYW5kIHBhdGhzIHRvIHJlcXVlc3QuXG4gKiBAcGFyYW0gY29udGV4dCBCaW5kaW5nIGNvbnRleHQgb2YgdGhlIHZpZXdcbiAqIEBwYXJhbSBwYXRoc1RvUXVlcnkgUGF0aHMgdG8gcmVxdWVzdC4gQWRkIHRvICRzZWxlY3QgYW5kICRleHBhbmQgcXVlcnkgb2YgdGhlIGRhdGEgVVJMLlxuICogQHJldHVybnMgUXVlcnkgVVJMIGZvciBkYXRhIHRvIGJlIHNob3duIGluIHRoZSBjYXJkLlxuICovXG5mdW5jdGlvbiBnZXRRdWVyeVVybEZvckNhcmREZWZpbml0aW9uKGNvbnRleHQ6IENvbnRleHQsIHBhdGhzVG9RdWVyeTogc3RyaW5nW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHQvLyBOT1RFOiBCZWxvdyBhcHByb2FjaCB1c2VzIHByaXZhdGUgaW1wbGVtZW50YXRpb25zIGZyb20gVUk1IFY0IG1vZGVsIGFuZCByZXF1ZXN0b3IuXG5cdC8vIFRoaXMgd291bGQgbmVlZCB0byBjaGFuZ2Ugb25jZSB3ZSBnZXQgYSBwdWJsaWMgQVBJIHRvIHN1cHBvcnQgdGhpcyByZXF1aXJlbWVudCBmcm9tIFVJNSBWNCBtb2RlbCAoSklSQTogRklPUklURUNIUDEtMjg3NTYpLlxuXHRjb25zdCBEVU1NWV9HUk9VUF9JRCA9IFwiX2ZlX21zX3RlYW1zXCI7XG5cdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpO1xuXHRjb25zdCByZXF1ZXN0b3IgPSBjb250ZXh0LmdldE1vZGVsKCkub1JlcXVlc3Rvcjtcblx0Y29uc3Qgc2VsZWN0T3B0aW9ucyA9IHBhdGhzVG9RdWVyeS5tYXAoKHBhdGgpID0+IHBhdGgucmVwbGFjZShcIi5cIiwgXCIvXCIpKTtcblx0Y29udGV4dC5yZXF1ZXN0U2lkZUVmZmVjdHMoc2VsZWN0T3B0aW9ucywgRFVNTVlfR1JPVVBfSUQpO1xuXHQvLyBGb3IgdGhpcyBzY2VuYXJpbywgMXN0IHJlcXVlc3QgaW4gdGhlIGJhdGNoIGlzIGFsd2F5cyBlbXB0eSBhY2NvcmRpbmcgdG8gbW9kZWwuXG5cdGNvbnN0IHJlcXVlc3RzID0gcmVxdWVzdG9yLm1CYXRjaFF1ZXVlPy5bRFVNTVlfR1JPVVBfSURdPy5zcGxpY2UoMSk7XG5cblx0Ly8gQmF0Y2ggcXVldWUgY29udGFpbnMgc2VwYXJhdGUgcmVxdWVzdHMgZnJvbSBjb250cm9sIGJpbmRpbmdzIHdpdGggZGlmZmVyZW50IGdyb3VwSWRzLlxuXHQvLyBXZSBuZWVkIHRvIG1lcmdlIHRoZSBhbGwgdGhlIHJlcXVlc3RzIGFzIHdlIG5lZWQgYSBzaW5nbGUgZGF0YSB1cmwuXG5cdGlmIChyZXF1ZXN0cyAmJiByZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG5cdFx0Ly8gVXJsIGZvciByZXF1ZXN0IGNhbiBiZSBkaWZmZXJlbnQgYmFzZWQgb24gJHNlbGVjdC8kZXhwYW5kIHBhcmFtZXRlcnMuXG5cdFx0Y29uc3QgbG9uZ1VybCA9IHJlcXVlc3RzLnJlZHVjZSgodXJsLCByZXEpID0+IChyZXEudXJsLmxlbmd0aCA+IHVybC5sZW5ndGggPyByZXEudXJsIDogdXJsKSwgXCJcIik7XG5cdFx0cmVxdWVzdHMuZm9yRWFjaCgocmVxKSA9PiB7XG5cdFx0XHRkZWxldGUgcmVxLiRvd25lcjtcblx0XHRcdHJlcS51cmwgPSBsb25nVXJsO1xuXHRcdH0pO1xuXHRcdGNvbnN0IG1lcmdlZFJlcSA9IHJlcXVlc3Rvci5tZXJnZUdldFJlcXVlc3RzKHJlcXVlc3RzKVswXTtcblx0XHRjb25zdCBhYnNvbHV0ZVNlcnZpY2VVUkwgPSBnZXRBYnNvbHV0ZVVSTChtb2RlbC5nZXRTZXJ2aWNlVXJsKCkpO1xuXHRcdGRlbGV0ZSByZXF1ZXN0b3IubUJhdGNoUXVldWVbRFVNTVlfR1JPVVBfSURdO1xuXHRcdHJldHVybiBgJHthYnNvbHV0ZVNlcnZpY2VVUkx9JHttZXJnZWRSZXEudXJsfWA7XG5cdH1cbn1cblxuLyoqXG4gKiBHZXQgYWN0aW9uIGNvbnRyb2xzIGZyb20gb2JqZWN0IHBhZ2UgbGF5b3V0LlxuICogQHBhcmFtIG9wTGF5b3V0IE9iamVjdFBhZ2VMYXlvdXQgY29udHJvbC5cbiAqIEByZXR1cm5zIEFjdGlvbiBidXR0b25zIGFuZCBtZW51IGl0ZW1zIHByZXNlbnQgaW4gT1AgaGVhZGVyLlxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb25Db250cm9scyhvcExheW91dDogT2JqZWN0UGFnZUxheW91dCk6IChCdXR0b24gfCBNZW51SXRlbSlbXSB7XG5cdGNvbnN0IGhlYWRlclRpdGxlID0gb3BMYXlvdXQuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zSW5VSSA9IGhlYWRlclRpdGxlLmdldEFjdGlvbnMoKTtcblx0cmV0dXJuIGhlYWRlckFjdGlvbnNJblVJLnJlZHVjZShcblx0XHQoY29udHJvbHMsIGFjdGlvbkluVUkpOiAoQnV0dG9uIHwgTWVudUl0ZW0pW10gPT4ge1xuXHRcdFx0aWYgKGFjdGlvbkluVUk/LmlzQT8uPEJ1dHRvbj4oXCJzYXAubS5CdXR0b25cIikpIHtcblx0XHRcdFx0Y29udHJvbHMucHVzaChhY3Rpb25JblVJKTtcblx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uSW5VST8uaXNBPy48TWVudUJ1dHRvbj4oXCJzYXAubS5NZW51QnV0dG9uXCIpKSB7XG5cdFx0XHRcdGNvbnN0IG1lbnUgPSBhY3Rpb25JblVJLmdldE1lbnUoKTtcblx0XHRcdFx0Y29uc3QgbWVudUl0ZW1zID0gbWVudS5nZXRJdGVtcygpO1xuXHRcdFx0XHRjb250cm9scyA9IFsuLi5jb250cm9scywgLi4ubWVudUl0ZW1zXTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb250cm9scztcblx0XHR9LFxuXHRcdFtdIGFzIChCdXR0b24gfCBNZW51SXRlbSlbXVxuXHQpO1xufVxuXG4vKipcbiAqIEdldCBhYnNvbHV0ZSBzZXJ2aWNlIHVybC5cbiAqIEBwYXJhbSBzZXJ2aWNlVVJMIFNlcnZpY2UgVVJMXG4gKiBAcmV0dXJucyBBYnNvbHV0ZSBzZXJ2aWNlIFVSTC5cbiAqL1xuZnVuY3Rpb24gZ2V0QWJzb2x1dGVVUkwoc2VydmljZVVSTDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiXig/OlthLXpdKzopPy8vXCIsIFwiaVwiKTtcblx0aWYgKHJlZ2V4LnRlc3Qoc2VydmljZVVSTCkpIHtcblx0XHRyZXR1cm4gc2VydmljZVVSTDtcblx0fVxuXHRyZXR1cm4gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0ke3NlcnZpY2VVUkx9YDtcbn1cblxuY29uc3QgU2hhcmVFeHRlbnNpb25PdmVycmlkZSA9IHtcblx0YWRhcHRTaGFyZU1ldGFkYXRhOiBhc3luYyBmdW5jdGlvbiAodGhpczogU2hhcmUsIG9TaGFyZU1ldGFkYXRhOiBTaGFyZU1ldGFkYXRhKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgYklzRWRpdGFibGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuYmFzZS5nZXRWaWV3KCkpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG1hbmlmZXN0ID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldE1hbmlmZXN0KCk7XG5cdFx0XHRjb25zdCBhcHBJZCA9IG1hbmlmZXN0Py5bXCJzYXAuYXBwXCJdPy5pZDtcblx0XHRcdGNvbnN0IGFwcFRpdGxlID0gbWFuaWZlc3Q/LltcInNhcC5hcHBcIl0/LnRpdGxlO1xuXHRcdFx0Y29uc3QgYUFjdGl2ZUNvbnRleHRQYXRocyA9IGF3YWl0IGZldGNoQWN0aXZlQ29udGV4dFBhdGhzKG9Db250ZXh0LCB0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSk7XG5cdFx0XHRjb25zdCBvUGFnZVRpdGxlSW5mbyA9IGF3YWl0ICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCk7XG5cdFx0XHRjb25zdCBvRGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0Z2V0SmFtVXJsKGJJc0VkaXRhYmxlLCBiR2xvYmFsSXNTdGlja3lTdXBwb3J0ZWQsIGFBY3RpdmVDb250ZXh0UGF0aHMpLFxuXHRcdFx0XHRnZXRTaGFyZVVybChiSXNFZGl0YWJsZSwgYkdsb2JhbElzU3RpY2t5U3VwcG9ydGVkLCBhQWN0aXZlQ29udGV4dFBhdGhzKSxcblx0XHRcdFx0Z2V0U2hhcmVFbWFpbFVybCgpXG5cdFx0XHRdKTtcblxuXHRcdFx0bGV0IHNUaXRsZSA9IG9QYWdlVGl0bGVJbmZvLnRpdGxlO1xuXHRcdFx0Y29uc3Qgc09iamVjdFN1YnRpdGxlID0gb1BhZ2VUaXRsZUluZm8uc3VidGl0bGUgPyBvUGFnZVRpdGxlSW5mby5zdWJ0aXRsZS50b1N0cmluZygpIDogXCJcIjtcblx0XHRcdGlmIChzT2JqZWN0U3VidGl0bGUpIHtcblx0XHRcdFx0c1RpdGxlID0gYCR7c1RpdGxlfSAtICR7c09iamVjdFN1YnRpdGxlfWA7XG5cdFx0XHR9XG5cdFx0XHRvU2hhcmVNZXRhZGF0YS50aWxlID0ge1xuXHRcdFx0XHR0aXRsZTogb1BhZ2VUaXRsZUluZm8udGl0bGUsXG5cdFx0XHRcdHN1YnRpdGxlOiBzT2JqZWN0U3VidGl0bGVcblx0XHRcdH07XG5cdFx0XHRvU2hhcmVNZXRhZGF0YS5lbWFpbC50aXRsZSA9IHNUaXRsZTtcblx0XHRcdG9TaGFyZU1ldGFkYXRhLnRpdGxlID0gc1RpdGxlO1xuXHRcdFx0b1NoYXJlTWV0YWRhdGEuamFtLnVybCA9IG9EYXRhWzBdO1xuXHRcdFx0b1NoYXJlTWV0YWRhdGEudXJsID0gb0RhdGFbMV07XG5cdFx0XHRvU2hhcmVNZXRhZGF0YS5lbWFpbC51cmwgPSBvRGF0YVsyXTtcblx0XHRcdC8vIE1TIFRlYW1zIGNvbGxhYm9yYXRpb24gZG9lcyBub3Qgd2FudCB0byBhbGxvdyBmdXJ0aGVyIGNoYW5nZXMgdG8gdGhlIFVSTFxuXHRcdFx0Ly8gc28gdXBkYXRlIGNvbGxvYm9yYXRpb25JbmZvIG1vZGVsIGF0IExSIG92ZXJyaWRlIHRvIGlnbm9yZSBmdXJ0aGVyIGV4dGVuc2lvbiBjaGFuZ2VzIGF0IG11bHRpcGxlIGxldmVsc1xuXHRcdFx0Y29uc3Qgc2hhcmVJbmZvTW9kZWwgPSB0aGlzLmJhc2U/LmdldFZpZXcoKT8uZ2V0TW9kZWwoXCJzaGFyZUluZm9cIikgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgdGVhbXNVcmwgPSBhd2FpdCB0aGlzLmdldFRlYW1zVXJsKG9TaGFyZU1ldGFkYXRhLnVybCk7XG5cdFx0XHRpZiAoc2hhcmVJbmZvTW9kZWwpIHtcblx0XHRcdFx0c2hhcmVJbmZvTW9kZWwuc2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGlvbkluZm8vdXJsXCIsIHRlYW1zVXJsKTtcblx0XHRcdFx0c2hhcmVJbmZvTW9kZWwuc2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGlvbkluZm8vYXBwVGl0bGVcIiwgYXBwVGl0bGUpO1xuXHRcdFx0XHRzaGFyZUluZm9Nb2RlbC5zZXRQcm9wZXJ0eShcIi9jb2xsYWJvcmF0aW9uSW5mby9zdWJUaXRsZVwiLCBzT2JqZWN0U3VidGl0bGUpO1xuXHRcdFx0XHRzaGFyZUluZm9Nb2RlbC5zZXRQcm9wZXJ0eShcIi9jb2xsYWJvcmF0aW9uSW5mby9hcHBJZFwiLCBhcHBJZCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvU2hhcmVNZXRhZGF0YTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IGFkYXB0aXZlIGNhcmQgZGVmaW5pdGlvbiBmb3Igb2JqZWN0IHBhZ2UgdG8gIHNoYXJlIHZpYSBNUyB0ZWFtcyBjb2xsYWJvcmF0aW9uLlxuXHQgKiBAcmV0dXJucyBBZGFwdGl2ZSBjYXJkIGRlZmluaXRpb24uXG5cdCAqL1xuXHRnZXRDYXJkRGVmaW5pdGlvbjogYXN5bmMgZnVuY3Rpb24gKHRoaXM6IFNoYXJlKTogUHJvbWlzZTxJQWRhcHRpdmVDYXJkIHwgdW5kZWZpbmVkIHwgV3JhcHBlZENhcmQ+IHtcblx0XHRsZXQgY2FyZERlZmluaXRpb246IElBZGFwdGl2ZUNhcmQgfCB1bmRlZmluZWQgfCBXcmFwcGVkQ2FyZDtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBtb2RlbCA9IGJpbmRpbmdDb250ZXh0Py5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWw/LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IG9wQ29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IG9wQ29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRjYXJkRGVmaW5pdGlvbiA9IChhd2FpdCBhcHBDb21wb25lbnQuZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCkuZ2V0RGVzaWduVGltZUNhcmQoQURBUFRJVkVDQVJEKSkgYXMgV3JhcHBlZENhcmQ7XG5cdFx0aWYgKCFjYXJkRGVmaW5pdGlvbiAmJiBtb2RlbCAmJiBtZXRhTW9kZWwgJiYgYmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IHNlcnZpY2VVUkkgPSBnZXRBYnNvbHV0ZVVSTChtb2RlbC5nZXRTZXJ2aWNlVXJsKCkpO1xuXHRcdFx0Y29uc3QgY29udmV0ZXJkVHlwZXMgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0UGF0aCA9IGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IHdlYlVybCA9IGAke3NlcnZpY2VVUkl9JHtiaW5kaW5nQ29udGV4dFBhdGguc3Vic3RyaW5nKDEpfWA7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGAke21ldGFNb2RlbC5nZXRNZXRhUGF0aChiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpfS9gO1xuXHRcdFx0Y29uc3Qgc2hlbGxTZXJ2aWNlSGVscGVyID0gb3BDb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRcdGNvbnN0IGNvbnRleHRJbmZvID0ge1xuXHRcdFx0XHRjb250ZXh0UGF0aCxcblx0XHRcdFx0YmluZGluZ0NvbnRleHRQYXRoXG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBwYXNzIGZhY2V0IGFzIHBhcnQgb2YgY2FyZENvbmZpZ1xuXHRcdFx0Y29uc3QgY2FyZENvbmZpZyA9IHtcblx0XHRcdFx0aGVhZGVyRmFjZXRzOiBTaGFyZUV4dGVuc2lvbk92ZXJyaWRlLmdldEhlYWRlckZhY2V0c0NvbmZpZyhvcENvbnRyb2xsZXIpLFxuXHRcdFx0XHRhY3Rpb25zOiBTaGFyZUV4dGVuc2lvbk92ZXJyaWRlLmdldEFjdGlvbnNDb25maWcob3BDb250cm9sbGVyKSxcblx0XHRcdFx0d2ViVXJsLFxuXHRcdFx0XHRzZXJ2aWNlVVJJLFxuXHRcdFx0XHRvYmplY3RUaXRsZTogYXdhaXQgc2hlbGxTZXJ2aWNlSGVscGVyLmdldFRpdGxlKCksXG5cdFx0XHRcdGFwcFVybDogdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbChcInNoYXJlSW5mb1wiKT8uZ2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGlvbkluZm8vdXJsXCIpLFxuXHRcdFx0XHRjb250ZXh0SW5mb1xuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGNhcmRHZW5lcmF0b3IgPSBuZXcgQWRhcHRpdmVDYXJkR2VuZXJhdG9yKGNvbnZldGVyZFR5cGVzLCBjYXJkQ29uZmlnKTtcblx0XHRcdGNvbnN0IHBhdGhzVG9RdWVyeSA9IGNhcmRHZW5lcmF0b3IuZ2V0UGF0aHNUb1F1ZXJ5KCk7XG5cdFx0XHQvLyBUT0RPOlxuXHRcdFx0Ly8gJ2dldFF1ZXJ5VXJsRm9yQ2FyZERlZmluaXRpb24nIHVzZXMgYSBwcml2YXRlIGltcGxlbWVudGF0aW9uIGZyb20gVjQgbW9kZWwgdG8gY3JlYXRlIHF1ZXJ5IHVybC5cblx0XHRcdC8vIFRoaXMgd29ya2Fyb3VuZCB3YXMgZGlzY3Vzc2VkIHdpdGggVjQgbW9kZWwgZm9yIHRlbXBvcmFyeSB1c2UuXG5cdFx0XHQvLyBXZSB3b3VsZCBuZWVkIHRvIHJldmVydCB0aGlzIG9uY2Ugd2UgaGF2ZSBhbiBBUEkgb3IgYmV0dGVyIGFwcHJvYWNoIGZyb20gVjQgbW9kZWwuKEpJUkE6IEZJT1JJVEVDSFAxLTI4NzU2KVxuXHRcdFx0Y29uc3QgcXVlcnlVcmwgPSBnZXRRdWVyeVVybEZvckNhcmREZWZpbml0aW9uKGJpbmRpbmdDb250ZXh0LCBwYXRoc1RvUXVlcnkpO1xuXHRcdFx0Y2FyZERlZmluaXRpb24gPSBjYXJkR2VuZXJhdG9yLmdldENhcmREZWZpbml0aW9uKHF1ZXJ5VXJsKTtcblx0XHR9IGVsc2UgaWYgKCFjYXJkRGVmaW5pdGlvbikge1xuXHRcdFx0TG9nLmVycm9yKFwiRkUgVjQgOiBTaGFyZSBPYmplY3QgUGFnZSBjb250cm9sbGVyIGV4dGVuc2lvbiA6IENhcmQgd2FzIG5vdCBjcmVhdGVkXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2FyZERlZmluaXRpb247XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBhY3Rpb24gY29uZmlncyBmb3IgY2FyZCBjcmVhdGlvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgVmlldyBjb250cm9sbGVyLlxuXHQgKiBAcmV0dXJucyBBY3Rpb24gY29uZmlnc1xuXHQgKi9cblx0Z2V0QWN0aW9uc0NvbmZpZzogZnVuY3Rpb24gKGNvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogQ3VzdG9tQWN0aW9uQ29uZmlncyB7XG5cdFx0Ly8gZmV0Y2ggdGhlIGluZm9ybWF0aW9uIGFib3V0IFVJIGZyb20gb2JqZWN0IHBhZ2UgbGF5b3V0XG5cdFx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zQ29uZmlnID0gY29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5jb250ZW50Py5oZWFkZXI/LmFjdGlvbnMgfHwge307XG5cdFx0Y29uc3Qgb3BMYXlvdXQgPSBjb250cm9sbGVyLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFjdGlvbkNvbnRyb2xzSW5VSSA9IGdldEFjdGlvbkNvbnRyb2xzKG9wTGF5b3V0KTtcblx0XHRjb25zdCBhY3Rpb25Db25maWcgPSBhY3Rpb25Db250cm9sc0luVUkucmVkdWNlKChjb25maWcsIGFjdGlvbkNvbnRyb2wpID0+IHtcblx0XHRcdGNvbnN0IGNvbmZpZ0tleSA9IGFjdGlvbkNvbnRyb2wuZGF0YShcImFubm90YXRlZEFjdGlvbklkZW50aWZpZXJcIik7XG5cdFx0XHRpZiAoY29uZmlnS2V5KSB7XG5cdFx0XHRcdGNvbmZpZ1tjb25maWdLZXldID0ge1xuXHRcdFx0XHRcdHRpdGxlOiBhY3Rpb25Db250cm9sLmdldFRleHQoKVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAobWFuaWZlc3RBY3Rpb25zQ29uZmlnW2NvbmZpZ0tleV0pIHtcblx0XHRcdFx0XHRjb25maWdbY29uZmlnS2V5XS5pc1Zpc2libGUgPSB0aGlzLmdldEFjdGlvblZpc2liaWxpdHlWaWFNYW5pZmVzdChtYW5pZmVzdEFjdGlvbnNDb25maWdbY29uZmlnS2V5XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBjb25maWc7XG5cdFx0fSwge30gYXMgQ3VzdG9tQWN0aW9uQ29uZmlncyk7XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zQ29uZmlnKS5mb3JFYWNoKChhY3Rpb25LZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKGFjdGlvbktleS5zdGFydHNXaXRoKFwiRGF0YUZpZWxkRm9yQWN0aW9uXCIpICYmICFhY3Rpb25Db25maWdbYWN0aW9uS2V5XSkge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25WaXNpYmxlID0gdGhpcy5nZXRBY3Rpb25WaXNpYmlsaXR5VmlhTWFuaWZlc3QobWFuaWZlc3RBY3Rpb25zQ29uZmlnW2FjdGlvbktleV0pO1xuXHRcdFx0XHRpZiAoYWN0aW9uVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0YWN0aW9uQ29uZmlnW2FjdGlvbktleV0gPSB7XG5cdFx0XHRcdFx0XHRpc1Zpc2libGU6IGFjdGlvblZpc2libGVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFjdGlvbkNvbmZpZztcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyBhY3Rpb24gdmlzaWJsaXR5IGJhc2VkIG9uIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24uXG5cdCAqIElmIHRoZSBhY3Rpb24gaGFzIGhhdmUgZHluYW1pYyB2aXNpYmlsaXR5IG9yIGVuYWJsZW1lbnQgZnJvbSBtYW5pZmVzdCwgaXQgaXMgbm90IHZpc2libGUgaW4gdGhlIGNhcmQuXG5cdCAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnNDb25maWcgTWFuaWZlc3QgQWN0aW9uIGNvbmZpZ1xuXHQgKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIHRvIGluZGljYXRlIHZpc2liaWxpdHkgb2YgYWN0aW9uXG5cdCAqL1xuXHRnZXRBY3Rpb25WaXNpYmlsaXR5VmlhTWFuaWZlc3Q6IGZ1bmN0aW9uIChtYW5pZmVzdEFjdGlvbnNDb25maWc6IE1hbmlmZXN0QWN0aW9uKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGFjdGlvblZpc2libGUgPSB0eXBlb2YgbWFuaWZlc3RBY3Rpb25zQ29uZmlnLnZpc2libGUgPT09IFwiYm9vbGVhblwiID8gbWFuaWZlc3RBY3Rpb25zQ29uZmlnLnZpc2libGUgOiB1bmRlZmluZWQ7XG5cdFx0aWYgKHR5cGVvZiBtYW5pZmVzdEFjdGlvbnNDb25maWcudmlzaWJsZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0YWN0aW9uVmlzaWJsZSA9IG1hbmlmZXN0QWN0aW9uc0NvbmZpZy52aXNpYmxlID09PSBcInRydWVcIiA/IHRydWUgOiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBFbmFibGUgaXMgZHluYW1pYyBvciBzdGF0aWNhbGx5IGZhbHNlLlxuXHRcdGlmIChhY3Rpb25WaXNpYmxlICE9PSBmYWxzZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbnNDb25maWcuZW5hYmxlZCA9PT0gZmFsc2UgfHxcblx0XHRcdFx0KHR5cGVvZiBtYW5pZmVzdEFjdGlvbnNDb25maWcuZW5hYmxlZCA9PT0gXCJzdHJpbmdcIiAmJiBtYW5pZmVzdEFjdGlvbnNDb25maWcuZW5hYmxlZCAhPT0gXCJ0cnVlXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0YWN0aW9uVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYWN0aW9uVmlzaWJsZTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IGhlYWRlciBmYWNldHMgd2l0aCB0aXRsZSwgcG9zaXRpb24gYW5kIHZpc2liaWxpdHkuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIE9iamVjdCBwYWdlIGNvbnRyb2xsZXJcblx0ICogQHJldHVybnMgT2JqZWN0IG9mIGZhY2V0c1xuXHQgKi9cblx0Z2V0SGVhZGVyRmFjZXRzQ29uZmlnOiBmdW5jdGlvbiAoY29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiBDdXN0b21IZWFkZXJGYWNldENvbmZpZ3Mge1xuXHRcdC8vIGZldGNoIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBVSSBmcm9tIG9iamVjdCBwYWdlIGxheW91dFxuXHRcdGNvbnN0IGR5bmFtaWNIZWFkZXJDb250cm9scyA9IChjb250cm9sbGVyLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEhlYWRlckNvbnRlbnQoKVswXSBhcyBIQm94KT8uZ2V0SXRlbXMoKTtcblx0XHQvLyBnZXQgdmlzaWJpbGl0eSwgdGl0bGUgYW5kIG1hbnVhbGx5IGNhbGN1bGF0ZSBwb3NpdGlvbiBmcm9tIFVJIGNoYW5nZXNcblxuXHRcdGNvbnN0IGhlYWRlckl0ZW1zOiBDdXN0b21IZWFkZXJGYWNldENvbmZpZ3MgPSBkeW5hbWljSGVhZGVyQ29udHJvbHM/LnJlZHVjZShcblx0XHRcdChjdW1tdWxhdGl2ZUNvbmZpZ3M6IEN1c3RvbUhlYWRlckZhY2V0Q29uZmlncywgY3VycmVudEZhY2V0OiBDb250cm9sIHwgU3Rhc2hhYmxlSEJveCkgPT4ge1xuXHRcdFx0XHRjb25zdCBmYWNldElkZW50aWZlcjogc3RyaW5nIHwgbnVsbCA9IGN1cnJlbnRGYWNldC5kYXRhKEZBQ0VUX0lERU5USUZJRVIpO1xuXHRcdFx0XHRpZiAoZmFjZXRJZGVudGlmZXIgJiYgY3VycmVudEZhY2V0LmlzQTxTdGFzaGFibGVIQm94PihcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdGFzaGFibGVIQm94XCIpKSB7XG5cdFx0XHRcdFx0Ly8gRGlyZWN0IFN0YXNoYWJsZUhCb3ggaXMgYW4gZXF1aXZhbGVudCBvZiBSZWZlcmVuY2VGYWNldC5cblx0XHRcdFx0XHRjb25zdCBmb3JtRWxlbWVudHNDb25maWcgPSBTaGFyZUV4dGVuc2lvbk92ZXJyaWRlLl9nZXRGYWNldExhYmVsc0luZm8oY3VycmVudEZhY2V0KTtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50SXRlbTogSGVhZGVyRmFjZXRDb25maWcgPSB7XG5cdFx0XHRcdFx0XHQvLyBJbiBjYXNlIG9mIGtleSB1c2VyIGNoYW5nZXMgZnJvbSBGTFAsIHRoZSB2aXNpYmxlIHByb3BlcnR5IGlzIG5vdCBib3VuZChtb2RpZmllciB1bmJpbmRzIHRoZSBjb250cm9sIHByb3BlcnR5KS5cblxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYSBiaW5kaW5nIHRoZW4gaXQgY2FuIGNvbWUgZnJvbSBhbm5vdGF0aW9ucyBvciBtYW5pZmVzdC5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IHN1cHBvcnQgbWFuaWZlc3Qgb3ZlcnJpZGVzIGZvciB2aXNpYmxlIHlldCBmb3IgaGVhZGVyIGNvbnRlbnQgaW4gY2FyZHMuXG5cdFx0XHRcdFx0XHQvLyBTbywgaWYgdGhlcmUgaXMgYSBiaW5kaW5nIHdlIGZhbGwgYmFjayB0byBhbm5vdGF0aW9ucyhkZWZhdWx0IGJlaGF2aW91ciBvZiBBZGFwdGl2ZSBDYXJkIEdlbmVyYXRvcikuXG5cblx0XHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIG5vIGJpbmRpbmcsIGl0IG1pZ2h0IG1lYW4gdGhhdCB0aGVyZSBtaWdodCBiZSBrZXkgdXNlciBjaGFuZ2Ugb3IgdmlzaWJsZSBieSBkZWZhdWx0LlxuXHRcdFx0XHRcdFx0aXNWaXNpYmxlOiBjdXJyZW50RmFjZXQuaXNCb3VuZChcInZpc2libGVcIikgPyB1bmRlZmluZWQgOiBjdXJyZW50RmFjZXQuZ2V0VmlzaWJsZSgpLFxuXHRcdFx0XHRcdFx0dGl0bGU6IGN1cnJlbnRGYWNldC5nZXRUaXRsZSgpLFxuXHRcdFx0XHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0XHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXIsXG5cdFx0XHRcdFx0XHRcdGFuY2hvcjogT2JqZWN0LmtleXMoY3VtbXVsYXRpdmVDb25maWdzKS5wb3AoKSB8fCBcIlwiXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRzQ29uZmlnXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjdW1tdWxhdGl2ZUNvbmZpZ3NbZmFjZXRJZGVudGlmZXJdID0gY3VycmVudEl0ZW07XG5cdFx0XHRcdFx0cmV0dXJuIGN1bW11bGF0aXZlQ29uZmlncztcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY3VtbXVsYXRpdmVDb25maWdzO1xuXHRcdFx0fSxcblx0XHRcdHt9XG5cdFx0KTtcblx0XHRyZXR1cm4gaGVhZGVySXRlbXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBmb3JtIGVsZW1lbnRzIGxhYmVsIGNvbmZpZ3VyYXRpb25zIGZyb20gZmFjZXQuXG5cdCAqIEBwYXJhbSBmYWNldENvbnRyb2wgU3Rhc2hhYmxlSEJveCBjb250cm9sIHRoYXQgcmVwcmVzZW50cyB0aGUgcmVmZXJlbmNlIGZhY2V0LlxuXHQgKiBAcmV0dXJucyBGb3JtIGVsZW1lbnRzJyBsYWJlbCB0ZXh0IGNvbmZpZ3VyYXRpb25zXG5cdCAqL1xuXHRfZ2V0RmFjZXRMYWJlbHNJbmZvKGZhY2V0Q29udHJvbDogU3Rhc2hhYmxlSEJveCk6IEN1c3RvbUZvcm1FbGVtZW50c0NvbmZpZyB7XG5cdFx0Y29uc3QgbGFiZWxDdHJscyA9IGZhY2V0Q29udHJvbC5nZXRGb3JtTGFiZWxzKCk7XG5cblx0XHRyZXR1cm4gbGFiZWxDdHJscy5yZWR1Y2UoKGFsbENvbmZpZ3M6IEN1c3RvbUZvcm1FbGVtZW50c0NvbmZpZywgbGFiZWw6IExhYmVsKSA9PiB7XG5cdFx0XHRjb25zdCBsYWJlbElkZW50aWZpZXIgPSBsYWJlbC5kYXRhKFwibGFiZWxJZGVudGlmaWVyXCIpO1xuXHRcdFx0Y29uc3QgbGFiZWxUZXh0ID0gbGFiZWwuZ2V0VGV4dCgpO1xuXHRcdFx0aWYgKGxhYmVsSWRlbnRpZmllcikge1xuXHRcdFx0XHRhbGxDb25maWdzW2xhYmVsSWRlbnRpZmllcl0gPSB7XG5cdFx0XHRcdFx0bGFiZWxUZXh0OiBsYWJlbFRleHQuZW5kc1dpdGgoXCI6XCIpID8gbGFiZWxUZXh0LnN1YnN0cmluZygwLCBsYWJlbFRleHQubGVuZ3RoIC0gMSkgOiBsYWJlbFRleHRcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhbGxDb25maWdzO1xuXHRcdH0sIHt9IGFzIEN1c3RvbUZvcm1FbGVtZW50c0NvbmZpZyk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNoYXJlRXh0ZW5zaW9uT3ZlcnJpZGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztFQXFDQSxNQUFNQSxnQkFBZ0IsR0FBRyxpQkFBaUI7RUFDMUMsTUFBTUMsWUFBWSxHQUFHLFVBQVU7RUFDL0IsSUFB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
|
|
@@ -380,7 +380,7 @@ const ShareExtensionOverride = {
|
|
|
380
380
|
const appId = manifest?.["sap.app"]?.id;
|
|
381
381
|
const appTitle = manifest?.["sap.app"]?.title;
|
|
382
382
|
const aActiveContextPaths = await fetchActiveContextPaths(oContext, this.base.getView().getController());
|
|
383
|
-
const oPageTitleInfo = (this.base.getView().getController() as ObjectPageController)._getPageTitleInformation();
|
|
383
|
+
const oPageTitleInfo = await (this.base.getView().getController() as ObjectPageController)._getPageTitleInformation();
|
|
384
384
|
const oData = await Promise.all([
|
|
385
385
|
getJamUrl(bIsEditable, bGlobalIsStickySupported, aActiveContextPaths),
|
|
386
386
|
getShareUrl(bIsEditable, bGlobalIsStickySupported, aActiveContextPaths),
|
|
@@ -210,7 +210,10 @@
|
|
|
210
210
|
icon="{= ${headerAction>isAIOperation} ? COMMON.getAIIcon() : undefined }"
|
|
211
211
|
>
|
|
212
212
|
<layoutData>
|
|
213
|
-
<OverflowToolbarLayoutData
|
|
213
|
+
<OverflowToolbarLayoutData
|
|
214
|
+
priority="{= ${headerAction>priority} ? ${headerAction>priority} : 'Low' }"
|
|
215
|
+
group="{headerAction>group}"
|
|
216
|
+
/>
|
|
214
217
|
</layoutData>
|
|
215
218
|
</Button>
|
|
216
219
|
</template:if>
|
|
@@ -232,7 +235,10 @@
|
|
|
232
235
|
macrodata:IBNData="{headerAction>customData}"
|
|
233
236
|
>
|
|
234
237
|
<layoutData>
|
|
235
|
-
<OverflowToolbarLayoutData
|
|
238
|
+
<OverflowToolbarLayoutData
|
|
239
|
+
priority="{= ${headerAction>priority} ? ${headerAction>priority} : 'Low' }"
|
|
240
|
+
group="{headerAction>group}"
|
|
241
|
+
/>
|
|
236
242
|
</layoutData>
|
|
237
243
|
</Button>
|
|
238
244
|
</template:with>
|
|
@@ -64,7 +64,10 @@
|
|
|
64
64
|
</macroSectionContent:blocks>
|
|
65
65
|
</template:then>
|
|
66
66
|
<template:elseif test="{= ${subSection>type} === 'Form'}">
|
|
67
|
-
<core:InvisibleText
|
|
67
|
+
<core:InvisibleText
|
|
68
|
+
id="{= ID.generate([${subSection>id}, 'AriaText']) }"
|
|
69
|
+
text="{= OP.getFormAriaText(${subSection>title})}"
|
|
70
|
+
/>
|
|
68
71
|
<core:Fragment fragmentName="sap.fe.templates.ObjectPage.view.fragments.FormActions" type="XML" />
|
|
69
72
|
<macroSectionContent:blocks>
|
|
70
73
|
<uxap:ObjectPageLazyLoader
|
|
@@ -36,7 +36,7 @@ sap.ui.define(["sap/f/library", "sap/fe/core/library", "sap/fe/macros/library",
|
|
|
36
36
|
controls: [],
|
|
37
37
|
elements: [],
|
|
38
38
|
// eslint-disable-next-line no-template-curly-in-string
|
|
39
|
-
version: "1.
|
|
39
|
+
version: "1.141.1",
|
|
40
40
|
noLibraryCSS: true
|
|
41
41
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
42
42
|
});
|