@sapui5/sap.fe.templates 1.148.1 → 1.149.0
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/ListComponent.js +2 -5
- package/src/sap/fe/templates/ListReport/Component.js +2 -5
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +84 -14
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +88 -13
- package/src/sap/fe/templates/ListReport/LRMessageStrip.js +41 -1
- package/src/sap/fe/templates/ListReport/LRMessageStrip.ts +43 -0
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +6 -9
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +4 -7
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +12 -6
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +14 -6
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +7 -1
- package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +5 -0
- package/src/sap/fe/templates/ObjectPage/Component.js +12 -15
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +15 -9
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +7 -3
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +35 -24
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +20 -2
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +5 -18
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +2 -15
- package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.js +10 -3
- package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.tsx +12 -1
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +2 -5
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +2 -5
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +3 -6
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +0 -4
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionFormContent.fragment.xml +0 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionMoreFormContent.fragment.xml +0 -1
- package/src/sap/fe/templates/library.js +1 -1
|
@@ -652,6 +652,10 @@ class ObjectPageController extends PageController {
|
|
|
652
652
|
// SubSection's contents binding is disabled.
|
|
653
653
|
blocks.forEach((block) => {
|
|
654
654
|
if (block.isA<SubSectionBlock>("sap.fe.templates.ObjectPage.controls.SubSectionBlock")) {
|
|
655
|
+
// Set binding context to null on both the block and its content
|
|
656
|
+
// to support both: subsections with UI.Hidden annotation (content needs to be cleared)
|
|
657
|
+
// and customer controller extensions that set binding context on the block level
|
|
658
|
+
block.setBindingContext(undefined);
|
|
655
659
|
block.content.setBindingContext?.(null);
|
|
656
660
|
} else {
|
|
657
661
|
block.setBindingContext(null);
|
|
@@ -818,6 +822,10 @@ class ObjectPageController extends PageController {
|
|
|
818
822
|
const blocks = oSubSection.getBlocks();
|
|
819
823
|
blocks.forEach((block) => {
|
|
820
824
|
if (block.isA<SubSectionBlock>("sap.fe.templates.ObjectPage.controls.SubSectionBlock")) {
|
|
825
|
+
// Set binding context to undefined on both the block and its content
|
|
826
|
+
// to support both: subsections with UI.Hidden annotation (content needs to be cleared)
|
|
827
|
+
// and customer controller extensions that set binding context on the block level
|
|
828
|
+
block.setBindingContext(undefined);
|
|
821
829
|
block.content.setBindingContext?.(undefined);
|
|
822
830
|
} else {
|
|
823
831
|
block.setBindingContext(undefined);
|
|
@@ -868,14 +876,24 @@ class ObjectPageController extends PageController {
|
|
|
868
876
|
const hiddenDraftEnabled = (this.getAppComponent()?.getEnvironmentCapabilities()?.getCapabilities()?.HiddenDraft as HiddenDraft)
|
|
869
877
|
?.enabled;
|
|
870
878
|
draft.processDataLossOrDraftDiscardConfirmation(
|
|
871
|
-
|
|
879
|
+
() => {
|
|
880
|
+
if (this.getAppComponent().getRouterProxy().checkIfBackIsOutOfGuard()) {
|
|
881
|
+
this.editFlow.handleSessionOff();
|
|
882
|
+
}
|
|
883
|
+
navBack();
|
|
884
|
+
},
|
|
872
885
|
Function.prototype,
|
|
873
886
|
oContext,
|
|
874
887
|
this,
|
|
875
888
|
true,
|
|
876
889
|
draft.NavigationType.BackNavigation,
|
|
877
890
|
undefined,
|
|
878
|
-
hiddenDraftEnabled ? true : undefined
|
|
891
|
+
hiddenDraftEnabled ? true : undefined,
|
|
892
|
+
undefined,
|
|
893
|
+
// `navigationType` (BackNavigation above) still drives the non-FCL paths inside
|
|
894
|
+
// processDraftAdminData (e.g. processNoActiveEntityMode / processEditingDraftForExistingEntity).
|
|
895
|
+
// `draftDataLossStrategy` is consumed by the FCL branch (processFclMode) only — both are needed.
|
|
896
|
+
{ withoutChanges: draft.DraftDataLossOptions.Discard }
|
|
879
897
|
);
|
|
880
898
|
}
|
|
881
899
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2026 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TitleHelper", "sap/fe/macros/CommonHelper", "sap/fe/macros/field/FieldTemplating", "sap/m/library", "sap/ui/base/BindingInfo", "sap/ui/
|
|
5
|
+
sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TitleHelper", "sap/fe/macros/CommonHelper", "sap/fe/macros/field/FieldTemplating", "sap/m/library", "sap/ui/base/BindingInfo", "sap/ui/model/odata/v4/AnnotationHelper"], function (BindingToolkit, ManifestSettings, MetaModelConverter, BindingHelper, ModelHelper, StableIdHelper, TitleHelper, CommonHelper, FieldTemplating, mLibrary, BindingInfo, ODataModelAnnotationHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -376,9 +376,6 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/ManifestSet
|
|
|
376
376
|
*/
|
|
377
377
|
_exports.getBindingWithGroupIdFromConfig = getBindingWithGroupIdFromConfig;
|
|
378
378
|
const createBindingForAlternateAndSecondaryKeys = function (dataModelObjectPath) {
|
|
379
|
-
if (!dataModelObjectPath?.navigationProperties?.length) {
|
|
380
|
-
return undefined;
|
|
381
|
-
}
|
|
382
379
|
let binding;
|
|
383
380
|
const alternateAndSecondaryKeys = ModelHelper.getAlternateAndSecondaryKeys(dataModelObjectPath?.targetEntityType, dataModelObjectPath?.targetEntitySet);
|
|
384
381
|
if (alternateAndSecondaryKeys?.length) {
|
|
@@ -724,7 +721,8 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/ManifestSet
|
|
|
724
721
|
// retain old logic
|
|
725
722
|
return "H5";
|
|
726
723
|
} else {
|
|
727
|
-
|
|
724
|
+
//Changed from H4 to H3 for proper aria-level hierarchy for the tables with only subsection title and no section title
|
|
725
|
+
return "H3";
|
|
728
726
|
}
|
|
729
727
|
}
|
|
730
728
|
|
|
@@ -743,19 +741,8 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/ManifestSet
|
|
|
743
741
|
const labelId = StableIdHelper.generate([formElementIdPrefix, "Label"]);
|
|
744
742
|
return titleId ? `${titleId},${labelId}` : labelId;
|
|
745
743
|
};
|
|
746
|
-
|
|
747
|
-
/**
|
|
748
|
-
* Gets the aria text for form regions on Object Page.
|
|
749
|
-
* @param subSectionTitle The title of the subsection
|
|
750
|
-
* @returns The aria text for the form region
|
|
751
|
-
*/
|
|
752
|
-
_exports.getHeaderFormAriaLabelledBy = getHeaderFormAriaLabelledBy;
|
|
753
|
-
const getFormAriaText = function (subSectionTitle) {
|
|
754
|
-
const resourceBundle = Library.getResourceBundleFor("sap.fe.core");
|
|
755
|
-
return subSectionTitle !== undefined ? resourceBundle.getText("C_FORM_ARIA_TEXT", [subSectionTitle]) : undefined;
|
|
756
|
-
};
|
|
757
744
|
getFooterVisibilityExpression.requiresIContext = true;
|
|
758
|
-
_exports.
|
|
745
|
+
_exports.getHeaderFormAriaLabelledBy = getHeaderFormAriaLabelledBy;
|
|
759
746
|
return _exports;
|
|
760
747
|
}, false);
|
|
761
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwibUxpYnJhcnkiLCJnZXRFeHByZXNzaW9uRm9yVGl0bGUiLCJmdWxsQ29udGV4dFBhdGgiLCJ2aWV3RGF0YSIsImhlYWRlckluZm8iLCJnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uIiwiZ2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uIiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJnZXRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24iLCJvSGVhZGVySW5mbyIsImRlc2NyaXB0aW9uQmluZGluZyIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIkRlc2NyaXB0aW9uIiwiVmFsdWUiLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwiVUkiLCJUZXh0QXJyYW5nZW1lbnQiLCJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiZGVzY3JpcHRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImZvcm1hdFZhbHVlUmVjdXJzaXZlbHkiLCJnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiIsIm9WaWV3RGF0YSIsInNhdmVCdXR0b25UZXh0IiwicmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJjcmVhdGVCdXR0b25UZXh0Iiwic2F2ZUV4cHJlc3Npb24iLCJzdGFydGluZ0VudGl0eVNldCIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiaWZFbHNlIiwiSXNDcmVhdGVNb2RlIiwiRHJhZnQiLCJJc05ld09iamVjdCIsImdldEV4cHJlc3Npb25Gb3JMYWJlbE9uSGVhZGVyRm9ybSIsImxhYmVsIiwiaXNNYW5pZmVzdEFjdGlvbiIsImFjdGlvbiIsIm5vbk1hbmlmZXN0QWN0aW9ucyIsImluY2x1ZGVzIiwidHlwZSIsImJ1aWxkQ3JpdGljYWxpdHlWaXNpYmxlRnJvbUlkZW50aWZpY2F0aW9uRXhwcmVzc2lvbiIsImRhdGFDb250ZXh0UGF0aCIsImlkZW50aWZpY2F0aW9uIiwidGFyZ2V0RW50aXR5VHlwZSIsIklkZW50aWZpY2F0aW9uIiwiZGF0YUZpZWxkc1dpdGhDcml0aWNhbGl0eSIsImZpbHRlciIsImRhdGFGaWVsZCIsIiRUeXBlIiwiQ3JpdGljYWxpdHkiLCJsZW5ndGgiLCJjb25zdGFudCIsIm9yIiwibWFwIiwibm90IiwiZXF1YWwiLCJIaWRkZW4iLCJidWlsZEVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uIiwiY3JpdGljYWxpdHlWaXNpYmxlRXhwciIsIkdob3N0IiwiRW1waGFzaXplZCIsImdldEVsZW1lbnRCaW5kaW5nIiwic1BhdGgiLCJzTmF2aWdhdGlvblBhdGgiLCJPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlciIsImdldE5hdmlnYXRpb25QYXRoIiwiY2hlY2tEcmFmdFN0YXRlIiwiZW50aXR5U2V0IiwiRHJhZnRSb290IiwiRWRpdEFjdGlvbiIsIl9maW5kQWN0aW9uIiwiYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIiwic0FjdGlvblR5cGUiLCJvQWN0aW9uIiwiZmluZCIsIm9IZWFkZXJBY3Rpb24iLCJnZXREZWxldGVDb21tYW5kRXhlY3V0aW9uRW5hYmxlZCIsIm9EZWxldGVBY3Rpb24iLCJlbmFibGVkIiwiZ2V0RGVsZXRlQ29tbWFuZEV4ZWN1dGlvblZpc2libGUiLCJ2aXNpYmxlIiwiZ2V0RWRpdENvbW1hbmRFeGVjdXRpb25WaXNpYmxlIiwib0VkaXRBY3Rpb24iLCJnZXRFZGl0Q29tbWFuZEV4ZWN1dGlvbkVuYWJsZWQiLCJnZXRFZGl0QWN0aW9uIiwib0VudGl0eVNldCIsImdldFBhdGgiLCJhUGF0aHMiLCJzcGxpdCIsInJvb3RFbnRpdHlTZXRQYXRoIiwicm9vdEVudGl0eVNldEFubm5vdGF0aW9ucyIsImdldE9iamVjdCIsImJEcmFmdFJvb3QiLCJoYXNPd25Qcm9wZXJ0eSIsImJEcmFmdE5vZGUiLCJiU3RpY2t5U2Vzc2lvbiIsInNBY3Rpb25OYW1lIiwiaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyIsIm9Bbm5vdGF0aW9ucyIsIm9GaWVsZENvbnRyb2wiLCJiQ29tcHV0ZWQiLCJiSW1tdXRhYmxlIiwiYlJlYWRPbmx5IiwiQm9vbCIsInJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMiLCJzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHkiLCJCaW5kaW5nSW5mbyIsInBhcnNlIiwiZ2V0RXhwcmVzc2lvbkZvck1pY3JvQ2hhcnRUaXRsZVByZXNzIiwib0NvbmZpZ3VyYXRpb24iLCJ0YXJnZXRBbm5vdGF0aW9uUGF0aCIsInRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3QiLCJvTWFuaWZlc3RPdXRib3VuZCIsInNDb2xsZWN0aW9uTmFtZSIsImdldE1pY3JvQ2hhcnRDb250cm9sQ29uZmlndXJhdGlvblBhdGgiLCJuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRNaWNyb0NoYXJ0VGl0bGVBc0xpbmsiLCJvQ29udHJvbENvbmZpZ3VyYXRpb24iLCJjb2xsZWN0aW9uTmFtZSIsInRhcmdldENvbnRyb2xDb25maWd1cmF0aW9uIiwidGFyZ2V0T2JqZWN0IiwiVmlzdWFsaXphdGlvbnMiLCJ2YWx1ZSIsImdldEdyb3VwSWRGcm9tQ29uZmlnIiwib0NvbmZpZ3VyYXRpb25zIiwic0Fubm90YXRpb25QYXRoIiwic0RlZmF1bHRHcm91cElkIiwiYUF1dG9QYXR0ZXJucyIsInNHcm91cElkIiwicmVxdWVzdEdyb3VwSWQiLCJzb21lIiwiYXV0b1BhdHRlcm4iLCJnZXRHcm91cElkRnJvbUNvbmZpZ0Zvck1pY3JvQ2hhcnQiLCJ0YXJnZXRBbm5vdGF0aW9uUGF0aERhdGFNb2RlbE9iamVjdCIsImdldEJpbmRpbmdXaXRoR3JvdXBJZEZyb21Db25maWciLCJzS2V5Iiwic0JpbmRpbmciLCJjcmVhdGVCaW5kaW5nRm9yQWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImJpbmRpbmciLCJhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzIiwiTW9kZWxIZWxwZXIiLCJnZXRBbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzIiwidGFyZ2V0RW50aXR5U2V0IiwicGF0aCIsInBhcmFtZXRlcnMiLCIkc2VsZWN0Iiwiam9pbiIsImRvZXNGaWVsZEdyb3VwQ29udGFpbk9ubHlPbmVNdWx0aUxpbmVEYXRhRmllbGQiLCJhRm9ybUVsZW1lbnRzIiwiaXNWYWx1ZU11bHRpbGluZVRleHQiLCJnZXRTaGFyZUJ1dHRvblZpc2liaWxpdHkiLCJpc1NoYXJlQnV0dG9uVmlzaWJsZUZvck15SW5ib3giLCJzaGFyZUJ1dHRvblZpc2liaWxpdHlFeHAiLCJmY2xFbmFibGVkIiwiYW5kIiwicGF0aEluTW9kZWwiLCJnZXRWaXNpYmxpdHlPZkhlYWRlckluZm8iLCJvVGl0bGVBbm5vdGF0aW9ucyIsIm9EZXNjcmlwdGlvbkFubm90YXRpb25zIiwib0ZpZWxkVGl0bGVGaWVsZENvbnRyb2wiLCJvRmllbGREZXNjcmlwdGlvbkZpZWxkQ29udHJvbCIsImJJc1RpdGxlUmVhZE9ubHkiLCJ0aXRsZUV4cHJlc3Npb24iLCJiSXNEZXNjcmlwdGlvblJlYWRPbmx5IiwiZGVzY3JpcHRpb25FeHByZXNzaW9uIiwiY29tYmluZVRpdGxlQW5kRGVzY3JpcHRpb25FeHByZXNzaW9uIiwib1RpdGxlRmllbGRDb250cm9sIiwib0Rlc2NyaXB0aW9uRmllbGRDb250cm9sIiwiZ2V0UHJlc3NFeHByZXNzaW9uRm9yRGVsZXRlIiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ0aXRsZSIsInBhcmFtcyIsIkNvbW1vbkhlbHBlciIsImdlbmVyYXRlRnVuY3Rpb24iLCJvYmplY3RUb1N0cmluZyIsImdldFByZXNzRXhwcmVzc2lvbkZvckVkaXQiLCJvRGF0YUZpZWxkIiwic0VudGl0eVNldE5hbWUiLCJzRWRpdGFibGVDb250ZXh0cyIsImFkZFNpbmdsZVF1b3RlcyIsIkFjdGlvbiIsInNEYXRhRmllbGRFbnVtTWVtYmVyIiwiSW52b2NhdGlvbkdyb3VwaW5nIiwic0ludm9jYXRpb25Hcm91cCIsIm9QYXJhbXMiLCJjb250ZXh0cyIsImVudGl0eVNldE5hbWUiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJtb2RlbCIsIkxhYmVsIiwiaXNOYXZpZ2FibGUiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJnZXRQcmVzc0V4cHJlc3Npb25Gb3JGb290ZXJBbm5vdGF0aW9uQWN0aW9uIiwiZGF0YUZpZWxkTW9kZWxQYXRoIiwiaGVhZGVyQWN0aW9uIiwiYWN0aW9uQ29udGV4dHMiLCJnZXRQcmVzc0V4cHJlc3Npb25Gb3JQcmltYXJ5QWN0aW9uIiwicG9zaXRpdmVBY3Rpb25WaXNpYmxlIiwicG9zaXRpdmVBY3Rpb25FbmFibGVkIiwiZWRpdEFjdGlvblZpc2libGUiLCJlZGl0QWN0aW9uRW5hYmxlZCIsInNBY3Rpb25Db250ZXh0cyIsInRvU3RyaW5nIiwib0NvbmRpdGlvbnMiLCJnZXRTdGFzaGFibGVIQm94QmluZGluZyIsIm9IZWFkZXJGYWNldCIsIkZhY2V0IiwidGFyZ2V0QW5ub3RhdGlvblR5cGUiLCJ0YXJnZXRBbm5vdGF0aW9uVmFsdWUiLCJnZXRIZWFkZXJGb3JtSGJveFJlbmRlclR5cGUiLCJnZXREZWZhdWx0QWN0aW9uSGFuZGxlciIsIm9DdHgiLCJvRGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiIsImRlZmF1bHRBY3Rpb25Db250ZXh0T3JFbnRpdHlTZXQiLCJkZWZhdWx0QWN0aW9uIiwiY29tbWFuZCIsInByZXNzIiwibm9XcmFwIiwiYnVpbGRBY3Rpb25XcmFwcGVyIiwiaWQiLCJpb0V4IiwiaXNWaXN1YWxpemF0aW9uSXNQYXJ0T2ZQcmV2aWV3Iiwic3ViU2VjdGlvbiIsImlzUGFydE9mUHJldmlldyIsInByZXNlbnRhdGlvbiIsInZpc3VhbGl6YXRpb25zIiwiZ2V0Rm9vdGVyVmlzaWJpbGl0eUV4cHJlc3Npb25JbnRlcm5hbCIsImNvbnRleHQiLCJmb290ZXJBY3Rpb25zIiwibWV0YU1vZGVsIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0TW9kZWwiLCJfZ2VuZXJhdGVCaW5kaW5nc0ZvckFjdGlvbnMiLCJhY3Rpb25zIiwidmlzaWJsZUV4cHJlc3Npb24iLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImdldEFjdGlvbk1vZGVsUGF0aCIsImFubm90YXRpb25QYXRoIiwiYWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJkZXRlcm1pbmluZ0FjdGlvbnMiLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwibWFuaWZlc3RBY3Rpb25CaW5kaW5ncyIsImRldGVybWluaW5nQWN0aW9uQmluZGluZ3MiLCJpc05vdEhpZGRlbkRldGVybWluaW5nQWN0aW9uIiwiYWN0aW9uQ29udGV4dE1vZGVsUGF0aCIsIklzRWRpdGFibGUiLCJnZXRGb290ZXJWaXNpYmlsaXR5RXhwcmVzc2lvbiIsImdldEhlYWRlckxldmVsIiwiaXNNb3JlQ29udGVudCIsInNob3dTdWJTZWN0aW9uVGl0bGUiLCJsZXZlbCIsImRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlIiwiZ2V0SGVhZGVyRm9ybUFyaWFMYWJlbGxlZEJ5IiwiaGVhZGVyRm9ybURhdGEiLCJmb3JtRWxlbWVudElkUHJlZml4IiwidGl0bGVJZCIsIlN0YWJsZUlkSGVscGVyIiwiZ2VuZXJhdGUiLCJsYWJlbElkIiwiZ2V0Rm9ybUFyaWFUZXh0Iiwic3ViU2VjdGlvblRpdGxlIiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJyZXF1aXJlc0lDb250ZXh0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlVGVtcGxhdGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGb3JtYXR0ZXJzIGZvciB0aGUgT2JqZWN0IFBhZ2VcbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5LCBTaW5nbGV0b24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q2hhcnQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZERlZmF1bHQsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdEZhY2V0LFxuXHRIZWFkZXJJbmZvVHlwZSxcblx0UHJlc2VudGF0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IE1pY3JvQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlLCB0eXBlIENvbnRyb2xDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiwgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZEdyb3VwRmFjZXQsIEhlYWRlckZvcm1EYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9PYmplY3RQYWdlL1N1YlNlY3Rpb25cIjtcbmltcG9ydCB7IERyYWZ0LCBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0ICogYXMgU3RhYmxlSWRIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UaXRsZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBWaWV3RGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQge1xuXHRhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uLFxuXHRmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5LFxuXHRnZXRUZXh0QmluZGluZ0V4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgbUxpYnJhcnkgZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBCaW5kaW5nSW5mbyBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ0luZm9cIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RPdXRib3VuZEVudHJ5IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgdHlwZSB7IElDb250ZXh0IH0gZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG5jb25zdCBCdXR0b25UeXBlID0gbUxpYnJhcnkuQnV0dG9uVHlwZTtcblxuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JUaXRsZSA9IGZ1bmN0aW9uIChcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHZpZXdEYXRhOiBWaWV3RGF0YSxcblx0aGVhZGVySW5mbz86IEhlYWRlckluZm9UeXBlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uKFxuXHRcdGZ1bGxDb250ZXh0UGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0XHRnZXRUZXh0QmluZGluZ0V4cHJlc3Npb24sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdGhlYWRlckluZm8sXG5cdFx0dmlld0RhdGFcblx0KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBleHByZXNzaW9uIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBmdWxsIGNvbnRleHQgcGF0aCB1c2VkIHRvIHJlYWNoIHRoYXQgb2JqZWN0IHBhZ2VcbiAqIEBwYXJhbSBvSGVhZGVySW5mbyBUaGUgQFVJLkhlYWRlckluZm8gYW5ub3RhdGlvbiBjb250ZW50XG4gKiBAcGFyYW0gb0hlYWRlckluZm8uRGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBvYmplY3QgcGFnZSBkZXNjcmlwdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uID0gZnVuY3Rpb24gKFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0Pixcblx0b0hlYWRlckluZm8/OiBIZWFkZXJJbmZvVHlwZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRsZXQgZGVzY3JpcHRpb25CaW5kaW5nID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKChvSGVhZGVySW5mbz8uRGVzY3JpcHRpb24gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZSk7XG5cdGlmICgob0hlYWRlckluZm8/LkRlc2NyaXB0aW9uIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0Ly8gSW4gY2FzZSBhbiBleHBsaWNpdCB0ZXh0IGFycmFuZ2VtZW50IHdhcyBzZXQgd2UgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIGRlc2NyaXB0aW9uIGFzIHdlbGxcblx0XHRkZXNjcmlwdGlvbkJpbmRpbmcgPSBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uKGRlc2NyaXB0aW9uQmluZGluZywgZnVsbENvbnRleHRQYXRoKTtcblx0fVxuXHRjb25zdCBkZXNjcmlwdGlvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkoZGVzY3JpcHRpb25CaW5kaW5nLCBmdWxsQ29udGV4dFBhdGgpKTtcblx0cmV0dXJuIGRlc2NyaXB0aW9uID09PSBcInVuZGVmaW5lZFwiID8gXCJcIiA6IGRlc2NyaXB0aW9uO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGV4cHJlc3Npb24gZm9yIHRoZSBzYXZlIGJ1dHRvbi5cbiAqIEBwYXJhbSBvVmlld0RhdGEgVGhlIGN1cnJlbnQgdmlldyBkYXRhXG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBwYXRoIHVzZWQgdXAgdW50aWwgaGVyZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHNob3dzIHRoZSByaWdodCBzYXZlIGJ1dHRvbiB0ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiA9IGZ1bmN0aW9uIChcblx0b1ZpZXdEYXRhOiBWaWV3RGF0YSxcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD5cbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3Qgc2F2ZUJ1dHRvblRleHQgPSBvVmlld0RhdGEucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9PUF9PQkpFQ1RfUEFHRV9TQVZFXCIpO1xuXHRjb25zdCBjcmVhdGVCdXR0b25UZXh0ID0gb1ZpZXdEYXRhLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfT1BfT0JKRUNUX1BBR0VfQ1JFQVRFXCIpO1xuXHRsZXQgc2F2ZUV4cHJlc3Npb247XG5cblx0aWYgKChmdWxsQ29udGV4dFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkKSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gc3RpY2t5IG1vZGUgQU5EIHRoZSB1aSBpcyBpbiBjcmVhdGUgbW9kZSwgc2hvdyBDcmVhdGUsIGVsc2Ugc2hvdyBTYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoVUkuSXNDcmVhdGVNb2RlLCBjcmVhdGVCdXR0b25UZXh0LCBzYXZlQnV0dG9uVGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gZHJhZnQgQU5EIHRoZSBkcmFmdCBpcyBhIG5ldyBvYmplY3QgKCFJc0FjdGl2ZUVudGl0eSAmJiAhSGFzQWN0aXZlRW50aXR5KSwgc2hvdyBjcmVhdGUsIGVsc2Ugc2hvdyBzYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoRHJhZnQuSXNOZXdPYmplY3QsIGNyZWF0ZUJ1dHRvblRleHQsIHNhdmVCdXR0b25UZXh0KTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oc2F2ZUV4cHJlc3Npb24pO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGV4cHJlc3Npb24gb2YgdGhlIGxhYmVsIGZvciBhIGZpZWxkIGludG8gYSBoZWFkZXIgZm9ybS5cbiAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGhlYWRlciBmb3JtIGluIGFuIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIHZpZXdEYXRhIFRoZSBjdXJyZW50IHZpZXcgZGF0YS5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0cmFuc2xhdGVkIGxhYmVsIG9mIHRoZSBvZiB0aGUgaGVhZGVyIGZvcm0gaW4gYW4gb2JqZWN0IHBhZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yTGFiZWxPbkhlYWRlckZvcm0gPSBmdW5jdGlvbiAobGFiZWw6IFN0cmluZywgdmlld0RhdGE6IFZpZXdEYXRhKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gdmlld0RhdGEucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiSEVBREVSX0ZPUk1fTEFCRUxcIiwgW2xhYmVsXSk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCByZXR1cm5zIFdoZXRoZXIgdGhlIGFjdGlvbiB0eXBlIGlzIG1hbmlmZXN0IG9yIG5vdC5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIGFjdGlvbiBvYmplY3RcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBhY3Rpb24gaXMgY29taW5nIGZyb20gbWFuaWZlc3QsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc01hbmlmZXN0QWN0aW9uID0gZnVuY3Rpb24gKGFjdGlvbjogQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbik6IGFjdGlvbiBpcyBDdXN0b21BY3Rpb24ge1xuXHRjb25zdCBub25NYW5pZmVzdEFjdGlvbnMgPSBbXG5cdFx0XCJQcmltYXJ5XCIsXG5cdFx0XCJEZWZhdWx0QXBwbHlcIixcblx0XHRcIlNlY29uZGFyeVwiLFxuXHRcdFwiRm9yQWN0aW9uXCIsXG5cdFx0XCJGb3JOYXZpZ2F0aW9uXCIsXG5cdFx0XCJTd2l0Y2hUb0FjdGl2ZU9iamVjdFwiLFxuXHRcdFwiU3dpdGNoVG9EcmFmdE9iamVjdFwiLFxuXHRcdFwiRHJhZnRBY3Rpb25zXCIsXG5cdFx0XCJDb3B5XCIsXG5cdFx0XCJTdGFuZGFyZFwiXG5cdF07XG5cdHJldHVybiAhbm9uTWFuaWZlc3RBY3Rpb25zLmluY2x1ZGVzKGFjdGlvbi50eXBlID8/IFwiXCIpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgY29tcGlsZWQgZXhwcmVzc2lvbiB0aGF0IGRldGVybWluZXMgdGhlIGVtcGhhc2l6ZWQgYnV0dG9uIHR5cGUgYmFzZWQgb24gY3JpdGljYWxpdHkgYWNyb3NzIGFsbCBhY3Rpb25zLlxuICogSWYgYSBjcml0aWNhbCBhY3Rpb24gaXMgcmVuZGVyZWQsIGl0IGlzIHRyZWF0ZWQgYXMgdGhlIHByaW1hcnkgYWN0aW9uLCBhbmQgdGhlIHRlbXBsYXRlJ3MgZGVmYXVsdCBwcmltYXJ5IGFjdGlvbiBpcyBzdXBwcmVzc2VkLlxuICogQHBhcmFtIGRhdGFDb250ZXh0UGF0aCBUaGUgRGF0YU1vZGVsT2JqZWN0UGF0aCByZWxhdGVkIHRvIHRoZSBjb250ZXh0XG4gKiBAcmV0dXJucyBBIGNvbXBpbGVkIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdGhlIGJ1dHRvbiB0eXBlIHRvIHVzZVxuICovXG5leHBvcnQgY29uc3QgYnVpbGRDcml0aWNhbGl0eVZpc2libGVGcm9tSWRlbnRpZmljYXRpb25FeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRkYXRhQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5IHwgU2luZ2xldG9uPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaWRlbnRpZmljYXRpb24gPSBkYXRhQ29udGV4dFBhdGgudGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbjtcblx0Y29uc3QgZGF0YUZpZWxkc1dpdGhDcml0aWNhbGl0eSA9XG5cdFx0aWRlbnRpZmljYXRpb24/LmZpbHRlcigoZGF0YUZpZWxkKSA9PiBkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiAmJiBkYXRhRmllbGQuQ3JpdGljYWxpdHkpIHx8IFtdO1xuXG5cdGlmICghZGF0YUZpZWxkc1dpdGhDcml0aWNhbGl0eS5sZW5ndGgpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9XG5cdHJldHVybiBvcihcblx0XHQuLi5kYXRhRmllbGRzV2l0aENyaXRpY2FsaXR5Lm1hcCgoZGF0YUZpZWxkKSA9PlxuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgc3VwcHJlc3NlcyBlbXBoYXNpcyBpZiB0aGUgYWN0aW9uIGl0c2VsZiBpcyB2aXNpYmxlIChIaWRkZW4gaXMgZmFsc2UpXG5cdFx0XHRub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKVxuXHRcdClcblx0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZEVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRkYXRhQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5IHwgU2luZ2xldG9uPlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBjcml0aWNhbGl0eVZpc2libGVFeHByID0gYnVpbGRDcml0aWNhbGl0eVZpc2libGVGcm9tSWRlbnRpZmljYXRpb25FeHByZXNzaW9uKGRhdGFDb250ZXh0UGF0aCk7XG5cdC8vIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB2aXNpYmxlIGFjdGlvbiB3aXRoIGNyaXRpY2FsaXR5LCB0aGUgdGVtcGxhdGUncyBkZWZhdWx0IHByaW1hcnkgYWN0aW9uIGlzIHNldCBiYWNrIHRvIEdob3N0XG5cdC8vIGVsc2UgaXQgaXMgZW1waGFzaXplZFxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGNyaXRpY2FsaXR5VmlzaWJsZUV4cHIsIEJ1dHRvblR5cGUuR2hvc3QsIEJ1dHRvblR5cGUuRW1waGFzaXplZCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRCaW5kaW5nID0gZnVuY3Rpb24gKHNQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChzUGF0aCk7XG5cdGlmIChzTmF2aWdhdGlvblBhdGgpIHtcblx0XHRyZXR1cm4gXCJ7cGF0aDonXCIgKyBzTmF2aWdhdGlvblBhdGggKyBcIid9XCI7XG5cdH0gZWxzZSB7XG5cdFx0Ly9ubyBuYXZpZ2F0aW9uIHByb3BlcnR5IG5lZWRzIGVtcHR5IG9iamVjdFxuXHRcdHJldHVybiBcIntwYXRoOiAnJ31cIjtcblx0fVxufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBjaGVjayBpZiBkcmFmdCBwYXR0ZXJuIGlzIHN1cHBvcnRlZC5cbiAqIEBwYXJhbSBlbnRpdHlTZXQgVGhlIGN1cnJlbnQgZW50aXR5IHNldC5cbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gZHJhZnQgc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGNoZWNrRHJhZnRTdGF0ZSA9IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCk6IGJvb2xlYW4ge1xuXHRpZiAoZW50aXR5U2V0LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdD8uRWRpdEFjdGlvbikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBmaW5kIGFuIGFjdGlvbiBmcm9tIHRoZSBhcnJheSBvZiBoZWFkZXIgYWN0aW9ucyBpbiB0aGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIEFycmF5IG9mICdoZWFkZXInIGFjdGlvbnMgb24gdGhlIG9iamVjdCBwYWdlLlxuICogQHBhcmFtIHNBY3Rpb25UeXBlIFRoZSBhY3Rpb24gdHlwZVxuICogQHJldHVybnMgVGhlIGFjdGlvbiB3aXRoIHRoZSBtYXRjaGluZyBhY3Rpb24gdHlwZVxuICovXG5leHBvcnQgY29uc3QgX2ZpbmRBY3Rpb24gPSBmdW5jdGlvbiAoYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10sIHNBY3Rpb25UeXBlOiBzdHJpbmcpOiBCYXNlQWN0aW9uIHwgdW5kZWZpbmVkIHtcblx0bGV0IG9BY3Rpb246IEJhc2VBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMgJiYgYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zLmxlbmd0aCkge1xuXHRcdG9BY3Rpb24gPSBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMuZmluZChmdW5jdGlvbiAob0hlYWRlckFjdGlvbjogQmFzZUFjdGlvbikge1xuXHRcdFx0cmV0dXJuIG9IZWFkZXJBY3Rpb24udHlwZSA9PT0gc0FjdGlvblR5cGU7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG9BY3Rpb247XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IGZvciB0aGUgRGVsZXRlIGJ1dHRvbiBvbiB0aGUgb2JqZWN0IHBhZ2Ugb3Igc3Vib2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBhIENvbW1hbmQgRXhlY3V0aW9uLlxuICogQHBhcmFtIGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyBBcnJheSBvZiBoZWFkZXIgYWN0aW9ucyBvbiB0aGUgb2JqZWN0IHBhZ2VcbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgZnJvbSB0aGUgY29udmVydGVyIG91dHB1dFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGVsZXRlQ29tbWFuZEV4ZWN1dGlvbkVuYWJsZWQgPSBmdW5jdGlvbiAoYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBvRGVsZXRlQWN0aW9uID0gX2ZpbmRBY3Rpb24oYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zLCBcIlNlY29uZGFyeVwiKTtcblx0cmV0dXJuIG9EZWxldGVBY3Rpb24gPyBvRGVsZXRlQWN0aW9uLmVuYWJsZWQgOiBcImZhbHNlXCI7XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IGZvciB0aGUgRGVsZXRlIGJ1dHRvbiBvbiB0aGUgb2JqZWN0IHBhZ2Ugb3Igc3Vib2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBhIENvbW1hbmQgRXhlY3V0aW9uLlxuICogQHBhcmFtIGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyBBcnJheSBvZiBoZWFkZXIgYWN0aW9ucyBvbiB0aGUgb2JqZWN0IHBhZ2VcbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgZnJvbSB0aGUgY29udmVydGVyIG91dHB1dFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGVsZXRlQ29tbWFuZEV4ZWN1dGlvblZpc2libGUgPSBmdW5jdGlvbiAoYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBvRGVsZXRlQWN0aW9uID0gX2ZpbmRBY3Rpb24oYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zLCBcIlNlY29uZGFyeVwiKTtcblx0cmV0dXJuIG9EZWxldGVBY3Rpb24gPyBvRGVsZXRlQWN0aW9uLnZpc2libGUgOiBcImZhbHNlXCI7XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IGZvciB0aGUgRWRpdCBidXR0b24gb24gdGhlIG9iamVjdCBwYWdlIG9yIHN1Ym9iamVjdCBwYWdlIGluIGNhc2Ugb2YgYSBDb21tYW5kIEV4ZWN1dGlvbi5cbiAqIEBwYXJhbSBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMgQXJyYXkgb2YgaGVhZGVyIGFjdGlvbnMgb24gdGhlIG9iamVjdCBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuIHZhbHVlIGZyb20gdGhlIGNvbnZlcnRlciBvdXRwdXRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVkaXRDb21tYW5kRXhlY3V0aW9uVmlzaWJsZSA9IGZ1bmN0aW9uIChhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9FZGl0QWN0aW9uID0gX2ZpbmRBY3Rpb24oYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zLCBcIlByaW1hcnlcIik7XG5cdHJldHVybiBvRWRpdEFjdGlvbiA/IG9FZGl0QWN0aW9uLnZpc2libGUgOiBcImZhbHNlXCI7XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IGZvciB0aGUgRWRpdCBidXR0b24gb24gdGhlIG9iamVjdCBwYWdlIG9yIHN1Ym9iamVjdCBwYWdlIGluIGNhc2Ugb2YgYSBDb21tYW5kIEV4ZWN1dGlvbi5cbiAqIEBwYXJhbSBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMgQXJyYXkgb2YgaGVhZGVyIGFjdGlvbnMgb24gdGhlIG9iamVjdCBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuIHZhbHVlIGZyb20gdGhlIGNvbnZlcnRlciBvdXRwdXRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVkaXRDb21tYW5kRXhlY3V0aW9uRW5hYmxlZCA9IGZ1bmN0aW9uIChhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9FZGl0QWN0aW9uID0gX2ZpbmRBY3Rpb24oYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zLCBcIlByaW1hcnlcIik7XG5cdHJldHVybiBvRWRpdEFjdGlvbiA/IG9FZGl0QWN0aW9uLmVuYWJsZWQgOiBcImZhbHNlXCI7XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCB0aGUgRWRpdEFjdGlvbiBmcm9tIHRoZSBiYXNlZCBvbiBhIGRyYWZ0LWVuYWJsZWQgYXBwbGljYXRpb24gb3IgYSBzdGlja3kgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0gW29FbnRpdHlTZXRdIFRoZSB2YWx1ZSBmcm9tIHRoZSBleHByZXNzaW9uLlxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB2UmF3VmFsdWUgJiBvRHJhZnROb2RlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0QWN0aW9uID0gZnVuY3Rpb24gKG9FbnRpdHlTZXQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBzUGF0aCA9IG9FbnRpdHlTZXQuZ2V0UGF0aCgpO1xuXHRjb25zdCBhUGF0aHMgPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdGNvbnN0IHJvb3RFbnRpdHlTZXRQYXRoID0gXCIvXCIgKyBhUGF0aHNbMV07XG5cdC8vIGdldCB0aGUgZWRpdCBhY3Rpb24gZnJvbSByb290IGVudGl0eSBzZXRzXG5cdGNvbnN0IHJvb3RFbnRpdHlTZXRBbm5ub3RhdGlvbnMgPSBvRW50aXR5U2V0LmdldE9iamVjdChyb290RW50aXR5U2V0UGF0aCArIFwiQFwiKTtcblx0Y29uc3QgYkRyYWZ0Um9vdCA9IHJvb3RFbnRpdHlTZXRBbm5ub3RhdGlvbnMuaGFzT3duUHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiKTtcblx0Y29uc3QgYkRyYWZ0Tm9kZSA9IHJvb3RFbnRpdHlTZXRBbm5ub3RhdGlvbnMuaGFzT3duUHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZVwiKTtcblx0Y29uc3QgYlN0aWNreVNlc3Npb24gPSByb290RW50aXR5U2V0QW5ubm90YXRpb25zLmhhc093blByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFwiKTtcblx0bGV0IHNBY3Rpb25OYW1lO1xuXHRpZiAoYkRyYWZ0Um9vdCkge1xuXHRcdHNBY3Rpb25OYW1lID0gb0VudGl0eVNldC5nZXRPYmplY3QoYCR7cm9vdEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvRWRpdEFjdGlvbmApO1xuXHR9IGVsc2UgaWYgKGJEcmFmdE5vZGUpIHtcblx0XHRzQWN0aW9uTmFtZSA9IG9FbnRpdHlTZXQuZ2V0T2JqZWN0KGAke3Jvb3RFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlL0VkaXRBY3Rpb25gKTtcblx0fSBlbHNlIGlmIChiU3RpY2t5U2Vzc2lvbikge1xuXHRcdHNBY3Rpb25OYW1lID0gb0VudGl0eVNldC5nZXRPYmplY3QoYCR7cm9vdEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZC9FZGl0QWN0aW9uYCk7XG5cdH1cblx0cmV0dXJuICFzQWN0aW9uTmFtZSA/IHNBY3Rpb25OYW1lIDogYCR7cm9vdEVudGl0eVNldFBhdGh9LyR7c0FjdGlvbk5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1JlYWRPbmx5RnJvbVN0YXRpY0Fubm90YXRpb25zID0gZnVuY3Rpb24gKG9Bbm5vdGF0aW9ucz86IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsIG9GaWVsZENvbnRyb2w/OiBzdHJpbmcpOiBib29sZWFuIHtcblx0bGV0IGJDb21wdXRlZCwgYkltbXV0YWJsZSwgYlJlYWRPbmx5O1xuXG5cdGlmIChvQW5ub3RhdGlvbnMgJiYgb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdKSB7XG5cdFx0YkNvbXB1dGVkID0gKG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXSBhcyB7IEJvb2w/OiBzdHJpbmcgfSkuQm9vbFxuXHRcdFx0PyAob0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdIGFzIHsgQm9vbD86IHN0cmluZyB9KS5Cb29sID09IFwidHJ1ZVwiXG5cdFx0XHQ6IHRydWU7XG5cdH1cblx0aWYgKG9Bbm5vdGF0aW9ucyAmJiBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdKSB7XG5cdFx0YkltbXV0YWJsZSA9IChvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdIGFzIHsgQm9vbD86IHN0cmluZyB9KS5Cb29sXG5cdFx0XHQ/IChvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdIGFzIHsgQm9vbD86IHN0cmluZyB9KS5Cb29sID09IFwidHJ1ZVwiXG5cdFx0XHQ6IHRydWU7XG5cdH1cblx0YlJlYWRPbmx5ID0gYkNvbXB1dGVkIHx8IGJJbW11dGFibGU7XG5cblx0aWYgKG9GaWVsZENvbnRyb2wpIHtcblx0XHRiUmVhZE9ubHkgPSBiUmVhZE9ubHkgfHwgb0ZpZWxkQ29udHJvbCA9PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL1JlYWRPbmx5XCI7XG5cdH1cblx0aWYgKGJSZWFkT25seSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IHJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMgPSBmdW5jdGlvbiAob0ZpZWxkQ29udHJvbD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHk7XG5cdGlmIChvRmllbGRDb250cm9sKSB7XG5cdFx0aWYgKEJpbmRpbmdJbmZvLnBhcnNlKG9GaWVsZENvbnRyb2wpKSB7XG5cdFx0XHRzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHkgPSBcIiVcIiArIG9GaWVsZENvbnRyb2wgKyBcIiA9PT0gMSBcIjtcblx0XHR9XG5cdH1cblx0aWYgKHNJc0ZpZWxkQ29udHJvbFBhdGhSZWFkT25seSkge1xuXHRcdHJldHVybiBcIns9IFwiICsgc0lzRmllbGRDb250cm9sUGF0aFJlYWRPbmx5ICsgXCI/IGZhbHNlIDogdHJ1ZSB9XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcblxuLypcbiAqIEZ1bmN0aW9uIHRvIGdldCB0aGUgZXhwcmVzc2lvbiBmb3IgY2hhcnQgVGl0bGUgUHJlc3NcbiAqXG4gKiBAZnVuY3Rpb253XG4gKiBAcGFyYW0ge29Db25maWd1cmF0aW9ufSBbb0NvbmZpZ3VyYXRpb25zXSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZnJvbSBtYW5pZmVzdFxuICogIEBwYXJhbSB7b01hbmlmZXN0fSBbb01hbmlmZXN0XSBPdXRib3VuZHMgZnJvbSBtYW5pZmVzdFxuICogcmV0dXJucyB7U3RyaW5nfSBbc0NvbGxlY3Rpb25OYW1lXSBDb2xsZWN0aW9uIE5hbWUgb2YgdGhlIE1pY3JvIENoYXJ0XG4gKlxuICogcmV0dXJucyB7U3RyaW5nfSBbRXhwcmVzc2lvbl0gSGFuZGxlciBFeHByZXNzaW9uIGZvciB0aGUgdGl0bGUgcHJlc3NcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yTWljcm9DaGFydFRpdGxlUHJlc3MgPSBmdW5jdGlvbiAoXG5cdG9Db25maWd1cmF0aW9uOiBDb250cm9sQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGg6IHN0cmluZyxcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRNb2RlbE9iamVjdDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRvTWFuaWZlc3RPdXRib3VuZDogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5Pixcblx0c0NvbGxlY3Rpb25OYW1lOiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHRhcmdldEFubm90YXRpb25QYXRoID0gZ2V0TWljcm9DaGFydENvbnRyb2xDb25maWd1cmF0aW9uUGF0aCh0YXJnZXRBbm5vdGF0aW9uUGF0aCwgdGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRNb2RlbE9iamVjdCwgc0NvbGxlY3Rpb25OYW1lKTtcblx0Y29uc3QgbmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24gPSAob0NvbmZpZ3VyYXRpb24/Llt0YXJnZXRBbm5vdGF0aW9uUGF0aF0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbik/LltcIm5hdmlnYXRpb25cIl07XG5cdGlmIChuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbikge1xuXHRcdGlmIChcblx0XHRcdChuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdICYmIG5hdmlnYXRpb25Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl1bXCJvdXRib3VuZFwiXSkgfHxcblx0XHRcdChuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdICYmXG5cdFx0XHRcdG5hdmlnYXRpb25Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl1bXCJvdXRib3VuZFwiXSAmJlxuXHRcdFx0XHRuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbltcInRhcmdldFNlY3Rpb25zXCJdKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XCIuaGFuZGxlcnMub25EYXRhUG9pbnRUaXRsZVByZXNzZWQoJGNvbnRyb2xsZXIsICR7JHNvdXJjZT4vfSwnXCIgK1xuXHRcdFx0XHRKU09OLnN0cmluZ2lmeShvTWFuaWZlc3RPdXRib3VuZCkgK1xuXHRcdFx0XHRcIicsJ1wiICtcblx0XHRcdFx0bmF2aWdhdGlvbkNvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXVtcIm91dGJvdW5kXCJdICtcblx0XHRcdFx0XCInLCdcIiArXG5cdFx0XHRcdHNDb2xsZWN0aW9uTmFtZSArXG5cdFx0XHRcdFwiJyApXCJcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbltcInRhcmdldFNlY3Rpb25zXCJdKSB7XG5cdFx0XHRyZXR1cm4gXCIuaGFuZGxlcnMubmF2aWdhdGVUb1N1YlNlY3Rpb24oJGNvbnRyb2xsZXIsICdcIiArIEpTT04uc3RyaW5naWZ5KG5hdmlnYXRpb25Db25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pICsgXCInKVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufTtcblxuLypcbiAqIEZ1bmN0aW9uIHRvIHJlbmRlciBDaGFydCBUaXRsZSBhcyBMaW5rXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge29Db250cm9sQ29uZmlndXJhdGlvbn0gW29Db25maWd1cmF0aW9uc10gY29udHJvbCBjb25maWd1cmF0aW9uIGZyb20gbWFuaWZlc3RcbiAqIHJldHVybnMge1N0cmluZ30gW3NLZXldIEZvciB0aGUgVGFyZ2V0T3V0Ym91bmQgYW5kIFRhcmdldFNlY3Rpb25cbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNaWNyb0NoYXJ0VGl0bGVBc0xpbmsgPSBmdW5jdGlvbiAoXG5cdG9Db250cm9sQ29uZmlndXJhdGlvbjogQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdHRhcmdldEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdHRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3Q6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29sbGVjdGlvbk5hbWU6IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGggPSBnZXRNaWNyb0NoYXJ0Q29udHJvbENvbmZpZ3VyYXRpb25QYXRoKHRhcmdldEFubm90YXRpb25QYXRoLCB0YXJnZXRBbm5vdGF0aW9uUGF0aERhdE1vZGVsT2JqZWN0LCBjb2xsZWN0aW9uTmFtZSk7XG5cdGNvbnN0IHRhcmdldENvbnRyb2xDb25maWd1cmF0aW9uID0gKG9Db250cm9sQ29uZmlndXJhdGlvbj8uW3RhcmdldEFubm90YXRpb25QYXRoXSBhcyBNaWNyb0NoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uKT8uW1wibmF2aWdhdGlvblwiXTtcblx0aWYgKFxuXHRcdHRhcmdldENvbnRyb2xDb25maWd1cmF0aW9uICYmXG5cdFx0KHRhcmdldENvbnRyb2xDb25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl0gfHxcblx0XHRcdCh0YXJnZXRDb250cm9sQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdICYmIHRhcmdldENvbnRyb2xDb25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pKVxuXHQpIHtcblx0XHRyZXR1cm4gXCJFeHRlcm5hbFwiO1xuXHR9IGVsc2UgaWYgKHRhcmdldENvbnRyb2xDb25maWd1cmF0aW9uICYmIHRhcmdldENvbnRyb2xDb25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pIHtcblx0XHRyZXR1cm4gXCJJblBhZ2VcIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNaWNyb0NoYXJ0Q29udHJvbENvbmZpZ3VyYXRpb25QYXRoID0gZnVuY3Rpb24gKFxuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aDogc3RyaW5nLFxuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aERhdE1vZGVsT2JqZWN0OiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbGxlY3Rpb25OYW1lOiBzdHJpbmdcbik6IHN0cmluZyB7XG5cdGlmICh0YXJnZXRBbm5vdGF0aW9uUGF0aERhdE1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRUeXBlXCIpIHtcblx0XHR0YXJnZXRBbm5vdGF0aW9uUGF0aCA9IHRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3QudGFyZ2V0T2JqZWN0Py5WaXN1YWxpemF0aW9uc1swXT8udmFsdWU7XG5cdFx0dGFyZ2V0QW5ub3RhdGlvblBhdGggPSBjb2xsZWN0aW9uTmFtZSA/IGAke2NvbGxlY3Rpb25OYW1lfS8ke3RhcmdldEFubm90YXRpb25QYXRofWAgOiB0YXJnZXRBbm5vdGF0aW9uUGF0aDtcblx0fVxuXHRyZXR1cm4gdGFyZ2V0QW5ub3RhdGlvblBhdGg7XG59O1xuXG4vKiBHZXQgZ3JvdXBJZCBmcm9tIGNvbnRyb2wgY29uZmlndXJhdGlvblxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFtvQ29uZmlndXJhdGlvbnNdIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmcm9tIG1hbmlmZXN0XG4gKiBAcGFyYW0ge1N0cmluZ30gW3NBbm5vdGF0aW9uUGF0aF0gQW5ub3RhdGlvbiBQYXRoIGZvciB0aGUgY29uZmlndXJhdGlvblxuICogQGRlc2NyaXB0aW9uIFVzZWQgdG8gZ2V0IHRoZSBncm91cElkIGZvciBEYXRhUG9pbnRzIGFuZCBNaWNyb0NoYXJ0cyBpbiB0aGUgSGVhZGVyLlxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEdyb3VwSWRGcm9tQ29uZmlnID0gZnVuY3Rpb24gKFxuXHRvQ29uZmlndXJhdGlvbnM6IENvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRzQW5ub3RhdGlvblBhdGg6IHN0cmluZyxcblx0c0RlZmF1bHRHcm91cElkPzogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzQW5ub3RhdGlvblBhdGhdIGFzIE1pY3JvQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFx0YUF1dG9QYXR0ZXJucyA9IFtcIkhlcm9lc1wiLCBcIkRlY29yYXRpb25cIiwgXCJXb3JrZXJzXCIsIFwiTG9uZ1J1bm5lcnNcIl07XG5cdGxldCBzR3JvdXBJZCA9IHNEZWZhdWx0R3JvdXBJZDtcblx0aWYgKFxuXHRcdG9Db25maWd1cmF0aW9uICYmXG5cdFx0b0NvbmZpZ3VyYXRpb24ucmVxdWVzdEdyb3VwSWQgJiZcblx0XHRhQXV0b1BhdHRlcm5zLnNvbWUoZnVuY3Rpb24gKGF1dG9QYXR0ZXJuOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBhdXRvUGF0dGVybiA9PT0gb0NvbmZpZ3VyYXRpb24ucmVxdWVzdEdyb3VwSWQ7XG5cdFx0fSlcblx0KSB7XG5cdFx0c0dyb3VwSWQgPSBcIiRhdXRvLlwiICsgb0NvbmZpZ3VyYXRpb24ucmVxdWVzdEdyb3VwSWQ7XG5cdH1cblx0cmV0dXJuIHNHcm91cElkO1xufTtcblxuLyoqXG4gKiBHZXRzIGdyb3VwSWQgZnJvbSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZm9yIG1pY3JvIGNoYXJ0LlxuICogQHBhcmFtIG9Db250cm9sQ29uZmlndXJhdGlvbiBDb250cm9sIGNvbmZpZ3VyYXRpb24gZnJvbSBtYW5pZmVzdFxuICogQHBhcmFtIHRhcmdldEFubm90YXRpb25QYXRoIEFubm90YXRpb24gcGF0aCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSB0YXJnZXRBbm5vdGF0aW9uUGF0aERhdGFNb2RlbE9iamVjdCBEYXRhTW9kZWxPYmplY3Qgb2YgQ2hhcnQgb3IgUHJlc2VudGF0aW9uVmFyaWFudFxuICogQHBhcmFtIGNvbGxlY3Rpb25OYW1lIENvbGxlY3Rpb24gTmFtZVxuICogQHBhcmFtIHNEZWZhdWx0R3JvdXBJZCBEZWZhdWx0IEdyb3VwSWRcbiAqIEByZXR1cm5zIEdyb3VwSWQgZm9yIG1pY3JvIGNoYXJ0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRHcm91cElkRnJvbUNvbmZpZ0Zvck1pY3JvQ2hhcnQgPSBmdW5jdGlvbiAoXG5cdG9Db250cm9sQ29uZmlndXJhdGlvbjogQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdHRhcmdldEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdHRhcmdldEFubm90YXRpb25QYXRoRGF0YU1vZGVsT2JqZWN0OiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbGxlY3Rpb25OYW1lOiBzdHJpbmcsXG5cdHNEZWZhdWx0R3JvdXBJZD86IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGggPSBnZXRNaWNyb0NoYXJ0Q29udHJvbENvbmZpZ3VyYXRpb25QYXRoKHRhcmdldEFubm90YXRpb25QYXRoLCB0YXJnZXRBbm5vdGF0aW9uUGF0aERhdGFNb2RlbE9iamVjdCwgY29sbGVjdGlvbk5hbWUpO1xuXHRyZXR1cm4gZ2V0R3JvdXBJZEZyb21Db25maWcob0NvbnRyb2xDb25maWd1cmF0aW9uLCB0YXJnZXRBbm5vdGF0aW9uUGF0aCwgc0RlZmF1bHRHcm91cElkKTtcbn07XG5cbi8qXG4gKiBHZXQgQ29udGV4dCBCaW5kaW5nIHdpdGggZ3JvdXBJZCBmcm9tIGNvbnRyb2wgY29uZmlndXJhdGlvblxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFtvQ29uZmlndXJhdGlvbnNdIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmcm9tIG1hbmlmZXN0XG4gKiBAcGFyYW0ge1N0cmluZ30gW3NLZXldIEFubm90YXRpb24gUGF0aCBmb3Igb2YgdGhlIGNvbmZpZ3VyYXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVc2VkIHRvIGdldCB0aGUgYmluZGluZyBmb3IgRGF0YVBvaW50cyBpbiB0aGUgSGVhZGVyLlxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoR3JvdXBJZEZyb21Db25maWcgPSBmdW5jdGlvbiAob0NvbmZpZ3VyYXRpb25zOiBDb250cm9sQ29uZmlndXJhdGlvbiwgc0tleTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc0dyb3VwSWQgPSBnZXRHcm91cElkRnJvbUNvbmZpZyhvQ29uZmlndXJhdGlvbnMsIHNLZXkpO1xuXHRsZXQgc0JpbmRpbmc7XG5cdGlmIChzR3JvdXBJZCkge1xuXHRcdHNCaW5kaW5nID0gXCJ7IHBhdGggOiAnJywgcGFyYW1ldGVycyA6IHsgJCRncm91cElkIDogJ1wiICsgc0dyb3VwSWQgKyBcIicgfSB9XCI7XG5cdH1cblx0cmV0dXJuIHNCaW5kaW5nO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIG5hdmlnYXRpb25QYXRoXG4gKiBAcmV0dXJucyBUaGUgQmluZGluZyBleHByZXNzaW9uIGluY2x1ZGluZyBwYXRoIGFuZCAkc2VsZWN0IHF1ZXJ5IGFzIHBhcmFtZXRlciBkZXBlbmRpbmcgb24gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUJpbmRpbmdGb3JBbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzID0gZnVuY3Rpb24gKGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RmFjZXQ+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFkYXRhTW9kZWxPYmplY3RQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRsZXQgYmluZGluZzogUGFydGlhbDxQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5kZWZpbmVkPj4gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IGFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMgPSBNb2RlbEhlbHBlci5nZXRBbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGUsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldFxuXHQpO1xuXG5cdGlmIChhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzPy5sZW5ndGgpIHtcblx0XHRiaW5kaW5nID0ge1xuXHRcdFx0cGF0aDogXCJcIlxuXHRcdH07XG5cdFx0YmluZGluZy5wYXJhbWV0ZXJzID0geyAkc2VsZWN0OiBhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzLmpvaW4oXCIsXCIpIHx8IFwiXCIgfTtcblx0fVxuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYmluZGluZyk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGEgRmllbGRHcm91cCBjb25zaXN0cyBvZiBvbmx5IDEgRGF0YUZpZWxkIHdpdGggTXVsdGlMaW5lIHRleHQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBhRm9ybUVsZW1lbnRzIEEgY29sbGVjdGlvbiBvZiBmb3JtIGVsZW1lbnRzIHVzZWQgaW4gdGhlIGN1cnJlbnQgZmllbGQgZ3JvdXBcbiAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBvbmx5IDEgZGF0YSBmaWVsZCB3aXRoIE11bHRpbGluZSB0ZXh0IGFubm90YXRpb24gZXhpc3RzLlxuICovXG5leHBvcnQgY29uc3QgZG9lc0ZpZWxkR3JvdXBDb250YWluT25seU9uZU11bHRpTGluZURhdGFGaWVsZCA9IGZ1bmN0aW9uIChhRm9ybUVsZW1lbnRzOiBBbm5vdGF0aW9uRm9ybUVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUZvcm1FbGVtZW50cyAmJiBhRm9ybUVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAhIWFGb3JtRWxlbWVudHNbMF0uaXNWYWx1ZU11bHRpbGluZVRleHQ7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gdmlld0RhdGEgU3BlY2lmaWVzIHRoZSBWaWV3RGF0YSBtb2RlbFxuICogQHJldHVybnMgRXhwcmVzc2lvbiBvciBCb29sZWFuIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTaGFyZUJ1dHRvblZpc2liaWxpdHkgPSBmdW5jdGlvbiAodmlld0RhdGE6IFZpZXdEYXRhKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAodmlld0RhdGEuaXNTaGFyZUJ1dHRvblZpc2libGVGb3JNeUluYm94ID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBcImZhbHNlXCI7XG5cdH1cblx0Y29uc3Qgc2hhcmVCdXR0b25WaXNpYmlsaXR5RXhwID0gdmlld0RhdGEuZmNsRW5hYmxlZFxuXHRcdD8gYW5kKHBhdGhJbk1vZGVsKFwiL3Nob3dTaGFyZUljb25cIiwgXCJmY2xoZWxwZXJcIiksIG5vdChVSS5Jc0NyZWF0ZU1vZGUpKVxuXHRcdDogbm90KFVJLklzQ3JlYXRlTW9kZSk7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihzaGFyZUJ1dHRvblZpc2liaWxpdHlFeHApO1xufTtcblxuLypcbiAqIEdldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGhlYWRlciBpbmZvIGluIGVkaXQgbW9kZVxuICpcbiAqIElmIGVpdGhlciB0aGUgdGl0bGUgb3IgZGVzY3JpcHRpb24gZmllbGQgZnJvbSB0aGUgaGVhZGVyIGFubm90YXRpb25zIGFyZSBlZGl0YWJsZSwgdGhlbiB0aGVcbiAqIGVkaXRhYmxlIGhlYWRlciBpbmZvIGlzIHZpc2libGUuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gW29Bbm5vdGF0aW9uc10gQW5ub3RhdGlvbnMgb2JqZWN0IGZvciBnaXZlbiBlbnRpdHkgc2V0XG4gKiBAcGFyYW0ge29iamVjdH0gW29GaWVsZENvbnRyb2xdIGZpZWxkIGNvbnRyb2xcbiAqIHJldHVybnMgeyp9ICBiaW5kaW5nIGV4cHJlc3Npb24gb3IgYm9vbGVhbiB2YWx1ZSByZXNvbHZlZCBmb3JtIGZ1bmNpdG9ucyBpc1JlYWRPbmx5RnJvbVN0YXRpY0Fubm90YXRpb25zIGFuZCBpc1JlYWRPbmx5RnJvbUR5bmFtaWNBbm5vdGF0aW9uc1xuICovXG5leHBvcnQgY29uc3QgZ2V0VmlzaWJsaXR5T2ZIZWFkZXJJbmZvID0gZnVuY3Rpb24gKFxuXHRvVGl0bGVBbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyxcblx0b0Rlc2NyaXB0aW9uQW5ub3RhdGlvbnM6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdG9GaWVsZFRpdGxlRmllbGRDb250cm9sPzogc3RyaW5nLFxuXHRvRmllbGREZXNjcmlwdGlvbkZpZWxkQ29udHJvbD86IHN0cmluZ1xuKTogYm9vbGVhbiB8IHN0cmluZyB7XG5cdC8vIENoZWNrIEFubm90YXRpb25zIGZvciBUaXRsZSBGaWVsZFxuXHQvLyBTZXQgdG8gdHJ1ZSBhbmQgZG9uJ3QgdGFrZSBpbnRvIGFjY291bnQsIGlmIHRoZXJlIGFyZSBubyBhbm5vdGF0aW9ucywgaS5lLiBubyB0aXRsZSBleGlzdHNcblx0Y29uc3QgYklzVGl0bGVSZWFkT25seSA9IG9UaXRsZUFubm90YXRpb25zID8gaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyhvVGl0bGVBbm5vdGF0aW9ucywgb0ZpZWxkVGl0bGVGaWVsZENvbnRyb2wpIDogdHJ1ZTtcblx0Y29uc3QgdGl0bGVFeHByZXNzaW9uID0gcmVhZE9ubHlFeHByZXNzaW9uRnJvbUR5bmFtaWNBbm5vdGF0aW9ucyhvRmllbGRUaXRsZUZpZWxkQ29udHJvbCk7XG5cdC8vIFRoZXJlIGlzIG5vIGV4cHJlc3Npb24gYW5kIHRoZSB0aXRsZSBpcyBub3QgcmVhZHkgb25seSwgdGhpcyBpcyBzdWZmaWNpZW50IGZvciBhbiBlZGl0YWJsZSBoZWFkZXJcblx0aWYgKCFiSXNUaXRsZVJlYWRPbmx5ICYmICF0aXRsZUV4cHJlc3Npb24pIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIENoZWNrIEFubm90YXRpb25zIGZvciBEZXNjcmlwdGlvbiBGaWVsZFxuXHQvLyBTZXQgdG8gdHJ1ZSBhbmQgZG9uJ3QgdGFrZSBpbnRvIGFjY291bnQsIGlmIHRoZXJlIGFyZSBubyBhbm5vdGF0aW9ucywgaS5lLiBubyBkZXNjcmlwdGlvbiBleGlzdHNcblx0Y29uc3QgYklzRGVzY3JpcHRpb25SZWFkT25seSA9IG9EZXNjcmlwdGlvbkFubm90YXRpb25zXG5cdFx0PyBpc1JlYWRPbmx5RnJvbVN0YXRpY0Fubm90YXRpb25zKG9EZXNjcmlwdGlvbkFubm90YXRpb25zLCBvRmllbGREZXNjcmlwdGlvbkZpZWxkQ29udHJvbClcblx0XHQ6IHRydWU7XG5cdGNvbnN0IGRlc2NyaXB0aW9uRXhwcmVzc2lvbiA9IHJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMob0ZpZWxkRGVzY3JpcHRpb25GaWVsZENvbnRyb2wpO1xuXHQvLyBUaGVyZSBpcyBubyBleHByZXNzaW9uIGFuZCB0aGUgZGVzY3JpcHRpb24gaXMgbm90IHJlYWR5IG9ubHksIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYW4gZWRpdGFibGUgaGVhZGVyXG5cdGlmICghYklzRGVzY3JpcHRpb25SZWFkT25seSAmJiAhZGVzY3JpcHRpb25FeHByZXNzaW9uKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBCb3RoIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBhcmUgbm90IGVkaXRhYmxlIGFuZCB0aGVyZSBhcmUgbm8gZHluYW1pYyBhbm5vdGF0aW9uc1xuXHRpZiAoYklzVGl0bGVSZWFkT25seSAmJiBiSXNEZXNjcmlwdGlvblJlYWRPbmx5ICYmICF0aXRsZUV4cHJlc3Npb24gJiYgIWRlc2NyaXB0aW9uRXhwcmVzc2lvbikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIE5vdyBjb21iaW5lIGV4cHJlc3Npb25zXG5cdGlmICh0aXRsZUV4cHJlc3Npb24gJiYgIWRlc2NyaXB0aW9uRXhwcmVzc2lvbikge1xuXHRcdHJldHVybiB0aXRsZUV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAoIXRpdGxlRXhwcmVzc2lvbiAmJiBkZXNjcmlwdGlvbkV4cHJlc3Npb24pIHtcblx0XHRyZXR1cm4gZGVzY3JpcHRpb25FeHByZXNzaW9uO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21iaW5lVGl0bGVBbmREZXNjcmlwdGlvbkV4cHJlc3Npb24ob0ZpZWxkVGl0bGVGaWVsZENvbnRyb2wsIG9GaWVsZERlc2NyaXB0aW9uRmllbGRDb250cm9sKTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVUaXRsZUFuZERlc2NyaXB0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChvVGl0bGVGaWVsZENvbnRyb2w/OiBzdHJpbmcsIG9EZXNjcmlwdGlvbkZpZWxkQ29udHJvbD86IHN0cmluZyk6IHN0cmluZyB7XG5cdC8vIElmIGJvdGggaGVhZGVyIGFuZCB0aXRsZSBmaWVsZCBhcmUgYmFzZWQgb24gZHlubWFpYyBmaWVsZCBjb250cm9sLCB0aGUgZWRpdGFibGUgaGVhZGVyXG5cdC8vIGlzIHZpc2libGUgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGlzIG5vdCByZWFkeSBvbmx5XG5cdHJldHVybiBcIns9ICVcIiArIG9UaXRsZUZpZWxkQ29udHJvbCArIFwiID09PSAxID8gKCAlXCIgKyBvRGVzY3JpcHRpb25GaWVsZENvbnRyb2wgKyBcIiA9PT0gMSA/IGZhbHNlIDogdHJ1ZSApIDogdHJ1ZSB9XCI7XG59O1xuXG4vKlxuICogR2V0IEV4cHJlc3Npb24gb2YgcHJlc3MgZXZlbnQgZm9yIHRoZSBkZWxldGUgYnV0dG9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIGVudGl0eVNldCBUaGUgY3VycmVudCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gY29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogcmV0dXJucyBUaGUgZnVuY3Rpb24gc3RyaW5nIGdlbmVyYXRlZCBmcm9tIHRoZSBDb21tb25IZWxwZXIncyBtZXRob2QgZ2VuZXJhdGVGdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJlc3NFeHByZXNzaW9uRm9yRGVsZXRlID0gZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdGNvbnN0IGRlbGV0YWJsZUNvbnRleHRzID0gXCIkeyR2aWV3Pi99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHR0aXRsZSA9IFwiJHskdmlldz4vfS5ieUlkKCdmZTo6T2JqZWN0UGFnZScpLmRhdGEoJ09iamVjdFBhZ2VTdWJ0aXRsZScpXCIsXG5cdFx0ZGVzY3JpcHRpb24gPSBcIiR7JHZpZXc+L30uYnlJZCgnZmU6Ok9iamVjdFBhZ2UnKS5kYXRhKCdPYmplY3RQYWdlRGVzY3JpcHRpb24nKVwiO1xuXG5cdGNvbnN0IHBhcmFtcyA9IHtcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG5cdH07XG5cdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcIi5lZGl0Rmxvdy5kZWxldGVEb2N1bWVudFwiLCBkZWxldGFibGVDb250ZXh0cywgQ29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKHBhcmFtcykpO1xufTtcblxuLypcbiAqIEdldCBFeHByZXNzaW9uIG9mIHByZXNzIGV2ZW50IG9mIEVkaXQgYnV0dG9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtvYmplY3R9IFtvRGF0YUZpZWxkXSBEYXRhIGZpZWxkIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFtzRW50aXR5U2V0TmFtZV0gRW50aXR5IHNldCBuYW1lXG4gKiBAcGFyYW0ge29iamVjdH0gW29IZWFkZXJBY3Rpb25dIEhlYWRlciBhY3Rpb24gb2JqZWN0XG4gKiByZXR1cm5zIHtzdHJpbmd9ICBiaW5kaW5nIGV4cHJlc3Npb24gLyBmdW5jdGlvbiBzdHJpbmcgZ2VuZXJhdGVkIGZyb20gY29tbWFuaGVscGVyJ3MgZnVuY3Rpb24gZ2VuZXJhdGVGdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJlc3NFeHByZXNzaW9uRm9yRWRpdCA9IGZ1bmN0aW9uIChcblx0b0RhdGFGaWVsZDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24+LFxuXHRzRW50aXR5U2V0TmFtZTogc3RyaW5nLFxuXHRvSGVhZGVyQWN0aW9uPzogQmFzZUFjdGlvblxuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0VkaXRhYmxlQ29udGV4dHMgPSBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQgJiYgb0RhdGFGaWVsZC5BY3Rpb24hKSxcblx0XHRzRGF0YUZpZWxkRW51bU1lbWJlciA9XG5cdFx0XHRvRGF0YUZpZWxkICYmXG5cdFx0XHRvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyAmJlxuXHRcdFx0KG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPilbXCIkRW51bU1lbWJlclwiXSxcblx0XHRzSW52b2NhdGlvbkdyb3VwID0gc0RhdGFGaWVsZEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiID8gXCJDaGFuZ2VTZXRcIiA6IFwiSXNvbGF0ZWRcIjtcblx0Y29uc3Qgb1BhcmFtcyA9IHtcblx0XHRjb250ZXh0czogXCIkeyR2aWV3Pi99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHRlbnRpdHlTZXROYW1lOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNFbnRpdHlTZXROYW1lKSxcblx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0ludm9jYXRpb25Hcm91cCksXG5cdFx0bW9kZWw6IFwiJHskc291cmNlPi99LmdldE1vZGVsKClcIixcblx0XHRsYWJlbDogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkICYmIG9EYXRhRmllbGQuTGFiZWwhLCB0cnVlKSxcblx0XHRpc05hdmlnYWJsZTogb0hlYWRlckFjdGlvbiAmJiBvSGVhZGVyQWN0aW9uLmlzTmF2aWdhYmxlLFxuXHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjpcblx0XHRcdG9IZWFkZXJBY3Rpb24gJiYgb0hlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24gPyBgJyR7b0hlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb259J2AgOiB1bmRlZmluZWQsXG5cdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nOiBvSGVhZGVyQWN0aW9uPy5kaXNhYmxlU3RyaWN0SGFuZGxpbmdcblx0fTtcblx0cmV0dXJuIENvbW1vbkhlbHBlci5nZW5lcmF0ZUZ1bmN0aW9uKFwiLmhhbmRsZXJzLm9uQ2FsbEFjdGlvblwiLCBcIiR7JHZpZXc+L31cIiwgc0VkaXRhYmxlQ29udGV4dHMsIENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhvUGFyYW1zKSk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSAncHJlc3MnIGV2ZW50IGluIHRoZSBmb290ZXIgYW5ub3RhdGlvbiBhY3Rpb25zLlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgZGF0YSBtb2RlbCBwYXRoIG9mIHRoZSBkYXRhIGZpZWxkXG4gKiBAcGFyYW0gZW50aXR5U2V0TmFtZSBUaGUgZW50aXR5IHNldCBuYW1lXG4gKiBAcGFyYW0gaGVhZGVyQWN0aW9uIFRoZSBoZWFkZXIgYWN0aW9uIG9iamVjdFxuICogQHJldHVybnMgIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb3IgZnVuY3Rpb24gc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmVzc0V4cHJlc3Npb25Gb3JGb290ZXJBbm5vdGF0aW9uQWN0aW9uID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkRm9yQWN0aW9uPixcblx0ZW50aXR5U2V0TmFtZTogc3RyaW5nLFxuXHRoZWFkZXJBY3Rpb246IEN1c3RvbUFjdGlvblxuKTogc3RyaW5nIHtcblx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBY3Rpb247XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRzID0gQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZyk7XG5cdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0Y29udGV4dHM6IFwiJHskdmlldz4vfS5nZXRCaW5kaW5nQ29udGV4dCgpXCIsXG5cdFx0ZW50aXR5U2V0TmFtZTogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhlbnRpdHlTZXROYW1lKSxcblx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoXG5cdFx0XHRkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIiA/IFwiQ2hhbmdlU2V0XCIgOiBcIklzb2xhdGVkXCJcblx0XHQpLFxuXHRcdG1vZGVsOiBcIiR7JHNvdXJjZT4vfS5nZXRNb2RlbCgpXCIsXG5cdFx0bGFiZWw6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoZGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZywgdHJ1ZSksXG5cdFx0aXNOYXZpZ2FibGU6IGhlYWRlckFjdGlvbi5pc05hdmlnYWJsZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IGhlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdD8gYCcke2hlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb259J2Bcblx0XHRcdDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcIi5oYW5kbGVycy5vbkNhbGxBY3Rpb25cIiwgXCIkeyR2aWV3Pi99XCIsIGFjdGlvbkNvbnRleHRzLCBDb21tb25IZWxwZXIub2JqZWN0VG9TdHJpbmcob1BhcmFtcykpO1xufTtcblxuLypcbiAqIEdldCBFeHByZXNzaW9uIGZvciBleGVjdXRpbmcgdGhlIGV2ZW50IGV4cHJlc3Npb24gb2YgdGhlIHByaW1hcnkgYWN0aW9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtvYmplY3R9IFtvRGF0YUZpZWxkXSBEYXRhIGZpZWxkIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFtzRW50aXR5U2V0TmFtZV0gRW50aXR5IHNldCBuYW1lXG4gKiBAcGFyYW0ge29iamVjdH0gW29IZWFkZXJBY3Rpb25dIEhlYWRlciBhY3Rpb24gb2JqZWN0XG4gKiBAcGFyYW0ge0NvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nfSBUaGUgdmlzaWJpbGl0eSBvZiBzZW1hdGljIHBvc2l0aXZlIGFjdGlvblxuICogQHBhcmFtIHtDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZ30gVGhlIGVuYWJsZW1lbnQgb2Ygc2VtYW50aWMgcG9zaXRpdmUgYWN0aW9uXG4gKiBAcGFyYW0ge0NvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nfSBUaGUgRWRpdCBidXR0b24gdmlzaWJpbGl0eVxuICogQHBhcmFtIHtDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZ30gVGhlIGVuYWJsZW1lbnQgb2YgRWRpdCBidXR0b25cbiAqIHJldHVybnMge3N0cmluZ30gIGJpbmRpbmcgZXhwcmVzc2lvbiAvIGZ1bmN0aW9uIHN0cmluZyBnZW5lcmF0ZWQgZnJvbSBjb21tYW5oZWxwZXIncyBmdW5jdGlvbiBnZW5lcmF0ZUZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmVzc0V4cHJlc3Npb25Gb3JQcmltYXJ5QWN0aW9uID0gZnVuY3Rpb24gKFxuXHRvRGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCB1bmRlZmluZWQsXG5cdHNFbnRpdHlTZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9IZWFkZXJBY3Rpb246IEJhc2VBY3Rpb24gfCBudWxsLFxuXHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nLFxuXHRwb3NpdGl2ZUFjdGlvbkVuYWJsZWQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nLFxuXHRlZGl0QWN0aW9uVmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmcsXG5cdGVkaXRBY3Rpb25FbmFibGVkOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0FjdGlvbkNvbnRleHRzID0gQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkPy5BY3Rpb24udG9TdHJpbmcoKSA/PyBcIlwiKSxcblx0XHRzRGF0YUZpZWxkRW51bU1lbWJlciA9XG5cdFx0XHRvRGF0YUZpZWxkICYmXG5cdFx0XHRvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyAmJlxuXHRcdFx0KG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPilbXCIkRW51bU1lbWJlclwiXSxcblx0XHRzSW52b2NhdGlvbkdyb3VwID0gc0RhdGFGaWVsZEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiID8gXCJDaGFuZ2VTZXRcIiA6IFwiSXNvbGF0ZWRcIjtcblx0Y29uc3Qgb1BhcmFtcyA9IHtcblx0XHRjb250ZXh0czogXCIkeyR2aWV3Pi99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHRlbnRpdHlTZXROYW1lOiBzRW50aXR5U2V0TmFtZSA/IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0VudGl0eVNldE5hbWUpIDogXCJcIixcblx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0ludm9jYXRpb25Hcm91cCksXG5cdFx0bW9kZWw6IFwiJHskc291cmNlPi99LmdldE1vZGVsKClcIixcblx0XHRsYWJlbDogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBcIlwiLCB0cnVlKSxcblx0XHRpc05hdmlnYWJsZTogb0hlYWRlckFjdGlvbj8uaXNOYXZpZ2FibGUsXG5cdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBvSGVhZGVyQWN0aW9uPy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdD8gYCcke29IZWFkZXJBY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9ufSdgXG5cdFx0XHQ6IHVuZGVmaW5lZFxuXHR9O1xuXHRjb25zdCBvQ29uZGl0aW9ucyA9IHtcblx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGUsXG5cdFx0cG9zaXRpdmVBY3Rpb25FbmFibGVkLFxuXHRcdGVkaXRBY3Rpb25WaXNpYmxlLFxuXHRcdGVkaXRBY3Rpb25FbmFibGVkXG5cdH07XG5cdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcblx0XHRcIi5oYW5kbGVycy5vblByaW1hcnlBY3Rpb25cIixcblx0XHRcIiRjb250cm9sbGVyXCIsXG5cdFx0XCIkeyR2aWV3Pi99XCIsXG5cdFx0XCIkeyR2aWV3Pi99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHRzQWN0aW9uQ29udGV4dHMsXG5cdFx0Q29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKG9QYXJhbXMpLFxuXHRcdENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhvQ29uZGl0aW9ucylcblx0KTtcbn07XG5cbi8qXG4gKiBHZXRzIHRoZSBiaW5kaW5nIG9mIHRoZSBjb250YWluZXIgSEJveCBmb3IgdGhlIGhlYWRlciBmYWNldC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb0NvbnRyb2xDb25maWd1cmF0aW9uXSBUaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvcm0gb2YgdGhlIHZpZXdEYXRhIG1vZGVsXG4gKiBAcGFyYW0ge29iamVjdH0gW29IZWFkZXJGYWNldF0gVGhlIG9iamVjdCBvZiB0aGUgaGVhZGVyIGZhY2V0XG4gKiByZXR1cm5zIHsqfSAgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmcm9tIGZ1bmN0aW9uIGdldEJpbmRpbmdXaXRoR3JvdXBJZEZyb21Db25maWcgb3IgdW5kZWZpbmVkLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3Rhc2hhYmxlSEJveEJpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdG9Db250cm9sQ29uZmlndXJhdGlvbjogQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdG9IZWFkZXJGYWNldDogeyBGYWNldDogRmllbGRHcm91cEZhY2V0IH1cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChvSGVhZGVyRmFjZXQgJiYgb0hlYWRlckZhY2V0LkZhY2V0ICYmIG9IZWFkZXJGYWNldC5GYWNldC50YXJnZXRBbm5vdGF0aW9uVHlwZSA9PT0gXCJEYXRhUG9pbnRcIikge1xuXHRcdHJldHVybiBnZXRCaW5kaW5nV2l0aEdyb3VwSWRGcm9tQ29uZmlnKG9Db250cm9sQ29uZmlndXJhdGlvbiwgb0hlYWRlckZhY2V0LkZhY2V0LnRhcmdldEFubm90YXRpb25WYWx1ZSEpO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyRm9ybUhib3hSZW5kZXJUeXBlID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChkYXRhRmllbGQ/LnRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBcIkJhcmVcIjtcbn07XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgYWN0aW9uIGdyb3VwIGhhbmRsZXIgdGhhdCBpcyBpbnZva2VkIHdoZW4gYWRkaW5nIHRoZSBtZW51IGJ1dHRvbiBoYW5kbGluZyBhcHByb3ByaWF0ZWx5LlxuICogQHBhcmFtIG9DdHggVGhlIGN1cnJlbnQgY29udGV4dCBpbiB3aGljaCB0aGUgaGFuZGxlciBpcyBjYWxsZWRcbiAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjdXJyZW50IGFjdGlvbiBjb250ZXh0XG4gKiBAcGFyYW0gb0RhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24gVGhlIGN1cnJlbnQgZGF0YUZpZWxkIGZvciB0aGUgZGVmYXVsdCBhY3Rpb25cbiAqIEBwYXJhbSBkZWZhdWx0QWN0aW9uQ29udGV4dE9yRW50aXR5U2V0IFRoZSBjdXJyZW50IGNvbnRleHQgZm9yIHRoZSBkZWZhdWx0IGFjdGlvblxuICogQHJldHVybnMgVGhlIGFwcHJvcHJpYXRlIGV4cHJlc3Npb24gc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0QWN0aW9uSGFuZGxlcihcblx0b0N0eDogQ29udGV4dCxcblx0b0FjdGlvbjogQ3VzdG9tQWN0aW9uLFxuXHRvRGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbjogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGREZWZhdWx0Pixcblx0ZGVmYXVsdEFjdGlvbkNvbnRleHRPckVudGl0eVNldDogc3RyaW5nXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChvQWN0aW9uLmRlZmF1bHRBY3Rpb24pIHtcblx0XHRjb25zdCBkZWZhdWx0QWN0aW9uID0gb0FjdGlvbi5kZWZhdWx0QWN0aW9uIGFzIEN1c3RvbUFjdGlvbjtcblx0XHR0cnkge1xuXHRcdFx0c3dpdGNoIChkZWZhdWx0QWN0aW9uLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcIkZvckFjdGlvblwiOiB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldFByZXNzRXhwcmVzc2lvbkZvckVkaXQoXG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbj4sXG5cdFx0XHRcdFx0XHRkZWZhdWx0QWN0aW9uQ29udGV4dE9yRW50aXR5U2V0LFxuXHRcdFx0XHRcdFx0b0FjdGlvbi5kZWZhdWx0QWN0aW9uIGFzIEJhc2VBY3Rpb25cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6IHtcblx0XHRcdFx0XHRpZiAoZGVmYXVsdEFjdGlvbi5jb21tYW5kKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJjbWQ6XCIgKyBkZWZhdWx0QWN0aW9uLmNvbW1hbmQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBkZWZhdWx0QWN0aW9uLnByZXNzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRBY3Rpb24uY29tbWFuZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFwiY21kOlwiICsgZGVmYXVsdEFjdGlvbi5jb21tYW5kO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZGVmYXVsdEFjdGlvbi5ub1dyYXApIHtcblx0XHRcdFx0XHRcdHJldHVybiBkZWZhdWx0QWN0aW9uLnByZXNzO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLmJ1aWxkQWN0aW9uV3JhcHBlcihkZWZhdWx0QWN0aW9uLCB7IGlkOiBcImZvclRoZU9iamVjdFBhZ2VcIiB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChpb0V4KSB7XG5cdFx0XHRyZXR1cm4gXCJiaW5kaW5nIGZvciB0aGUgZGVmYXVsdCBhY3Rpb24gaXMgbm90IHdvcmtpbmcgYXMgZXhwZWN0ZWRcIjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgc3ViIHNlY3Rpb24gdmlzdWFsaXphdGlvbiBpcyBwYXJ0IG9mIHByZXZpZXcuXG4gKiBAcGFyYW0gc3ViU2VjdGlvbiBUaGUgc3ViIHNlY3Rpb24gdmlzdWFsaXphdGlvblxuICogQHJldHVybnMgQSBCb29sZWFuIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Zpc3VhbGl6YXRpb25Jc1BhcnRPZlByZXZpZXcoc3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uKTogYm9vbGVhbiB7XG5cdHJldHVybiBzdWJTZWN0aW9uLmlzUGFydE9mUHJldmlldyA9PT0gdHJ1ZSB8fCBzdWJTZWN0aW9uLnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXS50eXBlICE9PSBcIlRhYmxlXCI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXhwcmVzc2lvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgZm9vdGVyIG9mIHRoZSBvYmplY3QgcGFnZSBpcyB0byBiZSB2aXNpYmxlIG9yIG5vdC5cbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGUgZm9ybWF0dGVyLlxuICogQHBhcmFtIGZvb3RlckFjdGlvbnMgVGhlIGxpc3Qgb2YgZm9vdGVyIGFjdGlvbnMuXG4gKiBAcmV0dXJucyBBIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9vdGVyVmlzaWJpbGl0eUV4cHJlc3Npb25JbnRlcm5hbCA9IGZ1bmN0aW9uIChcblx0Y29udGV4dDogSUNvbnRleHQsXG5cdGZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblxuXHRjb25zdCBfZ2VuZXJhdGVCaW5kaW5nc0ZvckFjdGlvbnMgPSAoYWN0aW9uczogQmFzZUFjdGlvbltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPT4ge1xuXHRcdGlmIChhY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGFjdGlvbnMubWFwKFxuXHRcdFx0XHQoYWN0aW9uKSA9PlxuXHRcdFx0XHRcdGFjdGlvbi52aXNpYmxlRXhwcmVzc2lvbiA/P1xuXHRcdFx0XHRcdChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24udmlzaWJsZSA/PyB0cnVlLCBcImJvb2xlYW5cIikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIFtjb25zdGFudChmYWxzZSldO1xuXHR9O1xuXG5cdGNvbnN0IGdldEFjdGlvbk1vZGVsUGF0aCA9IChhY3Rpb246IEJhc2VBY3Rpb24pOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEZvckFjdGlvbj4gfCB1bmRlZmluZWQgPT4ge1xuXHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gYWN0aW9uLmFubm90YXRpb25QYXRoO1xuXHRcdGlmIChhbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRDb250ZXh0KGFubm90YXRpb25QYXRoKTtcblx0XHRcdHJldHVybiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkRm9yQWN0aW9uPihhY3Rpb25Db250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fTtcblxuXHQvLyBBY3Rpb25zIGFyZSBjb21pbmcgZnJvbSB0aGUgY29udmVydGVyIHNvIG9ubHkgZGV0ZXJtaW5pbmcgYWN0aW9ucyBhbmQgbm90IHN0YXRpY2FsbHkgaGlkZGVuIGFyZSBsaXN0ZWRcblx0Y29uc3QgZGV0ZXJtaW5pbmdBY3Rpb25zID0gZm9vdGVyQWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uKTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25CaW5kaW5ncyA9IF9nZW5lcmF0ZUJpbmRpbmdzRm9yQWN0aW9ucyhmb290ZXJBY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBpc01hbmlmZXN0QWN0aW9uKGFjdGlvbikpKTtcblx0Y29uc3QgZGV0ZXJtaW5pbmdBY3Rpb25CaW5kaW5ncyA9IF9nZW5lcmF0ZUJpbmRpbmdzRm9yQWN0aW9ucyhkZXRlcm1pbmluZ0FjdGlvbnMpO1xuXG5cdGNvbnN0IGlzTm90SGlkZGVuRGV0ZXJtaW5pbmdBY3Rpb24gPSAhIWRldGVybWluaW5nQWN0aW9ucy5maW5kKChhY3Rpb24pID0+IHtcblx0XHRjb25zdCBhY3Rpb25Db250ZXh0TW9kZWxQYXRoID0gZ2V0QWN0aW9uTW9kZWxQYXRoKGFjdGlvbik7XG5cdFx0cmV0dXJuICFhY3Rpb25Db250ZXh0TW9kZWxQYXRoPy50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHR9KTtcblxuXHRyZXR1cm4gb3IoXG5cdFx0aXNOb3RIaWRkZW5EZXRlcm1pbmluZ0FjdGlvbixcblx0XHRvciguLi5tYW5pZmVzdEFjdGlvbkJpbmRpbmdzKSxcblx0XHRhbmQob3IoVUkuSXNFZGl0YWJsZSwgb3IoLi4uZGV0ZXJtaW5pbmdBY3Rpb25CaW5kaW5ncykpLCBub3QocGF0aEluTW9kZWwoXCJpc0NyZWF0ZURpYWxvZ09wZW5cIiwgXCJpbnRlcm5hbFwiKSkpXG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cHJlc3Npb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZvb3RlciBvZiB0aGUgb2JqZWN0IHBhZ2UgaXMgdG8gYmUgdmlzaWJsZSBvciBub3QuXG4gKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBmb3IgdGhlIGZvcm1hdHRlci5cbiAqIEBwYXJhbSBmb290ZXJBY3Rpb25zIFRoZSBsaXN0IG9mIGZvb3RlciBhY3Rpb25zLlxuICogQHJldHVybnMgQSBjb21waWxlZCBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZvb3RlclZpc2liaWxpdHlFeHByZXNzaW9uID0gZnVuY3Rpb24gKGNvbnRleHQ6IElDb250ZXh0LCBmb290ZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRGb290ZXJWaXNpYmlsaXR5RXhwcmVzc2lvbkludGVybmFsKGNvbnRleHQsIGZvb3RlckFjdGlvbnMpKTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBzdWJzZWN0aW9uIGhlYWRlciBsZXZlbC5cbiAqIEBwYXJhbSBzdWJTZWN0aW9uIFRoZSBzdWJzZWN0aW9uIHZpc3VhbGl6YXRpb25cbiAqIEBwYXJhbSBpc01vcmVDb250ZW50XG4gKiBAcmV0dXJucyBBIFN0cmluZyB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyTGV2ZWwoc3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLCBpc01vcmVDb250ZW50OiBib29sZWFuKTogc3RyaW5nIHtcblx0aWYgKGlzTW9yZUNvbnRlbnQpIHtcblx0XHRpZiAoIXN1YlNlY3Rpb24uc2hvd1N1YlNlY3Rpb25UaXRsZSkge1xuXHRcdFx0Ly8gd2hlbmV2ZXIgdGl0bGUgaXMgbWVyZ2VkIGZvciBzdWItc2VjdGlvbiwgbGV2ZWwgc2hvdWxkIGJlIEg0XG5cdFx0XHRyZXR1cm4gXCJINFwiO1xuXHRcdH0gZWxzZSBpZiAoc3ViU2VjdGlvbi5sZXZlbCA9PT0gMiAmJiBzdWJTZWN0aW9uLmRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlID09PSBcInRydWVcIikge1xuXHRcdFx0Ly8gcmV0YWluIG9sZCBsb2dpY1xuXHRcdFx0cmV0dXJuIFwiSDZcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiSDVcIjsgLy8gcmV0YWluIG9sZCBsb2dpY1xuXHRcdH1cblx0fSBlbHNlIGlmICghc3ViU2VjdGlvbi5zaG93U3ViU2VjdGlvblRpdGxlKSB7XG5cdFx0Ly8gd2hlbmV2ZXIgdGl0bGUgaXMgbWVyZ2VkIGZvciBzZWN0aW9uLCBsZXZlbCBzaG91bGQgYmUgSDNcblx0XHRyZXR1cm4gXCJIM1wiO1xuXHR9IGVsc2UgaWYgKHN1YlNlY3Rpb24ubGV2ZWwgPT09IDIgJiYgc3ViU2VjdGlvbi5kYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSA9PT0gXCJ0cnVlXCIpIHtcblx0XHQvLyByZXRhaW4gb2xkIGxvZ2ljXG5cdFx0cmV0dXJuIFwiSDVcIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJINFwiOyAvLyByZXRhaW4gb2xkIGxvZ2ljXG5cdH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlIGZvciB0aGUgaGVhZGVyIGZvcm1lbGVtZW50LlxuICogQHBhcmFtIGhlYWRlckZvcm1EYXRhXG4gKiBAcGFyYW0gZm9ybUVsZW1lbnRJZFByZWZpeFxuICogQHJldHVybnMgVGhlIHN0cmluZyBmb3IgdGhlIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEhlYWRlckZvcm1BcmlhTGFiZWxsZWRCeSA9IGZ1bmN0aW9uIChoZWFkZXJGb3JtRGF0YTogSGVhZGVyRm9ybURhdGEsIGZvcm1FbGVtZW50SWRQcmVmaXg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCB0aXRsZUlkID0gXCJcIjtcblx0aWYgKGhlYWRlckZvcm1EYXRhLmxhYmVsKSB7XG5cdFx0dGl0bGVJZCA9IFN0YWJsZUlkSGVscGVyLmdlbmVyYXRlKFtoZWFkZXJGb3JtRGF0YS5pZCwgXCJUaXRsZVwiXSk7XG5cdH1cblx0Y29uc3QgbGFiZWxJZCA9IFN0YWJsZUlkSGVscGVyLmdlbmVyYXRlKFtmb3JtRWxlbWVudElkUHJlZml4LCBcIkxhYmVsXCJdKTtcblx0cmV0dXJuIHRpdGxlSWQgPyBgJHt0aXRsZUlkfSwke2xhYmVsSWR9YCA6IGxhYmVsSWQ7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGFyaWEgdGV4dCBmb3IgZm9ybSByZWdpb25zIG9uIE9iamVjdCBQYWdlLlxuICogQHBhcmFtIHN1YlNlY3Rpb25UaXRsZSBUaGUgdGl0bGUgb2YgdGhlIHN1YnNlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBhcmlhIHRleHQgZm9yIHRoZSBmb3JtIHJlZ2lvblxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9ybUFyaWFUZXh0ID0gZnVuY3Rpb24gKHN1YlNlY3Rpb25UaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRyZXR1cm4gc3ViU2VjdGlvblRpdGxlICE9PSB1bmRlZmluZWQgPyByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19GT1JNX0FSSUFfVEVYVFwiLCBbc3ViU2VjdGlvblRpdGxlXSkgOiB1bmRlZmluZWQ7XG59O1xuXG5nZXRGb290ZXJWaXNpYmlsaXR5RXhwcmVzc2lvbi5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5REEsTUFBTUEsVUFBVSxHQUFHQyxRQUFRLENBQUNELFVBQVU7RUFFL0IsTUFBTUUscUJBQXFCLEdBQUcsU0FBQUEsQ0FDcENDLGVBQTJELEVBQzNEQyxRQUFrQixFQUNsQkMsVUFBMkIsRUFDUTtJQUNuQyxPQUFPQyx5QkFBeUIsQ0FDL0JILGVBQWUsRUFDZkksd0JBQXdCLEVBQ3hCQyxTQUFTLEVBQ1RILFVBQVUsRUFDVkQsUUFDRCxDQUFDO0VBQ0YsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BSyxRQUFBLENBQUFQLHFCQUFBLEdBQUFBLHFCQUFBO0VBT08sTUFBTVEsMkJBQTJCLEdBQUcsU0FBQUEsQ0FDMUNQLGVBQStDLEVBQy9DUSxXQUE0QixFQUNPO0lBQ25DLElBQUlDLGtCQUFrQixHQUFHQywyQkFBMkIsQ0FBRUYsV0FBVyxFQUFFRyxXQUFXLEVBQXFCQyxLQUFLLENBQUM7SUFDekcsSUFBS0osV0FBVyxFQUFFRyxXQUFXLEVBQXFCQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUYsV0FBVyxFQUFFRyxFQUFFLEVBQUVDLGVBQWUsRUFBRTtNQUM5SDtNQUNBVCxrQkFBa0IsR0FBR1Us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
|
|
748
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwibUxpYnJhcnkiLCJnZXRFeHByZXNzaW9uRm9yVGl0bGUiLCJmdWxsQ29udGV4dFBhdGgiLCJ2aWV3RGF0YSIsImhlYWRlckluZm8iLCJnZXRUaXRsZUJpbmRpbmdFeHByZXNzaW9uIiwiZ2V0VGV4dEJpbmRpbmdFeHByZXNzaW9uIiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJnZXRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24iLCJvSGVhZGVySW5mbyIsImRlc2NyaXB0aW9uQmluZGluZyIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIkRlc2NyaXB0aW9uIiwiVmFsdWUiLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJUZXh0IiwiVUkiLCJUZXh0QXJyYW5nZW1lbnQiLCJhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uIiwiZGVzY3JpcHRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImZvcm1hdFZhbHVlUmVjdXJzaXZlbHkiLCJnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiIsIm9WaWV3RGF0YSIsInNhdmVCdXR0b25UZXh0IiwicmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJjcmVhdGVCdXR0b25UZXh0Iiwic2F2ZUV4cHJlc3Npb24iLCJzdGFydGluZ0VudGl0eVNldCIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiaWZFbHNlIiwiSXNDcmVhdGVNb2RlIiwiRHJhZnQiLCJJc05ld09iamVjdCIsImdldEV4cHJlc3Npb25Gb3JMYWJlbE9uSGVhZGVyRm9ybSIsImxhYmVsIiwiaXNNYW5pZmVzdEFjdGlvbiIsImFjdGlvbiIsIm5vbk1hbmlmZXN0QWN0aW9ucyIsImluY2x1ZGVzIiwidHlwZSIsImJ1aWxkQ3JpdGljYWxpdHlWaXNpYmxlRnJvbUlkZW50aWZpY2F0aW9uRXhwcmVzc2lvbiIsImRhdGFDb250ZXh0UGF0aCIsImlkZW50aWZpY2F0aW9uIiwidGFyZ2V0RW50aXR5VHlwZSIsIklkZW50aWZpY2F0aW9uIiwiZGF0YUZpZWxkc1dpdGhDcml0aWNhbGl0eSIsImZpbHRlciIsImRhdGFGaWVsZCIsIiRUeXBlIiwiQ3JpdGljYWxpdHkiLCJsZW5ndGgiLCJjb25zdGFudCIsIm9yIiwibWFwIiwibm90IiwiZXF1YWwiLCJIaWRkZW4iLCJidWlsZEVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uIiwiY3JpdGljYWxpdHlWaXNpYmxlRXhwciIsIkdob3N0IiwiRW1waGFzaXplZCIsImdldEVsZW1lbnRCaW5kaW5nIiwic1BhdGgiLCJzTmF2aWdhdGlvblBhdGgiLCJPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlciIsImdldE5hdmlnYXRpb25QYXRoIiwiY2hlY2tEcmFmdFN0YXRlIiwiZW50aXR5U2V0IiwiRHJhZnRSb290IiwiRWRpdEFjdGlvbiIsIl9maW5kQWN0aW9uIiwiYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIiwic0FjdGlvblR5cGUiLCJvQWN0aW9uIiwiZmluZCIsIm9IZWFkZXJBY3Rpb24iLCJnZXREZWxldGVDb21tYW5kRXhlY3V0aW9uRW5hYmxlZCIsIm9EZWxldGVBY3Rpb24iLCJlbmFibGVkIiwiZ2V0RGVsZXRlQ29tbWFuZEV4ZWN1dGlvblZpc2libGUiLCJ2aXNpYmxlIiwiZ2V0RWRpdENvbW1hbmRFeGVjdXRpb25WaXNpYmxlIiwib0VkaXRBY3Rpb24iLCJnZXRFZGl0Q29tbWFuZEV4ZWN1dGlvbkVuYWJsZWQiLCJnZXRFZGl0QWN0aW9uIiwib0VudGl0eVNldCIsImdldFBhdGgiLCJhUGF0aHMiLCJzcGxpdCIsInJvb3RFbnRpdHlTZXRQYXRoIiwicm9vdEVudGl0eVNldEFubm5vdGF0aW9ucyIsImdldE9iamVjdCIsImJEcmFmdFJvb3QiLCJoYXNPd25Qcm9wZXJ0eSIsImJEcmFmdE5vZGUiLCJiU3RpY2t5U2Vzc2lvbiIsInNBY3Rpb25OYW1lIiwiaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyIsIm9Bbm5vdGF0aW9ucyIsIm9GaWVsZENvbnRyb2wiLCJiQ29tcHV0ZWQiLCJiSW1tdXRhYmxlIiwiYlJlYWRPbmx5IiwiQm9vbCIsInJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMiLCJzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHkiLCJCaW5kaW5nSW5mbyIsInBhcnNlIiwiZ2V0RXhwcmVzc2lvbkZvck1pY3JvQ2hhcnRUaXRsZVByZXNzIiwib0NvbmZpZ3VyYXRpb24iLCJ0YXJnZXRBbm5vdGF0aW9uUGF0aCIsInRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3QiLCJvTWFuaWZlc3RPdXRib3VuZCIsInNDb2xsZWN0aW9uTmFtZSIsImdldE1pY3JvQ2hhcnRDb250cm9sQ29uZmlndXJhdGlvblBhdGgiLCJuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRNaWNyb0NoYXJ0VGl0bGVBc0xpbmsiLCJvQ29udHJvbENvbmZpZ3VyYXRpb24iLCJjb2xsZWN0aW9uTmFtZSIsInRhcmdldENvbnRyb2xDb25maWd1cmF0aW9uIiwidGFyZ2V0T2JqZWN0IiwiVmlzdWFsaXphdGlvbnMiLCJ2YWx1ZSIsImdldEdyb3VwSWRGcm9tQ29uZmlnIiwib0NvbmZpZ3VyYXRpb25zIiwic0Fubm90YXRpb25QYXRoIiwic0RlZmF1bHRHcm91cElkIiwiYUF1dG9QYXR0ZXJucyIsInNHcm91cElkIiwicmVxdWVzdEdyb3VwSWQiLCJzb21lIiwiYXV0b1BhdHRlcm4iLCJnZXRHcm91cElkRnJvbUNvbmZpZ0Zvck1pY3JvQ2hhcnQiLCJ0YXJnZXRBbm5vdGF0aW9uUGF0aERhdGFNb2RlbE9iamVjdCIsImdldEJpbmRpbmdXaXRoR3JvdXBJZEZyb21Db25maWciLCJzS2V5Iiwic0JpbmRpbmciLCJjcmVhdGVCaW5kaW5nRm9yQWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJiaW5kaW5nIiwiYWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsIk1vZGVsSGVscGVyIiwiZ2V0QWx0ZXJuYXRlQW5kU2Vjb25kYXJ5S2V5cyIsInRhcmdldEVudGl0eVNldCIsInBhdGgiLCJwYXJhbWV0ZXJzIiwiJHNlbGVjdCIsImpvaW4iLCJkb2VzRmllbGRHcm91cENvbnRhaW5Pbmx5T25lTXVsdGlMaW5lRGF0YUZpZWxkIiwiYUZvcm1FbGVtZW50cyIsImlzVmFsdWVNdWx0aWxpbmVUZXh0IiwiZ2V0U2hhcmVCdXR0b25WaXNpYmlsaXR5IiwiaXNTaGFyZUJ1dHRvblZpc2libGVGb3JNeUluYm94Iiwic2hhcmVCdXR0b25WaXNpYmlsaXR5RXhwIiwiZmNsRW5hYmxlZCIsImFuZCIsInBhdGhJbk1vZGVsIiwiZ2V0VmlzaWJsaXR5T2ZIZWFkZXJJbmZvIiwib1RpdGxlQW5ub3RhdGlvbnMiLCJvRGVzY3JpcHRpb25Bbm5vdGF0aW9ucyIsIm9GaWVsZFRpdGxlRmllbGRDb250cm9sIiwib0ZpZWxkRGVzY3JpcHRpb25GaWVsZENvbnRyb2wiLCJiSXNUaXRsZVJlYWRPbmx5IiwidGl0bGVFeHByZXNzaW9uIiwiYklzRGVzY3JpcHRpb25SZWFkT25seSIsImRlc2NyaXB0aW9uRXhwcmVzc2lvbiIsImNvbWJpbmVUaXRsZUFuZERlc2NyaXB0aW9uRXhwcmVzc2lvbiIsIm9UaXRsZUZpZWxkQ29udHJvbCIsIm9EZXNjcmlwdGlvbkZpZWxkQ29udHJvbCIsImdldFByZXNzRXhwcmVzc2lvbkZvckRlbGV0ZSIsImRlbGV0YWJsZUNvbnRleHRzIiwidGl0bGUiLCJwYXJhbXMiLCJDb21tb25IZWxwZXIiLCJnZW5lcmF0ZUZ1bmN0aW9uIiwib2JqZWN0VG9TdHJpbmciLCJnZXRQcmVzc0V4cHJlc3Npb25Gb3JFZGl0Iiwib0RhdGFGaWVsZCIsInNFbnRpdHlTZXROYW1lIiwic0VkaXRhYmxlQ29udGV4dHMiLCJhZGRTaW5nbGVRdW90ZXMiLCJBY3Rpb24iLCJzRGF0YUZpZWxkRW51bU1lbWJlciIsIkludm9jYXRpb25Hcm91cGluZyIsInNJbnZvY2F0aW9uR3JvdXAiLCJvUGFyYW1zIiwiY29udGV4dHMiLCJlbnRpdHlTZXROYW1lIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwibW9kZWwiLCJMYWJlbCIsImlzTmF2aWdhYmxlIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiZGlzYWJsZVN0cmljdEhhbmRsaW5nIiwiZ2V0UHJlc3NFeHByZXNzaW9uRm9yRm9vdGVyQW5ub3RhdGlvbkFjdGlvbiIsImRhdGFGaWVsZE1vZGVsUGF0aCIsImhlYWRlckFjdGlvbiIsImFjdGlvbkNvbnRleHRzIiwiZ2V0UHJlc3NFeHByZXNzaW9uRm9yUHJpbWFyeUFjdGlvbiIsInBvc2l0aXZlQWN0aW9uVmlzaWJsZSIsInBvc2l0aXZlQWN0aW9uRW5hYmxlZCIsImVkaXRBY3Rpb25WaXNpYmxlIiwiZWRpdEFjdGlvbkVuYWJsZWQiLCJzQWN0aW9uQ29udGV4dHMiLCJ0b1N0cmluZyIsIm9Db25kaXRpb25zIiwiZ2V0U3Rhc2hhYmxlSEJveEJpbmRpbmciLCJvSGVhZGVyRmFjZXQiLCJGYWNldCIsInRhcmdldEFubm90YXRpb25UeXBlIiwidGFyZ2V0QW5ub3RhdGlvblZhbHVlIiwiZ2V0SGVhZGVyRm9ybUhib3hSZW5kZXJUeXBlIiwiZ2V0RGVmYXVsdEFjdGlvbkhhbmRsZXIiLCJvQ3R4Iiwib0RhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24iLCJkZWZhdWx0QWN0aW9uQ29udGV4dE9yRW50aXR5U2V0IiwiZGVmYXVsdEFjdGlvbiIsImNvbW1hbmQiLCJwcmVzcyIsIm5vV3JhcCIsImJ1aWxkQWN0aW9uV3JhcHBlciIsImlkIiwiaW9FeCIsImlzVmlzdWFsaXphdGlvbklzUGFydE9mUHJldmlldyIsInN1YlNlY3Rpb24iLCJpc1BhcnRPZlByZXZpZXciLCJwcmVzZW50YXRpb24iLCJ2aXN1YWxpemF0aW9ucyIsImdldEZvb3RlclZpc2liaWxpdHlFeHByZXNzaW9uSW50ZXJuYWwiLCJjb250ZXh0IiwiZm9vdGVyQWN0aW9ucyIsIm1ldGFNb2RlbCIsImdldEludGVyZmFjZSIsImdldE1vZGVsIiwiX2dlbmVyYXRlQmluZGluZ3NGb3JBY3Rpb25zIiwiYWN0aW9ucyIsInZpc2libGVFeHByZXNzaW9uIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJnZXRBY3Rpb25Nb2RlbFBhdGgiLCJhbm5vdGF0aW9uUGF0aCIsImFjdGlvbkNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZGV0ZXJtaW5pbmdBY3Rpb25zIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsIm1hbmlmZXN0QWN0aW9uQmluZGluZ3MiLCJkZXRlcm1pbmluZ0FjdGlvbkJpbmRpbmdzIiwiaXNOb3RIaWRkZW5EZXRlcm1pbmluZ0FjdGlvbiIsImFjdGlvbkNvbnRleHRNb2RlbFBhdGgiLCJJc0VkaXRhYmxlIiwiZ2V0Rm9vdGVyVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJnZXRIZWFkZXJMZXZlbCIsImlzTW9yZUNvbnRlbnQiLCJzaG93U3ViU2VjdGlvblRpdGxlIiwibGV2ZWwiLCJkYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSIsImdldEhlYWRlckZvcm1BcmlhTGFiZWxsZWRCeSIsImhlYWRlckZvcm1EYXRhIiwiZm9ybUVsZW1lbnRJZFByZWZpeCIsInRpdGxlSWQiLCJTdGFibGVJZEhlbHBlciIsImdlbmVyYXRlIiwibGFiZWxJZCIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VUZW1wbGF0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEZvcm1hdHRlcnMgZm9yIHRoZSBPYmplY3QgUGFnZVxuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSwgUHJvcGVydHksIFNpbmdsZXRvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRGVmYXVsdCxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RmFjZXQsXG5cdEhlYWRlckluZm9UeXBlLFxuXHRQcmVzZW50YXRpb25WYXJpYW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUsIHR5cGUgQ29udHJvbENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uLCBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25Gb3JtRWxlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkR3JvdXBGYWNldCwgSGVhZGVyRm9ybURhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQgdHlwZSB7IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL09iamVjdFBhZ2UvU3ViU2VjdGlvblwiO1xuaW1wb3J0IHsgRHJhZnQsIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBTdGFibGVJZEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VGl0bGVCaW5kaW5nRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1RpdGxlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB7XG5cdGFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24sXG5cdGZvcm1hdFZhbHVlUmVjdXJzaXZlbHksXG5cdGdldFRleHRCaW5kaW5nRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCBtTGlicmFyeSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IEJpbmRpbmdJbmZvIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdE91dGJvdW5kRW50cnkgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCB0eXBlIHsgSUNvbnRleHQgfSBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5cbmNvbnN0IEJ1dHRvblR5cGUgPSBtTGlicmFyeS5CdXR0b25UeXBlO1xuXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvclRpdGxlID0gZnVuY3Rpb24gKFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dmlld0RhdGE6IFZpZXdEYXRhLFxuXHRoZWFkZXJJbmZvPzogSGVhZGVySW5mb1R5cGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGdldFRpdGxlQmluZGluZ0V4cHJlc3Npb24oXG5cdFx0ZnVsbENvbnRleHRQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+LFxuXHRcdGdldFRleHRCaW5kaW5nRXhwcmVzc2lvbixcblx0XHR1bmRlZmluZWQsXG5cdFx0aGVhZGVySW5mbyxcblx0XHR2aWV3RGF0YVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiBhbiBvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGZ1bGwgY29udGV4dCBwYXRoIHVzZWQgdG8gcmVhY2ggdGhhdCBvYmplY3QgcGFnZVxuICogQHBhcmFtIG9IZWFkZXJJbmZvIFRoZSBAVUkuSGVhZGVySW5mbyBhbm5vdGF0aW9uIGNvbnRlbnRcbiAqIEBwYXJhbSBvSGVhZGVySW5mby5EZXNjcmlwdGlvblxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9iamVjdCBwYWdlIGRlc2NyaXB0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24gPSBmdW5jdGlvbiAoXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+LFxuXHRvSGVhZGVySW5mbz86IEhlYWRlckluZm9UeXBlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGxldCBkZXNjcmlwdGlvbkJpbmRpbmcgPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oKG9IZWFkZXJJbmZvPy5EZXNjcmlwdGlvbiBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlKTtcblx0aWYgKChvSGVhZGVySW5mbz8uRGVzY3JpcHRpb24gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHtcblx0XHQvLyBJbiBjYXNlIGFuIGV4cGxpY2l0IHRleHQgYXJyYW5nZW1lbnQgd2FzIHNldCB3ZSBtYWtlIHVzZSBvZiBpdCBpbiB0aGUgZGVzY3JpcHRpb24gYXMgd2VsbFxuXHRcdGRlc2NyaXB0aW9uQmluZGluZyA9IGFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24oZGVzY3JpcHRpb25CaW5kaW5nLCBmdWxsQ29udGV4dFBhdGgpO1xuXHR9XG5cdGNvbnN0IGRlc2NyaXB0aW9uID0gY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0VmFsdWVSZWN1cnNpdmVseShkZXNjcmlwdGlvbkJpbmRpbmcsIGZ1bGxDb250ZXh0UGF0aCkpO1xuXHRyZXR1cm4gZGVzY3JpcHRpb24gPT09IFwidW5kZWZpbmVkXCIgPyBcIlwiIDogZGVzY3JpcHRpb247XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIHNhdmUgYnV0dG9uLlxuICogQHBhcmFtIG9WaWV3RGF0YSBUaGUgY3VycmVudCB2aWV3IGRhdGFcbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIHBhdGggdXNlZCB1cCB1bnRpbCBoZXJlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHRoYXQgc2hvd3MgdGhlIHJpZ2h0IHNhdmUgYnV0dG9uIHRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JTYXZlQnV0dG9uID0gZnVuY3Rpb24gKFxuXHRvVmlld0RhdGE6IFZpZXdEYXRhLFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBzYXZlQnV0dG9uVGV4dCA9IG9WaWV3RGF0YS5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX09QX09CSkVDVF9QQUdFX1NBVkVcIik7XG5cdGNvbnN0IGNyZWF0ZUJ1dHRvblRleHQgPSBvVmlld0RhdGEucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9PUF9PQkpFQ1RfUEFHRV9DUkVBVEVcIik7XG5cdGxldCBzYXZlRXhwcmVzc2lvbjtcblxuXHRpZiAoKGZ1bGxDb250ZXh0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpLmFubm90YXRpb25zLlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQpIHtcblx0XHQvLyBJZiB3ZSdyZSBpbiBzdGlja3kgbW9kZSBBTkQgdGhlIHVpIGlzIGluIGNyZWF0ZSBtb2RlLCBzaG93IENyZWF0ZSwgZWxzZSBzaG93IFNhdmVcblx0XHRzYXZlRXhwcmVzc2lvbiA9IGlmRWxzZShVSS5Jc0NyZWF0ZU1vZGUsIGNyZWF0ZUJ1dHRvblRleHQsIHNhdmVCdXR0b25UZXh0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB3ZSdyZSBpbiBkcmFmdCBBTkQgdGhlIGRyYWZ0IGlzIGEgbmV3IG9iamVjdCAoIUlzQWN0aXZlRW50aXR5ICYmICFIYXNBY3RpdmVFbnRpdHkpLCBzaG93IGNyZWF0ZSwgZWxzZSBzaG93IHNhdmVcblx0XHRzYXZlRXhwcmVzc2lvbiA9IGlmRWxzZShEcmFmdC5Jc05ld09iamVjdCwgY3JlYXRlQnV0dG9uVGV4dCwgc2F2ZUJ1dHRvblRleHQpO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihzYXZlRXhwcmVzc2lvbik7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgZXhwcmVzc2lvbiBvZiB0aGUgbGFiZWwgZm9yIGEgZmllbGQgaW50byBhIGhlYWRlciBmb3JtLlxuICogQHBhcmFtIGxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgaGVhZGVyIGZvcm0gaW4gYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gdmlld0RhdGEgVGhlIGN1cnJlbnQgdmlldyBkYXRhLlxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHRyYW5zbGF0ZWQgbGFiZWwgb2YgdGhlIG9mIHRoZSBoZWFkZXIgZm9ybSBpbiBhbiBvYmplY3QgcGFnZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JMYWJlbE9uSGVhZGVyRm9ybSA9IGZ1bmN0aW9uIChsYWJlbDogU3RyaW5nLCB2aWV3RGF0YTogVmlld0RhdGEpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiB2aWV3RGF0YS5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJIRUFERVJfRk9STV9MQUJFTFwiLCBbbGFiZWxdKTtcbn07XG5cbi8qKlxuICogTWV0aG9kIHJldHVybnMgV2hldGhlciB0aGUgYWN0aW9uIHR5cGUgaXMgbWFuaWZlc3Qgb3Igbm90LlxuICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIG9iamVjdFxuICogQHJldHVybnMgYHRydWVgIGlmIGFjdGlvbiBpcyBjb21pbmcgZnJvbSBtYW5pZmVzdCwgYGZhbHNlYCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzTWFuaWZlc3RBY3Rpb24gPSBmdW5jdGlvbiAoYWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uKTogYWN0aW9uIGlzIEN1c3RvbUFjdGlvbiB7XG5cdGNvbnN0IG5vbk1hbmlmZXN0QWN0aW9ucyA9IFtcblx0XHRcIlByaW1hcnlcIixcblx0XHRcIkRlZmF1bHRBcHBseVwiLFxuXHRcdFwiU2Vjb25kYXJ5XCIsXG5cdFx0XCJGb3JBY3Rpb25cIixcblx0XHRcIkZvck5hdmlnYXRpb25cIixcblx0XHRcIlN3aXRjaFRvQWN0aXZlT2JqZWN0XCIsXG5cdFx0XCJTd2l0Y2hUb0RyYWZ0T2JqZWN0XCIsXG5cdFx0XCJEcmFmdEFjdGlvbnNcIixcblx0XHRcIkNvcHlcIixcblx0XHRcIlN0YW5kYXJkXCJcblx0XTtcblx0cmV0dXJuICFub25NYW5pZmVzdEFjdGlvbnMuaW5jbHVkZXMoYWN0aW9uLnR5cGUgPz8gXCJcIik7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBjb21waWxlZCBleHByZXNzaW9uIHRoYXQgZGV0ZXJtaW5lcyB0aGUgZW1waGFzaXplZCBidXR0b24gdHlwZSBiYXNlZCBvbiBjcml0aWNhbGl0eSBhY3Jvc3MgYWxsIGFjdGlvbnMuXG4gKiBJZiBhIGNyaXRpY2FsIGFjdGlvbiBpcyByZW5kZXJlZCwgaXQgaXMgdHJlYXRlZCBhcyB0aGUgcHJpbWFyeSBhY3Rpb24sIGFuZCB0aGUgdGVtcGxhdGUncyBkZWZhdWx0IHByaW1hcnkgYWN0aW9uIGlzIHN1cHByZXNzZWQuXG4gKiBAcGFyYW0gZGF0YUNvbnRleHRQYXRoIFRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIHJlbGF0ZWQgdG8gdGhlIGNvbnRleHRcbiAqIEByZXR1cm5zIEEgY29tcGlsZWQgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0aGUgYnV0dG9uIHR5cGUgdG8gdXNlXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZENyaXRpY2FsaXR5VmlzaWJsZUZyb21JZGVudGlmaWNhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdGRhdGFDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHkgfCBTaW5nbGV0b24+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpZGVudGlmaWNhdGlvbiA9IGRhdGFDb250ZXh0UGF0aC50YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LklkZW50aWZpY2F0aW9uO1xuXHRjb25zdCBkYXRhRmllbGRzV2l0aENyaXRpY2FsaXR5ID1cblx0XHRpZGVudGlmaWNhdGlvbj8uZmlsdGVyKChkYXRhRmllbGQpID0+IGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmIGRhdGFGaWVsZC5Dcml0aWNhbGl0eSkgfHwgW107XG5cblx0aWYgKCFkYXRhRmllbGRzV2l0aENyaXRpY2FsaXR5Lmxlbmd0aCkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH1cblx0cmV0dXJuIG9yKFxuXHRcdC4uLmRhdGFGaWVsZHNXaXRoQ3JpdGljYWxpdHkubWFwKChkYXRhRmllbGQpID0+XG5cdFx0XHQvLyBDcml0aWNhbGl0eSBzdXBwcmVzc2VzIGVtcGhhc2lzIGlmIHRoZSBhY3Rpb24gaXRzZWxmIGlzIHZpc2libGUgKEhpZGRlbiBpcyBmYWxzZSlcblx0XHRcdG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpXG5cdFx0KVxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkRW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdGRhdGFDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHkgfCBTaW5nbGV0b24+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGNyaXRpY2FsaXR5VmlzaWJsZUV4cHIgPSBidWlsZENyaXRpY2FsaXR5VmlzaWJsZUZyb21JZGVudGlmaWNhdGlvbkV4cHJlc3Npb24oZGF0YUNvbnRleHRQYXRoKTtcblx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHZpc2libGUgYWN0aW9uIHdpdGggY3JpdGljYWxpdHksIHRoZSB0ZW1wbGF0ZSdzIGRlZmF1bHQgcHJpbWFyeSBhY3Rpb24gaXMgc2V0IGJhY2sgdG8gR2hvc3Rcblx0Ly8gZWxzZSBpdCBpcyBlbXBoYXNpemVkXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoY3JpdGljYWxpdHlWaXNpYmxlRXhwciwgQnV0dG9uVHlwZS5HaG9zdCwgQnV0dG9uVHlwZS5FbXBoYXNpemVkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudEJpbmRpbmcgPSBmdW5jdGlvbiAoc1BhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IE9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNQYXRoKTtcblx0aWYgKHNOYXZpZ2F0aW9uUGF0aCkge1xuXHRcdHJldHVybiBcIntwYXRoOidcIiArIHNOYXZpZ2F0aW9uUGF0aCArIFwiJ31cIjtcblx0fSBlbHNlIHtcblx0XHQvL25vIG5hdmlnYXRpb24gcHJvcGVydHkgbmVlZHMgZW1wdHkgb2JqZWN0XG5cdFx0cmV0dXJuIFwie3BhdGg6ICcnfVwiO1xuXHR9XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGRyYWZ0IHBhdHRlcm4gaXMgc3VwcG9ydGVkLlxuICogQHBhcmFtIGVudGl0eVNldCBUaGUgY3VycmVudCBlbnRpdHkgc2V0LlxuICogQHJldHVybnMgUmV0dXJucyB0aGUgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiBkcmFmdCBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgY2hlY2tEcmFmdFN0YXRlID0gZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0KTogYm9vbGVhbiB7XG5cdGlmIChlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290Py5FZGl0QWN0aW9uKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGZpbmQgYW4gYWN0aW9uIGZyb20gdGhlIGFycmF5IG9mIGhlYWRlciBhY3Rpb25zIGluIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMgQXJyYXkgb2YgJ2hlYWRlcicgYWN0aW9ucyBvbiB0aGUgb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gc0FjdGlvblR5cGUgVGhlIGFjdGlvbiB0eXBlXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uIHdpdGggdGhlIG1hdGNoaW5nIGFjdGlvbiB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBfZmluZEFjdGlvbiA9IGZ1bmN0aW9uIChhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSwgc0FjdGlvblR5cGU6IHN0cmluZyk6IEJhc2VBY3Rpb24gfCB1bmRlZmluZWQge1xuXHRsZXQgb0FjdGlvbjogQmFzZUFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyAmJiBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0b0FjdGlvbiA9IGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucy5maW5kKGZ1bmN0aW9uIChvSGVhZGVyQWN0aW9uOiBCYXNlQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gb0hlYWRlckFjdGlvbi50eXBlID09PSBzQWN0aW9uVHlwZTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb0FjdGlvbjtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZm9ybWF0IHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgZm9yIHRoZSBEZWxldGUgYnV0dG9uIG9uIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGEgQ29tbWFuZCBFeGVjdXRpb24uXG4gKiBAcGFyYW0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIEFycmF5IG9mIGhlYWRlciBhY3Rpb25zIG9uIHRoZSBvYmplY3QgcGFnZVxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBjb252ZXJ0ZXIgb3V0cHV0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXREZWxldGVDb21tYW5kRXhlY3V0aW9uRW5hYmxlZCA9IGZ1bmN0aW9uIChhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9EZWxldGVBY3Rpb24gPSBfZmluZEFjdGlvbihhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMsIFwiU2Vjb25kYXJ5XCIpO1xuXHRyZXR1cm4gb0RlbGV0ZUFjdGlvbiA/IG9EZWxldGVBY3Rpb24uZW5hYmxlZCA6IFwiZmFsc2VcIjtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZm9ybWF0IHRoZSAndmlzaWJsZScgcHJvcGVydHkgZm9yIHRoZSBEZWxldGUgYnV0dG9uIG9uIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGEgQ29tbWFuZCBFeGVjdXRpb24uXG4gKiBAcGFyYW0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIEFycmF5IG9mIGhlYWRlciBhY3Rpb25zIG9uIHRoZSBvYmplY3QgcGFnZVxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBjb252ZXJ0ZXIgb3V0cHV0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXREZWxldGVDb21tYW5kRXhlY3V0aW9uVmlzaWJsZSA9IGZ1bmN0aW9uIChhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9EZWxldGVBY3Rpb24gPSBfZmluZEFjdGlvbihhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMsIFwiU2Vjb25kYXJ5XCIpO1xuXHRyZXR1cm4gb0RlbGV0ZUFjdGlvbiA/IG9EZWxldGVBY3Rpb24udmlzaWJsZSA6IFwiZmFsc2VcIjtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZm9ybWF0IHRoZSAndmlzaWJsZScgcHJvcGVydHkgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiB0aGUgb2JqZWN0IHBhZ2Ugb3Igc3Vib2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBhIENvbW1hbmQgRXhlY3V0aW9uLlxuICogQHBhcmFtIGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyBBcnJheSBvZiBoZWFkZXIgYWN0aW9ucyBvbiB0aGUgb2JqZWN0IHBhZ2VcbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgZnJvbSB0aGUgY29udmVydGVyIG91dHB1dFxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdENvbW1hbmRFeGVjdXRpb25WaXNpYmxlID0gZnVuY3Rpb24gKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0VkaXRBY3Rpb24gPSBfZmluZEFjdGlvbihhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMsIFwiUHJpbWFyeVwiKTtcblx0cmV0dXJuIG9FZGl0QWN0aW9uID8gb0VkaXRBY3Rpb24udmlzaWJsZSA6IFwiZmFsc2VcIjtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZm9ybWF0IHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiB0aGUgb2JqZWN0IHBhZ2Ugb3Igc3Vib2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBhIENvbW1hbmQgRXhlY3V0aW9uLlxuICogQHBhcmFtIGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyBBcnJheSBvZiBoZWFkZXIgYWN0aW9ucyBvbiB0aGUgb2JqZWN0IHBhZ2VcbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgZnJvbSB0aGUgY29udmVydGVyIG91dHB1dFxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdENvbW1hbmRFeGVjdXRpb25FbmFibGVkID0gZnVuY3Rpb24gKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0VkaXRBY3Rpb24gPSBfZmluZEFjdGlvbihhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMsIFwiUHJpbWFyeVwiKTtcblx0cmV0dXJuIG9FZGl0QWN0aW9uID8gb0VkaXRBY3Rpb24uZW5hYmxlZCA6IFwiZmFsc2VcIjtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSBFZGl0QWN0aW9uIGZyb20gdGhlIGJhc2VkIG9uIGEgZHJhZnQtZW5hYmxlZCBhcHBsaWNhdGlvbiBvciBhIHN0aWNreSBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSBbb0VudGl0eVNldF0gVGhlIHZhbHVlIGZyb20gdGhlIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBSZXR1cm5zIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIHZSYXdWYWx1ZSAmIG9EcmFmdE5vZGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVkaXRBY3Rpb24gPSBmdW5jdGlvbiAob0VudGl0eVNldDogQ29udGV4dCk6IHN0cmluZyB7XG5cdGNvbnN0IHNQYXRoID0gb0VudGl0eVNldC5nZXRQYXRoKCk7XG5cdGNvbnN0IGFQYXRocyA9IHNQYXRoLnNwbGl0KFwiL1wiKTtcblx0Y29uc3Qgcm9vdEVudGl0eVNldFBhdGggPSBcIi9cIiArIGFQYXRoc1sxXTtcblx0Ly8gZ2V0IHRoZSBlZGl0IGFjdGlvbiBmcm9tIHJvb3QgZW50aXR5IHNldHNcblx0Y29uc3Qgcm9vdEVudGl0eVNldEFubm5vdGF0aW9ucyA9IG9FbnRpdHlTZXQuZ2V0T2JqZWN0KHJvb3RFbnRpdHlTZXRQYXRoICsgXCJAXCIpO1xuXHRjb25zdCBiRHJhZnRSb290ID0gcm9vdEVudGl0eVNldEFubm5vdGF0aW9ucy5oYXNPd25Qcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCIpO1xuXHRjb25zdCBiRHJhZnROb2RlID0gcm9vdEVudGl0eVNldEFubm5vdGF0aW9ucy5oYXNPd25Qcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlXCIpO1xuXHRjb25zdCBiU3RpY2t5U2Vzc2lvbiA9IHJvb3RFbnRpdHlTZXRBbm5ub3RhdGlvbnMuaGFzT3duUHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXCIpO1xuXHRsZXQgc0FjdGlvbk5hbWU7XG5cdGlmIChiRHJhZnRSb290KSB7XG5cdFx0c0FjdGlvbk5hbWUgPSBvRW50aXR5U2V0LmdldE9iamVjdChgJHtyb290RW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC9FZGl0QWN0aW9uYCk7XG5cdH0gZWxzZSBpZiAoYkRyYWZ0Tm9kZSkge1xuXHRcdHNBY3Rpb25OYW1lID0gb0VudGl0eVNldC5nZXRPYmplY3QoYCR7cm9vdEVudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGUvRWRpdEFjdGlvbmApO1xuXHR9IGVsc2UgaWYgKGJTdGlja3lTZXNzaW9uKSB7XG5cdFx0c0FjdGlvbk5hbWUgPSBvRW50aXR5U2V0LmdldE9iamVjdChgJHtyb290RW50aXR5U2V0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkL0VkaXRBY3Rpb25gKTtcblx0fVxuXHRyZXR1cm4gIXNBY3Rpb25OYW1lID8gc0FjdGlvbk5hbWUgOiBgJHtyb290RW50aXR5U2V0UGF0aH0vJHtzQWN0aW9uTmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmVhZE9ubHlGcm9tU3RhdGljQW5ub3RhdGlvbnMgPSBmdW5jdGlvbiAob0Fubm90YXRpb25zPzogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucywgb0ZpZWxkQ29udHJvbD86IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRsZXQgYkNvbXB1dGVkLCBiSW1tdXRhYmxlLCBiUmVhZE9ubHk7XG5cblx0aWYgKG9Bbm5vdGF0aW9ucyAmJiBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl0pIHtcblx0XHRiQ29tcHV0ZWQgPSAob0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdIGFzIHsgQm9vbD86IHN0cmluZyB9KS5Cb29sXG5cdFx0XHQ/IChvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl0gYXMgeyBCb29sPzogc3RyaW5nIH0pLkJvb2wgPT0gXCJ0cnVlXCJcblx0XHRcdDogdHJ1ZTtcblx0fVxuXHRpZiAob0Fubm90YXRpb25zICYmIG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0pIHtcblx0XHRiSW1tdXRhYmxlID0gKG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0gYXMgeyBCb29sPzogc3RyaW5nIH0pLkJvb2xcblx0XHRcdD8gKG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0gYXMgeyBCb29sPzogc3RyaW5nIH0pLkJvb2wgPT0gXCJ0cnVlXCJcblx0XHRcdDogdHJ1ZTtcblx0fVxuXHRiUmVhZE9ubHkgPSBiQ29tcHV0ZWQgfHwgYkltbXV0YWJsZTtcblxuXHRpZiAob0ZpZWxkQ29udHJvbCkge1xuXHRcdGJSZWFkT25seSA9IGJSZWFkT25seSB8fCBvRmllbGRDb250cm9sID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvUmVhZE9ubHlcIjtcblx0fVxuXHRpZiAoYlJlYWRPbmx5KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgcmVhZE9ubHlFeHByZXNzaW9uRnJvbUR5bmFtaWNBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uIChvRmllbGRDb250cm9sPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNJc0ZpZWxkQ29udHJvbFBhdGhSZWFkT25seTtcblx0aWYgKG9GaWVsZENvbnRyb2wpIHtcblx0XHRpZiAoQmluZGluZ0luZm8ucGFyc2Uob0ZpZWxkQ29udHJvbCkpIHtcblx0XHRcdHNJc0ZpZWxkQ29udHJvbFBhdGhSZWFkT25seSA9IFwiJVwiICsgb0ZpZWxkQ29udHJvbCArIFwiID09PSAxIFwiO1xuXHRcdH1cblx0fVxuXHRpZiAoc0lzRmllbGRDb250cm9sUGF0aFJlYWRPbmx5KSB7XG5cdFx0cmV0dXJuIFwiez0gXCIgKyBzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHkgKyBcIj8gZmFsc2UgOiB0cnVlIH1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG4vKlxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSBleHByZXNzaW9uIGZvciBjaGFydCBUaXRsZSBQcmVzc1xuICpcbiAqIEBmdW5jdGlvbndcbiAqIEBwYXJhbSB7b0NvbmZpZ3VyYXRpb259IFtvQ29uZmlndXJhdGlvbnNdIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmcm9tIG1hbmlmZXN0XG4gKiAgQHBhcmFtIHtvTWFuaWZlc3R9IFtvTWFuaWZlc3RdIE91dGJvdW5kcyBmcm9tIG1hbmlmZXN0XG4gKiByZXR1cm5zIHtTdHJpbmd9IFtzQ29sbGVjdGlvbk5hbWVdIENvbGxlY3Rpb24gTmFtZSBvZiB0aGUgTWljcm8gQ2hhcnRcbiAqXG4gKiByZXR1cm5zIHtTdHJpbmd9IFtFeHByZXNzaW9uXSBIYW5kbGVyIEV4cHJlc3Npb24gZm9yIHRoZSB0aXRsZSBwcmVzc1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JNaWNyb0NoYXJ0VGl0bGVQcmVzcyA9IGZ1bmN0aW9uIChcblx0b0NvbmZpZ3VyYXRpb246IENvbnRyb2xDb25maWd1cmF0aW9uLFxuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aDogc3RyaW5nLFxuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aERhdE1vZGVsT2JqZWN0OiBEYXRhTW9kZWxPYmplY3RQYXRoPENoYXJ0IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdG9NYW5pZmVzdE91dGJvdW5kOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdE91dGJvdW5kRW50cnk+LFxuXHRzQ29sbGVjdGlvbk5hbWU6IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGggPSBnZXRNaWNyb0NoYXJ0Q29udHJvbENvbmZpZ3VyYXRpb25QYXRoKHRhcmdldEFubm90YXRpb25QYXRoLCB0YXJnZXRBbm5vdGF0aW9uUGF0aERhdE1vZGVsT2JqZWN0LCBzQ29sbGVjdGlvbk5hbWUpO1xuXHRjb25zdCBuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiA9IChvQ29uZmlndXJhdGlvbj8uW3RhcmdldEFubm90YXRpb25QYXRoXSBhcyBNaWNyb0NoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uKT8uW1wibmF2aWdhdGlvblwiXTtcblx0aWYgKG5hdmlnYXRpb25Db25maWd1cmF0aW9uKSB7XG5cdFx0aWYgKFxuXHRcdFx0KG5hdmlnYXRpb25Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl0gJiYgbmF2aWdhdGlvbkNvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXVtcIm91dGJvdW5kXCJdKSB8fFxuXHRcdFx0KG5hdmlnYXRpb25Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl0gJiZcblx0XHRcdFx0bmF2aWdhdGlvbkNvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXVtcIm91dGJvdW5kXCJdICYmXG5cdFx0XHRcdG5hdmlnYXRpb25Db25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcIi5oYW5kbGVycy5vbkRhdGFQb2ludFRpdGxlUHJlc3NlZCgkY29udHJvbGxlciwgJHskc291cmNlPi99LCdcIiArXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KG9NYW5pZmVzdE91dGJvdW5kKSArXG5cdFx0XHRcdFwiJywnXCIgK1xuXHRcdFx0XHRuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdW1wib3V0Ym91bmRcIl0gK1xuXHRcdFx0XHRcIicsJ1wiICtcblx0XHRcdFx0c0NvbGxlY3Rpb25OYW1lICtcblx0XHRcdFx0XCInIClcIlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKG5hdmlnYXRpb25Db25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pIHtcblx0XHRcdHJldHVybiBcIi5oYW5kbGVycy5uYXZpZ2F0ZVRvU3ViU2VjdGlvbigkY29udHJvbGxlciwgJ1wiICsgSlNPTi5zdHJpbmdpZnkobmF2aWdhdGlvbkNvbmZpZ3VyYXRpb25bXCJ0YXJnZXRTZWN0aW9uc1wiXSkgKyBcIicpXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG59O1xuXG4vKlxuICogRnVuY3Rpb24gdG8gcmVuZGVyIENoYXJ0IFRpdGxlIGFzIExpbmtcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b0NvbnRyb2xDb25maWd1cmF0aW9ufSBbb0NvbmZpZ3VyYXRpb25zXSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZnJvbSBtYW5pZmVzdFxuICogcmV0dXJucyB7U3RyaW5nfSBbc0tleV0gRm9yIHRoZSBUYXJnZXRPdXRib3VuZCBhbmQgVGFyZ2V0U2VjdGlvblxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1pY3JvQ2hhcnRUaXRsZUFzTGluayA9IGZ1bmN0aW9uIChcblx0b0NvbnRyb2xDb25maWd1cmF0aW9uOiBDb250cm9sQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGg6IHN0cmluZyxcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRNb2RlbE9iamVjdDogRGF0YU1vZGVsT2JqZWN0UGF0aDxDaGFydCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRjb2xsZWN0aW9uTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcge1xuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aCA9IGdldE1pY3JvQ2hhcnRDb250cm9sQ29uZmlndXJhdGlvblBhdGgodGFyZ2V0QW5ub3RhdGlvblBhdGgsIHRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3QsIGNvbGxlY3Rpb25OYW1lKTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24gPSAob0NvbnRyb2xDb25maWd1cmF0aW9uPy5bdGFyZ2V0QW5ub3RhdGlvblBhdGhdIGFzIE1pY3JvQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24pPy5bXCJuYXZpZ2F0aW9uXCJdO1xuXHRpZiAoXG5cdFx0dGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24gJiZcblx0XHQodGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXSB8fFxuXHRcdFx0KHRhcmdldENvbnRyb2xDb25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl0gJiYgdGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb25bXCJ0YXJnZXRTZWN0aW9uc1wiXSkpXG5cdCkge1xuXHRcdHJldHVybiBcIkV4dGVybmFsXCI7XG5cdH0gZWxzZSBpZiAodGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24gJiYgdGFyZ2V0Q29udHJvbENvbmZpZ3VyYXRpb25bXCJ0YXJnZXRTZWN0aW9uc1wiXSkge1xuXHRcdHJldHVybiBcIkluUGFnZVwiO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGdldE1pY3JvQ2hhcnRDb250cm9sQ29uZmlndXJhdGlvblBhdGggPSBmdW5jdGlvbiAoXG5cdHRhcmdldEFubm90YXRpb25QYXRoOiBzdHJpbmcsXG5cdHRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3Q6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29sbGVjdGlvbk5hbWU6IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0aWYgKHRhcmdldEFubm90YXRpb25QYXRoRGF0TW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcIikge1xuXHRcdHRhcmdldEFubm90YXRpb25QYXRoID0gdGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRNb2RlbE9iamVjdC50YXJnZXRPYmplY3Q/LlZpc3VhbGl6YXRpb25zWzBdPy52YWx1ZTtcblx0XHR0YXJnZXRBbm5vdGF0aW9uUGF0aCA9IGNvbGxlY3Rpb25OYW1lID8gYCR7Y29sbGVjdGlvbk5hbWV9LyR7dGFyZ2V0QW5ub3RhdGlvblBhdGh9YCA6IHRhcmdldEFubm90YXRpb25QYXRoO1xuXHR9XG5cdHJldHVybiB0YXJnZXRBbm5vdGF0aW9uUGF0aDtcbn07XG5cbi8qIEdldCBncm91cElkIGZyb20gY29udHJvbCBjb25maWd1cmF0aW9uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gW29Db25maWd1cmF0aW9uc10gY29udHJvbCBjb25maWd1cmF0aW9uIGZyb20gbWFuaWZlc3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBbc0Fubm90YXRpb25QYXRoXSBBbm5vdGF0aW9uIFBhdGggZm9yIHRoZSBjb25maWd1cmF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXNlZCB0byBnZXQgdGhlIGdyb3VwSWQgZm9yIERhdGFQb2ludHMgYW5kIE1pY3JvQ2hhcnRzIGluIHRoZSBIZWFkZXIuXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBJZEZyb21Db25maWcgPSBmdW5jdGlvbiAoXG5cdG9Db25maWd1cmF0aW9uczogQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nLFxuXHRzRGVmYXVsdEdyb3VwSWQ/OiBzdHJpbmdcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9Db25maWd1cmF0aW9uID0gb0NvbmZpZ3VyYXRpb25zW3NBbm5vdGF0aW9uUGF0aF0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHRhQXV0b1BhdHRlcm5zID0gW1wiSGVyb2VzXCIsIFwiRGVjb3JhdGlvblwiLCBcIldvcmtlcnNcIiwgXCJMb25nUnVubmVyc1wiXTtcblx0bGV0IHNHcm91cElkID0gc0RlZmF1bHRHcm91cElkO1xuXHRpZiAoXG5cdFx0b0NvbmZpZ3VyYXRpb24gJiZcblx0XHRvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZCAmJlxuXHRcdGFBdXRvUGF0dGVybnMuc29tZShmdW5jdGlvbiAoYXV0b1BhdHRlcm46IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIGF1dG9QYXR0ZXJuID09PSBvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZDtcblx0XHR9KVxuXHQpIHtcblx0XHRzR3JvdXBJZCA9IFwiJGF1dG8uXCIgKyBvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZDtcblx0fVxuXHRyZXR1cm4gc0dyb3VwSWQ7XG59O1xuXG4vKipcbiAqIEdldHMgZ3JvdXBJZCBmcm9tIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmb3IgbWljcm8gY2hhcnQuXG4gKiBAcGFyYW0gb0NvbnRyb2xDb25maWd1cmF0aW9uIENvbnRyb2wgY29uZmlndXJhdGlvbiBmcm9tIG1hbmlmZXN0XG4gKiBAcGFyYW0gdGFyZ2V0QW5ub3RhdGlvblBhdGggQW5ub3RhdGlvbiBwYXRoIGZvciB0aGUgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHRhcmdldEFubm90YXRpb25QYXRoRGF0YU1vZGVsT2JqZWN0IERhdGFNb2RlbE9iamVjdCBvZiBDaGFydCBvciBQcmVzZW50YXRpb25WYXJpYW50XG4gKiBAcGFyYW0gY29sbGVjdGlvbk5hbWUgQ29sbGVjdGlvbiBOYW1lXG4gKiBAcGFyYW0gc0RlZmF1bHRHcm91cElkIERlZmF1bHQgR3JvdXBJZFxuICogQHJldHVybnMgR3JvdXBJZCBmb3IgbWljcm8gY2hhcnRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEdyb3VwSWRGcm9tQ29uZmlnRm9yTWljcm9DaGFydCA9IGZ1bmN0aW9uIChcblx0b0NvbnRyb2xDb25maWd1cmF0aW9uOiBDb250cm9sQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGg6IHN0cmluZyxcblx0dGFyZ2V0QW5ub3RhdGlvblBhdGhEYXRhTW9kZWxPYmplY3Q6IERhdGFNb2RlbE9iamVjdFBhdGg8Q2hhcnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29sbGVjdGlvbk5hbWU6IHN0cmluZyxcblx0c0RlZmF1bHRHcm91cElkPzogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHR0YXJnZXRBbm5vdGF0aW9uUGF0aCA9IGdldE1pY3JvQ2hhcnRDb250cm9sQ29uZmlndXJhdGlvblBhdGgodGFyZ2V0QW5ub3RhdGlvblBhdGgsIHRhcmdldEFubm90YXRpb25QYXRoRGF0YU1vZGVsT2JqZWN0LCBjb2xsZWN0aW9uTmFtZSk7XG5cdHJldHVybiBnZXRHcm91cElkRnJvbUNvbmZpZyhvQ29udHJvbENvbmZpZ3VyYXRpb24sIHRhcmdldEFubm90YXRpb25QYXRoLCBzRGVmYXVsdEdyb3VwSWQpO1xufTtcblxuLypcbiAqIEdldCBDb250ZXh0IEJpbmRpbmcgd2l0aCBncm91cElkIGZyb20gY29udHJvbCBjb25maWd1cmF0aW9uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gW29Db25maWd1cmF0aW9uc10gY29udHJvbCBjb25maWd1cmF0aW9uIGZyb20gbWFuaWZlc3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBbc0tleV0gQW5ub3RhdGlvbiBQYXRoIGZvciBvZiB0aGUgY29uZmlndXJhdGlvblxuICogQGRlc2NyaXB0aW9uIFVzZWQgdG8gZ2V0IHRoZSBiaW5kaW5nIGZvciBEYXRhUG9pbnRzIGluIHRoZSBIZWFkZXIuXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhHcm91cElkRnJvbUNvbmZpZyA9IGZ1bmN0aW9uIChvQ29uZmlndXJhdGlvbnM6IENvbnRyb2xDb25maWd1cmF0aW9uLCBzS2V5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzR3JvdXBJZCA9IGdldEdyb3VwSWRGcm9tQ29uZmlnKG9Db25maWd1cmF0aW9ucywgc0tleSk7XG5cdGxldCBzQmluZGluZztcblx0aWYgKHNHcm91cElkKSB7XG5cdFx0c0JpbmRpbmcgPSBcInsgcGF0aCA6ICcnLCBwYXJhbWV0ZXJzIDogeyAkJGdyb3VwSWQgOiAnXCIgKyBzR3JvdXBJZCArIFwiJyB9IH1cIjtcblx0fVxuXHRyZXR1cm4gc0JpbmRpbmc7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgYmluZGluZyBleHByZXNzaW9uLlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aCBvZiB0aGUgbmF2aWdhdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBCaW5kaW5nIGV4cHJlc3Npb24gaW5jbHVkaW5nIHBhdGggYW5kICRzZWxlY3QgcXVlcnkgYXMgcGFyYW1ldGVyIGRlcGVuZGluZyBvbiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyc1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQmluZGluZ0ZvckFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMgPSBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxGYWNldD4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgYmluZGluZzogUGFydGlhbDxQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5kZWZpbmVkPj4gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IGFsdGVybmF0ZUFuZFNlY29uZGFyeUtleXMgPSBNb2RlbEhlbHBlci5nZXRBbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzKFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGUsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldFxuXHQpO1xuXG5cdGlmIChhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzPy5sZW5ndGgpIHtcblx0XHRiaW5kaW5nID0ge1xuXHRcdFx0cGF0aDogXCJcIlxuXHRcdH07XG5cdFx0YmluZGluZy5wYXJhbWV0ZXJzID0geyAkc2VsZWN0OiBhbHRlcm5hdGVBbmRTZWNvbmRhcnlLZXlzLmpvaW4oXCIsXCIpIHx8IFwiXCIgfTtcblx0fVxuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYmluZGluZyk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGEgRmllbGRHcm91cCBjb25zaXN0cyBvZiBvbmx5IDEgRGF0YUZpZWxkIHdpdGggTXVsdGlMaW5lIHRleHQgYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBhRm9ybUVsZW1lbnRzIEEgY29sbGVjdGlvbiBvZiBmb3JtIGVsZW1lbnRzIHVzZWQgaW4gdGhlIGN1cnJlbnQgZmllbGQgZ3JvdXBcbiAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBvbmx5IDEgZGF0YSBmaWVsZCB3aXRoIE11bHRpbGluZSB0ZXh0IGFubm90YXRpb24gZXhpc3RzLlxuICovXG5leHBvcnQgY29uc3QgZG9lc0ZpZWxkR3JvdXBDb250YWluT25seU9uZU11bHRpTGluZURhdGFGaWVsZCA9IGZ1bmN0aW9uIChhRm9ybUVsZW1lbnRzOiBBbm5vdGF0aW9uRm9ybUVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUZvcm1FbGVtZW50cyAmJiBhRm9ybUVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAhIWFGb3JtRWxlbWVudHNbMF0uaXNWYWx1ZU11bHRpbGluZVRleHQ7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gdmlld0RhdGEgU3BlY2lmaWVzIHRoZSBWaWV3RGF0YSBtb2RlbFxuICogQHJldHVybnMgRXhwcmVzc2lvbiBvciBCb29sZWFuIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTaGFyZUJ1dHRvblZpc2liaWxpdHkgPSBmdW5jdGlvbiAodmlld0RhdGE6IFZpZXdEYXRhKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAodmlld0RhdGEuaXNTaGFyZUJ1dHRvblZpc2libGVGb3JNeUluYm94ID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBcImZhbHNlXCI7XG5cdH1cblx0Y29uc3Qgc2hhcmVCdXR0b25WaXNpYmlsaXR5RXhwID0gdmlld0RhdGEuZmNsRW5hYmxlZFxuXHRcdD8gYW5kKHBhdGhJbk1vZGVsKFwiL3Nob3dTaGFyZUljb25cIiwgXCJmY2xoZWxwZXJcIiksIG5vdChVSS5Jc0NyZWF0ZU1vZGUpKVxuXHRcdDogbm90KFVJLklzQ3JlYXRlTW9kZSk7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihzaGFyZUJ1dHRvblZpc2liaWxpdHlFeHApO1xufTtcblxuLypcbiAqIEdldHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGhlYWRlciBpbmZvIGluIGVkaXQgbW9kZVxuICpcbiAqIElmIGVpdGhlciB0aGUgdGl0bGUgb3IgZGVzY3JpcHRpb24gZmllbGQgZnJvbSB0aGUgaGVhZGVyIGFubm90YXRpb25zIGFyZSBlZGl0YWJsZSwgdGhlbiB0aGVcbiAqIGVkaXRhYmxlIGhlYWRlciBpbmZvIGlzIHZpc2libGUuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gW29Bbm5vdGF0aW9uc10gQW5ub3RhdGlvbnMgb2JqZWN0IGZvciBnaXZlbiBlbnRpdHkgc2V0XG4gKiBAcGFyYW0ge29iamVjdH0gW29GaWVsZENvbnRyb2xdIGZpZWxkIGNvbnRyb2xcbiAqIHJldHVybnMgeyp9ICBiaW5kaW5nIGV4cHJlc3Npb24gb3IgYm9vbGVhbiB2YWx1ZSByZXNvbHZlZCBmb3JtIGZ1bmNpdG9ucyBpc1JlYWRPbmx5RnJvbVN0YXRpY0Fubm90YXRpb25zIGFuZCBpc1JlYWRPbmx5RnJvbUR5bmFtaWNBbm5vdGF0aW9uc1xuICovXG5leHBvcnQgY29uc3QgZ2V0VmlzaWJsaXR5T2ZIZWFkZXJJbmZvID0gZnVuY3Rpb24gKFxuXHRvVGl0bGVBbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyxcblx0b0Rlc2NyaXB0aW9uQW5ub3RhdGlvbnM6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdG9GaWVsZFRpdGxlRmllbGRDb250cm9sPzogc3RyaW5nLFxuXHRvRmllbGREZXNjcmlwdGlvbkZpZWxkQ29udHJvbD86IHN0cmluZ1xuKTogYm9vbGVhbiB8IHN0cmluZyB7XG5cdC8vIENoZWNrIEFubm90YXRpb25zIGZvciBUaXRsZSBGaWVsZFxuXHQvLyBTZXQgdG8gdHJ1ZSBhbmQgZG9uJ3QgdGFrZSBpbnRvIGFjY291bnQsIGlmIHRoZXJlIGFyZSBubyBhbm5vdGF0aW9ucywgaS5lLiBubyB0aXRsZSBleGlzdHNcblx0Y29uc3QgYklzVGl0bGVSZWFkT25seSA9IG9UaXRsZUFubm90YXRpb25zID8gaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyhvVGl0bGVBbm5vdGF0aW9ucywgb0ZpZWxkVGl0bGVGaWVsZENvbnRyb2wpIDogdHJ1ZTtcblx0Y29uc3QgdGl0bGVFeHByZXNzaW9uID0gcmVhZE9ubHlFeHByZXNzaW9uRnJvbUR5bmFtaWNBbm5vdGF0aW9ucyhvRmllbGRUaXRsZUZpZWxkQ29udHJvbCk7XG5cdC8vIFRoZXJlIGlzIG5vIGV4cHJlc3Npb24gYW5kIHRoZSB0aXRsZSBpcyBub3QgcmVhZHkgb25seSwgdGhpcyBpcyBzdWZmaWNpZW50IGZvciBhbiBlZGl0YWJsZSBoZWFkZXJcblx0aWYgKCFiSXNUaXRsZVJlYWRPbmx5ICYmICF0aXRsZUV4cHJlc3Npb24pIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIENoZWNrIEFubm90YXRpb25zIGZvciBEZXNjcmlwdGlvbiBGaWVsZFxuXHQvLyBTZXQgdG8gdHJ1ZSBhbmQgZG9uJ3QgdGFrZSBpbnRvIGFjY291bnQsIGlmIHRoZXJlIGFyZSBubyBhbm5vdGF0aW9ucywgaS5lLiBubyBkZXNjcmlwdGlvbiBleGlzdHNcblx0Y29uc3QgYklzRGVzY3JpcHRpb25SZWFkT25seSA9IG9EZXNjcmlwdGlvbkFubm90YXRpb25zXG5cdFx0PyBpc1JlYWRPbmx5RnJvbVN0YXRpY0Fubm90YXRpb25zKG9EZXNjcmlwdGlvbkFubm90YXRpb25zLCBvRmllbGREZXNjcmlwdGlvbkZpZWxkQ29udHJvbClcblx0XHQ6IHRydWU7XG5cdGNvbnN0IGRlc2NyaXB0aW9uRXhwcmVzc2lvbiA9IHJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMob0ZpZWxkRGVzY3JpcHRpb25GaWVsZENvbnRyb2wpO1xuXHQvLyBUaGVyZSBpcyBubyBleHByZXNzaW9uIGFuZCB0aGUgZGVzY3JpcHRpb24gaXMgbm90IHJlYWR5IG9ubHksIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYW4gZWRpdGFibGUgaGVhZGVyXG5cdGlmICghYklzRGVzY3JpcHRpb25SZWFkT25seSAmJiAhZGVzY3JpcHRpb25FeHByZXNzaW9uKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBCb3RoIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBhcmUgbm90IGVkaXRhYmxlIGFuZCB0aGVyZSBhcmUgbm8gZHluYW1pYyBhbm5vdGF0aW9uc1xuXHRpZiAoYklzVGl0bGVSZWFkT25seSAmJiBiSXNEZXNjcmlwdGlvblJlYWRPbmx5ICYmICF0aXRsZUV4cHJlc3Npb24gJiYgIWRlc2NyaXB0aW9uRXhwcmVzc2lvbikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIE5vdyBjb21iaW5lIGV4cHJlc3Npb25zXG5cdGlmICh0aXRsZUV4cHJlc3Npb24gJiYgIWRlc2NyaXB0aW9uRXhwcmVzc2lvbikge1xuXHRcdHJldHVybiB0aXRsZUV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAoIXRpdGxlRXhwcmVzc2lvbiAmJiBkZXNjcmlwdGlvbkV4cHJlc3Npb24pIHtcblx0XHRyZXR1cm4gZGVzY3JpcHRpb25FeHByZXNzaW9uO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21iaW5lVGl0bGVBbmREZXNjcmlwdGlvbkV4cHJlc3Npb24ob0ZpZWxkVGl0bGVGaWVsZENvbnRyb2wsIG9GaWVsZERlc2NyaXB0aW9uRmllbGRDb250cm9sKTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVUaXRsZUFuZERlc2NyaXB0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChvVGl0bGVGaWVsZENvbnRyb2w/OiBzdHJpbmcsIG9EZXNjcmlwdGlvbkZpZWxkQ29udHJvbD86IHN0cmluZyk6IHN0cmluZyB7XG5cdC8vIElmIGJvdGggaGVhZGVyIGFuZCB0aXRsZSBmaWVsZCBhcmUgYmFzZWQgb24gZHlubWFpYyBmaWVsZCBjb250cm9sLCB0aGUgZWRpdGFibGUgaGVhZGVyXG5cdC8vIGlzIHZpc2libGUgaWYgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGlzIG5vdCByZWFkeSBvbmx5XG5cdHJldHVybiBcIns9ICVcIiArIG9UaXRsZUZpZWxkQ29udHJvbCArIFwiID09PSAxID8gKCAlXCIgKyBvRGVzY3JpcHRpb25GaWVsZENvbnRyb2wgKyBcIiA9PT0gMSA/IGZhbHNlIDogdHJ1ZSApIDogdHJ1ZSB9XCI7XG59O1xuXG4vKlxuICogR2V0IEV4cHJlc3Npb24gb2YgcHJlc3MgZXZlbnQgZm9yIHRoZSBkZWxldGUgYnV0dG9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIGVudGl0eVNldCBUaGUgY3VycmVudCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gY29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogcmV0dXJucyBUaGUgZnVuY3Rpb24gc3RyaW5nIGdlbmVyYXRlZCBmcm9tIHRoZSBDb21tb25IZWxwZXIncyBtZXRob2QgZ2VuZXJhdGVGdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJlc3NFeHByZXNzaW9uRm9yRGVsZXRlID0gZnVuY3Rpb24gKCk6IHN0cmluZyB7XG5cdGNvbnN0IGRlbGV0YWJsZUNvbnRleHRzID0gXCIkeyR2aWV3Pi99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHR0aXRsZSA9IFwiJHskdmlldz4vfS5ieUlkKCdmZTo6T2JqZWN0UGFnZScpLmRhdGEoJ09iamVjdFBhZ2VTdWJ0aXRsZScpXCIsXG5cdFx0ZGVzY3JpcHRpb24gPSBcIiR7JHZpZXc+L30uYnlJZCgnZmU6Ok9iamVjdFBhZ2UnKS5kYXRhKCdPYmplY3RQYWdlRGVzY3JpcHRpb24nKVwiO1xuXG5cdGNvbnN0IHBhcmFtcyA9IHtcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uXG5cdH07XG5cdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcIi5lZGl0Rmxvdy5kZWxldGVEb2N1bWVudFwiLCBkZWxldGFibGVDb250ZXh0cywgQ29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKHBhcmFtcykpO1xufTtcblxuLypcbiAqIEdldCBFeHByZXNzaW9uIG9mIHByZXNzIGV2ZW50IG9mIEVkaXQgYnV0dG9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtvYmplY3R9IFtvRGF0YUZpZWxkXSBEYXRhIGZpZWxkIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFtzRW50aXR5U2V0TmFtZV0gRW50aXR5IHNldCBuYW1lXG4gKiBAcGFyYW0ge29iamVjdH0gW29IZWFkZXJBY3Rpb25dIEhlYWRlciBhY3Rpb24gb2JqZWN0XG4gKiByZXR1cm5zIHtzdHJpbmd9ICBiaW5kaW5nIGV4cHJlc3Npb24gLyBmdW5jdGlvbiBzdHJpbmcgZ2VuZXJhdGVkIGZyb20gY29tbWFuaGVscGVyJ3MgZnVuY3Rpb24gZ2VuZXJhdGVGdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJlc3NFeHByZXNzaW9uRm9yRWRpdCA9IGZ1bmN0aW9uIChcblx0b0RhdGFGaWVsZDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBY3Rpb24+LFxuXHRzRW50aXR5U2V0TmFtZTogc3RyaW5nLFxuXHRvSGVhZGVyQWN0aW9uPzogQmFzZUFjdGlvblxuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0VkaXRhYmxlQ29udGV4dHMgPSBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQgJiYgb0RhdGFGaWVsZC5BY3Rpb24hKSxcblx0XHRzRGF0YUZpZWxkRW51bU1lbWJlciA9XG5cdFx0XHRvRGF0YUZpZWxkICYmXG5cdFx0XHRvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyAmJlxuXHRcdFx0KG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPilbXCIkRW51bU1lbWJlclwiXSxcblx0XHRzSW52b2NhdGlvbkdyb3VwID0gc0RhdGFGaWVsZEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiID8gXCJDaGFuZ2VTZXRcIiA6IFwiSXNvbGF0ZWRcIjtcblx0Y29uc3Qgb1BhcmFtcyA9IHtcblx0XHRjb250ZXh0czogXCIkeyR2aWV3Pi99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHRlbnRpdHlTZXROYW1lOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNFbnRpdHlTZXROYW1lKSxcblx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0ludm9jYXRpb25Hcm91cCksXG5cdFx0bW9kZWw6IFwiJHskc291cmNlPi99LmdldE1vZGVsKClcIixcblx0XHRsYWJlbDogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkICYmIG9EYXRhRmllbGQuTGFiZWwhLCB0cnVlKSxcblx0XHRpc05hdmlnYWJsZTogb0hlYWRlckFjdGlvbiAmJiBvSGVhZGVyQWN0aW9uLmlzTmF2aWdhYmxlLFxuXHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjpcblx0XHRcdG9IZWFkZXJBY3Rpb24gJiYgb0hlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24gPyBgJyR7b0hlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb259J2AgOiB1bmRlZmluZWQsXG5cdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nOiBvSGVhZGVyQWN0aW9uPy5kaXNhYmxlU3RyaWN0SGFuZGxpbmdcblx0fTtcblx0cmV0dXJuIENvbW1vbkhlbHBlci5nZW5lcmF0ZUZ1bmN0aW9uKFwiLmhhbmRsZXJzLm9uQ2FsbEFjdGlvblwiLCBcIiR7JHZpZXc+L31cIiwgc0VkaXRhYmxlQ29udGV4dHMsIENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhvUGFyYW1zKSk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSAncHJlc3MnIGV2ZW50IGluIHRoZSBmb290ZXIgYW5ub3RhdGlvbiBhY3Rpb25zLlxuICogQHBhcmFtIGRhdGFGaWVsZE1vZGVsUGF0aCBUaGUgZGF0YSBtb2RlbCBwYXRoIG9mIHRoZSBkYXRhIGZpZWxkXG4gKiBAcGFyYW0gZW50aXR5U2V0TmFtZSBUaGUgZW50aXR5IHNldCBuYW1lXG4gKiBAcGFyYW0gaGVhZGVyQWN0aW9uIFRoZSBoZWFkZXIgYWN0aW9uIG9iamVjdFxuICogQHJldHVybnMgIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gb3IgZnVuY3Rpb24gc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmVzc0V4cHJlc3Npb25Gb3JGb290ZXJBbm5vdGF0aW9uQWN0aW9uID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGRNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkRm9yQWN0aW9uPixcblx0ZW50aXR5U2V0TmFtZTogc3RyaW5nLFxuXHRoZWFkZXJBY3Rpb246IEN1c3RvbUFjdGlvblxuKTogc3RyaW5nIHtcblx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGRGb3JBY3Rpb247XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRzID0gQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhkYXRhRmllbGQuQWN0aW9uIGFzIHN0cmluZyk7XG5cdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0Y29udGV4dHM6IFwiJHskdmlldz4vfS5nZXRCaW5kaW5nQ29udGV4dCgpXCIsXG5cdFx0ZW50aXR5U2V0TmFtZTogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhlbnRpdHlTZXROYW1lKSxcblx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoXG5cdFx0XHRkYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIiA/IFwiQ2hhbmdlU2V0XCIgOiBcIklzb2xhdGVkXCJcblx0XHQpLFxuXHRcdG1vZGVsOiBcIiR7JHNvdXJjZT4vfS5nZXRNb2RlbCgpXCIsXG5cdFx0bGFiZWw6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoZGF0YUZpZWxkLkxhYmVsIGFzIHN0cmluZywgdHJ1ZSksXG5cdFx0aXNOYXZpZ2FibGU6IGhlYWRlckFjdGlvbi5pc05hdmlnYWJsZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IGhlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdD8gYCcke2hlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb259J2Bcblx0XHRcdDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcIi5oYW5kbGVycy5vbkNhbGxBY3Rpb25cIiwgXCIkeyR2aWV3Pi99XCIsIGFjdGlvbkNvbnRleHRzLCBDb21tb25IZWxwZXIub2JqZWN0VG9TdHJpbmcob1BhcmFtcykpO1xufTtcblxuLypcbiAqIEdldCBFeHByZXNzaW9uIGZvciBleGVjdXRpbmcgdGhlIGV2ZW50IGV4cHJlc3Npb24gb2YgdGhlIHByaW1hcnkgYWN0aW9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtvYmplY3R9IFtvRGF0YUZpZWxkXSBEYXRhIGZpZWxkIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFtzRW50aXR5U2V0TmFtZV0gRW50aXR5IHNldCBuYW1lXG4gKiBAcGFyYW0ge29iamVjdH0gW29IZWFkZXJBY3Rpb25dIEhlYWRlciBhY3Rpb24gb2JqZWN0XG4gKiBAcGFyYW0ge0NvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nfSBUaGUgdmlzaWJpbGl0eSBvZiBzZW1hdGljIHBvc2l0aXZlIGFjdGlvblxuICogQHBhcmFtIHtDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZ30gVGhlIGVuYWJsZW1lbnQgb2Ygc2VtYW50aWMgcG9zaXRpdmUgYWN0aW9uXG4gKiBAcGFyYW0ge0NvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nfSBUaGUgRWRpdCBidXR0b24gdmlzaWJpbGl0eVxuICogQHBhcmFtIHtDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZ30gVGhlIGVuYWJsZW1lbnQgb2YgRWRpdCBidXR0b25cbiAqIHJldHVybnMge3N0cmluZ30gIGJpbmRpbmcgZXhwcmVzc2lvbiAvIGZ1bmN0aW9uIHN0cmluZyBnZW5lcmF0ZWQgZnJvbSBjb21tYW5oZWxwZXIncyBmdW5jdGlvbiBnZW5lcmF0ZUZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmVzc0V4cHJlc3Npb25Gb3JQcmltYXJ5QWN0aW9uID0gZnVuY3Rpb24gKFxuXHRvRGF0YUZpZWxkOiBEYXRhRmllbGRGb3JBY3Rpb24gfCB1bmRlZmluZWQsXG5cdHNFbnRpdHlTZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9IZWFkZXJBY3Rpb246IEJhc2VBY3Rpb24gfCBudWxsLFxuXHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nLFxuXHRwb3NpdGl2ZUFjdGlvbkVuYWJsZWQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nLFxuXHRlZGl0QWN0aW9uVmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmcsXG5cdGVkaXRBY3Rpb25FbmFibGVkOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZ1xuKTogc3RyaW5nIHtcblx0Y29uc3Qgc0FjdGlvbkNvbnRleHRzID0gQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkPy5BY3Rpb24udG9TdHJpbmcoKSA/PyBcIlwiKSxcblx0XHRzRGF0YUZpZWxkRW51bU1lbWJlciA9XG5cdFx0XHRvRGF0YUZpZWxkICYmXG5cdFx0XHRvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyAmJlxuXHRcdFx0KG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPilbXCIkRW51bU1lbWJlclwiXSxcblx0XHRzSW52b2NhdGlvbkdyb3VwID0gc0RhdGFGaWVsZEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiID8gXCJDaGFuZ2VTZXRcIiA6IFwiSXNvbGF0ZWRcIjtcblx0Y29uc3Qgb1BhcmFtcyA9IHtcblx0XHRjb250ZXh0czogXCIkeyR2aWV3Pi99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHRlbnRpdHlTZXROYW1lOiBzRW50aXR5U2V0TmFtZSA/IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0VudGl0eVNldE5hbWUpIDogXCJcIixcblx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0ludm9jYXRpb25Hcm91cCksXG5cdFx0bW9kZWw6IFwiJHskc291cmNlPi99LmdldE1vZGVsKClcIixcblx0XHRsYWJlbDogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkPy5MYWJlbD8udG9TdHJpbmcoKSA/PyBcIlwiLCB0cnVlKSxcblx0XHRpc05hdmlnYWJsZTogb0hlYWRlckFjdGlvbj8uaXNOYXZpZ2FibGUsXG5cdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBvSGVhZGVyQWN0aW9uPy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdD8gYCcke29IZWFkZXJBY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9ufSdgXG5cdFx0XHQ6IHVuZGVmaW5lZFxuXHR9O1xuXHRjb25zdCBvQ29uZGl0aW9ucyA9IHtcblx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGUsXG5cdFx0cG9zaXRpdmVBY3Rpb25FbmFibGVkLFxuXHRcdGVkaXRBY3Rpb25WaXNpYmxlLFxuXHRcdGVkaXRBY3Rpb25FbmFibGVkXG5cdH07XG5cdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcblx0XHRcIi5oYW5kbGVycy5vblByaW1hcnlBY3Rpb25cIixcblx0XHRcIiRjb250cm9sbGVyXCIsXG5cdFx0XCIkeyR2aWV3Pi99XCIsXG5cdFx0XCIkeyR2aWV3Pi99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHRzQWN0aW9uQ29udGV4dHMsXG5cdFx0Q29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKG9QYXJhbXMpLFxuXHRcdENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhvQ29uZGl0aW9ucylcblx0KTtcbn07XG5cbi8qXG4gKiBHZXRzIHRoZSBiaW5kaW5nIG9mIHRoZSBjb250YWluZXIgSEJveCBmb3IgdGhlIGhlYWRlciBmYWNldC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb0NvbnRyb2xDb25maWd1cmF0aW9uXSBUaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvcm0gb2YgdGhlIHZpZXdEYXRhIG1vZGVsXG4gKiBAcGFyYW0ge29iamVjdH0gW29IZWFkZXJGYWNldF0gVGhlIG9iamVjdCBvZiB0aGUgaGVhZGVyIGZhY2V0XG4gKiByZXR1cm5zIHsqfSAgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmcm9tIGZ1bmN0aW9uIGdldEJpbmRpbmdXaXRoR3JvdXBJZEZyb21Db25maWcgb3IgdW5kZWZpbmVkLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3Rhc2hhYmxlSEJveEJpbmRpbmcgPSBmdW5jdGlvbiAoXG5cdG9Db250cm9sQ29uZmlndXJhdGlvbjogQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdG9IZWFkZXJGYWNldDogeyBGYWNldDogRmllbGRHcm91cEZhY2V0IH1cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChvSGVhZGVyRmFjZXQgJiYgb0hlYWRlckZhY2V0LkZhY2V0ICYmIG9IZWFkZXJGYWNldC5GYWNldC50YXJnZXRBbm5vdGF0aW9uVHlwZSA9PT0gXCJEYXRhUG9pbnRcIikge1xuXHRcdHJldHVybiBnZXRCaW5kaW5nV2l0aEdyb3VwSWRGcm9tQ29uZmlnKG9Db250cm9sQ29uZmlndXJhdGlvbiwgb0hlYWRlckZhY2V0LkZhY2V0LnRhcmdldEFubm90YXRpb25WYWx1ZSEpO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyRm9ybUhib3hSZW5kZXJUeXBlID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChkYXRhRmllbGQ/LnRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBcIkJhcmVcIjtcbn07XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgYWN0aW9uIGdyb3VwIGhhbmRsZXIgdGhhdCBpcyBpbnZva2VkIHdoZW4gYWRkaW5nIHRoZSBtZW51IGJ1dHRvbiBoYW5kbGluZyBhcHByb3ByaWF0ZWx5LlxuICogQHBhcmFtIG9DdHggVGhlIGN1cnJlbnQgY29udGV4dCBpbiB3aGljaCB0aGUgaGFuZGxlciBpcyBjYWxsZWRcbiAqIEBwYXJhbSBvQWN0aW9uIFRoZSBjdXJyZW50IGFjdGlvbiBjb250ZXh0XG4gKiBAcGFyYW0gb0RhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24gVGhlIGN1cnJlbnQgZGF0YUZpZWxkIGZvciB0aGUgZGVmYXVsdCBhY3Rpb25cbiAqIEBwYXJhbSBkZWZhdWx0QWN0aW9uQ29udGV4dE9yRW50aXR5U2V0IFRoZSBjdXJyZW50IGNvbnRleHQgZm9yIHRoZSBkZWZhdWx0IGFjdGlvblxuICogQHJldHVybnMgVGhlIGFwcHJvcHJpYXRlIGV4cHJlc3Npb24gc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0QWN0aW9uSGFuZGxlcihcblx0b0N0eDogQ29udGV4dCxcblx0b0FjdGlvbjogQ3VzdG9tQWN0aW9uLFxuXHRvRGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbjogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGREZWZhdWx0Pixcblx0ZGVmYXVsdEFjdGlvbkNvbnRleHRPckVudGl0eVNldDogc3RyaW5nXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChvQWN0aW9uLmRlZmF1bHRBY3Rpb24pIHtcblx0XHRjb25zdCBkZWZhdWx0QWN0aW9uID0gb0FjdGlvbi5kZWZhdWx0QWN0aW9uIGFzIEN1c3RvbUFjdGlvbjtcblx0XHR0cnkge1xuXHRcdFx0c3dpdGNoIChkZWZhdWx0QWN0aW9uLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcIkZvckFjdGlvblwiOiB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldFByZXNzRXhwcmVzc2lvbkZvckVkaXQoXG5cdFx0XHRcdFx0XHRvRGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbj4sXG5cdFx0XHRcdFx0XHRkZWZhdWx0QWN0aW9uQ29udGV4dE9yRW50aXR5U2V0LFxuXHRcdFx0XHRcdFx0b0FjdGlvbi5kZWZhdWx0QWN0aW9uIGFzIEJhc2VBY3Rpb25cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6IHtcblx0XHRcdFx0XHRpZiAoZGVmYXVsdEFjdGlvbi5jb21tYW5kKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJjbWQ6XCIgKyBkZWZhdWx0QWN0aW9uLmNvbW1hbmQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBkZWZhdWx0QWN0aW9uLnByZXNzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRBY3Rpb24uY29tbWFuZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFwiY21kOlwiICsgZGVmYXVsdEFjdGlvbi5jb21tYW5kO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZGVmYXVsdEFjdGlvbi5ub1dyYXApIHtcblx0XHRcdFx0XHRcdHJldHVybiBkZWZhdWx0QWN0aW9uLnByZXNzO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLmJ1aWxkQWN0aW9uV3JhcHBlcihkZWZhdWx0QWN0aW9uLCB7IGlkOiBcImZvclRoZU9iamVjdFBhZ2VcIiB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChpb0V4KSB7XG5cdFx0XHRyZXR1cm4gXCJiaW5kaW5nIGZvciB0aGUgZGVmYXVsdCBhY3Rpb24gaXMgbm90IHdvcmtpbmcgYXMgZXhwZWN0ZWRcIjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgc3ViIHNlY3Rpb24gdmlzdWFsaXphdGlvbiBpcyBwYXJ0IG9mIHByZXZpZXcuXG4gKiBAcGFyYW0gc3ViU2VjdGlvbiBUaGUgc3ViIHNlY3Rpb24gdmlzdWFsaXphdGlvblxuICogQHJldHVybnMgQSBCb29sZWFuIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Zpc3VhbGl6YXRpb25Jc1BhcnRPZlByZXZpZXcoc3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uKTogYm9vbGVhbiB7XG5cdHJldHVybiBzdWJTZWN0aW9uLmlzUGFydE9mUHJldmlldyA9PT0gdHJ1ZSB8fCBzdWJTZWN0aW9uLnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXS50eXBlICE9PSBcIlRhYmxlXCI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXhwcmVzc2lvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgZm9vdGVyIG9mIHRoZSBvYmplY3QgcGFnZSBpcyB0byBiZSB2aXNpYmxlIG9yIG5vdC5cbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGUgZm9ybWF0dGVyLlxuICogQHBhcmFtIGZvb3RlckFjdGlvbnMgVGhlIGxpc3Qgb2YgZm9vdGVyIGFjdGlvbnMuXG4gKiBAcmV0dXJucyBBIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9vdGVyVmlzaWJpbGl0eUV4cHJlc3Npb25JbnRlcm5hbCA9IGZ1bmN0aW9uIChcblx0Y29udGV4dDogSUNvbnRleHQsXG5cdGZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblxuXHRjb25zdCBfZ2VuZXJhdGVCaW5kaW5nc0ZvckFjdGlvbnMgPSAoYWN0aW9uczogQmFzZUFjdGlvbltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPT4ge1xuXHRcdGlmIChhY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGFjdGlvbnMubWFwKFxuXHRcdFx0XHQoYWN0aW9uKSA9PlxuXHRcdFx0XHRcdGFjdGlvbi52aXNpYmxlRXhwcmVzc2lvbiA/P1xuXHRcdFx0XHRcdChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24udmlzaWJsZSA/PyB0cnVlLCBcImJvb2xlYW5cIikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIFtjb25zdGFudChmYWxzZSldO1xuXHR9O1xuXG5cdGNvbnN0IGdldEFjdGlvbk1vZGVsUGF0aCA9IChhY3Rpb246IEJhc2VBY3Rpb24pOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEZvckFjdGlvbj4gfCB1bmRlZmluZWQgPT4ge1xuXHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gYWN0aW9uLmFubm90YXRpb25QYXRoO1xuXHRcdGlmIChhbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRDb250ZXh0KGFubm90YXRpb25QYXRoKTtcblx0XHRcdHJldHVybiBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkRm9yQWN0aW9uPihhY3Rpb25Db250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fTtcblxuXHQvLyBBY3Rpb25zIGFyZSBjb21pbmcgZnJvbSB0aGUgY29udmVydGVyIHNvIG9ubHkgZGV0ZXJtaW5pbmcgYWN0aW9ucyBhbmQgbm90IHN0YXRpY2FsbHkgaGlkZGVuIGFyZSBsaXN0ZWRcblx0Y29uc3QgZGV0ZXJtaW5pbmdBY3Rpb25zID0gZm9vdGVyQWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uKTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25CaW5kaW5ncyA9IF9nZW5lcmF0ZUJpbmRpbmdzRm9yQWN0aW9ucyhmb290ZXJBY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBpc01hbmlmZXN0QWN0aW9uKGFjdGlvbikpKTtcblx0Y29uc3QgZGV0ZXJtaW5pbmdBY3Rpb25CaW5kaW5ncyA9IF9nZW5lcmF0ZUJpbmRpbmdzRm9yQWN0aW9ucyhkZXRlcm1pbmluZ0FjdGlvbnMpO1xuXG5cdGNvbnN0IGlzTm90SGlkZGVuRGV0ZXJtaW5pbmdBY3Rpb24gPSAhIWRldGVybWluaW5nQWN0aW9ucy5maW5kKChhY3Rpb24pID0+IHtcblx0XHRjb25zdCBhY3Rpb25Db250ZXh0TW9kZWxQYXRoID0gZ2V0QWN0aW9uTW9kZWxQYXRoKGFjdGlvbik7XG5cdFx0cmV0dXJuICFhY3Rpb25Db250ZXh0TW9kZWxQYXRoPy50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHR9KTtcblxuXHRyZXR1cm4gb3IoXG5cdFx0aXNOb3RIaWRkZW5EZXRlcm1pbmluZ0FjdGlvbixcblx0XHRvciguLi5tYW5pZmVzdEFjdGlvbkJpbmRpbmdzKSxcblx0XHRhbmQob3IoVUkuSXNFZGl0YWJsZSwgb3IoLi4uZGV0ZXJtaW5pbmdBY3Rpb25CaW5kaW5ncykpLCBub3QocGF0aEluTW9kZWwoXCJpc0NyZWF0ZURpYWxvZ09wZW5cIiwgXCJpbnRlcm5hbFwiKSkpXG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cHJlc3Npb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZvb3RlciBvZiB0aGUgb2JqZWN0IHBhZ2UgaXMgdG8gYmUgdmlzaWJsZSBvciBub3QuXG4gKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBmb3IgdGhlIGZvcm1hdHRlci5cbiAqIEBwYXJhbSBmb290ZXJBY3Rpb25zIFRoZSBsaXN0IG9mIGZvb3RlciBhY3Rpb25zLlxuICogQHJldHVybnMgQSBjb21waWxlZCBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZvb3RlclZpc2liaWxpdHlFeHByZXNzaW9uID0gZnVuY3Rpb24gKGNvbnRleHQ6IElDb250ZXh0LCBmb290ZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRGb290ZXJWaXNpYmlsaXR5RXhwcmVzc2lvbkludGVybmFsKGNvbnRleHQsIGZvb3RlckFjdGlvbnMpKTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSBzdWJzZWN0aW9uIGhlYWRlciBsZXZlbC5cbiAqIEBwYXJhbSBzdWJTZWN0aW9uIFRoZSBzdWJzZWN0aW9uIHZpc3VhbGl6YXRpb25cbiAqIEBwYXJhbSBpc01vcmVDb250ZW50XG4gKiBAcmV0dXJucyBBIFN0cmluZyB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyTGV2ZWwoc3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLCBpc01vcmVDb250ZW50OiBib29sZWFuKTogc3RyaW5nIHtcblx0aWYgKGlzTW9yZUNvbnRlbnQpIHtcblx0XHRpZiAoIXN1YlNlY3Rpb24uc2hvd1N1YlNlY3Rpb25UaXRsZSkge1xuXHRcdFx0Ly8gd2hlbmV2ZXIgdGl0bGUgaXMgbWVyZ2VkIGZvciBzdWItc2VjdGlvbiwgbGV2ZWwgc2hvdWxkIGJlIEg0XG5cdFx0XHRyZXR1cm4gXCJINFwiO1xuXHRcdH0gZWxzZSBpZiAoc3ViU2VjdGlvbi5sZXZlbCA9PT0gMiAmJiBzdWJTZWN0aW9uLmRhdGFWaXN1YWxpemF0aW9uVGl0bGVWaXNpYmxlID09PSBcInRydWVcIikge1xuXHRcdFx0Ly8gcmV0YWluIG9sZCBsb2dpY1xuXHRcdFx0cmV0dXJuIFwiSDZcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiSDVcIjsgLy8gcmV0YWluIG9sZCBsb2dpY1xuXHRcdH1cblx0fSBlbHNlIGlmICghc3ViU2VjdGlvbi5zaG93U3ViU2VjdGlvblRpdGxlKSB7XG5cdFx0Ly8gd2hlbmV2ZXIgdGl0bGUgaXMgbWVyZ2VkIGZvciBzZWN0aW9uLCBsZXZlbCBzaG91bGQgYmUgSDNcblx0XHRyZXR1cm4gXCJIM1wiO1xuXHR9IGVsc2UgaWYgKHN1YlNlY3Rpb24ubGV2ZWwgPT09IDIgJiYgc3ViU2VjdGlvbi5kYXRhVmlzdWFsaXphdGlvblRpdGxlVmlzaWJsZSA9PT0gXCJ0cnVlXCIpIHtcblx0XHQvLyByZXRhaW4gb2xkIGxvZ2ljXG5cdFx0cmV0dXJuIFwiSDVcIjtcblx0fSBlbHNlIHtcblx0XHQvL0NoYW5nZWQgZnJvbSBINCB0byBIMyBmb3IgcHJvcGVyIGFyaWEtbGV2ZWwgaGllcmFyY2h5IGZvciB0aGUgdGFibGVzIHdpdGggb25seSBzdWJzZWN0aW9uIHRpdGxlIGFuZCBubyBzZWN0aW9uIHRpdGxlXG5cdFx0cmV0dXJuIFwiSDNcIjtcblx0fVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgZm9yIHRoZSBoZWFkZXIgZm9ybWVsZW1lbnQuXG4gKiBAcGFyYW0gaGVhZGVyRm9ybURhdGFcbiAqIEBwYXJhbSBmb3JtRWxlbWVudElkUHJlZml4XG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIGZvciB0aGUgYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZVxuICovXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyRm9ybUFyaWFMYWJlbGxlZEJ5ID0gZnVuY3Rpb24gKGhlYWRlckZvcm1EYXRhOiBIZWFkZXJGb3JtRGF0YSwgZm9ybUVsZW1lbnRJZFByZWZpeDogc3RyaW5nKTogc3RyaW5nIHtcblx0bGV0IHRpdGxlSWQgPSBcIlwiO1xuXHRpZiAoaGVhZGVyRm9ybURhdGEubGFiZWwpIHtcblx0XHR0aXRsZUlkID0gU3RhYmxlSWRIZWxwZXIuZ2VuZXJhdGUoW2hlYWRlckZvcm1EYXRhLmlkLCBcIlRpdGxlXCJdKTtcblx0fVxuXHRjb25zdCBsYWJlbElkID0gU3RhYmxlSWRIZWxwZXIuZ2VuZXJhdGUoW2Zvcm1FbGVtZW50SWRQcmVmaXgsIFwiTGFiZWxcIl0pO1xuXHRyZXR1cm4gdGl0bGVJZCA/IGAke3RpdGxlSWR9LCR7bGFiZWxJZH1gIDogbGFiZWxJZDtcbn07XG5cbmdldEZvb3RlclZpc2liaWxpdHlFeHByZXNzaW9uLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXdEQSxNQUFNQSxVQUFVLEdBQUdDLFFBQVEsQ0FBQ0QsVUFBVTtFQUUvQixNQUFNRSxxQkFBcUIsR0FBRyxTQUFBQSxDQUNwQ0MsZUFBMkQsRUFDM0RDLFFBQWtCLEVBQ2xCQyxVQUEyQixFQUNRO0lBQ25DLE9BQU9DLHlCQUF5QixDQUMvQkgsZUFBZSxFQUNmSSx3QkFBd0IsRUFDeEJDLFNBQVMsRUFDVEgsVUFBVSxFQUNWRCxRQUNELENBQUM7RUFDRixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkFLLFFBQUEsQ0FBQVAs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
|
|
@@ -47,7 +47,6 @@ import {
|
|
|
47
47
|
} from "sap/fe/macros/field/FieldTemplating";
|
|
48
48
|
import mLibrary from "sap/m/library";
|
|
49
49
|
import BindingInfo from "sap/ui/base/BindingInfo";
|
|
50
|
-
import Library from "sap/ui/core/Lib";
|
|
51
50
|
import type { ManifestOutboundEntry } from "sap/ui/core/Manifest";
|
|
52
51
|
import type { IContext } from "sap/ui/core/util/XMLPreprocessor";
|
|
53
52
|
import ODataModelAnnotationHelper from "sap/ui/model/odata/v4/AnnotationHelper";
|
|
@@ -479,9 +478,6 @@ export const getBindingWithGroupIdFromConfig = function (oConfigurations: Contro
|
|
|
479
478
|
* @returns The Binding expression including path and $select query as parameter depending on the function parameters
|
|
480
479
|
*/
|
|
481
480
|
export const createBindingForAlternateAndSecondaryKeys = function (dataModelObjectPath: DataModelObjectPath<Facet>): string | undefined {
|
|
482
|
-
if (!dataModelObjectPath?.navigationProperties?.length) {
|
|
483
|
-
return undefined;
|
|
484
|
-
}
|
|
485
481
|
let binding: Partial<PathInModelExpression<undefined>> | undefined;
|
|
486
482
|
const alternateAndSecondaryKeys = ModelHelper.getAlternateAndSecondaryKeys(
|
|
487
483
|
dataModelObjectPath?.targetEntityType,
|
|
@@ -885,7 +881,8 @@ export function getHeaderLevel(subSection: DataVisualizationSubSection, isMoreCo
|
|
|
885
881
|
// retain old logic
|
|
886
882
|
return "H5";
|
|
887
883
|
} else {
|
|
888
|
-
|
|
884
|
+
//Changed from H4 to H3 for proper aria-level hierarchy for the tables with only subsection title and no section title
|
|
885
|
+
return "H3";
|
|
889
886
|
}
|
|
890
887
|
}
|
|
891
888
|
|
|
@@ -904,14 +901,4 @@ export const getHeaderFormAriaLabelledBy = function (headerFormData: HeaderFormD
|
|
|
904
901
|
return titleId ? `${titleId},${labelId}` : labelId;
|
|
905
902
|
};
|
|
906
903
|
|
|
907
|
-
/**
|
|
908
|
-
* Gets the aria text for form regions on Object Page.
|
|
909
|
-
* @param subSectionTitle The title of the subsection
|
|
910
|
-
* @returns The aria text for the form region
|
|
911
|
-
*/
|
|
912
|
-
export const getFormAriaText = function (subSectionTitle: string | undefined): string | undefined {
|
|
913
|
-
const resourceBundle = Library.getResourceBundleFor("sap.fe.core")!;
|
|
914
|
-
return subSectionTitle !== undefined ? resourceBundle.getText("C_FORM_ARIA_TEXT", [subSectionTitle]) : undefined;
|
|
915
|
-
};
|
|
916
|
-
|
|
917
904
|
getFooterVisibilityExpression.requiresIContext = true;
|