@sapui5/sap.fe.core 1.130.0 → 1.131.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/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +3 -3
- package/src/sap/fe/core/ActionRuntime.ts +1 -1
- package/src/sap/fe/core/CommonUtils.js +38 -14
- package/src/sap/fe/core/CommonUtils.ts +39 -15
- package/src/sap/fe/core/TemplateComponent.js +4 -1
- package/src/sap/fe/core/TemplateComponent.ts +2 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
- package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
- package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +4 -2
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +3 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
- package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
- package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
- package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +9 -5
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +17 -6
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +17 -20
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +30 -29
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
- package/src/sap/fe/core/converters/ConverterContext.js +10 -3
- package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
- package/src/sap/fe/core/converters/controls/Common/Table.js +63 -67
- package/src/sap/fe/core/converters/controls/Common/Table.ts +87 -81
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
- package/src/sap/fe/core/formatters/StandardFormatter.js +4 -1
- package/src/sap/fe/core/formatters/StandardFormatter.ts +4 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +37 -10
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +38 -14
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
- package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
- package/src/sap/fe/core/helpers/MetaPath.js +17 -2
- package/src/sap/fe/core/helpers/MetaPath.ts +27 -6
- package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
- package/src/sap/fe/core/library.js +5 -2
- package/src/sap/fe/core/library.support.js +3 -3
- package/src/sap/fe/core/library.support.ts +2 -1
- package/src/sap/fe/core/library.ts +4 -0
- package/src/sap/fe/core/messagebundle.properties +6 -0
- package/src/sap/fe/core/messagebundle_ar.properties +11 -3
- package/src/sap/fe/core/messagebundle_bg.properties +14 -6
- package/src/sap/fe/core/messagebundle_ca.properties +10 -2
- package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
- package/src/sap/fe/core/messagebundle_cs.properties +10 -2
- package/src/sap/fe/core/messagebundle_cy.properties +10 -2
- package/src/sap/fe/core/messagebundle_da.properties +10 -2
- package/src/sap/fe/core/messagebundle_de.properties +12 -4
- package/src/sap/fe/core/messagebundle_el.properties +10 -2
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
- package/src/sap/fe/core/messagebundle_es.properties +12 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
- package/src/sap/fe/core/messagebundle_et.properties +10 -2
- package/src/sap/fe/core/messagebundle_fi.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
- package/src/sap/fe/core/messagebundle_hi.properties +10 -2
- package/src/sap/fe/core/messagebundle_hr.properties +11 -3
- package/src/sap/fe/core/messagebundle_hu.properties +11 -3
- package/src/sap/fe/core/messagebundle_id.properties +10 -2
- package/src/sap/fe/core/messagebundle_it.properties +10 -2
- package/src/sap/fe/core/messagebundle_iw.properties +11 -3
- package/src/sap/fe/core/messagebundle_ja.properties +10 -2
- package/src/sap/fe/core/messagebundle_kk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ko.properties +10 -2
- package/src/sap/fe/core/messagebundle_lt.properties +10 -2
- package/src/sap/fe/core/messagebundle_lv.properties +10 -2
- package/src/sap/fe/core/messagebundle_mk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ms.properties +10 -2
- package/src/sap/fe/core/messagebundle_nl.properties +12 -4
- package/src/sap/fe/core/messagebundle_no.properties +11 -3
- package/src/sap/fe/core/messagebundle_pl.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
- package/src/sap/fe/core/messagebundle_ro.properties +10 -2
- package/src/sap/fe/core/messagebundle_ru.properties +10 -2
- package/src/sap/fe/core/messagebundle_sh.properties +10 -2
- package/src/sap/fe/core/messagebundle_sk.properties +10 -2
- package/src/sap/fe/core/messagebundle_sl.properties +10 -2
- package/src/sap/fe/core/messagebundle_sr.properties +10 -2
- package/src/sap/fe/core/messagebundle_sv.properties +10 -2
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +12 -4
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +11 -3
- package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
- package/src/sap/fe/core/operationsHelper.js +4 -4
- package/src/sap/fe/core/operationsHelper.ts +4 -4
- package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
- package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -4
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
|
@@ -143,7 +143,8 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
|
|
|
143
143
|
function dialogCloseHandler() {
|
|
144
144
|
dialogControl.close();
|
|
145
145
|
oBackButton.setVisible(false);
|
|
146
|
-
const
|
|
146
|
+
const msgView = dialogControl.getContent()[0];
|
|
147
|
+
const oMessageDialogModel = msgView.getModel();
|
|
147
148
|
if (oMessageDialogModel) {
|
|
148
149
|
oMessageDialogModel.setData({});
|
|
149
150
|
}
|
|
@@ -526,7 +527,8 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
|
|
|
526
527
|
if (preText) {
|
|
527
528
|
const techDetailsForNonGenericMessage = {
|
|
528
529
|
fe: {
|
|
529
|
-
singleErrorPreText: preText
|
|
530
|
+
singleErrorPreText: preText,
|
|
531
|
+
singleGenericMessageId: genericMsgs[0].getId()
|
|
530
532
|
}
|
|
531
533
|
};
|
|
532
534
|
const existingTechDetails = nonGenericMsgs[0].getTechnicalDetails() ?? {};
|
|
@@ -617,35 +619,43 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
|
|
|
617
619
|
const messageObject = prepareMessageViewForDialog(messageDialogModel, strictHandlingFlow);
|
|
618
620
|
const sorter = getSorterForMessages();
|
|
619
621
|
messageObject.messageView.getBinding("items").sort(sorter);
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
622
|
+
if (!dialogControl || !dialogControl.isOpen()) {
|
|
623
|
+
dialogControl = new Dialog({
|
|
624
|
+
resizable: true,
|
|
625
|
+
endButton: new Button({
|
|
626
|
+
press: function () {
|
|
627
|
+
dialogCloseHandler();
|
|
628
|
+
// also remove bound transition messages if we were showing them
|
|
629
|
+
Messaging.removeMessages(messagesToShow);
|
|
630
|
+
},
|
|
631
|
+
text: resourceBundle.getText("C_COMMON_SAPFE_CLOSE")
|
|
632
|
+
}),
|
|
633
|
+
escapeHandler: function (completionPromise) {
|
|
624
634
|
dialogCloseHandler();
|
|
625
635
|
// also remove bound transition messages if we were showing them
|
|
626
636
|
Messaging.removeMessages(messagesToShow);
|
|
637
|
+
completionPromise.resolve();
|
|
627
638
|
},
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
})
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
639
|
+
customHeader: new Bar({
|
|
640
|
+
contentMiddle: [new Text({
|
|
641
|
+
text: resourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE")
|
|
642
|
+
})],
|
|
643
|
+
contentLeft: [oBackButton]
|
|
644
|
+
}),
|
|
645
|
+
contentWidth: "37.5em",
|
|
646
|
+
contentHeight: "21.5em",
|
|
647
|
+
verticalScrolling: false,
|
|
648
|
+
closeOnNavigation: false,
|
|
649
|
+
afterClose: function () {
|
|
650
|
+
for (const item of aResolveFunctions) {
|
|
651
|
+
item();
|
|
652
|
+
}
|
|
653
|
+
aResolveFunctions = [];
|
|
643
654
|
}
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
});
|
|
655
|
+
});
|
|
656
|
+
}
|
|
647
657
|
dialogControl.removeAllContent();
|
|
648
|
-
dialogControl.addContent(
|
|
658
|
+
dialogControl.addContent(messageView);
|
|
649
659
|
if (contextNeedsEtagRefresh) {
|
|
650
660
|
dialogControl.setBeginButton(new Button({
|
|
651
661
|
press: function () {
|
|
@@ -679,6 +689,10 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
|
|
|
679
689
|
} = uiDecision;
|
|
680
690
|
const messageToShow = messagesToShow[0];
|
|
681
691
|
const messageTechnicalDetails = messageToShow.getTechnicalDetails();
|
|
692
|
+
const {
|
|
693
|
+
singleGenericMessageId,
|
|
694
|
+
singleErrorPreText
|
|
695
|
+
} = (messageTechnicalDetails === null || messageTechnicalDetails === void 0 ? void 0 : messageTechnicalDetails.fe) ?? {};
|
|
682
696
|
const retryAfterMessage = messageHandling.getRetryAfterMessage(messageToShow, true);
|
|
683
697
|
// If it is a retry message, then it needs to have technical details to show it.
|
|
684
698
|
const showMessageBox = retryAfterMessage ? messageTechnicalDetails : true;
|
|
@@ -689,8 +703,6 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
|
|
|
689
703
|
if (retryAfterMessage) {
|
|
690
704
|
formattedTextString = `${formattedTextString}<h6>${retryAfterMessage}</h6><br/>`;
|
|
691
705
|
} else {
|
|
692
|
-
var _fe;
|
|
693
|
-
const singleErrorPreText = messageTechnicalDetails === null || messageTechnicalDetails === void 0 ? void 0 : (_fe = messageTechnicalDetails.fe) === null || _fe === void 0 ? void 0 : _fe.singleErrorPreText;
|
|
694
706
|
if (singleErrorPreText) {
|
|
695
707
|
const messageHeader = messageToShow !== null && messageToShow !== void 0 && messageToShow["headerName"] ? `${messageToShow === null || messageToShow === void 0 ? void 0 : messageToShow["headerName"]}:` : "";
|
|
696
708
|
formattedTextString = `${formattedTextString}${singleErrorPreText}<br/><br/>${messageHeader} `;
|
|
@@ -706,16 +718,24 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
|
|
|
706
718
|
const formattedText = new FormattedText({
|
|
707
719
|
htmlText: formattedTextString
|
|
708
720
|
});
|
|
709
|
-
const closeMessageBox = function () {
|
|
710
|
-
Messaging.removeMessages(messageToShow);
|
|
711
|
-
resolve(undefined);
|
|
712
|
-
};
|
|
713
721
|
showMessageBoxPerType(formattedText, {
|
|
714
|
-
onClose: closeMessageBox
|
|
722
|
+
onClose: closeMessageBox.bind(null, messageToShow, resolve, singleGenericMessageId)
|
|
715
723
|
}, messageToShow);
|
|
716
724
|
}
|
|
717
725
|
});
|
|
718
726
|
}
|
|
727
|
+
function closeMessageBox(messageShown, callBack, singleGenericMessageId) {
|
|
728
|
+
const messagesToRemove = [messageShown];
|
|
729
|
+
if (singleGenericMessageId) {
|
|
730
|
+
const allMsgs = Messaging.getMessageModel().getData();
|
|
731
|
+
const genericMessage = allMsgs.find(msg => msg.getId() === singleGenericMessageId);
|
|
732
|
+
if (genericMessage) {
|
|
733
|
+
messagesToRemove.push(genericMessage);
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
Messaging.removeMessages(messagesToRemove);
|
|
737
|
+
callBack(undefined);
|
|
738
|
+
}
|
|
719
739
|
function showMessageBoxPerType(formattedText, close, message) {
|
|
720
740
|
switch (message.getType()) {
|
|
721
741
|
case MessageType.Error:
|
|
@@ -1003,7 +1023,7 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
|
|
|
1003
1023
|
let messageSubtitle;
|
|
1004
1024
|
let rowSubtitleValue;
|
|
1005
1025
|
const resourceModel = getResourceModel(table);
|
|
1006
|
-
const tableColProperty = (_table$getParent = table.getParent()) === null || _table$getParent === void 0 ? void 0 : _table$getParent.getTableColumnVisibilityInfo();
|
|
1026
|
+
const tableColProperty = (_table$getParent = table.getParent()) === null || _table$getParent === void 0 ? void 0 : _table$getParent.getTableColumnVisibilityInfo(tableRowContext);
|
|
1007
1027
|
const colFromTableSettings = messageHandling.fetchColumnInfo(message, table);
|
|
1008
1028
|
if (isCreationRow || tableRowContext !== null && tableRowContext !== void 0 && tableRowContext.isInactive()) {
|
|
1009
1029
|
messageSubtitle = resourceModel.getText("T_MESSAGE_ITEM_SUBTITLE", [resourceModel.getText("T_MESSAGE_ITEM_SUBTITLE_CREATION_ROW_INDICATOR"), tableTargetColName ? tableTargetColName : colFromTableSettings.label]);
|
|
@@ -1436,6 +1456,26 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
|
|
|
1436
1456
|
return true;
|
|
1437
1457
|
}
|
|
1438
1458
|
|
|
1459
|
+
/**
|
|
1460
|
+
* Removes Transition messages related to the specified context path when the object page is closed.
|
|
1461
|
+
* @param oContext The binding context for which the messages are checked.
|
|
1462
|
+
*/
|
|
1463
|
+
function removeTransistionMessageForContext(oContext) {
|
|
1464
|
+
const messagesInModel = Messaging.getMessageModel().getData();
|
|
1465
|
+
const isMessageStripMessage = [];
|
|
1466
|
+
messagesInModel === null || messagesInModel === void 0 ? void 0 : messagesInModel.forEach(message => {
|
|
1467
|
+
const isSingleTarget = message.getTargets().length === 1;
|
|
1468
|
+
const isTargetMatching = message.getTargets()[0] === (oContext === null || oContext === void 0 ? void 0 : oContext.getPath());
|
|
1469
|
+
const isTransitionMessage = message.getPersistent() === true;
|
|
1470
|
+
if (isSingleTarget && isTargetMatching && isTransitionMessage) {
|
|
1471
|
+
isMessageStripMessage.push(message);
|
|
1472
|
+
}
|
|
1473
|
+
});
|
|
1474
|
+
if (isMessageStripMessage.length === 1) {
|
|
1475
|
+
Messaging.removeMessages(isMessageStripMessage);
|
|
1476
|
+
}
|
|
1477
|
+
}
|
|
1478
|
+
|
|
1439
1479
|
/**
|
|
1440
1480
|
* This method is responsible for removing messages related to the context from the message model when there is error on the dialog and when the dialog is open.
|
|
1441
1481
|
* @param messages Array of messages
|
|
@@ -1517,8 +1557,10 @@ sap.ui.define(["sap/fe/core/helpers/ResourceModelHelper", "sap/m/Bar", "sap/m/Bu
|
|
|
1517
1557
|
removeMessagesForActionParameterDialog: removeMessagesForActionParameterDialog,
|
|
1518
1558
|
setGroupNameOPTableDisplayMode: setGroupNameOPTableDisplayMode,
|
|
1519
1559
|
updateAddtionalTextForMessageInOPTable: updateAddtionalTextForMessageInOPTable,
|
|
1520
|
-
updateHeaderNameForMessageInOPTable: updateHeaderNameForMessageInOPTable
|
|
1560
|
+
updateHeaderNameForMessageInOPTable: updateHeaderNameForMessageInOPTable,
|
|
1561
|
+
closeMessageBox: closeMessageBox,
|
|
1562
|
+
removeTransistionMessageForContext: removeTransistionMessageForContext
|
|
1521
1563
|
};
|
|
1522
1564
|
return messageHandling;
|
|
1523
1565
|
}, false);
|
|
1524
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiTUxpYiIsImFSZXNvbHZlRnVuY3Rpb25zIiwiZGlhbG9nQ29udHJvbCIsIm9CYWNrQnV0dG9uIiwibWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0cmluZyIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJNZXNzYWdlVHlwZSIsIk5vbmUiLCJpTGVuZ3RoIiwibGVuZ3RoIiwib01lc3NhZ2VDb3VudCIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsImkiLCJnZXRUeXBlIiwiZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5Iiwib1Jlc291cmNlQnVuZGxlIiwiY29uY3VycmVudEVkaXRGbGFnIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0T2JqZWN0IiwiYk1lc3NhZ2VzTW9kaWZpZWQiLCJzRXRhZ01lc3NhZ2UiLCJvTWVzc2FnZSIsIm9UZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImh0dHBTdGF0dXMiLCJpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24iLCJnZXRUZXh0IiwicmVtb3ZlTWVzc2FnZXMiLCJzZXRNZXNzYWdlIiwic2V0VGFyZ2V0cyIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwib01lc3NhZ2VEaWFsb2dNb2RlbCIsImdldE1vZGVsIiwic2V0RGF0YSIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImJNZXNzYWdlRGlhbG9nIiwiZE5vdyIsIkRhdGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJzUmV0cnlBZnRlck1lc3NhZ2UiLCJyZXRyeUFmdGVyIiwiZFJldHJ5QWZ0ZXIiLCJvRGF0ZUZvcm1hdCIsImdldEZ1bGxZZWFyIiwiRGF0ZUZvcm1hdCIsImdldERhdGVUaW1lSW5zdGFuY2UiLCJwYXR0ZXJuIiwiZm9ybWF0IiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiaGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MiLCJnZXRNZXNzYWdlcyIsInVuZGVmaW5lZCIsInNvbWUiLCJtZXNzYWdlIiwicHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nIiwiYlN0cmljdEhhbmRsaW5nRmxvdyIsIm11bHRpNDEyIiwib01lc3NhZ2VUZW1wbGF0ZSIsImRlc2NyaXB0aW9uQmluZGluZyIsInRlY2huaWNhbERldGFpbHNCaW5kaW5nIiwiTWVzc2FnZUl0ZW0iLCJjb3VudGVyIiwicGF0aCIsInRpdGxlIiwic3VidGl0bGUiLCJsb25ndGV4dFVybCIsInR5cGUiLCJkZXNjcmlwdGlvbiIsIm1hcmt1cERlc2NyaXB0aW9uIiwiTWVzc2FnZVZpZXciLCJzaG93RGV0YWlsc1BhZ2VIZWFkZXIiLCJpdGVtU2VsZWN0IiwiaXRlbXMiLCJ0ZW1wbGF0ZSIsInNldEdyb3VwSXRlbXMiLCJCdXR0b24iLCJpY29uIiwiSWNvblBvb2wiLCJnZXRJY29uVVJJIiwidmlzaWJsZSIsInByZXNzIiwibmF2aWdhdGVCYWNrIiwic2V0TW9kZWwiLCJpc05vblRlY2huaWNhbE1lc3NhZ2UiLCJ0ZWNobmljYWxEZXRhaWxzIiwib3JpZ2luYWxNZXNzYWdlIiwiZ2V0Q29kZSIsImdldFRyYW5zaXRpb25NZXNzYWdlc0ZvclVJRGVjaXNpb24iLCJzaG93Qm91bmRUcmFuc2l0aW9uIiwiX2NvbnRleHQiLCJ0cmFuc2l0aW9uTWVzc2FnZXMiLCJjb25jYXQiLCJleGVjdXRlT25CZWZvcmVTaG93TWVzc2FnZXMiLCJvbkJlZm9yZVNob3dNZXNzYWdlIiwibWVzc2FnZXNUb1Nob3ciLCJ1aUVsZW1lbnRUb1VzZSIsImZuR2V0TXNnU3VidGl0bGUiLCJzaG93Qm91bmRNZXNzYWdlcyIsInNob3dNZXNzYWdlUGFyYW1ldGVycyIsInNob3dNZXNzYWdlRGlhbG9nIiwic2hvd01lc3NhZ2VCb3giLCJzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2ciLCJmaWx0ZXJlZE1lc3NhZ2VzIiwiZm5HZXRNZXNzYWdlU3VidGl0bGUiLCJjb250YWluc0JvdW5kVHJhbnNpc3Rpb24iLCJjb250YWluc0JvdW5kVHJhbnNpdGlvbiIsImdldFVJRGVjaXNpb25zIiwiY3VzdG9tTWVzc2FnZXMiLCJjb250ZXh0IiwiYXJndW1lbnRzIiwiY29udHJvbCIsImFjdGlvbk5hbWUiLCJ2aWV3VHlwZSIsInNob3dTdGF0ZU1lc3NhZ2VzIiwiYWRkQ3VzdG9tTWVzc2FnZXMiLCJjYWxsIiwidWlEZWNpc2lvbkludGVybWl0dGVudCIsImZpbHRlcnMiLCJnZXRGaWx0ZXJzRm9yTWVzc2FnZXMiLCJnZXRNZXNzYWdlc1RvU2hvdyIsInJlbW92ZU1lc3NhZ2VTaG93bkluTWVzc2FnZVN0cmlwIiwicHJvY2Vzc01lc3NhZ2VzRnJvbUNoYW5nZXNldEZhaWx1cmUiLCJoYXNFdGFnTWVzc2FnZSIsIm1vZGlmeUVUYWdNZXNzYWdlc09ubHkiLCJfbWVzc2FnZVRvU2hvdyRnZXREZXMiLCJfbWVzc2FnZVRvU2hvdyRnZXREZXMyIiwibWVzc2FnZVRvU2hvdyIsImdldERlc2NyaXB0aW9uIiwiZ2V0RGVzY3JpcHRpb25VcmwiLCJtZXNzYWdlSGFuZGxpbmciLCJ1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lIiwiY29udGV4dE5lZWRzRXRhZ1JlZnJlc2giLCJzaG93TWVzc2FnZXNJblVJIiwidWlEZWNpc2lvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNob3dNZXNzYWdlVG9hc3QiLCJzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2wiLCJzaG93TWVzc2FnZUJveENvbnRyb2wiLCJGaWx0ZXIiLCJvcGVyYXRvciIsIkZpbHRlck9wZXJhdG9yIiwiTkUiLCJ2YWx1ZTEiLCJpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXIiLCJ0ZXN0IiwiZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nIiwiYUNvbnRyb2xJZHMiLCJpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyIsInB1c2giLCJjYXNlU2Vuc2l0aXZlIiwiRVEiLCJnZXRUYXJnZXRzIiwiYW5kIiwiX3JlZiIsInJldE1lc3NhZ2VzIiwiZ2VuZXJpY01zZ3MiLCJub25HZW5lcmljTXNncyIsImZlIiwiZmVUZWNobmljYWxEZXRhaWxzIiwiY2hhbmdlU2V0UHJlVGV4dEZvclNpbmdsZUVycm9yIiwicHJlVGV4dCIsInRlY2hEZXRhaWxzRm9yTm9uR2VuZXJpY01lc3NhZ2UiLCJzaW5nbGVFcnJvclByZVRleHQiLCJleGlzdGluZ1RlY2hEZXRhaWxzIiwic2V0VGVjaG5pY2FsRGV0YWlscyIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJ0ZXh0IiwidGFyZ2V0IiwicGVyc2lzdGVudCIsImdldFNvcnRlckZvck1lc3NhZ2VzIiwiU29ydGVyIiwib2JqMSIsIm9iajIiLCJyYW5rQSIsImdldE1lc3NhZ2VSYW5rIiwicmFua0IiLCJ0cmFuc2lzdGlvbk1lc3NhZ2VzIiwibGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsImN1cnJlbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsIm1lc3NhZ2VzIiwibWFwIiwiY3VycmVudENvbnRleHQiLCJvVW5pcXVlT2JqIiwiZmlsdGVyIiwib2JqIiwiZ2V0SWQiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0TWVzc2FnZSIsInVpRGVjaXNpb24iLCJydW5Ub1Rlc3QiLCJoaWdoZXN0UHJpb3JpdHkiLCJoaWdoZXN0UHJpb3JpdHlUZXh0IiwicmVzb3VyY2VCdW5kbGUiLCJzdHJpY3RIYW5kbGluZ0Zsb3ciLCJtZXNzYWdlRGlhbG9nTW9kZWwiLCJKU09OTW9kZWwiLCJtZXNzYWdlT2JqZWN0Iiwic29ydGVyIiwiZ2V0QmluZGluZyIsInNvcnQiLCJpc09wZW4iLCJEaWFsb2ciLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TWlkZGxlIiwiVGV4dCIsImNvbnRlbnRMZWZ0IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xvc2VPbk5hdmlnYXRpb24iLCJhZnRlckNsb3NlIiwiaXRlbSIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50Iiwic2V0QmVnaW5CdXR0b24iLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInJlc2V0Q2hhbmdlcyIsInJlZnJlc2giLCJFbXBoYXNpemVkIiwiZGVzdHJveUJlZ2luQnV0dG9uIiwiZ2V0SXRlbXMiLCJnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2ciLCJzZXRTdGF0ZSIsImdldEN1c3RvbUhlYWRlciIsImdldENvbnRlbnRNaWRkbGUiLCJzZXRUZXh0Iiwib3BlbiIsIm1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJmb3JtYXR0ZWRUZXh0U3RyaW5nIiwiX2ZlIiwibWVzc2FnZUhlYWRlciIsImdldEFkZGl0aW9uYWxUZXh0IiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsImNsb3NlTWVzc2FnZUJveCIsInNob3dNZXNzYWdlQm94UGVyVHlwZSIsIm9uQ2xvc2UiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJ3YXJuaW5nIiwic3VjY2VzcyIsImluZm9ybWF0aW9uIiwiX3RyYW5zaXRpb25NZXNzYWdlcyIsImJvdW5kQ29udGV4dE1lc3NhZ2VzIiwiZ2V0UGF0aCIsImdldFBlcnNpc3RlbnQiLCJfdHJhbnNpdGlvbk1lc3NhZ2VzMiIsImFNb2RlbERhdGFBcnJheSIsInNBY3Rpb25OYW1lIiwiYU1vZGVsRGF0YSIsIl9hTW9kZWxEYXRhJHRhcmdldCIsIl9hTW9kZWxEYXRhJGdldENvZGUiLCJfYU1vZGVsRGF0YSR0YXJnZXQyIiwiZ2VuZXJhbEdyb3VwVGV4dCIsImlzQSIsInNldEdyb3VwTmFtZUxSVGFibGUiLCJzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlIiwiZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lIiwib0VsZW0iLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJfYU1vZGVsRGF0YSR0YXJnZXQzIiwic0VsZW1lQmluZGluZ1BhdGgiLCJpbmRleE9mIiwiYWxsUm93Q29udGV4dHMiLCJyb3dDb250ZXh0IiwiX2FNb2RlbERhdGEkdGFyZ2V0NCIsImluY2x1ZGVzIiwiY29udGV4dFBhdGgiLCJpZGVudGlmaWVyQ29sdW1uIiwiZ2V0UGFyZW50IiwiZ2V0SWRlbnRpZmllckNvbHVtbiIsInJvd0lkZW50aWZpZXIiLCJjb2x1bW5Qcm9wZXJ0eU5hbWUiLCJnZXRUYWJsZUNvbFByb3BlcnR5Iiwic1RhYmxlVGFyZ2V0Q29sTmFtZSIsImdldFRhYmxlQ29sSW5mbyIsImdldEhlYWRlciIsInVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlIiwibWRjVGFibGUiLCJ0YXJnZXRUYWJsZUluZm8iLCJnZXRDb250ZXh0cyIsIl9tZXNzYWdlJHRhcmdldCIsImNvbHVtbk5hbWVTdWZmaXgiLCJ1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZSIsInN1YnNlY3Rpb24iLCJoZWFkZXJOYW1lIiwiZ2V0SGVhZGVyVmlzaWJsZSIsInRhYmxlSGVhZGVyIiwiZ2V0VGl0bGUiLCJzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUiLCJ2aWV3Q29udGV4dCIsImdyb3VwTmFtZUlzR2VuZXJhbCIsInNldFNlY3Rpb25OYW1lSW5Hcm91cCIsImNoaWxkVGFibGVFbGVtZW50IiwiZmluZEVsZW1lbnRzIiwib0VsZW1lbnQiLCJfbWRjVGFibGUkZ2V0Um93QmluZGkiLCJfbWVzc2FnZSR0YXJnZXQyIiwiZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSIsImZuQ2FsbGJhY2tTZXRHcm91cE5hbWUiLCJvVGFyZ2V0VGFibGVJbmZvIiwib1ZpZXdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvcExheW91dCIsImdldENvbnRlbnQiLCJiSXNHZW5lcmFsR3JvdXBOYW1lIiwiZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQiLCJvU2VjdGlvbiIsInN1YlNlY3Rpb25zIiwiZ2V0U3ViU2VjdGlvbnMiLCJvU3ViU2VjdGlvbiIsIl9hTW9kZWxEYXRhJHRhcmdldDUiLCJzTGFzdEFjdGlvblRleHQiLCJfb2JqJGhlYWRlck5hbWUiLCJfb2JqJGhlYWRlck5hbWUyIiwidG9TdHJpbmciLCJhTWVzc2FnZSIsIm9UYWJsZSIsImZuU2V0R3JvdXBOYW1lIiwiZ2V0VGFibGVBbmRUYXJnZXRJbmZvIiwic0NvbnRyb2xJZCIsImJJc0NyZWF0aW9uUm93Iiwib1RhYmxlUm93Q29udGV4dCIsImdldENvbnRyb2xJZHMiLCJmaW5kIiwic0lkIiwiaXNDb250cm9sSW5UYWJsZSIsIm9Db250cm9sIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3ciLCJzdWJUaXRsZSIsImdldE1lc3NhZ2VTdWJ0aXRsZSIsIm9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cyIsInRhYmxlUm93QmluZGluZ0NvbnRleHRzIiwidGFibGVSb3dDb250ZXh0IiwidGFibGVUYXJnZXRDb2xOYW1lIiwidGFibGUiLCJpc0NyZWF0aW9uUm93IiwidGFyZ2V0ZWRDb250cm9sIiwiX3RhYmxlJGdldFBhcmVudCIsIm1lc3NhZ2VTdWJ0aXRsZSIsInJvd1N1YnRpdGxlVmFsdWUiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsInRhYmxlQ29sUHJvcGVydHkiLCJnZXRUYWJsZUNvbHVtblZpc2liaWxpdHlJbmZvIiwiY29sRnJvbVRhYmxlU2V0dGluZ3MiLCJmZXRjaENvbHVtbkluZm8iLCJpc0luYWN0aXZlIiwibGFiZWwiLCJ0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24iLCJnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24iLCJ0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCIsInRhYmxlQ29sVGV4dEFycmFuZ2VtZW50IiwiZ2V0VmFsdWUiLCJfdGFibGUkZ2V0UGFyZW50MiIsImdldFRhYmxlQ29sVmFsdWUiLCJvQ29sdW1uSW5mbyIsImRldGVybWluZUNvbHVtbkluZm8iLCJzQ29sdW1uSW5kaWNhdG9yIiwic0NvbHVtblZhbHVlIiwiYmluZGluZ0NvbnRleHQiLCJrZXkiLCJvTW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIl9vVGFibGUkZ2V0UGFyZW50Iiwic0NvbE5hbWVGcm9tTWVzc2FnZU9iaiIsInNwbGl0IiwicG9wIiwiZ2V0S2V5Q29sdW1uSW5mbyIsIm9Db2xGcm9tVGFibGVTZXR0aW5ncyIsImF2YWlsYWJpbGl0eSIsIm9QYXJlbnRDb250cm9sIiwiX29QYXJlbnRDb250cm9sIiwiX29QYXJlbnRDb250cm9sMiIsIl9vUGFyZW50Q29udHJvbDMiLCJzSGlnaGVzdFByaW9yaXR5IiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzUGF0aFRvQmVSZW1vdmVkIiwiZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsIiwib01lc3NhZ2VNb2RlbCIsInN0YXJ0c1dpdGgiLCJvQ29udGV4dCIsImJCb3VuZE1lc3NhZ2VzIiwiYlRyYW5zaXRpb25Pbmx5IiwiYVRyYW5zaXRpb25NZXNzYWdlcyIsImJhY2tlbmRNZXNzYWdlcyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwic2V0TWVzc2FnZVN1YnRpdGxlIiwiYUNvbnRleHRzIiwiYWRkaXRpb25hbFRleHQiLCJzdWJ0aXRsZUNvbHVtbiIsImVycm9yQ29udGV4dCIsIm9PYmplY3RQYWdlTGF5b3V0IiwiZ2V0U2VjdGlvbnMiLCJnZXRWaXNpYmxlIiwiZ2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb24iLCJzdWJTZWN0aW9uIiwib01lc3NhZ2VPYmplY3QiLCJmbkZpbHRlclVwb25JZHMiLCJhIiwiYiIsIm9Db250ZXh0UGF0aCIsImZuUmVnRXhwZXNjYXBlIiwicyIsInJlcGxhY2UiLCJfb1RhYmxlJGdldEJpbmRpbmdDb24iLCJjb250ZXh0UGF0aFRvRXNjYXBlIiwiUmVnRXhwIiwic1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkiLCJvVGFibGVUYXJnZXRDb2wiLCJnZXRDb2x1bW5zIiwiY29sdW1uIiwiZ2V0UHJvcGVydHlLZXkiLCJvQ3VzdG9tQ29sdW1uIiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZ2V0Q29sdW1uc0ZvciIsIm9Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwiX29UYWJsZSRnZXRDb2x1bW5zJGZpIiwibmFtZSIsImFDb2x1bW5zIiwiY29sdW1uRGVmaW5pdGlvbiIsIl9vQ29sdW1uJHByb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mbyIsImJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSIsIm9UYWJsZUNvbEluZm8iLCJvSXRlbSIsImNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUiLCJzZWN0aW9uIiwiYk11bHRpcGxlU3ViU2VjdGlvbnMiLCJiSXNPcnBoYW5FbGVtZW50IiwiYUVsZW1lbnRzIiwib1BhcmVudEVsZW1lbnQiLCJnZXRNZXNzYWdlc0ZvckNvbnRleHQiLCJjb250cm9sSWRzIiwiZXJyb3JGaWVsZENvbnRyb2wiLCJpbmRleCIsIkluZmluaXR5IiwiZXJyb3JDb250cm9sSWQiLCJjb250cm9sSWQiLCJmaWVsZFJhbmtpbkRpYWxvZyIsIl9lcnJvckZpZWxkQ29udHJvbCIsImZvY3VzIiwicmVtb3ZlQ29udGV4dE1lc3NhZ2VzZnJvbU1vZGVsIiwiY29udGV4dHMiLCJfY29udGV4dHMkIiwicmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJfbWVzc2FnZXMiLCJfbWVzc2FnZXMyIiwibWVzc2FnZXNUb0JlUmVtb3ZlZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsibWVzc2FnZUhhbmRsaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbU1lc3NhZ2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb2x1bW5Qcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvZGVsZWdhdGVzL1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBGb3JtYXR0ZWRUZXh0IGZyb20gXCJzYXAvbS9Gb3JtYXR0ZWRUZXh0XCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IE1lc3NhZ2VJdGVtIGZyb20gXCJzYXAvbS9NZXNzYWdlSXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgTWVzc2FnZVZpZXcgZnJvbSBcInNhcC9tL01lc3NhZ2VWaWV3XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL20vVGFibGVcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgTUxpYiBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJY29uUG9vbCBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblBvb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9tZXNzYWdlL01lc3NhZ2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgVUlUYWJsZSBmcm9tIFwic2FwL3VpL3RhYmxlL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIFRhYmxlQ29sdW1uIH0gZnJvbSBcIi4uLy4uL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5cbmNvbnN0IEJ1dHRvblR5cGUgPSBNTGliLkJ1dHRvblR5cGU7XG5sZXQgYVJlc29sdmVGdW5jdGlvbnM6ICgocGFyYW0xOiB2b2lkIHwgRGlhbG9nKSA9PiB2b2lkKVtdID0gW107XG5sZXQgZGlhbG9nQ29udHJvbDogRGlhbG9nO1xubGV0IG9CYWNrQnV0dG9uOiBCdXR0b247XG5sZXQgbWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlV2l0aEhlYWRlciA9IE1lc3NhZ2UgJiB7XG5cdGhlYWRlck5hbWU/OiBzdHJpbmc7XG5cdHRhcmdldD86IHN0cmluZztcblx0YWRkaXRpb25hbFRleHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYXJnZXRUYWJsZUluZm9UeXBlID0ge1xuXHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W107XG5cdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHRhYmxlSGVhZGVyPzogc3RyaW5nO1xufTtcblxudHlwZSBDb2xJbmZvQW5kU3VidGl0bGVUeXBlID0ge1xuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRzdWJUaXRsZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIENvbHVtbkluZm9UeXBlID0ge1xuXHRzQ29sdW1uVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c0NvbHVtbkluZGljYXRvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU3VwcG9ydGVkVUlFbGVtZW50ID0gXCJEaWFsb2dcIiB8IFwiQm94XCIgfCBcIlRvYXN0XCIgfCBcIk5vbmVcIjtcblxuLy8gRkUgcmVsYXRlZCB0ZWNobmljYWwgaW5mb3JtYXRpb24gdG8gYmUgc3RvcmVkIHdpdGggdGhlIG1lc3NhZ2UuXG4vLyBMaWtlLCB0aGlzIHdvdWxkIGJlIHVzZWQgdG8gc3RvcmUgcHJlLXRleHQgd2l0aCB0aGUgbWVzc2FnZSB3aGVuIGl0IGlzIHRoZSBvbmx5IG1lc3NhZ2UgdG8gYmUgc2hvd24gaW4gVUkuXG50eXBlIEZFTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSBvYmplY3QgJiB7XG5cdGZlPzoge1xuXHRcdGNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcj86IHN0cmluZztcblx0XHRzaW5nbGVFcnJvclByZVRleHQ/OiBzdHJpbmc7XG5cdH07XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlVUlEZWNpc2lvbnMgPSB7XG5cdHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQ7XG5cdG1lc3NhZ2VzVG9TaG93OiBNZXNzYWdlW107XG5cdGNvbnRhaW5zQm91bmRUcmFuc2l0aW9uOiBib29sZWFuO1xuXHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaD86IE9EYXRhVjRDb250ZXh0O1xufTtcblxuZXhwb3J0IHR5cGUgbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IChiQm91bmRNZXNzYWdlcz86IGJvb2xlYW4sIGJUcmFuc2l0aW9uT25seT86IGJvb2xlYW4sIHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpID0+IE1lc3NhZ2VbXTtcblx0aGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MoKTogYm9vbGVhbjtcblx0Z2V0VUlEZWNpc2lvbnM6IChcblx0XHRjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdHNob3dCb3VuZFRyYW5zaXRpb24/OiBib29sZWFuLFxuXHRcdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW4sXG5cdFx0Y29udHJvbD86IENvbnRyb2wsXG5cdFx0YWN0aW9uTmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvbkJlZm9yZVNob3dNZXNzYWdlPzogKG1lc3NhZ2VzOiBNZXNzYWdlW10sIHNob3dNZXNzYWdlUGFyYW1ldGVyczogU2hvd01lc3NhZ2VQYXJhbWV0ZXJzKSA9PiBTaG93TWVzc2FnZVBhcmFtZXRlcnMsXG5cdFx0dmlld1R5cGU/OiBzdHJpbmcsXG5cdFx0c2hvd1N0YXRlTWVzc2FnZXM/OiBib29sZWFuXG5cdCkgPT4gTWVzc2FnZVVJRGVjaXNpb25zO1xuXHRzaG93TWVzc2FnZXNJblVJOiAodWlEZWNpc2lvbjogTWVzc2FnZVVJRGVjaXNpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoKSA9PiB2b2lkO1xuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiAob1Jlc291cmNlQnVuZGxlOiBSZXNvdXJjZUJ1bmRsZSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBib29sZWFuO1xuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiAob01lc3NhZ2U6IE1lc3NhZ2UsIGJNZXNzYWdlRGlhbG9nPzogdHJ1ZSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IChcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsOiBKU09OTW9kZWwsXG5cdFx0YlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbixcblx0XHRpc011bHRpNDEyPzogYm9vbGVhblxuXHQpID0+IHtcblx0XHRtZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cdFx0b0JhY2tCdXR0b246IEJ1dHRvbjtcblx0fTtcblx0c2V0TWVzc2FnZVN1YnRpdGxlOiAob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiB2b2lkO1xuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogKG9PYmplY3RQYWdlTGF5b3V0OiBDb250cm9sKSA9PiBPYmplY3RQYWdlU2VjdGlvbltdO1xuXHRnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbjogKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpID0+IFVJNUVsZW1lbnRbXTtcblx0Zm5GaWx0ZXJVcG9uSWRzOiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCkgPT4gYm9vbGVhbjtcblx0Z2V0VGFibGVBbmRUYXJnZXRJbmZvOiAoXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b0VsZW1lbnQ6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQsXG5cdFx0b1Jvd0JpbmRpbmc6IEJpbmRpbmdcblx0KSA9PiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiAoXG5cdFx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdFx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0Yk11bHRpcGxlU3ViU2VjdGlvbnM6IGJvb2xlYW4sXG5cdFx0b1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSxcblx0XHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG5cdCkgPT4gc3RyaW5nO1xuXHRiSXNPcnBoYW5FbGVtZW50OiAob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKSA9PiBib29sZWFuO1xuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IChzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBzdHJpbmc7XG5cdGdldFRhYmxlQ29sdW1uRGF0YUFuZFNldFN1YnRpbGU6IChcblx0XHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRvUm93QmluZGluZzogQmluZGluZyxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHNldFNlY3Rpb25OYW1lSW5Hcm91cDogYm9vbGVhbixcblx0XHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBGdW5jdGlvblxuXHQpID0+IENvbEluZm9BbmRTdWJ0aXRsZVR5cGU7XG5cdGdldFRhYmxlQ29sSW5mbzogKFxuXHRcdG9UYWJsZTogTURDVGFibGUsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHN0cmluZ1xuXHQpID0+IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IChvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKSA9PiBzdHJpbmc7XG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogKFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0czogT0RhdGFWNENvbnRleHRbXSxcblx0XHRvVGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRiSXNDcmVhdGlvblJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0XHRvVGFyZ2V0ZWRDb250cm9sPzogQ29udHJvbFxuXHQpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGRldGVybWluZUNvbHVtbkluZm86IChvQ29sRnJvbVRhYmxlU2V0dGluZ3M6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkLCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKSA9PiBDb2x1bW5JbmZvVHlwZTtcblx0ZmV0Y2hDb2x1bW5JbmZvOiAob01lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvVGFibGU6IE1EQ1RhYmxlKSA9PiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0Z2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uOiAoXG5cdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdHRhYmxlUm93Q29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0dGFibGVDb2xQcm9wZXJ0eTogVGFibGVDb2x1bW5Qcm9wZXJ0aWVzXG5cdCkgPT4gQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQ7XG5cdGdldE1lc3NhZ2VSYW5rOiAob2JqOiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gbnVtYmVyO1xuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogYm9vbGVhbikgPT4gdm9pZDtcblx0c2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZTogKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBWaWV3KSA9PiB2b2lkO1xuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiAoXG5cdFx0bWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdFx0Y29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCxcblx0XHRzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcblx0KSA9PiB2b2lkO1xuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiAoY29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCwgYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG5cdGlzQ29udHJvbEluVGFibGU6IChvVGFibGU6IE1EQ1RhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpID0+IFVJNUVsZW1lbnRbXSB8IGJvb2xlYW47XG5cdGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93OiAob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdHJlbW92ZU1lc3NhZ2VTaG93bkluTWVzc2FnZVN0cmlwOiAodHJhbnNpZW50TWVzc2FnZXM6IE1lc3NhZ2VbXSwgY29udGV4dDogQ29udGV4dCkgPT4gTWVzc2FnZVtdO1xuXHRnZXRGaWx0ZXJzRm9yTWVzc2FnZXM6IChzaG93Qm91bmRUcmFuc2l0aW9uOiBib29sZWFuLCBzaG93U3RhdGVNZXNzYWdlcz86IGJvb2xlYW4pID0+IEZpbHRlcltdO1xuXHRzaG93TWVzc2FnZVRvYXN0OiAobWVzc2FnZTogTWVzc2FnZSkgPT4gUHJvbWlzZTx2b2lkPjtcblx0c2hvd01lc3NhZ2VEaWFsb2dDb250cm9sOiAodWlEZWNpc2lvbnM6IE1lc3NhZ2VVSURlY2lzaW9ucywgcnVuVG9UZXN0PzogYm9vbGVhbikgPT4gUHJvbWlzZTx2b2lkIHwgRGlhbG9nPjtcblx0c2hvd01lc3NhZ2VCb3hDb250cm9sOiAodWlEZWNpc2lvbnM6IE1lc3NhZ2VVSURlY2lzaW9ucykgPT4gUHJvbWlzZTx2b2lkPjtcblx0Z2V0TWVzc2FnZXNGb3JDb250ZXh0OiAoY29udGV4dDogT0RhdGFWNENvbnRleHQpID0+IE1lc3NhZ2VbXTtcblx0aXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2c6IChhQ29udHJvbElkczogc3RyaW5nW10pID0+IGJvb2xlYW47XG5cdHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbDogKG1lc3NhZ2VzPzogTWVzc2FnZVtdLCBjb250ZXh0PzogQ29udGV4dFtdKSA9PiB2b2lkO1xuXHRyZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZzogKE1lc3NhZ2VzOiBNZXNzYWdlW10pID0+IE1lc3NhZ2VbXTtcblx0c2V0R3JvdXBOYW1lT1BUYWJsZURpc3BsYXlNb2RlKFxuXHRcdHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRcdG1kY1RhYmxlOiBNRENUYWJsZSxcblx0XHRtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0XHR2aWV3Q29udGV4dDogQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQsXG5cdFx0Z3JvdXBOYW1lSXNHZW5lcmFsOiBib29sZWFuLFxuXHRcdGFjdGlvbk5hbWU/OiBzdHJpbmdcblx0KTogYm9vbGVhbjtcblx0dXBkYXRlQWRkdGlvbmFsVGV4dEZvck1lc3NhZ2VJbk9QVGFibGUobWRjVGFibGU6IE1EQ1RhYmxlLCBtZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlciwgdGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlKTogdm9pZDtcblx0dXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUoXG5cdFx0c3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0bWRjVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdHRhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZVxuXHQpOiB2b2lkO1xufTtcblxuZnVuY3Rpb24gZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCk6IHN0cmluZyB7XG5cdGxldCBzUHJldmlvdXNHcm91cE5hbWU6IHN0cmluZztcblxuXHQvLyBJbnNlcnQgdGVjaG5pY2FsIGRldGFpbCBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gb1Byb3BlcnR5LnByb3BlcnR5XG5cdFx0XHQ/IFwiKCAke1wiICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkgK1xuXHRcdFx0XHRcdCd9ID8gKFwiPHA+JyArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5LnN1YnN0cmluZyhNYXRoLm1heChvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIvXCIpLCBvUHJvcGVydHkucHJvcGVydHkubGFzdEluZGV4T2YoXCIuXCIpKSArIDEpICtcblx0XHRcdFx0XHQnIDogXCIgKyAnICtcblx0XHRcdFx0XHRcIiR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gKyBcIjwvcD5cIikgOiBcIlwiICknXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblx0Ly8gSW5zZXJ0IGdyb3VwbmFtZSBpZiBpdCBleGlzdHNcblx0ZnVuY3Rpb24gaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9KTogc3RyaW5nIHtcblx0XHRsZXQgc0hUTUwgPSBcIlwiO1xuXHRcdGlmIChvUHJvcGVydHkuZ3JvdXBOYW1lICYmIG9Qcm9wZXJ0eS5wcm9wZXJ0eSAmJiBvUHJvcGVydHkuZ3JvdXBOYW1lICE9PSBzUHJldmlvdXNHcm91cE5hbWUpIHtcblx0XHRcdHNIVE1MICs9IFwiKCAke1wiICsgb1Byb3BlcnR5LnByb3BlcnR5ICsgJ30gPyBcIjxicj48aDM+JyArIG9Qcm9wZXJ0eS5ncm91cE5hbWUgKyAnPC9oMz5cIiA6IFwiXCIgKSArICc7XG5cdFx0XHRzUHJldmlvdXNHcm91cE5hbWUgPSBvUHJvcGVydHkuZ3JvdXBOYW1lO1xuXHRcdH1cblx0XHRyZXR1cm4gc0hUTUw7XG5cdH1cblxuXHQvLyBMaXN0IG9mIHRlY2huaWNhbCBkZXRhaWxzIHRvIGJlIHNob3duXG5cdGZ1bmN0aW9uIGdldFBhdGhzKCk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfVtdIHtcblx0XHRjb25zdCBzVEQgPSBcInRlY2huaWNhbERldGFpbHNcIjsgLy8gbmFtZSBvZiBwcm9wZXJ0eSBpbiBtZXNzYWdlIG1vZGVsIGRhdGEgZm9yIHRlY2huaWNhbCBkZXRhaWxzXG5cdFx0cmV0dXJuIFtcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIlwiLCBwcm9wZXJ0eTogYCR7c1REfS9zdGF0dXNgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJcIiwgcHJvcGVydHk6IGAke3NURH0vc3RhdHVzVGV4dGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9Db21wb25lbnRJZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlSWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVJlcG9zaXRvcnlgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJBcHBsaWNhdGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVZlcnNpb25gIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9BbmFseXNpc2AgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL05vdGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkVycm9yUmVzb2x1dGlvbi9EZXRhaWxlZE5vdGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkV4Y2VwdGlvbkNhdGVnb3J5YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UaW1lU3RhbXBgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLlRyYW5zYWN0aW9uSWRgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJNZXNzYWdlc1wiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9jb2RlYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiTWVzc2FnZXNcIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvbWVzc2FnZWAgfVxuXHRcdF07XG5cdH1cblxuXHRsZXQgc0hUTUwgPSBcIk9iamVjdC5rZXlzKFwiICsgXCIke3RlY2huaWNhbERldGFpbHN9XCIgKyAnKS5sZW5ndGggPiAwID8gXCI8aDI+VGVjaG5pY2FsIERldGFpbHM8L2gyPlwiIDogXCJcIiAnO1xuXHRnZXRQYXRocygpLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9KSB7XG5cdFx0c0hUTUwgPSBgJHtzSFRNTCArIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHkpfSR7aW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eSl9ICsgYDtcblx0fSk7XG5cdHJldHVybiBzSFRNTDtcbn1cbmZ1bmN0aW9uIGZuRm9ybWF0RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcblx0cmV0dXJuIFwiKCR7XCIgKyBcImRlc2NyaXB0aW9ufSA/ICgke1wiICsgJ2Rlc2NyaXB0aW9ufSkgOiBcIlwiKSc7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSB0eXBlKEVycm9yL1dhcm5pbmcvU3VjY2Vzcy9JbmZvcm1hdGlvbikgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzLlxuICogQHBhcmFtIFthTWVzc2FnZXNdIE1lc3NhZ2VzIGxpc3RcbiAqIEByZXR1cm5zIEhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXNcbiAqL1xuZnVuY3Rpb24gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KGFNZXNzYWdlczogTWVzc2FnZUl0ZW1bXSk6IE1lc3NhZ2VUeXBlIHtcblx0bGV0IHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRjb25zdCBpTGVuZ3RoID0gYU1lc3NhZ2VzLmxlbmd0aDtcblx0Y29uc3Qgb01lc3NhZ2VDb3VudCA9IHsgRXJyb3I6IDAsIFdhcm5pbmc6IDAsIFN1Y2Nlc3M6IDAsIEluZm9ybWF0aW9uOiAwIH07XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpTGVuZ3RoOyBpKyspIHtcblx0XHQrK29NZXNzYWdlQ291bnRbYU1lc3NhZ2VzW2ldLmdldFR5cGUoKSBhcyBrZXlvZiB0eXBlb2Ygb01lc3NhZ2VDb3VudF07XG5cdH1cblx0aWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuU3VjY2Vzc10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uO1xuXHR9XG5cdHJldHVybiBzTWVzc2FnZVByaW9yaXR5O1xufVxuLy8gZnVuY3Rpb24gd2hpY2ggbW9kaWZ5IGUtVGFnIG1lc3NhZ2VzIG9ubHkuXG4vLyByZXR1cm5zIDogdHJ1ZSwgaWYgYW55IGUtVGFnIG1lc3NhZ2UgaXMgbW9kaWZpZWQsIG90aGVyd2lzZSBmYWxzZS5cbmZ1bmN0aW9uIGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seShvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0Y29uc3QgYU1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldE9iamVjdChcIi9cIik7XG5cdGxldCBiTWVzc2FnZXNNb2RpZmllZCA9IGZhbHNlO1xuXHRsZXQgc0V0YWdNZXNzYWdlID0gXCJcIjtcblx0YU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlLCBpOiBudW1iZXIpIHtcblx0XHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMgJiYgKG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyk7XG5cdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDQxMiAmJiBvVGVjaG5pY2FsRGV0YWlscy5pc0NvbmN1cnJlbnRNb2RpZmljYXRpb24pIHtcblx0XHRcdGlmIChjb25jdXJyZW50RWRpdEZsYWcpIHtcblx0XHRcdFx0c0V0YWdNZXNzYWdlID1cblx0XHRcdFx0XHRzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTX0NPTkNVUlJFTlRfTU9ESUZJQ0FUSU9OXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0V0YWdNZXNzYWdlID0gc0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU1wiKTtcblx0XHRcdH1cblx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNbaV0pO1xuXHRcdFx0b01lc3NhZ2Uuc2V0TWVzc2FnZShzRXRhZ01lc3NhZ2UpO1xuXHRcdFx0b01lc3NhZ2Uuc2V0VGFyZ2V0cyhbXCJcIl0pO1xuXHRcdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRcdGJNZXNzYWdlc01vZGlmaWVkID0gdHJ1ZTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYk1lc3NhZ2VzTW9kaWZpZWQ7XG59XG4vLyBEaWFsb2cgY2xvc2UgSGFuZGxpbmdcbmZ1bmN0aW9uIGRpYWxvZ0Nsb3NlSGFuZGxlcigpOiB2b2lkIHtcblx0ZGlhbG9nQ29udHJvbC5jbG9zZSgpO1xuXHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKGZhbHNlKTtcblx0Y29uc3Qgb01lc3NhZ2VEaWFsb2dNb2RlbCA9IG1lc3NhZ2VWaWV3LmdldE1vZGVsKCkgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkO1xuXHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdH1cblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xufVxuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2U6IE1lc3NhZ2UsIGJNZXNzYWdlRGlhbG9nPzogYm9vbGVhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGROb3cgPSBuZXcgRGF0ZSgpO1xuXHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0bGV0IHNSZXRyeUFmdGVyTWVzc2FnZTtcblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0Y29uc3QgZFJldHJ5QWZ0ZXIgPSBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyO1xuXHRcdGxldCBvRGF0ZUZvcm1hdDtcblx0XHRpZiAoZE5vdy5nZXRGdWxsWWVhcigpICE9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL2RpZmZlcmVudCB5ZWFyc1xuXHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQsIHl5eXkgJ2F0JyBoaDptbSBhXCJcblx0XHRcdH0pO1xuXHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0fSBlbHNlIGlmIChkTm93LmdldEZ1bGxZZWFyKCkgPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9zYW1lIHllYXJcblx0XHRcdGlmIChiTWVzc2FnZURpYWxvZykge1xuXHRcdFx0XHQvL2xlc3MgdGhhbiAyIG1pblxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfVElUTEVcIil9ICR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0RFU0NcIlxuXHRcdFx0XHQpfWA7XG5cdFx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0TW9udGgoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0TW9udGgoKSB8fCBkTm93LmdldERhdGUoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RGF0ZSgpKSB7XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQgJ2F0JyBoaDptbSBhXCJcblx0XHRcdFx0fSk7IC8vZGlmZmVyZW50IG1vbnRocyBvciBkaWZmZXJlbnQgZGF5cyBvZiBzYW1lIG1vbnRoXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9zYW1lIGRheVxuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJoaDptbSBhXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9EQVlcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmICFvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX05PX1JFVFJZX0FGVEVSXCIpO1xuXHR9XG5cdHJldHVybiBzUmV0cnlBZnRlck1lc3NhZ2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGFyZSBhbnkgd2FybmluZyBvciBlcnJvciBtZXNzYWdlcyhib3VuZCBhbmQgdW5ib3VuZCkuLlxuICogQHJldHVybnMgQm9vbGVhbiBpbmRpY2F0aW5nIGV4aXN0ZW5jZSBvZiBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpOiBib29sZWFuIHtcblx0cmV0dXJuIFsuLi5nZXRNZXNzYWdlcyh1bmRlZmluZWQsIHRydWUpLCAuLi5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKV0uc29tZShmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdHJldHVybiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiIHx8IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIldhcm5pbmdcIjtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhcblx0b01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLFxuXHRiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuLFxuXHRtdWx0aTQxMj86IGJvb2xlYW5cbik6IHtcblx0bWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXHRvQmFja0J1dHRvbjogQnV0dG9uO1xufSB7XG5cdGxldCBvTWVzc2FnZVRlbXBsYXRlOiBNZXNzYWdlSXRlbTtcblx0aWYgKCFiU3RyaWN0SGFuZGxpbmdGbG93KSB7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb25CaW5kaW5nID0gJ3s9ICR7ZGVzY3JpcHRpb259ID8gXCI8aHRtbD48Ym9keT5cIiArICcgKyBmbkZvcm1hdERlc2NyaXB0aW9uKCkgKyAnICsgXCI8L2h0bWw+PC9ib2R5PlwiIDogXCJcIiB9Jztcblx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzQmluZGluZyA9XG5cdFx0XHQnez0gJHt0ZWNobmljYWxEZXRhaWxzfSA/IFwiPGh0bWw+PGJvZHk+XCIgKyAnICsgZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCkgKyAnICsgXCI8L2h0bWw+PC9ib2R5PlwiIDogXCJcIiB9Jztcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRncm91cE5hbWU6IFwie2hlYWRlck5hbWV9XCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25CaW5kaW5nICsgdGVjaG5pY2FsRGV0YWlsc0JpbmRpbmcsXG5cdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKG11bHRpNDEyKSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh1bmRlZmluZWQsIHtcblx0XHRcdGNvdW50ZXI6IHsgcGF0aDogXCJjb3VudGVyXCIgfSxcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0c3VidGl0bGU6IFwie2FkZGl0aW9uYWxUZXh0fVwiLFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0ZGVzY3JpcHRpb246IFwie2Rlc2NyaXB0aW9ufVwiLFxuXHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHtcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiXG5cdFx0fSk7XG5cdH1cblx0bWVzc2FnZVZpZXcgPSBuZXcgTWVzc2FnZVZpZXcoe1xuXHRcdHNob3dEZXRhaWxzUGFnZUhlYWRlcjogZmFsc2UsXG5cdFx0aXRlbVNlbGVjdDogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHR9LFxuXHRcdGl0ZW1zOiB7XG5cdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdHRlbXBsYXRlOiBvTWVzc2FnZVRlbXBsYXRlLFxuXHRcdFx0bGVuZ3RoOiA5OTk5XG5cdFx0fVxuXHR9KTtcblx0bWVzc2FnZVZpZXcuc2V0R3JvdXBJdGVtcyh0cnVlKTtcblx0b0JhY2tCdXR0b24gPVxuXHRcdG9CYWNrQnV0dG9uIHx8XG5cdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRpY29uOiBJY29uUG9vbC5nZXRJY29uVVJJKFwibmF2LWJhY2tcIiksXG5cdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdHByZXNzOiBmdW5jdGlvbiAodGhpczogQnV0dG9uKTogdm9pZCB7XG5cdFx0XHRcdG1lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHQvLyBVcGRhdGUgcHJvcGVyIEVUYWcgTWlzbWF0Y2ggZXJyb3Jcblx0bWVzc2FnZVZpZXcuc2V0TW9kZWwob01lc3NhZ2VEaWFsb2dNb2RlbCk7XG5cdHJldHVybiB7XG5cdFx0bWVzc2FnZVZpZXcsXG5cdFx0b0JhY2tCdXR0b25cblx0fTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0ge1xuXHRzaG93TWVzc2FnZUJveD86IGJvb2xlYW47XG5cdHNob3dNZXNzYWdlRGlhbG9nPzogYm9vbGVhbjtcblx0c2hvd0NoYW5nZVNldEVycm9yRGlhbG9nPzogYm9vbGVhbjtcblx0ZmlsdGVyZWRNZXNzYWdlcz86IE1lc3NhZ2VbXTtcblx0Zm5HZXRNZXNzYWdlU3VidGl0bGU/OiBGdW5jdGlvbjtcblx0Y29udGFpbnNCb3VuZFRyYW5zaXN0aW9uPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGlzTm9uVGVjaG5pY2FsTWVzc2FnZShtZXNzYWdlOiBNZXNzYWdlKTogYm9vbGVhbiB7XG5cdGNvbnN0IHRlY2huaWNhbERldGFpbHMgPSBtZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0aWYgKFxuXHRcdCh0ZWNobmljYWxEZXRhaWxzICYmXG5cdFx0XHQoKHRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlICE9PSB1bmRlZmluZWQgJiYgdGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UgIT09IG51bGwpIHx8XG5cdFx0XHRcdCh0ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IHVuZGVmaW5lZCAmJiB0ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IG51bGwpKSkgfHxcblx0XHRtZXNzYWdlLmdldENvZGUoKVxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogR2V0IHRyYW5zaXRpb24gbWVzc2FnZXMgZm9yIGNyZWF0aW5nIHRoZSBVSSBkZWNpc2lvbiB0byBzaG93IG1lc3NhZ2VzLlxuICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb24gU2hvdWxkIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcGFyYW0gX2NvbnRleHQgQmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlLlxuICogQHJldHVybnMgVHJhbnNpdGlvbiBtZXNzYWdlcyByZWxldmFudCB0byBzaG93IGluIFVJLlxuICovXG5mdW5jdGlvbiBnZXRUcmFuc2l0aW9uTWVzc2FnZXNGb3JVSURlY2lzaW9uKHRoaXM6IG1lc3NhZ2VIYW5kbGluZ1R5cGUsIHNob3dCb3VuZFRyYW5zaXRpb246IGJvb2xlYW4sIF9jb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IE1lc3NhZ2VbXSB7XG5cdGxldCB0cmFuc2l0aW9uTWVzc2FnZXMgPSB0aGlzLmdldE1lc3NhZ2VzKCk7XG5cdGlmIChzaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0Ly9ib3VuZCBUcmFuc2lzdGlvbiBNZXNzYWdlc1xuXHRcdHRyYW5zaXRpb25NZXNzYWdlcyA9IHRyYW5zaXRpb25NZXNzYWdlcy5jb25jYXQodGhpcy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7XG5cdH1cblx0cmV0dXJuIHRyYW5zaXRpb25NZXNzYWdlcztcbn1cblxuLyoqXG4gKiBFeGVjdXRlICdvbkJlZm9yZVNob3dNZXNzYWdlcycgY2FsbGJhY2sgdG8gbGV0IHRoZSBjYWxsZXIgaW5mbHVlbmNlIHRoZSBVSSBkZWNpc2lvbiB0byBzaG93IG1lc3NhZ2VzLlxuICogQHBhcmFtIHRyYW5zaXRpb25NZXNzYWdlcyBUcmFuc2l0aW9uIG1lc3NhZ2VzLlxuICogQHBhcmFtIG9uQmVmb3JlU2hvd01lc3NhZ2UgQ2FsbGJhY2suXG4gKiBAcmV0dXJucyBTaG93TWVzc2FnZVBhcmFtZXRlcnMgSW5mcm9tYXRpb24gdG8gY2hhbmdlIFVJIGRlY2lzaW9uIGJhc2VkIG9uIG9uQmVmb3JlU2hvd01lc3NhZ2VzIGNhbGxiYWNrIGltcGxlbWVudGF0aW9uLlxuICovXG5mdW5jdGlvbiBleGVjdXRlT25CZWZvcmVTaG93TWVzc2FnZXMoXG5cdHRyYW5zaXRpb25NZXNzYWdlczogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzXG4pOiB7XG5cdHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQ7XG5cdG1lc3NhZ2VzVG9TaG93OiBNZXNzYWdlV2l0aEhlYWRlcltdO1xuXHRmbkdldE1lc3NhZ2VTdWJ0aXRsZT86IEZ1bmN0aW9uO1xuXHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c/OiBib29sZWFuO1xuXHRjb250YWluc0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW47XG59IHtcblx0bGV0IG1lc3NhZ2VzVG9TaG93ID0gWy4uLnRyYW5zaXRpb25NZXNzYWdlc107XG5cdGxldCB1aUVsZW1lbnRUb1VzZTogU3VwcG9ydGVkVUlFbGVtZW50ID1cblx0XHR0cmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIHRyYW5zaXRpb25NZXNzYWdlc1swXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIgPyBcIkJveFwiIDogXCJEaWFsb2dcIjtcblx0bGV0IGZuR2V0TXNnU3VidGl0bGU6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuXHRsZXQgc2hvd0JvdW5kTWVzc2FnZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0aWYgKG9uQmVmb3JlU2hvd01lc3NhZ2UpIHtcblx0XHQvLyBUaGUgY2FsbGJhY2sgb25CZWZvcmVTaG93TWVzc2FnZSBhbHRlcnMgdGhlIFVJRWxlbWVudCB0byB1c2UgaW4gYSBkaWZmZXJlbnQgZm9ybWF0KHNob3dNZXNzYWdlRGlhbG9nIGFuZCBzaG93TWVzc2FnZUJveCkuXG5cdFx0Y29uc3Qgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZzogdWlFbGVtZW50VG9Vc2UgPT09IFwiRGlhbG9nXCIsXG5cdFx0XHRzaG93TWVzc2FnZUJveDogdWlFbGVtZW50VG9Vc2UgPT09IFwiQm94XCJcblx0XHR9O1xuXHRcdGNvbnN0IHtcblx0XHRcdHNob3dNZXNzYWdlQm94LFxuXHRcdFx0c2hvd01lc3NhZ2VEaWFsb2csXG5cdFx0XHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2csXG5cdFx0XHRmaWx0ZXJlZE1lc3NhZ2VzLFxuXHRcdFx0Zm5HZXRNZXNzYWdlU3VidGl0bGUsXG5cdFx0XHRjb250YWluc0JvdW5kVHJhbnNpc3Rpb25cblx0XHR9ID0gb25CZWZvcmVTaG93TWVzc2FnZSh0cmFuc2l0aW9uTWVzc2FnZXMsIHNob3dNZXNzYWdlUGFyYW1ldGVycyk7XG5cdFx0aWYgKHNob3dNZXNzYWdlQm94ID09PSB0cnVlKSB7XG5cdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiQm94XCI7XG5cdFx0fSBlbHNlIGlmIChzaG93TWVzc2FnZURpYWxvZyA9PT0gdHJ1ZSkge1xuXHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIkRpYWxvZ1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiTm9uZVwiO1xuXHRcdH1cblx0XHRzaG93Qm91bmRNZXNzYWdlcyA9IGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbjtcblx0XHRmbkdldE1zZ1N1YnRpdGxlID0gZm5HZXRNZXNzYWdlU3VidGl0bGU7XG5cdFx0aWYgKHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyB8fCBjb250YWluc0JvdW5kVHJhbnNpc3Rpb24gPT09IGZhbHNlKSB7XG5cdFx0XHRtZXNzYWdlc1RvU2hvdyA9IGZpbHRlcmVkTWVzc2FnZXMgPz8gW107XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR1aUVsZW1lbnRUb1VzZSxcblx0XHRtZXNzYWdlc1RvU2hvdyxcblx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZTogZm5HZXRNc2dTdWJ0aXRsZSxcblx0XHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogc2hvd0JvdW5kTWVzc2FnZXNcblx0fTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgVUkgZGVjaXNpb25zIGZvciBzaG93aW5nIG1lc3NhZ2VzLlxuICpcbiAqIFRoZXNlIHNoYWxsIGNvbnRhaW4gdGhlIG1lc3NhZ2VzIHRvIHNob3cgYW5kIHRoZSBVSSBlbGVtZW50IHRvIHVzZS5cbiAqIEl0IHdvdWxkIGFsc28gaG9sZCBpbmZvcm1hdGlvbiBmb3IgYWZ0ZXIgcHJvY2VzcyBsaWtlLi5cbiAqIDEuIHJlZnJlc2ggY29udGV4dCBkdWUgdG8gZXRhZyBtaXNtYXRjaC5cbiAqIDIuIGRvIHdlIHNob3cgYm91bmQgbWVzc2FnZXMgYW5kIGhlbmNlIGNsZWFyIHRoZW0gYWZ0ZXIgd2Ugc2hvdyB0aGUgVUkgZWxlbWVudC5cbiAqIEBwYXJhbSBjdXN0b21NZXNzYWdlcyBDdXN0b20gbWVzc2FnZXMgdG8gYWRkIHRvIG1lc3NhZ2UgbW9kZWwgYW5kIHNob3cuXG4gKiBAcGFyYW0gY29udGV4dCBCaW5kaW5nIGNvbnRleHQgb2YgdGhlIHBhZ2UuXG4gKiBAcGFyYW0gc2hvd0JvdW5kVHJhbnNpdGlvbiBTaG91bGQgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEBwYXJhbSBjb25jdXJyZW50RWRpdEZsYWcgSXMgdGhpcyBhIGNvbmN1cnJlbnQgZWRpdCBzY2VuYXJpby5cbiAqIEBwYXJhbSBjb250cm9sIFNvdXJjZSBjb250cm9sLlxuICogQHBhcmFtIGFjdGlvbk5hbWUgTmFtZSBvZiB0aGUgYWN0aW9uIHdob3NlIHByb2Nlc3MgcmVxdWVzdGVkIGZvciBtZXNzYWdlcyB0byBiZSBzaG93bi5cbiAqIEBwYXJhbSBvbkJlZm9yZVNob3dNZXNzYWdlIENhbGxiYWNrIHRvIGluZmx1ZW5jZSBVSSBkZWNpc2lvbiBiZWZvcmUgY3JlYXRpbmcgZmluYWwgVUkgZGVjaXNpb24uXG4gKiBAcGFyYW0gdmlld1R5cGUgVmlldyB0eXBlLCBsaXN0IHJlcG9ydCBvciBvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBzaG93U3RhdGVNZXNzYWdlcyBTaG91bGQgc3RhdGUgbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcmV0dXJucyBVSSBkZWNpc2lvbnMgdXNlZCB0byBzaG93IG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBnZXRVSURlY2lzaW9ucyhcblx0dGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSxcblx0Y3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcblx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdHNob3dCb3VuZFRyYW5zaXRpb24gPSBmYWxzZSxcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0Y29udHJvbD86IENvbnRyb2wsXG5cdGFjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0dmlld1R5cGU/OiBzdHJpbmcsXG5cdHNob3dTdGF0ZU1lc3NhZ2VzID0gZmFsc2Vcbik6IE1lc3NhZ2VVSURlY2lzaW9ucyB7XG5cdC8vIEFkZCBDdXN0b20gbWVzc2FnZXNcblx0Ly8gVE9ETzogV2lsbCB0aGVzZSBtZXNzYWdlcyBiZSBwYXJ0IG9mIHRyYW5zaXRpb25NZXNzYWdlcz9cblx0aWYgKGN1c3RvbU1lc3NhZ2VzICYmIGN1c3RvbU1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdGFkZEN1c3RvbU1lc3NhZ2VzKGN1c3RvbU1lc3NhZ2VzKTtcblx0fVxuXG5cdC8vIEdldCB0cmFuc2lzdGlvbiBNZXNzYWdlc1xuXHRjb25zdCB0cmFuc2l0aW9uTWVzc2FnZXMgPSBnZXRUcmFuc2l0aW9uTWVzc2FnZXNGb3JVSURlY2lzaW9uLmNhbGwodGhpcywgc2hvd0JvdW5kVHJhbnNpdGlvbiwgY29udGV4dCk7XG5cblx0Ly8gVUkgcmVwcmVzZW50YXRpb24gb2YgdGhlIERpYWxvZ1xuXHRjb25zdCB1aURlY2lzaW9uSW50ZXJtaXR0ZW50ID0gZXhlY3V0ZU9uQmVmb3JlU2hvd01lc3NhZ2VzLmNhbGwodGhpcywgdHJhbnNpdGlvbk1lc3NhZ2VzLCBvbkJlZm9yZVNob3dNZXNzYWdlKTtcblx0bGV0IHsgbWVzc2FnZXNUb1Nob3csIHVpRWxlbWVudFRvVXNlID0gXCJEaWFsb2dcIiB9ID0gdWlEZWNpc2lvbkludGVybWl0dGVudDtcblx0Ly8gR2V0IEZpbHRlcnMgZm9yIFVuYm91bmQgTWVzc2FnZXNcblx0c2hvd0JvdW5kVHJhbnNpdGlvbiA9IHVpRGVjaXNpb25JbnRlcm1pdHRlbnQuY29udGFpbnNCb3VuZFRyYW5zaXRpb24gPz8gc2hvd0JvdW5kVHJhbnNpdGlvbjtcblx0Y29uc3QgZmlsdGVycyA9IGdldEZpbHRlcnNGb3JNZXNzYWdlcyhzaG93Qm91bmRUcmFuc2l0aW9uLCBzaG93U3RhdGVNZXNzYWdlcyk7XG5cdG1lc3NhZ2VzVG9TaG93ID0gZ2V0TWVzc2FnZXNUb1Nob3coZmlsdGVycywgbWVzc2FnZXNUb1Nob3cgPz8gW10pO1xuXHQvLyBoYW5kbGUgY29udGV4dCBib3VuZCBtZXNzYWdlcywgSWYgdGhlcmUgaXMgYSBzaW5nbGUgbWVzc2FnZSBvZiB3aGljaCBpcyBib3VuZGVkIHRvIHRoZSBjb250ZXh0IHRoZW4gcmVtb3ZlIHRoYXQgZnJvbSB0aGUgZGlhbG9nXG5cdG1lc3NhZ2VzVG9TaG93ID0gcmVtb3ZlTWVzc2FnZVNob3duSW5NZXNzYWdlU3RyaXAobWVzc2FnZXNUb1Nob3csIGNvbnRleHQpO1xuXHQoeyBtZXNzYWdlc1RvU2hvdywgdWlFbGVtZW50VG9Vc2UgfSA9IHByb2Nlc3NNZXNzYWdlc0Zyb21DaGFuZ2VzZXRGYWlsdXJlKHsgbWVzc2FnZXNUb1Nob3csIHVpRWxlbWVudFRvVXNlIH0pKTtcblx0Ly8gTW9kaWZ5IEVUYWcgTWVzc2FnZXNcblx0Y29uc3QgaGFzRXRhZ01lc3NhZ2UgPSB0aGlzLm1vZGlmeUVUYWdNZXNzYWdlc09ubHkoTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpISwgY29uY3VycmVudEVkaXRGbGFnKTtcblxuXHRpZiAobWVzc2FnZXNUb1Nob3cubGVuZ3RoID4gMCAmJiB1aUVsZW1lbnRUb1VzZSAhPT0gXCJOb25lXCIpIHtcblx0XHRpZiAobWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlVG9TaG93ID0gbWVzc2FnZXNUb1Nob3dbMF07XG5cdFx0XHRpZiAobWVzc2FnZVRvU2hvdy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpIHtcblx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIlRvYXN0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGhhc0V0YWdNZXNzYWdlIHx8IG1lc3NhZ2VUb1Nob3cuZ2V0RGVzY3JpcHRpb24oKT8ubGVuZ3RoIHx8IG1lc3NhZ2VUb1Nob3cuZ2V0RGVzY3JpcHRpb25VcmwoKT8ubGVuZ3RoKSB7XG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJEaWFsb2dcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlIHdvdWxkIHNob3cgc2luZ2xlIG1lc3NhZ2UgaW4gbWVzc2FnZSBib3ggb25seSB3aGVuOlxuXHRcdFx0XHQvLyAxLiBJdCBpcyBub3QgYW4gRXRhZyBtZXNzYWdlLlxuXHRcdFx0XHQvLyAyLiBUaGVyZSBpcyBubyBtZXNzYWdlIGRlc2NyaXB0aW9uIG9yIGRlc2NyaXB0aW9uIHVybCBhdmFpbGFibGUgZm9yIGxvbmcgdGV4dC5cblx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIkJveFwiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRtZXNzYWdlSGFuZGxpbmcudXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShtZXNzYWdlc1RvU2hvdywgY29udHJvbCwgYWN0aW9uTmFtZSwgdmlld1R5cGUpO1xuXHRcdGNvbnN0IGZuR2V0TWVzc2FnZVN1YnRpdGxlID0gdWlEZWNpc2lvbkludGVybWl0dGVudC5mbkdldE1lc3NhZ2VTdWJ0aXRsZTtcblx0XHRpZiAoZm5HZXRNZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdG1lc3NhZ2VzVG9TaG93LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlKG9NZXNzYWdlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bWVzc2FnZXNUb1Nob3csXG5cdFx0dWlFbGVtZW50VG9Vc2UsXG5cdFx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2g6IGhhc0V0YWdNZXNzYWdlID8gY29udGV4dCA6IHVuZGVmaW5lZCxcblx0XHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogc2hvd0JvdW5kVHJhbnNpdGlvblxuXHR9O1xufVxuXG4vKipcbiAqIFNob3cgbWVzc2FnZXMgaW4gdGhlIGRlY2lkZWQgVUkgRWxlbWVudC5cbiAqIEBwYXJhbSB1aURlY2lzaW9ucyBVSSBEZWNpc2lvbiB0byBiZSB1c2VkIHRvIHNob3cgdGhlIG1lc3NhZ2VzLlxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIG9yIHJlamVjdHMgYmFzZWQgb24gdXNlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBVSSBlbGVtZW50LlxuICovXG5hc3luYyBmdW5jdGlvbiBzaG93TWVzc2FnZXNJblVJKHVpRGVjaXNpb25zOiBNZXNzYWdlVUlEZWNpc2lvbnMpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgeyBtZXNzYWdlc1RvU2hvdywgdWlFbGVtZW50VG9Vc2UgfSA9IHVpRGVjaXNpb25zO1xuXG5cdC8vIFNob3cgRGlhbG9nIC8gTWVzc2FnZUJveCAvIE1lc3NhZ2VUb2FzdFxuXHRpZiAobWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gRG9uJ3Qgc2hvdyB0aGUgcG9wdXAgaWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9IGVsc2UgaWYgKHVpRWxlbWVudFRvVXNlID09PSBcIlRvYXN0XCIpIHtcblx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLnNob3dNZXNzYWdlVG9hc3QobWVzc2FnZXNUb1Nob3dbMF0pO1xuXHR9IGVsc2UgaWYgKHVpRWxlbWVudFRvVXNlID09PSBcIkRpYWxvZ1wiKSB7XG5cdFx0YXdhaXQgbWVzc2FnZUhhbmRsaW5nLnNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCh1aURlY2lzaW9ucyk7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9IGVsc2UgaWYgKHVpRWxlbWVudFRvVXNlID09PSBcIkJveFwiKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5zaG93TWVzc2FnZUJveENvbnRyb2wodWlEZWNpc2lvbnMpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxufVxuXG4vKipcbiAqIEdldCBtb2RlbCBmaWx0ZXJzIGZvciBnZXR0aW5nIHRoZSByZWxldmFudCBtZXNzYWdlcy5cbiAqIEBwYXJhbSBzaG93Qm91bmRUcmFuc2l0aW9uIFNob3VsZCBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGJlIHNob3duLlxuICogQHBhcmFtIHNob3dTdGF0ZU1lc3NhZ2VzIFNob3VsZCBzdGF0ZSBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEByZXR1cm5zIE1vZGVsIGZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gZ2V0RmlsdGVyc0Zvck1lc3NhZ2VzKHNob3dCb3VuZFRyYW5zaXRpb246IGJvb2xlYW4sIHNob3dTdGF0ZU1lc3NhZ2VzID0gZmFsc2UpOiBGaWx0ZXJbXSB7XG5cdGNvbnN0IGZpbHRlcnMgPSBzaG93U3RhdGVNZXNzYWdlcyA/IFtdIDogW25ldyBGaWx0ZXIoeyBwYXRoOiBcInBlcnNpc3RlbnRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLk5FLCB2YWx1ZTE6IGZhbHNlIH0pXTtcblx0Y29uc3QgaXNOb25UZWNobmljYWxNZXNzYWdlRmlsdGVyID0gbmV3IEZpbHRlcih7IHBhdGg6IFwiXCIsIHRlc3Q6IGlzTm9uVGVjaG5pY2FsTWVzc2FnZSB9KTtcblxuXHRpZiAoc2hvd1N0YXRlTWVzc2FnZXMgfHwgc2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdC8vIEFkZCB0aGUgZmlsdGVyIGZvciBib3RoIHN0YXRlIG1lc3NhZ2VzIG9yIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXNcblx0XHRjb25zdCBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2cgPSBmdW5jdGlvbiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLmlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nKGFDb250cm9sSWRzKTtcblx0XHR9O1xuXHRcdGZpbHRlcnMucHVzaChcblx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRwYXRoOiBcImNvbnRyb2xJZHNcIixcblx0XHRcdFx0dGVzdDogZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiB0cnVlXG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHRpZiAoc2hvd0JvdW5kVHJhbnNpdGlvbiAmJiAhc2hvd1N0YXRlTWVzc2FnZXMpIHtcblx0XHRcdC8vIEFkZCBleHRyYSBmaWx0ZXIgaWYgb25seSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFyZSBzaG93blxuXHRcdFx0ZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInBlcnNpc3RlbnRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLCB2YWx1ZTE6IHRydWUgfSkpO1xuXHRcdFx0ZmlsdGVycy5wdXNoKGlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlcik7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE9ubHkgdW5ib3VuZCBtZXNzYWdlcyBzaG91bGQgYmUgc2hvd25cblx0XHRmaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0cGF0aDogXCJcIixcblx0XHRcdFx0XHRcdHRlc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDAgfHwgbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IFwiXCJcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXJcblx0XHRcdFx0XSxcblx0XHRcdFx0YW5kOiB0cnVlXG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gZmlsdGVycztcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc01lc3NhZ2VzRnJvbUNoYW5nZXNldEZhaWx1cmUoe1xuXHRtZXNzYWdlc1RvU2hvdyxcblx0dWlFbGVtZW50VG9Vc2Vcbn06IFBpY2s8TWVzc2FnZVVJRGVjaXNpb25zLCBcInVpRWxlbWVudFRvVXNlXCIgfCBcIm1lc3NhZ2VzVG9TaG93XCI+KTogUGljazxNZXNzYWdlVUlEZWNpc2lvbnMsIFwidWlFbGVtZW50VG9Vc2VcIiB8IFwibWVzc2FnZXNUb1Nob3dcIj4ge1xuXHRsZXQgcmV0TWVzc2FnZXMgPSBbLi4ubWVzc2FnZXNUb1Nob3ddO1xuXHRpZiAobWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAyKSB7XG5cdFx0Ly8gVGhlcmUgYXJlIDIgbWVzc2FnZTpcblx0XHQvLyAxLiBHZW5lcmljIGVycm9yIGNoYW5nZXNldCBtZXNzYWdlIGFkZGVkIGJ5IEZFLlxuXHRcdC8vIDIuIE1haW4gZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBpbnRlcmFjdGlvbi5cblx0XHQvLyBXZSByZW1vdmUgdGhlIGdlbmVyaWMgbWVzc2FnZSwgc2hvdyBvbmx5IGFuIGVuaGFuY2VkICdNYWluIGVycm9yIG1lc3NhZ2UnIHdpdGggYSBnZW5lcmljIG1lc3NzYWdlIHByZS10ZXh0IGluIHRoZSBtZXNzYWdlIGJveC5cblx0XHRjb25zdCBnZW5lcmljTXNnczogTWVzc2FnZVtdID0gW107XG5cdFx0Y29uc3Qgbm9uR2VuZXJpY01zZ3M6IE1lc3NhZ2VbXSA9IFtdO1xuXHRcdG1lc3NhZ2VzVG9TaG93LmZvckVhY2goKG1lc3NhZ2UpID0+IHtcblx0XHRcdGlmIChtZXNzYWdlLmdldENvZGUoKSA9PT0gXCJGRV9DVVNUT01fTUVTU0FHRV9DSEFOR0VTRVRfQUxMX0ZBSUxFRFwiKSB7XG5cdFx0XHRcdGdlbmVyaWNNc2dzLnB1c2gobWVzc2FnZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRub25HZW5lcmljTXNncy5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChnZW5lcmljTXNncy5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IHsgZmU6IGZlVGVjaG5pY2FsRGV0YWlscyB9ID0gKGdlbmVyaWNNc2dzWzBdLmdldFRlY2huaWNhbERldGFpbHMoKSB8fCB7fSkgYXMgRkVNZXNzYWdlVGVjaG5pY2FsRGV0YWlscztcblx0XHRcdGlmIChmZVRlY2huaWNhbERldGFpbHM/LmNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcikge1xuXHRcdFx0XHRjb25zdCBwcmVUZXh0ID0gZmVUZWNobmljYWxEZXRhaWxzPy5jaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3I7XG5cdFx0XHRcdGlmIChwcmVUZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3QgdGVjaERldGFpbHNGb3JOb25HZW5lcmljTWVzc2FnZTogRkVNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA9IHtcblx0XHRcdFx0XHRcdGZlOiB7XG5cdFx0XHRcdFx0XHRcdHNpbmdsZUVycm9yUHJlVGV4dDogcHJlVGV4dFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgZXhpc3RpbmdUZWNoRGV0YWlscyA9IG5vbkdlbmVyaWNNc2dzWzBdLmdldFRlY2huaWNhbERldGFpbHMoKSA/PyB7fTtcblx0XHRcdFx0XHQvLyBjb21iaW5lIGV4aXN0aW5nIHRlY2huaWNhbCBkZXRhaWxzIGlmIGFueSwgd2l0aCB0aGUgY2hhbmdlIHNldCBpbmZvcm1hdGlvbiB3ZSB3YW50IHRvIGFkZC5cblx0XHRcdFx0XHRub25HZW5lcmljTXNnc1swXS5zZXRUZWNobmljYWxEZXRhaWxzKHsgLi4uZXhpc3RpbmdUZWNoRGV0YWlscywgLi4udGVjaERldGFpbHNGb3JOb25HZW5lcmljTWVzc2FnZSB9KTtcblx0XHRcdFx0XHRyZXRNZXNzYWdlcyA9IG5vbkdlbmVyaWNNc2dzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0bWVzc2FnZXNUb1Nob3c6IHJldE1lc3NhZ2VzLFxuXHRcdHVpRWxlbWVudFRvVXNlOiByZXRNZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgdWlFbGVtZW50VG9Vc2UgIT09IFwiTm9uZVwiID8gXCJCb3hcIiA6IHVpRWxlbWVudFRvVXNlXG5cdH07XG59XG5cbi8qKlxuICogQWRkIHRoZSBjdXN0b20gbWVzc2FnZXMgdG8gbWVzc2FnZSBtb2RlbC5cbiAqIEBwYXJhbSBjdXN0b21NZXNzYWdlcyBDdXN0b20gbWVzc2FnZXMgdG8gYWRkLlxuICovXG5mdW5jdGlvbiBhZGRDdXN0b21NZXNzYWdlcyhjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdKTogdm9pZCB7XG5cdGN1c3RvbU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBDdXN0b21NZXNzYWdlKSB7XG5cdFx0Y29uc3QgbWVzc2FnZUNvZGUgPSBvTWVzc2FnZS5jb2RlID8gb01lc3NhZ2UuY29kZSA6IFwiXCI7XG5cdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKFxuXHRcdFx0bmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRtZXNzYWdlOiBvTWVzc2FnZS50ZXh0LFxuXHRcdFx0XHR0eXBlOiBvTWVzc2FnZS50eXBlLFxuXHRcdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdGNvZGU6IG1lc3NhZ2VDb2RlXG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0Ly9UaGUgdGFyZ2V0IGFuZCBwZXJzaXN0ZW50IHByb3BlcnRpZXMgb2YgdGhlIG1lc3NhZ2UgYXJlIGhhcmRjb2RlZCBhcyBcIlwiIGFuZCB0cnVlIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGRlYWxzIHdpdGggb25seSB1bmJvdW5kIG1lc3NhZ2VzLlxuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U29ydGVyRm9yTWVzc2FnZXMoKTogU29ydGVyIHtcblx0cmV0dXJuIG5ldyBTb3J0ZXIoXCJcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIChvYmoxOiBNZXNzYWdlV2l0aEhlYWRlciwgb2JqMjogTWVzc2FnZVdpdGhIZWFkZXIpID0+IHtcblx0XHRjb25zdCByYW5rQSA9IGdldE1lc3NhZ2VSYW5rKG9iajEpO1xuXHRcdGNvbnN0IHJhbmtCID0gZ2V0TWVzc2FnZVJhbmsob2JqMik7XG5cblx0XHRpZiAocmFua0EgPCByYW5rQikge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpZiAocmFua0EgPiByYW5rQikge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZXNUb1Nob3coZmlsdGVyczogRmlsdGVyW10sIHRyYW5zaXN0aW9uTWVzc2FnZXM6IE1lc3NhZ2VbXSk6IE1lc3NhZ2VXaXRoSGVhZGVyW10ge1xuXHRsZXQgbWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10gPSBbLi4udHJhbnNpc3Rpb25NZXNzYWdlc107XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmlsdGVycyksXG5cdFx0Y3VycmVudENvbnRleHRzID0gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdGlmIChjdXJyZW50Q29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGlmIGZhbHNlLCBzaG93IG1lc3NhZ2VzIGluIGRpYWxvZ1xuXHRcdC8vIEFzIGZpdGVyaW5nIGhhcyBhbHJlYWR5IGhhcHBlbmVkIGhlcmUgaGVuY2Vcblx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHQvLyBTbyB3ZSBjcmVhdGUgbmV3IGpzb24gbW9kZWwgdG8gdXNlIGZvciB0aGUgbWVzc2FnZSBkaWFsb2cgdmlldy5cblx0XHRjb25zdCBtZXNzYWdlcyA9IGN1cnJlbnRDb250ZXh0cy5tYXAoKGN1cnJlbnRDb250ZXh0KSA9PiBjdXJyZW50Q29udGV4dC5nZXRPYmplY3QoKSk7XG5cdFx0Y29uc3Qgb1VuaXF1ZU9iajogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuXHRcdG1lc3NhZ2VzVG9TaG93ID0gbWVzc2FnZXMuY29uY2F0KG1lc3NhZ2VzVG9TaG93KS5maWx0ZXIoZnVuY3Rpb24gKG9iajogTWVzc2FnZSkge1xuXHRcdFx0Ly8gcmVtb3ZlIGVudHJpZXMgaGF2aW5nIGR1cGxpY2F0ZSBtZXNzYWdlIGlkc1xuXHRcdFx0cmV0dXJuICFvVW5pcXVlT2JqW29iai5nZXRJZCgpXSAmJiAob1VuaXF1ZU9ialtvYmouZ2V0SWQoKV0gPSB0cnVlKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gbWVzc2FnZXNUb1Nob3c7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dNZXNzYWdlVG9hc3QobWVzc2FnZTogTWVzc2FnZSk6IFByb21pc2U8dm9pZD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRNZXNzYWdlVG9hc3Quc2hvdyhtZXNzYWdlLmdldE1lc3NhZ2UoKSk7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2UpO1xuXHRcdHJlc29sdmUodW5kZWZpbmVkKTtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCh1aURlY2lzaW9uOiBNZXNzYWdlVUlEZWNpc2lvbnMsIHJ1blRvVGVzdCA9IGZhbHNlKTogUHJvbWlzZTx2b2lkIHwgRGlhbG9nPiB7XG5cdGxldCBoaWdoZXN0UHJpb3JpdHk7XG5cdGxldCBoaWdoZXN0UHJpb3JpdHlUZXh0O1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IChwYXJhbTE6IHZvaWQgfCBEaWFsb2cpID0+IHZvaWQpIHtcblx0XHRhUmVzb2x2ZUZ1bmN0aW9ucy5wdXNoKHJlc29sdmUpO1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ0Zsb3cgPSBmYWxzZTtcblx0XHRjb25zdCB7IG1lc3NhZ2VzVG9TaG93LCBjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCB9ID0gdWlEZWNpc2lvbjtcblx0XHRjb25zdCBtZXNzYWdlRGlhbG9nTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1lc3NhZ2VzVG9TaG93KTtcblx0XHRjb25zdCBtZXNzYWdlT2JqZWN0ID0gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG1lc3NhZ2VEaWFsb2dNb2RlbCwgc3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRjb25zdCBzb3J0ZXIgPSBnZXRTb3J0ZXJGb3JNZXNzYWdlcygpO1xuXHRcdChtZXNzYWdlT2JqZWN0Lm1lc3NhZ2VWaWV3LmdldEJpbmRpbmcoXCJpdGVtc1wiKSBhcyBPRGF0YUxpc3RCaW5kaW5nKS5zb3J0KHNvcnRlcik7XG5cblx0XHRkaWFsb2dDb250cm9sID1cblx0XHRcdGRpYWxvZ0NvbnRyb2wgJiYgZGlhbG9nQ29udHJvbC5pc09wZW4oKVxuXHRcdFx0XHQ/IGRpYWxvZ0NvbnRyb2xcblx0XHRcdFx0OiBuZXcgRGlhbG9nKHtcblx0XHRcdFx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYWxzbyByZW1vdmUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB3ZSB3ZXJlIHNob3dpbmcgdGhlbVxuXHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhtZXNzYWdlc1RvU2hvdyk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHRleHQ6IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHRjdXN0b21IZWFkZXI6IG5ldyBCYXIoe1xuXHRcdFx0XHRcdFx0XHRjb250ZW50TWlkZGxlOiBbXG5cdFx0XHRcdFx0XHRcdFx0bmV3IFRleHQoe1xuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpXG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0Y29udGVudExlZnQ6IFtvQmFja0J1dHRvbl1cblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRcdFx0Y29udGVudEhlaWdodDogXCIyMS41ZW1cIixcblx0XHRcdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRcdGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcblx0XHRcdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFSZXNvbHZlRnVuY3Rpb25zKSB7XG5cdFx0XHRcdFx0XHRcdFx0aXRlbSgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdCAgfSk7XG5cdFx0ZGlhbG9nQ29udHJvbC5yZW1vdmVBbGxDb250ZW50KCk7XG5cdFx0ZGlhbG9nQ29udHJvbC5hZGRDb250ZW50KG1lc3NhZ2VPYmplY3QubWVzc2FnZVZpZXcpO1xuXG5cdFx0aWYgKGNvbnRleHROZWVkc0V0YWdSZWZyZXNoKSB7XG5cdFx0XHRkaWFsb2dDb250cm9sLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRpZiAoY29udGV4dE5lZWRzRXRhZ1JlZnJlc2guaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb250ZXh0TmVlZHNFdGFnUmVmcmVzaC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKSxcblx0XHRcdFx0XHR0eXBlOiBCdXR0b25UeXBlLkVtcGhhc2l6ZWRcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpYWxvZ0NvbnRyb2wuZGVzdHJveUJlZ2luQnV0dG9uKCk7XG5cdFx0fVxuXHRcdGhpZ2hlc3RQcmlvcml0eSA9IGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShtZXNzYWdlVmlldy5nZXRJdGVtcygpKTtcblx0XHRoaWdoZXN0UHJpb3JpdHlUZXh0ID0gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKGhpZ2hlc3RQcmlvcml0eSk7XG5cdFx0ZGlhbG9nQ29udHJvbC5zZXRTdGF0ZShoaWdoZXN0UHJpb3JpdHkpO1xuXHRcdCgoZGlhbG9nQ29udHJvbC5nZXRDdXN0b21IZWFkZXIoKSBhcyBCYXIpLmdldENvbnRlbnRNaWRkbGUoKVswXSBhcyBUZXh0KS5zZXRUZXh0KGhpZ2hlc3RQcmlvcml0eVRleHQpO1xuXHRcdG1lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdGRpYWxvZ0NvbnRyb2wub3BlbigpO1xuXHRcdGlmIChydW5Ub1Rlc3QpIHtcblx0XHRcdHJlc29sdmUoZGlhbG9nQ29udHJvbCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd01lc3NhZ2VCb3hDb250cm9sKHVpRGVjaXNpb246IE1lc3NhZ2VVSURlY2lzaW9ucyk6IFByb21pc2U8dm9pZD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRjb25zdCB7IG1lc3NhZ2VzVG9TaG93IH0gPSB1aURlY2lzaW9uO1xuXHRcdGNvbnN0IG1lc3NhZ2VUb1Nob3cgPSBtZXNzYWdlc1RvU2hvd1swXTtcblx0XHRjb25zdCBtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA9IG1lc3NhZ2VUb1Nob3cuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHJldHJ5QWZ0ZXJNZXNzYWdlID0gbWVzc2FnZUhhbmRsaW5nLmdldFJldHJ5QWZ0ZXJNZXNzYWdlKG1lc3NhZ2VUb1Nob3csIHRydWUpO1xuXHRcdC8vIElmIGl0IGlzIGEgcmV0cnkgbWVzc2FnZSwgdGhlbiBpdCBuZWVkcyB0byBoYXZlIHRlY2huaWNhbCBkZXRhaWxzIHRvIHNob3cgaXQuXG5cdFx0Y29uc3Qgc2hvd01lc3NhZ2VCb3ggPSByZXRyeUFmdGVyTWVzc2FnZSA/IG1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIDogdHJ1ZTtcblx0XHRpZiAoc2hvd01lc3NhZ2VCb3gpIHtcblx0XHRcdGxldCBmb3JtYXR0ZWRUZXh0U3RyaW5nID0gXCI8aHRtbD48Ym9keT5cIjtcblxuXHRcdFx0Ly8gQWRkaW5nIHByZS10ZXh0IGZvciB0aGUgbWVzc2FnZXNcblx0XHRcdGlmIChyZXRyeUFmdGVyTWVzc2FnZSkge1xuXHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7Zm9ybWF0dGVkVGV4dFN0cmluZ308aDY+JHtyZXRyeUFmdGVyTWVzc2FnZX08L2g2Pjxici8+YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHNpbmdsZUVycm9yUHJlVGV4dCA9IChtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyBhcyBGRU1lc3NhZ2VUZWNobmljYWxEZXRhaWxzKT8uZmU/LnNpbmdsZUVycm9yUHJlVGV4dDtcblx0XHRcdFx0aWYgKHNpbmdsZUVycm9yUHJlVGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VIZWFkZXIgPSAobWVzc2FnZVRvU2hvdyBhcyBNZXNzYWdlV2l0aEhlYWRlcik/LltcImhlYWRlck5hbWVcIl1cblx0XHRcdFx0XHRcdD8gYCR7KG1lc3NhZ2VUb1Nob3cgYXMgTWVzc2FnZVdpdGhIZWFkZXIpPy5bXCJoZWFkZXJOYW1lXCJdfTpgXG5cdFx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmd9JHtzaW5nbGVFcnJvclByZVRleHR9PGJyLz48YnIvPiR7bWVzc2FnZUhlYWRlcn0gYDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGRpbmcgdGhlIG1haW4gZXJyb3IgbWVzc2FnZS5cblx0XHRcdGlmIChtZXNzYWdlVG9TaG93LmdldENvZGUoKSAhPT0gXCI1MDNcIiAmJiBtZXNzYWdlVG9TaG93LmdldEFkZGl0aW9uYWxUZXh0KCkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyArIG1lc3NhZ2VUb1Nob3cuZ2V0QWRkaXRpb25hbFRleHQoKVxuXHRcdFx0XHR9OiAke21lc3NhZ2VUb1Nob3cuZ2V0TWVzc2FnZSgpfTwvYm9keT48L2h0bWw+YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nICsgbWVzc2FnZVRvU2hvdy5nZXRNZXNzYWdlKCl9PC9ib2R5PjwvaHRtbD5gO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZm9ybWF0dGVkVGV4dCA9IG5ldyBGb3JtYXR0ZWRUZXh0KHtcblx0XHRcdFx0aHRtbFRleHQ6IGZvcm1hdHRlZFRleHRTdHJpbmdcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBjbG9zZU1lc3NhZ2VCb3ggPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhtZXNzYWdlVG9TaG93KTtcblx0XHRcdFx0cmVzb2x2ZSh1bmRlZmluZWQpO1xuXHRcdFx0fTtcblx0XHRcdHNob3dNZXNzYWdlQm94UGVyVHlwZShcblx0XHRcdFx0Zm9ybWF0dGVkVGV4dCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG9uQ2xvc2U6IGNsb3NlTWVzc2FnZUJveFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtZXNzYWdlVG9TaG93XG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIHNob3dNZXNzYWdlQm94UGVyVHlwZShmb3JtYXR0ZWRUZXh0OiBzdHJpbmcsIGNsb3NlOiB7IG9uQ2xvc2U6IEZ1bmN0aW9uIH0sIG1lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0c3dpdGNoIChtZXNzYWdlLmdldFR5cGUoKSkge1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuRXJyb3I6XG5cdFx0XHRNZXNzYWdlQm94LmVycm9yKGZvcm1hdHRlZFRleHQsIGNsb3NlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuV2FybmluZzpcblx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhmb3JtYXR0ZWRUZXh0LCBjbG9zZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIE1lc3NhZ2VUeXBlLlN1Y2Nlc3M6XG5cdFx0XHRNZXNzYWdlQm94LnN1Y2Nlc3MoZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjpcblx0XHRcdE1lc3NhZ2VCb3guaW5mb3JtYXRpb24oZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdE1lc3NhZ2VCb3guc2hvdyhmb3JtYXR0ZWRUZXh0LCBjbG9zZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlTWVzc2FnZVNob3duSW5NZXNzYWdlU3RyaXAodHJhbnNpdGlvbk1lc3NhZ2VzOiBNZXNzYWdlW10sIGNvbnRleHQ6IENvbnRleHQpOiBNZXNzYWdlW10ge1xuXHRjb25zdCBib3VuZENvbnRleHRNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdHRyYW5zaXRpb25NZXNzYWdlcz8uZm9yRWFjaCgobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdGlmIChtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDEgJiYgbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IGNvbnRleHQ/LmdldFBhdGgoKSAmJiBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Ym91bmRDb250ZXh0TWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblx0XHR9XG5cdH0pO1xuXHRpZiAoYm91bmRDb250ZXh0TWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0dHJhbnNpdGlvbk1lc3NhZ2VzID0gdHJhbnNpdGlvbk1lc3NhZ2VzPy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlICE9PSBib3VuZENvbnRleHRNZXNzYWdlc1swXTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gdHJhbnNpdGlvbk1lc3NhZ2VzO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGdyb3VwIG5hbWUgZm9yIGFsbCBtZXNzYWdlcyBpbiBhIGRpYWxvZy5cbiAqIEBwYXJhbSBhTW9kZWxEYXRhQXJyYXkgTWVzc2FnZXMgYXJyYXlcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSB2aWV3VHlwZVxuICovXG5mdW5jdGlvbiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lKFxuXHRhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdGNvbnRyb2w6IENvbnRyb2wgfCB1bmRlZmluZWQsXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHZvaWQge1xuXHRhTW9kZWxEYXRhQXJyYXkuZm9yRWFjaCgoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIpID0+IHtcblx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IFwiXCI7XG5cdFx0aWYgKCFhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoICYmIGFNb2RlbERhdGEuZ2V0Q29kZT8uKCkgIT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdFx0Ly8gdW5ib3VuZCB0cmFuc2lpdG9uIG1lc3NhZ2VzXG5cdFx0XHRjb25zdCBnZW5lcmFsR3JvdXBUZXh0ID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IGdlbmVyYWxHcm91cFRleHQ7XG5cdFx0fSBlbHNlIGlmIChhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoKSB7XG5cdFx0XHQvLyBMUiBmbG93XG5cdFx0XHRpZiAodmlld1R5cGUgPT09IFwiTGlzdFJlcG9ydFwiICYmIGNvbnRyb2w/LmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5zZXRHcm91cE5hbWVMUlRhYmxlKGNvbnRyb2wsIGFNb2RlbERhdGEsIHNBY3Rpb25OYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAodmlld1R5cGUgPT09IFwiT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRcdC8vIE9QIERpc3BsYXkgbW9kZVxuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZShhTW9kZWxEYXRhLCBzQWN0aW9uTmFtZSwgY29udHJvbCBhcyBWaWV3KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGZvciBMUiB0YWJsZS5cbiAqIEBwYXJhbSBvRWxlbVxuICogQHBhcmFtIGFNb2RlbERhdGFcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZVxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVMUlRhYmxlKG9FbGVtOiBDb250cm9sIHwgdW5kZWZpbmVkLCBhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRjb25zdCBvUm93QmluZGluZyA9IG9FbGVtICYmIChvRWxlbSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpO1xuXHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAkeyhvRWxlbSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gO1xuXHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdGNvbnN0IGFsbFJvd0NvbnRleHRzID0gb1Jvd0JpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRhbGxSb3dDb250ZXh0cy5mb3JFYWNoKChyb3dDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5jbHVkZXMocm93Q29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBgJHtyb3dDb250ZXh0LmdldFBhdGgoKX0vYDtcblx0XHRcdFx0XHRjb25zdCBpZGVudGlmaWVyQ29sdW1uID0gKG9FbGVtLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRJZGVudGlmaWVyQ29sdW1uKCkgYXMgc3RyaW5nO1xuXHRcdFx0XHRcdGNvbnN0IHJvd0lkZW50aWZpZXIgPSBpZGVudGlmaWVyQ29sdW1uICYmIHJvd0NvbnRleHQuZ2V0T2JqZWN0KClbaWRlbnRpZmllckNvbHVtbl07XG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uUHJvcGVydHlOYW1lID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sUHJvcGVydHkob0VsZW0sIGFNb2RlbERhdGEsIGNvbnRleHRQYXRoKTtcblx0XHRcdFx0XHRjb25zdCB7IHNUYWJsZVRhcmdldENvbE5hbWUgfSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbEluZm8ob0VsZW0gYXMgTURDVGFibGUsIGNvbHVtblByb3BlcnR5TmFtZSk7XG5cblx0XHRcdFx0XHQvLyBpZiB0YXJnZXQgaGFzIHNvbWUgY29sdW1uIG5hbWUgYW5kIGNvbHVtbiBpcyB2aXNpYmxlIGluIFVJXG5cdFx0XHRcdFx0aWYgKGNvbHVtblByb3BlcnR5TmFtZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdFx0XHQvLyBoZWFkZXIgd2lsbCBiZSByb3cgSWRlbnRpZmllciwgaWYgZm91bmQgZnJvbSBhYm92ZSBjb2RlIG90aGVyd2lzZSBpdCBzaG91bGQgYmUgdGFibGUgbmFtZVxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSByb3dJZGVudGlmaWVyID8gYCAke3Jvd0lkZW50aWZpZXJ9YCA6IChvRWxlbSBhcyBNRENUYWJsZSkuZ2V0SGVhZGVyKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGlmIGNvbHVtbiBkYXRhIG5vdCBmb3VuZCAobWF5IGJlIHRoZSBjb2x1bW4gaXMgaGlkZGVuKSwgYWRkIGdyb3VwaW5nIGFzIExhc3QgQWN0aW9uXG5cdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlKFxuXHRtZGNUYWJsZTogTURDVGFibGUsXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGVcbik6IHZvaWQge1xuXHRjb25zdCBpZGVudGlmaWVyQ29sdW1uID0gKG1kY1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRJZGVudGlmaWVyQ29sdW1uKCkgYXMgc3RyaW5nO1xuXHRpZiAoaWRlbnRpZmllckNvbHVtbikge1xuXHRcdGNvbnN0IGFsbFJvd0NvbnRleHRzID0gbWRjVGFibGUuZ2V0Um93QmluZGluZygpLmdldENvbnRleHRzKCk7XG5cdFx0YWxsUm93Q29udGV4dHMuZm9yRWFjaCgocm93Q29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UudGFyZ2V0Py5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0Y29uc3Qgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXJDb2x1bW4gPyByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCBjb2x1bW5OYW1lU3VmZml4ID0gdGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUgPyBgLCAke3RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lfWAgOiBcIlwiO1xuXHRcdFx0XHRtZXNzYWdlW1wiYWRkaXRpb25hbFRleHRcIl0gPSBgJHtyb3dJZGVudGlmaWVyfSR7Y29sdW1uTmFtZVN1ZmZpeH1gO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG1lc3NhZ2VbXCJhZGRpdGlvbmFsVGV4dFwiXSA9IGAke3RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lfWA7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUoXG5cdHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRtZGNUYWJsZTogTURDVGFibGUsXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGVcbik6IHZvaWQge1xuXHRsZXQgaGVhZGVyTmFtZSA9IG1kY1RhYmxlLmdldEhlYWRlclZpc2libGUoKSAmJiB0YXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXI7XG5cdGlmICghaGVhZGVyTmFtZSkge1xuXHRcdGhlYWRlck5hbWUgPSBzdWJzZWN0aW9uLmdldFRpdGxlKCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRoZWFkZXJOYW1lID0gYCR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke2hlYWRlck5hbWV9YDtcblx0fVxuXHRtZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IGhlYWRlck5hbWU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBpbiBPUCBEaXNwbGF5IG1vZGUuXG4gKiBAcGFyYW0gc3Vic2VjdGlvbiBTdWJzZWN0aW9uXG4gKiBAcGFyYW0gbWRjVGFibGUgIE1EQyB0YWJsZVxuICogQHBhcmFtIG1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHZpZXdDb250ZXh0IFZpZXcncyBiaW5kaW5nIGNvbnRleHRcbiAqIEBwYXJhbSBncm91cE5hbWVJc0dlbmVyYWwgSXMgcHJlc2VudCBncm91cCBuYW1lICdHZW5lcmFsJ1xuICogQHBhcmFtIGFjdGlvbk5hbWUgQWN0aW9uIG5hbWVcbiAqIEByZXR1cm5zIElmIGdyb3VwIG5hbWUgaXMgJ0dlbmVyYWwnXG4gKi9cbmZ1bmN0aW9uIHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZShcblx0c3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdG1kY1RhYmxlOiBNRENUYWJsZSxcblx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdHZpZXdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0Z3JvdXBOYW1lSXNHZW5lcmFsOiBib29sZWFuLFxuXHRhY3Rpb25OYW1lPzogc3RyaW5nXG4pOiBib29sZWFuIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBtZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gdHJ1ZTtcblx0bGV0IGNoaWxkVGFibGVFbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG5cdG1kY1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKChvRWxlbWVudCkgPT4ge1xuXHRcdGlmIChvRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLm0uVGFibGVcIikgfHwgb0VsZW1lbnQuaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRjaGlsZFRhYmxlRWxlbWVudCA9IG9FbGVtZW50O1xuXHRcdH1cblx0fSk7XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7dmlld0NvbnRleHQ/LmdldFBhdGgoKX0vJHttZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCk/LmdldFBhdGgoKX1gO1xuXHRcdGlmIChtZXNzYWdlLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdGNvbnN0IG9iaiA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRtZGNUYWJsZSxcblx0XHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQsXG5cdFx0XHRcdG9Sb3dCaW5kaW5nLFxuXHRcdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAsXG5cdFx0XHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB7IG9UYXJnZXRUYWJsZUluZm8gfSA9IG9iajtcblxuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlKG1kY1RhYmxlLCBtZXNzYWdlLCBvVGFyZ2V0VGFibGVJbmZvKTtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy51cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZShzdWJzZWN0aW9uLCBtZGNUYWJsZSwgbWVzc2FnZSwgb1RhcmdldFRhYmxlSW5mbyk7XG5cdFx0XHRncm91cE5hbWVJc0dlbmVyYWwgPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdyb3VwTmFtZUlzR2VuZXJhbDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGluIE9QIERpc3BsYXkgbW9kZS5cbiAqIEBwYXJhbSBhTW9kZWxEYXRhIE1lc3NhZ2UgT2JqZWN0XG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgIEFjdGlvbiBuYW1lXG4gKiBAcGFyYW0gY29udHJvbFxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBWaWV3KTogdm9pZCB7XG5cdGNvbnN0IG9WaWV3Q29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IG9wTGF5b3V0OiBDb250cm9sID0gY29udHJvbD8uZ2V0Q29udGVudCAmJiBjb250cm9sPy5nZXRDb250ZW50KClbMF07XG5cdGxldCBiSXNHZW5lcmFsR3JvdXBOYW1lID0gdHJ1ZTtcblx0aWYgKG9wTGF5b3V0KSB7XG5cdFx0bWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9wTGF5b3V0KS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdGNvbnN0IHN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdHN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRvU3ViU2VjdGlvbi5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRpZiAob0VsZW0uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGJJc0dlbmVyYWxHcm91cE5hbWUgPSBzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUoXG5cdFx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRvRWxlbSxcblx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YSxcblx0XHRcdFx0XHRcdFx0b1ZpZXdDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lLFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7b1ZpZXdDb250ZXh0Py5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBPUCBjb250ZXh0IHBhdGggaXMgcGFydCBvZiB0YXJnZXQsIHNldCBMYXN0IEFjdGlvbiBhcyBncm91cCBuYW1lXG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGNvbnN0IHNMYXN0QWN0aW9uVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9MQVNUX0FDVElPTlwiKTtcblx0cmV0dXJuIHNBY3Rpb25OYW1lID8gYCR7c0xhc3RBY3Rpb25UZXh0fTogJHtzQWN0aW9uTmFtZX1gIDogXCJcIjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2l2ZSByYW5rIGJhc2VkIG9uIE1lc3NhZ2UgR3JvdXAvSGVhZGVyIG5hbWUsIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgU29ydGluZyBtZXNzYWdlcyBpbiBNZXNzYWdlIGRpYWxvZ1xuICogTGFzdCBBY3Rpb24gc2hvdWxkIGJlIHNob3duIGF0IHRvcCwgbmV4dCBSb3cgSWQgYW5kIGxhc3QgR2VuZXJhbC5cbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIFJhbmsgb2YgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKTogbnVtYmVyIHtcblx0aWYgKG9iai5nZXRDb2RlKCkgPT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdHJldHVybiAxO1xuXHR9IGVsc2UgaWYgKG9iai5oZWFkZXJOYW1lPy50b1N0cmluZygpLmluY2x1ZGVzKFwiTGFzdCBBY3Rpb25cIikpIHtcblx0XHRyZXR1cm4gMjtcblx0fSBlbHNlIGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkdlbmVyYWxcIikpIHtcblx0XHRyZXR1cm4gNDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gMztcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgd2hpY2ggY2FuIGVpdGhlciBHZW5lcmFsIG9yIExhc3QgQWN0aW9uLlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBiSXNHZW5lcmFsR3JvdXBOYW1lXG4gKi9cbmNvbnN0IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUgPSAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHR9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIHRhYmxlIHJvdy9jb2x1bW4gaW5mbyBhbmQgc2V0IHN1YnRpdGxlLlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gc2V0U2VjdGlvbk5hbWVJbkdyb3VwXG4gKiBAcGFyYW0gZm5TZXRHcm91cE5hbWVcbiAqIEByZXR1cm5zIFRhYmxlIGluZm8gYW5kIFN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZyxcblx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwOiBib29sZWFuLFxuXHRmblNldEdyb3VwTmFtZTogRnVuY3Rpb25cbik6IHsgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZTsgc3ViVGl0bGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgfSB7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm8gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVBbmRUYXJnZXRJbmZvKG9UYWJsZSwgYU1lc3NhZ2UsIG9FbGVtZW50LCBvUm93QmluZGluZyk7XG5cdG9UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXIgPSBvVGFibGUuZ2V0SGVhZGVyKCk7XG5cblx0bGV0IHNDb250cm9sSWQsIGJJc0NyZWF0aW9uUm93O1xuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCkge1xuXHRcdHNDb250cm9sSWQgPSBhTWVzc2FnZS5nZXRDb250cm9sSWRzKCkuZmluZChmdW5jdGlvbiAoc0lkOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuaXNDb250cm9sSW5UYWJsZShvVGFibGUsIHNJZCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoc0NvbnRyb2xJZCkge1xuXHRcdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzQ29udHJvbElkKTtcblx0XHRiSXNDcmVhdGlvblJvdyA9IG1lc3NhZ2VIYW5kbGluZy5pc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbCk7XG5cdH1cblxuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdC8vIGlmIHRoZSBjb2x1bW4gaXMgbm90IHByZXNlbnQgb24gVUkgb3IgdGhlIHRhcmdldCBkb2VzIG5vdCBoYXZlIGEgdGFibGUgZmllbGQgaW4gaXQsIHVzZSBMYXN0IEFjdGlvbiBmb3IgZ3JvdXBpbmdcblx0XHRpZiAoYU1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpICYmIHNBY3Rpb25OYW1lKSB7XG5cdFx0XHRmblNldEdyb3VwTmFtZShhTWVzc2FnZSwgc0FjdGlvbk5hbWUpO1xuXHRcdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3ViVGl0bGUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZVN1YnRpdGxlKFxuXHRcdGFNZXNzYWdlLFxuXHRcdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzLFxuXHRcdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsXG5cdFx0b1RhYmxlLFxuXHRcdGJJc0NyZWF0aW9uUm93XG5cdCk7XG5cblx0cmV0dXJuIHsgb1RhcmdldFRhYmxlSW5mbywgc3ViVGl0bGUgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIHRoZSBzdWJ0aXRsZSBiYXNlZCBvbiBUYWJsZSBSb3cvQ29sdW1uIGRhdGEuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIHRhYmxlUm93QmluZGluZ0NvbnRleHRzXG4gKiBAcGFyYW0gdGFibGVSb3dDb250ZXh0XG4gKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSBpc0NyZWF0aW9uUm93XG4gKiBAcGFyYW0gdGFyZ2V0ZWRDb250cm9sXG4gKiBAcmV0dXJucyBNZXNzYWdlIHN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlU3VidGl0bGUoXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YWJsZVJvd0JpbmRpbmdDb250ZXh0czogQ29udGV4dFtdLFxuXHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHR0YWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0dGFibGU6IE1EQ1RhYmxlLFxuXHRpc0NyZWF0aW9uUm93OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHR0YXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG4pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IG1lc3NhZ2VTdWJ0aXRsZTtcblx0bGV0IHJvd1N1YnRpdGxlVmFsdWU7XG5cdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0Y29uc3QgdGFibGVDb2xQcm9wZXJ0eSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8oKTtcblx0Y29uc3QgY29sRnJvbVRhYmxlU2V0dGluZ3MgPSBtZXNzYWdlSGFuZGxpbmcuZmV0Y2hDb2x1bW5JbmZvKG1lc3NhZ2UsIHRhYmxlKTtcblx0aWYgKGlzQ3JlYXRpb25Sb3cgfHwgdGFibGVSb3dDb250ZXh0Py5pc0luYWN0aXZlKCkpIHtcblx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbXG5cdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9DUkVBVElPTl9ST1dfSU5ESUNBVE9SXCIpLFxuXHRcdFx0dGFibGVUYXJnZXRDb2xOYW1lID8gdGFibGVUYXJnZXRDb2xOYW1lIDogKGNvbEZyb21UYWJsZVNldHRpbmdzIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubGFiZWxcblx0XHRdKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRcdFx0dGFibGUsXG5cdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0KTtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCA9IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiJFBhdGhcIilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQ29sVGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdHRhYmxlQ29sVGV4dEFubm90YXRpb25QYXRoICYmIHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQ/IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbi5nZXRPYmplY3QoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50LyRFbnVtTWVtYmVyXCIpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmICh0YWJsZVJvd0JpbmRpbmdDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBzZXQgUm93IHN1YnRpdGxlIHRleHRcblx0XHRcdGlmICh0YXJnZXRlZENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gVGhlIFVJIGVycm9yIGlzIG9uIHRoZSBmaXJzdCBjb2x1bW4sIHdlIHRoZW4gZ2V0IHRoZSBjb250cm9sIGlucHV0IGFzIHRoZSByb3cgaW5kaWNhdG9yOlxuXHRcdFx0XHRyb3dTdWJ0aXRsZVZhbHVlID0gKHRhcmdldGVkQ29udHJvbCBhcyBGaWVsZEFQSSkuZ2V0VmFsdWUoKTtcblx0XHRcdH0gZWxzZSBpZiAodGFibGVSb3dDb250ZXh0ICYmIHRhYmxlQ29sUHJvcGVydHkgJiYgdGFibGVDb2xQcm9wZXJ0eS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gR2V0dGluZyB0aGUgY29sdW1uIGxhYmVsIGFuZCBpdHMgdmFsdWUgb2YgYSBzaW5nbGUgcm93XG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRUYWJsZUNvbFZhbHVlKFxuXHRcdFx0XHRcdHRhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHR0YWJsZUNvbFRleHRBcnJhbmdlbWVudCxcblx0XHRcdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRhYmxlUm93Q29udGV4dCAmJiB0YWJsZUNvbFByb3BlcnR5ICYmIHRhYmxlQ29sUHJvcGVydHkubGVuZ3RoID4gMSkge1xuXHRcdFx0XHQvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcm93cywgdGhlIHN1YnRpdGxlIGlzIGRpc3BsYXllZCBhcyDigJhTZWUgbWVzc2FnZSBkZXRhaWxz4oCZXG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9ERVRBSUxFRF9ST1dfSU5GT1wiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBzZXQgdGhlIG1lc3NhZ2Ugc3VidGl0bGVcblx0XHRcdGNvbnN0IG9Db2x1bW5JbmZvOiBDb2x1bW5JbmZvVHlwZSA9IG1lc3NhZ2VIYW5kbGluZy5kZXRlcm1pbmVDb2x1bW5JbmZvKGNvbEZyb21UYWJsZVNldHRpbmdzLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGlmIChyb3dTdWJ0aXRsZVZhbHVlICYmIHRhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbcm93U3VidGl0bGVWYWx1ZSwgdGFibGVUYXJnZXRDb2xOYW1lXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XX1dJVEhfSURFTlRJRklFUlwiLCBbcm93U3VidGl0bGVWYWx1ZV0pfSwgJHtcblx0XHRcdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWVcblx0XHRcdFx0fWA7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJVbmtub3duXCIpIHtcblx0XHRcdFx0bWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV19XSVRIX0lERU5USUZJRVJcIiwgW3Jvd1N1YnRpdGxlVmFsdWVdKTtcblx0XHRcdH0gZWxzZSBpZiAocm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dfV0lUSF9JREVOVElGSUVSXCIsIFtyb3dTdWJ0aXRsZVZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFyb3dTdWJ0aXRsZVZhbHVlICYmIHRhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpICsgXCI6IFwiICsgdGFibGVUYXJnZXRDb2xOYW1lO1xuXHRcdFx0fSBlbHNlIGlmICghcm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtZXNzYWdlU3VidGl0bGU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBmaXJzdCBjb2x1bW4gZm9yIHRleHQgQW5ub3RhdGlvbiwgdGhpcyBpcyBuZWVkZWQgdG8gc2V0IHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSB0YWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSB0YWJsZUNvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBCaW5kaW5nIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0dGFibGU6IE1EQ1RhYmxlLFxuXHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHR0YWJsZUNvbFByb3BlcnR5OiBUYWJsZUNvbHVtblByb3BlcnRpZXNcbik6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IGJpbmRpbmdDb250ZXh0O1xuXHRpZiAodGFibGVSb3dDb250ZXh0ICYmIHRhYmxlQ29sUHJvcGVydHkgJiYgdGFibGVDb2xQcm9wZXJ0eS5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCB7IGtleSB9ID0gdGFibGVDb2xQcm9wZXJ0eVswXTtcblx0XHRjb25zdCBvTW9kZWwgPSB0YWJsZT8uZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDsgLy8gbXVzdCBiZSBhbiBPRGF0YU1ldGFNb2RlbCB0byBtYXRjaCB0aGUgdHlwZSBvZiB0aGUgdGFibGUgcm93IGNvbnRleHRcblx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsPy5nZXRNZXRhUGF0aCh0YWJsZVJvd0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRpZiAob01ldGFNb2RlbD8uZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vJHtrZXl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYCkpIHtcblx0XHRcdGJpbmRpbmdDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzTWV0YVBhdGh9LyR7a2V5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYmluZGluZ0NvbnRleHQ7XG59XG5cbi8qKlxuICogVGhlIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgY29sdW1uIGluZm8gZnJvbSB0aGUgYXNzb2NpYXRlZCBtZXNzYWdlIG9mIHRoZSBtZXNzYWdlIHBvcG92ZXIuXG4gKiBAcGFyYW0gb01lc3NhZ2UgTWVzc2FnZSBvYmplY3RcbiAqIEBwYXJhbSBvVGFibGUgTWRjVGFibGVcbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbHVtbiBpbmZvLlxuICovXG5cbmZ1bmN0aW9uIGZldGNoQ29sdW1uSW5mbyhvTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIG9UYWJsZTogTURDVGFibGUpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmogPSBvTWVzc2FnZT8uZ2V0VGFyZ2V0cygpWzBdLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0cmV0dXJuIChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRLZXlDb2x1bW5JbmZvKHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmopO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgQ29sdW1uIGRhdGEgZGVwZW5kaW5nIG9uIGl0cyBhdmFpbGFiaWxpdHkgaW4gVGFibGUsIHRoaXMgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKiBAcGFyYW0gb0NvbEZyb21UYWJsZVNldHRpbmdzXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHJldHVybnMgQ29sdW1uIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IENvbHVtbkluZm9UeXBlIHtcblx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0geyBzQ29sdW1uSW5kaWNhdG9yOiBcIlwiLCBzQ29sdW1uVmFsdWU6IFwiXCIgfTtcblx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdC8vIGlmIGNvbHVtbiBpcyBuZWl0aGVyIGluIHRhYmxlIGRlZmluaXRpb24gbm9yIHBlcnNvbmFsaXphdGlvbiwgc2hvdyBvbmx5IHJvdyBzdWJ0aXRsZSB0ZXh0XG5cdFx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncy5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcInVuZGVmaW5lZFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL2lmIGNvbHVtbiBpcyBpbiB0YWJsZSBwZXJzb25hbGl6YXRpb24gYnV0IG5vdCBpbiB0YWJsZSBkZWZpbml0aW9uLCBzaG93IENvbHVtbiAoSGlkZGVuKSA6IDxjb2xOYW1lPlxuXHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX0gKCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCJcblx0XHRcdCl9KTogJHtvQ29sRnJvbVRhYmxlU2V0dGluZ3MubGFiZWx9YDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcIkhpZGRlblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJVbmtub3duXCI7XG5cdH1cblx0cmV0dXJuIG9Db2x1bW5JbmZvO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgYSBnaXZlbiBjb250cm9sIGlkIGlzIGEgcGFydCBvZiBUYWJsZS5cbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzQ29udHJvbElkXG4gKiBAcmV0dXJucyBUcnVlIGlmIGNvbnRyb2wgaXMgcGFydCBvZiB0YWJsZS5cbiAqL1xuZnVuY3Rpb24gaXNDb250cm9sSW5UYWJsZShvVGFibGU6IE1EQ1RhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpOiBVSTVFbGVtZW50W10gfCBib29sZWFuIHtcblx0Y29uc3Qgb0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRpZiAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJiAhb0NvbnRyb2wuaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpKSB7XG5cdFx0cmV0dXJuIG9UYWJsZS5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKG9FbGVtOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gb0VsZW0uZ2V0SWQoKSA9PT0gb0NvbnRyb2wuZ2V0SWQoKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93KG9Db250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGxldCBvUGFyZW50Q29udHJvbCA9IG9Db250cm9sPy5nZXRQYXJlbnQoKTtcblx0d2hpbGUgKFxuXHRcdG9QYXJlbnRDb250cm9sICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuUm93XCIpICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC5tLkNvbHVtbkxpc3RJdGVtXCIpXG5cdCkge1xuXHRcdG9QYXJlbnRDb250cm9sID0gb1BhcmVudENvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblxuXHRyZXR1cm4gISFvUGFyZW50Q29udHJvbCAmJiBvUGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIik7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdHN3aXRjaCAoc0hpZ2hlc3RQcmlvcml0eSkge1xuXHRcdGNhc2UgXCJFcnJvclwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIik7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpOiB2b2lkIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogTWVzc2FnZU1vZGVsLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogTWVzc2FnZVtdIHtcblx0aWYgKHNQYXRoVG9CZVJlbW92ZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdH1cblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBvTWVzc2FnZU1vZGVsLmJpbmRMaXN0KFwiL1wiKTtcblxuXHRsaXN0QmluZGluZy5maWx0ZXIoXG5cdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LnN0YXJ0c1dpdGgoc1BhdGhUb0JlUmVtb3ZlZCkpXG5cdFx0fSlcblx0KTtcblxuXHRyZXR1cm4gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdHJldHVybiBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0fSk7XG59XG5cbi8qKlxuICogR2V0IHJlbGV2YW50IG1lc3NhZ2VzLlxuICogQHBhcmFtIGJCb3VuZE1lc3NhZ2VzIFRvIGdldCBvbmx5IGJvdW5kIG1lc3NhZ2VzXG4gKiBAcGFyYW0gYlRyYW5zaXRpb25Pbmx5IFRvIGdldCBvbmx5IHRyYW5zaXRpb24gbWVzc2FnZXNcbiAqIEBwYXJhbSBzUGF0aFRvQmVSZW1vdmVkIEZpbHRlciBvdXQgYm91bmQgbWVzc2FnZXMgd2l0aCBwYXRoXG4gKiBAcmV0dXJucyBNZXNzYWdlc1xuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlcyA9IGZhbHNlLCBiVHJhbnNpdGlvbk9ubHkgPSBmYWxzZSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IE1lc3NhZ2VbXSB7XG5cdGxldCBpO1xuXHRjb25zdCBvTWVzc2FnZU1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEsXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXHRsZXQgYU1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0aWYgKGJCb3VuZE1lc3NhZ2VzICYmIGJUcmFuc2l0aW9uT25seSAmJiBzUGF0aFRvQmVSZW1vdmVkKSB7XG5cdFx0YU1lc3NhZ2VzID0gZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsKG9NZXNzYWdlTW9kZWwsIHNQYXRoVG9CZVJlbW92ZWQpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlcyA9IG9NZXNzYWdlTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0fVxuXHRmb3IgKGkgPSAwOyBpIDwgYU1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0KCFiVHJhbnNpdGlvbk9ubHkgfHwgYU1lc3NhZ2VzW2ldLmdldFBlcnNpc3RlbnQoKSkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSAhPT0gXCJcIikgfHxcblx0XHRcdFx0KCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS5nZXRUYXJnZXRzKClbMF0gfHwgYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSA9PT0gXCJcIikpKVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlcy5wdXNoKGFNZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldENvZGUoKSA9PT0gXCI1MDNcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRNZXNzYWdlKCkgIT09IFwiXCIgJiZcblx0XHRcdCFhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldE1lc3NhZ2UoKS5pbmNsdWRlcyhvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIikpXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnNldE1lc3NhZ2UoXG5cdFx0XHRcdGBcXG4ke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKX0ke2FUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0TWVzc2FnZSgpfWBcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8vRmlsdGVyaW5nIG1lc3NhZ2VzIGFnYWluIGhlcmUgdG8gYXZvaWQgc2hvd2luZyBwdXJlIHRlY2huaWNhbCBtZXNzYWdlcyByYWlzZWQgYnkgdGhlIG1vZGVsXG5cdGNvbnN0IGJhY2tlbmRNZXNzYWdlczogTWVzc2FnZVtdID0gYVRyYW5zaXRpb25NZXNzYWdlcy5maWx0ZXIoaXNOb25UZWNobmljYWxNZXNzYWdlKTtcblxuXHRyZXR1cm4gYmFja2VuZE1lc3NhZ2VzO1xufVxuZXhwb3J0IHR5cGUgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSB7XG5cdG9yaWdpbmFsTWVzc2FnZT86IHtcblx0XHRtZXNzYWdlPzogc3RyaW5nO1xuXHR9IHwgbnVsbDtcblx0aHR0cFN0YXR1cz86IG51bWJlciB8IG51bGw7XG5cdHJldHJ5QWZ0ZXI/OiBEYXRlO1xuXHRpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24/OiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cbi8vVE9ETzogVGhpcyBtdXN0IGJlIG1vdmVkIG91dCBvZiBtZXNzYWdlIGhhbmRsaW5nXG5mdW5jdGlvbiBzZXRNZXNzYWdlU3VidGl0bGUob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKTogdm9pZCB7XG5cdGlmIChtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBzdWJ0aXRsZUNvbHVtbiA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgZXJyb3JDb250ZXh0ID0gYUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uaW5jbHVkZXMob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9KTtcblx0XHRtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID0gZXJyb3JDb250ZXh0ID8gZXJyb3JDb250ZXh0LmdldE9iamVjdCgpW3N1YnRpdGxlQ29sdW1uXSA6IHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgcmV0cmlldmVzIHRoZSB2aXNpYmxlIHNlY3Rpb25zIGZyb20gYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gb09iamVjdFBhZ2VMYXlvdXQgVGhlIG9iamVjdFBhZ2VMYXlvdXQgb2JqZWN0IGZvciB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIHRoZSB2aXNpYmxlIHNlY3Rpb25zLlxuICogQHJldHVybnMgQXJyYXkgb2YgdmlzaWJsZSBzZWN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob09iamVjdFBhZ2VMYXlvdXQ6IENvbnRyb2wgfCBPYmplY3RQYWdlTGF5b3V0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdHJldHVybiAob09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKS5maWx0ZXIoZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdHJldHVybiBvU2VjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGNvbnRyb2wgaWRzIGZyb20gbWVzc2FnZSBhcmUgYSBwYXJ0IG9mIGEgZ2l2ZW4gc3Vic2VjdGlvbi5cbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEByZXR1cm5zIFN1YlNlY3Rpb24gbWF0Y2hpbmcgY29udHJvbCBpZHMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpOiBVSTVFbGVtZW50W10ge1xuXHRyZXR1cm4gc3ViU2VjdGlvblxuXHRcdC5maW5kRWxlbWVudHModHJ1ZSwgKG9FbGVtKSA9PiB7XG5cdFx0XHRyZXR1cm4gZm5GaWx0ZXJVcG9uSWRzKG9NZXNzYWdlT2JqZWN0LmdldENvbnRyb2xJZHMoKSwgb0VsZW0pO1xuXHRcdH0pXG5cdFx0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcblx0XHRcdC8vIGNvbnRyb2xzIGFyZSBzb3J0ZWQgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgdGFibGUgb24gdG9wIG9mIHRoZSBhcnJheVxuXHRcdFx0Ly8gaXQgd2lsbCBoZWxwIHRvIGNvbXB1dGUgdGhlIHN1YnRpdGxlIG9mIHRoZSBtZXNzYWdlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHJlbGF0ZWQgY29udHJvbHNcblx0XHRcdGlmIChhLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgJiYgIWIuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKTogc3RyaW5nIHtcblx0Ly90aGlzIGZ1bmN0aW9uIGVzY2FwZXMgYSBzdHJpbmcgdG8gdXNlIGl0IGFzIGEgcmVnZXhcblx0Y29uc3QgZm5SZWdFeHBlc2NhcGUgPSBmdW5jdGlvbiAoczogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcblx0fTtcblx0Ly8gYmFzZWQgb24gdGhlIHRhcmdldCBwYXRoIG9mIHRoZSBtZXNzYWdlIHdlIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBuYW1lLlxuXHQvLyB0byBhY2hpZXZlIGl0IHdlIHJlbW92ZSB0aGUgYmluZGluZ0NvbnRleHQgcGF0aCBhbmQgdGhlIHJvdyBiaW5kaW5nIHBhdGggZnJvbSB0aGUgdGFyZ2V0XG5cdGlmICghb0NvbnRleHRQYXRoKSB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGhUb0VzY2FwZSA9IGAke29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7KG9UYWJsZSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gO1xuXHRcdG9Db250ZXh0UGF0aCA9IG5ldyBSZWdFeHAoYCR7Zm5SZWdFeHBlc2NhcGUoY29udGV4dFBhdGhUb0VzY2FwZSl9XFxcXCguKlxcXFwpL2ApO1xuXHR9XG5cdHJldHVybiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0ucmVwbGFjZShvQ29udGV4dFBhdGgsIFwiXCIpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIGNvbHVtbiBpbmZvcm1hdGlvbiBpZiBpdCBtYXRjaGVzIHdpdGggdGhlIHByb3BlcnR5IG5hbWUgZnJvbSB0YXJnZXQgb2YgbWVzc2FnZS5cbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuICogQHJldHVybnMgQ29sdW1uIG5hbWUgYW5kIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbEluZm8oXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH0ge1xuXHRsZXQgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvVGFibGVUYXJnZXRDb2w6IENvbHVtbiB8IHVuZGVmaW5lZCA9IG9UYWJsZS5nZXRDb2x1bW5zKCkuZmluZChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5O1xuXHR9KTtcblx0aWYgKCFvVGFibGVUYXJnZXRDb2wpIHtcblx0XHQvKiBJZiB0aGUgdGFyZ2V0IGNvbHVtbiBpcyBub3QgZm91bmQsIHdlIGNoZWNrIGZvciBhIGN1c3RvbSBjb2x1bW4gKi9cblx0XHRjb25zdCBvQ3VzdG9tQ29sdW1uID0gKG9UYWJsZS5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgVGFibGVEZWxlZ2F0ZSkuZ2V0Q29sdW1uc0ZvcihvVGFibGUpLmZpbmQoZnVuY3Rpb24gKFxuXHRcdFx0b0NvbHVtbjogVGFibGVDb2x1bW5cblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGlmICghIShvQ29sdW1uIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4pLnRlbXBsYXRlICYmIG9Db2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHxcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSkgYXMgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAob0N1c3RvbUNvbHVtbikge1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBvQ3VzdG9tQ29sdW1uPy5uYW1lO1xuXG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlXG5cdFx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdFx0LmZpbmQoZnVuY3Rpb24gKG9Db2x1bW4pOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPT09IG9Db2x1bW4uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Py5nZXRIZWFkZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBmaWVsZCBncm91cCAqL1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSAob1RhYmxlLmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBUYWJsZURlbGVnYXRlKS5nZXRDb2x1bW5zRm9yKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBjb2x1bW5EZWZpbml0aW9uID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbjogVGFibGVDb2x1bW4pIHtcblx0XHRcdFx0aWYgKG9Db2x1bW4ua2V5LmluY2x1ZGVzKFwiOjpGaWVsZEdyb3VwOjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5maW5kKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm86IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB8fCBwcm9wZXJ0eUluZm8ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdFx0XHQvKiBjaGVjayBpZiB0aGUgY29sdW1uIHdpdGggdGhlIGZpZWxkIGdyb3VwIGlzIHZpc2libGUgaW4gdGhlIHRhYmxlOiAqL1xuXHRcdFx0bGV0IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0aWYgKGNvbHVtbkRlZmluaXRpb24gJiYgY29sdW1uRGVmaW5pdGlvbi5sYWJlbCkge1xuXHRcdFx0XHRiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPSBvVGFibGUuZ2V0Q29sdW1ucygpLnNvbWUoZnVuY3Rpb24gKGNvbHVtbikge1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW4uZ2V0SGVhZGVyKCkgPT09IGNvbHVtbkRlZmluaXRpb24ubGFiZWw7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA/IGNvbHVtbkRlZmluaXRpb24/LmxhYmVsIDogdW5kZWZpbmVkO1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPyBjb2x1bW5EZWZpbml0aW9uPy5rZXkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBvVGFibGVUYXJnZXRDb2wuZ2V0SGVhZGVyKCk7XG5cdH1cblx0cmV0dXJuIHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc1RhYmxlVGFyZ2V0Q29sTmFtZSwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyBUYWJsZSBhbmQgY29sdW1uIGluZm8gaWYgYW55IG9mIGl0IG1hdGNoZXMgdGhlIHRhcmdldCBmcm9tIE1lc3NhZ2UuXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEBwYXJhbSBvRWxlbWVudFxuICogQHBhcmFtIG9Sb3dCaW5kaW5nXG4gKiBAcmV0dXJucyBUYWJsZSBpbmZvIG1hdGNoaW5nIHRoZSBtZXNzYWdlIHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbmRUYXJnZXRJbmZvKFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZ1xuKTogVGFyZ2V0VGFibGVJbmZvVHlwZSB7XG5cdGNvbnN0IHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGUsIG9NZXNzYWdlT2JqZWN0KTtcblx0Y29uc3Qgb1RhYmxlQ29sSW5mbyA9IGdldFRhYmxlQ29sSW5mbyhvVGFibGUsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5KTtcblx0Y29uc3Qgb1RhYmxlUm93QmluZGluZ0NvbnRleHRzID0gb0VsZW1lbnQ/LmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKVxuXHRcdD8gKG9Sb3dCaW5kaW5nIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldENvbnRleHRzKClcblx0XHQ6IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0Y29uc3Qgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSA9IHtcblx0XHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBvVGFibGVDb2xJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5LFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChyb3dDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gcm93Q29udGV4dCAmJiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0uaW5kZXhPZihyb3dDb250ZXh0LmdldFBhdGgoKSkgPT09IDA7XG5cdFx0fSlcblx0fTtcblx0cmV0dXJuIG9UYXJnZXRUYWJsZUluZm87XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBhQ29udHJvbElkc1xuICogQHBhcmFtIG9JdGVtXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIG1hdGNoZXMgb25lIG9mIHRoZSBjb250cm9sc1xuICovXG5mdW5jdGlvbiBmbkZpbHRlclVwb25JZHMoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUNvbnRyb2xJZHMuc29tZShmdW5jdGlvbiAoc0NvbnRyb2xJZCkge1xuXHRcdGlmIChzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBncm91cCBuYW1lIGhhdmluZyBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uIGRhdGEuXG4gKiBAcGFyYW0gc2VjdGlvblxuICogQHBhcmFtIHN1YlNlY3Rpb25cbiAqIEBwYXJhbSBiTXVsdGlwbGVTdWJTZWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRUYWJsZUluZm9cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsXG4gKiBAcmV0dXJucyBHcm91cCBuYW1lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lKFxuXHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG4pOiBzdHJpbmcge1xuXHRyZXR1cm4gKFxuXHRcdHNlY3Rpb24uZ2V0VGl0bGUoKSArXG5cdFx0KHN1YlNlY3Rpb24uZ2V0VGl0bGUoKSAmJiBiTXVsdGlwbGVTdWJTZWN0aW9ucyA/IGAsICR7c3ViU2VjdGlvbi5nZXRUaXRsZSgpfWAgOiBcIlwiKSArXG5cdFx0KG9UYXJnZXRUYWJsZUluZm8gJiYgb1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlclxuXHRcdFx0PyBgLCAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiKX06ICR7b1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlcn1gXG5cdFx0XHQ6IFwiXCIpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGJJc09ycGhhbkVsZW1lbnQob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKTogYm9vbGVhbiB7XG5cdHJldHVybiAhYUVsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKG9FbGVtKSB7XG5cdFx0bGV0IG9QYXJlbnRFbGVtZW50ID0gb0VsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0d2hpbGUgKG9QYXJlbnRFbGVtZW50ICYmIG9QYXJlbnRFbGVtZW50ICE9PSBvRWxlbSkge1xuXHRcdFx0b1BhcmVudEVsZW1lbnQgPSBvUGFyZW50RWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJlbnRFbGVtZW50ID8gdHJ1ZSA6IGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGZpbHRlcnMgYW5kIGdpdmVzIGJhY2sgdGhlIG1lc3NhZ2VzIGJhc2VkIG9uIHRoZSBjb250ZXh0IHBhc3NlZC5cbiAqIEBwYXJhbSBjb250ZXh0XG4gKiBAcmV0dXJucyBNZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZXNGb3JDb250ZXh0KGNvbnRleHQ6IENvbnRleHQpOiBNZXNzYWdlW10ge1xuXHRjb25zdCBvTWVzc2FnZU1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpO1xuXHRjb25zdCBsaXN0QmluZGluZyA9IG9NZXNzYWdlTW9kZWwuYmluZExpc3QoXCIvXCIpO1xuXHRsaXN0QmluZGluZy5maWx0ZXIoXG5cdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA+IDAgJiYgbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uc3RhcnRzV2l0aChjb250ZXh0LmdldFBhdGgoKSlcblx0XHR9KVxuXHQpO1xuXHRjb25zdCBjdXJyZW50Q29udGV4dHMgPSBsaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0cmV0dXJuIGN1cnJlbnRDb250ZXh0cy5tYXAoKGN1cnJlbnRDb250ZXh0KSA9PiBjdXJyZW50Q29udGV4dC5nZXRPYmplY3QoKSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBib29sZWFuIHRvIGNoZWNrIGlmIHRoZSB0YXJnZXQgaXMgcHJlc2VudCBpbiB0aGUgZGlhbG9nIGJhc2VkIG9uIHRoZSBjb250cm9sIElkcy5cbiAqIEBwYXJhbSBjb250cm9sSWRzIEFycmF5IG9mIGNvbnRyb2wgSWRzXG4gKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIHRoZSB0YXJnZXQgcHJlc2VudCBpbiB0aGUgZGlhbG9nLlxuICovXG5mdW5jdGlvbiBpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyhjb250cm9sSWRzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRsZXQgb0NvbnRyb2w6IE1hbmFnZWRPYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkLCBlcnJvckZpZWxkQ29udHJvbDtcblx0Y29uc3QgaW5kZXggPSBJbmZpbml0eTtcblx0aWYgKGNvbnRyb2xJZHMubGVuZ3RoID09PSAxKSB7XG5cdFx0b0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRyb2xJZHNbMF0pO1xuXHRcdGVycm9yRmllbGRDb250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWRzWzBdKSBhcyBVSTVFbGVtZW50O1xuXHR9IGVsc2Uge1xuXHRcdGxldCBlcnJvckNvbnRyb2xJZDtcblx0XHRjb250cm9sSWRzLmZvckVhY2goKGNvbnRyb2xJZCkgPT4ge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkKTtcblx0XHRcdGlmIChjb250cm9sPy5pc0EoXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRcdGVycm9yQ29udHJvbElkID0gY29udHJvbElkO1xuXHRcdFx0XHRvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXJyb3JDb250cm9sSWQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdGNvbnN0IGZpZWxkUmFua2luRGlhbG9nID0gSW5maW5pdHk7XG5cdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nKSB7XG5cdFx0XHRpZiAoaW5kZXggPiBmaWVsZFJhbmtpbkRpYWxvZykge1xuXHRcdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBkaWFsb2cncyBjb250cm9sXG5cdFx0XHRcdGVycm9yRmllbGRDb250cm9sPy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gbWVzc2FnZXMgd2l0aCB0YXJnZXQgaW5zaWRlIHNhcC5tLkRpYWxvZyBzaG91bGQgbm90IGJyaW5nIHVwIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBjb250ZXh0IGZyb20gdGhlIG1lc3NhZ2UgbW9kZWwgd2hlbiB0aGVyZSBpcyBlcnJvciBvbiB0aGUgZGlhbG9nIGFuZCB3aGVuIHRoZSBkaWFsb2cgaXMgb3Blbi5cbiAqIEBwYXJhbSBtZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlc1xuICogQHBhcmFtIGNvbnRleHRzIENvbnRleHRzIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbChtZXNzYWdlcz86IE1lc3NhZ2VbXSwgY29udGV4dHM/OiBDb250ZXh0W10pOiB2b2lkIHtcblx0Y29uc3QgYm91bmRDb250ZXh0TWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXHRpZiAoY29udGV4dHM/Lmxlbmd0aCA9PT0gMSkge1xuXHRcdG1lc3NhZ2VzPy5mb3JFYWNoKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gY29udGV4dHM/LlswXT8uZ2V0UGF0aCgpICYmXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlXG5cdFx0XHQpIHtcblx0XHRcdFx0Ym91bmRDb250ZXh0TWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRpZiAoYm91bmRDb250ZXh0TWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhib3VuZENvbnRleHRNZXNzYWdlcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cgZnJvbSBzaG93aW5nIHRoZSBtZXNzYWdlcy5cbiAqIEBwYXJhbSBtZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlc1xuICogQHJldHVybnMgQXJyYXkgb2YgbWVzc2FnZXMgYWZ0ZXIgcmVtb3ZpbmcgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nLlxuICovXG5mdW5jdGlvbiByZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZyhtZXNzYWdlczogTWVzc2FnZVtdKTogTWVzc2FnZVtdIHtcblx0Y29uc3QgbWVzc2FnZXNUb0JlUmVtb3ZlZCA9IG1lc3NhZ2VzPy5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlICYmIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdICE9PSBcIlwiKTtcblx0bWVzc2FnZXMgPSBtZXNzYWdlcz8uZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiAhbWVzc2FnZXNUb0JlUmVtb3ZlZD8uaW5jbHVkZXMobWVzc2FnZSkpO1xuXHRyZXR1cm4gbWVzc2FnZXM7XG59XG5cbi8qKlxuICogU3RhdGljIGZ1bmN0aW9ucyBmb3IgRmlvcmkgTWVzc2FnZSBIYW5kbGluZ1xuICogQG5hbWVzcGFjZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU2LjBcbiAqL1xuY29uc3QgbWVzc2FnZUhhbmRsaW5nOiBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogZ2V0TWVzc2FnZXMsXG5cdGdldFVJRGVjaXNpb25zOiBnZXRVSURlY2lzaW9ucyxcblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRtb2RpZnlFVGFnTWVzc2FnZXNPbmx5OiBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHksXG5cdGdldFJldHJ5QWZ0ZXJNZXNzYWdlOiBnZXRSZXRyeUFmdGVyTWVzc2FnZSxcblx0cHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nOiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2csXG5cdHNldE1lc3NhZ2VTdWJ0aXRsZTogc2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dDogZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQsXG5cdGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uOiBnZXRDb250cm9sRnJvbU1lc3NhZ2VSZWxhdGluZ1RvU3ViU2VjdGlvbixcblx0Zm5GaWx0ZXJVcG9uSWRzOiBmbkZpbHRlclVwb25JZHMsXG5cdGdldFRhYmxlQW5kVGFyZ2V0SW5mbzogZ2V0VGFibGVBbmRUYXJnZXRJbmZvLFxuXHRjcmVhdGVTZWN0aW9uR3JvdXBOYW1lOiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lLFxuXHRiSXNPcnBoYW5FbGVtZW50OiBiSXNPcnBoYW5FbGVtZW50LFxuXHRnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWU6IGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZSxcblx0Z2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZTogZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSxcblx0Z2V0VGFibGVDb2xJbmZvOiBnZXRUYWJsZUNvbEluZm8sXG5cdGdldFRhYmxlQ29sUHJvcGVydHk6IGdldFRhYmxlQ29sUHJvcGVydHksXG5cdGdldE1lc3NhZ2VTdWJ0aXRsZTogZ2V0TWVzc2FnZVN1YnRpdGxlLFxuXHRkZXRlcm1pbmVDb2x1bW5JbmZvOiBkZXRlcm1pbmVDb2x1bW5JbmZvLFxuXHRmZXRjaENvbHVtbkluZm86IGZldGNoQ29sdW1uSW5mbyxcblx0Z2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uOiBnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb24sXG5cdGdldE1lc3NhZ2VSYW5rOiBnZXRNZXNzYWdlUmFuayxcblx0aGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3M6IGhhc1RyYW5zaXRpb25FcnJvcnNPcldhcm5pbmdzLFxuXHRmbkNhbGxiYWNrU2V0R3JvdXBOYW1lOiBmbkNhbGxiYWNrU2V0R3JvdXBOYW1lLFxuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlLFxuXHR1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lOiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lLFxuXHRzZXRHcm91cE5hbWVMUlRhYmxlOiBzZXRHcm91cE5hbWVMUlRhYmxlLFxuXHRpc0NvbnRyb2xJblRhYmxlOiBpc0NvbnRyb2xJblRhYmxlLFxuXHRpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdzogaXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3csXG5cdHJlbW92ZU1lc3NhZ2VTaG93bkluTWVzc2FnZVN0cmlwOiByZW1vdmVNZXNzYWdlU2hvd25Jbk1lc3NhZ2VTdHJpcCxcblx0Z2V0RmlsdGVyc0Zvck1lc3NhZ2VzOiBnZXRGaWx0ZXJzRm9yTWVzc2FnZXMsXG5cdHNob3dNZXNzYWdlc0luVUk6IHNob3dNZXNzYWdlc0luVUksXG5cdHNob3dNZXNzYWdlRGlhbG9nQ29udHJvbDogc2hvd01lc3NhZ2VEaWFsb2dDb250cm9sLFxuXHRzaG93TWVzc2FnZVRvYXN0OiBzaG93TWVzc2FnZVRvYXN0LFxuXHRzaG93TWVzc2FnZUJveENvbnRyb2w6IHNob3dNZXNzYWdlQm94Q29udHJvbCxcblx0Z2V0TWVzc2FnZXNGb3JDb250ZXh0OiBnZXRNZXNzYWdlc0ZvckNvbnRleHQsXG5cdGlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nOiBpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyxcblx0cmVtb3ZlQ29udGV4dE1lc3NhZ2VzZnJvbU1vZGVsOiByZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWwsXG5cdHJlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW1ldGVyRGlhbG9nOiByZW1vdmVNZXNzYWdlc0ZvckFjdGlvblBhcmFtZXRlckRpYWxvZyxcblx0c2V0R3JvdXBOYW1lT1BUYWJsZURpc3BsYXlNb2RlOiBzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUsXG5cdHVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlOiB1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZSxcblx0dXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGU6IHVwZGF0ZUhlYWRlck5hbWVGb3JNZXNzYWdlSW5PUFRhYmxlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXNzYWdlSGFuZGxpbmc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBK0NBLE1BQU1BLFVBQVUsR0FBR0MsSUFBSSxDQUFDRCxVQUFVO0VBQ2xDLElBQUlFLGlCQUFzRCxHQUFHLEVBQUU7RUFDL0QsSUFBSUMsYUFBcUI7RUFDekIsSUFBSUMsV0FBbUI7RUFDdkIsSUFBSUMsV0FBd0I7O0VBNEI1QjtFQUNBOztFQWlJQSxTQUFTQyx3QkFBd0JBLENBQUEsRUFBVztJQUMzQyxJQUFJQyxrQkFBMEI7O0lBRTlCO0lBQ0EsU0FBU0MsWUFBWUEsQ0FBQ0MsU0FBa0QsRUFBVTtNQUNqRixPQUFPQSxTQUFTLENBQUNDLFFBQVEsR0FDdEIsTUFBTSxHQUNORCxTQUFTLENBQUNDLFFBQVEsR0FDbEIsV0FBVyxHQUNYRCxTQUFTLENBQUNDLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ0osU0FBUyxDQUFDQyxRQUFRLENBQUNJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRUwsU0FBUyxDQUFDQyxRQUFRLENBQUNJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxH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
|
|
1566
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiTUxpYiIsImFSZXNvbHZlRnVuY3Rpb25zIiwiZGlhbG9nQ29udHJvbCIsIm9CYWNrQnV0dG9uIiwibWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0cmluZyIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJNZXNzYWdlVHlwZSIsIk5vbmUiLCJpTGVuZ3RoIiwibGVuZ3RoIiwib01lc3NhZ2VDb3VudCIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsImkiLCJnZXRUeXBlIiwiZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5Iiwib1Jlc291cmNlQnVuZGxlIiwiY29uY3VycmVudEVkaXRGbGFnIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0T2JqZWN0IiwiYk1lc3NhZ2VzTW9kaWZpZWQiLCJzRXRhZ01lc3NhZ2UiLCJvTWVzc2FnZSIsIm9UZWNobmljYWxEZXRhaWxzIiwiZ2V0VGVjaG5pY2FsRGV0YWlscyIsImh0dHBTdGF0dXMiLCJpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24iLCJnZXRUZXh0IiwicmVtb3ZlTWVzc2FnZXMiLCJzZXRNZXNzYWdlIiwic2V0VGFyZ2V0cyIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwibXNnVmlldyIsImdldENvbnRlbnQiLCJvTWVzc2FnZURpYWxvZ01vZGVsIiwiZ2V0TW9kZWwiLCJzZXREYXRhIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImdldFJldHJ5QWZ0ZXJNZXNzYWdlIiwiYk1lc3NhZ2VEaWFsb2ciLCJkTm93IiwiRGF0ZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsInNSZXRyeUFmdGVyTWVzc2FnZSIsInJldHJ5QWZ0ZXIiLCJkUmV0cnlBZnRlciIsIm9EYXRlRm9ybWF0IiwiZ2V0RnVsbFllYXIiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZVRpbWVJbnN0YW5jZSIsInBhdHRlcm4iLCJmb3JtYXQiLCJnZXRNb250aCIsImdldERhdGUiLCJoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncyIsImdldE1lc3NhZ2VzIiwidW5kZWZpbmVkIiwic29tZSIsIm1lc3NhZ2UiLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJiU3RyaWN0SGFuZGxpbmdGbG93IiwibXVsdGk0MTIiLCJvTWVzc2FnZVRlbXBsYXRlIiwiZGVzY3JpcHRpb25CaW5kaW5nIiwidGVjaG5pY2FsRGV0YWlsc0JpbmRpbmciLCJNZXNzYWdlSXRlbSIsImNvdW50ZXIiLCJwYXRoIiwidGl0bGUiLCJzdWJ0aXRsZSIsImxvbmd0ZXh0VXJsIiwidHlwZSIsImRlc2NyaXB0aW9uIiwibWFya3VwRGVzY3JpcHRpb24iLCJNZXNzYWdlVmlldyIsInNob3dEZXRhaWxzUGFnZUhlYWRlciIsIml0ZW1TZWxlY3QiLCJpdGVtcyIsInRlbXBsYXRlIiwic2V0R3JvdXBJdGVtcyIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZSIsInRlY2huaWNhbERldGFpbHMiLCJvcmlnaW5hbE1lc3NhZ2UiLCJnZXRDb2RlIiwiZ2V0VHJhbnNpdGlvbk1lc3NhZ2VzRm9yVUlEZWNpc2lvbiIsInNob3dCb3VuZFRyYW5zaXRpb24iLCJfY29udGV4dCIsInRyYW5zaXRpb25NZXNzYWdlcyIsImNvbmNhdCIsImV4ZWN1dGVPbkJlZm9yZVNob3dNZXNzYWdlcyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJtZXNzYWdlc1RvU2hvdyIsInVpRWxlbWVudFRvVXNlIiwiZm5HZXRNc2dTdWJ0aXRsZSIsInNob3dCb3VuZE1lc3NhZ2VzIiwic2hvd01lc3NhZ2VQYXJhbWV0ZXJzIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsInNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyIsImZpbHRlcmVkTWVzc2FnZXMiLCJmbkdldE1lc3NhZ2VTdWJ0aXRsZSIsImNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbiIsImNvbnRhaW5zQm91bmRUcmFuc2l0aW9uIiwiZ2V0VUlEZWNpc2lvbnMiLCJjdXN0b21NZXNzYWdlcyIsImNvbnRleHQiLCJhcmd1bWVudHMiLCJjb250cm9sIiwiYWN0aW9uTmFtZSIsInZpZXdUeXBlIiwic2hvd1N0YXRlTWVzc2FnZXMiLCJhZGRDdXN0b21NZXNzYWdlcyIsImNhbGwiLCJ1aURlY2lzaW9uSW50ZXJtaXR0ZW50IiwiZmlsdGVycyIsImdldEZpbHRlcnNGb3JNZXNzYWdlcyIsImdldE1lc3NhZ2VzVG9TaG93IiwicmVtb3ZlTWVzc2FnZVNob3duSW5NZXNzYWdlU3RyaXAiLCJwcm9jZXNzTWVzc2FnZXNGcm9tQ2hhbmdlc2V0RmFpbHVyZSIsImhhc0V0YWdNZXNzYWdlIiwibW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsIl9tZXNzYWdlVG9TaG93JGdldERlcyIsIl9tZXNzYWdlVG9TaG93JGdldERlczIiLCJtZXNzYWdlVG9TaG93IiwiZ2V0RGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvblVybCIsIm1lc3NhZ2VIYW5kbGluZyIsInVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUiLCJjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCIsInNob3dNZXNzYWdlc0luVUkiLCJ1aURlY2lzaW9ucyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2hvd01lc3NhZ2VUb2FzdCIsInNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCIsInNob3dNZXNzYWdlQm94Q29udHJvbCIsIkZpbHRlciIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJORSIsInZhbHVlMSIsImlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlciIsInRlc3QiLCJmbkNoZWNrQ29udHJvbElkSW5EaWFsb2ciLCJhQ29udHJvbElkcyIsImlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nIiwicHVzaCIsImNhc2VTZW5zaXRpdmUiLCJFUSIsImdldFRhcmdldHMiLCJhbmQiLCJfcmVmIiwicmV0TWVzc2FnZXMiLCJnZW5lcmljTXNncyIsIm5vbkdlbmVyaWNNc2dzIiwiZmUiLCJmZVRlY2huaWNhbERldGFpbHMiLCJjaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3IiLCJwcmVUZXh0IiwidGVjaERldGFpbHNGb3JOb25HZW5lcmljTWVzc2FnZSIsInNpbmdsZUVycm9yUHJlVGV4dCIsInNpbmdsZUdlbmVyaWNNZXNzYWdlSWQiLCJnZXRJZCIsImV4aXN0aW5nVGVjaERldGFpbHMiLCJzZXRUZWNobmljYWxEZXRhaWxzIiwibWVzc2FnZUNvZGUiLCJjb2RlIiwiTWVzc2FnZSIsInRleHQiLCJ0YXJnZXQiLCJwZXJzaXN0ZW50IiwiZ2V0U29ydGVyRm9yTWVzc2FnZXMiLCJTb3J0ZXIiLCJvYmoxIiwib2JqMiIsInJhbmtBIiwiZ2V0TWVzc2FnZVJhbmsiLCJyYW5rQiIsInRyYW5zaXN0aW9uTWVzc2FnZXMiLCJsaXN0QmluZGluZyIsImJpbmRMaXN0IiwiY3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibWVzc2FnZXMiLCJtYXAiLCJjdXJyZW50Q29udGV4dCIsIm9VbmlxdWVPYmoiLCJmaWx0ZXIiLCJvYmoiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0TWVzc2FnZSIsInVpRGVjaXNpb24iLCJydW5Ub1Rlc3QiLCJoaWdoZXN0UHJpb3JpdHkiLCJoaWdoZXN0UHJpb3JpdHlUZXh0IiwicmVzb3VyY2VCdW5kbGUiLCJzdHJpY3RIYW5kbGluZ0Zsb3ciLCJtZXNzYWdlRGlhbG9nTW9kZWwiLCJKU09OTW9kZWwiLCJtZXNzYWdlT2JqZWN0Iiwic29ydGVyIiwiZ2V0QmluZGluZyIsInNvcnQiLCJpc09wZW4iLCJEaWFsb2ciLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJlc2NhcGVIYW5kbGVyIiwiY29tcGxldGlvblByb21pc2UiLCJjdXN0b21IZWFkZXIiLCJCYXIiLCJjb250ZW50TWlkZGxlIiwiVGV4dCIsImNvbnRlbnRMZWZ0IiwiY29udGVudFdpZHRoIiwiY29udGVudEhlaWdodCIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiY2xvc2VPbk5hdmlnYXRpb24iLCJhZnRlckNsb3NlIiwiaXRlbSIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50Iiwic2V0QmVnaW5CdXR0b24iLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInJlc2V0Q2hhbmdlcyIsInJlZnJlc2giLCJFbXBoYXNpemVkIiwiZGVzdHJveUJlZ2luQnV0dG9uIiwiZ2V0SXRlbXMiLCJnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2ciLCJzZXRTdGF0ZSIsImdldEN1c3RvbUhlYWRlciIsImdldENvbnRlbnRNaWRkbGUiLCJzZXRUZXh0Iiwib3BlbiIsIm1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJmb3JtYXR0ZWRUZXh0U3RyaW5nIiwibWVzc2FnZUhlYWRlciIsImdldEFkZGl0aW9uYWxUZXh0IiwiZm9ybWF0dGVkVGV4dCIsIkZvcm1hdHRlZFRleHQiLCJodG1sVGV4dCIsInNob3dNZXNzYWdlQm94UGVyVHlwZSIsIm9uQ2xvc2UiLCJjbG9zZU1lc3NhZ2VCb3giLCJiaW5kIiwibWVzc2FnZVNob3duIiwiY2FsbEJhY2siLCJtZXNzYWdlc1RvUmVtb3ZlIiwiYWxsTXNncyIsImdldERhdGEiLCJnZW5lcmljTWVzc2FnZSIsImZpbmQiLCJtc2ciLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJ3YXJuaW5nIiwic3VjY2VzcyIsImluZm9ybWF0aW9uIiwiX3RyYW5zaXRpb25NZXNzYWdlcyIsImJvdW5kQ29udGV4dE1lc3NhZ2VzIiwiZ2V0UGF0aCIsImdldFBlcnNpc3RlbnQiLCJfdHJhbnNpdGlvbk1lc3NhZ2VzMiIsImFNb2RlbERhdGFBcnJheSIsInNBY3Rpb25OYW1lIiwiYU1vZGVsRGF0YSIsIl9hTW9kZWxEYXRhJHRhcmdldCIsIl9hTW9kZWxEYXRhJGdldENvZGUiLCJfYU1vZGVsRGF0YSR0YXJnZXQyIiwiZ2VuZXJhbEdyb3VwVGV4dCIsImlzQSIsInNldEdyb3VwTmFtZUxSVGFibGUiLCJzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlIiwiZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lIiwib0VsZW0iLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJfYU1vZGVsRGF0YSR0YXJnZXQzIiwic0VsZW1lQmluZGluZ1BhdGgiLCJpbmRleE9mIiwiYWxsUm93Q29udGV4dHMiLCJyb3dDb250ZXh0IiwiX2FNb2RlbERhdGEkdGFyZ2V0NCIsImluY2x1ZGVzIiwiY29udGV4dFBhdGgiLCJpZGVudGlmaWVyQ29sdW1uIiwiZ2V0UGFyZW50IiwiZ2V0SWRlbnRpZmllckNvbHVtbiIsInJvd0lkZW50aWZpZXIiLCJjb2x1bW5Qcm9wZXJ0eU5hbWUiLCJnZXRUYWJsZUNvbFByb3BlcnR5Iiwic1RhYmxlVGFyZ2V0Q29sTmFtZSIsImdldFRhYmxlQ29sSW5mbyIsImdldEhlYWRlciIsInVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlIiwibWRjVGFibGUiLCJ0YXJnZXRUYWJsZUluZm8iLCJnZXRDb250ZXh0cyIsIl9tZXNzYWdlJHRhcmdldCIsImNvbHVtbk5hbWVTdWZmaXgiLCJ1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZSIsInN1YnNlY3Rpb24iLCJoZWFkZXJOYW1lIiwiZ2V0SGVhZGVyVmlzaWJsZSIsInRhYmxlSGVhZGVyIiwiZ2V0VGl0bGUiLCJzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUiLCJ2aWV3Q29udGV4dCIsImdyb3VwTmFtZUlzR2VuZXJhbCIsInNldFNlY3Rpb25OYW1lSW5Hcm91cCIsImNoaWxkVGFibGVFbGVtZW50IiwiZmluZEVsZW1lbnRzIiwib0VsZW1lbnQiLCJfbWRjVGFibGUkZ2V0Um93QmluZGkiLCJfbWVzc2FnZSR0YXJnZXQyIiwiZ2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZSIsImZuQ2FsbGJhY2tTZXRHcm91cE5hbWUiLCJvVGFyZ2V0VGFibGVJbmZvIiwib1ZpZXdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvcExheW91dCIsImJJc0dlbmVyYWxHcm91cE5hbWUiLCJnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCIsIm9TZWN0aW9uIiwic3ViU2VjdGlvbnMiLCJnZXRTdWJTZWN0aW9ucyIsIm9TdWJTZWN0aW9uIiwiX2FNb2RlbERhdGEkdGFyZ2V0NSIsInNMYXN0QWN0aW9uVGV4dCIsIl9vYmokaGVhZGVyTmFtZSIsIl9vYmokaGVhZGVyTmFtZTIiLCJ0b1N0cmluZyIsImFNZXNzYWdlIiwib1RhYmxlIiwiZm5TZXRHcm91cE5hbWUiLCJnZXRUYWJsZUFuZFRhcmdldEluZm8iLCJzQ29udHJvbElkIiwiYklzQ3JlYXRpb25Sb3ciLCJvVGFibGVSb3dDb250ZXh0IiwiZ2V0Q29udHJvbElkcyIsInNJZCIsImlzQ29udHJvbEluVGFibGUiLCJvQ29udHJvbCIsIlVJNUVsZW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93Iiwic3ViVGl0bGUiLCJnZXRNZXNzYWdlU3VidGl0bGUiLCJvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMiLCJ0YWJsZVJvd0JpbmRpbmdDb250ZXh0cyIsInRhYmxlUm93Q29udGV4dCIsInRhYmxlVGFyZ2V0Q29sTmFtZSIsInRhYmxlIiwiaXNDcmVhdGlvblJvdyIsInRhcmdldGVkQ29udHJvbCIsIl90YWJsZSRnZXRQYXJlbnQiLCJtZXNzYWdlU3VidGl0bGUiLCJyb3dTdWJ0aXRsZVZhbHVlIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJ0YWJsZUNvbFByb3BlcnR5IiwiZ2V0VGFibGVDb2x1bW5WaXNpYmlsaXR5SW5mbyIsImNvbEZyb21UYWJsZVNldHRpbmdzIiwiZmV0Y2hDb2x1bW5JbmZvIiwiaXNJbmFjdGl2ZSIsImxhYmVsIiwidGFibGVDb2xCaW5kaW5nQ29udGV4dFRleHRBbm5vdGF0aW9uIiwiZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uIiwidGFibGVDb2xUZXh0QW5ub3RhdGlvblBhdGgiLCJ0YWJsZUNvbFRleHRBcnJhbmdlbWVudCIsImdldFZhbHVlIiwiX3RhYmxlJGdldFBhcmVudDIiLCJnZXRUYWJsZUNvbFZhbHVlIiwib0NvbHVtbkluZm8iLCJkZXRlcm1pbmVDb2x1bW5JbmZvIiwic0NvbHVtbkluZGljYXRvciIsInNDb2x1bW5WYWx1ZSIsImJpbmRpbmdDb250ZXh0Iiwia2V5Iiwib01vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJfb1RhYmxlJGdldFBhcmVudCIsInNDb2xOYW1lRnJvbU1lc3NhZ2VPYmoiLCJzcGxpdCIsInBvcCIsImdldEtleUNvbHVtbkluZm8iLCJvQ29sRnJvbVRhYmxlU2V0dGluZ3MiLCJhdmFpbGFiaWxpdHkiLCJvUGFyZW50Q29udHJvbCIsIl9vUGFyZW50Q29udHJvbCIsIl9vUGFyZW50Q29udHJvbDIiLCJfb1BhcmVudENvbnRyb2wzIiwic0hpZ2hlc3RQcmlvcml0eSIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwic1BhdGhUb0JlUmVtb3ZlZCIsImdldE1lc3NhZ2VzRnJvbU1lc3NhZ2VNb2RlbCIsIm9NZXNzYWdlTW9kZWwiLCJzdGFydHNXaXRoIiwib0NvbnRleHQiLCJiQm91bmRNZXNzYWdlcyIsImJUcmFuc2l0aW9uT25seSIsImFUcmFuc2l0aW9uTWVzc2FnZXMiLCJiYWNrZW5kTWVzc2FnZXMiLCJhTWVzc2FnZXNUb0JlRGVsZXRlZCIsInNldE1lc3NhZ2VTdWJ0aXRsZSIsImFDb250ZXh0cyIsImFkZGl0aW9uYWxUZXh0Iiwic3VidGl0bGVDb2x1bW4iLCJlcnJvckNvbnRleHQiLCJvT2JqZWN0UGFnZUxheW91dCIsImdldFNlY3Rpb25zIiwiZ2V0VmlzaWJsZSIsImdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uIiwic3ViU2VjdGlvbiIsIm9NZXNzYWdlT2JqZWN0IiwiZm5GaWx0ZXJVcG9uSWRzIiwiYSIsImIiLCJvQ29udGV4dFBhdGgiLCJmblJlZ0V4cGVzY2FwZSIsInMiLCJyZXBsYWNlIiwiX29UYWJsZSRnZXRCaW5kaW5nQ29uIiwiY29udGV4dFBhdGhUb0VzY2FwZSIsIlJlZ0V4cCIsInNUYWJsZVRhcmdldENvbFByb3BlcnR5Iiwib1RhYmxlVGFyZ2V0Q29sIiwiZ2V0Q29sdW1ucyIsImNvbHVtbiIsImdldFByb3BlcnR5S2V5Iiwib0N1c3RvbUNvbHVtbiIsImdldENvbnRyb2xEZWxlZ2F0ZSIsImdldENvbHVtbnNGb3IiLCJvQ29sdW1uIiwicHJvcGVydHlJbmZvcyIsIl9vVGFibGUkZ2V0Q29sdW1ucyRmaSIsIm5hbWUiLCJhQ29sdW1ucyIsImNvbHVtbkRlZmluaXRpb24iLCJfb0NvbHVtbiRwcm9wZXJ0eUluZm8iLCJwcm9wZXJ0eUluZm8iLCJiSXNUYWJsZVRhcmdldENvbFZpc2libGUiLCJvVGFibGVDb2xJbmZvIiwib0l0ZW0iLCJjcmVhdGVTZWN0aW9uR3JvdXBOYW1lIiwic2VjdGlvbiIsImJNdWx0aXBsZVN1YlNlY3Rpb25zIiwiYklzT3JwaGFuRWxlbWVudCIsImFFbGVtZW50cyIsIm9QYXJlbnRFbGVtZW50IiwiZ2V0TWVzc2FnZXNGb3JDb250ZXh0IiwiY29udHJvbElkcyIsImVycm9yRmllbGRDb250cm9sIiwiaW5kZXgiLCJJbmZpbml0eSIsImVycm9yQ29udHJvbElkIiwiY29udHJvbElkIiwiZmllbGRSYW5raW5EaWFsb2ciLCJfZXJyb3JGaWVsZENvbnRyb2wiLCJmb2N1cyIsInJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQiLCJtZXNzYWdlc0luTW9kZWwiLCJpc01lc3NhZ2VTdHJpcE1lc3NhZ2UiLCJpc1NpbmdsZVRhcmdldCIsImlzVGFyZ2V0TWF0Y2hpbmciLCJpc1RyYW5zaXRpb25NZXNzYWdlIiwicmVtb3ZlQ29udGV4dE1lc3NhZ2VzZnJvbU1vZGVsIiwiY29udGV4dHMiLCJfY29udGV4dHMkIiwicmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJfbWVzc2FnZXMiLCJfbWVzc2FnZXMyIiwibWVzc2FnZXNUb0JlUmVtb3ZlZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsibWVzc2FnZUhhbmRsaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbU1lc3NhZ2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZEFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb2x1bW5Qcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvZGVsZWdhdGVzL1RhYmxlRGVsZWdhdGVcIjtcbmltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBGb3JtYXR0ZWRUZXh0IGZyb20gXCJzYXAvbS9Gb3JtYXR0ZWRUZXh0XCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IE1lc3NhZ2VJdGVtIGZyb20gXCJzYXAvbS9NZXNzYWdlSXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgTWVzc2FnZVZpZXcgZnJvbSBcInNhcC9tL01lc3NhZ2VWaWV3XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL20vVGFibGVcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgTUxpYiBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBJY29uUG9vbCBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblBvb2xcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29sdW1uIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0NvbHVtblwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9tZXNzYWdlL01lc3NhZ2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgVUlUYWJsZSBmcm9tIFwic2FwL3VpL3RhYmxlL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uVGFibGVDb2x1bW4sIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIFRhYmxlQ29sdW1uIH0gZnJvbSBcIi4uLy4uL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5cbmNvbnN0IEJ1dHRvblR5cGUgPSBNTGliLkJ1dHRvblR5cGU7XG5sZXQgYVJlc29sdmVGdW5jdGlvbnM6ICgocGFyYW0xOiB2b2lkIHwgRGlhbG9nKSA9PiB2b2lkKVtdID0gW107XG5sZXQgZGlhbG9nQ29udHJvbDogRGlhbG9nO1xubGV0IG9CYWNrQnV0dG9uOiBCdXR0b247XG5sZXQgbWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlV2l0aEhlYWRlciA9IE1lc3NhZ2UgJiB7XG5cdGhlYWRlck5hbWU/OiBzdHJpbmc7XG5cdHRhcmdldD86IHN0cmluZztcblx0YWRkaXRpb25hbFRleHQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYXJnZXRUYWJsZUluZm9UeXBlID0ge1xuXHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W107XG5cdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHRhYmxlSGVhZGVyPzogc3RyaW5nO1xufTtcblxudHlwZSBDb2xJbmZvQW5kU3VidGl0bGVUeXBlID0ge1xuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlO1xuXHRzdWJUaXRsZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIENvbHVtbkluZm9UeXBlID0ge1xuXHRzQ29sdW1uVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c0NvbHVtbkluZGljYXRvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU3VwcG9ydGVkVUlFbGVtZW50ID0gXCJEaWFsb2dcIiB8IFwiQm94XCIgfCBcIlRvYXN0XCIgfCBcIk5vbmVcIjtcblxuLy8gRkUgcmVsYXRlZCB0ZWNobmljYWwgaW5mb3JtYXRpb24gdG8gYmUgc3RvcmVkIHdpdGggdGhlIG1lc3NhZ2UuXG4vLyBMaWtlLCB0aGlzIHdvdWxkIGJlIHVzZWQgdG8gc3RvcmUgcHJlLXRleHQgd2l0aCB0aGUgbWVzc2FnZSB3aGVuIGl0IGlzIHRoZSBvbmx5IG1lc3NhZ2UgdG8gYmUgc2hvd24gaW4gVUkuXG50eXBlIEZFTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSBvYmplY3QgJiB7XG5cdGZlPzoge1xuXHRcdGNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcj86IHN0cmluZztcblx0XHRzaW5nbGVFcnJvclByZVRleHQ/OiBzdHJpbmc7XG5cdFx0c2luZ2xlR2VuZXJpY01lc3NhZ2VJZD86IHN0cmluZztcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VVSURlY2lzaW9ucyA9IHtcblx0dWlFbGVtZW50VG9Vc2U6IFN1cHBvcnRlZFVJRWxlbWVudDtcblx0bWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VbXTtcblx0Y29udGFpbnNCb3VuZFRyYW5zaXRpb246IGJvb2xlYW47XG5cdGNvbnRleHROZWVkc0V0YWdSZWZyZXNoPzogT0RhdGFWNENvbnRleHQ7XG59O1xuXG5leHBvcnQgdHlwZSBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogKGJCb3VuZE1lc3NhZ2VzPzogYm9vbGVhbiwgYlRyYW5zaXRpb25Pbmx5PzogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gTWVzc2FnZVtdO1xuXHRoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpOiBib29sZWFuO1xuXHRnZXRVSURlY2lzaW9uczogKFxuXHRcdGN1c3RvbU1lc3NhZ2VzOiBDdXN0b21NZXNzYWdlW10gfCB1bmRlZmluZWQsXG5cdFx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0c2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdFx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0XHRjb250cm9sPzogQ29udHJvbCxcblx0XHRhY3Rpb25OYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0XHR2aWV3VHlwZT86IHN0cmluZyxcblx0XHRzaG93U3RhdGVNZXNzYWdlcz86IGJvb2xlYW5cblx0KSA9PiBNZXNzYWdlVUlEZWNpc2lvbnM7XG5cdHNob3dNZXNzYWdlc0luVUk6ICh1aURlY2lzaW9uOiBNZXNzYWdlVUlEZWNpc2lvbnMpID0+IFByb21pc2U8dm9pZD47XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6ICgpID0+IHZvaWQ7XG5cdG1vZGlmeUVUYWdNZXNzYWdlc09ubHk6IChvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBjb25jdXJyZW50RWRpdEZsYWc6IGJvb2xlYW4gfCB1bmRlZmluZWQpID0+IGJvb2xlYW47XG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykgPT4gdm9pZDtcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IChvTWVzc2FnZTogTWVzc2FnZSwgYk1lc3NhZ2VEaWFsb2c/OiB0cnVlKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogKFxuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuLFxuXHRcdGlzTXVsdGk0MTI/OiBib29sZWFuXG5cdCkgPT4ge1xuXHRcdG1lc3NhZ2VWaWV3OiBNZXNzYWdlVmlldztcblx0XHRvQmFja0J1dHRvbjogQnV0dG9uO1xuXHR9O1xuXHRzZXRNZXNzYWdlU3VidGl0bGU6IChvVGFibGU6IE1EQ1RhYmxlLCBhQ29udGV4dHM6IENvbnRleHRbXSwgbWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIpID0+IHZvaWQ7XG5cdGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0OiAob09iamVjdFBhZ2VMYXlvdXQ6IENvbnRyb2wpID0+IE9iamVjdFBhZ2VTZWN0aW9uW107XG5cdGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uOiAoc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlcikgPT4gVUk1RWxlbWVudFtdO1xuXHRmbkZpbHRlclVwb25JZHM6IChhQ29udHJvbElkczogc3RyaW5nW10sIG9JdGVtOiBVSTVFbGVtZW50KSA9PiBib29sZWFuO1xuXHRnZXRUYWJsZUFuZFRhcmdldEluZm86IChcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlcixcblx0XHRvRWxlbWVudDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCxcblx0XHRvUm93QmluZGluZzogQmluZGluZ1xuXHQpID0+IFRhcmdldFRhYmxlSW5mb1R5cGU7XG5cdGNyZWF0ZVNlY3Rpb25Hcm91cE5hbWU6IChcblx0XHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0XHRzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0XHRiTXVsdGlwbGVTdWJTZWN0aW9uczogYm9vbGVhbixcblx0XHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlLFxuXHRcdHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWxcblx0KSA9PiBzdHJpbmc7XG5cdGJJc09ycGhhbkVsZW1lbnQ6IChvRWxlbWVudDogVUk1RWxlbWVudCwgYUVsZW1lbnRzOiBVSTVFbGVtZW50W10pID0+IGJvb2xlYW47XG5cdGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZTogKHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHN0cmluZztcblx0Z2V0VGFibGVDb2x1bW5EYXRhQW5kU2V0U3VidGlsZTogKFxuXHRcdGFNZXNzYWdlOiBNZXNzYWdlV2l0aEhlYWRlcixcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRcdG9Sb3dCaW5kaW5nOiBCaW5kaW5nLFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwOiBib29sZWFuLFxuXHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IEZ1bmN0aW9uXG5cdCkgPT4gQ29sSW5mb0FuZFN1YnRpdGxlVHlwZTtcblx0Z2V0VGFibGVDb2xJbmZvOiAoXG5cdFx0b1RhYmxlOiBNRENUYWJsZSxcblx0XHRzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nXG5cdCkgPT4geyBzVGFibGVUYXJnZXRDb2xOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7IHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblx0Z2V0VGFibGVDb2xQcm9wZXJ0eTogKG9UYWJsZTogQ29udHJvbCwgb01lc3NhZ2VPYmplY3Q6IE1lc3NhZ2VXaXRoSGVhZGVyLCBvQ29udGV4dFBhdGg/OiBzdHJpbmcgfCBSZWdFeHApID0+IHN0cmluZztcblx0Z2V0TWVzc2FnZVN1YnRpdGxlOiAoXG5cdFx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0b1RhYmxlUm93QmluZGluZ0NvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdHNUYWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRcdGJJc0NyZWF0aW9uUm93OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRcdG9UYXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG5cdCkgPT4gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblx0ZGV0ZXJtaW5lQ29sdW1uSW5mbzogKG9Db2xGcm9tVGFibGVTZXR0aW5nczogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpID0+IENvbHVtbkluZm9UeXBlO1xuXHRmZXRjaENvbHVtbkluZm86IChvTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIG9UYWJsZTogTURDVGFibGUpID0+IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkO1xuXHRnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IChcblx0XHR0YWJsZTogTURDVGFibGUsXG5cdFx0dGFibGVSb3dDb250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHR0YWJsZUNvbFByb3BlcnR5OiBUYWJsZUNvbHVtblByb3BlcnRpZXNcblx0KSA9PiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZDtcblx0Z2V0TWVzc2FnZVJhbms6IChvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBudW1iZXI7XG5cdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IChhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGJJc0dlbmVyYWxHcm91cE5hbWU/OiBib29sZWFuKSA9PiB2b2lkO1xuXHRzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlOiAoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIsIHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnRyb2w6IFZpZXcpID0+IHZvaWQ7XG5cdHVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWU6IChcblx0XHRtZXNzYWdlc1RvU2hvdzogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0XHRjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLFxuXHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmlld1R5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXHQpID0+IHZvaWQ7XG5cdHNldEdyb3VwTmFtZUxSVGFibGU6IChjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkLCBhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcblx0aXNDb250cm9sSW5UYWJsZTogKG9UYWJsZTogTURDVGFibGUsIHNDb250cm9sSWQ6IHN0cmluZykgPT4gVUk1RWxlbWVudFtdIHwgYm9vbGVhbjtcblx0aXNDb250cm9sUGFydE9mQ3JlYXRpb25Sb3c6IChvQ29udHJvbDogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbjtcblx0cmVtb3ZlTWVzc2FnZVNob3duSW5NZXNzYWdlU3RyaXA6ICh0cmFuc2llbnRNZXNzYWdlczogTWVzc2FnZVtdLCBjb250ZXh0OiBDb250ZXh0KSA9PiBNZXNzYWdlW107XG5cdGdldEZpbHRlcnNGb3JNZXNzYWdlczogKHNob3dCb3VuZFRyYW5zaXRpb246IGJvb2xlYW4sIHNob3dTdGF0ZU1lc3NhZ2VzPzogYm9vbGVhbikgPT4gRmlsdGVyW107XG5cdHNob3dNZXNzYWdlVG9hc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2w6ICh1aURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zLCBydW5Ub1Rlc3Q/OiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQgfCBEaWFsb2c+O1xuXHRzaG93TWVzc2FnZUJveENvbnRyb2w6ICh1aURlY2lzaW9uczogTWVzc2FnZVVJRGVjaXNpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHRnZXRNZXNzYWdlc0ZvckNvbnRleHQ6IChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCkgPT4gTWVzc2FnZVtdO1xuXHRpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZzogKGFDb250cm9sSWRzOiBzdHJpbmdbXSkgPT4gYm9vbGVhbjtcblx0cmVtb3ZlQ29udGV4dE1lc3NhZ2VzZnJvbU1vZGVsOiAobWVzc2FnZXM/OiBNZXNzYWdlW10sIGNvbnRleHQ/OiBDb250ZXh0W10pID0+IHZvaWQ7XG5cdHJlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW1ldGVyRGlhbG9nOiAoTWVzc2FnZXM6IE1lc3NhZ2VbXSkgPT4gTWVzc2FnZVtdO1xuXHRzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUoXG5cdFx0c3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdFx0bWRjVGFibGU6IE1EQ1RhYmxlLFxuXHRcdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHRcdHZpZXdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0XHRncm91cE5hbWVJc0dlbmVyYWw6IGJvb2xlYW4sXG5cdFx0YWN0aW9uTmFtZT86IHN0cmluZ1xuXHQpOiBib29sZWFuO1xuXHR1cGRhdGVBZGR0aW9uYWxUZXh0Rm9yTWVzc2FnZUluT1BUYWJsZShtZGNUYWJsZTogTURDVGFibGUsIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCB0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGUpOiB2b2lkO1xuXHR1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZShcblx0XHRzdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbixcblx0XHRtZGNUYWJsZTogTURDVGFibGUsXG5cdFx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdFx0dGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlXG5cdCk6IHZvaWQ7XG5cdGNsb3NlTWVzc2FnZUJveChtZXNzYWdlU2hvd246IE1lc3NhZ2VXaXRoSGVhZGVyLCBjYWxsQmFjazogKHZhbHVlOiB2b2lkKSA9PiB2b2lkLCBzaW5nbGVHZW5lcmljTWVzc2FnZUlkOiBzdHJpbmcpOiB2b2lkO1xuXHRyZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0OiAob0NvbnRleHQ6IENvbnRleHQpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBmbkZvcm1hdFRlY2huaWNhbERldGFpbHMoKTogc3RyaW5nIHtcblx0bGV0IHNQcmV2aW91c0dyb3VwTmFtZTogc3RyaW5nO1xuXG5cdC8vIEluc2VydCB0ZWNobmljYWwgZGV0YWlsIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnREZXRhaWwob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pOiBzdHJpbmcge1xuXHRcdHJldHVybiBvUHJvcGVydHkucHJvcGVydHlcblx0XHRcdD8gXCIoICR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gPyAoXCI8cD4nICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkuc3Vic3RyaW5nKE1hdGgubWF4KG9Qcm9wZXJ0eS5wcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi9cIiksIG9Qcm9wZXJ0eS5wcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi5cIikpICsgMSkgK1xuXHRcdFx0XHRcdCcgOiBcIiArICcgK1xuXHRcdFx0XHRcdFwiJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSArIFwiPC9wPlwiKSA6IFwiXCIgKSdcblx0XHRcdDogXCJcIjtcblx0fVxuXHQvLyBJbnNlcnQgZ3JvdXBuYW1lIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pOiBzdHJpbmcge1xuXHRcdGxldCBzSFRNTCA9IFwiXCI7XG5cdFx0aWYgKG9Qcm9wZXJ0eS5ncm91cE5hbWUgJiYgb1Byb3BlcnR5LnByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5ncm91cE5hbWUgIT09IHNQcmV2aW91c0dyb3VwTmFtZSkge1xuXHRcdFx0c0hUTUwgKz0gXCIoICR7XCIgKyBvUHJvcGVydHkucHJvcGVydHkgKyAnfSA/IFwiPGJyPjxoMz4nICsgb1Byb3BlcnR5Lmdyb3VwTmFtZSArICc8L2gzPlwiIDogXCJcIiApICsgJztcblx0XHRcdHNQcmV2aW91c0dyb3VwTmFtZSA9IG9Qcm9wZXJ0eS5ncm91cE5hbWU7XG5cdFx0fVxuXHRcdHJldHVybiBzSFRNTDtcblx0fVxuXG5cdC8vIExpc3Qgb2YgdGVjaG5pY2FsIGRldGFpbHMgdG8gYmUgc2hvd25cblx0ZnVuY3Rpb24gZ2V0UGF0aHMoKTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9W10ge1xuXHRcdGNvbnN0IHNURCA9IFwidGVjaG5pY2FsRGV0YWlsc1wiOyAvLyBuYW1lIG9mIHByb3BlcnR5IGluIG1lc3NhZ2UgbW9kZWwgZGF0YSBmb3IgdGVjaG5pY2FsIGRldGFpbHNcblx0XHRyZXR1cm4gW1xuXHRcdFx0eyBncm91cE5hbWU6IFwiXCIsIHByb3BlcnR5OiBgJHtzVER9L3N0YXR1c2AgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIlwiLCBwcm9wZXJ0eTogYCR7c1REfS9zdGF0dXNUZXh0YCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL0NvbXBvbmVudElkYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiQXBwbGljYXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VJZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlUmVwb3NpdG9yeWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkFwcGxpY2F0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlVmVyc2lvbmAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0FuYWx5c2lzYCB9LFxuXHRcdFx0eyBncm91cE5hbWU6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vTm90ZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0RldGFpbGVkTm90ZWAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXhjZXB0aW9uQ2F0ZWdvcnlgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJFcnJvclJlc29sdXRpb25cIiwgcHJvcGVydHk6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLlRpbWVTdGFtcGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIkVycm9yUmVzb2x1dGlvblwiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVHJhbnNhY3Rpb25JZGAgfSxcblx0XHRcdHsgZ3JvdXBOYW1lOiBcIk1lc3NhZ2VzXCIsIHByb3BlcnR5OiBgJHtzVER9L2Vycm9yL2NvZGVgIH0sXG5cdFx0XHR7IGdyb3VwTmFtZTogXCJNZXNzYWdlc1wiLCBwcm9wZXJ0eTogYCR7c1REfS9lcnJvci9tZXNzYWdlYCB9XG5cdFx0XTtcblx0fVxuXG5cdGxldCBzSFRNTCA9IFwiT2JqZWN0LmtleXMoXCIgKyBcIiR7dGVjaG5pY2FsRGV0YWlsc31cIiArICcpLmxlbmd0aCA+IDAgPyBcIjxoMj5UZWNobmljYWwgRGV0YWlsczwvaDI+XCIgOiBcIlwiICc7XG5cdGdldFBhdGhzKCkuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5OiB7IGdyb3VwTmFtZTogc3RyaW5nOyBwcm9wZXJ0eTogc3RyaW5nIH0pIHtcblx0XHRzSFRNTCA9IGAke3NIVE1MICsgaW5zZXJ0R3JvdXBOYW1lKG9Qcm9wZXJ0eSl9JHtpbnNlcnREZXRhaWwob1Byb3BlcnR5KX0gKyBgO1xuXHR9KTtcblx0cmV0dXJuIHNIVE1MO1xufVxuZnVuY3Rpb24gZm5Gb3JtYXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuXHRyZXR1cm4gXCIoJHtcIiArIFwiZGVzY3JpcHRpb259ID8gKCR7XCIgKyAnZGVzY3JpcHRpb259KSA6IFwiXCIpJztcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIHR5cGUoRXJyb3IvV2FybmluZy9TdWNjZXNzL0luZm9ybWF0aW9uKSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXMuXG4gKiBAcGFyYW0gW2FNZXNzYWdlc10gTWVzc2FnZXMgbGlzdFxuICogQHJldHVybnMgSGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIGZyb20gdGhlIGF2YWlsYWJsZSBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkoYU1lc3NhZ2VzOiBNZXNzYWdlSXRlbVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgc01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGNvbnN0IGlMZW5ndGggPSBhTWVzc2FnZXMubGVuZ3RoO1xuXHRjb25zdCBvTWVzc2FnZUNvdW50ID0geyBFcnJvcjogMCwgV2FybmluZzogMCwgU3VjY2VzczogMCwgSW5mb3JtYXRpb246IDAgfTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGlMZW5ndGg7IGkrKykge1xuXHRcdCsrb01lc3NhZ2VDb3VudFthTWVzc2FnZXNbaV0uZ2V0VHlwZSgpIGFzIGtleW9mIHR5cGVvZiBvTWVzc2FnZUNvdW50XTtcblx0fVxuXHRpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5FcnJvcl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuV2FybmluZ10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5TdWNjZXNzXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb247XG5cdH1cblx0cmV0dXJuIHNNZXNzYWdlUHJpb3JpdHk7XG59XG4vLyBmdW5jdGlvbiB3aGljaCBtb2RpZnkgZS1UYWcgbWVzc2FnZXMgb25seS5cbi8vIHJldHVybnMgOiB0cnVlLCBpZiBhbnkgZS1UYWcgbWVzc2FnZSBpcyBtb2RpZmllZCwgb3RoZXJ3aXNlIGZhbHNlLlxuZnVuY3Rpb24gZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRjb25zdCBhTWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0T2JqZWN0KFwiL1wiKTtcblx0bGV0IGJNZXNzYWdlc01vZGlmaWVkID0gZmFsc2U7XG5cdGxldCBzRXRhZ01lc3NhZ2UgPSBcIlwiO1xuXHRhTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UsIGk6IG51bWJlcikge1xuXHRcdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscyAmJiAob01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpIGFzIE1lc3NhZ2VUZWNobmljYWxEZXRhaWxzKTtcblx0XHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNDEyICYmIG9UZWNobmljYWxEZXRhaWxzLmlzQ29uY3VycmVudE1vZGlmaWNhdGlvbikge1xuXHRcdFx0aWYgKGNvbmN1cnJlbnRFZGl0RmxhZykge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPVxuXHRcdFx0XHRcdHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNfQ09OQ1VSUkVOVF9NT0RJRklDQVRJT05cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPSBzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTXCIpO1xuXHRcdFx0fVxuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1tpXSk7XG5cdFx0XHRvTWVzc2FnZS5zZXRNZXNzYWdlKHNFdGFnTWVzc2FnZSk7XG5cdFx0XHRvTWVzc2FnZS5zZXRUYXJnZXRzKFtcIlwiXSk7XG5cdFx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdFx0Yk1lc3NhZ2VzTW9kaWZpZWQgPSB0cnVlO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBiTWVzc2FnZXNNb2RpZmllZDtcbn1cbi8vIERpYWxvZyBjbG9zZSBIYW5kbGluZ1xuZnVuY3Rpb24gZGlhbG9nQ2xvc2VIYW5kbGVyKCk6IHZvaWQge1xuXHRkaWFsb2dDb250cm9sLmNsb3NlKCk7XG5cdG9CYWNrQnV0dG9uLnNldFZpc2libGUoZmFsc2UpO1xuXHRjb25zdCBtc2dWaWV3ID0gZGlhbG9nQ29udHJvbC5nZXRDb250ZW50KClbMF0gYXMgTWVzc2FnZVZpZXc7XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSBtc2dWaWV3LmdldE1vZGVsKCkgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkO1xuXHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdH1cblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xufVxuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2U6IE1lc3NhZ2UsIGJNZXNzYWdlRGlhbG9nPzogYm9vbGVhbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGROb3cgPSBuZXcgRGF0ZSgpO1xuXHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0bGV0IHNSZXRyeUFmdGVyTWVzc2FnZTtcblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0Y29uc3QgZFJldHJ5QWZ0ZXIgPSBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyO1xuXHRcdGxldCBvRGF0ZUZvcm1hdDtcblx0XHRpZiAoZE5vdy5nZXRGdWxsWWVhcigpICE9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL2RpZmZlcmVudCB5ZWFyc1xuXHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQsIHl5eXkgJ2F0JyBoaDptbSBhXCJcblx0XHRcdH0pO1xuXHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0fSBlbHNlIGlmIChkTm93LmdldEZ1bGxZZWFyKCkgPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9zYW1lIHllYXJcblx0XHRcdGlmIChiTWVzc2FnZURpYWxvZykge1xuXHRcdFx0XHQvL2xlc3MgdGhhbiAyIG1pblxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBgJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfVElUTEVcIil9ICR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0RFU0NcIlxuXHRcdFx0XHQpfWA7XG5cdFx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0TW9udGgoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0TW9udGgoKSB8fCBkTm93LmdldERhdGUoKSAhPT0gZFJldHJ5QWZ0ZXIuZ2V0RGF0ZSgpKSB7XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQgJ2F0JyBoaDptbSBhXCJcblx0XHRcdFx0fSk7IC8vZGlmZmVyZW50IG1vbnRocyBvciBkaWZmZXJlbnQgZGF5cyBvZiBzYW1lIG1vbnRoXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUlwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9zYW1lIGRheVxuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJoaDptbSBhXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9EQVlcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmICFvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX05PX1JFVFJZX0FGVEVSXCIpO1xuXHR9XG5cdHJldHVybiBzUmV0cnlBZnRlck1lc3NhZ2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZXJlIGFyZSBhbnkgd2FybmluZyBvciBlcnJvciBtZXNzYWdlcyhib3VuZCBhbmQgdW5ib3VuZCkuLlxuICogQHJldHVybnMgQm9vbGVhbiBpbmRpY2F0aW5nIGV4aXN0ZW5jZSBvZiBtZXNzYWdlc1xuICovXG5mdW5jdGlvbiBoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5ncygpOiBib29sZWFuIHtcblx0cmV0dXJuIFsuLi5nZXRNZXNzYWdlcyh1bmRlZmluZWQsIHRydWUpLCAuLi5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKV0uc29tZShmdW5jdGlvbiAobWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdHJldHVybiBtZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiIHx8IG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBcIldhcm5pbmdcIjtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyhcblx0b01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLFxuXHRiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuLFxuXHRtdWx0aTQxMj86IGJvb2xlYW5cbik6IHtcblx0bWVzc2FnZVZpZXc6IE1lc3NhZ2VWaWV3O1xuXHRvQmFja0J1dHRvbjogQnV0dG9uO1xufSB7XG5cdGxldCBvTWVzc2FnZVRlbXBsYXRlOiBNZXNzYWdlSXRlbTtcblx0aWYgKCFiU3RyaWN0SGFuZGxpbmdGbG93KSB7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb25CaW5kaW5nID0gJ3s9ICR7ZGVzY3JpcHRpb259ID8gXCI8aHRtbD48Ym9keT5cIiArICcgKyBmbkZvcm1hdERlc2NyaXB0aW9uKCkgKyAnICsgXCI8L2h0bWw+PC9ib2R5PlwiIDogXCJcIiB9Jztcblx0XHRjb25zdCB0ZWNobmljYWxEZXRhaWxzQmluZGluZyA9XG5cdFx0XHQnez0gJHt0ZWNobmljYWxEZXRhaWxzfSA/IFwiPGh0bWw+PGJvZHk+XCIgKyAnICsgZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCkgKyAnICsgXCI8L2h0bWw+PC9ib2R5PlwiIDogXCJcIiB9Jztcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0Y291bnRlcjogeyBwYXRoOiBcImNvdW50ZXJcIiB9LFxuXHRcdFx0dGl0bGU6IFwie21lc3NhZ2V9XCIsXG5cdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCIsXG5cdFx0XHR0eXBlOiB7IHBhdGg6IFwidHlwZVwiIH0sXG5cdFx0XHRncm91cE5hbWU6IFwie2hlYWRlck5hbWV9XCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25CaW5kaW5nICsgdGVjaG5pY2FsRGV0YWlsc0JpbmRpbmcsXG5cdFx0XHRtYXJrdXBEZXNjcmlwdGlvbjogdHJ1ZVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKG11bHRpNDEyKSB7XG5cdFx0b01lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBNZXNzYWdlSXRlbSh1bmRlZmluZWQsIHtcblx0XHRcdGNvdW50ZXI6IHsgcGF0aDogXCJjb3VudGVyXCIgfSxcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0c3VidGl0bGU6IFwie2FkZGl0aW9uYWxUZXh0fVwiLFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0ZGVzY3JpcHRpb246IFwie2Rlc2NyaXB0aW9ufVwiLFxuXHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHtcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0bG9uZ3RleHRVcmw6IFwie2Rlc2NyaXB0aW9uVXJsfVwiXG5cdFx0fSk7XG5cdH1cblx0bWVzc2FnZVZpZXcgPSBuZXcgTWVzc2FnZVZpZXcoe1xuXHRcdHNob3dEZXRhaWxzUGFnZUhlYWRlcjogZmFsc2UsXG5cdFx0aXRlbVNlbGVjdDogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHR9LFxuXHRcdGl0ZW1zOiB7XG5cdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdHRlbXBsYXRlOiBvTWVzc2FnZVRlbXBsYXRlLFxuXHRcdFx0bGVuZ3RoOiA5OTk5XG5cdFx0fVxuXHR9KTtcblx0bWVzc2FnZVZpZXcuc2V0R3JvdXBJdGVtcyh0cnVlKTtcblx0b0JhY2tCdXR0b24gPVxuXHRcdG9CYWNrQnV0dG9uIHx8XG5cdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRpY29uOiBJY29uUG9vbC5nZXRJY29uVVJJKFwibmF2LWJhY2tcIiksXG5cdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdHByZXNzOiBmdW5jdGlvbiAodGhpczogQnV0dG9uKTogdm9pZCB7XG5cdFx0XHRcdG1lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHQvLyBVcGRhdGUgcHJvcGVyIEVUYWcgTWlzbWF0Y2ggZXJyb3Jcblx0bWVzc2FnZVZpZXcuc2V0TW9kZWwob01lc3NhZ2VEaWFsb2dNb2RlbCk7XG5cdHJldHVybiB7XG5cdFx0bWVzc2FnZVZpZXcsXG5cdFx0b0JhY2tCdXR0b25cblx0fTtcbn1cblxuZXhwb3J0IHR5cGUgU2hvd01lc3NhZ2VQYXJhbWV0ZXJzID0ge1xuXHRzaG93TWVzc2FnZUJveD86IGJvb2xlYW47XG5cdHNob3dNZXNzYWdlRGlhbG9nPzogYm9vbGVhbjtcblx0c2hvd0NoYW5nZVNldEVycm9yRGlhbG9nPzogYm9vbGVhbjtcblx0ZmlsdGVyZWRNZXNzYWdlcz86IE1lc3NhZ2VbXTtcblx0Zm5HZXRNZXNzYWdlU3VidGl0bGU/OiBGdW5jdGlvbjtcblx0Y29udGFpbnNCb3VuZFRyYW5zaXN0aW9uPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIGlzTm9uVGVjaG5pY2FsTWVzc2FnZShtZXNzYWdlOiBNZXNzYWdlKTogYm9vbGVhbiB7XG5cdGNvbnN0IHRlY2huaWNhbERldGFpbHMgPSBtZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0aWYgKFxuXHRcdCh0ZWNobmljYWxEZXRhaWxzICYmXG5cdFx0XHQoKHRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlICE9PSB1bmRlZmluZWQgJiYgdGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UgIT09IG51bGwpIHx8XG5cdFx0XHRcdCh0ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IHVuZGVmaW5lZCAmJiB0ZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgIT09IG51bGwpKSkgfHxcblx0XHRtZXNzYWdlLmdldENvZGUoKVxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogR2V0IHRyYW5zaXRpb24gbWVzc2FnZXMgZm9yIGNyZWF0aW5nIHRoZSBVSSBkZWNpc2lvbiB0byBzaG93IG1lc3NhZ2VzLlxuICogQHBhcmFtIHNob3dCb3VuZFRyYW5zaXRpb24gU2hvdWxkIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcGFyYW0gX2NvbnRleHQgQmluZGluZyBjb250ZXh0IG9mIHRoZSBwYWdlLlxuICogQHJldHVybnMgVHJhbnNpdGlvbiBtZXNzYWdlcyByZWxldmFudCB0byBzaG93IGluIFVJLlxuICovXG5mdW5jdGlvbiBnZXRUcmFuc2l0aW9uTWVzc2FnZXNGb3JVSURlY2lzaW9uKHRoaXM6IG1lc3NhZ2VIYW5kbGluZ1R5cGUsIHNob3dCb3VuZFRyYW5zaXRpb246IGJvb2xlYW4sIF9jb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IE1lc3NhZ2VbXSB7XG5cdGxldCB0cmFuc2l0aW9uTWVzc2FnZXMgPSB0aGlzLmdldE1lc3NhZ2VzKCk7XG5cdGlmIChzaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0Ly9ib3VuZCBUcmFuc2lzdGlvbiBNZXNzYWdlc1xuXHRcdHRyYW5zaXRpb25NZXNzYWdlcyA9IHRyYW5zaXRpb25NZXNzYWdlcy5jb25jYXQodGhpcy5nZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7XG5cdH1cblx0cmV0dXJuIHRyYW5zaXRpb25NZXNzYWdlcztcbn1cblxuLyoqXG4gKiBFeGVjdXRlICdvbkJlZm9yZVNob3dNZXNzYWdlcycgY2FsbGJhY2sgdG8gbGV0IHRoZSBjYWxsZXIgaW5mbHVlbmNlIHRoZSBVSSBkZWNpc2lvbiB0byBzaG93IG1lc3NhZ2VzLlxuICogQHBhcmFtIHRyYW5zaXRpb25NZXNzYWdlcyBUcmFuc2l0aW9uIG1lc3NhZ2VzLlxuICogQHBhcmFtIG9uQmVmb3JlU2hvd01lc3NhZ2UgQ2FsbGJhY2suXG4gKiBAcmV0dXJucyBTaG93TWVzc2FnZVBhcmFtZXRlcnMgSW5mcm9tYXRpb24gdG8gY2hhbmdlIFVJIGRlY2lzaW9uIGJhc2VkIG9uIG9uQmVmb3JlU2hvd01lc3NhZ2VzIGNhbGxiYWNrIGltcGxlbWVudGF0aW9uLlxuICovXG5mdW5jdGlvbiBleGVjdXRlT25CZWZvcmVTaG93TWVzc2FnZXMoXG5cdHRyYW5zaXRpb25NZXNzYWdlczogTWVzc2FnZVdpdGhIZWFkZXJbXSxcblx0b25CZWZvcmVTaG93TWVzc2FnZT86IChtZXNzYWdlczogTWVzc2FnZVtdLCBzaG93TWVzc2FnZVBhcmFtZXRlcnM6IFNob3dNZXNzYWdlUGFyYW1ldGVycykgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzXG4pOiB7XG5cdHVpRWxlbWVudFRvVXNlOiBTdXBwb3J0ZWRVSUVsZW1lbnQ7XG5cdG1lc3NhZ2VzVG9TaG93OiBNZXNzYWdlV2l0aEhlYWRlcltdO1xuXHRmbkdldE1lc3NhZ2VTdWJ0aXRsZT86IEZ1bmN0aW9uO1xuXHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2c/OiBib29sZWFuO1xuXHRjb250YWluc0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW47XG59IHtcblx0bGV0IG1lc3NhZ2VzVG9TaG93ID0gWy4uLnRyYW5zaXRpb25NZXNzYWdlc107XG5cdGxldCB1aUVsZW1lbnRUb1VzZTogU3VwcG9ydGVkVUlFbGVtZW50ID1cblx0XHR0cmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIHRyYW5zaXRpb25NZXNzYWdlc1swXS5nZXRDb2RlKCkgPT09IFwiNTAzXCIgPyBcIkJveFwiIDogXCJEaWFsb2dcIjtcblx0bGV0IGZuR2V0TXNnU3VidGl0bGU6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuXHRsZXQgc2hvd0JvdW5kTWVzc2FnZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0aWYgKG9uQmVmb3JlU2hvd01lc3NhZ2UpIHtcblx0XHQvLyBUaGUgY2FsbGJhY2sgb25CZWZvcmVTaG93TWVzc2FnZSBhbHRlcnMgdGhlIFVJRWxlbWVudCB0byB1c2UgaW4gYSBkaWZmZXJlbnQgZm9ybWF0KHNob3dNZXNzYWdlRGlhbG9nIGFuZCBzaG93TWVzc2FnZUJveCkuXG5cdFx0Y29uc3Qgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMgPSB7XG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZzogdWlFbGVtZW50VG9Vc2UgPT09IFwiRGlhbG9nXCIsXG5cdFx0XHRzaG93TWVzc2FnZUJveDogdWlFbGVtZW50VG9Vc2UgPT09IFwiQm94XCJcblx0XHR9O1xuXHRcdGNvbnN0IHtcblx0XHRcdHNob3dNZXNzYWdlQm94LFxuXHRcdFx0c2hvd01lc3NhZ2VEaWFsb2csXG5cdFx0XHRzaG93Q2hhbmdlU2V0RXJyb3JEaWFsb2csXG5cdFx0XHRmaWx0ZXJlZE1lc3NhZ2VzLFxuXHRcdFx0Zm5HZXRNZXNzYWdlU3VidGl0bGUsXG5cdFx0XHRjb250YWluc0JvdW5kVHJhbnNpc3Rpb25cblx0XHR9ID0gb25CZWZvcmVTaG93TWVzc2FnZSh0cmFuc2l0aW9uTWVzc2FnZXMsIHNob3dNZXNzYWdlUGFyYW1ldGVycyk7XG5cdFx0aWYgKHNob3dNZXNzYWdlQm94ID09PSB0cnVlKSB7XG5cdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiQm94XCI7XG5cdFx0fSBlbHNlIGlmIChzaG93TWVzc2FnZURpYWxvZyA9PT0gdHJ1ZSkge1xuXHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIkRpYWxvZ1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR1aUVsZW1lbnRUb1VzZSA9IFwiTm9uZVwiO1xuXHRcdH1cblx0XHRzaG93Qm91bmRNZXNzYWdlcyA9IGNvbnRhaW5zQm91bmRUcmFuc2lzdGlvbjtcblx0XHRmbkdldE1zZ1N1YnRpdGxlID0gZm5HZXRNZXNzYWdlU3VidGl0bGU7XG5cdFx0aWYgKHNob3dDaGFuZ2VTZXRFcnJvckRpYWxvZyB8fCBjb250YWluc0JvdW5kVHJhbnNpc3Rpb24gPT09IGZhbHNlKSB7XG5cdFx0XHRtZXNzYWdlc1RvU2hvdyA9IGZpbHRlcmVkTWVzc2FnZXMgPz8gW107XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR1aUVsZW1lbnRUb1VzZSxcblx0XHRtZXNzYWdlc1RvU2hvdyxcblx0XHRmbkdldE1lc3NhZ2VTdWJ0aXRsZTogZm5HZXRNc2dTdWJ0aXRsZSxcblx0XHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogc2hvd0JvdW5kTWVzc2FnZXNcblx0fTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgVUkgZGVjaXNpb25zIGZvciBzaG93aW5nIG1lc3NhZ2VzLlxuICpcbiAqIFRoZXNlIHNoYWxsIGNvbnRhaW4gdGhlIG1lc3NhZ2VzIHRvIHNob3cgYW5kIHRoZSBVSSBlbGVtZW50IHRvIHVzZS5cbiAqIEl0IHdvdWxkIGFsc28gaG9sZCBpbmZvcm1hdGlvbiBmb3IgYWZ0ZXIgcHJvY2VzcyBsaWtlLi5cbiAqIDEuIHJlZnJlc2ggY29udGV4dCBkdWUgdG8gZXRhZyBtaXNtYXRjaC5cbiAqIDIuIGRvIHdlIHNob3cgYm91bmQgbWVzc2FnZXMgYW5kIGhlbmNlIGNsZWFyIHRoZW0gYWZ0ZXIgd2Ugc2hvdyB0aGUgVUkgZWxlbWVudC5cbiAqIEBwYXJhbSBjdXN0b21NZXNzYWdlcyBDdXN0b20gbWVzc2FnZXMgdG8gYWRkIHRvIG1lc3NhZ2UgbW9kZWwgYW5kIHNob3cuXG4gKiBAcGFyYW0gY29udGV4dCBCaW5kaW5nIGNvbnRleHQgb2YgdGhlIHBhZ2UuXG4gKiBAcGFyYW0gc2hvd0JvdW5kVHJhbnNpdGlvbiBTaG91bGQgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEBwYXJhbSBjb25jdXJyZW50RWRpdEZsYWcgSXMgdGhpcyBhIGNvbmN1cnJlbnQgZWRpdCBzY2VuYXJpby5cbiAqIEBwYXJhbSBjb250cm9sIFNvdXJjZSBjb250cm9sLlxuICogQHBhcmFtIGFjdGlvbk5hbWUgTmFtZSBvZiB0aGUgYWN0aW9uIHdob3NlIHByb2Nlc3MgcmVxdWVzdGVkIGZvciBtZXNzYWdlcyB0byBiZSBzaG93bi5cbiAqIEBwYXJhbSBvbkJlZm9yZVNob3dNZXNzYWdlIENhbGxiYWNrIHRvIGluZmx1ZW5jZSBVSSBkZWNpc2lvbiBiZWZvcmUgY3JlYXRpbmcgZmluYWwgVUkgZGVjaXNpb24uXG4gKiBAcGFyYW0gdmlld1R5cGUgVmlldyB0eXBlLCBsaXN0IHJlcG9ydCBvciBvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBzaG93U3RhdGVNZXNzYWdlcyBTaG91bGQgc3RhdGUgbWVzc2FnZXMgYmUgc2hvd24uXG4gKiBAcmV0dXJucyBVSSBkZWNpc2lvbnMgdXNlZCB0byBzaG93IG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBnZXRVSURlY2lzaW9ucyhcblx0dGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSxcblx0Y3VzdG9tTWVzc2FnZXM6IEN1c3RvbU1lc3NhZ2VbXSB8IHVuZGVmaW5lZCxcblx0Y29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdHNob3dCb3VuZFRyYW5zaXRpb24gPSBmYWxzZSxcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhbixcblx0Y29udHJvbD86IENvbnRyb2wsXG5cdGFjdGlvbk5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9uQmVmb3JlU2hvd01lc3NhZ2U/OiAobWVzc2FnZXM6IE1lc3NhZ2VbXSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBTaG93TWVzc2FnZVBhcmFtZXRlcnMpID0+IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0dmlld1R5cGU/OiBzdHJpbmcsXG5cdHNob3dTdGF0ZU1lc3NhZ2VzID0gZmFsc2Vcbik6IE1lc3NhZ2VVSURlY2lzaW9ucyB7XG5cdC8vIEFkZCBDdXN0b20gbWVzc2FnZXNcblx0Ly8gVE9ETzogV2lsbCB0aGVzZSBtZXNzYWdlcyBiZSBwYXJ0IG9mIHRyYW5zaXRpb25NZXNzYWdlcz9cblx0aWYgKGN1c3RvbU1lc3NhZ2VzICYmIGN1c3RvbU1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdGFkZEN1c3RvbU1lc3NhZ2VzKGN1c3RvbU1lc3NhZ2VzKTtcblx0fVxuXG5cdC8vIEdldCB0cmFuc2lzdGlvbiBNZXNzYWdlc1xuXHRjb25zdCB0cmFuc2l0aW9uTWVzc2FnZXMgPSBnZXRUcmFuc2l0aW9uTWVzc2FnZXNGb3JVSURlY2lzaW9uLmNhbGwodGhpcywgc2hvd0JvdW5kVHJhbnNpdGlvbiwgY29udGV4dCk7XG5cblx0Ly8gVUkgcmVwcmVzZW50YXRpb24gb2YgdGhlIERpYWxvZ1xuXHRjb25zdCB1aURlY2lzaW9uSW50ZXJtaXR0ZW50ID0gZXhlY3V0ZU9uQmVmb3JlU2hvd01lc3NhZ2VzLmNhbGwodGhpcywgdHJhbnNpdGlvbk1lc3NhZ2VzLCBvbkJlZm9yZVNob3dNZXNzYWdlKTtcblx0bGV0IHsgbWVzc2FnZXNUb1Nob3csIHVpRWxlbWVudFRvVXNlID0gXCJEaWFsb2dcIiB9ID0gdWlEZWNpc2lvbkludGVybWl0dGVudDtcblx0Ly8gR2V0IEZpbHRlcnMgZm9yIFVuYm91bmQgTWVzc2FnZXNcblx0c2hvd0JvdW5kVHJhbnNpdGlvbiA9IHVpRGVjaXNpb25JbnRlcm1pdHRlbnQuY29udGFpbnNCb3VuZFRyYW5zaXRpb24gPz8gc2hvd0JvdW5kVHJhbnNpdGlvbjtcblx0Y29uc3QgZmlsdGVycyA9IGdldEZpbHRlcnNGb3JNZXNzYWdlcyhzaG93Qm91bmRUcmFuc2l0aW9uLCBzaG93U3RhdGVNZXNzYWdlcyk7XG5cdG1lc3NhZ2VzVG9TaG93ID0gZ2V0TWVzc2FnZXNUb1Nob3coZmlsdGVycywgbWVzc2FnZXNUb1Nob3cgPz8gW10pO1xuXHQvLyBoYW5kbGUgY29udGV4dCBib3VuZCBtZXNzYWdlcywgSWYgdGhlcmUgaXMgYSBzaW5nbGUgbWVzc2FnZSBvZiB3aGljaCBpcyBib3VuZGVkIHRvIHRoZSBjb250ZXh0IHRoZW4gcmVtb3ZlIHRoYXQgZnJvbSB0aGUgZGlhbG9nXG5cdG1lc3NhZ2VzVG9TaG93ID0gcmVtb3ZlTWVzc2FnZVNob3duSW5NZXNzYWdlU3RyaXAobWVzc2FnZXNUb1Nob3csIGNvbnRleHQpO1xuXHQoeyBtZXNzYWdlc1RvU2hvdywgdWlFbGVtZW50VG9Vc2UgfSA9IHByb2Nlc3NNZXNzYWdlc0Zyb21DaGFuZ2VzZXRGYWlsdXJlKHsgbWVzc2FnZXNUb1Nob3csIHVpRWxlbWVudFRvVXNlIH0pKTtcblx0Ly8gTW9kaWZ5IEVUYWcgTWVzc2FnZXNcblx0Y29uc3QgaGFzRXRhZ01lc3NhZ2UgPSB0aGlzLm1vZGlmeUVUYWdNZXNzYWdlc09ubHkoTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpISwgY29uY3VycmVudEVkaXRGbGFnKTtcblxuXHRpZiAobWVzc2FnZXNUb1Nob3cubGVuZ3RoID4gMCAmJiB1aUVsZW1lbnRUb1VzZSAhPT0gXCJOb25lXCIpIHtcblx0XHRpZiAobWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlVG9TaG93ID0gbWVzc2FnZXNUb1Nob3dbMF07XG5cdFx0XHRpZiAobWVzc2FnZVRvU2hvdy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MpIHtcblx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIlRvYXN0XCI7XG5cdFx0XHR9IGVsc2UgaWYgKGhhc0V0YWdNZXNzYWdlIHx8IG1lc3NhZ2VUb1Nob3cuZ2V0RGVzY3JpcHRpb24oKT8ubGVuZ3RoIHx8IG1lc3NhZ2VUb1Nob3cuZ2V0RGVzY3JpcHRpb25VcmwoKT8ubGVuZ3RoKSB7XG5cdFx0XHRcdHVpRWxlbWVudFRvVXNlID0gXCJEaWFsb2dcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFdlIHdvdWxkIHNob3cgc2luZ2xlIG1lc3NhZ2UgaW4gbWVzc2FnZSBib3ggb25seSB3aGVuOlxuXHRcdFx0XHQvLyAxLiBJdCBpcyBub3QgYW4gRXRhZyBtZXNzYWdlLlxuXHRcdFx0XHQvLyAyLiBUaGVyZSBpcyBubyBtZXNzYWdlIGRlc2NyaXB0aW9uIG9yIGRlc2NyaXB0aW9uIHVybCBhdmFpbGFibGUgZm9yIGxvbmcgdGV4dC5cblx0XHRcdFx0dWlFbGVtZW50VG9Vc2UgPSBcIkJveFwiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRtZXNzYWdlSGFuZGxpbmcudXBkYXRlTWVzc2FnZU9iamVjdEdyb3VwTmFtZShtZXNzYWdlc1RvU2hvdywgY29udHJvbCwgYWN0aW9uTmFtZSwgdmlld1R5cGUpO1xuXHRcdGNvbnN0IGZuR2V0TWVzc2FnZVN1YnRpdGxlID0gdWlEZWNpc2lvbkludGVybWl0dGVudC5mbkdldE1lc3NhZ2VTdWJ0aXRsZTtcblx0XHRpZiAoZm5HZXRNZXNzYWdlU3VidGl0bGUpIHtcblx0XHRcdG1lc3NhZ2VzVG9TaG93LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlKSB7XG5cdFx0XHRcdGZuR2V0TWVzc2FnZVN1YnRpdGxlKG9NZXNzYWdlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bWVzc2FnZXNUb1Nob3csXG5cdFx0dWlFbGVtZW50VG9Vc2UsXG5cdFx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2g6IGhhc0V0YWdNZXNzYWdlID8gY29udGV4dCA6IHVuZGVmaW5lZCxcblx0XHRjb250YWluc0JvdW5kVHJhbnNpdGlvbjogc2hvd0JvdW5kVHJhbnNpdGlvblxuXHR9O1xufVxuXG4vKipcbiAqIFNob3cgbWVzc2FnZXMgaW4gdGhlIGRlY2lkZWQgVUkgRWxlbWVudC5cbiAqIEBwYXJhbSB1aURlY2lzaW9ucyBVSSBEZWNpc2lvbiB0byBiZSB1c2VkIHRvIHNob3cgdGhlIG1lc3NhZ2VzLlxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIG9yIHJlamVjdHMgYmFzZWQgb24gdXNlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBVSSBlbGVtZW50LlxuICovXG5hc3luYyBmdW5jdGlvbiBzaG93TWVzc2FnZXNJblVJKHVpRGVjaXNpb25zOiBNZXNzYWdlVUlEZWNpc2lvbnMpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgeyBtZXNzYWdlc1RvU2hvdywgdWlFbGVtZW50VG9Vc2UgfSA9IHVpRGVjaXNpb25zO1xuXG5cdC8vIFNob3cgRGlhbG9nIC8gTWVzc2FnZUJveCAvIE1lc3NhZ2VUb2FzdFxuXHRpZiAobWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gRG9uJ3Qgc2hvdyB0aGUgcG9wdXAgaWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9IGVsc2UgaWYgKHVpRWxlbWVudFRvVXNlID09PSBcIlRvYXN0XCIpIHtcblx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLnNob3dNZXNzYWdlVG9hc3QobWVzc2FnZXNUb1Nob3dbMF0pO1xuXHR9IGVsc2UgaWYgKHVpRWxlbWVudFRvVXNlID09PSBcIkRpYWxvZ1wiKSB7XG5cdFx0YXdhaXQgbWVzc2FnZUhhbmRsaW5nLnNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCh1aURlY2lzaW9ucyk7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9IGVsc2UgaWYgKHVpRWxlbWVudFRvVXNlID09PSBcIkJveFwiKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2VIYW5kbGluZy5zaG93TWVzc2FnZUJveENvbnRyb2wodWlEZWNpc2lvbnMpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxufVxuXG4vKipcbiAqIEdldCBtb2RlbCBmaWx0ZXJzIGZvciBnZXR0aW5nIHRoZSByZWxldmFudCBtZXNzYWdlcy5cbiAqIEBwYXJhbSBzaG93Qm91bmRUcmFuc2l0aW9uIFNob3VsZCBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGJlIHNob3duLlxuICogQHBhcmFtIHNob3dTdGF0ZU1lc3NhZ2VzIFNob3VsZCBzdGF0ZSBtZXNzYWdlcyBiZSBzaG93bi5cbiAqIEByZXR1cm5zIE1vZGVsIGZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gZ2V0RmlsdGVyc0Zvck1lc3NhZ2VzKHNob3dCb3VuZFRyYW5zaXRpb246IGJvb2xlYW4sIHNob3dTdGF0ZU1lc3NhZ2VzID0gZmFsc2UpOiBGaWx0ZXJbXSB7XG5cdGNvbnN0IGZpbHRlcnMgPSBzaG93U3RhdGVNZXNzYWdlcyA/IFtdIDogW25ldyBGaWx0ZXIoeyBwYXRoOiBcInBlcnNpc3RlbnRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLk5FLCB2YWx1ZTE6IGZhbHNlIH0pXTtcblx0Y29uc3QgaXNOb25UZWNobmljYWxNZXNzYWdlRmlsdGVyID0gbmV3IEZpbHRlcih7IHBhdGg6IFwiXCIsIHRlc3Q6IGlzTm9uVGVjaG5pY2FsTWVzc2FnZSB9KTtcblxuXHRpZiAoc2hvd1N0YXRlTWVzc2FnZXMgfHwgc2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdC8vIEFkZCB0aGUgZmlsdGVyIGZvciBib3RoIHN0YXRlIG1lc3NhZ2VzIG9yIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXNcblx0XHRjb25zdCBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2cgPSBmdW5jdGlvbiAoYUNvbnRyb2xJZHM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZUhhbmRsaW5nLmlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nKGFDb250cm9sSWRzKTtcblx0XHR9O1xuXHRcdGZpbHRlcnMucHVzaChcblx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRwYXRoOiBcImNvbnRyb2xJZHNcIixcblx0XHRcdFx0dGVzdDogZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiB0cnVlXG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHRpZiAoc2hvd0JvdW5kVHJhbnNpdGlvbiAmJiAhc2hvd1N0YXRlTWVzc2FnZXMpIHtcblx0XHRcdC8vIEFkZCBleHRyYSBmaWx0ZXIgaWYgb25seSBib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFyZSBzaG93blxuXHRcdFx0ZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBwYXRoOiBcInBlcnNpc3RlbnRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLCB2YWx1ZTE6IHRydWUgfSkpO1xuXHRcdFx0ZmlsdGVycy5wdXNoKGlzTm9uVGVjaG5pY2FsTWVzc2FnZUZpbHRlcik7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE9ubHkgdW5ib3VuZCBtZXNzYWdlcyBzaG91bGQgYmUgc2hvd25cblx0XHRmaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW1xuXHRcdFx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRcdFx0cGF0aDogXCJcIixcblx0XHRcdFx0XHRcdHRlc3Q6IChtZXNzYWdlOiBNZXNzYWdlKSA9PiBtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDAgfHwgbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IFwiXCJcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRpc05vblRlY2huaWNhbE1lc3NhZ2VGaWx0ZXJcblx0XHRcdFx0XSxcblx0XHRcdFx0YW5kOiB0cnVlXG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gZmlsdGVycztcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc01lc3NhZ2VzRnJvbUNoYW5nZXNldEZhaWx1cmUoe1xuXHRtZXNzYWdlc1RvU2hvdyxcblx0dWlFbGVtZW50VG9Vc2Vcbn06IFBpY2s8TWVzc2FnZVVJRGVjaXNpb25zLCBcInVpRWxlbWVudFRvVXNlXCIgfCBcIm1lc3NhZ2VzVG9TaG93XCI+KTogUGljazxNZXNzYWdlVUlEZWNpc2lvbnMsIFwidWlFbGVtZW50VG9Vc2VcIiB8IFwibWVzc2FnZXNUb1Nob3dcIj4ge1xuXHRsZXQgcmV0TWVzc2FnZXMgPSBbLi4ubWVzc2FnZXNUb1Nob3ddO1xuXHRpZiAobWVzc2FnZXNUb1Nob3cubGVuZ3RoID09PSAyKSB7XG5cdFx0Ly8gVGhlcmUgYXJlIDIgbWVzc2FnZTpcblx0XHQvLyAxLiBHZW5lcmljIGVycm9yIGNoYW5nZXNldCBtZXNzYWdlIGFkZGVkIGJ5IEZFLlxuXHRcdC8vIDIuIE1haW4gZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBpbnRlcmFjdGlvbi5cblx0XHQvLyBXZSByZW1vdmUgdGhlIGdlbmVyaWMgbWVzc2FnZSwgc2hvdyBvbmx5IGFuIGVuaGFuY2VkICdNYWluIGVycm9yIG1lc3NhZ2UnIHdpdGggYSBnZW5lcmljIG1lc3NzYWdlIHByZS10ZXh0IGluIHRoZSBtZXNzYWdlIGJveC5cblx0XHRjb25zdCBnZW5lcmljTXNnczogTWVzc2FnZVtdID0gW107XG5cdFx0Y29uc3Qgbm9uR2VuZXJpY01zZ3M6IE1lc3NhZ2VbXSA9IFtdO1xuXHRcdG1lc3NhZ2VzVG9TaG93LmZvckVhY2goKG1lc3NhZ2UpID0+IHtcblx0XHRcdGlmIChtZXNzYWdlLmdldENvZGUoKSA9PT0gXCJGRV9DVVNUT01fTUVTU0FHRV9DSEFOR0VTRVRfQUxMX0ZBSUxFRFwiKSB7XG5cdFx0XHRcdGdlbmVyaWNNc2dzLnB1c2gobWVzc2FnZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRub25HZW5lcmljTXNncy5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChnZW5lcmljTXNncy5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IHsgZmU6IGZlVGVjaG5pY2FsRGV0YWlscyB9ID0gKGdlbmVyaWNNc2dzWzBdLmdldFRlY2huaWNhbERldGFpbHMoKSB8fCB7fSkgYXMgRkVNZXNzYWdlVGVjaG5pY2FsRGV0YWlscztcblx0XHRcdGlmIChmZVRlY2huaWNhbERldGFpbHM/LmNoYW5nZVNldFByZVRleHRGb3JTaW5nbGVFcnJvcikge1xuXHRcdFx0XHRjb25zdCBwcmVUZXh0ID0gZmVUZWNobmljYWxEZXRhaWxzPy5jaGFuZ2VTZXRQcmVUZXh0Rm9yU2luZ2xlRXJyb3I7XG5cdFx0XHRcdGlmIChwcmVUZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3QgdGVjaERldGFpbHNGb3JOb25HZW5lcmljTWVzc2FnZTogRkVNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA9IHtcblx0XHRcdFx0XHRcdGZlOiB7XG5cdFx0XHRcdFx0XHRcdHNpbmdsZUVycm9yUHJlVGV4dDogcHJlVGV4dCxcblx0XHRcdFx0XHRcdFx0c2luZ2xlR2VuZXJpY01lc3NhZ2VJZDogZ2VuZXJpY01zZ3NbMF0uZ2V0SWQoKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgZXhpc3RpbmdUZWNoRGV0YWlscyA9IG5vbkdlbmVyaWNNc2dzWzBdLmdldFRlY2huaWNhbERldGFpbHMoKSA/PyB7fTtcblx0XHRcdFx0XHQvLyBjb21iaW5lIGV4aXN0aW5nIHRlY2huaWNhbCBkZXRhaWxzIGlmIGFueSwgd2l0aCB0aGUgY2hhbmdlIHNldCBpbmZvcm1hdGlvbiB3ZSB3YW50IHRvIGFkZC5cblx0XHRcdFx0XHRub25HZW5lcmljTXNnc1swXS5zZXRUZWNobmljYWxEZXRhaWxzKHsgLi4uZXhpc3RpbmdUZWNoRGV0YWlscywgLi4udGVjaERldGFpbHNGb3JOb25HZW5lcmljTWVzc2FnZSB9KTtcblx0XHRcdFx0XHRyZXRNZXNzYWdlcyA9IG5vbkdlbmVyaWNNc2dzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0bWVzc2FnZXNUb1Nob3c6IHJldE1lc3NhZ2VzLFxuXHRcdHVpRWxlbWVudFRvVXNlOiByZXRNZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgdWlFbGVtZW50VG9Vc2UgIT09IFwiTm9uZVwiID8gXCJCb3hcIiA6IHVpRWxlbWVudFRvVXNlXG5cdH07XG59XG5cbi8qKlxuICogQWRkIHRoZSBjdXN0b20gbWVzc2FnZXMgdG8gbWVzc2FnZSBtb2RlbC5cbiAqIEBwYXJhbSBjdXN0b21NZXNzYWdlcyBDdXN0b20gbWVzc2FnZXMgdG8gYWRkLlxuICovXG5mdW5jdGlvbiBhZGRDdXN0b21NZXNzYWdlcyhjdXN0b21NZXNzYWdlczogQ3VzdG9tTWVzc2FnZVtdKTogdm9pZCB7XG5cdGN1c3RvbU1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBDdXN0b21NZXNzYWdlKSB7XG5cdFx0Y29uc3QgbWVzc2FnZUNvZGUgPSBvTWVzc2FnZS5jb2RlID8gb01lc3NhZ2UuY29kZSA6IFwiXCI7XG5cdFx0TWVzc2FnaW5nLmFkZE1lc3NhZ2VzKFxuXHRcdFx0bmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRtZXNzYWdlOiBvTWVzc2FnZS50ZXh0LFxuXHRcdFx0XHR0eXBlOiBvTWVzc2FnZS50eXBlLFxuXHRcdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRcdHBlcnNpc3RlbnQ6IHRydWUsXG5cdFx0XHRcdGNvZGU6IG1lc3NhZ2VDb2RlXG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0Ly9UaGUgdGFyZ2V0IGFuZCBwZXJzaXN0ZW50IHByb3BlcnRpZXMgb2YgdGhlIG1lc3NhZ2UgYXJlIGhhcmRjb2RlZCBhcyBcIlwiIGFuZCB0cnVlIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGRlYWxzIHdpdGggb25seSB1bmJvdW5kIG1lc3NhZ2VzLlxuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U29ydGVyRm9yTWVzc2FnZXMoKTogU29ydGVyIHtcblx0cmV0dXJuIG5ldyBTb3J0ZXIoXCJcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIChvYmoxOiBNZXNzYWdlV2l0aEhlYWRlciwgb2JqMjogTWVzc2FnZVdpdGhIZWFkZXIpID0+IHtcblx0XHRjb25zdCByYW5rQSA9IGdldE1lc3NhZ2VSYW5rKG9iajEpO1xuXHRcdGNvbnN0IHJhbmtCID0gZ2V0TWVzc2FnZVJhbmsob2JqMik7XG5cblx0XHRpZiAocmFua0EgPCByYW5rQikge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpZiAocmFua0EgPiByYW5rQikge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZXNUb1Nob3coZmlsdGVyczogRmlsdGVyW10sIHRyYW5zaXN0aW9uTWVzc2FnZXM6IE1lc3NhZ2VbXSk6IE1lc3NhZ2VXaXRoSGVhZGVyW10ge1xuXHRsZXQgbWVzc2FnZXNUb1Nob3c6IE1lc3NhZ2VXaXRoSGVhZGVyW10gPSBbLi4udHJhbnNpc3Rpb25NZXNzYWdlc107XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmlsdGVycyksXG5cdFx0Y3VycmVudENvbnRleHRzID0gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdGlmIChjdXJyZW50Q29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGlmIGZhbHNlLCBzaG93IG1lc3NhZ2VzIGluIGRpYWxvZ1xuXHRcdC8vIEFzIGZpdGVyaW5nIGhhcyBhbHJlYWR5IGhhcHBlbmVkIGhlcmUgaGVuY2Vcblx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHQvLyBTbyB3ZSBjcmVhdGUgbmV3IGpzb24gbW9kZWwgdG8gdXNlIGZvciB0aGUgbWVzc2FnZSBkaWFsb2cgdmlldy5cblx0XHRjb25zdCBtZXNzYWdlcyA9IGN1cnJlbnRDb250ZXh0cy5tYXAoKGN1cnJlbnRDb250ZXh0KSA9PiBjdXJyZW50Q29udGV4dC5nZXRPYmplY3QoKSk7XG5cdFx0Y29uc3Qgb1VuaXF1ZU9iajogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuXHRcdG1lc3NhZ2VzVG9TaG93ID0gbWVzc2FnZXMuY29uY2F0KG1lc3NhZ2VzVG9TaG93KS5maWx0ZXIoZnVuY3Rpb24gKG9iajogTWVzc2FnZSkge1xuXHRcdFx0Ly8gcmVtb3ZlIGVudHJpZXMgaGF2aW5nIGR1cGxpY2F0ZSBtZXNzYWdlIGlkc1xuXHRcdFx0cmV0dXJuICFvVW5pcXVlT2JqW29iai5nZXRJZCgpXSAmJiAob1VuaXF1ZU9ialtvYmouZ2V0SWQoKV0gPSB0cnVlKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gbWVzc2FnZXNUb1Nob3c7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dNZXNzYWdlVG9hc3QobWVzc2FnZTogTWVzc2FnZSk6IFByb21pc2U8dm9pZD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRNZXNzYWdlVG9hc3Quc2hvdyhtZXNzYWdlLmdldE1lc3NhZ2UoKSk7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKG1lc3NhZ2UpO1xuXHRcdHJlc29sdmUodW5kZWZpbmVkKTtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dNZXNzYWdlRGlhbG9nQ29udHJvbCh1aURlY2lzaW9uOiBNZXNzYWdlVUlEZWNpc2lvbnMsIHJ1blRvVGVzdCA9IGZhbHNlKTogUHJvbWlzZTx2b2lkIHwgRGlhbG9nPiB7XG5cdGxldCBoaWdoZXN0UHJpb3JpdHk7XG5cdGxldCBoaWdoZXN0UHJpb3JpdHlUZXh0O1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IChwYXJhbTE6IHZvaWQgfCBEaWFsb2cpID0+IHZvaWQpIHtcblx0XHRhUmVzb2x2ZUZ1bmN0aW9ucy5wdXNoKHJlc29sdmUpO1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ0Zsb3cgPSBmYWxzZTtcblx0XHRjb25zdCB7IG1lc3NhZ2VzVG9TaG93LCBjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCB9ID0gdWlEZWNpc2lvbjtcblx0XHRjb25zdCBtZXNzYWdlRGlhbG9nTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1lc3NhZ2VzVG9TaG93KTtcblx0XHRjb25zdCBtZXNzYWdlT2JqZWN0ID0gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG1lc3NhZ2VEaWFsb2dNb2RlbCwgc3RyaWN0SGFuZGxpbmdGbG93KTtcblx0XHRjb25zdCBzb3J0ZXIgPSBnZXRTb3J0ZXJGb3JNZXNzYWdlcygpO1xuXHRcdChtZXNzYWdlT2JqZWN0Lm1lc3NhZ2VWaWV3LmdldEJpbmRpbmcoXCJpdGVtc1wiKSBhcyBPRGF0YUxpc3RCaW5kaW5nKS5zb3J0KHNvcnRlcik7XG5cblx0XHRpZiAoIWRpYWxvZ0NvbnRyb2wgfHwgIWRpYWxvZ0NvbnRyb2wuaXNPcGVuKCkpIHtcblx0XHRcdGRpYWxvZ0NvbnRyb2wgPSBuZXcgRGlhbG9nKHtcblx0XHRcdFx0cmVzaXphYmxlOiB0cnVlLFxuXHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdC8vIGFsc28gcmVtb3ZlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgd2Ugd2VyZSBzaG93aW5nIHRoZW1cblx0XHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhtZXNzYWdlc1RvU2hvdyk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfQ0xPU0VcIilcblx0XHRcdFx0fSksXG5cdFx0XHRcdGVzY2FwZUhhbmRsZXI6IGZ1bmN0aW9uIChjb21wbGV0aW9uUHJvbWlzZTogeyByZXNvbHZlOiBGdW5jdGlvbjsgcmVqZWN0OiBGdW5jdGlvbiB9KTogdm9pZCB7XG5cdFx0XHRcdFx0ZGlhbG9nQ2xvc2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0Ly8gYWxzbyByZW1vdmUgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpZiB3ZSB3ZXJlIHNob3dpbmcgdGhlbVxuXHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhtZXNzYWdlc1RvU2hvdyk7XG5cdFx0XHRcdFx0Y29tcGxldGlvblByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRjdXN0b21IZWFkZXI6IG5ldyBCYXIoe1xuXHRcdFx0XHRcdGNvbnRlbnRNaWRkbGU6IFtcblx0XHRcdFx0XHRcdG5ldyBUZXh0KHtcblx0XHRcdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFXCIpXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0Y29udGVudExlZnQ6IFtvQmFja0J1dHRvbl1cblx0XHRcdFx0fSksXG5cdFx0XHRcdGNvbnRlbnRXaWR0aDogXCIzNy41ZW1cIixcblx0XHRcdFx0Y29udGVudEhlaWdodDogXCIyMS41ZW1cIixcblx0XHRcdFx0dmVydGljYWxTY3JvbGxpbmc6IGZhbHNlLFxuXHRcdFx0XHRjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXG5cdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVJlc29sdmVGdW5jdGlvbnMpIHtcblx0XHRcdFx0XHRcdGl0ZW0oKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZGlhbG9nQ29udHJvbC5yZW1vdmVBbGxDb250ZW50KCk7XG5cdFx0ZGlhbG9nQ29udHJvbC5hZGRDb250ZW50KG1lc3NhZ2VWaWV3KTtcblxuXHRcdGlmIChjb250ZXh0TmVlZHNFdGFnUmVmcmVzaCkge1xuXHRcdFx0ZGlhbG9nQ29udHJvbC5zZXRCZWdpbkJ1dHRvbihcblx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdGRpYWxvZ0Nsb3NlSGFuZGxlcigpO1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRleHROZWVkc0V0YWdSZWZyZXNoLmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2guZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29udGV4dE5lZWRzRXRhZ1JlZnJlc2gucmVmcmVzaCgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIiksXG5cdFx0XHRcdFx0dHlwZTogQnV0dG9uVHlwZS5FbXBoYXNpemVkXG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaWFsb2dDb250cm9sLmRlc3Ryb3lCZWdpbkJ1dHRvbigpO1xuXHRcdH1cblx0XHRoaWdoZXN0UHJpb3JpdHkgPSBmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkobWVzc2FnZVZpZXcuZ2V0SXRlbXMoKSk7XG5cdFx0aGlnaGVzdFByaW9yaXR5VGV4dCA9IGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhoaWdoZXN0UHJpb3JpdHkpO1xuXHRcdGRpYWxvZ0NvbnRyb2wuc2V0U3RhdGUoaGlnaGVzdFByaW9yaXR5KTtcblx0XHQoKGRpYWxvZ0NvbnRyb2wuZ2V0Q3VzdG9tSGVhZGVyKCkgYXMgQmFyKS5nZXRDb250ZW50TWlkZGxlKClbMF0gYXMgVGV4dCkuc2V0VGV4dChoaWdoZXN0UHJpb3JpdHlUZXh0KTtcblx0XHRtZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRkaWFsb2dDb250cm9sLm9wZW4oKTtcblx0XHRpZiAocnVuVG9UZXN0KSB7XG5cdFx0XHRyZXNvbHZlKGRpYWxvZ0NvbnRyb2wpO1xuXHRcdH1cblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dNZXNzYWdlQm94Q29udHJvbCh1aURlY2lzaW9uOiBNZXNzYWdlVUlEZWNpc2lvbnMpOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0Y29uc3QgeyBtZXNzYWdlc1RvU2hvdyB9ID0gdWlEZWNpc2lvbjtcblx0XHRjb25zdCBtZXNzYWdlVG9TaG93ID0gbWVzc2FnZXNUb1Nob3dbMF07XG5cdFx0Y29uc3QgbWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSBtZXNzYWdlVG9TaG93LmdldFRlY2huaWNhbERldGFpbHMoKSBhcyBNZXNzYWdlVGVjaG5pY2FsRGV0YWlscyB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCB7IHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQsIHNpbmdsZUVycm9yUHJlVGV4dCB9ID0gKG1lc3NhZ2VUZWNobmljYWxEZXRhaWxzIGFzIEZFTWVzc2FnZVRlY2huaWNhbERldGFpbHMpPy5mZSA/PyB7fTtcblx0XHRjb25zdCByZXRyeUFmdGVyTWVzc2FnZSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRSZXRyeUFmdGVyTWVzc2FnZShtZXNzYWdlVG9TaG93LCB0cnVlKTtcblx0XHQvLyBJZiBpdCBpcyBhIHJldHJ5IG1lc3NhZ2UsIHRoZW4gaXQgbmVlZHMgdG8gaGF2ZSB0ZWNobmljYWwgZGV0YWlscyB0byBzaG93IGl0LlxuXHRcdGNvbnN0IHNob3dNZXNzYWdlQm94ID0gcmV0cnlBZnRlck1lc3NhZ2UgPyBtZXNzYWdlVGVjaG5pY2FsRGV0YWlscyA6IHRydWU7XG5cdFx0aWYgKHNob3dNZXNzYWdlQm94KSB7XG5cdFx0XHRsZXQgZm9ybWF0dGVkVGV4dFN0cmluZyA9IFwiPGh0bWw+PGJvZHk+XCI7XG5cblx0XHRcdC8vIEFkZGluZyBwcmUtdGV4dCBmb3IgdGhlIG1lc3NhZ2VzXG5cdFx0XHRpZiAocmV0cnlBZnRlck1lc3NhZ2UpIHtcblx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmd9PGg2PiR7cmV0cnlBZnRlck1lc3NhZ2V9PC9oNj48YnIvPmA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoc2luZ2xlRXJyb3JQcmVUZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZUhlYWRlciA9IChtZXNzYWdlVG9TaG93IGFzIE1lc3NhZ2VXaXRoSGVhZGVyKT8uW1wiaGVhZGVyTmFtZVwiXVxuXHRcdFx0XHRcdFx0PyBgJHsobWVzc2FnZVRvU2hvdyBhcyBNZXNzYWdlV2l0aEhlYWRlcik/LltcImhlYWRlck5hbWVcIl19OmBcblx0XHRcdFx0XHRcdDogXCJcIjtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nID0gYCR7Zm9ybWF0dGVkVGV4dFN0cmluZ30ke3NpbmdsZUVycm9yUHJlVGV4dH08YnIvPjxici8+JHttZXNzYWdlSGVhZGVyfSBgO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZGluZyB0aGUgbWFpbiBlcnJvciBtZXNzYWdlLlxuXHRcdFx0aWYgKG1lc3NhZ2VUb1Nob3cuZ2V0Q29kZSgpICE9PSBcIjUwM1wiICYmIG1lc3NhZ2VUb1Nob3cuZ2V0QWRkaXRpb25hbFRleHQoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtcblx0XHRcdFx0XHRmb3JtYXR0ZWRUZXh0U3RyaW5nICsgbWVzc2FnZVRvU2hvdy5nZXRBZGRpdGlvbmFsVGV4dCgpXG5cdFx0XHRcdH06ICR7bWVzc2FnZVRvU2hvdy5nZXRNZXNzYWdlKCl9PC9ib2R5PjwvaHRtbD5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBtZXNzYWdlVG9TaG93LmdldE1lc3NhZ2UoKX08L2JvZHk+PC9odG1sPmA7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmb3JtYXR0ZWRUZXh0ID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0XHRodG1sVGV4dDogZm9ybWF0dGVkVGV4dFN0cmluZ1xuXHRcdFx0fSk7XG5cblx0XHRcdHNob3dNZXNzYWdlQm94UGVyVHlwZShcblx0XHRcdFx0Zm9ybWF0dGVkVGV4dCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG9uQ2xvc2U6IGNsb3NlTWVzc2FnZUJveC5iaW5kKG51bGwsIG1lc3NhZ2VUb1Nob3csIHJlc29sdmUsIHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1lc3NhZ2VUb1Nob3dcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gY2xvc2VNZXNzYWdlQm94KG1lc3NhZ2VTaG93bjogTWVzc2FnZVdpdGhIZWFkZXIsIGNhbGxCYWNrOiAodmFsdWU6IHZvaWQpID0+IHZvaWQsIHNpbmdsZUdlbmVyaWNNZXNzYWdlSWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0Y29uc3QgbWVzc2FnZXNUb1JlbW92ZSA9IFttZXNzYWdlU2hvd25dO1xuXHRpZiAoc2luZ2xlR2VuZXJpY01lc3NhZ2VJZCkge1xuXHRcdGNvbnN0IGFsbE1zZ3MgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGdlbmVyaWNNZXNzYWdlID0gYWxsTXNncy5maW5kKChtc2c6IE1lc3NhZ2VXaXRoSGVhZGVyKSA9PiBtc2cuZ2V0SWQoKSA9PT0gc2luZ2xlR2VuZXJpY01lc3NhZ2VJZCk7XG5cdFx0aWYgKGdlbmVyaWNNZXNzYWdlKSB7XG5cdFx0XHRtZXNzYWdlc1RvUmVtb3ZlLnB1c2goZ2VuZXJpY01lc3NhZ2UpO1xuXHRcdH1cblx0fVxuXHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMobWVzc2FnZXNUb1JlbW92ZSk7XG5cdGNhbGxCYWNrKHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIHNob3dNZXNzYWdlQm94UGVyVHlwZShmb3JtYXR0ZWRUZXh0OiBzdHJpbmcsIGNsb3NlOiB7IG9uQ2xvc2U6IEZ1bmN0aW9uIH0sIG1lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0c3dpdGNoIChtZXNzYWdlLmdldFR5cGUoKSkge1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuRXJyb3I6XG5cdFx0XHRNZXNzYWdlQm94LmVycm9yKGZvcm1hdHRlZFRleHQsIGNsb3NlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgTWVzc2FnZVR5cGUuV2FybmluZzpcblx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhmb3JtYXR0ZWRUZXh0LCBjbG9zZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIE1lc3NhZ2VUeXBlLlN1Y2Nlc3M6XG5cdFx0XHRNZXNzYWdlQm94LnN1Y2Nlc3MoZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjpcblx0XHRcdE1lc3NhZ2VCb3guaW5mb3JtYXRpb24oZm9ybWF0dGVkVGV4dCwgY2xvc2UpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdE1lc3NhZ2VCb3guc2hvdyhmb3JtYXR0ZWRUZXh0LCBjbG9zZSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlTWVzc2FnZVNob3duSW5NZXNzYWdlU3RyaXAodHJhbnNpdGlvbk1lc3NhZ2VzOiBNZXNzYWdlW10sIGNvbnRleHQ6IENvbnRleHQpOiBNZXNzYWdlW10ge1xuXHRjb25zdCBib3VuZENvbnRleHRNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdHRyYW5zaXRpb25NZXNzYWdlcz8uZm9yRWFjaCgobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdGlmIChtZXNzYWdlLmdldFRhcmdldHMoKS5sZW5ndGggPT09IDEgJiYgbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IGNvbnRleHQ/LmdldFBhdGgoKSAmJiBtZXNzYWdlLmdldFBlcnNpc3RlbnQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Ym91bmRDb250ZXh0TWVzc2FnZXMucHVzaChtZXNzYWdlKTtcblx0XHR9XG5cdH0pO1xuXHRpZiAoYm91bmRDb250ZXh0TWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0dHJhbnNpdGlvbk1lc3NhZ2VzID0gdHJhbnNpdGlvbk1lc3NhZ2VzPy5maWx0ZXIoZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlICE9PSBib3VuZENvbnRleHRNZXNzYWdlc1swXTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gdHJhbnNpdGlvbk1lc3NhZ2VzO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGdyb3VwIG5hbWUgZm9yIGFsbCBtZXNzYWdlcyBpbiBhIGRpYWxvZy5cbiAqIEBwYXJhbSBhTW9kZWxEYXRhQXJyYXkgTWVzc2FnZXMgYXJyYXlcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSB2aWV3VHlwZVxuICovXG5mdW5jdGlvbiB1cGRhdGVNZXNzYWdlT2JqZWN0R3JvdXBOYW1lKFxuXHRhTW9kZWxEYXRhQXJyYXk6IE1lc3NhZ2VXaXRoSGVhZGVyW10sXG5cdGNvbnRyb2w6IENvbnRyb2wgfCB1bmRlZmluZWQsXG5cdHNBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHZpZXdUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHZvaWQge1xuXHRhTW9kZWxEYXRhQXJyYXkuZm9yRWFjaCgoYU1vZGVsRGF0YTogTWVzc2FnZVdpdGhIZWFkZXIpID0+IHtcblx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IFwiXCI7XG5cdFx0aWYgKCFhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoICYmIGFNb2RlbERhdGEuZ2V0Q29kZT8uKCkgIT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdFx0Ly8gdW5ib3VuZCB0cmFuc2lpdG9uIG1lc3NhZ2VzXG5cdFx0XHRjb25zdCBnZW5lcmFsR3JvdXBUZXh0ID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpIS5nZXRUZXh0KFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIik7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IGdlbmVyYWxHcm91cFRleHQ7XG5cdFx0fSBlbHNlIGlmIChhTW9kZWxEYXRhLnRhcmdldD8ubGVuZ3RoKSB7XG5cdFx0XHQvLyBMUiBmbG93XG5cdFx0XHRpZiAodmlld1R5cGUgPT09IFwiTGlzdFJlcG9ydFwiICYmIGNvbnRyb2w/LmlzQTxNRENUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5zZXRHcm91cE5hbWVMUlRhYmxlKGNvbnRyb2wsIGFNb2RlbERhdGEsIHNBY3Rpb25OYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAodmlld1R5cGUgPT09IFwiT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRcdC8vIE9QIERpc3BsYXkgbW9kZVxuXHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcuc2V0R3JvdXBOYW1lT1BEaXNwbGF5TW9kZShhTW9kZWxEYXRhLCBzQWN0aW9uTmFtZSwgY29udHJvbCBhcyBWaWV3KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFNb2RlbERhdGFbXCJoZWFkZXJOYW1lXCJdID0gbWVzc2FnZUhhbmRsaW5nLmdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZShzQWN0aW9uTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGZvciBMUiB0YWJsZS5cbiAqIEBwYXJhbSBvRWxlbVxuICogQHBhcmFtIGFNb2RlbERhdGFcbiAqIEBwYXJhbSBzQWN0aW9uTmFtZVxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVMUlRhYmxlKG9FbGVtOiBDb250cm9sIHwgdW5kZWZpbmVkLCBhTW9kZWxEYXRhOiBNZXNzYWdlV2l0aEhlYWRlciwgc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRjb25zdCBvUm93QmluZGluZyA9IG9FbGVtICYmIChvRWxlbSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpO1xuXHRpZiAob1Jvd0JpbmRpbmcpIHtcblx0XHRjb25zdCBzRWxlbWVCaW5kaW5nUGF0aCA9IGAkeyhvRWxlbSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gO1xuXHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdGNvbnN0IGFsbFJvd0NvbnRleHRzID0gb1Jvd0JpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRhbGxSb3dDb250ZXh0cy5mb3JFYWNoKChyb3dDb250ZXh0OiBDb250ZXh0KSA9PiB7XG5cdFx0XHRcdGlmIChhTW9kZWxEYXRhLnRhcmdldD8uaW5jbHVkZXMocm93Q29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBgJHtyb3dDb250ZXh0LmdldFBhdGgoKX0vYDtcblx0XHRcdFx0XHRjb25zdCBpZGVudGlmaWVyQ29sdW1uID0gKG9FbGVtLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRJZGVudGlmaWVyQ29sdW1uKCkgYXMgc3RyaW5nO1xuXHRcdFx0XHRcdGNvbnN0IHJvd0lkZW50aWZpZXIgPSBpZGVudGlmaWVyQ29sdW1uICYmIHJvd0NvbnRleHQuZ2V0T2JqZWN0KClbaWRlbnRpZmllckNvbHVtbl07XG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uUHJvcGVydHlOYW1lID0gbWVzc2FnZUhhbmRsaW5nLmdldFRhYmxlQ29sUHJvcGVydHkob0VsZW0sIGFNb2RlbERhdGEsIGNvbnRleHRQYXRoKTtcblx0XHRcdFx0XHRjb25zdCB7IHNUYWJsZVRhcmdldENvbE5hbWUgfSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbEluZm8ob0VsZW0gYXMgTURDVGFibGUsIGNvbHVtblByb3BlcnR5TmFtZSk7XG5cblx0XHRcdFx0XHQvLyBpZiB0YXJnZXQgaGFzIHNvbWUgY29sdW1uIG5hbWUgYW5kIGNvbHVtbiBpcyB2aXNpYmxlIGluIFVJXG5cdFx0XHRcdFx0aWYgKGNvbHVtblByb3BlcnR5TmFtZSAmJiBzVGFibGVUYXJnZXRDb2xOYW1lKSB7XG5cdFx0XHRcdFx0XHQvLyBoZWFkZXIgd2lsbCBiZSByb3cgSWRlbnRpZmllciwgaWYgZm91bmQgZnJvbSBhYm92ZSBjb2RlIG90aGVyd2lzZSBpdCBzaG91bGQgYmUgdGFibGUgbmFtZVxuXHRcdFx0XHRcdFx0YU1vZGVsRGF0YVtcImhlYWRlck5hbWVcIl0gPSByb3dJZGVudGlmaWVyID8gYCAke3Jvd0lkZW50aWZpZXJ9YCA6IChvRWxlbSBhcyBNRENUYWJsZSkuZ2V0SGVhZGVyKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGlmIGNvbHVtbiBkYXRhIG5vdCBmb3VuZCAobWF5IGJlIHRoZSBjb2x1bW4gaXMgaGlkZGVuKSwgYWRkIGdyb3VwaW5nIGFzIExhc3QgQWN0aW9uXG5cdFx0XHRcdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlKFxuXHRtZGNUYWJsZTogTURDVGFibGUsXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGVcbik6IHZvaWQge1xuXHRjb25zdCBpZGVudGlmaWVyQ29sdW1uID0gKG1kY1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKS5nZXRJZGVudGlmaWVyQ29sdW1uKCkgYXMgc3RyaW5nO1xuXHRpZiAoaWRlbnRpZmllckNvbHVtbikge1xuXHRcdGNvbnN0IGFsbFJvd0NvbnRleHRzID0gbWRjVGFibGUuZ2V0Um93QmluZGluZygpLmdldENvbnRleHRzKCk7XG5cdFx0YWxsUm93Q29udGV4dHMuZm9yRWFjaCgocm93Q29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0aWYgKG1lc3NhZ2UudGFyZ2V0Py5pbmNsdWRlcyhyb3dDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0Y29uc3Qgcm93SWRlbnRpZmllciA9IGlkZW50aWZpZXJDb2x1bW4gPyByb3dDb250ZXh0LmdldE9iamVjdCgpW2lkZW50aWZpZXJDb2x1bW5dIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCBjb2x1bW5OYW1lU3VmZml4ID0gdGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUgPyBgLCAke3RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lfWAgOiBcIlwiO1xuXHRcdFx0XHRtZXNzYWdlW1wiYWRkaXRpb25hbFRleHRcIl0gPSBgJHtyb3dJZGVudGlmaWVyfSR7Y29sdW1uTmFtZVN1ZmZpeH1gO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG1lc3NhZ2VbXCJhZGRpdGlvbmFsVGV4dFwiXSA9IGAke3RhcmdldFRhYmxlSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lfWA7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUoXG5cdHN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLFxuXHRtZGNUYWJsZTogTURDVGFibGUsXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YXJnZXRUYWJsZUluZm86IFRhcmdldFRhYmxlSW5mb1R5cGVcbik6IHZvaWQge1xuXHRsZXQgaGVhZGVyTmFtZSA9IG1kY1RhYmxlLmdldEhlYWRlclZpc2libGUoKSAmJiB0YXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXI7XG5cdGlmICghaGVhZGVyTmFtZSkge1xuXHRcdGhlYWRlck5hbWUgPSBzdWJzZWN0aW9uLmdldFRpdGxlKCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRoZWFkZXJOYW1lID0gYCR7b1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfVElUTEVfVEFCTEVfREVOT01JTkFUT1JcIil9OiAke2hlYWRlck5hbWV9YDtcblx0fVxuXHRtZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IGhlYWRlck5hbWU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ3JvdXAgbmFtZSBvZiBNZXNzYWdlIE9iamVjdCBpbiBPUCBEaXNwbGF5IG1vZGUuXG4gKiBAcGFyYW0gc3Vic2VjdGlvbiBTdWJzZWN0aW9uXG4gKiBAcGFyYW0gbWRjVGFibGUgIE1EQyB0YWJsZVxuICogQHBhcmFtIG1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHZpZXdDb250ZXh0IFZpZXcncyBiaW5kaW5nIGNvbnRleHRcbiAqIEBwYXJhbSBncm91cE5hbWVJc0dlbmVyYWwgSXMgcHJlc2VudCBncm91cCBuYW1lICdHZW5lcmFsJ1xuICogQHBhcmFtIGFjdGlvbk5hbWUgQWN0aW9uIG5hbWVcbiAqIEByZXR1cm5zIElmIGdyb3VwIG5hbWUgaXMgJ0dlbmVyYWwnXG4gKi9cbmZ1bmN0aW9uIHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZShcblx0c3Vic2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdG1kY1RhYmxlOiBNRENUYWJsZSxcblx0bWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdHZpZXdDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0Z3JvdXBOYW1lSXNHZW5lcmFsOiBib29sZWFuLFxuXHRhY3Rpb25OYW1lPzogc3RyaW5nXG4pOiBib29sZWFuIHtcblx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBtZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCksXG5cdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gdHJ1ZTtcblx0bGV0IGNoaWxkVGFibGVFbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG5cdG1kY1RhYmxlLmZpbmRFbGVtZW50cyh0cnVlKS5mb3JFYWNoKChvRWxlbWVudCkgPT4ge1xuXHRcdGlmIChvRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLm0uVGFibGVcIikgfHwgb0VsZW1lbnQuaXNBPFVJVGFibGU+KFwic2FwLnVpLnRhYmxlLlRhYmxlXCIpKSB7XG5cdFx0XHRjaGlsZFRhYmxlRWxlbWVudCA9IG9FbGVtZW50O1xuXHRcdH1cblx0fSk7XG5cdGlmIChvUm93QmluZGluZykge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7dmlld0NvbnRleHQ/LmdldFBhdGgoKX0vJHttZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCk/LmdldFBhdGgoKX1gO1xuXHRcdGlmIChtZXNzYWdlLnRhcmdldD8uaW5kZXhPZihzRWxlbWVCaW5kaW5nUGF0aCkgPT09IDApIHtcblx0XHRcdGNvbnN0IG9iaiA9IG1lc3NhZ2VIYW5kbGluZy5nZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRtZGNUYWJsZSxcblx0XHRcdFx0Y2hpbGRUYWJsZUVsZW1lbnQsXG5cdFx0XHRcdG9Sb3dCaW5kaW5nLFxuXHRcdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0XHRzZXRTZWN0aW9uTmFtZUluR3JvdXAsXG5cdFx0XHRcdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB7IG9UYXJnZXRUYWJsZUluZm8gfSA9IG9iajtcblxuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlKG1kY1RhYmxlLCBtZXNzYWdlLCBvVGFyZ2V0VGFibGVJbmZvKTtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy51cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZShzdWJzZWN0aW9uLCBtZGNUYWJsZSwgbWVzc2FnZSwgb1RhcmdldFRhYmxlSW5mbyk7XG5cdFx0XHRncm91cE5hbWVJc0dlbmVyYWwgPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdyb3VwTmFtZUlzR2VuZXJhbDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRoZSBncm91cCBuYW1lIG9mIE1lc3NhZ2UgT2JqZWN0IGluIE9QIERpc3BsYXkgbW9kZS5cbiAqIEBwYXJhbSBhTW9kZWxEYXRhIE1lc3NhZ2UgT2JqZWN0XG4gKiBAcGFyYW0gc0FjdGlvbk5hbWUgIEFjdGlvbiBuYW1lXG4gKiBAcGFyYW0gY29udHJvbFxuICovXG5mdW5jdGlvbiBzZXRHcm91cE5hbWVPUERpc3BsYXlNb2RlKGFNb2RlbERhdGE6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250cm9sOiBWaWV3KTogdm9pZCB7XG5cdGNvbnN0IG9WaWV3Q29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IG9wTGF5b3V0OiBDb250cm9sID0gY29udHJvbD8uZ2V0Q29udGVudCAmJiBjb250cm9sPy5nZXRDb250ZW50KClbMF07XG5cdGxldCBiSXNHZW5lcmFsR3JvdXBOYW1lID0gdHJ1ZTtcblx0aWYgKG9wTGF5b3V0KSB7XG5cdFx0bWVzc2FnZUhhbmRsaW5nLmdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0KG9wTGF5b3V0KS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdGNvbnN0IHN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdHN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0XHRvU3ViU2VjdGlvbi5maW5kRWxlbWVudHModHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAob0VsZW0pIHtcblx0XHRcdFx0XHRpZiAob0VsZW0uaXNBPE1EQ1RhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGJJc0dlbmVyYWxHcm91cE5hbWUgPSBzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGUoXG5cdFx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRvRWxlbSxcblx0XHRcdFx0XHRcdFx0YU1vZGVsRGF0YSxcblx0XHRcdFx0XHRcdFx0b1ZpZXdDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRiSXNHZW5lcmFsR3JvdXBOYW1lLFxuXHRcdFx0XHRcdFx0XHRzQWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGNvbnN0IHNFbGVtZUJpbmRpbmdQYXRoID0gYCR7b1ZpZXdDb250ZXh0Py5nZXRQYXRoKCl9YDtcblx0XHRpZiAoYU1vZGVsRGF0YS50YXJnZXQ/LmluZGV4T2Yoc0VsZW1lQmluZGluZ1BhdGgpID09PSAwKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBPUCBjb250ZXh0IHBhdGggaXMgcGFydCBvZiB0YXJnZXQsIHNldCBMYXN0IEFjdGlvbiBhcyBncm91cCBuYW1lXG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhTW9kZWxEYXRhW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBnZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGNvbnN0IHNMYXN0QWN0aW9uVGV4dCA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9MQVNUX0FDVElPTlwiKTtcblx0cmV0dXJuIHNBY3Rpb25OYW1lID8gYCR7c0xhc3RBY3Rpb25UZXh0fTogJHtzQWN0aW9uTmFtZX1gIDogXCJcIjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2l2ZSByYW5rIGJhc2VkIG9uIE1lc3NhZ2UgR3JvdXAvSGVhZGVyIG5hbWUsIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgU29ydGluZyBtZXNzYWdlcyBpbiBNZXNzYWdlIGRpYWxvZ1xuICogTGFzdCBBY3Rpb24gc2hvdWxkIGJlIHNob3duIGF0IHRvcCwgbmV4dCBSb3cgSWQgYW5kIGxhc3QgR2VuZXJhbC5cbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm5zIFJhbmsgb2YgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlUmFuayhvYmo6IE1lc3NhZ2VXaXRoSGVhZGVyKTogbnVtYmVyIHtcblx0aWYgKG9iai5nZXRDb2RlKCkgPT09IFwiRkVfQ1VTVE9NX01FU1NBR0VfQ0hBTkdFU0VUX0FMTF9GQUlMRURcIikge1xuXHRcdHJldHVybiAxO1xuXHR9IGVsc2UgaWYgKG9iai5oZWFkZXJOYW1lPy50b1N0cmluZygpLmluY2x1ZGVzKFwiTGFzdCBBY3Rpb25cIikpIHtcblx0XHRyZXR1cm4gMjtcblx0fSBlbHNlIGlmIChvYmouaGVhZGVyTmFtZT8udG9TdHJpbmcoKS5pbmNsdWRlcyhcIkdlbmVyYWxcIikpIHtcblx0XHRyZXR1cm4gNDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gMztcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIGdyb3VwIG5hbWUgd2hpY2ggY2FuIGVpdGhlciBHZW5lcmFsIG9yIExhc3QgQWN0aW9uLlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gc0FjdGlvbk5hbWVcbiAqIEBwYXJhbSBiSXNHZW5lcmFsR3JvdXBOYW1lXG4gKi9cbmNvbnN0IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUgPSAoYU1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLCBzQWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBiSXNHZW5lcmFsR3JvdXBOYW1lPzogYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRpZiAoYklzR2VuZXJhbEdyb3VwTmFtZSkge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEuZ2V0VGV4dChcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlW1wiaGVhZGVyTmFtZVwiXSA9IG1lc3NhZ2VIYW5kbGluZy5nZXRMYXN0QWN0aW9uVGV4dEFuZEFjdGlvbk5hbWUoc0FjdGlvbk5hbWUpO1xuXHR9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIHRhYmxlIHJvdy9jb2x1bW4gaW5mbyBhbmQgc2V0IHN1YnRpdGxlLlxuICogQHBhcmFtIGFNZXNzYWdlXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb0VsZW1lbnRcbiAqIEBwYXJhbSBvUm93QmluZGluZ1xuICogQHBhcmFtIHNBY3Rpb25OYW1lXG4gKiBAcGFyYW0gc2V0U2VjdGlvbk5hbWVJbkdyb3VwXG4gKiBAcGFyYW0gZm5TZXRHcm91cE5hbWVcbiAqIEByZXR1cm5zIFRhYmxlIGluZm8gYW5kIFN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlKFxuXHRhTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZyxcblx0c0FjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwOiBib29sZWFuLFxuXHRmblNldEdyb3VwTmFtZTogRnVuY3Rpb25cbik6IHsgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZTsgc3ViVGl0bGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgfSB7XG5cdGNvbnN0IG9UYXJnZXRUYWJsZUluZm8gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVBbmRUYXJnZXRJbmZvKG9UYWJsZSwgYU1lc3NhZ2UsIG9FbGVtZW50LCBvUm93QmluZGluZyk7XG5cdG9UYXJnZXRUYWJsZUluZm8udGFibGVIZWFkZXIgPSBvVGFibGUuZ2V0SGVhZGVyKCk7XG5cblx0bGV0IHNDb250cm9sSWQsIGJJc0NyZWF0aW9uUm93O1xuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCkge1xuXHRcdHNDb250cm9sSWQgPSBhTWVzc2FnZS5nZXRDb250cm9sSWRzKCkuZmluZChmdW5jdGlvbiAoc0lkOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBtZXNzYWdlSGFuZGxpbmcuaXNDb250cm9sSW5UYWJsZShvVGFibGUsIHNJZCk7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoc0NvbnRyb2xJZCkge1xuXHRcdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzQ29udHJvbElkKTtcblx0XHRiSXNDcmVhdGlvblJvdyA9IG1lc3NhZ2VIYW5kbGluZy5pc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyhvQ29udHJvbCk7XG5cdH1cblxuXHRpZiAoIW9UYXJnZXRUYWJsZUluZm8uc1RhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdC8vIGlmIHRoZSBjb2x1bW4gaXMgbm90IHByZXNlbnQgb24gVUkgb3IgdGhlIHRhcmdldCBkb2VzIG5vdCBoYXZlIGEgdGFibGUgZmllbGQgaW4gaXQsIHVzZSBMYXN0IEFjdGlvbiBmb3IgZ3JvdXBpbmdcblx0XHRpZiAoYU1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpICYmIHNBY3Rpb25OYW1lKSB7XG5cdFx0XHRmblNldEdyb3VwTmFtZShhTWVzc2FnZSwgc0FjdGlvbk5hbWUpO1xuXHRcdFx0c2V0U2VjdGlvbk5hbWVJbkdyb3VwID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3ViVGl0bGUgPSBtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZVN1YnRpdGxlKFxuXHRcdGFNZXNzYWdlLFxuXHRcdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93QmluZGluZ0NvbnRleHRzLFxuXHRcdG9UYXJnZXRUYWJsZUluZm8ub1RhYmxlUm93Q29udGV4dCxcblx0XHRvVGFyZ2V0VGFibGVJbmZvLnNUYWJsZVRhcmdldENvbE5hbWUsXG5cdFx0b1RhYmxlLFxuXHRcdGJJc0NyZWF0aW9uUm93XG5cdCk7XG5cblx0cmV0dXJuIHsgb1RhcmdldFRhYmxlSW5mbywgc3ViVGl0bGUgfTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIHRoZSBzdWJ0aXRsZSBiYXNlZCBvbiBUYWJsZSBSb3cvQ29sdW1uIGRhdGEuXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHBhcmFtIHRhYmxlUm93QmluZGluZ0NvbnRleHRzXG4gKiBAcGFyYW0gdGFibGVSb3dDb250ZXh0XG4gKiBAcGFyYW0gdGFibGVUYXJnZXRDb2xOYW1lXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSBpc0NyZWF0aW9uUm93XG4gKiBAcGFyYW0gdGFyZ2V0ZWRDb250cm9sXG4gKiBAcmV0dXJucyBNZXNzYWdlIHN1YnRpdGxlLlxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlU3VidGl0bGUoXG5cdG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyLFxuXHR0YWJsZVJvd0JpbmRpbmdDb250ZXh0czogQ29udGV4dFtdLFxuXHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHR0YWJsZVRhcmdldENvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0dGFibGU6IE1EQ1RhYmxlLFxuXHRpc0NyZWF0aW9uUm93OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHR0YXJnZXRlZENvbnRyb2w/OiBDb250cm9sXG4pOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IG1lc3NhZ2VTdWJ0aXRsZTtcblx0bGV0IHJvd1N1YnRpdGxlVmFsdWU7XG5cdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRhYmxlKTtcblx0Y29uc3QgdGFibGVDb2xQcm9wZXJ0eSA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSk/LmdldFRhYmxlQ29sdW1uVmlzaWJpbGl0eUluZm8odGFibGVSb3dDb250ZXh0KTtcblx0Y29uc3QgY29sRnJvbVRhYmxlU2V0dGluZ3MgPSBtZXNzYWdlSGFuZGxpbmcuZmV0Y2hDb2x1bW5JbmZvKG1lc3NhZ2UsIHRhYmxlKTtcblx0aWYgKGlzQ3JlYXRpb25Sb3cgfHwgdGFibGVSb3dDb250ZXh0Py5pc0luYWN0aXZlKCkpIHtcblx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbXG5cdFx0XHRyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9DUkVBVElPTl9ST1dfSU5ESUNBVE9SXCIpLFxuXHRcdFx0dGFibGVUYXJnZXRDb2xOYW1lID8gdGFibGVUYXJnZXRDb2xOYW1lIDogKGNvbEZyb21UYWJsZVNldHRpbmdzIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbikubGFiZWxcblx0XHRdKTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24gPSBtZXNzYWdlSGFuZGxpbmcuZ2V0VGFibGVDb2xCaW5kaW5nQ29udGV4dEZvclRleHRBbm5vdGF0aW9uKFxuXHRcdFx0dGFibGUsXG5cdFx0XHR0YWJsZVJvd0NvbnRleHQsXG5cdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0KTtcblx0XHRjb25zdCB0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCA9IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0PyB0YWJsZUNvbEJpbmRpbmdDb250ZXh0VGV4dEFubm90YXRpb24uZ2V0T2JqZWN0KFwiJFBhdGhcIilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRhYmxlQ29sVGV4dEFycmFuZ2VtZW50ID1cblx0XHRcdHRhYmxlQ29sVGV4dEFubm90YXRpb25QYXRoICYmIHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQ/IHRhYmxlQ29sQmluZGluZ0NvbnRleHRUZXh0QW5ub3RhdGlvbi5nZXRPYmplY3QoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50LyRFbnVtTWVtYmVyXCIpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGlmICh0YWJsZVJvd0JpbmRpbmdDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBzZXQgUm93IHN1YnRpdGxlIHRleHRcblx0XHRcdGlmICh0YXJnZXRlZENvbnRyb2wpIHtcblx0XHRcdFx0Ly8gVGhlIFVJIGVycm9yIGlzIG9uIHRoZSBmaXJzdCBjb2x1bW4sIHdlIHRoZW4gZ2V0IHRoZSBjb250cm9sIGlucHV0IGFzIHRoZSByb3cgaW5kaWNhdG9yOlxuXHRcdFx0XHRyb3dTdWJ0aXRsZVZhbHVlID0gKHRhcmdldGVkQ29udHJvbCBhcyBGaWVsZEFQSSkuZ2V0VmFsdWUoKTtcblx0XHRcdH0gZWxzZSBpZiAodGFibGVSb3dDb250ZXh0ICYmIHRhYmxlQ29sUHJvcGVydHkgJiYgdGFibGVDb2xQcm9wZXJ0eS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gR2V0dGluZyB0aGUgY29sdW1uIGxhYmVsIGFuZCBpdHMgdmFsdWUgb2YgYSBzaW5nbGUgcm93XG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRUYWJsZUNvbFZhbHVlKFxuXHRcdFx0XHRcdHRhYmxlUm93Q29udGV4dCxcblx0XHRcdFx0XHR0YWJsZUNvbFRleHRBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHR0YWJsZUNvbFRleHRBcnJhbmdlbWVudCxcblx0XHRcdFx0XHR0YWJsZUNvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRhYmxlUm93Q29udGV4dCAmJiB0YWJsZUNvbFByb3BlcnR5ICYmIHRhYmxlQ29sUHJvcGVydHkubGVuZ3RoID4gMSkge1xuXHRcdFx0XHQvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcm93cywgdGhlIHN1YnRpdGxlIGlzIGRpc3BsYXllZCBhcyDigJhTZWUgbWVzc2FnZSBkZXRhaWxz4oCZXG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRV9ERVRBSUxFRF9ST1dfSU5GT1wiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJvd1N1YnRpdGxlVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBzZXQgdGhlIG1lc3NhZ2Ugc3VidGl0bGVcblx0XHRcdGNvbnN0IG9Db2x1bW5JbmZvOiBDb2x1bW5JbmZvVHlwZSA9IG1lc3NhZ2VIYW5kbGluZy5kZXRlcm1pbmVDb2x1bW5JbmZvKGNvbEZyb21UYWJsZVNldHRpbmdzLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGlmIChyb3dTdWJ0aXRsZVZhbHVlICYmIHRhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfSVRFTV9TVUJUSVRMRVwiLCBbcm93U3VidGl0bGVWYWx1ZSwgdGFibGVUYXJnZXRDb2xOYW1lXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJIaWRkZW5cIikge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSBgJHtyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfUk9XX1dJVEhfSURFTlRJRklFUlwiLCBbcm93U3VidGl0bGVWYWx1ZV0pfSwgJHtcblx0XHRcdFx0XHRvQ29sdW1uSW5mby5zQ29sdW1uVmFsdWVcblx0XHRcdFx0fWA7XG5cdFx0XHR9IGVsc2UgaWYgKHJvd1N1YnRpdGxlVmFsdWUgJiYgb0NvbHVtbkluZm8uc0NvbHVtbkluZGljYXRvciA9PT0gXCJVbmtub3duXCIpIHtcblx0XHRcdFx0bWVzc2FnZVN1YnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX1JPV19XSVRIX0lERU5USUZJRVJcIiwgW3Jvd1N1YnRpdGxlVmFsdWVdKTtcblx0XHRcdH0gZWxzZSBpZiAocm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9ERVNDUklQVElPTl9UQUJMRV9ST1dfV0lUSF9JREVOVElGSUVSXCIsIFtyb3dTdWJ0aXRsZVZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFyb3dTdWJ0aXRsZVZhbHVlICYmIHRhYmxlVGFyZ2V0Q29sTmFtZSkge1xuXHRcdFx0XHRtZXNzYWdlU3VidGl0bGUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJUX01FU1NBR0VfR1JPVVBfREVTQ1JJUFRJT05fVEFCTEVfQ09MVU1OXCIpICsgXCI6IFwiICsgdGFibGVUYXJnZXRDb2xOYW1lO1xuXHRcdFx0fSBlbHNlIGlmICghcm93U3VidGl0bGVWYWx1ZSAmJiBvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID09PSBcIkhpZGRlblwiKSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1lc3NhZ2VTdWJ0aXRsZSA9IG51bGw7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtZXNzYWdlU3VidGl0bGU7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBmaXJzdCBjb2x1bW4gZm9yIHRleHQgQW5ub3RhdGlvbiwgdGhpcyBpcyBuZWVkZWQgdG8gc2V0IHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSB0YWJsZVJvd0NvbnRleHRcbiAqIEBwYXJhbSB0YWJsZUNvbFByb3BlcnR5XG4gKiBAcmV0dXJucyBCaW5kaW5nIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbihcblx0dGFibGU6IE1EQ1RhYmxlLFxuXHR0YWJsZVJvd0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHR0YWJsZUNvbFByb3BlcnR5OiBUYWJsZUNvbHVtblByb3BlcnRpZXNcbik6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0bGV0IGJpbmRpbmdDb250ZXh0O1xuXHRpZiAodGFibGVSb3dDb250ZXh0ICYmIHRhYmxlQ29sUHJvcGVydHkgJiYgdGFibGVDb2xQcm9wZXJ0eS5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCB7IGtleSB9ID0gdGFibGVDb2xQcm9wZXJ0eVswXTtcblx0XHRjb25zdCBvTW9kZWwgPSB0YWJsZT8uZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb01vZGVsPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDsgLy8gbXVzdCBiZSBhbiBPRGF0YU1ldGFNb2RlbCB0byBtYXRjaCB0aGUgdHlwZSBvZiB0aGUgdGFibGUgcm93IGNvbnRleHRcblx0XHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsPy5nZXRNZXRhUGF0aCh0YWJsZVJvd0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRpZiAob01ldGFNb2RlbD8uZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vJHtrZXl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0LyRQYXRoYCkpIHtcblx0XHRcdGJpbmRpbmdDb250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzTWV0YVBhdGh9LyR7a2V5fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dGApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYmluZGluZ0NvbnRleHQ7XG59XG5cbi8qKlxuICogVGhlIG1ldGhvZCB0aGF0IGlzIGNhbGxlZCB0byByZXRyaWV2ZSB0aGUgY29sdW1uIGluZm8gZnJvbSB0aGUgYXNzb2NpYXRlZCBtZXNzYWdlIG9mIHRoZSBtZXNzYWdlIHBvcG92ZXIuXG4gKiBAcGFyYW0gb01lc3NhZ2UgTWVzc2FnZSBvYmplY3RcbiAqIEBwYXJhbSBvVGFibGUgTWRjVGFibGVcbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbHVtbiBpbmZvLlxuICovXG5cbmZ1bmN0aW9uIGZldGNoQ29sdW1uSW5mbyhvTWVzc2FnZTogTWVzc2FnZVdpdGhIZWFkZXIsIG9UYWJsZTogTURDVGFibGUpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmogPSBvTWVzc2FnZT8uZ2V0VGFyZ2V0cygpWzBdLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0cmV0dXJuIChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpPy5nZXRLZXlDb2x1bW5JbmZvKHNDb2xOYW1lRnJvbU1lc3NhZ2VPYmopO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgQ29sdW1uIGRhdGEgZGVwZW5kaW5nIG9uIGl0cyBhdmFpbGFiaWxpdHkgaW4gVGFibGUsIHRoaXMgaXMgbmVlZGVkIGZvciBzZXR0aW5nIHN1YnRpdGxlIG9mIE1lc3NhZ2UuXG4gKiBAcGFyYW0gb0NvbEZyb21UYWJsZVNldHRpbmdzXG4gKiBAcGFyYW0gcmVzb3VyY2VNb2RlbFxuICogQHJldHVybnMgQ29sdW1uIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZUNvbHVtbkluZm8ob0NvbEZyb21UYWJsZVNldHRpbmdzOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IENvbHVtbkluZm9UeXBlIHtcblx0Y29uc3Qgb0NvbHVtbkluZm86IENvbHVtbkluZm9UeXBlID0geyBzQ29sdW1uSW5kaWNhdG9yOiBcIlwiLCBzQ29sdW1uVmFsdWU6IFwiXCIgfTtcblx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncykge1xuXHRcdC8vIGlmIGNvbHVtbiBpcyBuZWl0aGVyIGluIHRhYmxlIGRlZmluaXRpb24gbm9yIHBlcnNvbmFsaXphdGlvbiwgc2hvdyBvbmx5IHJvdyBzdWJ0aXRsZSB0ZXh0XG5cdFx0aWYgKG9Db2xGcm9tVGFibGVTZXR0aW5ncy5hdmFpbGFiaWxpdHkgPT09IFwiSGlkZGVuXCIpIHtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5WYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcInVuZGVmaW5lZFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL2lmIGNvbHVtbiBpcyBpbiB0YWJsZSBwZXJzb25hbGl6YXRpb24gYnV0IG5vdCBpbiB0YWJsZSBkZWZpbml0aW9uLCBzaG93IENvbHVtbiAoSGlkZGVuKSA6IDxjb2xOYW1lPlxuXHRcdFx0b0NvbHVtbkluZm8uc0NvbHVtblZhbHVlID0gYCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiVF9NRVNTQUdFX0dST1VQX0RFU0NSSVBUSU9OX1RBQkxFX0NPTFVNTlwiKX0gKCR7cmVzb3VyY2VNb2RlbC5nZXRUZXh0KFxuXHRcdFx0XHRcIlRfQ09MVU1OX0lORElDQVRPUl9JTl9UQUJMRV9ERUZJTklUSU9OXCJcblx0XHRcdCl9KTogJHtvQ29sRnJvbVRhYmxlU2V0dGluZ3MubGFiZWx9YDtcblx0XHRcdG9Db2x1bW5JbmZvLnNDb2x1bW5JbmRpY2F0b3IgPSBcIkhpZGRlblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRvQ29sdW1uSW5mby5zQ29sdW1uSW5kaWNhdG9yID0gXCJVbmtub3duXCI7XG5cdH1cblx0cmV0dXJuIG9Db2x1bW5JbmZvO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2sgaWYgYSBnaXZlbiBjb250cm9sIGlkIGlzIGEgcGFydCBvZiBUYWJsZS5cbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzQ29udHJvbElkXG4gKiBAcmV0dXJucyBUcnVlIGlmIGNvbnRyb2wgaXMgcGFydCBvZiB0YWJsZS5cbiAqL1xuZnVuY3Rpb24gaXNDb250cm9sSW5UYWJsZShvVGFibGU6IE1EQ1RhYmxlLCBzQ29udHJvbElkOiBzdHJpbmcpOiBVSTVFbGVtZW50W10gfCBib29sZWFuIHtcblx0Y29uc3Qgb0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHNDb250cm9sSWQpO1xuXHRpZiAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQTxVSVRhYmxlPihcInNhcC51aS50YWJsZS5UYWJsZVwiKSAmJiAhb0NvbnRyb2wuaXNBPFRhYmxlPihcInNhcC5tLlRhYmxlXCIpKSB7XG5cdFx0cmV0dXJuIG9UYWJsZS5maW5kRWxlbWVudHModHJ1ZSwgZnVuY3Rpb24gKG9FbGVtOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gb0VsZW0uZ2V0SWQoKSA9PT0gb0NvbnRyb2wuZ2V0SWQoKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93KG9Db250cm9sOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGxldCBvUGFyZW50Q29udHJvbCA9IG9Db250cm9sPy5nZXRQYXJlbnQoKTtcblx0d2hpbGUgKFxuXHRcdG9QYXJlbnRDb250cm9sICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuUm93XCIpICYmXG5cdFx0IW9QYXJlbnRDb250cm9sPy5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIikgJiZcblx0XHQhb1BhcmVudENvbnRyb2w/LmlzQShcInNhcC5tLkNvbHVtbkxpc3RJdGVtXCIpXG5cdCkge1xuXHRcdG9QYXJlbnRDb250cm9sID0gb1BhcmVudENvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblxuXHRyZXR1cm4gISFvUGFyZW50Q29udHJvbCAmJiBvUGFyZW50Q29udHJvbC5pc0EoXCJzYXAudWkudGFibGUuQ3JlYXRpb25Sb3dcIik7XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cdHN3aXRjaCAoc0hpZ2hlc3RQcmlvcml0eSkge1xuXHRcdGNhc2UgXCJFcnJvclwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1NVQ0NFU1NcIik7XG5cdFx0Y2FzZSBcIldhcm5pbmdcIjpcblx0XHRcdHJldHVybiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpOiB2b2lkIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpOiB2b2lkIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogTWVzc2FnZU1vZGVsLCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKTogTWVzc2FnZVtdIHtcblx0aWYgKHNQYXRoVG9CZVJlbW92ZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdH1cblx0Y29uc3QgbGlzdEJpbmRpbmcgPSBvTWVzc2FnZU1vZGVsLmJpbmRMaXN0KFwiL1wiKTtcblxuXHRsaXN0QmluZGluZy5maWx0ZXIoXG5cdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LnN0YXJ0c1dpdGgoc1BhdGhUb0JlUmVtb3ZlZCkpXG5cdFx0fSlcblx0KTtcblxuXHRyZXR1cm4gbGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkubWFwKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdHJldHVybiBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0fSk7XG59XG5cbi8qKlxuICogR2V0IHJlbGV2YW50IG1lc3NhZ2VzLlxuICogQHBhcmFtIGJCb3VuZE1lc3NhZ2VzIFRvIGdldCBvbmx5IGJvdW5kIG1lc3NhZ2VzXG4gKiBAcGFyYW0gYlRyYW5zaXRpb25Pbmx5IFRvIGdldCBvbmx5IHRyYW5zaXRpb24gbWVzc2FnZXNcbiAqIEBwYXJhbSBzUGF0aFRvQmVSZW1vdmVkIEZpbHRlciBvdXQgYm91bmQgbWVzc2FnZXMgd2l0aCBwYXRoXG4gKiBAcmV0dXJucyBNZXNzYWdlc1xuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlcyA9IGZhbHNlLCBiVHJhbnNpdGlvbk9ubHkgPSBmYWxzZSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IE1lc3NhZ2VbXSB7XG5cdGxldCBpO1xuXHRjb25zdCBvTWVzc2FnZU1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSEsXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXHRsZXQgYU1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblx0aWYgKGJCb3VuZE1lc3NhZ2VzICYmIGJUcmFuc2l0aW9uT25seSAmJiBzUGF0aFRvQmVSZW1vdmVkKSB7XG5cdFx0YU1lc3NhZ2VzID0gZ2V0TWVzc2FnZXNGcm9tTWVzc2FnZU1vZGVsKG9NZXNzYWdlTW9kZWwsIHNQYXRoVG9CZVJlbW92ZWQpO1xuXHR9IGVsc2Uge1xuXHRcdGFNZXNzYWdlcyA9IG9NZXNzYWdlTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0fVxuXHRmb3IgKGkgPSAwOyBpIDwgYU1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0KCFiVHJhbnNpdGlvbk9ubHkgfHwgYU1lc3NhZ2VzW2ldLmdldFBlcnNpc3RlbnQoKSkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSAhPT0gXCJcIikgfHxcblx0XHRcdFx0KCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS5nZXRUYXJnZXRzKClbMF0gfHwgYU1lc3NhZ2VzW2ldLmdldFRhcmdldHMoKVswXSA9PT0gXCJcIikpKVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlcy5wdXNoKGFNZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldENvZGUoKSA9PT0gXCI1MDNcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5nZXRNZXNzYWdlKCkgIT09IFwiXCIgJiZcblx0XHRcdCFhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmdldE1lc3NhZ2UoKS5pbmNsdWRlcyhvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIikpXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLnNldE1lc3NhZ2UoXG5cdFx0XHRcdGBcXG4ke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKX0ke2FUcmFuc2l0aW9uTWVzc2FnZXNbaV0uZ2V0TWVzc2FnZSgpfWBcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8vRmlsdGVyaW5nIG1lc3NhZ2VzIGFnYWluIGhlcmUgdG8gYXZvaWQgc2hvd2luZyBwdXJlIHRlY2huaWNhbCBtZXNzYWdlcyByYWlzZWQgYnkgdGhlIG1vZGVsXG5cdGNvbnN0IGJhY2tlbmRNZXNzYWdlczogTWVzc2FnZVtdID0gYVRyYW5zaXRpb25NZXNzYWdlcy5maWx0ZXIoaXNOb25UZWNobmljYWxNZXNzYWdlKTtcblxuXHRyZXR1cm4gYmFja2VuZE1lc3NhZ2VzO1xufVxuZXhwb3J0IHR5cGUgTWVzc2FnZVRlY2huaWNhbERldGFpbHMgPSB7XG5cdG9yaWdpbmFsTWVzc2FnZT86IHtcblx0XHRtZXNzYWdlPzogc3RyaW5nO1xuXHR9IHwgbnVsbDtcblx0aHR0cFN0YXR1cz86IG51bWJlciB8IG51bGw7XG5cdHJldHJ5QWZ0ZXI/OiBEYXRlO1xuXHRpc0NvbmN1cnJlbnRNb2RpZmljYXRpb24/OiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYm9vbGVhbiwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZyk6IHZvaWQge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cbi8vVE9ETzogVGhpcyBtdXN0IGJlIG1vdmVkIG91dCBvZiBtZXNzYWdlIGhhbmRsaW5nXG5mdW5jdGlvbiBzZXRNZXNzYWdlU3VidGl0bGUob1RhYmxlOiBNRENUYWJsZSwgYUNvbnRleHRzOiBDb250ZXh0W10sIG1lc3NhZ2U6IE1lc3NhZ2VXaXRoSGVhZGVyKTogdm9pZCB7XG5cdGlmIChtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBzdWJ0aXRsZUNvbHVtbiA9IChvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldElkZW50aWZpZXJDb2x1bW4oKSBhcyBzdHJpbmc7XG5cdFx0Y29uc3QgZXJyb3JDb250ZXh0ID0gYUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uaW5jbHVkZXMob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHR9KTtcblx0XHRtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID0gZXJyb3JDb250ZXh0ID8gZXJyb3JDb250ZXh0LmdldE9iamVjdCgpW3N1YnRpdGxlQ29sdW1uXSA6IHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIFRoZSBtZXRob2QgcmV0cmlldmVzIHRoZSB2aXNpYmxlIHNlY3Rpb25zIGZyb20gYW4gb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gb09iamVjdFBhZ2VMYXlvdXQgVGhlIG9iamVjdFBhZ2VMYXlvdXQgb2JqZWN0IGZvciB3aGljaCB3ZSB3YW50IHRvIHJldHJpZXZlIHRoZSB2aXNpYmxlIHNlY3Rpb25zLlxuICogQHJldHVybnMgQXJyYXkgb2YgdmlzaWJsZSBzZWN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZVNlY3Rpb25zRnJvbU9iamVjdFBhZ2VMYXlvdXQob09iamVjdFBhZ2VMYXlvdXQ6IENvbnRyb2wgfCBPYmplY3RQYWdlTGF5b3V0KTogT2JqZWN0UGFnZVNlY3Rpb25bXSB7XG5cdHJldHVybiAob09iamVjdFBhZ2VMYXlvdXQgYXMgT2JqZWN0UGFnZUxheW91dCkuZ2V0U2VjdGlvbnMoKS5maWx0ZXIoZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdHJldHVybiBvU2VjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGNvbnRyb2wgaWRzIGZyb20gbWVzc2FnZSBhcmUgYSBwYXJ0IG9mIGEgZ2l2ZW4gc3Vic2VjdGlvbi5cbiAqIEBwYXJhbSBzdWJTZWN0aW9uXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEByZXR1cm5zIFN1YlNlY3Rpb24gbWF0Y2hpbmcgY29udHJvbCBpZHMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uKHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIpOiBVSTVFbGVtZW50W10ge1xuXHRyZXR1cm4gc3ViU2VjdGlvblxuXHRcdC5maW5kRWxlbWVudHModHJ1ZSwgKG9FbGVtKSA9PiB7XG5cdFx0XHRyZXR1cm4gZm5GaWx0ZXJVcG9uSWRzKG9NZXNzYWdlT2JqZWN0LmdldENvbnRyb2xJZHMoKSwgb0VsZW0pO1xuXHRcdH0pXG5cdFx0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcblx0XHRcdC8vIGNvbnRyb2xzIGFyZSBzb3J0ZWQgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgdGFibGUgb24gdG9wIG9mIHRoZSBhcnJheVxuXHRcdFx0Ly8gaXQgd2lsbCBoZWxwIHRvIGNvbXB1dGUgdGhlIHN1YnRpdGxlIG9mIHRoZSBtZXNzYWdlIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHJlbGF0ZWQgY29udHJvbHNcblx0XHRcdGlmIChhLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgJiYgIWIuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGU6IENvbnRyb2wsIG9NZXNzYWdlT2JqZWN0OiBNZXNzYWdlV2l0aEhlYWRlciwgb0NvbnRleHRQYXRoPzogc3RyaW5nIHwgUmVnRXhwKTogc3RyaW5nIHtcblx0Ly90aGlzIGZ1bmN0aW9uIGVzY2FwZXMgYSBzdHJpbmcgdG8gdXNlIGl0IGFzIGEgcmVnZXhcblx0Y29uc3QgZm5SZWdFeHBlc2NhcGUgPSBmdW5jdGlvbiAoczogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcblx0fTtcblx0Ly8gYmFzZWQgb24gdGhlIHRhcmdldCBwYXRoIG9mIHRoZSBtZXNzYWdlIHdlIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBuYW1lLlxuXHQvLyB0byBhY2hpZXZlIGl0IHdlIHJlbW92ZSB0aGUgYmluZGluZ0NvbnRleHQgcGF0aCBhbmQgdGhlIHJvdyBiaW5kaW5nIHBhdGggZnJvbSB0aGUgdGFyZ2V0XG5cdGlmICghb0NvbnRleHRQYXRoKSB7XG5cdFx0Y29uc3QgY29udGV4dFBhdGhUb0VzY2FwZSA9IGAke29UYWJsZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7KG9UYWJsZSBhcyBNRENUYWJsZSkuZ2V0Um93QmluZGluZygpLmdldFBhdGgoKX1gO1xuXHRcdG9Db250ZXh0UGF0aCA9IG5ldyBSZWdFeHAoYCR7Zm5SZWdFeHBlc2NhcGUoY29udGV4dFBhdGhUb0VzY2FwZSl9XFxcXCguKlxcXFwpL2ApO1xuXHR9XG5cdHJldHVybiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0ucmVwbGFjZShvQ29udGV4dFBhdGgsIFwiXCIpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2l2ZXMgdGhlIGNvbHVtbiBpbmZvcm1hdGlvbiBpZiBpdCBtYXRjaGVzIHdpdGggdGhlIHByb3BlcnR5IG5hbWUgZnJvbSB0YXJnZXQgb2YgbWVzc2FnZS5cbiAqIEBwYXJhbSBvVGFibGVcbiAqIEBwYXJhbSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eVxuICogQHJldHVybnMgQ29sdW1uIG5hbWUgYW5kIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRUYWJsZUNvbEluZm8oXG5cdG9UYWJsZTogTURDVGFibGUsXG5cdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkOyBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eTogc3RyaW5nIHwgdW5kZWZpbmVkIH0ge1xuXHRsZXQgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBvVGFibGVUYXJnZXRDb2w6IENvbHVtbiB8IHVuZGVmaW5lZCA9IG9UYWJsZS5nZXRDb2x1bW5zKCkuZmluZChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdFx0cmV0dXJuIGNvbHVtbi5nZXRQcm9wZXJ0eUtleSgpID09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5O1xuXHR9KTtcblx0aWYgKCFvVGFibGVUYXJnZXRDb2wpIHtcblx0XHQvKiBJZiB0aGUgdGFyZ2V0IGNvbHVtbiBpcyBub3QgZm91bmQsIHdlIGNoZWNrIGZvciBhIGN1c3RvbSBjb2x1bW4gKi9cblx0XHRjb25zdCBvQ3VzdG9tQ29sdW1uID0gKG9UYWJsZS5nZXRDb250cm9sRGVsZWdhdGUoKSBhcyB0eXBlb2YgVGFibGVEZWxlZ2F0ZSkuZ2V0Q29sdW1uc0ZvcihvVGFibGUpLmZpbmQoZnVuY3Rpb24gKFxuXHRcdFx0b0NvbHVtbjogVGFibGVDb2x1bW5cblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGlmICghIShvQ29sdW1uIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4pLnRlbXBsYXRlICYmIG9Db2x1bW4ucHJvcGVydHlJbmZvcykge1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdG9Db2x1bW4ucHJvcGVydHlJbmZvc1swXSA9PT0gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgfHxcblx0XHRcdFx0XHRvQ29sdW1uLnByb3BlcnR5SW5mb3NbMF0ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSkgYXMgQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZDtcblx0XHRpZiAob0N1c3RvbUNvbHVtbikge1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBvQ3VzdG9tQ29sdW1uPy5uYW1lO1xuXG5cdFx0XHRzVGFibGVUYXJnZXRDb2xOYW1lID0gb1RhYmxlXG5cdFx0XHRcdC5nZXRDb2x1bW5zKClcblx0XHRcdFx0LmZpbmQoZnVuY3Rpb24gKG9Db2x1bW4pOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPT09IG9Db2x1bW4uZ2V0UHJvcGVydHlLZXkoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0Py5nZXRIZWFkZXIoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyogSWYgdGhlIHRhcmdldCBjb2x1bW4gaXMgbm90IGZvdW5kLCB3ZSBjaGVjayBmb3IgYSBmaWVsZCBncm91cCAqL1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSAob1RhYmxlLmdldENvbnRyb2xEZWxlZ2F0ZSgpIGFzIHR5cGVvZiBUYWJsZURlbGVnYXRlKS5nZXRDb2x1bW5zRm9yKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBjb2x1bW5EZWZpbml0aW9uID0gYUNvbHVtbnMuZmluZChmdW5jdGlvbiAob0NvbHVtbjogVGFibGVDb2x1bW4pIHtcblx0XHRcdFx0aWYgKG9Db2x1bW4ua2V5LmluY2x1ZGVzKFwiOjpGaWVsZEdyb3VwOjpcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbHVtbi5wcm9wZXJ0eUluZm9zPy5maW5kKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm86IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvID09PSBzVGFibGVUYXJnZXRDb2xQcm9wZXJ0eSB8fCBwcm9wZXJ0eUluZm8ucmVwbGFjZShcIlByb3BlcnR5OjpcIiwgXCJcIikgPT09IHNUYWJsZVRhcmdldENvbFByb3BlcnR5XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4gfCB1bmRlZmluZWQ7XG5cdFx0XHQvKiBjaGVjayBpZiB0aGUgY29sdW1uIHdpdGggdGhlIGZpZWxkIGdyb3VwIGlzIHZpc2libGUgaW4gdGhlIHRhYmxlOiAqL1xuXHRcdFx0bGV0IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0aWYgKGNvbHVtbkRlZmluaXRpb24gJiYgY29sdW1uRGVmaW5pdGlvbi5sYWJlbCkge1xuXHRcdFx0XHRiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPSBvVGFibGUuZ2V0Q29sdW1ucygpLnNvbWUoZnVuY3Rpb24gKGNvbHVtbikge1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW4uZ2V0SGVhZGVyKCkgPT09IGNvbHVtbkRlZmluaXRpb24ubGFiZWw7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZSA9IGJJc1RhYmxlVGFyZ2V0Q29sVmlzaWJsZSA/IGNvbHVtbkRlZmluaXRpb24/LmxhYmVsIDogdW5kZWZpbmVkO1xuXHRcdFx0c1RhYmxlVGFyZ2V0Q29sUHJvcGVydHkgPSBiSXNUYWJsZVRhcmdldENvbFZpc2libGUgPyBjb2x1bW5EZWZpbml0aW9uPy5rZXkgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNUYWJsZVRhcmdldENvbE5hbWUgPSBvVGFibGVUYXJnZXRDb2wuZ2V0SGVhZGVyKCk7XG5cdH1cblx0cmV0dXJuIHsgc1RhYmxlVGFyZ2V0Q29sTmFtZTogc1RhYmxlVGFyZ2V0Q29sTmFtZSwgc1RhYmxlVGFyZ2V0Q29sUHJvcGVydHk6IHNUYWJsZVRhcmdldENvbFByb3BlcnR5IH07XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnaXZlcyBUYWJsZSBhbmQgY29sdW1uIGluZm8gaWYgYW55IG9mIGl0IG1hdGNoZXMgdGhlIHRhcmdldCBmcm9tIE1lc3NhZ2UuXG4gKiBAcGFyYW0gb1RhYmxlXG4gKiBAcGFyYW0gb01lc3NhZ2VPYmplY3RcbiAqIEBwYXJhbSBvRWxlbWVudFxuICogQHBhcmFtIG9Sb3dCaW5kaW5nXG4gKiBAcmV0dXJucyBUYWJsZSBpbmZvIG1hdGNoaW5nIHRoZSBtZXNzYWdlIHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbmRUYXJnZXRJbmZvKFxuXHRvVGFibGU6IE1EQ1RhYmxlLFxuXHRvTWVzc2FnZU9iamVjdDogTWVzc2FnZVdpdGhIZWFkZXIsXG5cdG9FbGVtZW50OiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkLFxuXHRvUm93QmluZGluZzogQmluZGluZ1xuKTogVGFyZ2V0VGFibGVJbmZvVHlwZSB7XG5cdGNvbnN0IHNUYWJsZVRhcmdldENvbFByb3BlcnR5ID0gZ2V0VGFibGVDb2xQcm9wZXJ0eShvVGFibGUsIG9NZXNzYWdlT2JqZWN0KTtcblx0Y29uc3Qgb1RhYmxlQ29sSW5mbyA9IGdldFRhYmxlQ29sSW5mbyhvVGFibGUsIHNUYWJsZVRhcmdldENvbFByb3BlcnR5KTtcblx0Y29uc3Qgb1RhYmxlUm93QmluZGluZ0NvbnRleHRzID0gb0VsZW1lbnQ/LmlzQShcInNhcC51aS50YWJsZS5UYWJsZVwiKVxuXHRcdD8gKG9Sb3dCaW5kaW5nIGFzIE9EYXRhTGlzdEJpbmRpbmcpLmdldENvbnRleHRzKClcblx0XHQ6IChvUm93QmluZGluZyBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0Y29uc3Qgb1RhcmdldFRhYmxlSW5mbzogVGFyZ2V0VGFibGVJbmZvVHlwZSA9IHtcblx0XHRvVGFibGVSb3dCaW5kaW5nQ29udGV4dHMsXG5cdFx0c1RhYmxlVGFyZ2V0Q29sTmFtZTogb1RhYmxlQ29sSW5mby5zVGFibGVUYXJnZXRDb2xOYW1lLFxuXHRcdHNUYWJsZVRhcmdldENvbFByb3BlcnR5OiBvVGFibGVDb2xJbmZvLnNUYWJsZVRhcmdldENvbFByb3BlcnR5LFxuXHRcdG9UYWJsZVJvd0NvbnRleHQ6IG9UYWJsZVJvd0JpbmRpbmdDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChyb3dDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gcm93Q29udGV4dCAmJiBvTWVzc2FnZU9iamVjdC5nZXRUYXJnZXRzKClbMF0uaW5kZXhPZihyb3dDb250ZXh0LmdldFBhdGgoKSkgPT09IDA7XG5cdFx0fSlcblx0fTtcblx0cmV0dXJuIG9UYXJnZXRUYWJsZUluZm87XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBhQ29udHJvbElkc1xuICogQHBhcmFtIG9JdGVtXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIG1hdGNoZXMgb25lIG9mIHRoZSBjb250cm9sc1xuICovXG5mdW5jdGlvbiBmbkZpbHRlclVwb25JZHMoYUNvbnRyb2xJZHM6IHN0cmluZ1tdLCBvSXRlbTogVUk1RWxlbWVudCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYUNvbnRyb2xJZHMuc29tZShmdW5jdGlvbiAoc0NvbnRyb2xJZCkge1xuXHRcdGlmIChzQ29udHJvbElkID09PSBvSXRlbS5nZXRJZCgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBncm91cCBuYW1lIGhhdmluZyBzZWN0aW9uIGFuZCBzdWJzZWN0aW9uIGRhdGEuXG4gKiBAcGFyYW0gc2VjdGlvblxuICogQHBhcmFtIHN1YlNlY3Rpb25cbiAqIEBwYXJhbSBiTXVsdGlwbGVTdWJTZWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRUYWJsZUluZm9cbiAqIEBwYXJhbSByZXNvdXJjZU1vZGVsXG4gKiBAcmV0dXJucyBHcm91cCBuYW1lLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTZWN0aW9uR3JvdXBOYW1lKFxuXHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0c3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24sXG5cdGJNdWx0aXBsZVN1YlNlY3Rpb25zOiBib29sZWFuLFxuXHRvVGFyZ2V0VGFibGVJbmZvOiBUYXJnZXRUYWJsZUluZm9UeXBlLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsXG4pOiBzdHJpbmcge1xuXHRyZXR1cm4gKFxuXHRcdHNlY3Rpb24uZ2V0VGl0bGUoKSArXG5cdFx0KHN1YlNlY3Rpb24uZ2V0VGl0bGUoKSAmJiBiTXVsdGlwbGVTdWJTZWN0aW9ucyA/IGAsICR7c3ViU2VjdGlvbi5nZXRUaXRsZSgpfWAgOiBcIlwiKSArXG5cdFx0KG9UYXJnZXRUYWJsZUluZm8gJiYgb1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlclxuXHRcdFx0PyBgLCAke3Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlRfTUVTU0FHRV9HUk9VUF9USVRMRV9UQUJMRV9ERU5PTUlOQVRPUlwiKX06ICR7b1RhcmdldFRhYmxlSW5mby50YWJsZUhlYWRlcn1gXG5cdFx0XHQ6IFwiXCIpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGJJc09ycGhhbkVsZW1lbnQob0VsZW1lbnQ6IFVJNUVsZW1lbnQsIGFFbGVtZW50czogVUk1RWxlbWVudFtdKTogYm9vbGVhbiB7XG5cdHJldHVybiAhYUVsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKG9FbGVtKSB7XG5cdFx0bGV0IG9QYXJlbnRFbGVtZW50ID0gb0VsZW1lbnQuZ2V0UGFyZW50KCk7XG5cdFx0d2hpbGUgKG9QYXJlbnRFbGVtZW50ICYmIG9QYXJlbnRFbGVtZW50ICE9PSBvRWxlbSkge1xuXHRcdFx0b1BhcmVudEVsZW1lbnQgPSBvUGFyZW50RWxlbWVudC5nZXRQYXJlbnQoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJlbnRFbGVtZW50ID8gdHJ1ZSA6IGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGZpbHRlcnMgYW5kIGdpdmVzIGJhY2sgdGhlIG1lc3NhZ2VzIGJhc2VkIG9uIHRoZSBjb250ZXh0IHBhc3NlZC5cbiAqIEBwYXJhbSBjb250ZXh0XG4gKiBAcmV0dXJucyBNZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0TWVzc2FnZXNGb3JDb250ZXh0KGNvbnRleHQ6IENvbnRleHQpOiBNZXNzYWdlW10ge1xuXHRjb25zdCBvTWVzc2FnZU1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpO1xuXHRjb25zdCBsaXN0QmluZGluZyA9IG9NZXNzYWdlTW9kZWwuYmluZExpc3QoXCIvXCIpO1xuXHRsaXN0QmluZGluZy5maWx0ZXIoXG5cdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0dGVzdDogKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA+IDAgJiYgbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0uc3RhcnRzV2l0aChjb250ZXh0LmdldFBhdGgoKSlcblx0XHR9KVxuXHQpO1xuXHRjb25zdCBjdXJyZW50Q29udGV4dHMgPSBsaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblx0cmV0dXJuIGN1cnJlbnRDb250ZXh0cy5tYXAoKGN1cnJlbnRDb250ZXh0KSA9PiBjdXJyZW50Q29udGV4dC5nZXRPYmplY3QoKSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBib29sZWFuIHRvIGNoZWNrIGlmIHRoZSB0YXJnZXQgaXMgcHJlc2VudCBpbiB0aGUgZGlhbG9nIGJhc2VkIG9uIHRoZSBjb250cm9sIElkcy5cbiAqIEBwYXJhbSBjb250cm9sSWRzIEFycmF5IG9mIGNvbnRyb2wgSWRzXG4gKiBAcmV0dXJucyBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIHRoZSB0YXJnZXQgcHJlc2VudCBpbiB0aGUgZGlhbG9nLlxuICovXG5mdW5jdGlvbiBpc01lc3NhZ2VPdXRPZlBhcmFtZXRlckRpYWxvZyhjb250cm9sSWRzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuXHRsZXQgb0NvbnRyb2w6IE1hbmFnZWRPYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkLCBlcnJvckZpZWxkQ29udHJvbDtcblx0Y29uc3QgaW5kZXggPSBJbmZpbml0eTtcblx0aWYgKGNvbnRyb2xJZHMubGVuZ3RoID09PSAxKSB7XG5cdFx0b0NvbnRyb2wgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRyb2xJZHNbMF0pO1xuXHRcdGVycm9yRmllbGRDb250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChjb250cm9sSWRzWzBdKSBhcyBVSTVFbGVtZW50O1xuXHR9IGVsc2Uge1xuXHRcdGxldCBlcnJvckNvbnRyb2xJZDtcblx0XHRjb250cm9sSWRzLmZvckVhY2goKGNvbnRyb2xJZCkgPT4ge1xuXHRcdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbElkKTtcblx0XHRcdGlmIChjb250cm9sPy5pc0EoXCJzYXAudWkubWRjLkZpZWxkXCIpKSB7XG5cdFx0XHRcdGVycm9yQ29udHJvbElkID0gY29udHJvbElkO1xuXHRcdFx0XHRvQ29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXJyb3JDb250cm9sSWQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHdoaWxlIChvQ29udHJvbCkge1xuXHRcdGNvbnN0IGZpZWxkUmFua2luRGlhbG9nID0gSW5maW5pdHk7XG5cdFx0aWYgKG9Db250cm9sIGluc3RhbmNlb2YgRGlhbG9nKSB7XG5cdFx0XHRpZiAoaW5kZXggPiBmaWVsZFJhbmtpbkRpYWxvZykge1xuXHRcdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBkaWFsb2cncyBjb250cm9sXG5cdFx0XHRcdGVycm9yRmllbGRDb250cm9sPy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gbWVzc2FnZXMgd2l0aCB0YXJnZXQgaW5zaWRlIHNhcC5tLkRpYWxvZyBzaG91bGQgbm90IGJyaW5nIHVwIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgVHJhbnNpdGlvbiBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBzcGVjaWZpZWQgY29udGV4dCBwYXRoIHdoZW4gdGhlIG9iamVjdCBwYWdlIGlzIGNsb3NlZC5cbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgYmluZGluZyBjb250ZXh0IGZvciB3aGljaCB0aGUgbWVzc2FnZXMgYXJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZVRyYW5zaXN0aW9uTWVzc2FnZUZvckNvbnRleHQob0NvbnRleHQ6IENvbnRleHQpOiB2b2lkIHtcblx0Y29uc3QgbWVzc2FnZXNJbk1vZGVsID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0Y29uc3QgaXNNZXNzYWdlU3RyaXBNZXNzYWdlOiBNZXNzYWdlW10gPSBbXTtcblxuXHRtZXNzYWdlc0luTW9kZWw/LmZvckVhY2goKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRjb25zdCBpc1NpbmdsZVRhcmdldCA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpLmxlbmd0aCA9PT0gMTtcblx0XHRjb25zdCBpc1RhcmdldE1hdGNoaW5nID0gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IG9Db250ZXh0Py5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgaXNUcmFuc2l0aW9uTWVzc2FnZSA9IG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlO1xuXG5cdFx0aWYgKGlzU2luZ2xlVGFyZ2V0ICYmIGlzVGFyZ2V0TWF0Y2hpbmcgJiYgaXNUcmFuc2l0aW9uTWVzc2FnZSkge1xuXHRcdFx0aXNNZXNzYWdlU3RyaXBNZXNzYWdlLnB1c2gobWVzc2FnZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRpZiAoaXNNZXNzYWdlU3RyaXBNZXNzYWdlLmxlbmd0aCA9PT0gMSkge1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhpc01lc3NhZ2VTdHJpcE1lc3NhZ2UpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIHJlbW92aW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGhlIGNvbnRleHQgZnJvbSB0aGUgbWVzc2FnZSBtb2RlbCB3aGVuIHRoZXJlIGlzIGVycm9yIG9uIHRoZSBkaWFsb2cgYW5kIHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuLlxuICogQHBhcmFtIG1lc3NhZ2VzIEFycmF5IG9mIG1lc3NhZ2VzXG4gKiBAcGFyYW0gY29udGV4dHMgQ29udGV4dHMgYXJyYXlcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ29udGV4dE1lc3NhZ2VzZnJvbU1vZGVsKG1lc3NhZ2VzPzogTWVzc2FnZVtdLCBjb250ZXh0cz86IENvbnRleHRbXSk6IHZvaWQge1xuXHRjb25zdCBib3VuZENvbnRleHRNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cdGlmIChjb250ZXh0cz8ubGVuZ3RoID09PSAxKSB7XG5cdFx0bWVzc2FnZXM/LmZvckVhY2goKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdGlmIChcblx0XHRcdFx0bWVzc2FnZS5nZXRUYXJnZXRzKCkubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSBjb250ZXh0cz8uWzBdPy5nZXRQYXRoKCkgJiZcblx0XHRcdFx0bWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWVcblx0XHRcdCkge1xuXHRcdFx0XHRib3VuZENvbnRleHRNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGlmIChib3VuZENvbnRleHRNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGJvdW5kQ29udGV4dE1lc3NhZ2VzKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZyBmcm9tIHNob3dpbmcgdGhlIG1lc3NhZ2VzLlxuICogQHBhcmFtIG1lc3NhZ2VzIEFycmF5IG9mIG1lc3NhZ2VzXG4gKiBAcmV0dXJucyBBcnJheSBvZiBtZXNzYWdlcyBhZnRlciByZW1vdmluZyB0aGUgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW1ldGVyRGlhbG9nKG1lc3NhZ2VzOiBNZXNzYWdlW10pOiBNZXNzYWdlW10ge1xuXHRjb25zdCBtZXNzYWdlc1RvQmVSZW1vdmVkID0gbWVzc2FnZXM/LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4gbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWUgJiYgbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gIT09IFwiXCIpO1xuXHRtZXNzYWdlcyA9IG1lc3NhZ2VzPy5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+ICFtZXNzYWdlc1RvQmVSZW1vdmVkPy5pbmNsdWRlcyhtZXNzYWdlKSk7XG5cdHJldHVybiBtZXNzYWdlcztcbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIGZvciBGaW9yaSBNZXNzYWdlIEhhbmRsaW5nXG4gKiBAbmFtZXNwYWNlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTYuMFxuICovXG5jb25zdCBtZXNzYWdlSGFuZGxpbmc6IG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiBnZXRNZXNzYWdlcyxcblx0Z2V0VUlEZWNpc2lvbnM6IGdldFVJRGVjaXNpb25zLFxuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdG1vZGlmeUVUYWdNZXNzYWdlc09ubHk6IGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSxcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IGdldFJldHJ5QWZ0ZXJNZXNzYWdlLFxuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyxcblx0c2V0TWVzc2FnZVN1YnRpdGxlOiBzZXRNZXNzYWdlU3VidGl0bGUsXG5cdGdldFZpc2libGVTZWN0aW9uc0Zyb21PYmplY3RQYWdlTGF5b3V0OiBnZXRWaXNpYmxlU2VjdGlvbnNGcm9tT2JqZWN0UGFnZUxheW91dCxcblx0Z2V0Q29udHJvbEZyb21NZXNzYWdlUmVsYXRpbmdUb1N1YlNlY3Rpb246IGdldENvbnRyb2xGcm9tTWVzc2FnZVJlbGF0aW5nVG9TdWJTZWN0aW9uLFxuXHRmbkZpbHRlclVwb25JZHM6IGZuRmlsdGVyVXBvbklkcyxcblx0Z2V0VGFibGVBbmRUYXJnZXRJbmZvOiBnZXRUYWJsZUFuZFRhcmdldEluZm8sXG5cdGNyZWF0ZVNlY3Rpb25Hcm91cE5hbWU6IGNyZWF0ZVNlY3Rpb25Hcm91cE5hbWUsXG5cdGJJc09ycGhhbkVsZW1lbnQ6IGJJc09ycGhhbkVsZW1lbnQsXG5cdGdldExhc3RBY3Rpb25UZXh0QW5kQWN0aW9uTmFtZTogZ2V0TGFzdEFjdGlvblRleHRBbmRBY3Rpb25OYW1lLFxuXHRnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlOiBnZXRUYWJsZUNvbHVtbkRhdGFBbmRTZXRTdWJ0aWxlLFxuXHRnZXRUYWJsZUNvbEluZm86IGdldFRhYmxlQ29sSW5mbyxcblx0Z2V0VGFibGVDb2xQcm9wZXJ0eTogZ2V0VGFibGVDb2xQcm9wZXJ0eSxcblx0Z2V0TWVzc2FnZVN1YnRpdGxlOiBnZXRNZXNzYWdlU3VidGl0bGUsXG5cdGRldGVybWluZUNvbHVtbkluZm86IGRldGVybWluZUNvbHVtbkluZm8sXG5cdGZldGNoQ29sdW1uSW5mbzogZmV0Y2hDb2x1bW5JbmZvLFxuXHRnZXRUYWJsZUNvbEJpbmRpbmdDb250ZXh0Rm9yVGV4dEFubm90YXRpb246IGdldFRhYmxlQ29sQmluZGluZ0NvbnRleHRGb3JUZXh0QW5ub3RhdGlvbixcblx0Z2V0TWVzc2FnZVJhbms6IGdldE1lc3NhZ2VSYW5rLFxuXHRoYXNUcmFuc2l0aW9uRXJyb3JzT3JXYXJuaW5nczogaGFzVHJhbnNpdGlvbkVycm9yc09yV2FybmluZ3MsXG5cdGZuQ2FsbGJhY2tTZXRHcm91cE5hbWU6IGZuQ2FsbGJhY2tTZXRHcm91cE5hbWUsXG5cdHNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGU6IHNldEdyb3VwTmFtZU9QRGlzcGxheU1vZGUsXG5cdHVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWU6IHVwZGF0ZU1lc3NhZ2VPYmplY3RHcm91cE5hbWUsXG5cdHNldEdyb3VwTmFtZUxSVGFibGU6IHNldEdyb3VwTmFtZUxSVGFibGUsXG5cdGlzQ29udHJvbEluVGFibGU6IGlzQ29udHJvbEluVGFibGUsXG5cdGlzQ29udHJvbFBhcnRPZkNyZWF0aW9uUm93OiBpc0NvbnRyb2xQYXJ0T2ZDcmVhdGlvblJvdyxcblx0cmVtb3ZlTWVzc2FnZVNob3duSW5NZXNzYWdlU3RyaXA6IHJlbW92ZU1lc3NhZ2VTaG93bkluTWVzc2FnZVN0cmlwLFxuXHRnZXRGaWx0ZXJzRm9yTWVzc2FnZXM6IGdldEZpbHRlcnNGb3JNZXNzYWdlcyxcblx0c2hvd01lc3NhZ2VzSW5VSTogc2hvd01lc3NhZ2VzSW5VSSxcblx0c2hvd01lc3NhZ2VEaWFsb2dDb250cm9sOiBzaG93TWVzc2FnZURpYWxvZ0NvbnRyb2wsXG5cdHNob3dNZXNzYWdlVG9hc3Q6IHNob3dNZXNzYWdlVG9hc3QsXG5cdHNob3dNZXNzYWdlQm94Q29udHJvbDogc2hvd01lc3NhZ2VCb3hDb250cm9sLFxuXHRnZXRNZXNzYWdlc0ZvckNvbnRleHQ6IGdldE1lc3NhZ2VzRm9yQ29udGV4dCxcblx0aXNNZXNzYWdlT3V0T2ZQYXJhbWV0ZXJEaWFsb2c6IGlzTWVzc2FnZU91dE9mUGFyYW1ldGVyRGlhbG9nLFxuXHRyZW1vdmVDb250ZXh0TWVzc2FnZXNmcm9tTW9kZWw6IHJlbW92ZUNvbnRleHRNZXNzYWdlc2Zyb21Nb2RlbCxcblx0cmVtb3ZlTWVzc2FnZXNGb3JBY3Rpb25QYXJhbWV0ZXJEaWFsb2c6IHJlbW92ZU1lc3NhZ2VzRm9yQWN0aW9uUGFyYW1ldGVyRGlhbG9nLFxuXHRzZXRHcm91cE5hbWVPUFRhYmxlRGlzcGxheU1vZGU6IHNldEdyb3VwTmFtZU9QVGFibGVEaXNwbGF5TW9kZSxcblx0dXBkYXRlQWRkdGlvbmFsVGV4dEZvck1lc3NhZ2VJbk9QVGFibGU6IHVwZGF0ZUFkZHRpb25hbFRleHRGb3JNZXNzYWdlSW5PUFRhYmxlLFxuXHR1cGRhdGVIZWFkZXJOYW1lRm9yTWVzc2FnZUluT1BUYWJsZTogdXBkYXRlSGVhZGVyTmFtZUZvck1lc3NhZ2VJbk9QVGFibGUsXG5cdGNsb3NlTWVzc2FnZUJveDogY2xvc2VNZXNzYWdlQm94LFxuXHRyZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0OiByZW1vdmVUcmFuc2lzdGlvbk1lc3NhZ2VGb3JDb250ZXh0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXNzYWdlSGFuZGxp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
|