@sapui5/sap.fe.macros 1.142.0 → 1.142.2
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/macros/.library +1 -1
- package/src/sap/fe/macros/Field.js +5 -5
- package/src/sap/fe/macros/Field.ts +5 -3
- package/src/sap/fe/macros/FooterContent.js +3 -2
- package/src/sap/fe/macros/FooterContent.tsx +2 -10
- package/src/sap/fe/macros/MessageButton.js +3 -3
- package/src/sap/fe/macros/MessageButton.tsx +3 -2
- package/src/sap/fe/macros/Page.js +8 -4
- package/src/sap/fe/macros/Page.tsx +13 -4
- package/src/sap/fe/macros/RichTextEditor.js +12 -14
- package/src/sap/fe/macros/RichTextEditor.tsx +10 -13
- package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
- package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
- package/src/sap/fe/macros/chart/Action.js +19 -7
- package/src/sap/fe/macros/chart/Action.ts +8 -0
- package/src/sap/fe/macros/chart/ChartDelegate.js +13 -2
- package/src/sap/fe/macros/chart/ChartDelegate.ts +20 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +8 -6
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +13 -22
- package/src/sap/fe/macros/controls/FileWrapper.js +4 -3
- package/src/sap/fe/macros/controls/FileWrapper.ts +3 -2
- package/src/sap/fe/macros/controls/FilterBar.js +1 -1
- package/src/sap/fe/macros/controls/FilterBar.ts +8 -1
- package/src/sap/fe/macros/controls/Section.js +3 -2
- package/src/sap/fe/macros/controls/Section.ts +1 -1
- package/src/sap/fe/macros/controls/TextLink.js +15 -1
- package/src/sap/fe/macros/controls/TextLink.tsx +19 -0
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +23 -18
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +27 -25
- package/src/sap/fe/macros/field/FieldRuntimeHelper.js +4 -2
- package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +7 -7
- package/src/sap/fe/macros/field/FieldTemplating.js +8 -3
- package/src/sap/fe/macros/field/FieldTemplating.ts +8 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +10 -1
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +10 -0
- package/src/sap/fe/macros/form/FormContainer.block.js +9 -8
- package/src/sap/fe/macros/form/FormContainer.block.ts +10 -7
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +3 -2
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +1 -0
- package/src/sap/fe/macros/internal/field/EditStyle.js +11 -6
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +7 -3
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +36 -7
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +35 -6
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +54 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +59 -0
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +23 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +24 -2
- package/src/sap/fe/macros/library.js +5 -6
- package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
- package/src/sap/fe/macros/messagebundle.properties +6 -0
- package/src/sap/fe/macros/messages/MessageButton.js +21 -12
- package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +8 -3
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +9 -2
- package/src/sap/fe/macros/quickView/QuickView.js +5 -4
- package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
- package/src/sap/fe/macros/table/ActionsTemplating.js +6 -5
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +4 -4
- package/src/sap/fe/macros/table/MdcTableTemplate.js +31 -13
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +35 -7
- package/src/sap/fe/macros/table/Table.block.js +3 -1
- package/src/sap/fe/macros/table/Table.block.tsx +7 -4
- package/src/sap/fe/macros/table/TableAPI.js +62 -28
- package/src/sap/fe/macros/table/TableAPI.ts +73 -32
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +15 -4
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +16 -3
- package/src/sap/fe/macros/table/TableRuntime.js +6 -4
- package/src/sap/fe/macros/table/TableRuntime.ts +16 -3
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +3 -3
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +3 -4
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +10 -4
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +9 -3
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +6 -6
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +28 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +33 -14
|
@@ -493,12 +493,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
493
493
|
* @param tableProperties
|
|
494
494
|
* @returns The CellSelector
|
|
495
495
|
*/
|
|
496
|
-
function getCellSelector(tableProperties) {
|
|
496
|
+
function getCellSelector(tableProperties, handlerProvider) {
|
|
497
497
|
const tableType = tableProperties.tableDefinition.control.type;
|
|
498
498
|
if (!tableProperties.tableDefinition.control.disableCopyToClipboard && tableType && ["ResponsiveTable", "GridTable", "TreeTable"].includes(tableType)) {
|
|
499
499
|
return _jsx(CellSelector, {
|
|
500
500
|
enabled: or(tableType !== "TreeTable", not(getDragAndDropEnabled(tableProperties.contextObjectPath, tableProperties.tableDefinition))),
|
|
501
|
-
rangeLimit: 200
|
|
501
|
+
rangeLimit: 200,
|
|
502
|
+
selectionChange: handlerProvider.getCellsSelectionHandler()
|
|
502
503
|
});
|
|
503
504
|
}
|
|
504
505
|
return undefined;
|
|
@@ -579,7 +580,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
579
580
|
if (displayCommandAction && (!forContextMenu || TableHelper.isActionShownInContextMenu(action, contextObjectPath))) {
|
|
580
581
|
const command = !forContextMenu ? action.command : action.command + "::ContextMenu";
|
|
581
582
|
const actionParameters = {
|
|
582
|
-
onExecuteAction: parameters.handlerProvider.getDataFieldForActionButtonPressHandler(dataField, action,
|
|
583
|
+
onExecuteAction: parameters.handlerProvider.getDataFieldForActionButtonPressHandler(dataField, action, forContextMenu),
|
|
583
584
|
onExecuteIBN: parameters.handlerProvider.getDataFieldForIBNPressHandler(action, false),
|
|
584
585
|
onExecuteManifest: parameters.handlerProvider.getManifestActionPressHandler(action, forContextMenu),
|
|
585
586
|
isIBNEnabled: enabled ?? TableHelper.isDataFieldForIBNEnabled({
|
|
@@ -805,6 +806,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
805
806
|
* @param tableDefinition The table definition
|
|
806
807
|
* @param column The column definition
|
|
807
808
|
* @param dataFieldContext The data field context
|
|
809
|
+
* @param dataFieldObjectPath The data field object path
|
|
808
810
|
* @param collection The collection context
|
|
809
811
|
* @param enableAnalytics Whether analytics are enabled
|
|
810
812
|
* @param tableType The type of the table
|
|
@@ -817,10 +819,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
817
819
|
* @param showEmptyIndicator Whether to show the empty indicator
|
|
818
820
|
* @param className
|
|
819
821
|
* @param handlerProvider The handler provider
|
|
822
|
+
* @param isConnectedField Indicates if the field is a connected field
|
|
820
823
|
* @returns The XML string representing the field.
|
|
821
824
|
*/
|
|
822
|
-
function getMacroFieldTemplate(tableId, tableDefinition, column, dataFieldContext, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, fieldMode, isCompactType, textAlign, ariaLabelledBy, showEmptyIndicator, className, handlerProvider) {
|
|
823
|
-
let isConnectedField = arguments.length >
|
|
825
|
+
function getMacroFieldTemplate(tableId, tableDefinition, column, dataFieldContext, dataFieldObjectPath, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, fieldMode, isCompactType, textAlign, ariaLabelledBy, showEmptyIndicator, className, handlerProvider) {
|
|
826
|
+
let isConnectedField = arguments.length > 17 && arguments[17] !== undefined ? arguments[17] : false;
|
|
824
827
|
const dataFieldObject = dataFieldContext.getObject();
|
|
825
828
|
let columnEditMode;
|
|
826
829
|
switch (isTableReadOnly) {
|
|
@@ -860,6 +863,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
860
863
|
isAnalyticalAggregatedRow: tableDefinition.control.analyticalConfiguration?.aggregationOnLeafLevel,
|
|
861
864
|
reactiveAreaMode: reactiveAreaMode
|
|
862
865
|
};
|
|
866
|
+
let customData;
|
|
867
|
+
|
|
868
|
+
// In case we display a property with TextOnly text arragement in a non-analytical table, we still load the original property (using custom data)
|
|
869
|
+
// to make sure intent-based navigation can use the value of the original property an not just its text representation.
|
|
870
|
+
// For analytical tables, this is done by adding the original property as a context-defining property for the text property in the table converter (getExtensionInfoFromEntityType)
|
|
871
|
+
if (tableDefinition.enableAnalytics !== true && dataFieldObjectPath.targetObject?.Value?.$target?.annotations?.Common?.Text?.annotations?.UI?.TextArrangement?.valueOf() === "UI.TextArrangementType/TextOnly") {
|
|
872
|
+
customData = createCustomData("extraProperty", `{${dataFieldObjectPath.targetObject.Value.path}}`);
|
|
873
|
+
}
|
|
863
874
|
return _jsx(Field, {
|
|
864
875
|
vhIdPrefix: generate([tableId, "TableValueHelp"]),
|
|
865
876
|
editMode: columnEditMode,
|
|
@@ -876,7 +887,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
876
887
|
children: {
|
|
877
888
|
formatOptions: _jsx(FieldFormatOptions, {
|
|
878
889
|
...formatOptions
|
|
879
|
-
})
|
|
890
|
+
}),
|
|
891
|
+
customData
|
|
880
892
|
}
|
|
881
893
|
});
|
|
882
894
|
}
|
|
@@ -940,7 +952,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
940
952
|
const fieldGroup = dataField.Target.$target;
|
|
941
953
|
const dataFieldCollectionContext = dataFieldContext.getModel().createBindingContext(dataFieldContext.getPath() + "/Target/$AnnotationPath/Data");
|
|
942
954
|
const fieldGroupCollectionLength = fieldGroup.Data.length - 1;
|
|
943
|
-
const items = fieldGroup.Data.map((
|
|
955
|
+
const items = fieldGroup.Data.map((_fieldGroupDataField, fieldGroupDataFieldIdx) => {
|
|
944
956
|
const fieldGroupDataFieldContext = dataFieldCollectionContext.getModel().createBindingContext(dataFieldCollectionContext.getPath() + "/" + fieldGroupDataFieldIdx);
|
|
945
957
|
const fieldGroupDataFieldOP = getInvolvedDataModelObjects(fieldGroupDataFieldContext);
|
|
946
958
|
const fieldGroupLabel = FieldHelper.computeLabelText(fieldGroupDataFieldContext.getObject(), {
|
|
@@ -961,12 +973,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
961
973
|
layoutData: _jsx(FlexItemData, {
|
|
962
974
|
growFactor: "1"
|
|
963
975
|
}),
|
|
964
|
-
items: getMacroFieldTemplate(tableId, tableDefinition, column, fieldGroupDataFieldContext, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, undefined, isCompactType, "Left", `${TableHelper.getColumnStableId(tableId, dataFieldOP)} ${TableHelper.getFieldGroupLabelStableId(tableId, fieldGroupDataFieldOP)}`, true, TableHelper.getMarginClass(fieldGroupDataFieldContext.getObject("Target/$AnnotationPath/Visualization/$EnumMember"), fieldGroupDataFieldIdx === fieldGroupCollectionLength), handlerProvider)
|
|
976
|
+
items: getMacroFieldTemplate(tableId, tableDefinition, column, fieldGroupDataFieldContext, fieldGroupDataFieldOP, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, undefined, isCompactType, "Left", `${TableHelper.getColumnStableId(tableId, dataFieldOP)} ${TableHelper.getFieldGroupLabelStableId(tableId, fieldGroupDataFieldOP)}`, true, TableHelper.getMarginClass(fieldGroupDataFieldContext.getObject("Target/$AnnotationPath/Visualization/$EnumMember"), fieldGroupDataFieldIdx === fieldGroupCollectionLength), handlerProvider)
|
|
965
977
|
}
|
|
966
978
|
})]
|
|
967
979
|
});
|
|
968
980
|
} else {
|
|
969
|
-
return getMacroFieldTemplate(tableId, tableDefinition, column, fieldGroupDataFieldContext, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, fieldMode, isCompactType, undefined, TableHelper.getColumnStableId(tableId, dataFieldOP), false, TableHelper.getMarginClass(fieldGroupDataFieldContext.getObject("Target/$AnnotationPath/Visualization/$EnumMember"), fieldGroupDataFieldIdx === fieldGroupCollectionLength), handlerProvider);
|
|
981
|
+
return getMacroFieldTemplate(tableId, tableDefinition, column, fieldGroupDataFieldContext, fieldGroupDataFieldOP, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, fieldMode, isCompactType, undefined, TableHelper.getColumnStableId(tableId, dataFieldOP), false, TableHelper.getMarginClass(fieldGroupDataFieldContext.getObject("Target/$AnnotationPath/Visualization/$EnumMember"), fieldGroupDataFieldIdx === fieldGroupCollectionLength), handlerProvider);
|
|
970
982
|
}
|
|
971
983
|
});
|
|
972
984
|
const draftIndicator = getDraftIndicator(collection, column);
|
|
@@ -990,7 +1002,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
990
1002
|
const connectedFieldsData = getConnectedFieldsData(connectedFields);
|
|
991
1003
|
const items = connectedFieldsData.map((connectedFieldsElement, connectedFieldsElementIdx) => {
|
|
992
1004
|
const connectedFieldsElementContext = dataFieldContext.getModel().createBindingContext(`${connectedFieldsContext.getPath()}/${connectedFieldsElement?.Value?.path}`);
|
|
993
|
-
const
|
|
1005
|
+
const connectedFieldsElementOP = getInvolvedDataModelObjects(connectedFieldsElementContext);
|
|
1006
|
+
const fieldTemplate = getMacroFieldTemplate(tableId, tableDefinition, column, connectedFieldsElementContext, connectedFieldsElementOP, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, undefined, isCompactType, "Left", `${TableHelper.getColumnStableId(tableId, dataFieldOP)}`, false, undefined, handlerProvider, true);
|
|
994
1007
|
if (connectedFieldsElementIdx < connectedFieldsData.length - 1) {
|
|
995
1008
|
if (tableType === "ResponsiveTable") {
|
|
996
1009
|
return [fieldTemplate,
|
|
@@ -1058,7 +1071,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
1058
1071
|
}
|
|
1059
1072
|
});
|
|
1060
1073
|
} else {
|
|
1061
|
-
template = getMacroFieldTemplate(tableId, tableDefinition, column, dataFieldContext, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, fieldMode, isCompactType, undefined, undefined, false, undefined, handlerProvider);
|
|
1074
|
+
template = getMacroFieldTemplate(tableId, tableDefinition, column, dataFieldContext, dataFieldOP, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, fieldMode, isCompactType, undefined, undefined, false, undefined, handlerProvider);
|
|
1062
1075
|
creationTemplate = getCreationTemplate(tableId, column, tableType, creationMode, isTableReadOnly, collection, dataFieldContext, fieldMode, enableAnalytics, handlerProvider);
|
|
1063
1076
|
}
|
|
1064
1077
|
return {
|
|
@@ -1312,6 +1325,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
1312
1325
|
key: "exportRequestSize",
|
|
1313
1326
|
value: tableProperties.tableDefinition.control.exportRequestSize
|
|
1314
1327
|
}];
|
|
1328
|
+
let rowPressHandler;
|
|
1329
|
+
if (tableType === "ResponsiveTable") {
|
|
1330
|
+
rowPressHandler = parameters.handlerProvider.rowPress ? parameters.handlerProvider.noop : undefined;
|
|
1331
|
+
}
|
|
1315
1332
|
return _jsx(MDCTable, {
|
|
1316
1333
|
"core:require": getCoreRequire(tableProperties.tableDefinition),
|
|
1317
1334
|
"fl:flexibility": tableProperties["fl:flexibility"],
|
|
@@ -1323,6 +1340,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
1323
1340
|
busyIndicatorDelay: 0,
|
|
1324
1341
|
enableExport: tableProperties.tableDefinition.control.enableExport,
|
|
1325
1342
|
delegate: JSON.parse(delegate),
|
|
1343
|
+
rowPress: rowPressHandler,
|
|
1326
1344
|
beforeOpenContextMenu: parameters.handlerProvider.beforeOpenContextMenu,
|
|
1327
1345
|
autoBindOnInit: tableProperties.useBasicSearch || !tableProperties.filterBar,
|
|
1328
1346
|
selectionMode: tableProperties.tableDefinition.annotation.selectionMode || "None",
|
|
@@ -1355,11 +1373,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
1355
1373
|
variant: getVariantManagement(variantManagement, tableProperties.contentId, tableProperties.headerLevel, parameters.handlerProvider),
|
|
1356
1374
|
quickFilter: getQuickFilter(tableProperties),
|
|
1357
1375
|
copyProvider: getCopyProvider(tableProperties),
|
|
1358
|
-
cellSelector: getCellSelector(tableProperties)
|
|
1376
|
+
cellSelector: getCellSelector(tableProperties, parameters.handlerProvider)
|
|
1359
1377
|
}
|
|
1360
1378
|
});
|
|
1361
1379
|
}
|
|
1362
1380
|
_exports.getMDCTableTemplate = getMDCTableTemplate;
|
|
1363
1381
|
return _exports;
|
|
1364
1382
|
}, false);
|
|
1365
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJfY29sbGVjdGlvbiIsInRhYmxlVHlwZSIsInNlbGVjdGlvbkxpbWl0IiwiY29sbGVjdGlvbiIsImdldE9iamVjdCIsIl9qc3giLCJHcmlkVGFibGVUeXBlIiwicm93Q291bnRNb2RlIiwiY29udHJvbCIsInJvd0NvdW50IiwiZml4ZWRDb2x1bW5Db3VudCIsImZyb3plbkNvbHVtbkNvdW50Iiwic2Nyb2xsVGhyZXNob2xkIiwiZW5hYmxlQ29sdW1uRnJlZXplIiwiVHJlZVRhYmxlVHlwZSIsIlJlc3BvbnNpdmVUYWJsZVR5cGUiLCJzaG93RGV0YWlsc0J1dHRvbiIsImRldGFpbHNCdXR0b25TZXR0aW5nIiwiUHJpb3JpdHkiLCJMb3ciLCJNZWRpdW0iLCJOb25lIiwiZ3Jvd2luZ01vZGUiLCIka2luZCIsInVuZGVmaW5lZCIsInBvcGluTGF5b3V0IiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaGFuZGxlclByb3ZpZGVyIiwiRGF0YVN0YXRlSW5kaWNhdG9yIiwiZmlsdGVyIiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwiZW5hYmxlZCIsImNvbXBpbGVFeHByZXNzaW9uIiwibm90IiwiZXF1YWwiLCJwYXRoSW5Nb2RlbCIsImVuYWJsZUZpbHRlcmluZyIsImRhdGFTdGF0ZUNoYW5nZSIsImdldERyYWdBbmREcm9wRW5hYmxlZCIsImNvbnRleHRPYmplY3RQYXRoIiwiaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uIiwiaXNQYXRoVXBkYXRhYmxlIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsInBhdGhWaXNpdG9yIiwicGF0aCIsIm5hdmlnYXRpb25QYXRocyIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiY29udmVydGVkVHlwZXMiLCJpc1BhdGhVcGRhdGFibGVPblRhcmdldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwidGFyZ2V0RW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJhbmQiLCJfdHlwZSIsImlmRWxzZSIsImlzQ29uc3RhbnQiLCJjb25zdGFudCIsImlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsImdldERlcGVuZGVudHMiLCJ0YWJsZVByb3BlcnRpZXMiLCJwYXJhbWV0ZXJzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJpZCIsImNvbnRlbnRJZCIsInR5cGUiLCJkZXBlbmRlbnRzIiwiY3V0QWN0aW9uIiwiYWN0aW9ucyIsImZpbmQiLCJhIiwia2V5IiwiU3RhbmRhcmRBY3Rpb25LZXlzIiwiQ3V0IiwiaXNUZW1wbGF0ZWQiLCJwdXNoIiwiQ29tbWFuZEV4ZWN1dGlvbiIsImV4ZWN1dGUiLCJnZXRDdXRIYW5kbGVyIiwiY29tbWFuZCIsImNvcHlBY3Rpb24iLCJDb3B5IiwiZ2V0Q29weUhhbmRsZXIiLCJwYXN0ZUFjdGlvbiIsIlBhc3RlIiwidmlzaWJsZSIsImdldFBhc3RlSGFuZGxlciIsImNyZWF0ZUFjdGlvbiIsIkNyZWF0ZSIsImRlbGV0ZUFjdGlvbiIsIkRlbGV0ZSIsImFubm90YXRpb24iLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJub2RlVHlwZSIsImVuYWJsZVVwbG9hZFBsdWdpbiIsImdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlciIsIm1vdmVVcEFjdGlvbiIsIk1vdmVVcCIsIm1vdmVEb3duQWN0aW9uIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duSGFuZGxlciIsImFjdGlvbk5hbWUiLCJjb21tYW5kQWN0aW9ucyIsImFjdGlvbiIsImFjdGlvbkNvbW1hbmQiLCJnZXRBY3Rpb25Db21tYW5kIiwiUGVyc2lzdGVuY2VQcm92aWRlciIsImdlbmVyYXRlIiwiZm9yIiwiQ29udGV4dE1lbnVTZXR0aW5nIiwic2NvcGUiLCJnZXRVcGxvYWRQbHVnaW4iLCJfZXhwb3J0cyIsImdldEFjdGlvbnMiLCJ0YWJsZSIsImNvbGxlY3Rpb25Db250ZXh0IiwiY29sbGVjdGlvbkVudGl0eSIsImRpc3BsYXlTZWdtZW50ZWRCdXR0b24iLCJhbHBCdXR0b25JdGVtcyIsIkNvbW1vbkhlbHBlciIsImlzRGVza3RvcCIsIlNlZ21lbnRlZEJ1dHRvbkl0ZW0iLCJ0b29sdGlwIiwiaWNvbiIsIkFjdGlvblRvb2xiYXJBY3Rpb24iLCJsYXlvdXRJbmZvcm1hdGlvbiIsImNoaWxkcmVuIiwiU2VnbWVudGVkQnV0dG9uIiwic2VsZWN0Iiwic2VnbWVudGVkQnV0dG9uUHJlc3MiLCJzZWxlY3RlZEtleSIsIml0ZW1zIiwiZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUiLCJsZW5ndGgiLCJnZXRSb3dTZXR0aW5ncyIsInJvd0FjdGlvblR5cGUiLCJyb3dBY3Rpb25JdGVtIiwiUm93QWN0aW9uSXRlbSIsInByZXNzIiwicm93UHJlc3MiLCJyb3ciLCJSb3dTZXR0aW5ncyIsIm5hdmlnYXRlZCIsInJvd05hdmlnYXRlZCIsImhpZ2hsaWdodCIsInJvd0hpZ2hsaWdodGluZyIsImhpZ2hsaWdodFRleHQiLCJyb3dBY3Rpb25zIiwiVGFibGVSb3dBY3Rpb25UeXBlIiwiTmF2aWdhdGlvbiIsImdldENvbnRleHRNZW51IiwibmF2aWdhdGlvbkluRWRpdE1vZGUiLCJtZW51SXRlbXMiLCJnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUiLCJnZXRTaGFyZXRvQ29sbGFib3JhdGlvbk1hbmFnZXJUZW1wbGF0ZSIsImdldE9wZW5Jbk5ld1RhYlRlbXBsYXRlIiwiTWVudSIsIml0ZW1TZWxlY3RlZCIsImNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwiZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51IiwidGFibGVJZCIsIk1lbnVJdGVtIiwic3RhcnRzU2VjdGlvbiIsInRleHQiLCJjb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsImNvbnRleHRNZW51T3BlbkluTmV3VGFiIiwiZ3JlYXRlclRoYW4iLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImhlYWRlckxldmVsIiwiVmFyaWFudE1hbmFnZW1lbnQiLCJzaG93U2V0QXNEZWZhdWx0IiwidmFyaWFudFNlbGVjdGVkIiwic2F2ZSIsInZhcmlhbnRTYXZlZCIsImdldFF1aWNrRmlsdGVyIiwicXVpY2tGaWx0ZXJzIiwiZmlsdGVycyIsIlF1aWNrRmlsdGVyU2VsZWN0b3IiLCJwYXRocyIsIm1hcCIsImFubm90YXRpb25QYXRoIiwic2hvd0NvdW50cyIsImdldENvcHlQcm92aWRlciIsInZpc2libGVFeHByZXNzaW9uIiwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZCIsIkNvcHlQcm92aWRlciIsImdldENlbGxTZWxlY3RvciIsImluY2x1ZGVzIiwiQ2VsbFNlbGVjdG9yIiwib3IiLCJyYW5nZUxpbWl0IiwiZ2V0Q3JlYXRpb25Sb3ciLCJjcmVhdGlvbk1vZGUiLCJuYW1lIiwiQ3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvd0FjdGlvbiIsImN1c3RvbURhdGEiLCJjcmVhdGVDdXN0b21EYXRhcyIsInZhbHVlIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImFwcGx5IiwiYXBwbHlFbmFibGVkIiwiZ2V0RHJhZ0FuZERyb3BDb25maWciLCJEcmFnRHJvcENvbmZpZyIsImRyb3BQb3NpdGlvbiIsImFsbG93RHJvcEJldHdlZW5Ob2RlcyIsImRyYWdnYWJsZSIsImRyb3BwYWJsZSIsImRyYWdTdGFydCIsImRyYWdTdGFydERvY3VtZW50IiwiZHJhZ0VudGVyIiwiZHJhZ0VudGVyRG9jdW1lbnQiLCJkcm9wIiwiZHJvcERvY3VtZW50IiwiZm9yQ29udGV4dE1lbnUiLCJkYXRhRmllbGQiLCJjb252ZXJ0ZWRNZXRhZGF0YSIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwiYWN0aW9uQ29udGV4dFBhdGgiLCJnZXRBY3Rpb25Db250ZXh0IiwibWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzQm91bmQiLCJBY3Rpb25UYXJnZXQiLCJpc09wZXJhdGlvbkF2YWlsYWJsZSIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJ2YWx1ZU9mIiwiZGlzcGxheUNvbW1hbmRBY3Rpb24iLCJUYWJsZUhlbHBlciIsImlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51IiwiYWN0aW9uUGFyYW1ldGVycyIsIm9uRXhlY3V0ZUFjdGlvbiIsImdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlciIsIm9uRXhlY3V0ZUlCTiIsImdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlciIsIm9uRXhlY3V0ZU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIiLCJpc0lCTkVuYWJsZWQiLCJpc0RhdGFGaWVsZEZvcklCTkVuYWJsZWQiLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNBY3Rpb25FbmFibGVkIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkIiwiQWN0aW9uIiwiZW5hYmxlT25TZWxlY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiaXNFbmFibGVkIiwiZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbiIsImdldENvcmVSZXF1aXJlIiwiY3VzdG9tTW9kdWxlcyIsImFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMiLCJtb2R1bGUiLCJpbmRleCIsImpvaW4iLCJnZXRDb21wdXRlZENvbHVtbiIsImNvbHVtbiIsImVuYWJsZUFuYWx5dGljcyIsImlzRHJhZnRJbmRpY2F0b3IiLCJDb2x1bW4iLCJoZWFkZXJWaXNpYmxlIiwicHJvcGVydHlLZXkiLCJoZWFkZXIiLCJsYWJlbCIsIndpZHRoIiwiRHJhZnRJbmRpY2F0b3IiLCJkcmFmdEluZGljYXRvclR5cGUiLCJPYmplY3RNYXJrZXJWaXNpYmlsaXR5IiwiSWNvbk9ubHkiLCJjb250ZXh0UGF0aCIsImdldFBhdGgiLCJFbnRpdHkiLCJJc0FjdGl2ZSIsIkhhc0RyYWZ0IiwidXNlZEluVGFibGUiLCJ1c2VkSW5BbmFseXRpY2FsVGFibGUiLCJpc1NpdHVhdGlvbnNJbmRpY2F0b3IiLCJTaXR1YXRpb25zSW5kaWNhdG9yIiwiZ2V0U2xvdENvbHVtbiIsImlzUmVhZE9ubHkiLCJ0ZW1wbGF0ZSIsInN0YXJ0c1dpdGgiLCJTbG90Q29sdW1uIiwidGVtcGxhdGVJZCIsImhBbGlnbiIsImhvcml6b250YWxBbGlnbiIsInJlcXVpcmVkIiwiZXh0ZW5kZWRTZXR0aW5ncyIsIlJlc3BvbnNpdmVDb2x1bW5TZXR0aW5ncyIsImltcG9ydGFuY2UiLCJnZXREcmFmdEluZGljYXRvciIsImZvcm1hdE9wdGlvbnMiLCJmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJGb3JtRWxlbWVudFdyYXBwZXIiLCJJY29uQW5kVGV4dCIsImdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmciLCJmaWVsZEdyb3VwTmFtZSIsImFyaWFMYWJlbGxlZEJ5IiwiZ2V0U2l0dWF0aW9uSW5kaWNhdG9yIiwiT2JqZWN0U3RhdHVzIiwic2hvd0Vycm9yT2JqZWN0U3RhdHVzIiwiY2xhc3MiLCJzdGF0ZSIsImdldERlZmF1bHREYXRlVGltZVN0eWxlIiwiZGF0YUZpZWxkQ29udGV4dCIsInRhcmdldE9iamVjdCIsImlzRGF0YUZpZWxkIiwiVmFsdWUiLCIkdGFyZ2V0IiwiaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiaGFzRGF0YVBvaW50VGFyZ2V0IiwiVGFyZ2V0IiwiZ2V0Q3JlYXRpb25UZW1wbGF0ZSIsImlzVGFibGVSZWFkT25seSIsImZpZWxkTW9kZSIsImNvbHVtbkVkaXRNb2RlIiwiZGF0YUZpZWxkT2JqZWN0IiwicmVhY3RpdmVBcmVhTW9kZSIsInRleHRMaW5lc0VkaXQiLCJ0ZXh0TWF4TGluZXMiLCJ0ZXh0TWF4TGVuZ3RoIiwidGV4dE1heENoYXJhY3RlcnNEaXNwbGF5IiwidGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheSIsInRleHRBbGlnbk1vZGUiLCJzZW1hbnRpY0tleVN0eWxlIiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJzaG93SWNvblVybCIsIklubGluZSIsIkljb25VcmwiLCJpZ25vcmVOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNDdXJyZW5jeU9yVW5pdEFsaWduZWQiLCJkYXRlVGltZVN0eWxlIiwiRmllbGQiLCJ2aElkUHJlZml4IiwiZWRpdE1vZGUiLCJtZXRhUGF0aCIsIndyYXAiLCJjaGFuZ2UiLCJmaWVsZENoYW5nZUluQ3JlYXRpb25Sb3ciLCJGaWVsZEZvcm1hdE9wdGlvbnMiLCJnZXRNYWNyb0ZpZWxkVGVtcGxhdGUiLCJpc0NvbXBhY3RUeXBlIiwidGV4dEFsaWduIiwic2hvd0VtcHR5SW5kaWNhdG9yIiwiY2xhc3NOYW1lIiwiaXNDb25uZWN0ZWRGaWVsZCIsImFyZ3VtZW50cyIsInR5cGVDb25maWciLCJpc0FuYWx5dGljcyIsImZvcklubGluZUNyZWF0aW9uUm93cyIsImNvbXBhY3RTZW1hbnRpY0tleSIsImlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3ciLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJsaXZlQ2hhbmdlIiwiZmllbGRMaXZlQ2hhbmdlIiwic3BsaXQiLCJuYXZpZ2F0ZUFmdGVyQWN0aW9uIiwiaXNOYXZpZ2FibGUiLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUiLCJkYXRhRmllbGRPUCIsImNyZWF0aW9uVGVtcGxhdGUiLCJyZWFkT25seSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImlzQW5ub3RhdGlvbk9mVGVybSIsInNob3dPbmx5Q2hhcnQiLCJzZXR0aW5ncyIsInNob3dNaWNyb0NoYXJ0TGFiZWwiLCJtaWNyb0NoYXJ0U2l6ZSIsIm1pY3JvQ2hhcnRDb2xsZWN0aW9uIiwiZ2V0TW9kZWwiLCJnZXROYXZpZ2F0aW9uQ29udGV4dCIsIk1pY3JvQ2hhcnQiLCJzaXplIiwiaGlkZU9uTm9EYXRhIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImlzVHJ1dGh5IiwiSXNJbmFjdGl2ZSIsIk11bHRpVmFsdWVGaWVsZEJsb2NrIiwidXNlUGFyZW50QmluZGluZ0NhY2hlIiwiZGlzYWJsZU93blJlcXVlc3RPbk1WRiIsImZpZWxkR3JvdXAiLCJkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dCIsImZpZWxkR3JvdXBDb2xsZWN0aW9uTGVuZ3RoIiwiRGF0YSIsImZpZWxkR3JvdXBEYXRhRmllbGQiLCJmaWVsZEdyb3VwRGF0YUZpZWxkSWR4IiwiZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQiLCJmaWVsZEdyb3VwRGF0YUZpZWxkT1AiLCJmaWVsZEdyb3VwTGFiZWwiLCJGaWVsZEhlbHBlciIsImNvbXB1dGVMYWJlbFRleHQiLCJjb250ZXh0Iiwic2hvd0RhdGFGaWVsZHNMYWJlbCIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiX2pzeHMiLCJIQm94IiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJhbGlnbkl0ZW1zIiwiYnVpbGRFeHByZXNzaW9uRm9yQWxpZ25JdGVtcyIsIkxhYmVsIiwiZ2V0RmllbGRHcm91cExhYmVsU3RhYmxlSWQiLCJnZXRUZXh0IiwiVkJveCIsImxheW91dERhdGEiLCJGbGV4SXRlbURhdGEiLCJncm93RmFjdG9yIiwiZ2V0Q29sdW1uU3RhYmxlSWQiLCJnZXRNYXJnaW5DbGFzcyIsImRyYWZ0SW5kaWNhdG9yIiwic2l0dWF0aW9uSW5kaWNhdG9yIiwiZ2V0VkJveFZpc2liaWxpdHkiLCJjb2xsZWN0aW9uRmllbGRzSGlkZGVuRXhwcmVzc2lvbiIsImNvbm5lY3RlZEZpZWxkcyIsImNvbm5lY3RlZEZpZWxkc0NvbnRleHQiLCJmaWVsZHNEZWxpbWl0ZXIiLCJnZXREZWxpbWl0ZXIiLCJUZW1wbGF0ZSIsImNvbm5lY3RlZEZpZWxkc0RhdGEiLCJnZXRDb25uZWN0ZWRGaWVsZHNEYXRhIiwiY29ubmVjdGVkRmllbGRzRWxlbWVudCIsImNvbm5lY3RlZEZpZWxkc0VsZW1lbnRJZHgiLCJjb25uZWN0ZWRGaWVsZHNFbGVtZW50Q29udGV4dCIsImZpZWxkVGVtcGxhdGUiLCJzaHJpbmtGYWN0b3IiLCJUZXh0Iiwid3JhcHBpbmciLCJyZW5kZXJXaGl0ZXNwYWNlIiwiaW5uZXJIQm94IiwicmVuZGVyVHlwZSIsImZpdENvbnRhaW5lciIsImp1c3RpZnlDb250ZW50IiwiZ2V0Q29sdW1uVGVtcGxhdGUiLCJnZXREYXRhRmllbGREZWZhdWx0IiwiZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoIiwidGVtcGxhdGVzIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCIkQW5ub3RhdGlvblBhdGgiLCJDb21tb25VdGlscyIsImlzU21hbGxEZXZpY2UiLCJnZXRDb2x1bW5XaWR0aCIsImdldFRleHRPbkFjdGlvbkZpZWxkIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm1pbldpZHRoIiwiZ2V0Q29sdW1uQWxpZ25tZW50Iiwic2V0SGVhZGVyTGFiZWxWaXNpYmlsaXR5IiwiY3JlYXRlQ3VzdG9tRGF0YSIsImdldENvbHVtbnMiLCJjb2x1bW5zIiwiYXZhaWxhYmlsaXR5IiwiTG9nIiwiZXJyb3IiLCJFcnJvciIsImdldERlc2lnbnRpbWUiLCJnZXRNRENQMTNuTW9kZSIsInN0cmluZ01vZGUiLCJUYWJsZVAxM25Nb2RlIiwiQWdncmVnYXRlIiwiU29ydCIsIkZpbHRlciIsIkdyb3VwIiwiZ2V0TURDVGFibGVUZW1wbGF0ZSIsIm5hdmlnYXRpb25JbmZvIiwicm91dGVQYXRoIiwidGFyZ2V0SW5mb3JtYXRpb24iLCJhcHBDb21wb25lbnQiLCJnZXRSb3V0aW5nU2VydmljZSIsIl9nZXRUYXJnZXRJbmZvcm1hdGlvbiIsIm9wdGlvbnMiLCJvcGVuSW5FZGl0TW9kZSIsImZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJNb2RlbEhlbHBlciIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiZGVsZWdhdGUiLCJnZXREZWxlZ2F0ZSIsImlzQWxwIiwiZW50aXR5TmFtZSIsImN1cnJlbnRIZWFkZXIiLCJoZWFkZXJCaW5kaW5nRXhwcmVzc2lvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckhlYWRlclZpc2libGUiLCJ0YWJUaXRsZSIsIm1vZGVsQ29udGV4dENoYW5nZSIsInRhYmxlQ29udGV4dENoYW5nZSIsImxpbmVJdGVtIiwiZ2V0VWlMaW5lSXRlbU9iamVjdCIsIm5hdmlnYXRpb25QYXRoIiwiaXNTaW5nbGV0b24iLCJkcmFmdCIsImRlc2lnbnRpbWUiLCJvdmVycmlkZVJvd1ByZXNzIiwiYWN0aW9uVHlwZSIsInNob3dDcmVhdGUiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJjdXJyZW50UGVyc29uYWxpemF0aW9uIiwicGVyc29uYWxpemF0aW9uIiwicDEzbk1vZGUiLCJtb2RlIiwidHJpbSIsImV4Y2x1ZGVHcm91cEZyb21QMTNuIiwibXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMiLCJBY3Rpb25IZWxwZXIiLCJnZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJjcmVhdGVBdEVuZCIsImhpZGRlbkZpbHRlcnMiLCJnZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiZXhwb3J0UmVxdWVzdFNpemUiLCJNRENUYWJsZSIsInNvcnRDb25kaXRpb25zIiwiZ3JvdXBDb25kaXRpb25zIiwiYWdncmVnYXRlQ29uZGl0aW9ucyIsImJ1c3lJbmRpY2F0b3JEZWxheSIsImVuYWJsZUV4cG9ydCIsIkpTT04iLCJwYXJzZSIsImJlZm9yZU9wZW5Db250ZXh0TWVudSIsImF1dG9CaW5kT25Jbml0IiwidXNlQmFzaWNTZWFyY2giLCJmaWx0ZXJCYXIiLCJzZWxlY3Rpb25Nb2RlIiwic2VsZWN0aW9uQ2hhbmdlIiwic2hvd1Jvd0NvdW50IiwiaGVhZGVyU3R5bGUiLCJ0aHJlc2hvbGQiLCJwYXN0ZSIsImJlZm9yZUV4cG9ydCIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwibXVsdGlTZWxlY3RNb2RlIiwic2hvd1Bhc3RlQnV0dG9uIiwiZW5hYmxlUGFzdGUiLCJkYXRhU3RhdGVJbmRpY2F0b3IiLCJyb3dTZXR0aW5ncyIsImNvbnRleHRNZW51IiwiZHJhZ0Ryb3BDb25maWciLCJjcmVhdGlvblJvdyIsInZhcmlhbnQiLCJxdWlja0ZpbHRlciIsImNvcHlQcm92aWRlciIsImNlbGxTZWxlY3RvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWRjVGFibGVUZW1wbGF0ZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb252ZXJ0ZWRNZXRhZGF0YSwgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q2hhcnQsXG5cdENvbm5lY3RlZEZpZWxkcyxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFQb2ludCxcblx0RmllbGRHcm91cCxcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHtcblx0VUlBbm5vdGF0aW9uVGVybXMsXG5cdFVJQW5ub3RhdGlvblR5cGVzLFxuXHR0eXBlIERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdHR5cGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Z3JlYXRlclRoYW4sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNUcnV0aHksXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YsIFN0cmljdFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IEZvcm1FbGVtZW50V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRm9ybUVsZW1lbnRXcmFwcGVyXCI7XG5pbXBvcnQgeyBDcmVhdGlvbk1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGhhc0RhdGFQb2ludFRhcmdldCwgaXNEYXRhRmllbGQsIGlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVHlwZSwgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Q29tcHV0ZWRUYWJsZUNvbHVtbixcblx0Q3VzdG9tQmFzZWRUYWJsZUNvbHVtblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHsgU3RhbmRhcmRBY3Rpb25LZXlzLCB0eXBlIFN0YW5kYXJkQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL1N0YW5kYXJkQWN0aW9uc1wiO1xuaW1wb3J0IHsgZ2V0Q29ubmVjdGVkRmllbGRzRGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvRGF0YUZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyBFbnRpdHksIFVJLCBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUZXJtLCBpc0Fubm90YXRpb25PZlR5cGUsIGlzU2luZ2xldG9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGlzUGF0aFVwZGF0YWJsZSwgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEYXRlVGltZVN0eWxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBpc011bHRpVmFsdWVGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL0FjdGlvbkNvbW1hbmRcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRmllbGQgZnJvbSBcInNhcC9mZS9tYWNyb3MvRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGRCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbURhdGEsIGNyZWF0ZUN1c3RvbURhdGFzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvVFNYVXRpbHNcIjtcbmltcG9ydCBEcmFmdEluZGljYXRvciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9kcmFmdEluZGljYXRvci9EcmFmdEluZGljYXRvclwiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nLCBnZXRWaXNpYmxlRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgYnVpbGRFeHByZXNzaW9uRm9ySGVhZGVyVmlzaWJsZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2hlbHBlcnMvVGFibGVUZW1wbGF0aW5nXCI7XG5pbXBvcnQgU2l0dWF0aW9uc0luZGljYXRvciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9zaXR1YXRpb25zL1NpdHVhdGlvbnNJbmRpY2F0b3JcIjtcbmltcG9ydCB7IGdldFRhYmxlQWN0aW9uc1RlbXBsYXRlLCBnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9BY3Rpb25zVGVtcGxhdGluZ1wiO1xuaW1wb3J0IFF1aWNrRmlsdGVyU2VsZWN0b3IgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvUXVpY2tGaWx0ZXJTZWxlY3RvclwiO1xuaW1wb3J0IFNsb3RDb2x1bW4gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvU2xvdENvbHVtblwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQ3JlYXRpb25PcHRpb25zIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQ3JlYXRpb25PcHRpb25zXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCB7IGdldFVwbG9hZFBsdWdpbiB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL3VwbG9hZFRhYmxlL1VwbG9hZFRhYmxlVGVtcGxhdGVcIjtcbmltcG9ydCBGbGV4SXRlbURhdGEgZnJvbSBcInNhcC9tL0ZsZXhJdGVtRGF0YVwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgT2JqZWN0U3RhdHVzIGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b24gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IFNlZ21lbnRlZEJ1dHRvbkl0ZW0gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvbkl0ZW1cIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgT2JqZWN0TWFya2VyVmlzaWJpbGl0eSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgQ2VsbFNlbGVjdG9yIGZyb20gXCJzYXAvbS9wbHVnaW5zL0NlbGxTZWxlY3RvclwiO1xuaW1wb3J0IENvbnRleHRNZW51U2V0dGluZyBmcm9tIFwic2FwL20vcGx1Z2lucy9Db250ZXh0TWVudVNldHRpbmdcIjtcbmltcG9ydCBDb3B5UHJvdmlkZXIgZnJvbSBcInNhcC9tL3BsdWdpbnMvQ29weVByb3ZpZGVyXCI7XG5pbXBvcnQgRGF0YVN0YXRlSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9wbHVnaW5zL0RhdGFTdGF0ZUluZGljYXRvclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBUaXRsZUxldmVsIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB7IFByaW9yaXR5IH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IFRhYmxlUDEzbk1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvVGFibGVQMTNuTW9kZVwiO1xuaW1wb3J0IFRhYmxlUm93QWN0aW9uVHlwZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9UYWJsZVJvd0FjdGlvblR5cGVcIjtcbmltcG9ydCBQZXJzaXN0ZW5jZVByb3ZpZGVyIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vUGVyc2lzdGVuY2VQcm92aWRlclwiO1xuaW1wb3J0IENvbHVtbiBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCBDcmVhdGlvblJvdyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IERyYWdEcm9wQ29uZmlnIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL0RyYWdEcm9wQ29uZmlnXCI7XG5pbXBvcnQgR3JpZFRhYmxlVHlwZSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9HcmlkVGFibGVUeXBlXCI7XG5pbXBvcnQgUmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1Jlc3BvbnNpdmVDb2x1bW5TZXR0aW5nc1wiO1xuaW1wb3J0IFJlc3BvbnNpdmVUYWJsZVR5cGUgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvUmVzcG9uc2l2ZVRhYmxlVHlwZVwiO1xuaW1wb3J0IFJvd0FjdGlvbkl0ZW0gZnJvbSBcInNhcC91aS9tZGMvdGFibGUvUm93QWN0aW9uSXRlbVwiO1xuaW1wb3J0IFJvd1NldHRpbmdzIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1Jvd1NldHRpbmdzXCI7XG5pbXBvcnQgVHJlZVRhYmxlVHlwZSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9UcmVlVGFibGVUeXBlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IE1pY3JvQ2hhcnQgZnJvbSBcIi4uL01pY3JvQ2hhcnRcIjtcbmltcG9ydCBGaWVsZEZvcm1hdE9wdGlvbnMgZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkRm9ybWF0T3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciBmcm9tIFwiLi9UYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXCI7XG5cbmV4cG9ydCB0eXBlIFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMgPSB7XG5cdG1ldGFQYXRoOiBDb250ZXh0O1xuXHRjb252ZXJ0ZWRNZXRhZGF0YTogQ29udmVydGVkTWV0YWRhdGE7XG5cdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcjtcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGFibGUgdHlwZSBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvblxuICogQHBhcmFtIF9jb2xsZWN0aW9uXG4gKiBAcGFyYW0gdGFibGVUeXBlXG4gKiBAcGFyYW0gc2VsZWN0aW9uTGltaXRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdldFRhYmxlVHlwZShcblx0dGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdF9jb2xsZWN0aW9uOiBDb250ZXh0LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0c2VsZWN0aW9uTGltaXQ6IG51bWJlclxuKTogUmVzcG9uc2l2ZVRhYmxlVHlwZSB8IEdyaWRUYWJsZVR5cGUgfCBUcmVlVGFibGVUeXBlIHtcblx0Y29uc3QgY29sbGVjdGlvbiA9IF9jb2xsZWN0aW9uLmdldE9iamVjdCgpO1xuXHRzd2l0Y2ggKHRhYmxlVHlwZSkge1xuXHRcdGNhc2UgXCJHcmlkVGFibGVcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxHcmlkVGFibGVUeXBlXG5cdFx0XHRcdFx0cm93Q291bnRNb2RlPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5yb3dDb3VudE1vZGV9XG5cdFx0XHRcdFx0cm93Q291bnQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnJvd0NvdW50fVxuXHRcdFx0XHRcdHNlbGVjdGlvbkxpbWl0PXtzZWxlY3Rpb25MaW1pdH1cblx0XHRcdFx0XHRmaXhlZENvbHVtbkNvdW50PXt0YWJsZURlZmluaXRpb24uY29udHJvbC5mcm96ZW5Db2x1bW5Db3VudH1cblx0XHRcdFx0XHRzY3JvbGxUaHJlc2hvbGQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNjcm9sbFRocmVzaG9sZH1cblx0XHRcdFx0XHRlbmFibGVDb2x1bW5GcmVlemU9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZUNvbHVtbkZyZWV6ZX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiVHJlZVRhYmxlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8VHJlZVRhYmxlVHlwZVxuXHRcdFx0XHRcdHJvd0NvdW50TW9kZT17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnRNb2RlfVxuXHRcdFx0XHRcdHJvd0NvdW50PXt0YWJsZURlZmluaXRpb24uY29udHJvbC5yb3dDb3VudH1cblx0XHRcdFx0XHRmaXhlZENvbHVtbkNvdW50PXt0YWJsZURlZmluaXRpb24uY29udHJvbC5mcm96ZW5Db2x1bW5Db3VudH1cblx0XHRcdFx0XHRzY3JvbGxUaHJlc2hvbGQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNjcm9sbFRocmVzaG9sZH1cblx0XHRcdFx0XHRlbmFibGVDb2x1bW5GcmVlemU9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZUNvbHVtbkZyZWV6ZX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PFJlc3BvbnNpdmVUYWJsZVR5cGVcblx0XHRcdFx0XHRzaG93RGV0YWlsc0J1dHRvbj17dHJ1ZX1cblx0XHRcdFx0XHRkZXRhaWxzQnV0dG9uU2V0dGluZz17W1ByaW9yaXR5LkxvdywgUHJpb3JpdHkuTWVkaXVtLCBQcmlvcml0eS5Ob25lXX1cblx0XHRcdFx0XHRncm93aW5nTW9kZT17Y29sbGVjdGlvbi4ka2luZCA9PT0gXCJFbnRpdHlTZXRcIiA/IFwiU2Nyb2xsXCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0cG9waW5MYXlvdXQ9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnBvcGluTGF5b3V0fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgRGF0YVNhdGVJbmRpY2F0b3IgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBkYXRhc3RhdGUgaW5kaWNhdG9yXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFTdGF0ZUluZGljYXRvcihoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIpOiBEYXRhU3RhdGVJbmRpY2F0b3Ige1xuXHRyZXR1cm4gKFxuXHRcdDxEYXRhU3RhdGVJbmRpY2F0b3Jcblx0XHRcdGZpbHRlcj17aGFuZGxlclByb3ZpZGVyLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlcn1cblx0XHRcdGVuYWJsZWQ9e2NvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChwYXRoSW5Nb2RlbChcImVuYWJsZVRhYmxlRGF0YVN0YXRlSW5kaWNhdG9yXCIsIFwicGFnZUludGVybmFsXCIpLCBmYWxzZSkpKX1cblx0XHRcdGVuYWJsZUZpbHRlcmluZz17dHJ1ZX1cblx0XHRcdGRhdGFTdGF0ZUNoYW5nZT17aGFuZGxlclByb3ZpZGVyLmRhdGFTdGF0ZUNoYW5nZX1cblx0XHQvPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgZHJhZyBhbmQgZHJvcCBlbmFibGVtZW50LlxuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldERyYWdBbmREcm9wRW5hYmxlZChcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24gPSBpc1BhdGhVcGRhdGFibGUoY29udGV4dE9iamVjdFBhdGgsIHtcblx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnRleHRPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVPblRhcmdldCA9IGlzUGF0aFVwZGF0YWJsZShjb250ZXh0T2JqZWN0UGF0aCwge1xuXHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnRleHRPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXG5cdGlmIChjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0KSB7XG5cdFx0Ly8gTGlzdFJlcG9ydCBjYXNlOiB3ZSBhbGxvdyBkcmFnIGFuZCBkcm9wIG9uIGRyYWZ0LWVuYWJsZWQgZW50aXRpZXNcblx0XHRpZiAoKGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCkuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0aXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiXG5cdFx0XHRcdFx0PyBpZkVsc2UoaXNDb25zdGFudChpc1BhdGhVcGRhdGFibGVPblRhcmdldCksIGlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0LCBjb25zdGFudCh0cnVlKSlcblx0XHRcdFx0XHQ6IGlzUGF0aFVwZGF0YWJsZU9uTmF2aWdhdGlvbixcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlIVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gT2JqZWN0UGFnZSBjYXNlOiB3ZSBhbGxvdyBkcmFnIGFuZCBkcm9wIGluIGVkaXQgbW9kZVxuXHRcdHJldHVybiBhbmQoXG5cdFx0XHRpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCJcblx0XHRcdFx0PyBpZkVsc2UoaXNDb25zdGFudChpc1BhdGhVcGRhdGFibGVPblRhcmdldCksIGlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0LCBjb25zdGFudCh0cnVlKSlcblx0XHRcdFx0OiBpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24sXG5cdFx0XHRVSS5Jc0VkaXRhYmxlLFxuXHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlIVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlcGVuZGVudHMoXG5cdHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGNvbGxlY3Rpb246IENvbnRleHRcbik6IFVJNUVsZW1lbnRbXSB7XG5cdGNvbnN0IGlkID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZDtcblx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbjtcblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGNvbnN0IGhhbmRsZXJQcm92aWRlciA9IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyO1xuXG5cdGNvbnN0IGRlcGVuZGVudHM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRjb25zdCBjdXRBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkN1dCkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjdXRBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0Q3V0SGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDdXRcIlxuXHRcdFx0XHRlbmFibGVkPXtjdXRBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgY29weUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ29weSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjb3B5QWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIgJiYgdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldENvcHlIYW5kbGVyKGZhbHNlKX1cblx0XHRcdFx0Y29tbWFuZD1cIkNvcHlcIlxuXHRcdFx0XHRlbmFibGVkPXtjb3B5QWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGNvbnN0IHBhc3RlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChwYXN0ZUFjdGlvbj8udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRQYXN0ZUhhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiUGFzdGVcIlxuXHRcdFx0XHRlbmFibGVkPXtwYXN0ZUFjdGlvbj8uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBjcmVhdGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IGRlbGV0ZUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuRGVsZXRlKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblxuXHRpZiAoXG5cdFx0dGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkICYmXG5cdFx0Y3JlYXRlQWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIgJiZcblx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZSA9PT0gdW5kZWZpbmVkICYmXG5cdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlVXBsb2FkUGx1Z2luID09PSBmYWxzZVxuXHQpIHtcblx0XHQvLyBUaGUgc2hvcnRjdXQgaXMgbm90IGVuYWJsZWQgaW4gY2FzZSBvZiBhIGNyZWF0ZSBtZW51IChpLmUuIHdoZW4gbm9kZVR5cGUgaXMgZGVmaW5lZClcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0Q3JlYXRlQnV0dG9uUHJlc3NIYW5kbGVyKGZhbHNlLCBmYWxzZSl9XG5cdFx0XHRcdHZpc2libGU9e2NyZWF0ZUFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17Y3JlYXRlQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRjb21tYW5kPVwiQ3JlYXRlXCJcblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRpZiAoZGVsZXRlQWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0RGVsZXRlQnV0dG9uUHJlc3NIYW5kbGVyKGZhbHNlKX1cblx0XHRcdFx0dmlzaWJsZT17ZGVsZXRlQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtkZWxldGVBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGNvbW1hbmQ9XCJEZWxldGVFbnRyeVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvLyBNb3ZlIHVwIGFuZCBkb3duIGFjdGlvbnNcblx0Y29uc3QgbW92ZVVwQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXApIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBtb3ZlRG93bkFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd24pIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0bW92ZVVwQWN0aW9uICYmXG5cdFx0bW92ZURvd25BY3Rpb24gJiZcblx0XHRtb3ZlVXBBY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0bW92ZURvd25BY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdCkge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRNb3ZlVXBEb3duSGFuZGxlcih0cnVlLCBmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJUYWJsZU1vdmVFbGVtZW50VXBcIlxuXHRcdFx0XHRlbmFibGVkPXttb3ZlVXBBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKGZhbHNlLCBmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJUYWJsZU1vdmVFbGVtZW50RG93blwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVEb3duQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBhY3Rpb25OYW1lIGluIHRhYmxlRGVmaW5pdGlvbi5jb21tYW5kQWN0aW9ucykge1xuXHRcdGNvbnN0IGFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5jb21tYW5kQWN0aW9uc1thY3Rpb25OYW1lXTtcblx0XHRjb25zdCBhY3Rpb25Db21tYW5kID0gZ2V0QWN0aW9uQ29tbWFuZChcblx0XHRcdGFjdGlvbk5hbWUsXG5cdFx0XHRhY3Rpb24sXG5cdFx0XHRmYWxzZSxcblx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0dGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoXG5cdFx0KTtcblx0XHRpZiAoYWN0aW9uQ29tbWFuZCkge1xuXHRcdFx0ZGVwZW5kZW50cy5wdXNoKGFjdGlvbkNvbW1hbmQpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJOb25lXCIpIHtcblx0XHQvLyBQZXJzaXN0ZW5jZSBwcm92aWRlciBvZmZlcnMgcGVyc2lzdGluZyBwZXJzb25hbGl6YXRpb24gY2hhbmdlcyB3aXRob3V0IHZhcmlhbnQgbWFuYWdlbWVudFxuXHRcdGRlcGVuZGVudHMucHVzaCg8UGVyc2lzdGVuY2VQcm92aWRlciBpZD17Z2VuZXJhdGUoW2lkLCBcIlBlcnNpc3RlbmNlUHJvdmlkZXJcIl0pfSBmb3I9e2lkfSAvPik7XG5cdH1cblxuXHRkZXBlbmRlbnRzLnB1c2goPENvbnRleHRNZW51U2V0dGluZyBzY29wZT1cIlNlbGVjdGlvblwiIC8+KTtcblxuXHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlVXBsb2FkUGx1Z2luKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKGdldFVwbG9hZFBsdWdpbih0YWJsZURlZmluaXRpb24sIGlkLCBoYW5kbGVyUHJvdmlkZXIpKTtcblx0fVxuXG5cdHJldHVybiBkZXBlbmRlbnRzO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHRhYmxlIGFjdGlvbnMuXG4gKiBAcGFyYW0gdGFibGVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5XG4gKiBAcmV0dXJucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGlvbnMoXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQ29udHJvbFtdIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWN0aW9uczogQ29udHJvbFtdID0gW107XG5cdGlmICh0YWJsZS5kaXNwbGF5U2VnbWVudGVkQnV0dG9uKSB7XG5cdFx0Y29uc3QgYWxwQnV0dG9uSXRlbXM6IFNlZ21lbnRlZEJ1dHRvbkl0ZW1bXSA9IFtdO1xuXHRcdGlmIChDb21tb25IZWxwZXIuaXNEZXNrdG9wKCkpIHtcblx0XHRcdGFscEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0XHRcdDxTZWdtZW50ZWRCdXR0b25JdGVtXG5cdFx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9IWUJSSURfU0VHTUVOVEVEX0JVVFRPTl9JVEVNX1RPT0xUSVB9XCJcblx0XHRcdFx0XHRrZXk9XCJIeWJyaWRcIlxuXHRcdFx0XHRcdGljb249XCJzYXAtaWNvbjovL2NoYXJ0LXRhYmxlLXZpZXdcIlxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0YWxwQnV0dG9uSXRlbXMucHVzaChcblx0XHRcdDxTZWdtZW50ZWRCdXR0b25JdGVtXG5cdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fQ0hBUlRfU0VHTUVOVEVEX0JVVFRPTl9JVEVNX1RPT0xUSVB9XCJcblx0XHRcdFx0a2V5PVwiQ2hhcnRcIlxuXHRcdFx0XHRpY29uPVwic2FwLWljb246Ly9iYXItY2hhcnRcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGFscEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0XHQ8U2VnbWVudGVkQnV0dG9uSXRlbVxuXHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiXG5cdFx0XHRcdGtleT1cIlRhYmxlXCJcblx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vdGFibGUtdmlld1wiXG5cdFx0XHQvPlxuXHRcdCk7XG5cblx0XHRhY3Rpb25zLnB1c2goXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRsYXlvdXRJbmZvcm1hdGlvbj17J3sgYWdncmVnYXRpb25OYW1lOiBcImVuZFwiLCBhbGlnbm1lbnQ6IFwiRW5kXCIgfSd9XG5cdFx0XHRcdHZpc2libGU9e1wiez0gJHtwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9ID09PSAnVGFibGUnIH1cIn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRhY3Rpb246IChcblx0XHRcdFx0XHRcdDxTZWdtZW50ZWRCdXR0b25cblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiU2VnbWVudGVkQnV0dG9uXCIsIFwiVGVtcGxhdGVDb250ZW50Vmlld1wiXSl9XG5cdFx0XHRcdFx0XHRcdHNlbGVjdD17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuc2VnbWVudGVkQnV0dG9uUHJlc3N9XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5PVwie3BhZ2VJbnRlcm5hbD5hbHBDb250ZW50Vmlld31cIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiBhbHBCdXR0b25JdGVtc1xuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9TZWdtZW50ZWRCdXR0b24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblxuXHRhY3Rpb25zLnB1c2goLi4uZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUodGFibGUsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSk7XG5cblx0cmV0dXJuIGFjdGlvbnMubGVuZ3RoID4gMCA/IGFjdGlvbnMgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3dTZXR0aW5ncyhcblx0dGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogUm93U2V0dGluZ3Mge1xuXHRjb25zdCByb3dBY3Rpb25JdGVtID0gKFxuXHRcdDxSb3dBY3Rpb25JdGVtIHR5cGU9e1wiTmF2aWdhdGlvblwifSBwcmVzcz17aGFuZGxlclByb3ZpZGVyLnJvd1ByZXNzfSB2aXNpYmxlPXt0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5yb3c/LnZpc2libGV9IC8+XG5cdCk7XG5cblx0cmV0dXJuIChcblx0XHQ8Um93U2V0dGluZ3Ncblx0XHRcdG5hdmlnYXRlZD17dGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ucm93Py5yb3dOYXZpZ2F0ZWR9XG5cdFx0XHRoaWdobGlnaHQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93SGlnaGxpZ2h0aW5nfVxuXHRcdFx0aGlnaGxpZ2h0VGV4dD17dGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ucm93Py5yb3dIaWdobGlnaHRpbmd9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0cm93QWN0aW9uczogcm93QWN0aW9uVHlwZSA9PT0gVGFibGVSb3dBY3Rpb25UeXBlLk5hdmlnYXRpb24gPyByb3dBY3Rpb25JdGVtIDogdW5kZWZpbmVkXG5cdFx0XHR9fVxuXHRcdDwvUm93U2V0dGluZ3M+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXNcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eVxuICogQHBhcmFtIHJvd0FjdGlvblR5cGVcbiAqIEBwYXJhbSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gbmF2aWdhdGlvbkluRWRpdE1vZGVcbiAqIEByZXR1cm5zIFRoZSBjb250ZXh0IG1lbnVcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udGV4dE1lbnUoXG5cdHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0cm93QWN0aW9uVHlwZTogVGFibGVSb3dBY3Rpb25UeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRuYXZpZ2F0aW9uSW5FZGl0TW9kZTogYm9vbGVhblxuKTogTWVudSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1lbnVJdGVtcyA9IGdldFRhYmxlQ29udGV4dE1lbnVUZW1wbGF0ZSh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb24sIGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRpZiAocm93QWN0aW9uVHlwZSA9PT0gVGFibGVSb3dBY3Rpb25UeXBlLk5hdmlnYXRpb24gJiYgIW5hdmlnYXRpb25JbkVkaXRNb2RlKSB7XG5cdFx0bWVudUl0ZW1zLnB1c2goZ2V0U2hhcmV0b0NvbGxhYm9yYXRpb25NYW5hZ2VyVGVtcGxhdGUocGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIsIHRhYmxlUHJvcGVydGllcy5jb250ZW50SWQpKTtcblx0XHRtZW51SXRlbXMucHVzaChnZXRPcGVuSW5OZXdUYWJUZW1wbGF0ZShwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlcikpO1xuXHR9XG5cdGlmIChtZW51SXRlbXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudSBpdGVtU2VsZWN0ZWQ9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmNvbnRleHRNZW51SXRlbVNlbGVjdGVkfT5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRkZXBlbmRlbnRzOiBnZXREZXBlbmRlbnRzRm9yQ29udGV4dE1lbnUoXG5cdFx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aCxcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGl0ZW1zOiBtZW51SXRlbXNcblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudT5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZm9yIHRoZSBNZW51SXRlbS5cbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEBwYXJhbSB0YWJsZUlkXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldFNoYXJldG9Db2xsYWJvcmF0aW9uTWFuYWdlclRlbXBsYXRlKGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciwgdGFibGVJZDogc3RyaW5nKTogTWVudUl0ZW0ge1xuXHQvLyBUaGUgdmlzaWJsZSBwcm9wZXJ0eSB3aWxsIGJlIHNldCBhdCBydW50aW1lIHdoZW4gdGhlIGNvbGxhYm9yYXRpb24gbWFuYWdlciBpcyBhdmFpbGFibGUgYW5kIGFsbCBvdGhlciBjb25kaXRpb25zIGFyZSBtZXRcblx0cmV0dXJuIChcblx0XHQ8TWVudUl0ZW1cblx0XHRcdGNvcmU6cmVxdWlyZT1cIntBUEk6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJJ31cIlxuXHRcdFx0c3RhcnRzU2VjdGlvbj17dHJ1ZX1cblx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGVJZCwgXCJDb250ZXh0TWVudVwiLCBcIkNvbGxhYm9yYXRpb25NYW5hZ2VyXCJdKX1cblx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfQ09OVEVYVF9NRU5VX1NIQVJFX1RPX0NPTExBQk9SQVRJT05fTUFOQUdFUn1cIlxuXHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5jb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlcn1cblx0XHRcdGVuYWJsZWQ9XCJ7PSAke2ludGVybmFsPmNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c30gPiAwfVwiXG5cdFx0XHR2aXNpYmxlPXtmYWxzZX1cblx0XHQvPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW0uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldE9wZW5Jbk5ld1RhYlRlbXBsYXRlKGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcik6IE1lbnVJdGVtIHtcblx0Ly8gVGhlICdPcGVuIGluIE5ldyBUYWInIGFjdGlvbiBzaG91bGQgbm90IGJlIHZpc2libGUgZm9yIHN0aWNreSBzZXNzaW9ucyBpbiBlZGl0IG1vZGVcblx0Ly8gRm9yIHRoZSBjb250ZXh0IG1lbnUsIHRoZSB2aXNpYmlsaXR5IHNob3VsZCBhbHNvIGNvbnNpZGVyIHRoZSAnaW5hY3RpdmVDb250ZXh0JyBwcm9wZXJ0eTpcblx0Ly8gb25seSB3aGVuIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBjb250ZXh0IGlzIGFjdGl2ZSAoaS5lLiBcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiIGlzIGZhbHNlKSwgdGhlIGFjdGlvbiBzaG91bGQgYmUgdmlzaWJsZSBpbiB0aGUgY29udGV4dCBtZW51XG5cdC8vIFRoZSBzZWNvbmQgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSB0YWJsZSBtYW5pZmVzdCBzZXR0aW5nIFwiY3JlYXRpb25Nb2RlXCIgaXMgXCJJbmxpbmVDcmVhdGlvblJvd3NcIlxuXHRjb25zdCB2aXNpYmxlID0gYW5kKFxuXHRcdG5vdChhbmQocGF0aEluTW9kZWwoXCIvc2Vzc2lvbk9uXCIsIFwiaW50ZXJuYWxcIiksIFVJLklzRWRpdGFibGUpKSxcblx0XHRub3QocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiwgXCJpbnRlcm5hbFwiKSlcblx0KTtcblx0cmV0dXJuIChcblx0XHQ8TWVudUl0ZW1cblx0XHRcdGNvcmU6cmVxdWlyZT1cIntBUEk6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJJ31cIlxuXHRcdFx0c3RhcnRzU2VjdGlvbj17dHJ1ZX1cblx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfQ09OVEVYVF9NRU5VX09QRU5fSU5fTkVXX1RBQn1cIlxuXHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5jb250ZXh0TWVudU9wZW5Jbk5ld1RhYn1cblx0XHRcdGVuYWJsZWQ9e2dyZWF0ZXJUaGFuKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvbnVtYmVyT2ZOYXZpZ2FibGVDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAwKX1cblx0XHRcdHZpc2libGU9e3Zpc2libGV9XG5cdFx0Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIHN0cmluZyBmb3IgdGhlIE1lbnUgZGVwZW5kZW50cy5cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29udGV4dE9iamVjdFBhdGhcbiAqIEBwYXJhbSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyByZXByZXNlbnRhdGlvbiAgdGhlIE1lbnUgZGVwZW5kZW50c1xuICovXG5mdW5jdGlvbiBnZXREZXBlbmRlbnRzRm9yQ29udGV4dE1lbnUoXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxMaW5lSXRlbSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50Pixcblx0Y29sbGVjdGlvbjogQ29udGV4dFxuKTogVUk1RWxlbWVudFtdIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZGVwZW5kZW50czogVUk1RWxlbWVudFtdID0gW107XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGNvbnN0IGNyZWF0ZUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKGNyZWF0ZUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcih0cnVlLCBmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDcmVhdGU6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0dmlzaWJsZT17Y3JlYXRlQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtjcmVhdGVBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IGN1dEFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3V0KSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKGN1dEFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0Q3V0SGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIkN1dDo6Q29udGV4dE1lbnVcIlxuXHRcdFx0XHRlbmFibGVkPXtjdXRBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRjb25zdCBjb3B5QWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Db3B5KSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKGNvcHlBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldENvcHlIYW5kbGVyKHRydWUpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ29weTo6Q29udGV4dE1lbnVcIlxuXHRcdFx0XHRlbmFibGVkPXtjb3B5QWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgcGFzdGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKHBhc3RlQWN0aW9uPy52aXNpYmxlICE9PSBcImZhbHNlXCIgJiYgdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0UGFzdGVIYW5kbGVyKHRydWUpfVxuXHRcdFx0XHRjb21tYW5kPVwiUGFzdGU6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17cGFzdGVBY3Rpb24/LmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBkZWxldGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkRlbGV0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cblx0aWYgKGRlbGV0ZUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGVsZXRlQnV0dG9uUHJlc3NIYW5kbGVyKHRydWUpfVxuXHRcdFx0XHR2aXNpYmxlPXtkZWxldGVBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2RlbGV0ZUFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRjb21tYW5kPVwiRGVsZXRlRW50cnk6OkNvbnRleHRNZW51XCJcblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8vIE1vdmUgdXAgYW5kIGRvd24gYWN0aW9uc1xuXHRjb25zdCBtb3ZlVXBBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVVcCkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IG1vdmVEb3duQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlRG93bikgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChcblx0XHRtb3ZlVXBBY3Rpb24gJiZcblx0XHRtb3ZlRG93bkFjdGlvbiAmJlxuXHRcdG1vdmVVcEFjdGlvbi52aXNpYmxlICE9PSBcImZhbHNlXCIgJiZcblx0XHRtb3ZlRG93bkFjdGlvbi52aXNpYmxlICE9PSBcImZhbHNlXCIgJiZcblx0XHR0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCJcblx0KSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TW92ZVVwRG93bkhhbmRsZXIodHJ1ZSwgdHJ1ZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJUYWJsZU1vdmVFbGVtZW50VXA6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17bW92ZVVwQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TW92ZVVwRG93bkhhbmRsZXIoZmFsc2UsIHRydWUpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudERvd246OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17bW92ZURvd25BY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdGZvciAoY29uc3QgYWN0aW9uTmFtZSBpbiB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnMpIHtcblx0XHRjb25zdCBhY3Rpb24gPSB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnNbYWN0aW9uTmFtZV07XG5cdFx0Y29uc3QgYWN0aW9uQ29tbWFuZCA9IGdldEFjdGlvbkNvbW1hbmQoYWN0aW9uTmFtZSwgYWN0aW9uLCB0cnVlLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uLCB0YWJsZURlZmluaXRpb24sIGNvbnRleHRPYmplY3RQYXRoKTtcblx0XHRpZiAoYWN0aW9uQ29tbWFuZCkge1xuXHRcdFx0ZGVwZW5kZW50cy5wdXNoKGFjdGlvbkNvbW1hbmQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVwZW5kZW50cy5sZW5ndGggPiAwID8gZGVwZW5kZW50cyA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFZhcmlhbnRNYW5hZ2VtZW50IGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdmFyaWFudE1hbmFnZW1lbnRcbiAqIEBwYXJhbSBpZFxuICogQHBhcmFtIGhlYWRlckxldmVsXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgVmFyaWFudE1hbmFnZW1lbnQgY29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRWYXJpYW50TWFuYWdlbWVudChcblx0dmFyaWFudE1hbmFnZW1lbnQ6IHN0cmluZyxcblx0aWQ6IHN0cmluZyxcblx0aGVhZGVyTGV2ZWw6IFRpdGxlTGV2ZWwsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogVmFyaWFudE1hbmFnZW1lbnQgfCB1bmRlZmluZWQge1xuXHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxWYXJpYW50TWFuYWdlbWVudFxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW2lkLCBcIlZNXCJdKX1cblx0XHRcdFx0c2hvd1NldEFzRGVmYXVsdD17dHJ1ZX1cblx0XHRcdFx0c2VsZWN0PXtoYW5kbGVyUHJvdmlkZXIudmFyaWFudFNlbGVjdGVkfVxuXHRcdFx0XHRoZWFkZXJMZXZlbD17aGVhZGVyTGV2ZWx9XG5cdFx0XHRcdHNhdmU9e2hhbmRsZXJQcm92aWRlci52YXJpYW50U2F2ZWR9XG5cdFx0XHRcdGZvcj17W2lkXX1cblx0XHRcdD48L1ZhcmlhbnRNYW5hZ2VtZW50PlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFF1aWNrVmFyaWFudFNlbGVjdGlvbiBjb250cm9sIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRoZSB0YWJsZSBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBUaGUgUXVpY2tWYXJpYW50U2VsZWN0aW9uIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0UXVpY2tGaWx0ZXIodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IFF1aWNrRmlsdGVyU2VsZWN0b3IgfCB1bmRlZmluZWQge1xuXHRjb25zdCBxdWlja0ZpbHRlcnMgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZmlsdGVycz8ucXVpY2tGaWx0ZXJzO1xuXHRpZiAocXVpY2tGaWx0ZXJzKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxRdWlja0ZpbHRlclNlbGVjdG9yXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCwgXCJRdWlja0ZpbHRlckNvbnRhaW5lclwiXSl9XG5cdFx0XHRcdHBhdGhzPXtxdWlja0ZpbHRlcnMucGF0aHMubWFwKChwYXRoKSA9PiBwYXRoLmFubm90YXRpb25QYXRoKX1cblx0XHRcdFx0c2hvd0NvdW50cz17cXVpY2tGaWx0ZXJzLnNob3dDb3VudHN9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgQ29weVByb3ZpZGVyIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBUaGUgQ29weVByb3ZpZGVyXG4gKi9cbmZ1bmN0aW9uIGdldENvcHlQcm92aWRlcih0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzKTogQ29weVByb3ZpZGVyIHtcblx0Y29uc3QgY29udGV4dE9iamVjdFBhdGggPSB0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGg7XG5cblx0bGV0IHZpc2libGVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZGlzYWJsZUNvcHlUb0NsaXBib2FyZCkge1xuXHRcdHZpc2libGVFeHByZXNzaW9uID0gY29uc3RhbnQoZmFsc2UpO1xuXHR9IGVsc2UgaWYgKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0Ly8gRm9yIGEgVHJlZVRhYmxlLCB0aGUgY29weSBidXR0b24gc2hhbGwgYmUgdmlzaWJsZSBvbmx5IHdoZW4gZHJhZyBhbmQgZHJvcCBpcyBkaXNhYmxlZFxuXHRcdGlmIChjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0KSB7XG5cdFx0XHQvLyBMaXN0UmVwb3J0OiBlbmFibGUgY29weSBpZiB0aGUgZW50aXR5IGlzIG5vdCBkcmFmdC1lbmFibGVkXG5cdFx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IGNvbnN0YW50KChjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpLmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ID09PSB1bmRlZmluZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPYmplY3RQYWdlOiBlbmFibGUgY29weSBpbiByZWFkLW9ubHlcblx0XHRcdHZpc2libGVFeHByZXNzaW9uID0gbm90KFVJLklzRWRpdGFibGUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IGNvbnN0YW50KHRydWUpO1xuXHR9XG5cblx0cmV0dXJuIDxDb3B5UHJvdmlkZXIgdmlzaWJsZT17dmlzaWJsZUV4cHJlc3Npb259IC8+O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgQ2VsbFNlbGVjdG9yIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyBUaGUgQ2VsbFNlbGVjdG9yXG4gKi9cbmZ1bmN0aW9uIGdldENlbGxTZWxlY3Rvcih0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzKTogQ2VsbFNlbGVjdG9yIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGlmIChcblx0XHQhdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQgJiZcblx0XHR0YWJsZVR5cGUgJiZcblx0XHRbXCJSZXNwb25zaXZlVGFibGVcIiwgXCJHcmlkVGFibGVcIiwgXCJUcmVlVGFibGVcIl0uaW5jbHVkZXModGFibGVUeXBlKVxuXHQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENlbGxTZWxlY3RvclxuXHRcdFx0XHRlbmFibGVkPXtvcihcblx0XHRcdFx0XHR0YWJsZVR5cGUgIT09IFwiVHJlZVRhYmxlXCIsXG5cdFx0XHRcdFx0bm90KGdldERyYWdBbmREcm9wRW5hYmxlZCh0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGgsIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24pKVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRyYW5nZUxpbWl0PXsyMDB9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIENyZWF0aW9uUm93IGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgQ3JlYXRpb25Sb3dcbiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRpb25Sb3codGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcywgaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogQ3JlYXRpb25Sb3cgfCB1bmRlZmluZWQge1xuXHRpZiAoKHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU/Lm5hbWUgYXMgc3RyaW5nKSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93KSB7XG5cdFx0Y29uc3QgY3JlYXRpb25Sb3dBY3Rpb24gPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGlvblJvdykgYXNcblx0XHRcdHwgU3RhbmRhcmRBY3Rpb25cblx0XHRcdHwgdW5kZWZpbmVkO1xuXHRcdGlmIChjcmVhdGlvblJvd0FjdGlvbj8uaXNUZW1wbGF0ZWQpIHtcblx0XHRcdGNvbnN0IGN1c3RvbURhdGEgPSBjcmVhdGVDdXN0b21EYXRhcyhbXG5cdFx0XHRcdHsga2V5OiBcImRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGFcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIH0sXG5cdFx0XHRcdHsga2V5OiBcImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvblwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiB9XG5cdFx0XHRdKTtcblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PENyZWF0aW9uUm93XG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZVByb3BlcnRpZXMuY29udGVudElkLCBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3ddKX1cblx0XHRcdFx0XHR2aXNpYmxlPXtjcmVhdGlvblJvd0FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRhcHBseT17aGFuZGxlclByb3ZpZGVyLmdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSwgdHJ1ZSl9XG5cdFx0XHRcdFx0YXBwbHlFbmFibGVkPXtjcmVhdGlvblJvd0FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBjdXN0b21EYXRhXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9DcmVhdGlvblJvdz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBkcmFnIGFuZCBkcm9wIGNvbmZpZyBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIGRyYWcgYW5kIGRyb3AgY29uZmlnXG4gKi9cbmZ1bmN0aW9uIGdldERyYWdBbmREcm9wQ29uZmlnKFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IERyYWdEcm9wQ29uZmlnIHwgdW5kZWZpbmVkIHtcblx0aWYgKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxEcmFnRHJvcENvbmZpZ1xuXHRcdFx0XHRlbmFibGVkPXtjb21waWxlRXhwcmVzc2lvbihnZXREcmFnQW5kRHJvcEVuYWJsZWQodGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uKSl9XG5cdFx0XHRcdGRyb3BQb3NpdGlvbj17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmFsbG93RHJvcEJldHdlZW5Ob2RlcyA9PT0gdHJ1ZSA/IFwiT25PckJldHdlZW5cIiA6IFwiT25cIn1cblx0XHRcdFx0ZHJhZ2dhYmxlPXt0cnVlfVxuXHRcdFx0XHRkcm9wcGFibGU9e3RydWV9XG5cdFx0XHRcdGRyYWdTdGFydD17aGFuZGxlclByb3ZpZGVyLmRyYWdTdGFydERvY3VtZW50fVxuXHRcdFx0XHRkcmFnRW50ZXI9e2hhbmRsZXJQcm92aWRlci5kcmFnRW50ZXJEb2N1bWVudH1cblx0XHRcdFx0ZHJvcD17aGFuZGxlclByb3ZpZGVyLmRyb3BEb2N1bWVudH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhbiBhY3Rpb25Db21tYW5kIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvblxuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uQ29tbWFuZFxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb25Db21tYW5kKFxuXHRhY3Rpb25OYW1lOiBzdHJpbmcsXG5cdGFjdGlvbjogQ3VzdG9tQWN0aW9uLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0dGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPExpbmVJdGVtIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+XG4pOiBDb21tYW5kRXhlY3V0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZGF0YUZpZWxkID0gYWN0aW9uLmFubm90YXRpb25QYXRoXG5cdFx0PyAocGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aChhY3Rpb24uYW5ub3RhdGlvblBhdGgpLnRhcmdldCBhcyBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRQYXRoID0gYWN0aW9uLmFubm90YXRpb25QYXRoXG5cdFx0PyBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0ID0gYWN0aW9uQ29udGV4dFBhdGggPyBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb25Db250ZXh0UGF0aCkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBhY3Rpb25Db250ZXh0ID8gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGFjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb24pIDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0JvdW5kID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdGNvbnN0IGlzT3BlcmF0aW9uQXZhaWxhYmxlID1cblx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbik/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0Y29uc3QgZGlzcGxheUNvbW1hbmRBY3Rpb24gPSBhY3Rpb24udHlwZSA9PT0gXCJGb3JBY3Rpb25cIiA/IGlzQm91bmQgIT09IHRydWUgfHwgaXNPcGVyYXRpb25BdmFpbGFibGUgOiB0cnVlO1xuXHRjb25zdCBlbmFibGVkID0gIWZvckNvbnRleHRNZW51ID8gYWN0aW9uLmVuYWJsZWQgOiBhY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51O1xuXHRpZiAoZGlzcGxheUNvbW1hbmRBY3Rpb24gJiYgKCFmb3JDb250ZXh0TWVudSB8fCBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShhY3Rpb24sIGNvbnRleHRPYmplY3RQYXRoKSkpIHtcblx0XHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gYWN0aW9uLmNvbW1hbmQgOiBhY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXG5cdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVycyA9IHtcblx0XHRcdG9uRXhlY3V0ZUFjdGlvbjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdFx0XHRkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdCksXG5cdFx0XHRvbkV4ZWN1dGVJQk46IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihhY3Rpb24sIGZhbHNlKSxcblx0XHRcdG9uRXhlY3V0ZU1hbmlmZXN0OiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihhY3Rpb24sIGZvckNvbnRleHRNZW51KSxcblx0XHRcdGlzSUJORW5hYmxlZDpcblx0XHRcdFx0ZW5hYmxlZCA/P1xuXHRcdFx0XHRUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvcklCTkVuYWJsZWQoXG5cdFx0XHRcdFx0eyBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLCB0YWJsZURlZmluaXRpb246IHRhYmxlRGVmaW5pdGlvbiB9LFxuXHRcdFx0XHRcdGRhdGFGaWVsZCEgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdCEhKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLlJlcXVpcmVzQ29udGV4dCxcblx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuTmF2aWdhdGlvbkF2YWlsYWJsZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpLFxuXHRcdFx0aXNBY3Rpb25FbmFibGVkOlxuXHRcdFx0XHRlbmFibGVkID8/XG5cdFx0XHRcdFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZChcblx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0KGRhdGFGaWVsZCEgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKS5BY3Rpb24sXG5cdFx0XHRcdFx0ISFpc0JvdW5kLFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHRQYXRoLFxuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdCksXG5cdFx0XHRpc0VuYWJsZWQ6IGVuYWJsZWRcblx0XHR9O1xuXHRcdHJldHVybiBnZXRDb21tYW5kRXhlY3V0aW9uRm9yQWN0aW9uKGNvbW1hbmQsIHRhYmxlRGVmaW5pdGlvbi5jb21tYW5kQWN0aW9ucyFbYWN0aW9uTmFtZV0sIGFjdGlvblBhcmFtZXRlcnMpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZm9yIHRoZSByZXF1aXJlZCBtb2R1bGVzLlxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgcmVxdWlyZWQgbW9kdWxlc1xuICovXG5mdW5jdGlvbiBnZXRDb3JlUmVxdWlyZSh0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbik6IHN0cmluZyB7XG5cdGNvbnN0IGN1c3RvbU1vZHVsZXMgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzID8/IFtdO1xuXG5cdHJldHVybiBge1RhYmxlUnVudGltZTogJ3NhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVSdW50aW1lJywgQVBJOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSScke2N1c3RvbU1vZHVsZXNcblx0XHQubWFwKChtb2R1bGU6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4gYCwgY3VzdG9tTW9kdWxlJHtpbmRleCArIDF9OiAnJHttb2R1bGV9J2ApXG5cdFx0LmpvaW4oXCJcIil9fWA7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYSBjb21wdXRlZCBjb2x1bW4uXG4gKiBDdXJyZW50bHksIHRoaXMgcmVwcmVzZW50cyBvbmx5IHRoZSBEcmFmdEluZGljYXRvciBhbmQgdGhlIFNpdHVhdGlvbnNJbmRpY2F0b3IuXG4gKiBAcGFyYW0gdGFibGVJZCBUaGUgdGFibGUgSURcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbXB1dGVkIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHVzZWQgZm9yIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGVuYWJsZUFuYWx5dGljcyBXaGV0aGVyIGFuYWx5dGljcyBhcmUgZW5hYmxlZFxuICogQHJldHVybnMgVGhlIGNvbXB1dGVkIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXB1dGVkQ29sdW1uKFxuXHR0YWJsZUlkOiBzdHJpbmcsXG5cdGNvbHVtbjogQ29tcHV0ZWRUYWJsZUNvbHVtbixcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0ZW5hYmxlQW5hbHl0aWNzOiBib29sZWFuIHwgdW5kZWZpbmVkXG4pOiBDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRpZiAoY29sdW1uLmlzRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbHVtblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ1wiLCBcImNvbXB1dGVkQ29sdW1uc1wiLCBcImRyYWZ0U3RhdHVzXCJdKX1cblx0XHRcdFx0aGVhZGVyVmlzaWJsZT17ZmFsc2V9XG5cdFx0XHRcdHByb3BlcnR5S2V5PXtjb2x1bW4ubmFtZX1cblx0XHRcdFx0aGVhZGVyPXtjb2x1bW4ubGFiZWx9XG5cdFx0XHRcdHRvb2x0aXA9e2NvbHVtbi50b29sdGlwfVxuXHRcdFx0XHR3aWR0aD1cIjNlbVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxEcmFmdEluZGljYXRvclxuXHRcdFx0XHRcdGRyYWZ0SW5kaWNhdG9yVHlwZT17T2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uT25seX1cblx0XHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0dmlzaWJsZT17b3Iobm90KEVudGl0eS5Jc0FjdGl2ZSksIEVudGl0eS5IYXNEcmFmdCl9XG5cdFx0XHRcdFx0dXNlZEluVGFibGU9e3RydWV9XG5cdFx0XHRcdFx0dXNlZEluQW5hbHl0aWNhbFRhYmxlPXtlbmFibGVBbmFseXRpY3N9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0NvbHVtbj5cblx0XHQpO1xuXHR9IGVsc2UgaWYgKGNvbHVtbi5pc1NpdHVhdGlvbnNJbmRpY2F0b3IpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbHVtblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ1wiLCBcImNvbXB1dGVkQ29sdW1uc1wiLCBcInNpdHVhdGlvbnNJbmRpY2F0b3JcIl0pfVxuXHRcdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHRcdGhlYWRlcj17Y29sdW1uLmxhYmVsfVxuXHRcdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdFx0aGVhZGVyVmlzaWJsZT17ZmFsc2V9XG5cdFx0XHRcdHdpZHRoPVwiNGVtXCJcblx0XHRcdD5cblx0XHRcdFx0PFNpdHVhdGlvbnNJbmRpY2F0b3IgY29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfSAvPlxuXHRcdFx0PC9Db2x1bW4+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYSBzbG90IGNvbHVtbi5cbiAqIFRoaXMgY29sdW1uIHdpbGwgZWl0aGVyIHJldXNlIGEgdGVtcGxhdGUgY29udHJvbCB0aGF0IGlzIGRlZmluZWQgYXQgcnVudGltZSAodGVtcGxhdGVJZCBjYXNlKSwgb3IgZGVmaW5lIGEgc2xvdCB3aGVyZSB0aGUgWE1MIGNvbnRlbnQgaXMgY29waWVkLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBzbG90IGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gaXNSZWFkT25seSBXaGV0aGVyIHRoZSB0YWJsZSBpcyByZWFkIG9ubHlcbiAqIEByZXR1cm5zIFRoZSBzbG90IGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb3RDb2x1bW4odGFibGVJZDogc3RyaW5nLCBjb2x1bW46IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIGlzUmVhZE9ubHk6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBDb2x1bW4ge1xuXHRjb25zdCB0ZW1wbGF0ZSA9XG5cdFx0dHlwZW9mIGNvbHVtbi50ZW1wbGF0ZSA9PT0gXCJzdHJpbmdcIiAmJiAhY29sdW1uLnRlbXBsYXRlPy5zdGFydHNXaXRoKFwiPFwiKSA/IChcblx0XHRcdDxTbG90Q29sdW1uIHRlbXBsYXRlSWQ9e2NvbHVtbi50ZW1wbGF0ZX0gLz5cblx0XHQpIDogKFxuXHRcdFx0Y29sdW1uLnRlbXBsYXRlXG5cdFx0KTtcblx0cmV0dXJuIChcblx0XHQ8Q29sdW1uXG5cdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ1wiLCBjb2x1bW4uaWRdKX1cblx0XHRcdHByb3BlcnR5S2V5PXtjb2x1bW4ubmFtZX1cblx0XHRcdHdpZHRoPXtjb2x1bW4ud2lkdGh9XG5cdFx0XHRoQWxpZ249e2NvbHVtbi5ob3Jpem9udGFsQWxpZ259XG5cdFx0XHRoZWFkZXI9e2NvbHVtbi5oZWFkZXJ9XG5cdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdHJlcXVpcmVkPXtpc1JlYWRPbmx5ID8gdW5kZWZpbmVkIDogY29sdW1uLnJlcXVpcmVkfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGV4dGVuZGVkU2V0dGluZ3M6IDxSZXNwb25zaXZlQ29sdW1uU2V0dGluZ3MgaW1wb3J0YW5jZT17Y29sdW1uLmltcG9ydGFuY2V9IC8+LFxuXHRcdFx0XHR0ZW1wbGF0ZTogdGVtcGxhdGVcblx0XHRcdH19XG5cdFx0PC9Db2x1bW4+XG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIERyYWZ0SW5kaWNhdG9yLlxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIERyYWZ0SW5kaWNhdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHJhZnRJbmRpY2F0b3IoY29sbGVjdGlvbjogQ29udGV4dCwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBGb3JtRWxlbWVudFdyYXBwZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoXG5cdFx0Y29sbGVjdGlvbi5nZXRPYmplY3QoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiKSAmJlxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiLi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCIpICYmXG5cdFx0Y29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZvcm1FbGVtZW50V3JhcHBlcj5cblx0XHRcdFx0PERyYWZ0SW5kaWNhdG9yXG5cdFx0XHRcdFx0ZHJhZnRJbmRpY2F0b3JUeXBlPXtPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0fVxuXHRcdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0XHR2aXNpYmxlPXtnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nKGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwTmFtZSl9XG5cdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tcInRoaXM+YXJpYUxhYmVsbGVkQnlcIl19XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0Zvcm1FbGVtZW50V3JhcHBlcj5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBTaXR1YXRpb25JbmRpY2F0b3IgT2JqZWN0U3RhdHVzLlxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgT2JqZWN0U3RhdHVzLlxuICovXG5mdW5jdGlvbiBnZXRTaXR1YXRpb25JbmRpY2F0b3IoY29sbGVjdGlvbjogQ29udGV4dCwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBPYmplY3RTdGF0dXMgfCB1bmRlZmluZWQge1xuXHRpZiAoXG5cdFx0Y29sbGVjdGlvbi5nZXRPYmplY3QoXCIuL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlcIikgJiZcblx0XHRjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoXG5cdCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8T2JqZWN0U3RhdHVzXG5cdFx0XHRcdHZpc2libGU9e2NvbHVtbi5mb3JtYXRPcHRpb25zPy5zaG93RXJyb3JPYmplY3RTdGF0dXN9XG5cdFx0XHRcdGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJvdHRvbVwiXG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+Q29udGFpbnNfRXJyb3JzfVwiXG5cdFx0XHRcdHN0YXRlPVwiRXJyb3JcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBkYXRlLXRpbWUgZm9ybWF0IHN0eWxlIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRhIGZpZWxkIGNvbnRleHQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZGF0YSBmaWVsZFxuICogQHJldHVybnMgUmV0dXJucyAnc2hvcnQnIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgZmllbGQgaXMgb2YgdGhlIHR5cGUgJ0VkbS5UaW1lT2ZEYXknLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RGF0ZVRpbWVTdHlsZShkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0KTogRGF0ZVRpbWVTdHlsZSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhcmdldE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihkYXRhRmllbGRDb250ZXh0KS50YXJnZXRPYmplY3Q7XG5cdGlmIChpc0RhdGFGaWVsZCh0YXJnZXRPYmplY3QpICYmIHRhcmdldE9iamVjdC5WYWx1ZT8uJHRhcmdldD8udHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCIpIHtcblx0XHRyZXR1cm4gXCJzaG9ydFwiO1xuXHR9XG5cdGlmIChcblx0XHRpc0RhdGFGaWVsZEZvckFubm90YXRpb24odGFyZ2V0T2JqZWN0KSAmJlxuXHRcdGhhc0RhdGFQb2ludFRhcmdldCh0YXJnZXRPYmplY3QpICYmXG5cdFx0KHRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZS4kdGFyZ2V0LnR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiXG5cdCkge1xuXHRcdHJldHVybiBcInNob3J0XCI7XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIHRlbXBsYXRlIGZvciB0aGUgY3JlYXRpb24gcm93LlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdHlwZSBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBjcmVhdGlvbk1vZGUgVGhlIGNyZWF0aW9uIG1vZGVcbiAqIEBwYXJhbSBpc1RhYmxlUmVhZE9ubHkgV2hldGhlciB0aGUgdGFibGUgaXMgcmVhZCBvbmx5XG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0XG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBmaWVsZE1vZGUgVGhlIGZpZWxkIG1vZGVcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gcm93LlxuICovXG5mdW5jdGlvbiBnZXRDcmVhdGlvblRlbXBsYXRlKFxuXHR0YWJsZUlkOiBzdHJpbmcsXG5cdGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0Y3JlYXRpb25Nb2RlOiBQcm9wZXJ0aWVzT2Y8VGFibGVDcmVhdGlvbk9wdGlvbnM+IHwgdW5kZWZpbmVkLFxuXHRpc1RhYmxlUmVhZE9ubHk6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGRhdGFGaWVsZDogQ29udGV4dCxcblx0ZmllbGRNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoKGNyZWF0aW9uTW9kZT8ubmFtZSBhcyBzdHJpbmcpID09PSBcIkNyZWF0aW9uUm93XCIpIHtcblx0XHRsZXQgY29sdW1uRWRpdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRzd2l0Y2ggKGlzVGFibGVSZWFkT25seSkge1xuXHRcdFx0Y2FzZSB0cnVlOlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRGlzcGxheVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgZmFsc2U6XG5cdFx0XHRcdGNvbHVtbkVkaXRNb2RlID0gXCJFZGl0YWJsZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbHVtbkVkaXRNb2RlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkLmdldE9iamVjdCgpO1xuXG5cdFx0Y29uc3QgcmVhY3RpdmVBcmVhTW9kZTogXCJJbmxpbmVcIiB8IFwiT3ZlcmxheVwiIHwgdW5kZWZpbmVkID0gdGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gXCJPdmVybGF5XCIgOiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBmb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0ZmllbGRNb2RlOiBmaWVsZE1vZGUsXG5cdFx0XHR0ZXh0TGluZXNFZGl0OiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dExpbmVzRWRpdCxcblx0XHRcdHRleHRNYXhMaW5lczogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lcyxcblx0XHRcdHRleHRNYXhMZW5ndGg6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGVuZ3RoLFxuXHRcdFx0dGV4dE1heENoYXJhY3RlcnNEaXNwbGF5OiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heENoYXJhY3RlcnNEaXNwbGF5LFxuXHRcdFx0dGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXksXG5cdFx0XHR0ZXh0QWxpZ25Nb2RlOiBcIlRhYmxlXCIsXG5cdFx0XHRzZW1hbnRpY0tleVN0eWxlOiB0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBcIk9iamVjdElkZW50aWZpZXJcIiA6IFwiTGFiZWxcIixcblx0XHRcdGhhc0RyYWZ0SW5kaWNhdG9yOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uaGFzRHJhZnRJbmRpY2F0b3IsXG5cdFx0XHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgsXG5cdFx0XHRmaWVsZEdyb3VwTmFtZTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBOYW1lLFxuXHRcdFx0c2hvd0ljb25Vcmw6IGRhdGFGaWVsZE9iamVjdD8uSW5saW5lICYmICEhZGF0YUZpZWxkT2JqZWN0Py5JY29uVXJsLFxuXHRcdFx0aWdub3JlTmF2aWdhdGlvbkF2YWlsYWJsZTogZW5hYmxlQW5hbHl0aWNzID8/IGZhbHNlLFxuXHRcdFx0aXNDdXJyZW5jeU9yVW5pdEFsaWduZWQ6IHRydWUsXG5cdFx0XHRkYXRlVGltZVN0eWxlOiBnZXREZWZhdWx0RGF0ZVRpbWVTdHlsZShkYXRhRmllbGQpLFxuXHRcdFx0cmVhY3RpdmVBcmVhTW9kZTogcmVhY3RpdmVBcmVhTW9kZVxuXHRcdH07XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZpZWxkXG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntUYWJsZVJ1bnRpbWU6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlUnVudGltZSd9XCJcblx0XHRcdFx0dmhJZFByZWZpeD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiVGFibGVWYWx1ZUhlbHBcIl0pfVxuXHRcdFx0XHRlZGl0TW9kZT17Y29sdW1uRWRpdE1vZGV9XG5cdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0bWV0YVBhdGg9e2RhdGFGaWVsZC5nZXRQYXRoKCl9XG5cdFx0XHRcdHdyYXA9e3RhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIn1cblx0XHRcdFx0Y2hhbmdlPXtoYW5kbGVyUHJvdmlkZXIuZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93fVxuXHRcdFx0XHRzaG93RXJyb3JPYmplY3RTdGF0dXM9e2NvbHVtbi5mb3JtYXRPcHRpb25zPy5zaG93RXJyb3JPYmplY3RTdGF0dXMgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGZvcm1hdE9wdGlvbnM6IDxGaWVsZEZvcm1hdE9wdGlvbnMgey4uLmZvcm1hdE9wdGlvbnN9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0ZpZWxkPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHRlbXBsYXRlIGZvciB0aGUgbWFjcm9zOkZpZWxkIGluc2lkZSB0aGUgY29sdW1uLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uIFRoZSB0YWJsZSBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGRhdGFGaWVsZENvbnRleHQgVGhlIGRhdGEgZmllbGQgY29udGV4dFxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dFxuICogQHBhcmFtIGVuYWJsZUFuYWx5dGljcyBXaGV0aGVyIGFuYWx5dGljcyBhcmUgZW5hYmxlZFxuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdHlwZSBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBpc1RhYmxlUmVhZE9ubHkgV2hldGhlciB0aGUgdGFibGUgaXMgcmVhZCBvbmx5XG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlXG4gKiBAcGFyYW0gZmllbGRNb2RlIFRoZSBmaWVsZCBtb2RlXG4gKiBAcGFyYW0gaXNDb21wYWN0VHlwZSBXaGV0aGVyIHRoZSB0YWJsZSBpcyBjb21wYWN0XG4gKiBAcGFyYW0gdGV4dEFsaWduIFRoZSB0ZXh0IGFsaWdubWVudFxuICogQHBhcmFtIGFyaWFMYWJlbGxlZEJ5IFRoZSBhcmlhIGxhYmVsbGVkIGJ5XG4gKiBAcGFyYW0gc2hvd0VtcHR5SW5kaWNhdG9yIFdoZXRoZXIgdG8gc2hvdyB0aGUgZW1wdHkgaW5kaWNhdG9yXG4gKiBAcGFyYW0gY2xhc3NOYW1lXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyIFRoZSBoYW5kbGVyIHByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFjcm9GaWVsZFRlbXBsYXRlKFxuXHR0YWJsZUlkOiBzdHJpbmcsXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0ZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0ZW5hYmxlQW5hbHl0aWNzOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0aXNUYWJsZVJlYWRPbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjcmVhdGlvbk1vZGU6IFByb3BlcnRpZXNPZjxUYWJsZUNyZWF0aW9uT3B0aW9ucz4gfCB1bmRlZmluZWQsXG5cdGZpZWxkTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRpc0NvbXBhY3RUeXBlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHR0ZXh0QWxpZ246IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0YXJpYUxhYmVsbGVkQnk6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0c2hvd0VtcHR5SW5kaWNhdG9yOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjbGFzc05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyLFxuXHRpc0Nvbm5lY3RlZEZpZWxkID0gZmFsc2Vcbik6IHN0cmluZyB7XG5cdGNvbnN0IGRhdGFGaWVsZE9iamVjdCA9IGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdGxldCBjb2x1bW5FZGl0TW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzd2l0Y2ggKGlzVGFibGVSZWFkT25seSkge1xuXHRcdGNhc2UgdHJ1ZTpcblx0XHRcdGNvbHVtbkVkaXRNb2RlID0gXCJEaXNwbGF5XCI7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIGZhbHNlOlxuXHRcdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkVkaXRhYmxlXCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Y29sdW1uRWRpdE1vZGUgPSB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVVwbG9hZFBsdWdpbiAmJiBjb2x1bW4udHlwZUNvbmZpZz8uY2xhc3NOYW1lID09PSBcIkVkbS5TdHJlYW1cIikge1xuXHRcdGNvbHVtbkVkaXRNb2RlID0gXCJEaXNwbGF5XCI7XG5cdH1cblxuXHRjb25zdCByZWFjdGl2ZUFyZWFNb2RlOiBcIklubGluZVwiIHwgXCJPdmVybGF5XCIgfCB1bmRlZmluZWQgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gXCJPdmVybGF5XCIgOiB1bmRlZmluZWQ7XG5cblx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRmaWVsZE1vZGU6IGZpZWxkTW9kZSxcblx0XHR0ZXh0TGluZXNFZGl0OiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dExpbmVzRWRpdCxcblx0XHR0ZXh0TWF4TGluZXM6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMsXG5cdFx0dGV4dE1heENoYXJhY3RlcnNEaXNwbGF5OiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heENoYXJhY3RlcnNEaXNwbGF5LFxuXHRcdHRleHRNYXhMZW5ndGg6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGVuZ3RoLFxuXHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5LFxuXHRcdHRleHRBbGlnbk1vZGU6IFwiVGFibGVcIixcblx0XHRzaG93RW1wdHlJbmRpY2F0b3I6IHNob3dFbXB0eUluZGljYXRvcixcblx0XHRzZW1hbnRpY0tleVN0eWxlOiB0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBcIk9iamVjdElkZW50aWZpZXJcIiA6IFwiTGFiZWxcIixcblx0XHRoYXNEcmFmdEluZGljYXRvcjogY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yLFxuXHRcdGZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCxcblx0XHRmaWVsZEdyb3VwTmFtZTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBOYW1lLFxuXHRcdHNob3dJY29uVXJsOiBkYXRhRmllbGRPYmplY3Q/LklubGluZSAmJiAhIWRhdGFGaWVsZE9iamVjdD8uSWNvblVybCxcblx0XHRpZ25vcmVOYXZpZ2F0aW9uQXZhaWxhYmxlOiBlbmFibGVBbmFseXRpY3MgPz8gZmFsc2UsXG5cdFx0aXNBbmFseXRpY3M6IGVuYWJsZUFuYWx5dGljcyxcblx0XHRmb3JJbmxpbmVDcmVhdGlvblJvd3M6IGNyZWF0aW9uTW9kZT8ubmFtZSA9PT0gXCJJbmxpbmVDcmVhdGlvblJvd3NcIixcblx0XHRpc0N1cnJlbmN5T3JVbml0QWxpZ25lZDogaXNDb25uZWN0ZWRGaWVsZCA/IGZhbHNlIDogdHJ1ZSxcblx0XHRjb21wYWN0U2VtYW50aWNLZXk6IGlzQ29tcGFjdFR5cGUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGAke2lzQ29tcGFjdFR5cGV9YCxcblx0XHRkYXRlVGltZVN0eWxlOiBnZXREZWZhdWx0RGF0ZVRpbWVTdHlsZShkYXRhRmllbGRDb250ZXh0KSxcblx0XHRpc0FuYWx5dGljYWxBZ2dyZWdhdGVkUm93OiB0YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCxcblx0XHRyZWFjdGl2ZUFyZWFNb2RlOiByZWFjdGl2ZUFyZWFNb2RlXG5cdH07XG5cdHJldHVybiAoXG5cdFx0PEZpZWxkXG5cdFx0XHR2aElkUHJlZml4PXtnZW5lcmF0ZShbdGFibGVJZCwgXCJUYWJsZVZhbHVlSGVscFwiXSl9XG5cdFx0XHRlZGl0TW9kZT17Y29sdW1uRWRpdE1vZGV9XG5cdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9XG5cdFx0XHR0ZXh0QWxpZ249e2lzQ29ubmVjdGVkRmllbGQgPyBcIkxlZnRcIiA6IHRleHRBbGlnbn1cblx0XHRcdHdyYXA9e3RhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIn1cblx0XHRcdGNsYXNzPXtjbGFzc05hbWV9XG5cdFx0XHRsaXZlQ2hhbmdlPXtoYW5kbGVyUHJvdmlkZXIuZmllbGRMaXZlQ2hhbmdlfVxuXHRcdFx0YXJpYUxhYmVsbGVkQnk9e2FyaWFMYWJlbGxlZEJ5ID8gYXJpYUxhYmVsbGVkQnkuc3BsaXQoXCIgXCIpIDogdW5kZWZpbmVkfVxuXHRcdFx0bmF2aWdhdGVBZnRlckFjdGlvbj17Y29sdW1uLmlzTmF2aWdhYmxlfVxuXHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZz17Y29sdW1uLmRpc2FibGVTdHJpY3RIYW5kbGluZ31cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiA8RmllbGRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0fX1cblx0XHQ8L0ZpZWxkPlxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIHRoZSBjb2x1bW4uXG4gKiBAcGFyYW0gdGFibGVJZCBUaGUgdGFibGUgSURcbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gZGF0YUZpZWxkT1AgVGhlIGRhdGEgZmllbGQgb2JqZWN0IHBhdGhcbiAqIEBwYXJhbSBkYXRhRmllbGRDb250ZXh0IFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHRcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXIgVGhlIGhhbmRsZXIgcHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29sdW1uLlxuICovXG5mdW5jdGlvbiBnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUoXG5cdHRhYmxlSWQ6IHN0cmluZyxcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGRhdGFGaWVsZE9QOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IHsgdGVtcGxhdGU6IHN0cmluZzsgY3JlYXRpb25UZW1wbGF0ZT86IHN0cmluZyB9IHtcblx0bGV0IHRlbXBsYXRlOiBzdHJpbmc7XG5cdGxldCBjcmVhdGlvblRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbjtcblx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3M7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBpc1RhYmxlUmVhZE9ubHkgPSB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHk7XG5cdGNvbnN0IGNyZWF0aW9uTW9kZSA9IHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU7XG5cdGNvbnN0IGZpZWxkTW9kZSA9IHRhYmxlUHJvcGVydGllcy5maWVsZE1vZGU7XG5cdGNvbnN0IGlzQ29tcGFjdFR5cGUgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNDb21wYWN0VHlwZTtcblxuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRPUC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcztcblx0aWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0KGlzQW5ub3RhdGlvbk9mVGVybTxDaGFydD4oZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LCBVSUFubm90YXRpb25UZXJtcy5DaGFydCkgfHxcblx0XHRcdGlzQW5ub3RhdGlvbk9mVGVybTxQcmVzZW50YXRpb25WYXJpYW50PihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQpKVxuXHQpIHtcblx0XHRjb25zdCBzaG93T25seUNoYXJ0ID0gKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/ICFjb2x1bW4uc2V0dGluZ3M/LnNob3dNaWNyb0NoYXJ0TGFiZWwgOiB1bmRlZmluZWQpID8/IHRydWU7XG5cdFx0Y29uc3QgbWljcm9DaGFydFNpemUgPSB0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBjb2x1bW4uc2V0dGluZ3M/Lm1pY3JvQ2hhcnRTaXplID8/IFwiWFNcIiA6IFwiWFNcIjtcblx0XHRsZXQgbWljcm9DaGFydENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uXG5cdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbGxlY3Rpb24uZ2V0UGF0aChkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIikpKTtcblx0XHRtaWNyb0NoYXJ0Q29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvbkNvbnRleHQobWljcm9DaGFydENvbGxlY3Rpb24pKTtcblx0XHQvL1dlIG9ubHkgY29uc2lkZXIgdGhlIGZpcnN0IHZpc3VhbGl6YXRpb24gb2YgdGhlIFBWIGluIFBWIGNhc2UgYW5kIGV4cGVjdCBpdCB0byBiZSBhIGNoYXJ0IChzaW1pbGFyIHRvIFZpc3VhbEZpbHRlcnMpXG5cdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHQ8TWljcm9DaGFydFxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIGRhdGFGaWVsZF0pfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17bWljcm9DaGFydENvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpICsgXCIvVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiKVxuXHRcdFx0XHRcdC5nZXRQYXRoKCl9XG5cdFx0XHRcdHNob3dPbmx5Q2hhcnQ9e3Nob3dPbmx5Q2hhcnR9XG5cdFx0XHRcdHNpemU9e21pY3JvQ2hhcnRTaXplID8/IFwiWFNcIn1cblx0XHRcdFx0aGlkZU9uTm9EYXRhPXt0cnVlfVxuXHRcdFx0XHRpc0FuYWx5dGljcz17ZW5hYmxlQW5hbHl0aWNzfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQ+KGRhdGFGaWVsZCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkKSAmJlxuXHRcdGlzTXVsdGlWYWx1ZUZpZWxkKGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFGaWVsZE9QLCBkYXRhRmllbGQuVmFsdWUucGF0aCkpXG5cdCkge1xuXHRcdC8vIHdoZW4gZXZhbHVhdGluZyBcIkAkdWk1LmNvbnRleHQuaXNJbmFjdGl2ZVwiIHdlIGFyZSBmb3JjZWQgdG8gYWRkIGlzVHJ1dGh5IHRvIGZvcmNlIHRoZSBiaW5kaW5nIGV2YWx1YXRpb25cblx0XHRjb25zdCBpc1JlYWRPbmx5ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKGlzVGFibGVSZWFkT25seSA9PT0gdHJ1ZSwgYW5kKGlzVHJ1dGh5KFVJLklzSW5hY3RpdmUpLCBjcmVhdGlvbk1vZGU/Lm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIpKSxcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSksXG5cdFx0XHRcdGlmRWxzZShlcXVhbChmaWVsZE1vZGUsIFwibm93cmFwcGVyXCIpLCBjb25zdGFudCh0cnVlKSwgY29uc3RhbnQodW5kZWZpbmVkKSlcblx0XHRcdClcblx0XHQpO1xuXHRcdGlmIChpc1JlYWRPbmx5ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0ZW1wbGF0ZSA9IChcblx0XHRcdFx0PE11bHRpVmFsdWVGaWVsZEJsb2NrXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX1cblx0XHRcdFx0XHR1c2VQYXJlbnRCaW5kaW5nQ2FjaGU9e3RhYmxlRGVmaW5pdGlvbi5kaXNhYmxlT3duUmVxdWVzdE9uTVZGfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRCbG9ja1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0cmVhZE9ubHk9e2lzUmVhZE9ubHl9XG5cdFx0XHRcdFx0dXNlUGFyZW50QmluZGluZ0NhY2hlPXt0YWJsZURlZmluaXRpb24uZGlzYWJsZU93blJlcXVlc3RPbk1WRn1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0aXNBbm5vdGF0aW9uT2ZUZXJtPEZpZWxkR3JvdXA+KGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCwgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cClcblx0KSB7XG5cdFx0Y29uc3QgZmllbGRHcm91cDogRmllbGRHcm91cCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRjb25zdCBkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dCA9IGRhdGFGaWVsZENvbnRleHRcblx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFcIik7XG5cdFx0Y29uc3QgZmllbGRHcm91cENvbGxlY3Rpb25MZW5ndGggPSBmaWVsZEdyb3VwLkRhdGEubGVuZ3RoIC0gMTtcblxuXHRcdGNvbnN0IGl0ZW1zID0gZmllbGRHcm91cC5EYXRhLm1hcCgoZmllbGRHcm91cERhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgZmllbGRHcm91cERhdGFGaWVsZElkeDogbnVtYmVyKSA9PiB7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dCA9IGRhdGFGaWVsZENvbGxlY3Rpb25Db250ZXh0XG5cdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdC5jcmVhdGVCaW5kaW5nQ29udGV4dChkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9cIiArIGZpZWxkR3JvdXBEYXRhRmllbGRJZHgpO1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cERhdGFGaWVsZE9QID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0KTtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBMYWJlbCA9IEZpZWxkSGVscGVyLmNvbXB1dGVMYWJlbFRleHQoZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KCksIHtcblx0XHRcdFx0Y29udGV4dDogZmllbGRHcm91cERhdGFGaWVsZENvbnRleHRcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGNvbHVtbi5zaG93RGF0YUZpZWxkc0xhYmVsICYmICEhZmllbGRHcm91cExhYmVsKSB7XG5cdFx0XHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5tYWNyb3NcIikhO1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxIQm94XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtnZXRWaXNpYmxlRXhwcmVzc2lvbihmaWVsZEdyb3VwRGF0YUZpZWxkT1ApfVxuXHRcdFx0XHRcdFx0YWxpZ25JdGVtcz17RmllbGRIZWxwZXIuYnVpbGRFeHByZXNzaW9uRm9yQWxpZ25JdGVtcyhcblx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9WaXN1YWxpemF0aW9uLyRFbnVtTWVtYmVyXCIpXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0XHRpZD17VGFibGVIZWxwZXIuZ2V0RmllbGRHcm91cExhYmVsU3RhYmxlSWQodGFibGVJZCwgZmllbGRHcm91cERhdGFGaWVsZE9QKX1cblx0XHRcdFx0XHRcdFx0dGV4dD17cmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkhFQURFUl9GT1JNX0xBQkVMXCIsIFtmaWVsZEdyb3VwTGFiZWxdKX1cblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaVRpbnlNYXJnaW5FbmRcIlxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtnZXRWaXNpYmxlRXhwcmVzc2lvbihmaWVsZEdyb3VwRGF0YUZpZWxkT1ApfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxWQm94PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxGbGV4SXRlbURhdGEgZ3Jvd0ZhY3Rvcj1cIjFcIiAvPixcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogZ2V0TWFjcm9GaWVsZFRlbXBsYXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdFx0XHRcdFx0XHRcdGVuYWJsZUFuYWx5dGljcyxcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdGlzVGFibGVSZWFkT25seSxcblx0XHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZSxcblx0XHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdGlzQ29tcGFjdFR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcIkxlZnRcIixcblx0XHRcdFx0XHRcdFx0XHRcdGAke1RhYmxlSGVscGVyLmdldENvbHVtblN0YWJsZUlkKHRhYmxlSWQsIGRhdGFGaWVsZE9QKX0gJHtUYWJsZUhlbHBlci5nZXRGaWVsZEdyb3VwTGFiZWxTdGFibGVJZChcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFibGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZE9QXG5cdFx0XHRcdFx0XHRcdFx0XHQpfWAsXG5cdFx0XHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0TWFyZ2luQ2xhc3MoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVmlzdWFsaXphdGlvbi8kRW51bU1lbWJlclwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZElkeCA9PT0gZmllbGRHcm91cENvbGxlY3Rpb25MZW5ndGhcblx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRoYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGdldE1hY3JvRmllbGRUZW1wbGF0ZShcblx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb2x1bW4sXG5cdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdFx0XHRlbmFibGVBbmFseXRpY3MsXG5cdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdGlzVGFibGVSZWFkT25seSxcblx0XHRcdFx0XHRjcmVhdGlvbk1vZGUsXG5cdFx0XHRcdFx0ZmllbGRNb2RlLFxuXHRcdFx0XHRcdGlzQ29tcGFjdFR5cGUsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFRhYmxlSGVscGVyLmdldENvbHVtblN0YWJsZUlkKHRhYmxlSWQsIGRhdGFGaWVsZE9QKSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRNYXJnaW5DbGFzcyhcblx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVmlzdWFsaXphdGlvbi8kRW51bU1lbWJlclwiKSxcblx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRJZHggPT09IGZpZWxkR3JvdXBDb2xsZWN0aW9uTGVuZ3RoXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRoYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IGRyYWZ0SW5kaWNhdG9yID0gZ2V0RHJhZnRJbmRpY2F0b3IoY29sbGVjdGlvbiwgY29sdW1uKTtcblx0XHRpZiAoZHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdGl0ZW1zLnB1c2goZHJhZnRJbmRpY2F0b3IpO1xuXHRcdH1cblx0XHRjb25zdCBzaXR1YXRpb25JbmRpY2F0b3IgPSBnZXRTaXR1YXRpb25JbmRpY2F0b3IoY29sbGVjdGlvbiwgY29sdW1uKTtcblx0XHRpZiAoc2l0dWF0aW9uSW5kaWNhdG9yKSB7XG5cdFx0XHRpdGVtcy5wdXNoKHNpdHVhdGlvbkluZGljYXRvcik7XG5cdFx0fVxuXG5cdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHQ8VkJveFxuXHRcdFx0XHR2aXNpYmxlPXtUYWJsZUhlbHBlci5nZXRWQm94VmlzaWJpbGl0eShcblx0XHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRjb2x1bW4uY29sbGVjdGlvbkZpZWxkc0hpZGRlbkV4cHJlc3Npb24sXG5cdFx0XHRcdFx0ZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKVxuXHRcdFx0XHQpfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGl0ZW1zOiBpdGVtc1xuXHRcdFx0XHR9fVxuXHRcdFx0PC9WQm94PlxuXHRcdCk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPERhdGFGaWVsZEZvckFubm90YXRpb24+KGRhdGFGaWVsZCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikgJiZcblx0XHRpc0Fubm90YXRpb25PZlRlcm08Q29ubmVjdGVkRmllbGRzPihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFVJQW5ub3RhdGlvblRlcm1zLkNvbm5lY3RlZEZpZWxkcylcblx0KSB7XG5cdFx0Y29uc3QgY29ubmVjdGVkRmllbGRzOiBDb25uZWN0ZWRGaWVsZHMgPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQ7XG5cdFx0Y29uc3QgY29ubmVjdGVkRmllbGRzQ29udGV4dCA9IGRhdGFGaWVsZENvbnRleHRcblx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFcIik7XG5cdFx0Y29uc3QgZmllbGRzRGVsaW1pdGVyID0gQ29tbW9uSGVscGVyLmdldERlbGltaXRlcihjb25uZWN0ZWRGaWVsZHMuVGVtcGxhdGUgYXMgc3RyaW5nKTtcblx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHNEYXRhID0gZ2V0Q29ubmVjdGVkRmllbGRzRGF0YShjb25uZWN0ZWRGaWVsZHMpO1xuXHRcdGNvbnN0IGl0ZW1zID0gY29ubmVjdGVkRmllbGRzRGF0YS5tYXAoKGNvbm5lY3RlZEZpZWxkc0VsZW1lbnQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGNvbm5lY3RlZEZpZWxkc0VsZW1lbnRJZHg6IG51bWJlcikgPT4ge1xuXHRcdFx0Y29uc3QgY29ubmVjdGVkRmllbGRzRWxlbWVudENvbnRleHQgPSBkYXRhRmllbGRDb250ZXh0XG5cdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtjb25uZWN0ZWRGaWVsZHNDb250ZXh0LmdldFBhdGgoKX0vJHsoY29ubmVjdGVkRmllbGRzRWxlbWVudCBhcyBEYXRhRmllbGQpPy5WYWx1ZT8ucGF0aH1gKTtcblx0XHRcdGNvbnN0IGZpZWxkVGVtcGxhdGUgPSBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHRcdHRhYmxlSWQsXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRjb25uZWN0ZWRGaWVsZHNFbGVtZW50Q29udGV4dCxcblx0XHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdGlzVGFibGVSZWFkT25seSxcblx0XHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGlzQ29tcGFjdFR5cGUsXG5cdFx0XHRcdFwiTGVmdFwiLFxuXHRcdFx0XHRgJHtUYWJsZUhlbHBlci5nZXRDb2x1bW5TdGFibGVJZCh0YWJsZUlkLCBkYXRhRmllbGRPUCl9YCxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0aGFuZGxlclByb3ZpZGVyLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoY29ubmVjdGVkRmllbGRzRWxlbWVudElkeCA8IGNvbm5lY3RlZEZpZWxkc0RhdGEubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRcdGZpZWxkVGVtcGxhdGUsXG5cdFx0XHRcdFx0XHQvKlVzZSBPYmplY3RTdGF0dXMgaW4gUmVzcG9uc2l2ZVRhYmxlOiBpdHMgbGluZSBib3ggbWF0Y2hlcyBjZWxsIGhlaWdodCxcbiAgICAgICAgXHRcdFx0XHRzbyB0aGUgZGVsaW1pdGVyIGlzIHZlcnRpY2FsbHkgY2VudGVyZWQgaW4gYm90aCBkaXNwbGF5ICYgZWRpdCBtb2Rlcy4qL1xuXHRcdFx0XHRcdFx0PE9iamVjdFN0YXR1c1xuXHRcdFx0XHRcdFx0XHQvLyBOQlNQIG9uIGJvdGggc2lkZXMgdG8ga2VlcCBzcGFjaW5nXG5cdFx0XHRcdFx0XHRcdHRleHQ9e2BcXHUwMEEwJHtmaWVsZHNEZWxpbWl0ZXJ9XFx1MDBBMGB9XG5cdFx0XHRcdFx0XHRcdHN0YXRlPVwiTm9uZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gUHJldmVudCB0aGUgZGVsaW1pdGVyIGZyb20gYmVpbmcgc3F1ZWV6ZWQgdG8gemVybyB3aWR0aCBvbiB0aWdodCBsYXlvdXRzLlxuXHRcdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxGbGV4SXRlbURhdGEgc2hyaW5rRmFjdG9yPXswfSAvPlxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9PYmplY3RTdGF0dXM+XG5cdFx0XHRcdFx0XTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdyaWQvVHJlZSB0YWJsZXM6IFRleHQgd29ya3MgZmluZSBoZXJlIChrZWVwcyBiYXNlbGluZSBiZWhhdmlvciBpbiBkaXNwbGF5LCBjZW50ZXJzIGluIGVkaXQpLlxuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdGZpZWxkVGVtcGxhdGUsXG5cdFx0XHRcdFx0PFRleHRcblx0XHRcdFx0XHRcdC8vIE5CU1Agb24gYm90aCBzaWRlcyB0byBrZWVwIHNwYWNpbmdcblx0XHRcdFx0XHRcdHRleHQ9e2BcXHUwMEEwJHtmaWVsZHNEZWxpbWl0ZXJ9XFx1MDBBMGB9XG5cdFx0XHRcdFx0XHQvL3NpbmdsZSBsaW5lXG5cdFx0XHRcdFx0XHR3cmFwcGluZz1cImZhbHNlXCJcblx0XHRcdFx0XHRcdC8vIGFjdHVhbGx5IHJlbmRlciB0aGUgTkJTUHNcblx0XHRcdFx0XHRcdHJlbmRlcldoaXRlc3BhY2U9XCJ0cnVlXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHQvLyBBdm9pZCBzcXVlZXplLXRvLWRvdCBlZmZlY3Qgd2hlbiBzcGFjZSBpcyB0aWdodC5cblx0XHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPEZsZXhJdGVtRGF0YSBzaHJpbmtGYWN0b3I9ezB9IC8+XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdDwvVGV4dD5cblx0XHRcdFx0XTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBbZmllbGRUZW1wbGF0ZV07XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvKiBJbm5lciBjb250YWluZXIgYWxpZ25tZW50OlxuICAgICAgICAgICBcdFx0LSBSZXNwb25zaXZlVGFibGU6IGFsd2F5cyBjZW50ZXIgKGJldHRlciB2aXN1YWwgY29uc2lzdGVuY3kpXG4gICAgICAgICAgIFx0XHQtIEdyaWQvVHJlZTogYmFzZWxpbmUgaW4gZGlzcGxheSwgY2VudGVyIGluIGVkaXQgKG1peCBvZiBUZXh0L0lucHV0IGhlaWdodHMpKi9cblx0XHRjb25zdCBpbm5lckhCb3ggPSAoXG5cdFx0XHQ8SEJveFxuXHRcdFx0XHR3cmFwPVwiTm9XcmFwXCJcblx0XHRcdFx0YWxpZ25JdGVtcz17XG5cdFx0XHRcdFx0dGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiXG5cdFx0XHRcdFx0XHQ/IFwiQ2VudGVyXCJcblx0XHRcdFx0XHRcdDogY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKFVJLklzRWRpdGFibGUsIGNvbnN0YW50KFwiQ2VudGVyXCIpLCBjb25zdGFudChcIkJhc2VsaW5lXCIpKSlcblx0XHRcdFx0fVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGl0ZW1zOiBpdGVtc1xuXHRcdFx0XHR9fVxuXHRcdFx0PC9IQm94PlxuXHRcdCk7XG5cblx0XHQvLyBPdXRlciB3cmFwcGVyOiByZW5kZXIgYSByZWFsIGJveCwgdGFrZSB0aGUgcm93IGhlaWdodCwgYW5kIGNlbnRlciB2ZXJ0aWNhbGx5LlxuXHRcdC8vIFRoaXMgZ3VhcmFudGVlcyB2ZXJ0aWNhbCBjZW50ZXJpbmcgb2YgdGhlIHdob2xlIGNvbm5lY3RlZC1maWVsZHMgYmxvY2sgd2l0aGluIHRoZSBjZWxsLlxuXHRcdHRlbXBsYXRlID0gKFxuXHRcdFx0PEhCb3hcblx0XHRcdFx0d3JhcD1cIk5vV3JhcFwiXG5cdFx0XHRcdHJlbmRlclR5cGU9XCJEaXZcIlxuXHRcdFx0XHRmaXRDb250YWluZXI9e3RydWV9XG5cdFx0XHRcdGFsaWduSXRlbXM9XCJDZW50ZXJcIlxuXHRcdFx0XHR2aXNpYmxlPXtjb2x1bW4uY29sbGVjdGlvbkZpZWxkc0hpZGRlbkV4cHJlc3Npb259XG5cdFx0XHRcdGp1c3RpZnlDb250ZW50PXtjb2x1bW4uaG9yaXpvbnRhbEFsaWdufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGl0ZW1zOiBbaW5uZXJIQm94XVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9IQm94PlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0dGVtcGxhdGUgPSBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHR0YWJsZUlkLFxuXHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0Y29sdW1uLFxuXHRcdFx0ZGF0YUZpZWxkQ29udGV4dCxcblx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRlbmFibGVBbmFseXRpY3MsXG5cdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRjcmVhdGlvbk1vZGUsXG5cdFx0XHRmaWVsZE1vZGUsXG5cdFx0XHRpc0NvbXBhY3RUeXBlLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRoYW5kbGVyUHJvdmlkZXJcblx0XHQpO1xuXHRcdGNyZWF0aW9uVGVtcGxhdGUgPSBnZXRDcmVhdGlvblRlbXBsYXRlKFxuXHRcdFx0dGFibGVJZCxcblx0XHRcdGNvbHVtbixcblx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdGNyZWF0aW9uTW9kZSxcblx0XHRcdGlzVGFibGVSZWFkT25seSxcblx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRkYXRhRmllbGRDb250ZXh0LFxuXHRcdFx0ZmllbGRNb2RlLFxuXHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiB7IHRlbXBsYXRlLCBjcmVhdGlvblRlbXBsYXRlIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYSBjb2x1bW4uXG4gKiBAcGFyYW0gdGFibGVJZCBUaGUgdGFibGUgSURcbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGFibGUgcHJvcGVydGllc1xuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHQgdXNlZCBmb3IgY29udGV4dCBwYXRoXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyIFRoZSBoYW5kbGVyIHByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtblRlbXBsYXRlKFxuXHR0YWJsZUlkOiBzdHJpbmcsXG5cdHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IENvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdGxldCBkYXRhRmllbGRDb250ZXh0ID0gY29sbGVjdGlvbi5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbHVtbi5hbm5vdGF0aW9uUGF0aCk7XG5cdGlmICghZGF0YUZpZWxkQ29udGV4dCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0ZGF0YUZpZWxkQ29udGV4dCA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChGaWVsZEhlbHBlci5nZXREYXRhRmllbGREZWZhdWx0KGRhdGFGaWVsZENvbnRleHQpKTtcblx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KGRhdGFGaWVsZENvbnRleHQsIGNvbGxlY3Rpb24pO1xuXHRjb25zdCBkYXRhRmllbGRPYmplY3QgPSBkYXRhRmllbGRDb250ZXh0Py5nZXRPYmplY3Q/LigpID8/IHt9O1xuXG5cdGNvbnN0IHRlbXBsYXRlcyA9IGdldENvbHVtbkNvbnRlbnRUZW1wbGF0ZShcblx0XHR0YWJsZUlkLFxuXHRcdHRhYmxlUHJvcGVydGllcyxcblx0XHRjb2x1bW4sXG5cdFx0ZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoLFxuXHRcdGRhdGFGaWVsZENvbnRleHQsXG5cdFx0Y29sbGVjdGlvbixcblx0XHRoYW5kbGVyUHJvdmlkZXJcblx0KTtcblxuXHRjb25zdCBlbmFibGVBdXRvQ29sdW1uV2lkdGggPSB0YWJsZVByb3BlcnRpZXMuZW5hYmxlQXV0b0NvbHVtbldpZHRoID8/IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVBdXRvQ29sdW1uV2lkdGg7XG5cdGNvbnN0IHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZTtcblx0Y29uc3QgaXNDb25uZWN0ZWRGaWVsZCA9IGRhdGFGaWVsZE9iamVjdC5UYXJnZXQ/LiRBbm5vdGF0aW9uUGF0aD8uaW5jbHVkZXMoVUlBbm5vdGF0aW9uVGVybXMuQ29ubmVjdGVkRmllbGRzKTtcblxuXHRyZXR1cm4gKFxuXHRcdDxDb2x1bW5cblx0XHRcdGlkPXtUYWJsZUhlbHBlci5nZXRDb2x1bW5TdGFibGVJZCh0YWJsZUlkLCBkYXRhRmllbGRPYmplY3RNb2RlbFBhdGgpfVxuXHRcdFx0d2lkdGg9e1xuXHRcdFx0XHQhQ29tbW9uVXRpbHMuaXNTbWFsbERldmljZSgpIHx8IGNvbHVtbi53aWR0aFxuXHRcdFx0XHRcdD8gVGFibGVIZWxwZXIuZ2V0Q29sdW1uV2lkdGgoXG5cdFx0XHRcdFx0XHRcdHsgZW5hYmxlQXV0b0NvbHVtbldpZHRoLCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciwgdGFibGVUeXBlIH0sXG5cdFx0XHRcdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRUZXh0T25BY3Rpb25GaWVsZChkYXRhRmllbGRPYmplY3QsIHsgY29udGV4dDogZGF0YUZpZWxkQ29udGV4dCB9KSxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoLFxuXHRcdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9UaXRsZVwiKSB8fCBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdH1cblx0XHRcdG1pbldpZHRoPXtcblx0XHRcdFx0Q29tbW9uVXRpbHMuaXNTbWFsbERldmljZSgpXG5cdFx0XHRcdFx0PyBUYWJsZUhlbHBlci5nZXRDb2x1bW5XaWR0aChcblx0XHRcdFx0XHRcdFx0eyBlbmFibGVBdXRvQ29sdW1uV2lkdGgsIHdpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyLCB0YWJsZVR5cGUgfSxcblx0XHRcdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGRPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFRhYmxlSGVscGVyLmdldFRleHRPbkFjdGlvbkZpZWxkKGRhdGFGaWVsZE9iamVjdCwgeyBjb250ZXh0OiBkYXRhRmllbGRDb250ZXh0IH0pLFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGRPYmplY3RNb2RlbFBhdGgsXG5cdFx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9UaXRsZVwiKSB8fCBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvRGVzY3JpcHRpb25cIikgfHwgXCJcIlxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdH1cblx0XHRcdGhlYWRlcj17Y29sdW1uLmxhYmVsIHx8IGNvbHVtbi5uYW1lfVxuXHRcdFx0cHJvcGVydHlLZXk9e2NvbHVtbi5uYW1lfVxuXHRcdFx0aEFsaWduPXtjb2x1bW4uaG9yaXpvbnRhbEFsaWduIHx8IEZpZWxkSGVscGVyLmdldENvbHVtbkFsaWdubWVudChkYXRhRmllbGRPYmplY3QsIHsgY29sbGVjdGlvbjogY29sbGVjdGlvbiB9KX1cblx0XHRcdGhlYWRlclZpc2libGU9e1xuXHRcdFx0XHRpc0Nvbm5lY3RlZEZpZWxkXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiBUYWJsZUhlbHBlci5zZXRIZWFkZXJMYWJlbFZpc2liaWxpdHkoZGF0YUZpZWxkT2JqZWN0LCBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YVwiKSlcblx0XHRcdH1cblx0XHRcdHRvb2x0aXA9e2NvbHVtbi50b29sdGlwfVxuXHRcdFx0cmVxdWlyZWQ9e3RhYmxlUHJvcGVydGllcy5yZWFkT25seSA/IHVuZGVmaW5lZCA6IGNvbHVtbi5yZXF1aXJlZH1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBjcmVhdGVDdXN0b21EYXRhKFwic2hvd0RhdGFGaWVsZHNMYWJlbFwiLCBjb2x1bW4uc2hvd0RhdGFGaWVsZHNMYWJlbCksXG5cdFx0XHRcdGV4dGVuZGVkU2V0dGluZ3M6IDxSZXNwb25zaXZlQ29sdW1uU2V0dGluZ3MgaW1wb3J0YW5jZT17Y29sdW1uLmltcG9ydGFuY2V9IC8+LFxuXHRcdFx0XHR0ZW1wbGF0ZTogdGVtcGxhdGVzLnRlbXBsYXRlLFxuXHRcdFx0XHRjcmVhdGlvblRlbXBsYXRlOiB0ZW1wbGF0ZXMuY3JlYXRpb25UZW1wbGF0ZVxuXHRcdFx0fX1cblx0XHQ8L0NvbHVtbj5cblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIHRlbXBsYXRlIGZvciBhbGwgdGhlIGNvbHVtbnMgaW4gdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllcyBUaGUgdGFibGUgcHJvcGVydGllc1xuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dCB1c2VkIGZvciBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXIgVGhlIGhhbmRsZXIgcHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29sdW1ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29sdW1ucyh0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBjb2xsZWN0aW9uOiBDb250ZXh0LCBoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIpOiBDb2x1bW5bXSB7XG5cdGNvbnN0IHRhYmxlSWQgPSB0YWJsZVByb3BlcnRpZXMuY29udGVudElkO1xuXHRyZXR1cm4gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb2x1bW5zXG5cdFx0Lm1hcCgoY29sdW1uKSA9PiB7XG5cdFx0XHRpZiAoY29sdW1uLmF2YWlsYWJpbGl0eSA9PT0gXCJEZWZhdWx0XCIgJiYgY29sdW1uLnR5cGUgPT09IFwiRGVmYXVsdFwiKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGFyZSBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYSB0YWJsZSBidWlsZGluZyBibG9jay5cIik7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbHVtbi5hdmFpbGFiaWxpdHkgPT09IFwiRGVmYXVsdFwiICYmIGNvbHVtbi50eXBlID09PSBcIkFubm90YXRpb25cIikge1xuXHRcdFx0XHRyZXR1cm4gZ2V0Q29sdW1uVGVtcGxhdGUodGFibGVJZCwgdGFibGVQcm9wZXJ0aWVzLCBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uLCBjb2xsZWN0aW9uLCBoYW5kbGVyUHJvdmlkZXIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJTbG90XCIpIHtcblx0XHRcdFx0cmV0dXJuIGdldFNsb3RDb2x1bW4odGFibGVJZCwgY29sdW1uIGFzIEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIHRhYmxlUHJvcGVydGllcy5yZWFkT25seSk7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbHVtbi5hdmFpbGFiaWxpdHkgPT09IFwiRGVmYXVsdFwiICYmIGNvbHVtbi50eXBlID09PSBcIkNvbXB1dGVkXCIpIHtcblx0XHRcdFx0cmV0dXJuIGdldENvbXB1dGVkQ29sdW1uKFxuXHRcdFx0XHRcdHRhYmxlSWQsXG5cdFx0XHRcdFx0Y29sdW1uIGFzIENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdFx0XHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0pXG5cdFx0LmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4gIT09IHVuZGVmaW5lZCkgYXMgQ29sdW1uW107XG59XG5cbmV4cG9ydCB0eXBlIFRhYmxlQmxvY2tQcm9wZXJ0aWVzID0gT21pdDxTdHJpY3RQcm9wZXJ0aWVzT2Y8VGFibGVBUEk+LCBcIm1ldGFQYXRoXCIgfCBcImNvbnRleHRQYXRoXCI+ICYge1xuXHRnZXRUcmFuc2xhdGVkVGV4dCh0ZXh0OiBzdHJpbmcsIHBhcmFtZXRlcnM/OiB1bmtub3duW10sIG1ldGFQYXRoPzogc3RyaW5nKTogc3RyaW5nO1xuXHRbXCJmbDpmbGV4aWJpbGl0eVwiXT86IHN0cmluZztcbn07XG4vKipcbiAqIERldGVybWluZXMgdGhlIGRlc2lnbnRpbWUgZm9yIHRoZSBNREMgdGFibGUuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gZHQ6ZGVzaWdudGltZVxuICovXG5mdW5jdGlvbiBnZXREZXNpZ250aW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBcInNhcC9mZS9tYWNyb3MvdGFibGUvZGVzaWdudGltZS9UYWJsZS5kZXNpZ250aW1lXCI7XG59XG5cbi8qKlxuICogTWFwcyB0aGUgaW50ZXJuYWwgUDEzbiB0YWJsZSBtb2RlIChzdHJpbmcpIHRvIHRoZSBjb3JyZXNwb25kaW5nIE1EQyBlbnVtLlxuICogQHBhcmFtIHN0cmluZ01vZGVcbiAqIEByZXR1cm5zIFRoZSBNREMgZW51bSB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXRNRENQMTNuTW9kZShzdHJpbmdNb2RlOiBzdHJpbmcpOiBUYWJsZVAxM25Nb2RlIHtcblx0c3dpdGNoIChzdHJpbmdNb2RlKSB7XG5cdFx0Y2FzZSBcIkFnZ3JlZ2F0ZVwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuQWdncmVnYXRlO1xuXHRcdGNhc2UgXCJTb3J0XCI6XG5cdFx0XHRyZXR1cm4gVGFibGVQMTNuTW9kZS5Tb3J0O1xuXHRcdGNhc2UgXCJDb2x1bW5cIjpcblx0XHRcdHJldHVybiBUYWJsZVAxM25Nb2RlLkNvbHVtbjtcblx0XHRjYXNlIFwiRmlsdGVyXCI6XG5cdFx0XHRyZXR1cm4gVGFibGVQMTNuTW9kZS5GaWx0ZXI7XG5cdFx0Y2FzZSBcIkdyb3VwXCI6XG5cdFx0XHRyZXR1cm4gVGFibGVQMTNuTW9kZS5Hcm91cDtcblx0XHRkZWZhdWx0OlxuXHRcdFx0TG9nLmVycm9yKFwiVW5rbm93biBQMTNuIG1vZGU6IFwiICsgc3RyaW5nTW9kZSk7XG5cdFx0XHRyZXR1cm4gVGFibGVQMTNuTW9kZS5Db2x1bW47XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1EQ1RhYmxlVGVtcGxhdGUodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcywgcGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyk6IE1EQ1RhYmxlIHtcblx0Ly8gRm9yIGEgVHJlZVRhYmxlIGluIGEgTGlzdFJlcG9ydCBkaXNwbGF5aW5nIGEgZHJhZnQtZW5hYmxlZCBlbnRpdHksIHdlIG9ubHkgZGlzcGxheSBhY3RpdmUgaW5zdGFuY2VzXG5cdGNvbnN0IG5hdmlnYXRpb25JbmZvID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uPy5yb3c/Lm5hdmlnYXRpb25JbmZvIGFzIHtcblx0XHRyb3V0ZVBhdGg/OiBzdHJpbmc7XG5cdFx0bmF2aWdhdGlvbkluRWRpdE1vZGU/OiBib29sZWFuO1xuXHR9O1xuXHRjb25zdCB0YXJnZXQgPSBuYXZpZ2F0aW9uSW5mbz8ucm91dGVQYXRoO1xuXHRsZXQgbmF2aWdhdGlvbkluRWRpdE1vZGUgPSBmYWxzZTtcblx0aWYgKHRhcmdldCkge1xuXHRcdGNvbnN0IHRhcmdldEluZm9ybWF0aW9uID0gcGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0Um91dGluZ1NlcnZpY2UoKS5fZ2V0VGFyZ2V0SW5mb3JtYXRpb24odGFyZ2V0KTtcblx0XHRuYXZpZ2F0aW9uSW5FZGl0TW9kZSA9ICh0YXJnZXRJbmZvcm1hdGlvbj8ub3B0aW9ucz8uc2V0dGluZ3M/Lm9wZW5JbkVkaXRNb2RlIGFzIGJvb2xlYW4gfCB1bmRlZmluZWQpID8/IGZhbHNlO1xuXHR9XG5cblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGNvbnN0IGNvbnRleHRPYmplY3RQYXRoID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoO1xuXHRjb25zdCBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzID1cblx0XHQodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiIHx8IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzID09PSB0cnVlKSAmJlxuXHRcdGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0ID09PSBjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlTZXQgJiZcblx0XHRNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChjb250ZXh0T2JqZWN0UGF0aCk7XG5cdGNvbnN0IGRlbGVnYXRlID0gVGFibGVIZWxwZXIuZ2V0RGVsZWdhdGUoXG5cdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbixcblx0XHR0YWJsZVByb3BlcnRpZXMuaXNBbHAgPT09IHRydWUsXG5cdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmVudGl0eU5hbWUsXG5cdFx0ZmlsdGVyT25BY3RpdmVFbnRpdGllc1xuXHQpO1xuXHRjb25zdCBoZWFkZXJWaXNpYmxlID0gdGFibGVQcm9wZXJ0aWVzLmhlYWRlclZpc2libGUgPz8gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmhlYWRlclZpc2libGU7XG5cdGNvbnN0IGN1cnJlbnRIZWFkZXIgPSB0YWJsZVByb3BlcnRpZXMuaGVhZGVyID8/IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi50aXRsZTtcblx0Y29uc3QgaGVhZGVyQmluZGluZ0V4cHJlc3Npb24gPSBidWlsZEV4cHJlc3Npb25Gb3JIZWFkZXJWaXNpYmxlKGN1cnJlbnRIZWFkZXIgPz8gXCJcIiwgdGFibGVQcm9wZXJ0aWVzLnRhYlRpdGxlID8/IFwiXCIsICEhaGVhZGVyVmlzaWJsZSk7XG5cdGNvbnN0IHBhc3RlQWN0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuUGFzdGUpO1xuXHRjb25zdCBjb2xsZWN0aW9uRW50aXR5ID0gcGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aCh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvbikudGFyZ2V0IGFzXG5cdFx0fCBFbnRpdHlTZXRcblx0XHR8IE5hdmlnYXRpb25Qcm9wZXJ0eTtcblx0Y29uc3QgbW9kZWxDb250ZXh0Q2hhbmdlID0gdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIudGFibGVDb250ZXh0Q2hhbmdlIDogdW5kZWZpbmVkO1xuXHRjb25zdCBsaW5lSXRlbSA9IFRhYmxlSGVscGVyLmdldFVpTGluZUl0ZW1PYmplY3QocGFyYW1ldGVycy5tZXRhUGF0aCwgcGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YSkgYXNcblx0XHR8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbltdXG5cdFx0fCB1bmRlZmluZWQ7XG5cdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLm5hdmlnYXRpb25QYXRoO1xuXHRpZiAodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24uc3RhcnRzV2l0aChcIi9cIikgJiYgaXNTaW5nbGV0b24oY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpKSB7XG5cdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24gPSBuYXZpZ2F0aW9uUGF0aDtcblx0fVxuXG5cdGNvbnN0IGNvbGxlY3Rpb25Db250ZXh0ID0gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pITtcblx0Y29uc3QgZHJhZnQgPSAoY29sbGVjdGlvbkVudGl0eSBhcyBFbnRpdHlTZXQpLmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290O1xuXHQvLyBBZGQgdGhlIGRlZmluaXRpb24gb2YgdGhlIGRlc2lnbnRpbWUgZmlsZSBpZiBkZXNpZ250aW1lIGlzIGVuYWJsZWQgZnJvbSBjb3JlIG9yIGxvY2FsbHkgdmlhIHVybCBwYXJhbWV0ZXJzXG5cdGNvbnN0IHZhcmlhbnRNYW5hZ2VtZW50ID0gdGFibGVQcm9wZXJ0aWVzLnZhcmlhbnRNYW5hZ2VtZW50ID8/IFwiTm9uZVwiO1xuXHRjb25zdCBkZXNpZ250aW1lID0gZ2V0RGVzaWdudGltZSgpO1xuXHRsZXQgcm93QWN0aW9uVHlwZTogVGFibGVSb3dBY3Rpb25UeXBlIHwgdW5kZWZpbmVkO1xuXHRpZiAodGFibGVQcm9wZXJ0aWVzLm92ZXJyaWRlUm93UHJlc3MpIHtcblx0XHRyb3dBY3Rpb25UeXBlID0gVGFibGVSb3dBY3Rpb25UeXBlLk5hdmlnYXRpb247XG5cdH1cblx0cm93QWN0aW9uVHlwZSA/Pz1cblx0XHR0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ucm93Py5hY3Rpb25UeXBlID09PSBcIk5hdmlnYXRpb25cIiA/IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uIDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IHNob3dDcmVhdGUgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUpPy52aXNpYmxlIHx8IHRydWU7XG5cblx0LyoqXG5cdCAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBidXR0b24gaXMgaGlkZGVuIHdoZW4gbm8gZGF0YSBoYXMgYmVlbiBlbnRlcmVkIHlldCBpbiB0aGUgcm93ICh0cnVlL2ZhbHNlKS4gVGhlIGRlZmF1bHQgc2V0dGluZyBpcyBgZmFsc2VgLlxuXHQgKi9cblx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRsZXQgY3VycmVudFBlcnNvbmFsaXphdGlvbjogVGFibGVQMTNuTW9kZVtdIHwgdW5kZWZpbmVkO1xuXHRzd2l0Y2ggKHRhYmxlUHJvcGVydGllcy5wZXJzb25hbGl6YXRpb24pIHtcblx0XHRjYXNlIFwiZmFsc2VcIjpcblx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwidHJ1ZVwiOlxuXHRcdFx0Y3VycmVudFBlcnNvbmFsaXphdGlvbiA9IFtUYWJsZVAxM25Nb2RlLlNvcnQsIFRhYmxlUDEzbk1vZGUuQ29sdW1uLCBUYWJsZVAxM25Nb2RlLkZpbHRlcl07XG5cdFx0XHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiIHx8IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzID09PSB0cnVlKSB7XG5cdFx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSBbLi4uY3VycmVudFBlcnNvbmFsaXphdGlvbiwgVGFibGVQMTNuTW9kZS5Hcm91cF07XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIHVuZGVmaW5lZDpcblx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ucDEzbk1vZGU/Lm1hcCgobW9kZSkgPT4gZ2V0TURDUDEzbk1vZGUobW9kZSkpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdC8vIEluIGNhc2UgZ3JvdXBpbmcgbW9kZSBpcyBkZWZpbmVkIGV4cGxpY2l0ZWx5IG9uIHRoZSBwZXJzb25hbGl6YXRpb24sIHdlIG9ubHkgZW5hYmxlIGl0IGZvciB0aGUgYW5hbHl0aWNhbCBhbmQgcmVzcG9uc2l2ZSB0YWJsZS5cblx0XHRcdGlmICh0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfHwgdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3MgPT09IHRydWUpIHtcblx0XHRcdFx0Y3VycmVudFBlcnNvbmFsaXphdGlvbiA9IHRhYmxlUHJvcGVydGllcy5wZXJzb25hbGl6YXRpb24uc3BsaXQoXCIsXCIpLm1hcCgobW9kZSkgPT4gZ2V0TURDUDEzbk1vZGUobW9kZS50cmltKCkpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGV4Y2x1ZGVHcm91cEZyb21QMTNuID0gdGFibGVQcm9wZXJ0aWVzLnBlcnNvbmFsaXphdGlvblxuXHRcdFx0XHRcdC5zcGxpdChcIixcIilcblx0XHRcdFx0XHQuZmlsdGVyKChtb2RlKSA9PiBnZXRNRENQMTNuTW9kZShtb2RlLnRyaW0oKSkgIT09IFRhYmxlUDEzbk1vZGUuR3JvdXApIGFzIFRhYmxlUDEzbk1vZGVbXTtcblx0XHRcdFx0Y3VycmVudFBlcnNvbmFsaXphdGlvbiA9IGV4Y2x1ZGVHcm91cEZyb21QMTNuLmxlbmd0aCA/IGV4Y2x1ZGVHcm91cEZyb21QMTNuIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHR9XG5cblx0Y29uc3QgbXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMgPSBBY3Rpb25IZWxwZXIuZ2V0TXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMobGluZUl0ZW0pO1xuXG5cdGNvbnN0IGN1c3RvbURhdGEgPSBbXG5cdFx0eyBrZXk6IFwia2luZFwiLCB2YWx1ZTogY29sbGVjdGlvbkVudGl0eS5fdHlwZSB9LFxuXHRcdHsga2V5OiBcIm5hdmlnYXRpb25QYXRoXCIsIHZhbHVlOiBuYXZpZ2F0aW9uUGF0aCB9LFxuXHRcdHsga2V5OiBcImVuYWJsZUFuYWx5dGljc1wiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3MgfSxcblx0XHR7IGtleTogXCJjcmVhdGlvbk1vZGVcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU/Lm5hbWUgfSxcblx0XHR7IGtleTogXCJpbmxpbmVDcmVhdGlvblJvd0NvdW50XCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaW5saW5lQ3JlYXRpb25Sb3dDb3VudCB9LFxuXHRcdHsga2V5OiBcInNob3dDcmVhdGVcIiwgdmFsdWU6IHNob3dDcmVhdGUgfSxcblx0XHR7IGtleTogXCJjcmVhdGVBdEVuZFwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgfSxcblx0XHR7IGtleTogXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnJlYWRPbmx5IH0sXG5cdFx0eyBrZXk6IFwidGFibGVUeXBlXCIsIHZhbHVlOiB0YWJsZVR5cGUgfSxcblx0XHR7IGtleTogXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiLCB2YWx1ZTogY29sbGVjdGlvbkNvbnRleHQuZ2V0UGF0aCgpIH0sXG5cdFx0eyBrZXk6IFwiZW50aXR5VHlwZVwiLCB2YWx1ZTogY29sbGVjdGlvbkNvbnRleHQuZ2V0UGF0aCgpICsgXCIvXCIgfSxcblx0XHR7IGtleTogXCJtZXRhUGF0aFwiLCB2YWx1ZTogY29sbGVjdGlvbkNvbnRleHQuZ2V0UGF0aCgpIH0sXG5cdFx0eyBrZXk6IFwiaGlkZGVuRmlsdGVyc1wiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZpbHRlcnM/LmhpZGRlbkZpbHRlcnMgfSxcblx0XHR7IGtleTogXCJyZXF1ZXN0R3JvdXBJZFwiLCB2YWx1ZTogXCIkYXV0by5Xb3JrZXJzXCIgfSxcblx0XHR7IGtleTogXCJzZWdtZW50ZWRCdXR0b25JZFwiLCB2YWx1ZTogZ2VuZXJhdGUoW3RhYmxlUHJvcGVydGllcy5jb250ZW50SWQsIFwiU2VnbWVudGVkQnV0dG9uXCIsIFwiVGVtcGxhdGVDb250ZW50Vmlld1wiXSkgfSxcblx0XHR7IGtleTogXCJkaXNhYmxlQ29weVRvQ2xpcGJvYXJkXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZGlzYWJsZUNvcHlUb0NsaXBib2FyZCB9LFxuXHRcdHsga2V5OiBcImRyYWZ0XCIsIHZhbHVlOiBkcmFmdCB9LFxuXHRcdHsga2V5OiBcIm5hdmlnYXRpb25BdmFpbGFibGVNYXBcIiwgdmFsdWU6IFRhYmxlSGVscGVyLmdldE5hdmlnYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW0pIH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcImFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkXCIsXG5cdFx0XHR2YWx1ZTogbXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMubGVuZ3RoID4gMCA/IG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zLmpvaW4oXCIsXCIpIDogdW5kZWZpbmVkXG5cdFx0fSxcblx0XHR7IGtleTogXCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGhcIiwgdmFsdWU6IHVwZGF0YWJsZVByb3BlcnR5UGF0aCB8fCBcIlwiIH0sXG5cdFx0eyBrZXk6IFwiZXhwb3J0UmVxdWVzdFNpemVcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5leHBvcnRSZXF1ZXN0U2l6ZSB9XG5cdF07XG5cblx0cmV0dXJuIChcblx0XHQ8TURDVGFibGVcblx0XHRcdGNvcmU6cmVxdWlyZT17Z2V0Q29yZVJlcXVpcmUodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbil9XG5cdFx0XHRmbDpmbGV4aWJpbGl0eT17dGFibGVQcm9wZXJ0aWVzW1wiZmw6ZmxleGliaWxpdHlcIl19XG5cdFx0XHRzb3J0Q29uZGl0aW9ucz17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnNvcnRDb25kaXRpb25zfVxuXHRcdFx0Z3JvdXBDb25kaXRpb25zPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uZ3JvdXBDb25kaXRpb25zfVxuXHRcdFx0YWdncmVnYXRlQ29uZGl0aW9ucz17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmFnZ3JlZ2F0ZUNvbmRpdGlvbnN9XG5cdFx0XHRkdDpkZXNpZ250aW1lPXtkZXNpZ250aW1lfVxuXHRcdFx0aWQ9e3RhYmxlUHJvcGVydGllcy5jb250ZW50SWR9XG5cdFx0XHRidXN5SW5kaWNhdG9yRGVsYXk9ezB9XG5cdFx0XHRlbmFibGVFeHBvcnQ9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVFeHBvcnR9XG5cdFx0XHRkZWxlZ2F0ZT17SlNPTi5wYXJzZShkZWxlZ2F0ZSl9XG5cdFx0XHRiZWZvcmVPcGVuQ29udGV4dE1lbnU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmJlZm9yZU9wZW5Db250ZXh0TWVudX1cblx0XHRcdGF1dG9CaW5kT25Jbml0PXt0YWJsZVByb3BlcnRpZXMudXNlQmFzaWNTZWFyY2ggfHwgIXRhYmxlUHJvcGVydGllcy5maWx0ZXJCYXJ9XG5cdFx0XHRzZWxlY3Rpb25Nb2RlPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uc2VsZWN0aW9uTW9kZSB8fCBcIk5vbmVcIn1cblx0XHRcdHNlbGVjdGlvbkNoYW5nZT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuc2VsZWN0aW9uQ2hhbmdlfVxuXHRcdFx0c2hvd1Jvd0NvdW50PXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuc2hvd1Jvd0NvdW50fVxuXHRcdFx0aGVhZGVyPXtjdXJyZW50SGVhZGVyfVxuXHRcdFx0aGVhZGVyVmlzaWJsZT17aGVhZGVyQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRoZWFkZXJMZXZlbD17dGFibGVQcm9wZXJ0aWVzLmhlYWRlckxldmVsfVxuXHRcdFx0aGVhZGVyU3R5bGU9e3RhYmxlUHJvcGVydGllcy5oZWFkZXJTdHlsZX1cblx0XHRcdHRocmVzaG9sZD17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnRocmVzaG9sZCA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24udGhyZXNob2xkfVxuXHRcdFx0cDEzbk1vZGU9e2N1cnJlbnRQZXJzb25hbGl6YXRpb259XG5cdFx0XHRwYXN0ZT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0UGFzdGVIYW5kbGVyKGZhbHNlKX1cblx0XHRcdGJlZm9yZUV4cG9ydD17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuYmVmb3JlRXhwb3J0fVxuXHRcdFx0Y2xhc3M9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC51c2VDb25kZW5zZWRUYWJsZUxheW91dCA9PT0gdHJ1ZSA/IFwic2FwVWlTaXplQ29uZGVuc2VkXCIgOiB1bmRlZmluZWR9XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGU9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5tdWx0aVNlbGVjdE1vZGV9XG5cdFx0XHRzaG93UGFzdGVCdXR0b249e3RhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IGZhbHNlIDogcGFzdGVBY3Rpb24/LnZpc2libGV9XG5cdFx0XHRlbmFibGVQYXN0ZT17dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gZmFsc2UgOiBwYXN0ZUFjdGlvbj8uZW5hYmxlZH1cblx0XHRcdG1vZGVsQ29udGV4dENoYW5nZT17bW9kZWxDb250ZXh0Q2hhbmdlfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGN1c3RvbURhdGE6IGNyZWF0ZUN1c3RvbURhdGFzKGN1c3RvbURhdGEpLFxuXHRcdFx0XHRkYXRhU3RhdGVJbmRpY2F0b3I6IGdldERhdGFTdGF0ZUluZGljYXRvcihwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdHR5cGU6IGdldFRhYmxlVHlwZShcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuc2VsZWN0aW9uTGltaXRcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGVwZW5kZW50czogZ2V0RGVwZW5kZW50cyh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMsIHZhcmlhbnRNYW5hZ2VtZW50LCBjb2xsZWN0aW9uQ29udGV4dCksXG5cdFx0XHRcdGFjdGlvbnM6IGdldEFjdGlvbnModGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkVudGl0eSksXG5cdFx0XHRcdHJvd1NldHRpbmdzOiBnZXRSb3dTZXR0aW5ncyh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLCByb3dBY3Rpb25UeXBlLCB0YWJsZVR5cGUsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKSxcblx0XHRcdFx0Y29udGV4dE1lbnU6IGdldENvbnRleHRNZW51KFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcyxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRpdHksXG5cdFx0XHRcdFx0cm93QWN0aW9uVHlwZSxcblx0XHRcdFx0XHRjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRuYXZpZ2F0aW9uSW5FZGl0TW9kZVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRjb2x1bW5zOiBnZXRDb2x1bW5zKHRhYmxlUHJvcGVydGllcywgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKSxcblx0XHRcdFx0ZHJhZ0Ryb3BDb25maWc6IGdldERyYWdBbmREcm9wQ29uZmlnKHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHRjcmVhdGlvblJvdzogZ2V0Q3JlYXRpb25Sb3codGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdHZhcmlhbnQ6IGdldFZhcmlhbnRNYW5hZ2VtZW50KFxuXHRcdFx0XHRcdHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy5jb250ZW50SWQsXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLmhlYWRlckxldmVsLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdCksXG5cdFx0XHRcdHF1aWNrRmlsdGVyOiBnZXRRdWlja0ZpbHRlcih0YWJsZVByb3BlcnRpZXMpLFxuXHRcdFx0XHRjb3B5UHJvdmlkZXI6IGdldENvcHlQcm92aWRlcih0YWJsZVByb3BlcnRpZXMpLFxuXHRcdFx0XHRjZWxsU2VsZWN0b3I6IGdldENlbGxTZWxlY3Rvcih0YWJsZVByb3BlcnRpZXMp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
|
|
1383
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJfY29sbGVjdGlvbiIsInRhYmxlVHlwZSIsInNlbGVjdGlvbkxpbWl0IiwiY29sbGVjdGlvbiIsImdldE9iamVjdCIsIl9qc3giLCJHcmlkVGFibGVUeXBlIiwicm93Q291bnRNb2RlIiwiY29udHJvbCIsInJvd0NvdW50IiwiZml4ZWRDb2x1bW5Db3VudCIsImZyb3plbkNvbHVtbkNvdW50Iiwic2Nyb2xsVGhyZXNob2xkIiwiZW5hYmxlQ29sdW1uRnJlZXplIiwiVHJlZVRhYmxlVHlwZSIsIlJlc3BvbnNpdmVUYWJsZVR5cGUiLCJzaG93RGV0YWlsc0J1dHRvbiIsImRldGFpbHNCdXR0b25TZXR0aW5nIiwiUHJpb3JpdHkiLCJMb3ciLCJNZWRpdW0iLCJOb25lIiwiZ3Jvd2luZ01vZGUiLCIka2luZCIsInVuZGVmaW5lZCIsInBvcGluTGF5b3V0IiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaGFuZGxlclByb3ZpZGVyIiwiRGF0YVN0YXRlSW5kaWNhdG9yIiwiZmlsdGVyIiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwiZW5hYmxlZCIsImNvbXBpbGVFeHByZXNzaW9uIiwibm90IiwiZXF1YWwiLCJwYXRoSW5Nb2RlbCIsImVuYWJsZUZpbHRlcmluZyIsImRhdGFTdGF0ZUNoYW5nZSIsImdldERyYWdBbmREcm9wRW5hYmxlZCIsImNvbnRleHRPYmplY3RQYXRoIiwiaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uIiwiaXNQYXRoVXBkYXRhYmxlIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsInBhdGhWaXNpdG9yIiwicGF0aCIsIm5hdmlnYXRpb25QYXRocyIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiY29udmVydGVkVHlwZXMiLCJpc1BhdGhVcGRhdGFibGVPblRhcmdldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwidGFyZ2V0RW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJhbmQiLCJfdHlwZSIsImlmRWxzZSIsImlzQ29uc3RhbnQiLCJjb25zdGFudCIsImlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsImdldERlcGVuZGVudHMiLCJ0YWJsZVByb3BlcnRpZXMiLCJwYXJhbWV0ZXJzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJpZCIsImNvbnRlbnRJZCIsInR5cGUiLCJkZXBlbmRlbnRzIiwiY3V0QWN0aW9uIiwiYWN0aW9ucyIsImZpbmQiLCJhIiwia2V5IiwiU3RhbmRhcmRBY3Rpb25LZXlzIiwiQ3V0IiwiaXNUZW1wbGF0ZWQiLCJwdXNoIiwiQ29tbWFuZEV4ZWN1dGlvbiIsImV4ZWN1dGUiLCJnZXRDdXRIYW5kbGVyIiwiY29tbWFuZCIsImNvcHlBY3Rpb24iLCJDb3B5IiwiZ2V0Q29weUhhbmRsZXIiLCJwYXN0ZUFjdGlvbiIsIlBhc3RlIiwidmlzaWJsZSIsImdldFBhc3RlSGFuZGxlciIsImNyZWF0ZUFjdGlvbiIsIkNyZWF0ZSIsImRlbGV0ZUFjdGlvbiIsIkRlbGV0ZSIsImFubm90YXRpb24iLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJub2RlVHlwZSIsImVuYWJsZVVwbG9hZFBsdWdpbiIsImdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlciIsIm1vdmVVcEFjdGlvbiIsIk1vdmVVcCIsIm1vdmVEb3duQWN0aW9uIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duSGFuZGxlciIsImFjdGlvbk5hbWUiLCJjb21tYW5kQWN0aW9ucyIsImFjdGlvbiIsImFjdGlvbkNvbW1hbmQiLCJnZXRBY3Rpb25Db21tYW5kIiwiUGVyc2lzdGVuY2VQcm92aWRlciIsImdlbmVyYXRlIiwiZm9yIiwiQ29udGV4dE1lbnVTZXR0aW5nIiwic2NvcGUiLCJnZXRVcGxvYWRQbHVnaW4iLCJfZXhwb3J0cyIsImdldEFjdGlvbnMiLCJ0YWJsZSIsImNvbGxlY3Rpb25Db250ZXh0IiwiY29sbGVjdGlvbkVudGl0eSIsImRpc3BsYXlTZWdtZW50ZWRCdXR0b24iLCJhbHBCdXR0b25JdGVtcyIsIkNvbW1vbkhlbHBlciIsImlzRGVza3RvcCIsIlNlZ21lbnRlZEJ1dHRvbkl0ZW0iLCJ0b29sdGlwIiwiaWNvbiIsIkFjdGlvblRvb2xiYXJBY3Rpb24iLCJsYXlvdXRJbmZvcm1hdGlvbiIsImNoaWxkcmVuIiwiU2VnbWVudGVkQnV0dG9uIiwic2VsZWN0Iiwic2VnbWVudGVkQnV0dG9uUHJlc3MiLCJzZWxlY3RlZEtleSIsIml0ZW1zIiwiZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUiLCJsZW5ndGgiLCJnZXRSb3dTZXR0aW5ncyIsInJvd0FjdGlvblR5cGUiLCJyb3dBY3Rpb25JdGVtIiwiUm93QWN0aW9uSXRlbSIsInByZXNzIiwicm93UHJlc3MiLCJyb3ciLCJSb3dTZXR0aW5ncyIsIm5hdmlnYXRlZCIsInJvd05hdmlnYXRlZCIsImhpZ2hsaWdodCIsInJvd0hpZ2hsaWdodGluZyIsImhpZ2hsaWdodFRleHQiLCJyb3dBY3Rpb25zIiwiVGFibGVSb3dBY3Rpb25UeXBlIiwiTmF2aWdhdGlvbiIsImdldENvbnRleHRNZW51IiwibmF2aWdhdGlvbkluRWRpdE1vZGUiLCJtZW51SXRlbXMiLCJnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUiLCJnZXRTaGFyZXRvQ29sbGFib3JhdGlvbk1hbmFnZXJUZW1wbGF0ZSIsImdldE9wZW5Jbk5ld1RhYlRlbXBsYXRlIiwiTWVudSIsIml0ZW1TZWxlY3RlZCIsImNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwiZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51IiwidGFibGVJZCIsIk1lbnVJdGVtIiwic3RhcnRzU2VjdGlvbiIsInRleHQiLCJjb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsImNvbnRleHRNZW51T3BlbkluTmV3VGFiIiwiZ3JlYXRlclRoYW4iLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImhlYWRlckxldmVsIiwiVmFyaWFudE1hbmFnZW1lbnQiLCJzaG93U2V0QXNEZWZhdWx0IiwidmFyaWFudFNlbGVjdGVkIiwic2F2ZSIsInZhcmlhbnRTYXZlZCIsImdldFF1aWNrRmlsdGVyIiwicXVpY2tGaWx0ZXJzIiwiZmlsdGVycyIsIlF1aWNrRmlsdGVyU2VsZWN0b3IiLCJwYXRocyIsIm1hcCIsImFubm90YXRpb25QYXRoIiwic2hvd0NvdW50cyIsImdldENvcHlQcm92aWRlciIsInZpc2libGVFeHByZXNzaW9uIiwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZCIsIkNvcHlQcm92aWRlciIsImdldENlbGxTZWxlY3RvciIsImluY2x1ZGVzIiwiQ2VsbFNlbGVjdG9yIiwib3IiLCJyYW5nZUxpbWl0Iiwic2VsZWN0aW9uQ2hhbmdlIiwiZ2V0Q2VsbHNTZWxlY3Rpb25IYW5kbGVyIiwiZ2V0Q3JlYXRpb25Sb3ciLCJjcmVhdGlvbk1vZGUiLCJuYW1lIiwiQ3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvd0FjdGlvbiIsImN1c3RvbURhdGEiLCJjcmVhdGVDdXN0b21EYXRhcyIsInZhbHVlIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImFwcGx5IiwiYXBwbHlFbmFibGVkIiwiZ2V0RHJhZ0FuZERyb3BDb25maWciLCJEcmFnRHJvcENvbmZpZyIsImRyb3BQb3NpdGlvbiIsImFsbG93RHJvcEJldHdlZW5Ob2RlcyIsImRyYWdnYWJsZSIsImRyb3BwYWJsZSIsImRyYWdTdGFydCIsImRyYWdTdGFydERvY3VtZW50IiwiZHJhZ0VudGVyIiwiZHJhZ0VudGVyRG9jdW1lbnQiLCJkcm9wIiwiZHJvcERvY3VtZW50IiwiZm9yQ29udGV4dE1lbnUiLCJkYXRhRmllbGQiLCJjb252ZXJ0ZWRNZXRhZGF0YSIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwiYWN0aW9uQ29udGV4dFBhdGgiLCJnZXRBY3Rpb25Db250ZXh0IiwibWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzQm91bmQiLCJBY3Rpb25UYXJnZXQiLCJpc09wZXJhdGlvbkF2YWlsYWJsZSIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJ2YWx1ZU9mIiwiZGlzcGxheUNvbW1hbmRBY3Rpb24iLCJUYWJsZUhlbHBlciIsImlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51IiwiYWN0aW9uUGFyYW1ldGVycyIsIm9uRXhlY3V0ZUFjdGlvbiIsImdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlciIsIm9uRXhlY3V0ZUlCTiIsImdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlciIsIm9uRXhlY3V0ZU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIiLCJpc0lCTkVuYWJsZWQiLCJpc0RhdGFGaWVsZEZvcklCTkVuYWJsZWQiLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNBY3Rpb25FbmFibGVkIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkIiwiQWN0aW9uIiwiZW5hYmxlT25TZWxlY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiaXNFbmFibGVkIiwiZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbiIsImdldENvcmVSZXF1aXJlIiwiY3VzdG9tTW9kdWxlcyIsImFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMiLCJtb2R1bGUiLCJpbmRleCIsImpvaW4iLCJnZXRDb21wdXRlZENvbHVtbiIsImNvbHVtbiIsImVuYWJsZUFuYWx5dGljcyIsImlzRHJhZnRJbmRpY2F0b3IiLCJDb2x1bW4iLCJoZWFkZXJWaXNpYmxlIiwicHJvcGVydHlLZXkiLCJoZWFkZXIiLCJsYWJlbCIsIndpZHRoIiwiRHJhZnRJbmRpY2F0b3IiLCJkcmFmdEluZGljYXRvclR5cGUiLCJPYmplY3RNYXJrZXJWaXNpYmlsaXR5IiwiSWNvbk9ubHkiLCJjb250ZXh0UGF0aCIsImdldFBhdGgiLCJFbnRpdHkiLCJJc0FjdGl2ZSIsIkhhc0RyYWZ0IiwidXNlZEluVGFibGUiLCJ1c2VkSW5BbmFseXRpY2FsVGFibGUiLCJpc1NpdHVhdGlvbnNJbmRpY2F0b3IiLCJTaXR1YXRpb25zSW5kaWNhdG9yIiwiZ2V0U2xvdENvbHVtbiIsImlzUmVhZE9ubHkiLCJ0ZW1wbGF0ZSIsInN0YXJ0c1dpdGgiLCJTbG90Q29sdW1uIiwidGVtcGxhdGVJZCIsImhBbGlnbiIsImhvcml6b250YWxBbGlnbiIsInJlcXVpcmVkIiwiZXh0ZW5kZWRTZXR0aW5ncyIsIlJlc3BvbnNpdmVDb2x1bW5TZXR0aW5ncyIsImltcG9ydGFuY2UiLCJnZXREcmFmdEluZGljYXRvciIsImZvcm1hdE9wdGlvbnMiLCJmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJGb3JtRWxlbWVudFdyYXBwZXIiLCJJY29uQW5kVGV4dCIsImdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmciLCJmaWVsZEdyb3VwTmFtZSIsImFyaWFMYWJlbGxlZEJ5IiwiZ2V0U2l0dWF0aW9uSW5kaWNhdG9yIiwiT2JqZWN0U3RhdHVzIiwic2hvd0Vycm9yT2JqZWN0U3RhdHVzIiwiY2xhc3MiLCJzdGF0ZSIsImdldERlZmF1bHREYXRlVGltZVN0eWxlIiwiZGF0YUZpZWxkQ29udGV4dCIsInRhcmdldE9iamVjdCIsImlzRGF0YUZpZWxkIiwiVmFsdWUiLCIkdGFyZ2V0IiwiaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiaGFzRGF0YVBvaW50VGFyZ2V0IiwiVGFyZ2V0IiwiZ2V0Q3JlYXRpb25UZW1wbGF0ZSIsImlzVGFibGVSZWFkT25seSIsImZpZWxkTW9kZSIsImNvbHVtbkVkaXRNb2RlIiwiZGF0YUZpZWxkT2JqZWN0IiwicmVhY3RpdmVBcmVhTW9kZSIsInRleHRMaW5lc0VkaXQiLCJ0ZXh0TWF4TGluZXMiLCJ0ZXh0TWF4TGVuZ3RoIiwidGV4dE1heENoYXJhY3RlcnNEaXNwbGF5IiwidGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheSIsInRleHRBbGlnbk1vZGUiLCJzZW1hbnRpY0tleVN0eWxlIiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJzaG93SWNvblVybCIsIklubGluZSIsIkljb25VcmwiLCJpZ25vcmVOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNDdXJyZW5jeU9yVW5pdEFsaWduZWQiLCJkYXRlVGltZVN0eWxlIiwiRmllbGQiLCJ2aElkUHJlZml4IiwiZWRpdE1vZGUiLCJtZXRhUGF0aCIsIndyYXAiLCJjaGFuZ2UiLCJmaWVsZENoYW5nZUluQ3JlYXRpb25Sb3ciLCJGaWVsZEZvcm1hdE9wdGlvbnMiLCJnZXRNYWNyb0ZpZWxkVGVtcGxhdGUiLCJkYXRhRmllbGRPYmplY3RQYXRoIiwiaXNDb21wYWN0VHlwZSIsInRleHRBbGlnbiIsInNob3dFbXB0eUluZGljYXRvciIsImNsYXNzTmFtZSIsImlzQ29ubmVjdGVkRmllbGQiLCJhcmd1bWVudHMiLCJ0eXBlQ29uZmlnIiwiaXNBbmFseXRpY3MiLCJmb3JJbmxpbmVDcmVhdGlvblJvd3MiLCJjb21wYWN0U2VtYW50aWNLZXkiLCJpc0FuYWx5dGljYWxBZ2dyZWdhdGVkUm93IiwiYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24iLCJhZ2dyZWdhdGlvbk9uTGVhZkxldmVsIiwiVGV4dCIsIlRleHRBcnJhbmdlbWVudCIsImNyZWF0ZUN1c3RvbURhdGEiLCJsaXZlQ2hhbmdlIiwiZmllbGRMaXZlQ2hhbmdlIiwic3BsaXQiLCJuYXZpZ2F0ZUFmdGVyQWN0aW9uIiwiaXNOYXZpZ2FibGUiLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUiLCJkYXRhRmllbGRPUCIsImNyZWF0aW9uVGVtcGxhdGUiLCJyZWFkT25seSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImlzQW5ub3RhdGlvbk9mVGVybSIsInNob3dPbmx5Q2hhcnQiLCJzZXR0aW5ncyIsInNob3dNaWNyb0NoYXJ0TGFiZWwiLCJtaWNyb0NoYXJ0U2l6ZSIsIm1pY3JvQ2hhcnRDb2xsZWN0aW9uIiwiZ2V0TW9kZWwiLCJnZXROYXZpZ2F0aW9uQ29udGV4dCIsIk1pY3JvQ2hhcnQiLCJzaXplIiwiaGlkZU9uTm9EYXRhIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImlzVHJ1dGh5IiwiSXNJbmFjdGl2ZSIsIk11bHRpVmFsdWVGaWVsZEJsb2NrIiwidXNlUGFyZW50QmluZGluZ0NhY2hlIiwiZGlzYWJsZU93blJlcXVlc3RPbk1WRiIsImZpZWxkR3JvdXAiLCJkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dCIsImZpZWxkR3JvdXBDb2xsZWN0aW9uTGVuZ3RoIiwiRGF0YSIsIl9maWVsZEdyb3VwRGF0YUZpZWxkIiwiZmllbGRHcm91cERhdGFGaWVsZElkeCIsImZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0IiwiZmllbGRHcm91cERhdGFGaWVsZE9QIiwiZmllbGRHcm91cExhYmVsIiwiRmllbGRIZWxwZXIiLCJjb21wdXRlTGFiZWxUZXh0IiwiY29udGV4dCIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsIl9qc3hzIiwiSEJveCIsImdldFZpc2libGVFeHByZXNzaW9uIiwiYWxpZ25JdGVtcyIsImJ1aWxkRXhwcmVzc2lvbkZvckFsaWduSXRlbXMiLCJMYWJlbCIsImdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkIiwiZ2V0VGV4dCIsIlZCb3giLCJsYXlvdXREYXRhIiwiRmxleEl0ZW1EYXRhIiwiZ3Jvd0ZhY3RvciIsImdldENvbHVtblN0YWJsZUlkIiwiZ2V0TWFyZ2luQ2xhc3MiLCJkcmFmdEluZGljYXRvciIsInNpdHVhdGlvbkluZGljYXRvciIsImdldFZCb3hWaXNpYmlsaXR5IiwiY29sbGVjdGlvbkZpZWxkc0hpZGRlbkV4cHJlc3Npb24iLCJjb25uZWN0ZWRGaWVsZHMiLCJjb25uZWN0ZWRGaWVsZHNDb250ZXh0IiwiZmllbGRzRGVsaW1pdGVyIiwiZ2V0RGVsaW1pdGVyIiwiVGVtcGxhdGUiLCJjb25uZWN0ZWRGaWVsZHNEYXRhIiwiZ2V0Q29ubmVjdGVkRmllbGRzRGF0YSIsImNvbm5lY3RlZEZpZWxkc0VsZW1lbnQiLCJjb25uZWN0ZWRGaWVsZHNFbGVtZW50SWR4IiwiY29ubmVjdGVkRmllbGRzRWxlbWVudENvbnRleHQiLCJjb25uZWN0ZWRGaWVsZHNFbGVtZW50T1AiLCJmaWVsZFRlbXBsYXRlIiwic2hyaW5rRmFjdG9yIiwid3JhcHBpbmciLCJyZW5kZXJXaGl0ZXNwYWNlIiwiaW5uZXJIQm94IiwicmVuZGVyVHlwZSIsImZpdENvbnRhaW5lciIsImp1c3RpZnlDb250ZW50IiwiZ2V0Q29sdW1uVGVtcGxhdGUiLCJnZXREYXRhRmllbGREZWZhdWx0IiwiZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoIiwidGVtcGxhdGVzIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCIkQW5ub3RhdGlvblBhdGgiLCJDb21tb25VdGlscyIsImlzU21hbGxEZXZpY2UiLCJnZXRDb2x1bW5XaWR0aCIsImdldFRleHRPbkFjdGlvbkZpZWxkIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm1pbldpZHRoIiwiZ2V0Q29sdW1uQWxpZ25tZW50Iiwic2V0SGVhZGVyTGFiZWxWaXNpYmlsaXR5IiwiZ2V0Q29sdW1ucyIsImNvbHVtbnMiLCJhdmFpbGFiaWxpdHkiLCJMb2ciLCJlcnJvciIsIkVycm9yIiwiZ2V0RGVzaWdudGltZSIsImdldE1EQ1AxM25Nb2RlIiwic3RyaW5nTW9kZSIsIlRhYmxlUDEzbk1vZGUiLCJBZ2dyZWdhdGUiLCJTb3J0IiwiRmlsdGVyIiwiR3JvdXAiLCJnZXRNRENUYWJsZVRlbXBsYXRlIiwibmF2aWdhdGlvbkluZm8iLCJyb3V0ZVBhdGgiLCJ0YXJnZXRJbmZvcm1hdGlvbiIsImFwcENvbXBvbmVudCIsImdldFJvdXRpbmdTZXJ2aWNlIiwiX2dldFRhcmdldEluZm9ybWF0aW9uIiwib3B0aW9ucyIsIm9wZW5JbkVkaXRNb2RlIiwiZmlsdGVyT25BY3RpdmVFbnRpdGllcyIsIk1vZGVsSGVscGVyIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJkZWxlZ2F0ZSIsImdldERlbGVnYXRlIiwiaXNBbHAiLCJlbnRpdHlOYW1lIiwiY3VycmVudEhlYWRlciIsImhlYWRlckJpbmRpbmdFeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9ySGVhZGVyVmlzaWJsZSIsInRhYlRpdGxlIiwibW9kZWxDb250ZXh0Q2hhbmdlIiwidGFibGVDb250ZXh0Q2hhbmdlIiwibGluZUl0ZW0iLCJnZXRVaUxpbmVJdGVtT2JqZWN0IiwibmF2aWdhdGlvblBhdGgiLCJpc1NpbmdsZXRvbiIsImRyYWZ0IiwiZGVzaWdudGltZSIsIm92ZXJyaWRlUm93UHJlc3MiLCJhY3Rpb25UeXBlIiwic2hvd0NyZWF0ZSIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsImN1cnJlbnRQZXJzb25hbGl6YXRpb24iLCJwZXJzb25hbGl6YXRpb24iLCJwMTNuTW9kZSIsIm1vZGUiLCJ0cmltIiwiZXhjbHVkZUdyb3VwRnJvbVAxM24iLCJtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsIkFjdGlvbkhlbHBlciIsImdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zIiwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImNyZWF0ZUF0RW5kIiwiaGlkZGVuRmlsdGVycyIsImdldE5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJleHBvcnRSZXF1ZXN0U2l6ZSIsInJvd1ByZXNzSGFuZGxlciIsIm5vb3AiLCJNRENUYWJsZSIsInNvcnRDb25kaXRpb25zIiwiZ3JvdXBDb25kaXRpb25zIiwiYWdncmVnYXRlQ29uZGl0aW9ucyIsImJ1c3lJbmRpY2F0b3JEZWxheSIsImVuYWJsZUV4cG9ydCIsIkpTT04iLCJwYXJzZSIsImJlZm9yZU9wZW5Db250ZXh0TWVudSIsImF1dG9CaW5kT25Jbml0IiwidXNlQmFzaWNTZWFyY2giLCJmaWx0ZXJCYXIiLCJzZWxlY3Rpb25Nb2RlIiwic2hvd1Jvd0NvdW50IiwiaGVhZGVyU3R5bGUiLCJ0aHJlc2hvbGQiLCJwYXN0ZSIsImJlZm9yZUV4cG9ydCIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwibXVsdGlTZWxlY3RNb2RlIiwic2hvd1Bhc3RlQnV0dG9uIiwiZW5hYmxlUGFzdGUiLCJkYXRhU3RhdGVJbmRpY2F0b3IiLCJyb3dTZXR0aW5ncyIsImNvbnRleHRNZW51IiwiZHJhZ0Ryb3BDb25maWciLCJjcmVhdGlvblJvdyIsInZhcmlhbnQiLCJxdWlja0ZpbHRlciIsImNvcHlQcm92aWRlciIsImNlbGxTZWxlY3RvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiTWRjVGFibGVUZW1wbGF0ZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb252ZXJ0ZWRNZXRhZGF0YSwgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q2hhcnQsXG5cdENvbm5lY3RlZEZpZWxkcyxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhUG9pbnQsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7XG5cdFVJQW5ub3RhdGlvblRlcm1zLFxuXHRVSUFubm90YXRpb25UeXBlcyxcblx0dHlwZSBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHR0eXBlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdyZWF0ZXJUaGFuLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdGlzVHJ1dGh5LFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mLCBTdHJpY3RQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCBGb3JtRWxlbWVudFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0Zvcm1FbGVtZW50V3JhcHBlclwiO1xuaW1wb3J0IHsgQ3JlYXRpb25Nb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNEYXRhUG9pbnRUYXJnZXQsIGlzRGF0YUZpZWxkLCBpc0RhdGFGaWVsZEZvckFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVR5cGUsIFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbUJhc2VkVGFibGVDb2x1bW5cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IFN0YW5kYXJkQWN0aW9uS2V5cywgdHlwZSBTdGFuZGFyZEFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7IGdldENvbm5lY3RlZEZpZWxkc0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0RhdGFGaWVsZEhlbHBlclwiO1xuaW1wb3J0IHsgRW50aXR5LCBVSSwgc2luZ2xldG9uUGF0aFZpc2l0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVGVybSwgaXNBbm5vdGF0aW9uT2ZUeXBlLCBpc1NpbmdsZXRvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBpc1BhdGhVcGRhdGFibGUsIHR5cGUgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0ZVRpbWVTdHlsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgaXNNdWx0aVZhbHVlRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldENvbW1hbmRFeGVjdXRpb25Gb3JBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9BY3Rpb25Db21tYW5kXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IEZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL0ZpZWxkXCI7XG5pbXBvcnQgTXVsdGlWYWx1ZUZpZWxkQmxvY2sgZnJvbSBcInNhcC9mZS9tYWNyb3MvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgeyBjcmVhdGVDdXN0b21EYXRhLCBjcmVhdGVDdXN0b21EYXRhcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL1RTWFV0aWxzXCI7XG5pbXBvcnQgRHJhZnRJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9tYWNyb3MvZHJhZnRJbmRpY2F0b3IvRHJhZnRJbmRpY2F0b3JcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZywgZ2V0VmlzaWJsZUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCBBY3Rpb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9BY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7IGJ1aWxkRXhwcmVzc2lvbkZvckhlYWRlclZpc2libGUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL1RhYmxlVGVtcGxhdGluZ1wiO1xuaW1wb3J0IFNpdHVhdGlvbnNJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2l0dWF0aW9ucy9TaXR1YXRpb25zSW5kaWNhdG9yXCI7XG5pbXBvcnQgeyBnZXRUYWJsZUFjdGlvbnNUZW1wbGF0ZSwgZ2V0VGFibGVDb250ZXh0TWVudVRlbXBsYXRlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvQWN0aW9uc1RlbXBsYXRpbmdcIjtcbmltcG9ydCBRdWlja0ZpbHRlclNlbGVjdG9yIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1F1aWNrRmlsdGVyU2VsZWN0b3JcIjtcbmltcG9ydCBTbG90Q29sdW1uIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1Nsb3RDb2x1bW5cIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUNyZWF0aW9uT3B0aW9ucyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUNyZWF0aW9uT3B0aW9uc1wiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRVcGxvYWRQbHVnaW4gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS91cGxvYWRUYWJsZS9VcGxvYWRUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE9iamVjdFN0YXR1cyBmcm9tIFwic2FwL20vT2JqZWN0U3RhdHVzXCI7XG5pbXBvcnQgU2VnbWVudGVkQnV0dG9uIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25cIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b25JdGVtIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25JdGVtXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IE9iamVjdE1hcmtlclZpc2liaWxpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IENlbGxTZWxlY3RvciBmcm9tIFwic2FwL20vcGx1Z2lucy9DZWxsU2VsZWN0b3JcIjtcbmltcG9ydCBDb250ZXh0TWVudVNldHRpbmcgZnJvbSBcInNhcC9tL3BsdWdpbnMvQ29udGV4dE1lbnVTZXR0aW5nXCI7XG5pbXBvcnQgQ29weVByb3ZpZGVyIGZyb20gXCJzYXAvbS9wbHVnaW5zL0NvcHlQcm92aWRlclwiO1xuaW1wb3J0IERhdGFTdGF0ZUluZGljYXRvciBmcm9tIFwic2FwL20vcGx1Z2lucy9EYXRhU3RhdGVJbmRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgVGl0bGVMZXZlbCB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBQcmlvcml0eSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCBUYWJsZVAxM25Nb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL1RhYmxlUDEzbk1vZGVcIjtcbmltcG9ydCBUYWJsZVJvd0FjdGlvblR5cGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvVGFibGVSb3dBY3Rpb25UeXBlXCI7XG5pbXBvcnQgUGVyc2lzdGVuY2VQcm92aWRlciBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1BlcnNpc3RlbmNlUHJvdmlkZXJcIjtcbmltcG9ydCBDb2x1bW4gZnJvbSBcInNhcC91aS9tZGMvdGFibGUvQ29sdW1uXCI7XG5pbXBvcnQgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvQ3JlYXRpb25Sb3dcIjtcbmltcG9ydCBEcmFnRHJvcENvbmZpZyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9EcmFnRHJvcENvbmZpZ1wiO1xuaW1wb3J0IEdyaWRUYWJsZVR5cGUgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvR3JpZFRhYmxlVHlwZVwiO1xuaW1wb3J0IFJlc3BvbnNpdmVDb2x1bW5TZXR0aW5ncyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9SZXNwb25zaXZlQ29sdW1uU2V0dGluZ3NcIjtcbmltcG9ydCBSZXNwb25zaXZlVGFibGVUeXBlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1Jlc3BvbnNpdmVUYWJsZVR5cGVcIjtcbmltcG9ydCBSb3dBY3Rpb25JdGVtIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1Jvd0FjdGlvbkl0ZW1cIjtcbmltcG9ydCBSb3dTZXR0aW5ncyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Sb3dTZXR0aW5nc1wiO1xuaW1wb3J0IFRyZWVUYWJsZVR5cGUgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvVHJlZVRhYmxlVHlwZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBNaWNyb0NoYXJ0IGZyb20gXCIuLi9NaWNyb0NoYXJ0XCI7XG5pbXBvcnQgRmllbGRGb3JtYXRPcHRpb25zIGZyb20gXCIuLi9maWVsZC9GaWVsZEZvcm1hdE9wdGlvbnNcIjtcbmltcG9ydCB0eXBlIFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIgZnJvbSBcIi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuXG5leHBvcnQgdHlwZSBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzID0ge1xuXHRtZXRhUGF0aDogQ29udGV4dDtcblx0Y29udmVydGVkTWV0YWRhdGE6IENvbnZlcnRlZE1ldGFkYXRhO1xuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXI7XG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHRhYmxlIHR5cGUgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEBwYXJhbSBfY29sbGVjdGlvblxuICogQHBhcmFtIHRhYmxlVHlwZVxuICogQHBhcmFtIHNlbGVjdGlvbkxpbWl0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgdHlwZVxuICovXG5mdW5jdGlvbiBnZXRUYWJsZVR5cGUoXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRfY29sbGVjdGlvbjogQ29udGV4dCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHNlbGVjdGlvbkxpbWl0OiBudW1iZXJcbik6IFJlc3BvbnNpdmVUYWJsZVR5cGUgfCBHcmlkVGFibGVUeXBlIHwgVHJlZVRhYmxlVHlwZSB7XG5cdGNvbnN0IGNvbGxlY3Rpb24gPSBfY29sbGVjdGlvbi5nZXRPYmplY3QoKTtcblx0c3dpdGNoICh0YWJsZVR5cGUpIHtcblx0XHRjYXNlIFwiR3JpZFRhYmxlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8R3JpZFRhYmxlVHlwZVxuXHRcdFx0XHRcdHJvd0NvdW50TW9kZT17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnRNb2RlfVxuXHRcdFx0XHRcdHJvd0NvdW50PXt0YWJsZURlZmluaXRpb24uY29udHJvbC5yb3dDb3VudH1cblx0XHRcdFx0XHRzZWxlY3Rpb25MaW1pdD17c2VsZWN0aW9uTGltaXR9XG5cdFx0XHRcdFx0Zml4ZWRDb2x1bW5Db3VudD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZnJvemVuQ29sdW1uQ291bnR9XG5cdFx0XHRcdFx0c2Nyb2xsVGhyZXNob2xkPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5zY3JvbGxUaHJlc2hvbGR9XG5cdFx0XHRcdFx0ZW5hYmxlQ29sdW1uRnJlZXplPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVDb2x1bW5GcmVlemV9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIlRyZWVUYWJsZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PFRyZWVUYWJsZVR5cGVcblx0XHRcdFx0XHRyb3dDb3VudE1vZGU9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnJvd0NvdW50TW9kZX1cblx0XHRcdFx0XHRyb3dDb3VudD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnR9XG5cdFx0XHRcdFx0Zml4ZWRDb2x1bW5Db3VudD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZnJvemVuQ29sdW1uQ291bnR9XG5cdFx0XHRcdFx0c2Nyb2xsVGhyZXNob2xkPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5zY3JvbGxUaHJlc2hvbGR9XG5cdFx0XHRcdFx0ZW5hYmxlQ29sdW1uRnJlZXplPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVDb2x1bW5GcmVlemV9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxSZXNwb25zaXZlVGFibGVUeXBlXG5cdFx0XHRcdFx0c2hvd0RldGFpbHNCdXR0b249e3RydWV9XG5cdFx0XHRcdFx0ZGV0YWlsc0J1dHRvblNldHRpbmc9e1tQcmlvcml0eS5Mb3csIFByaW9yaXR5Lk1lZGl1bSwgUHJpb3JpdHkuTm9uZV19XG5cdFx0XHRcdFx0Z3Jvd2luZ01vZGU9e2NvbGxlY3Rpb24uJGtpbmQgPT09IFwiRW50aXR5U2V0XCIgPyBcIlNjcm9sbFwiIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdHBvcGluTGF5b3V0PXt0YWJsZURlZmluaXRpb24uY29udHJvbC5wb3BpbkxheW91dH1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIERhdGFTYXRlSW5kaWNhdG9yIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgZGF0YXN0YXRlIGluZGljYXRvclxuICovXG5mdW5jdGlvbiBnZXREYXRhU3RhdGVJbmRpY2F0b3IoaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogRGF0YVN0YXRlSW5kaWNhdG9yIHtcblx0cmV0dXJuIChcblx0XHQ8RGF0YVN0YXRlSW5kaWNhdG9yXG5cdFx0XHRmaWx0ZXI9e2hhbmRsZXJQcm92aWRlci5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJ9XG5cdFx0XHRlbmFibGVkPXtjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwocGF0aEluTW9kZWwoXCJlbmFibGVUYWJsZURhdGFTdGF0ZUluZGljYXRvclwiLCBcInBhZ2VJbnRlcm5hbFwiKSwgZmFsc2UpKSl9XG5cdFx0XHRlbmFibGVGaWx0ZXJpbmc9e3RydWV9XG5cdFx0XHRkYXRhU3RhdGVDaGFuZ2U9e2hhbmRsZXJQcm92aWRlci5kYXRhU3RhdGVDaGFuZ2V9XG5cdFx0Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGRyYWcgYW5kIGRyb3AgZW5hYmxlbWVudC5cbiAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aFxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXREcmFnQW5kRHJvcEVuYWJsZWQoXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPExpbmVJdGVtIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uID0gaXNQYXRoVXBkYXRhYmxlKGNvbnRleHRPYmplY3RQYXRoLCB7XG5cdFx0aWdub3JlVGFyZ2V0Q29sbGVjdGlvbjogdHJ1ZSxcblx0XHRhdXRob3JpemVVbnJlc29sdmFibGU6IHRydWUsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQgPSBpc1BhdGhVcGRhdGFibGUoY29udGV4dE9iamVjdFBhdGgsIHtcblx0XHRhdXRob3JpemVVbnJlc29sdmFibGU6IHRydWUsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblxuXHRpZiAoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgPT09IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdC8vIExpc3RSZXBvcnQgY2FzZTogd2UgYWxsb3cgZHJhZyBhbmQgZHJvcCBvbiBkcmFmdC1lbmFibGVkIGVudGl0aWVzXG5cdFx0aWYgKChjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpLmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBhbmQoXG5cdFx0XHRcdGlzUGF0aFVwZGF0YWJsZU9uTmF2aWdhdGlvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIlxuXHRcdFx0XHRcdD8gaWZFbHNlKGlzQ29uc3RhbnQoaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQpLCBpc1BhdGhVcGRhdGFibGVPblRhcmdldCwgY29uc3RhbnQodHJ1ZSkpXG5cdFx0XHRcdFx0OiBpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24sXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSFcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE9iamVjdFBhZ2UgY2FzZTogd2UgYWxsb3cgZHJhZyBhbmQgZHJvcCBpbiBlZGl0IG1vZGVcblx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0aXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiXG5cdFx0XHRcdD8gaWZFbHNlKGlzQ29uc3RhbnQoaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQpLCBpc1BhdGhVcGRhdGFibGVPblRhcmdldCwgY29uc3RhbnQodHJ1ZSkpXG5cdFx0XHRcdDogaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uLFxuXHRcdFx0VUkuSXNFZGl0YWJsZSxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSFcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBlbmRlbnRzKFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHR2YXJpYW50TWFuYWdlbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0XG4pOiBVSTVFbGVtZW50W10ge1xuXHRjb25zdCBpZCA9IHRhYmxlUHJvcGVydGllcy5jb250ZW50SWQ7XG5cdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb247XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBoYW5kbGVyUHJvdmlkZXIgPSBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlcjtcblxuXHRjb25zdCBkZXBlbmRlbnRzOiBVSTVFbGVtZW50W10gPSBbXTtcblx0Y29uc3QgY3V0QWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DdXQpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoY3V0QWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIgJiYgdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldEN1dEhhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ3V0XCJcblx0XHRcdFx0ZW5hYmxlZD17Y3V0QWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGNvbnN0IGNvcHlBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNvcHkpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoY29weUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRDb3B5SGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDb3B5XCJcblx0XHRcdFx0ZW5hYmxlZD17Y29weUFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRjb25zdCBwYXN0ZUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuUGFzdGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAocGFzdGVBY3Rpb24/LnZpc2libGUgIT09IFwiZmFsc2VcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0UGFzdGVIYW5kbGVyKGZhbHNlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlBhc3RlXCJcblx0XHRcdFx0ZW5hYmxlZD17cGFzdGVBY3Rpb24/LmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgY3JlYXRlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBkZWxldGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkRlbGV0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cblx0aWYgKFxuXHRcdHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCAmJlxuXHRcdGNyZWF0ZUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiICYmXG5cdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGUgPT09IHVuZGVmaW5lZCAmJlxuXHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVVwbG9hZFBsdWdpbiA9PT0gZmFsc2Vcblx0KSB7XG5cdFx0Ly8gVGhlIHNob3J0Y3V0IGlzIG5vdCBlbmFibGVkIGluIGNhc2Ugb2YgYSBjcmVhdGUgbWVudSAoaS5lLiB3aGVuIG5vZGVUeXBlIGlzIGRlZmluZWQpXG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSwgZmFsc2UpfVxuXHRcdFx0XHR2aXNpYmxlPXtjcmVhdGVBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2NyZWF0ZUFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Y29tbWFuZD1cIkNyZWF0ZVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0aWYgKGRlbGV0ZUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdHZpc2libGU9e2RlbGV0ZUFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17ZGVsZXRlQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRjb21tYW5kPVwiRGVsZXRlRW50cnlcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Ly8gTW92ZSB1cCBhbmQgZG93biBhY3Rpb25zXG5cdGNvbnN0IG1vdmVVcEFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZVVwKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0Y29uc3QgbW92ZURvd25BY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVEb3duKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKFxuXHRcdG1vdmVVcEFjdGlvbiAmJlxuXHRcdG1vdmVEb3duQWN0aW9uICYmXG5cdFx0bW92ZVVwQWN0aW9uLnZpc2libGUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdG1vdmVEb3duQWN0aW9uLnZpc2libGUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHQpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0TW92ZVVwRG93bkhhbmRsZXIodHJ1ZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudFVwXCJcblx0XHRcdFx0ZW5hYmxlZD17bW92ZVVwQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRNb3ZlVXBEb3duSGFuZGxlcihmYWxzZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudERvd25cIlxuXHRcdFx0XHRlbmFibGVkPXttb3ZlRG93bkFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdGZvciAoY29uc3QgYWN0aW9uTmFtZSBpbiB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnMpIHtcblx0XHRjb25zdCBhY3Rpb24gPSB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnNbYWN0aW9uTmFtZV07XG5cdFx0Y29uc3QgYWN0aW9uQ29tbWFuZCA9IGdldEFjdGlvbkNvbW1hbmQoXG5cdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aFxuXHRcdCk7XG5cdFx0aWYgKGFjdGlvbkNvbW1hbmQpIHtcblx0XHRcdGRlcGVuZGVudHMucHVzaChhY3Rpb25Db21tYW5kKTtcblx0XHR9XG5cdH1cblxuXHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFwiTm9uZVwiKSB7XG5cdFx0Ly8gUGVyc2lzdGVuY2UgcHJvdmlkZXIgb2ZmZXJzIHBlcnNpc3RpbmcgcGVyc29uYWxpemF0aW9uIGNoYW5nZXMgd2l0aG91dCB2YXJpYW50IG1hbmFnZW1lbnRcblx0XHRkZXBlbmRlbnRzLnB1c2goPFBlcnNpc3RlbmNlUHJvdmlkZXIgaWQ9e2dlbmVyYXRlKFtpZCwgXCJQZXJzaXN0ZW5jZVByb3ZpZGVyXCJdKX0gZm9yPXtpZH0gLz4pO1xuXHR9XG5cblx0ZGVwZW5kZW50cy5wdXNoKDxDb250ZXh0TWVudVNldHRpbmcgc2NvcGU9XCJTZWxlY3Rpb25cIiAvPik7XG5cblx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVVwbG9hZFBsdWdpbikge1xuXHRcdGRlcGVuZGVudHMucHVzaChnZXRVcGxvYWRQbHVnaW4odGFibGVEZWZpbml0aW9uLCBpZCwgaGFuZGxlclByb3ZpZGVyKSk7XG5cdH1cblxuXHRyZXR1cm4gZGVwZW5kZW50cztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0YWJsZSBhY3Rpb25zLlxuICogQHBhcmFtIHRhYmxlXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0XG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eVxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRBY3Rpb25zKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IENvbnRyb2xbXSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFjdGlvbnM6IENvbnRyb2xbXSA9IFtdO1xuXHRpZiAodGFibGUuZGlzcGxheVNlZ21lbnRlZEJ1dHRvbikge1xuXHRcdGNvbnN0IGFscEJ1dHRvbkl0ZW1zOiBTZWdtZW50ZWRCdXR0b25JdGVtW10gPSBbXTtcblx0XHRpZiAoQ29tbW9uSGVscGVyLmlzRGVza3RvcCgpKSB7XG5cdFx0XHRhbHBCdXR0b25JdGVtcy5wdXNoKFxuXHRcdFx0XHQ8U2VnbWVudGVkQnV0dG9uSXRlbVxuXHRcdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSFlCUklEX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiXG5cdFx0XHRcdFx0a2V5PVwiSHlicmlkXCJcblx0XHRcdFx0XHRpY29uPVwic2FwLWljb246Ly9jaGFydC10YWJsZS12aWV3XCJcblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdGFscEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0XHQ8U2VnbWVudGVkQnV0dG9uSXRlbVxuXHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0NIQVJUX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiXG5cdFx0XHRcdGtleT1cIkNoYXJ0XCJcblx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vYmFyLWNoYXJ0XCJcblx0XHRcdC8+XG5cdFx0KTtcblx0XHRhbHBCdXR0b25JdGVtcy5wdXNoKFxuXHRcdFx0PFNlZ21lbnRlZEJ1dHRvbkl0ZW1cblx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIlxuXHRcdFx0XHRrZXk9XCJUYWJsZVwiXG5cdFx0XHRcdGljb249XCJzYXAtaWNvbjovL3RhYmxlLXZpZXdcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXG5cdFx0YWN0aW9ucy5wdXNoKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0bGF5b3V0SW5mb3JtYXRpb249eyd7IGFnZ3JlZ2F0aW9uTmFtZTogXCJlbmRcIiwgYWxpZ25tZW50OiBcIkVuZFwiIH0nfVxuXHRcdFx0XHR2aXNpYmxlPXtcIns9ICR7cGFnZUludGVybmFsPmFscENvbnRlbnRWaWV3fSA9PT0gJ1RhYmxlJyB9XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiAoXG5cdFx0XHRcdFx0XHQ8U2VnbWVudGVkQnV0dG9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pfVxuXHRcdFx0XHRcdFx0XHRzZWxlY3Q9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnNlZ21lbnRlZEJ1dHRvblByZXNzfVxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZEtleT1cIntwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogYWxwQnV0dG9uSXRlbXNcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvU2VnbWVudGVkQnV0dG9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9XG5cblx0YWN0aW9ucy5wdXNoKC4uLmdldFRhYmxlQWN0aW9uc1RlbXBsYXRlKHRhYmxlLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkVudGl0eSkpO1xuXG5cdHJldHVybiBhY3Rpb25zLmxlbmd0aCA+IDAgPyBhY3Rpb25zIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93U2V0dGluZ3MoXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRyb3dBY3Rpb25UeXBlOiBUYWJsZVJvd0FjdGlvblR5cGUgfCB1bmRlZmluZWQsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IFJvd1NldHRpbmdzIHtcblx0Y29uc3Qgcm93QWN0aW9uSXRlbSA9IChcblx0XHQ8Um93QWN0aW9uSXRlbSB0eXBlPXtcIk5hdmlnYXRpb25cIn0gcHJlc3M9e2hhbmRsZXJQcm92aWRlci5yb3dQcmVzc30gdmlzaWJsZT17dGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ucm93Py52aXNpYmxlfSAvPlxuXHQpO1xuXG5cdHJldHVybiAoXG5cdFx0PFJvd1NldHRpbmdzXG5cdFx0XHRuYXZpZ2F0ZWQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93TmF2aWdhdGVkfVxuXHRcdFx0aGlnaGxpZ2h0PXt0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5yb3c/LnJvd0hpZ2hsaWdodGluZ31cblx0XHRcdGhpZ2hsaWdodFRleHQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93SGlnaGxpZ2h0aW5nfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdHJvd0FjdGlvbnM6IHJvd0FjdGlvblR5cGUgPT09IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uID8gcm93QWN0aW9uSXRlbSA6IHVuZGVmaW5lZFxuXHRcdFx0fX1cblx0XHQ8L1Jvd1NldHRpbmdzPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHlcbiAqIEBwYXJhbSByb3dBY3Rpb25UeXBlXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIG5hdmlnYXRpb25JbkVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dCBtZW51XG4gKi9cbmZ1bmN0aW9uIGdldENvbnRleHRNZW51KFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHksXG5cdHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0bmF2aWdhdGlvbkluRWRpdE1vZGU6IGJvb2xlYW5cbik6IE1lbnUgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtZW51SXRlbXMgPSBnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUodGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uLCBjb2xsZWN0aW9uRW50aXR5KTtcblx0aWYgKHJvd0FjdGlvblR5cGUgPT09IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uICYmICFuYXZpZ2F0aW9uSW5FZGl0TW9kZSkge1xuXHRcdG1lbnVJdGVtcy5wdXNoKGdldFNoYXJldG9Db2xsYWJvcmF0aW9uTWFuYWdlclRlbXBsYXRlKHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLCB0YWJsZVByb3BlcnRpZXMuY29udGVudElkKSk7XG5cdFx0bWVudUl0ZW1zLnB1c2goZ2V0T3BlbkluTmV3VGFiVGVtcGxhdGUocGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpKTtcblx0fVxuXHRpZiAobWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnUgaXRlbVNlbGVjdGVkPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZH0+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0ZGVwZW5kZW50czogZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51KFxuXHRcdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGgsXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnU+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW0uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcGFyYW0gdGFibGVJZFxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRTaGFyZXRvQ29sbGFib3JhdGlvbk1hbmFnZXJUZW1wbGF0ZShoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIsIHRhYmxlSWQ6IHN0cmluZyk6IE1lbnVJdGVtIHtcblx0Ly8gVGhlIHZpc2libGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgYXQgcnVudGltZSB3aGVuIHRoZSBjb2xsYWJvcmF0aW9uIG1hbmFnZXIgaXMgYXZhaWxhYmxlIGFuZCBhbGwgb3RoZXIgY29uZGl0aW9ucyBhcmUgbWV0XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7QVBJOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSSd9XCJcblx0XHRcdHN0YXJ0c1NlY3Rpb249e3RydWV9XG5cdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ29udGV4dE1lbnVcIiwgXCJDb2xsYWJvcmF0aW9uTWFuYWdlclwiXSl9XG5cdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX0NPTlRFWFRfTUVOVV9TSEFSRV9UT19DT0xMQUJPUkFUSU9OX01BTkFHRVJ9XCJcblx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuY29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJ9XG5cdFx0XHRlbmFibGVkPVwiez0gJHtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID4gMH1cIlxuXHRcdFx0dmlzaWJsZT17ZmFsc2V9XG5cdFx0Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIHN0cmluZyBmb3IgdGhlIE1lbnVJdGVtLlxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRPcGVuSW5OZXdUYWJUZW1wbGF0ZShoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIpOiBNZW51SXRlbSB7XG5cdC8vIFRoZSAnT3BlbiBpbiBOZXcgVGFiJyBhY3Rpb24gc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGZvciBzdGlja3kgc2Vzc2lvbnMgaW4gZWRpdCBtb2RlXG5cdC8vIEZvciB0aGUgY29udGV4dCBtZW51LCB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgJ2luYWN0aXZlQ29udGV4dCcgcHJvcGVydHk6XG5cdC8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuXHQvLyBUaGUgc2Vjb25kIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgdGFibGUgbWFuaWZlc3Qgc2V0dGluZyBcImNyZWF0aW9uTW9kZVwiIGlzIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCJcblx0Y29uc3QgdmlzaWJsZSA9IGFuZChcblx0XHRub3QoYW5kKHBhdGhJbk1vZGVsKFwiL3Nlc3Npb25PblwiLCBcImludGVybmFsXCIpLCBVSS5Jc0VkaXRhYmxlKSksXG5cdFx0bm90KHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsIFwiaW50ZXJuYWxcIikpXG5cdCk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7QVBJOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSSd9XCJcblx0XHRcdHN0YXJ0c1NlY3Rpb249e3RydWV9XG5cdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX0NPTlRFWFRfTUVOVV9PUEVOX0lOX05FV19UQUJ9XCJcblx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuY29udGV4dE1lbnVPcGVuSW5OZXdUYWJ9XG5cdFx0XHRlbmFibGVkPXtncmVhdGVyVGhhbihwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L251bWJlck9mTmF2aWdhYmxlQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMCl9XG5cdFx0XHR2aXNpYmxlPXt2aXNpYmxlfVxuXHRcdC8+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZm9yIHRoZSBNZW51IGRlcGVuZGVudHMuXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gIHRoZSBNZW51IGRlcGVuZGVudHNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51KFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbGxlY3Rpb246IENvbnRleHRcbik6IFVJNUVsZW1lbnRbXSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRlcGVuZGVudHM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBjcmVhdGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjcmVhdGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIodHJ1ZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ3JlYXRlOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdHZpc2libGU9e2NyZWF0ZUFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17Y3JlYXRlQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBjdXRBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkN1dCkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjdXRBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldEN1dEhhbmRsZXIodHJ1ZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDdXQ6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17Y3V0QWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgY29weUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ29weSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjb3B5QWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRDb3B5SGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIkNvcHk6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17Y29weUFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGNvbnN0IHBhc3RlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChwYXN0ZUFjdGlvbj8udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldFBhc3RlSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlBhc3RlOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e3Bhc3RlQWN0aW9uPy5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgZGVsZXRlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdGlmIChkZWxldGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0dmlzaWJsZT17ZGVsZXRlQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtkZWxldGVBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Y29tbWFuZD1cIkRlbGV0ZUVudHJ5OjpDb250ZXh0TWVudVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvLyBNb3ZlIHVwIGFuZCBkb3duIGFjdGlvbnNcblx0Y29uc3QgbW92ZVVwQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXApIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBtb3ZlRG93bkFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd24pIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0bW92ZVVwQWN0aW9uICYmXG5cdFx0bW92ZURvd25BY3Rpb24gJiZcblx0XHRtb3ZlVXBBY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0bW92ZURvd25BY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdCkge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKHRydWUsIHRydWUpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudFVwOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVVcEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKGZhbHNlLCB0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlRhYmxlTW92ZUVsZW1lbnREb3duOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVEb3duQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zW2FjdGlvbk5hbWVdO1xuXHRcdGNvbnN0IGFjdGlvbkNvbW1hbmQgPSBnZXRBY3Rpb25Db21tYW5kKGFjdGlvbk5hbWUsIGFjdGlvbiwgdHJ1ZSwgcGFyYW1ldGVycywgY29sbGVjdGlvbiwgdGFibGVEZWZpbml0aW9uLCBjb250ZXh0T2JqZWN0UGF0aCk7XG5cdFx0aWYgKGFjdGlvbkNvbW1hbmQpIHtcblx0XHRcdGRlcGVuZGVudHMucHVzaChhY3Rpb25Db21tYW5kKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRlcGVuZGVudHMubGVuZ3RoID4gMCA/IGRlcGVuZGVudHMgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBWYXJpYW50TWFuYWdlbWVudCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHZhcmlhbnRNYW5hZ2VtZW50XG4gKiBAcGFyYW0gaWRcbiAqIEBwYXJhbSBoZWFkZXJMZXZlbFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIFZhcmlhbnRNYW5hZ2VtZW50IGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0VmFyaWFudE1hbmFnZW1lbnQoXG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBzdHJpbmcsXG5cdGlkOiBzdHJpbmcsXG5cdGhlYWRlckxldmVsOiBUaXRsZUxldmVsLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkIHtcblx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VmFyaWFudE1hbmFnZW1lbnRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtpZCwgXCJWTVwiXSl9XG5cdFx0XHRcdHNob3dTZXRBc0RlZmF1bHQ9e3RydWV9XG5cdFx0XHRcdHNlbGVjdD17aGFuZGxlclByb3ZpZGVyLnZhcmlhbnRTZWxlY3RlZH1cblx0XHRcdFx0aGVhZGVyTGV2ZWw9e2hlYWRlckxldmVsfVxuXHRcdFx0XHRzYXZlPXtoYW5kbGVyUHJvdmlkZXIudmFyaWFudFNhdmVkfVxuXHRcdFx0XHRmb3I9e1tpZF19XG5cdFx0XHQ+PC9WYXJpYW50TWFuYWdlbWVudD5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBRdWlja1ZhcmlhbnRTZWxlY3Rpb24gY29udHJvbCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllcyBUaGUgdGFibGUgcHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIFF1aWNrVmFyaWFudFNlbGVjdGlvbiBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIGdldFF1aWNrRmlsdGVyKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMpOiBRdWlja0ZpbHRlclNlbGVjdG9yIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcXVpY2tGaWx0ZXJzID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZpbHRlcnM/LnF1aWNrRmlsdGVycztcblx0aWYgKHF1aWNrRmlsdGVycykge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8UXVpY2tGaWx0ZXJTZWxlY3RvclxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlUHJvcGVydGllcy5jb250ZW50SWQsIFwiUXVpY2tGaWx0ZXJDb250YWluZXJcIl0pfVxuXHRcdFx0XHRwYXRocz17cXVpY2tGaWx0ZXJzLnBhdGhzLm1hcCgocGF0aCkgPT4gcGF0aC5hbm5vdGF0aW9uUGF0aCl9XG5cdFx0XHRcdHNob3dDb3VudHM9e3F1aWNrRmlsdGVycy5zaG93Q291bnRzfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIENvcHlQcm92aWRlciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIENvcHlQcm92aWRlclxuICovXG5mdW5jdGlvbiBnZXRDb3B5UHJvdmlkZXIodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IENvcHlQcm92aWRlciB7XG5cdGNvbnN0IGNvbnRleHRPYmplY3RQYXRoID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoO1xuXG5cdGxldCB2aXNpYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpZiAodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQpIHtcblx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIEZvciBhIFRyZWVUYWJsZSwgdGhlIGNvcHkgYnV0dG9uIHNoYWxsIGJlIHZpc2libGUgb25seSB3aGVuIGRyYWcgYW5kIGRyb3AgaXMgZGlzYWJsZWRcblx0XHRpZiAoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgPT09IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0Ly8gTGlzdFJlcG9ydDogZW5hYmxlIGNvcHkgaWYgdGhlIGVudGl0eSBpcyBub3QgZHJhZnQtZW5hYmxlZFxuXHRcdFx0dmlzaWJsZUV4cHJlc3Npb24gPSBjb25zdGFudCgoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCA9PT0gdW5kZWZpbmVkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT2JqZWN0UGFnZTogZW5hYmxlIGNvcHkgaW4gcmVhZC1vbmx5XG5cdFx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IG5vdChVSS5Jc0VkaXRhYmxlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dmlzaWJsZUV4cHJlc3Npb24gPSBjb25zdGFudCh0cnVlKTtcblx0fVxuXG5cdHJldHVybiA8Q29weVByb3ZpZGVyIHZpc2libGU9e3Zpc2libGVFeHByZXNzaW9ufSAvPjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIENlbGxTZWxlY3RvciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIENlbGxTZWxlY3RvclxuICovXG5mdW5jdGlvbiBnZXRDZWxsU2VsZWN0b3IodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcywgaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogQ2VsbFNlbGVjdG9yIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGlmIChcblx0XHQhdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQgJiZcblx0XHR0YWJsZVR5cGUgJiZcblx0XHRbXCJSZXNwb25zaXZlVGFibGVcIiwgXCJHcmlkVGFibGVcIiwgXCJUcmVlVGFibGVcIl0uaW5jbHVkZXModGFibGVUeXBlKVxuXHQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENlbGxTZWxlY3RvclxuXHRcdFx0XHRlbmFibGVkPXtvcihcblx0XHRcdFx0XHR0YWJsZVR5cGUgIT09IFwiVHJlZVRhYmxlXCIsXG5cdFx0XHRcdFx0bm90KGdldERyYWdBbmREcm9wRW5hYmxlZCh0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGgsIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24pKVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRyYW5nZUxpbWl0PXsyMDB9XG5cdFx0XHRcdHNlbGVjdGlvbkNoYW5nZT17aGFuZGxlclByb3ZpZGVyLmdldENlbGxzU2VsZWN0aW9uSGFuZGxlcigpfVxuXHRcdFx0Lz5cblx0XHQpIGFzIENlbGxTZWxlY3Rvcjtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgQ3JlYXRpb25Sb3cgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXNcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBDcmVhdGlvblJvd1xuICovXG5mdW5jdGlvbiBnZXRDcmVhdGlvblJvdyh0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIpOiBDcmVhdGlvblJvdyB8IHVuZGVmaW5lZCB7XG5cdGlmICgodGFibGVQcm9wZXJ0aWVzLmNyZWF0aW9uTW9kZT8ubmFtZSBhcyBzdHJpbmcpID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cpIHtcblx0XHRjb25zdCBjcmVhdGlvblJvd0FjdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0aW9uUm93KSBhc1xuXHRcdFx0fCBTdGFuZGFyZEFjdGlvblxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdFx0aWYgKGNyZWF0aW9uUm93QWN0aW9uPy5pc1RlbXBsYXRlZCkge1xuXHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IGNyZWF0ZUN1c3RvbURhdGFzKFtcblx0XHRcdFx0eyBrZXk6IFwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YVwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgfSxcblx0XHRcdFx0eyBrZXk6IFwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIH1cblx0XHRcdF0pO1xuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8Q3JlYXRpb25Sb3dcblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlUHJvcGVydGllcy5jb250ZW50SWQsIENyZWF0aW9uTW9kZS5DcmVhdGlvblJvd10pfVxuXHRcdFx0XHRcdHZpc2libGU9e2NyZWF0aW9uUm93QWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGFwcGx5PXtoYW5kbGVyUHJvdmlkZXIuZ2V0Q3JlYXRlQnV0dG9uUHJlc3NIYW5kbGVyKGZhbHNlLCB0cnVlKX1cblx0XHRcdFx0XHRhcHBseUVuYWJsZWQ9e2NyZWF0aW9uUm93QWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IGN1c3RvbURhdGFcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0NyZWF0aW9uUm93PlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGRyYWcgYW5kIGRyb3AgY29uZmlnIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgZHJhZyBhbmQgZHJvcCBjb25maWdcbiAqL1xuZnVuY3Rpb24gZ2V0RHJhZ0FuZERyb3BDb25maWcoXG5cdHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogRHJhZ0Ryb3BDb25maWcgfCB1bmRlZmluZWQge1xuXHRpZiAodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PERyYWdEcm9wQ29uZmlnXG5cdFx0XHRcdGVuYWJsZWQ9e2NvbXBpbGVFeHByZXNzaW9uKGdldERyYWdBbmREcm9wRW5hYmxlZCh0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGgsIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24pKX1cblx0XHRcdFx0ZHJvcFBvc2l0aW9uPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzID09PSB0cnVlID8gXCJPbk9yQmV0d2VlblwiIDogXCJPblwifVxuXHRcdFx0XHRkcmFnZ2FibGU9e3RydWV9XG5cdFx0XHRcdGRyb3BwYWJsZT17dHJ1ZX1cblx0XHRcdFx0ZHJhZ1N0YXJ0PXtoYW5kbGVyUHJvdmlkZXIuZHJhZ1N0YXJ0RG9jdW1lbnR9XG5cdFx0XHRcdGRyYWdFbnRlcj17aGFuZGxlclByb3ZpZGVyLmRyYWdFbnRlckRvY3VtZW50fVxuXHRcdFx0XHRkcm9wPXtoYW5kbGVyUHJvdmlkZXIuZHJvcERvY3VtZW50fVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIGFjdGlvbkNvbW1hbmQgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSBhY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uXG4gKiBAcGFyYW0gY29udGV4dE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIFRoZSBhY3Rpb25Db21tYW5kXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGlvbkNvbW1hbmQoXG5cdGFjdGlvbk5hbWU6IHN0cmluZyxcblx0YWN0aW9uOiBDdXN0b21BY3Rpb24sXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD5cbik6IENvbW1hbmRFeGVjdXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCBkYXRhRmllbGQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHQ/IChwYXJhbWV0ZXJzLmNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkudGFyZ2V0IGFzIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbilcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHQ/IENvbW1vbkhlbHBlci5nZXRBY3Rpb25Db250ZXh0KHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSEpXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBhY3Rpb25Db250ZXh0UGF0aCA/IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGFjdGlvbkNvbnRleHQgPyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoYWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbikgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzQm91bmQgPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbik/LkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0Y29uc3QgaXNPcGVyYXRpb25BdmFpbGFibGUgPVxuXHRcdChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uQWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlPy52YWx1ZU9mKCkgIT09IGZhbHNlO1xuXHRjb25zdCBkaXNwbGF5Q29tbWFuZEFjdGlvbiA9IGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiID8gaXNCb3VuZCAhPT0gdHJ1ZSB8fCBpc09wZXJhdGlvbkF2YWlsYWJsZSA6IHRydWU7XG5cdGNvbnN0IGVuYWJsZWQgPSAhZm9yQ29udGV4dE1lbnUgPyBhY3Rpb24uZW5hYmxlZCA6IGFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnU7XG5cdGlmIChkaXNwbGF5Q29tbWFuZEFjdGlvbiAmJiAoIWZvckNvbnRleHRNZW51IHx8IFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KGFjdGlvbiwgY29udGV4dE9iamVjdFBhdGgpKSkge1xuXHRcdGNvbnN0IGNvbW1hbmQgPSAhZm9yQ29udGV4dE1lbnUgPyBhY3Rpb24uY29tbWFuZCA6IGFjdGlvbi5jb21tYW5kICsgXCI6OkNvbnRleHRNZW51XCI7XG5cblx0XHRjb25zdCBhY3Rpb25QYXJhbWV0ZXJzID0ge1xuXHRcdFx0b25FeGVjdXRlQWN0aW9uOiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIoXG5cdFx0XHRcdGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdCksXG5cdFx0XHRvbkV4ZWN1dGVJQk46IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihhY3Rpb24sIGZhbHNlKSxcblx0XHRcdG9uRXhlY3V0ZU1hbmlmZXN0OiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihhY3Rpb24sIGZvckNvbnRleHRNZW51KSxcblx0XHRcdGlzSUJORW5hYmxlZDpcblx0XHRcdFx0ZW5hYmxlZCA/P1xuXHRcdFx0XHRUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvcklCTkVuYWJsZWQoXG5cdFx0XHRcdFx0eyBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLCB0YWJsZURlZmluaXRpb246IHRhYmxlRGVmaW5pdGlvbiB9LFxuXHRcdFx0XHRcdGRhdGFGaWVsZCEgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdCEhKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLlJlcXVpcmVzQ29udGV4dCxcblx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikuTmF2aWdhdGlvbkF2YWlsYWJsZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpLFxuXHRcdFx0aXNBY3Rpb25FbmFibGVkOlxuXHRcdFx0XHRlbmFibGVkID8/XG5cdFx0XHRcdFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZChcblx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0KGRhdGFGaWVsZCEgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKS5BY3Rpb24sXG5cdFx0XHRcdFx0ISFpc0JvdW5kLFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHRQYXRoLFxuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdCksXG5cdFx0XHRpc0VuYWJsZWQ6IGVuYWJsZWRcblx0XHR9O1xuXHRcdHJldHVybiBnZXRDb21tYW5kRXhlY3V0aW9uRm9yQWN0aW9uKGNvbW1hbmQsIHRhYmxlRGVmaW5pdGlvbi5jb21tYW5kQWN0aW9ucyFbYWN0aW9uTmFtZV0sIGFjdGlvblBhcmFtZXRlcnMpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZm9yIHRoZSByZXF1aXJlZCBtb2R1bGVzLlxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgcmVxdWlyZWQgbW9kdWxlc1xuICovXG5mdW5jdGlvbiBnZXRDb3JlUmVxdWlyZSh0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbik6IHN0cmluZyB7XG5cdGNvbnN0IGN1c3RvbU1vZHVsZXMgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC5hZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzID8/IFtdO1xuXG5cdHJldHVybiBge1RhYmxlUnVudGltZTogJ3NhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVSdW50aW1lJywgQVBJOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSScke2N1c3RvbU1vZHVsZXNcblx0XHQubWFwKChtb2R1bGU6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4gYCwgY3VzdG9tTW9kdWxlJHtpbmRleCArIDF9OiAnJHttb2R1bGV9J2ApXG5cdFx0LmpvaW4oXCJcIil9fWA7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYSBjb21wdXRlZCBjb2x1bW4uXG4gKiBDdXJyZW50bHksIHRoaXMgcmVwcmVzZW50cyBvbmx5IHRoZSBEcmFmdEluZGljYXRvciBhbmQgdGhlIFNpdHVhdGlvbnNJbmRpY2F0b3IuXG4gKiBAcGFyYW0gdGFibGVJZCBUaGUgdGFibGUgSURcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbXB1dGVkIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHVzZWQgZm9yIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGVuYWJsZUFuYWx5dGljcyBXaGV0aGVyIGFuYWx5dGljcyBhcmUgZW5hYmxlZFxuICogQHJldHVybnMgVGhlIGNvbXB1dGVkIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXB1dGVkQ29sdW1uKFxuXHR0YWJsZUlkOiBzdHJpbmcsXG5cdGNvbHVtbjogQ29tcHV0ZWRUYWJsZUNvbHVtbixcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0ZW5hYmxlQW5hbHl0aWNzOiBib29sZWFuIHwgdW5kZWZpbmVkXG4pOiBDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRpZiAoY29sdW1uLmlzRHJhZnRJbmRpY2F0b3IpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbHVtblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ1wiLCBcImNvbXB1dGVkQ29sdW1uc1wiLCBcImRyYWZ0U3RhdHVzXCJdKX1cblx0XHRcdFx0aGVhZGVyVmlzaWJsZT17ZmFsc2V9XG5cdFx0XHRcdHByb3BlcnR5S2V5PXtjb2x1bW4ubmFtZX1cblx0XHRcdFx0aGVhZGVyPXtjb2x1bW4ubGFiZWx9XG5cdFx0XHRcdHRvb2x0aXA9e2NvbHVtbi50b29sdGlwfVxuXHRcdFx0XHR3aWR0aD1cIjNlbVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxEcmFmdEluZGljYXRvclxuXHRcdFx0XHRcdGRyYWZ0SW5kaWNhdG9yVHlwZT17T2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uT25seX1cblx0XHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0dmlzaWJsZT17b3Iobm90KEVudGl0eS5Jc0FjdGl2ZSksIEVudGl0eS5IYXNEcmFmdCl9XG5cdFx0XHRcdFx0dXNlZEluVGFibGU9e3RydWV9XG5cdFx0XHRcdFx0dXNlZEluQW5hbHl0aWNhbFRhYmxlPXtlbmFibGVBbmFseXRpY3N9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0NvbHVtbj5cblx0XHQpO1xuXHR9IGVsc2UgaWYgKGNvbHVtbi5pc1NpdHVhdGlvbnNJbmRpY2F0b3IpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbHVtblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ1wiLCBcImNvbXB1dGVkQ29sdW1uc1wiLCBcInNpdHVhdGlvbnNJbmRpY2F0b3JcIl0pfVxuXHRcdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHRcdGhlYWRlcj17Y29sdW1uLmxhYmVsfVxuXHRcdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdFx0aGVhZGVyVmlzaWJsZT17ZmFsc2V9XG5cdFx0XHRcdHdpZHRoPVwiNGVtXCJcblx0XHRcdD5cblx0XHRcdFx0PFNpdHVhdGlvbnNJbmRpY2F0b3IgY29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfSAvPlxuXHRcdFx0PC9Db2x1bW4+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYSBzbG90IGNvbHVtbi5cbiAqIFRoaXMgY29sdW1uIHdpbGwgZWl0aGVyIHJldXNlIGEgdGVtcGxhdGUgY29udHJvbCB0aGF0IGlzIGRlZmluZWQgYXQgcnVudGltZSAodGVtcGxhdGVJZCBjYXNlKSwgb3IgZGVmaW5lIGEgc2xvdCB3aGVyZSB0aGUgWE1MIGNvbnRlbnQgaXMgY29waWVkLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBzbG90IGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gaXNSZWFkT25seSBXaGV0aGVyIHRoZSB0YWJsZSBpcyByZWFkIG9ubHlcbiAqIEByZXR1cm5zIFRoZSBzbG90IGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb3RDb2x1bW4odGFibGVJZDogc3RyaW5nLCBjb2x1bW46IEN1c3RvbUJhc2VkVGFibGVDb2x1bW4sIGlzUmVhZE9ubHk6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBDb2x1bW4ge1xuXHRjb25zdCB0ZW1wbGF0ZSA9XG5cdFx0dHlwZW9mIGNvbHVtbi50ZW1wbGF0ZSA9PT0gXCJzdHJpbmdcIiAmJiAhY29sdW1uLnRlbXBsYXRlPy5zdGFydHNXaXRoKFwiPFwiKSA/IChcblx0XHRcdDxTbG90Q29sdW1uIHRlbXBsYXRlSWQ9e2NvbHVtbi50ZW1wbGF0ZX0gLz5cblx0XHQpIDogKFxuXHRcdFx0Y29sdW1uLnRlbXBsYXRlXG5cdFx0KTtcblx0cmV0dXJuIChcblx0XHQ8Q29sdW1uXG5cdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ1wiLCBjb2x1bW4uaWRdKX1cblx0XHRcdHByb3BlcnR5S2V5PXtjb2x1bW4ubmFtZX1cblx0XHRcdHdpZHRoPXtjb2x1bW4ud2lkdGh9XG5cdFx0XHRoQWxpZ249e2NvbHVtbi5ob3Jpem9udGFsQWxpZ259XG5cdFx0XHRoZWFkZXI9e2NvbHVtbi5oZWFkZXJ9XG5cdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdHJlcXVpcmVkPXtpc1JlYWRPbmx5ID8gdW5kZWZpbmVkIDogY29sdW1uLnJlcXVpcmVkfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGV4dGVuZGVkU2V0dGluZ3M6IDxSZXNwb25zaXZlQ29sdW1uU2V0dGluZ3MgaW1wb3J0YW5jZT17Y29sdW1uLmltcG9ydGFuY2V9IC8+LFxuXHRcdFx0XHR0ZW1wbGF0ZTogdGVtcGxhdGVcblx0XHRcdH19XG5cdFx0PC9Db2x1bW4+XG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIERyYWZ0SW5kaWNhdG9yLlxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIERyYWZ0SW5kaWNhdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHJhZnRJbmRpY2F0b3IoY29sbGVjdGlvbjogQ29udGV4dCwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBGb3JtRWxlbWVudFdyYXBwZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoXG5cdFx0Y29sbGVjdGlvbi5nZXRPYmplY3QoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiKSAmJlxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiLi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCIpICYmXG5cdFx0Y29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZvcm1FbGVtZW50V3JhcHBlcj5cblx0XHRcdFx0PERyYWZ0SW5kaWNhdG9yXG5cdFx0XHRcdFx0ZHJhZnRJbmRpY2F0b3JUeXBlPXtPYmplY3RNYXJrZXJWaXNpYmlsaXR5Lkljb25BbmRUZXh0fVxuXHRcdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0XHR2aXNpYmxlPXtnZXREcmFmdEluZGljYXRvclZpc2libGVCaW5kaW5nKGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwTmFtZSl9XG5cdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tcInRoaXM+YXJpYUxhYmVsbGVkQnlcIl19XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0Zvcm1FbGVtZW50V3JhcHBlcj5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBTaXR1YXRpb25JbmRpY2F0b3IgT2JqZWN0U3RhdHVzLlxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgT2JqZWN0U3RhdHVzLlxuICovXG5mdW5jdGlvbiBnZXRTaXR1YXRpb25JbmRpY2F0b3IoY29sbGVjdGlvbjogQ29udGV4dCwgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBPYmplY3RTdGF0dXMgfCB1bmRlZmluZWQge1xuXHRpZiAoXG5cdFx0Y29sbGVjdGlvbi5nZXRPYmplY3QoXCIuL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlcIikgJiZcblx0XHRjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoXG5cdCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8T2JqZWN0U3RhdHVzXG5cdFx0XHRcdHZpc2libGU9e2NvbHVtbi5mb3JtYXRPcHRpb25zPy5zaG93RXJyb3JPYmplY3RTdGF0dXN9XG5cdFx0XHRcdGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJvdHRvbVwiXG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+Q29udGFpbnNfRXJyb3JzfVwiXG5cdFx0XHRcdHN0YXRlPVwiRXJyb3JcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBkYXRlLXRpbWUgZm9ybWF0IHN0eWxlIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRhIGZpZWxkIGNvbnRleHQuXG4gKiBAcGFyYW0gZGF0YUZpZWxkQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgZGF0YSBmaWVsZFxuICogQHJldHVybnMgUmV0dXJucyAnc2hvcnQnIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgZmllbGQgaXMgb2YgdGhlIHR5cGUgJ0VkbS5UaW1lT2ZEYXknLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RGF0ZVRpbWVTdHlsZShkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0KTogRGF0ZVRpbWVTdHlsZSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhcmdldE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihkYXRhRmllbGRDb250ZXh0KS50YXJnZXRPYmplY3Q7XG5cdGlmIChpc0RhdGFGaWVsZCh0YXJnZXRPYmplY3QpICYmIHRhcmdldE9iamVjdC5WYWx1ZT8uJHRhcmdldD8udHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCIpIHtcblx0XHRyZXR1cm4gXCJzaG9ydFwiO1xuXHR9XG5cdGlmIChcblx0XHRpc0RhdGFGaWVsZEZvckFubm90YXRpb24odGFyZ2V0T2JqZWN0KSAmJlxuXHRcdGhhc0RhdGFQb2ludFRhcmdldCh0YXJnZXRPYmplY3QpICYmXG5cdFx0KHRhcmdldE9iamVjdC5UYXJnZXQuJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZS4kdGFyZ2V0LnR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiXG5cdCkge1xuXHRcdHJldHVybiBcInNob3J0XCI7XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIHRlbXBsYXRlIGZvciB0aGUgY3JlYXRpb24gcm93LlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdHlwZSBvZiB0aGUgdGFibGVcbiAqIEBwYXJhbSBjcmVhdGlvbk1vZGUgVGhlIGNyZWF0aW9uIG1vZGVcbiAqIEBwYXJhbSBpc1RhYmxlUmVhZE9ubHkgV2hldGhlciB0aGUgdGFibGUgaXMgcmVhZCBvbmx5XG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0XG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBmaWVsZE1vZGUgVGhlIGZpZWxkIG1vZGVcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gcm93LlxuICovXG5mdW5jdGlvbiBnZXRDcmVhdGlvblRlbXBsYXRlKFxuXHR0YWJsZUlkOiBzdHJpbmcsXG5cdGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0Y3JlYXRpb25Nb2RlOiBQcm9wZXJ0aWVzT2Y8VGFibGVDcmVhdGlvbk9wdGlvbnM+IHwgdW5kZWZpbmVkLFxuXHRpc1RhYmxlUmVhZE9ubHk6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGRhdGFGaWVsZDogQ29udGV4dCxcblx0ZmllbGRNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoKGNyZWF0aW9uTW9kZT8ubmFtZSBhcyBzdHJpbmcpID09PSBcIkNyZWF0aW9uUm93XCIpIHtcblx0XHRsZXQgY29sdW1uRWRpdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRzd2l0Y2ggKGlzVGFibGVSZWFkT25seSkge1xuXHRcdFx0Y2FzZSB0cnVlOlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRGlzcGxheVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgZmFsc2U6XG5cdFx0XHRcdGNvbHVtbkVkaXRNb2RlID0gXCJFZGl0YWJsZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbHVtbkVkaXRNb2RlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkLmdldE9iamVjdCgpO1xuXG5cdFx0Y29uc3QgcmVhY3RpdmVBcmVhTW9kZTogXCJJbmxpbmVcIiB8IFwiT3ZlcmxheVwiIHwgdW5kZWZpbmVkID0gdGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gXCJPdmVybGF5XCIgOiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBmb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0ZmllbGRNb2RlOiBmaWVsZE1vZGUsXG5cdFx0XHR0ZXh0TGluZXNFZGl0OiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dExpbmVzRWRpdCxcblx0XHRcdHRleHRNYXhMaW5lczogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lcyxcblx0XHRcdHRleHRNYXhMZW5ndGg6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGVuZ3RoLFxuXHRcdFx0dGV4dE1heENoYXJhY3RlcnNEaXNwbGF5OiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heENoYXJhY3RlcnNEaXNwbGF5LFxuXHRcdFx0dGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXksXG5cdFx0XHR0ZXh0QWxpZ25Nb2RlOiBcIlRhYmxlXCIsXG5cdFx0XHRzZW1hbnRpY0tleVN0eWxlOiB0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBcIk9iamVjdElkZW50aWZpZXJcIiA6IFwiTGFiZWxcIixcblx0XHRcdGhhc0RyYWZ0SW5kaWNhdG9yOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uaGFzRHJhZnRJbmRpY2F0b3IsXG5cdFx0XHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgsXG5cdFx0XHRmaWVsZEdyb3VwTmFtZTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBOYW1lLFxuXHRcdFx0c2hvd0ljb25Vcmw6IGRhdGFGaWVsZE9iamVjdD8uSW5saW5lICYmICEhZGF0YUZpZWxkT2JqZWN0Py5JY29uVXJsLFxuXHRcdFx0aWdub3JlTmF2aWdhdGlvbkF2YWlsYWJsZTogZW5hYmxlQW5hbHl0aWNzID8/IGZhbHNlLFxuXHRcdFx0aXNDdXJyZW5jeU9yVW5pdEFsaWduZWQ6IHRydWUsXG5cdFx0XHRkYXRlVGltZVN0eWxlOiBnZXREZWZhdWx0RGF0ZVRpbWVTdHlsZShkYXRhRmllbGQpLFxuXHRcdFx0cmVhY3RpdmVBcmVhTW9kZTogcmVhY3RpdmVBcmVhTW9kZVxuXHRcdH07XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZpZWxkXG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntUYWJsZVJ1bnRpbWU6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlUnVudGltZSd9XCJcblx0XHRcdFx0dmhJZFByZWZpeD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiVGFibGVWYWx1ZUhlbHBcIl0pfVxuXHRcdFx0XHRlZGl0TW9kZT17Y29sdW1uRWRpdE1vZGV9XG5cdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0bWV0YVBhdGg9e2RhdGFGaWVsZC5nZXRQYXRoKCl9XG5cdFx0XHRcdHdyYXA9e3RhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIn1cblx0XHRcdFx0Y2hhbmdlPXtoYW5kbGVyUHJvdmlkZXIuZmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93fVxuXHRcdFx0XHRzaG93RXJyb3JPYmplY3RTdGF0dXM9e2NvbHVtbi5mb3JtYXRPcHRpb25zPy5zaG93RXJyb3JPYmplY3RTdGF0dXMgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGZvcm1hdE9wdGlvbnM6IDxGaWVsZEZvcm1hdE9wdGlvbnMgey4uLmZvcm1hdE9wdGlvbnN9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0ZpZWxkPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHRlbXBsYXRlIGZvciB0aGUgbWFjcm9zOkZpZWxkIGluc2lkZSB0aGUgY29sdW1uLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uIFRoZSB0YWJsZSBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGRhdGFGaWVsZENvbnRleHQgVGhlIGRhdGEgZmllbGQgY29udGV4dFxuICogQHBhcmFtIGRhdGFGaWVsZE9iamVjdFBhdGggVGhlIGRhdGEgZmllbGQgb2JqZWN0IHBhdGhcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHRcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHR5cGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gaXNUYWJsZVJlYWRPbmx5IFdoZXRoZXIgdGhlIHRhYmxlIGlzIHJlYWQgb25seVxuICogQHBhcmFtIGNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZVxuICogQHBhcmFtIGZpZWxkTW9kZSBUaGUgZmllbGQgbW9kZVxuICogQHBhcmFtIGlzQ29tcGFjdFR5cGUgV2hldGhlciB0aGUgdGFibGUgaXMgY29tcGFjdFxuICogQHBhcmFtIHRleHRBbGlnbiBUaGUgdGV4dCBhbGlnbm1lbnRcbiAqIEBwYXJhbSBhcmlhTGFiZWxsZWRCeSBUaGUgYXJpYSBsYWJlbGxlZCBieVxuICogQHBhcmFtIHNob3dFbXB0eUluZGljYXRvciBXaGV0aGVyIHRvIHNob3cgdGhlIGVtcHR5IGluZGljYXRvclxuICogQHBhcmFtIGNsYXNzTmFtZVxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHBhcmFtIGlzQ29ubmVjdGVkRmllbGQgSW5kaWNhdGVzIGlmIHRoZSBmaWVsZCBpcyBhIGNvbm5lY3RlZCBmaWVsZFxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hY3JvRmllbGRUZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGRhdGFGaWVsZE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4sXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGlzVGFibGVSZWFkT25seTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0Y3JlYXRpb25Nb2RlOiBQcm9wZXJ0aWVzT2Y8VGFibGVDcmVhdGlvbk9wdGlvbnM+IHwgdW5kZWZpbmVkLFxuXHRmaWVsZE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0aXNDb21wYWN0VHlwZTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGV4dEFsaWduOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHNob3dFbXB0eUluZGljYXRvcjogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcixcblx0aXNDb25uZWN0ZWRGaWVsZCA9IGZhbHNlXG4pOiBzdHJpbmcge1xuXHRjb25zdCBkYXRhRmllbGRPYmplY3QgPSBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRsZXQgY29sdW1uRWRpdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c3dpdGNoIChpc1RhYmxlUmVhZE9ubHkpIHtcblx0XHRjYXNlIHRydWU6XG5cdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRGlzcGxheVwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBmYWxzZTpcblx0XHRcdGNvbHVtbkVkaXRNb2RlID0gXCJFZGl0YWJsZVwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbHVtbkVkaXRNb2RlID0gdW5kZWZpbmVkO1xuXHR9XG5cdGlmICh0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4gJiYgY29sdW1uLnR5cGVDb25maWc/LmNsYXNzTmFtZSA9PT0gXCJFZG0uU3RyZWFtXCIpIHtcblx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRGlzcGxheVwiO1xuXHR9XG5cblx0Y29uc3QgcmVhY3RpdmVBcmVhTW9kZTogXCJJbmxpbmVcIiB8IFwiT3ZlcmxheVwiIHwgdW5kZWZpbmVkID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IFwiT3ZlcmxheVwiIDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0ZmllbGRNb2RlOiBmaWVsZE1vZGUsXG5cdFx0dGV4dExpbmVzRWRpdDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXQsXG5cdFx0dGV4dE1heExpbmVzOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heExpbmVzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heExpbmVzLFxuXHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSxcblx0XHR0ZXh0TWF4TGVuZ3RoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aCxcblx0XHR0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5OiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheSxcblx0XHR0ZXh0QWxpZ25Nb2RlOiBcIlRhYmxlXCIsXG5cdFx0c2hvd0VtcHR5SW5kaWNhdG9yOiBzaG93RW1wdHlJbmRpY2F0b3IsXG5cdFx0c2VtYW50aWNLZXlTdHlsZTogdGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gXCJPYmplY3RJZGVudGlmaWVyXCIgOiBcIkxhYmVsXCIsXG5cdFx0aGFzRHJhZnRJbmRpY2F0b3I6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5oYXNEcmFmdEluZGljYXRvcixcblx0XHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgsXG5cdFx0ZmllbGRHcm91cE5hbWU6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwTmFtZSxcblx0XHRzaG93SWNvblVybDogZGF0YUZpZWxkT2JqZWN0Py5JbmxpbmUgJiYgISFkYXRhRmllbGRPYmplY3Q/Lkljb25VcmwsXG5cdFx0aWdub3JlTmF2aWdhdGlvbkF2YWlsYWJsZTogZW5hYmxlQW5hbHl0aWNzID8/IGZhbHNlLFxuXHRcdGlzQW5hbHl0aWNzOiBlbmFibGVBbmFseXRpY3MsXG5cdFx0Zm9ySW5saW5lQ3JlYXRpb25Sb3dzOiBjcmVhdGlvbk1vZGU/Lm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIsXG5cdFx0aXNDdXJyZW5jeU9yVW5pdEFsaWduZWQ6IGlzQ29ubmVjdGVkRmllbGQgPyBmYWxzZSA6IHRydWUsXG5cdFx0Y29tcGFjdFNlbWFudGljS2V5OiBpc0NvbXBhY3RUeXBlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBgJHtpc0NvbXBhY3RUeXBlfWAsXG5cdFx0ZGF0ZVRpbWVTdHlsZTogZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkQ29udGV4dCksXG5cdFx0aXNBbmFseXRpY2FsQWdncmVnYXRlZFJvdzogdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwsXG5cdFx0cmVhY3RpdmVBcmVhTW9kZTogcmVhY3RpdmVBcmVhTW9kZVxuXHR9O1xuXHRsZXQgY3VzdG9tRGF0YTogQ3VzdG9tRGF0YSB8IHVuZGVmaW5lZDtcblxuXHQvLyBJbiBjYXNlIHdlIGRpc3BsYXkgYSBwcm9wZXJ0eSB3aXRoIFRleHRPbmx5IHRleHQgYXJyYWdlbWVudCBpbiBhIG5vbi1hbmFseXRpY2FsIHRhYmxlLCB3ZSBzdGlsbCBsb2FkIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSAodXNpbmcgY3VzdG9tIGRhdGEpXG5cdC8vIHRvIG1ha2Ugc3VyZSBpbnRlbnQtYmFzZWQgbmF2aWdhdGlvbiBjYW4gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgb3JpZ2luYWwgcHJvcGVydHkgYW4gbm90IGp1c3QgaXRzIHRleHQgcmVwcmVzZW50YXRpb24uXG5cdC8vIEZvciBhbmFseXRpY2FsIHRhYmxlcywgdGhpcyBpcyBkb25lIGJ5IGFkZGluZyB0aGUgb3JpZ2luYWwgcHJvcGVydHkgYXMgYSBjb250ZXh0LWRlZmluaW5nIHByb3BlcnR5IGZvciB0aGUgdGV4dCBwcm9wZXJ0eSBpbiB0aGUgdGFibGUgY29udmVydGVyIChnZXRFeHRlbnNpb25JbmZvRnJvbUVudGl0eVR5cGUpXG5cdGlmIChcblx0XHR0YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzICE9PSB0cnVlICYmXG5cdFx0KFxuXHRcdFx0ZGF0YUZpZWxkT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkVHlwZXMgfCB1bmRlZmluZWRcblx0XHQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQ/LnZhbHVlT2YoKSA9PT0gXCJVSS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCJcblx0KSB7XG5cdFx0Y3VzdG9tRGF0YSA9IGNyZWF0ZUN1c3RvbURhdGEoXCJleHRyYVByb3BlcnR5XCIsIGB7JHsoZGF0YUZpZWxkT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlLnBhdGh9fWApO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0PEZpZWxkXG5cdFx0XHR2aElkUHJlZml4PXtnZW5lcmF0ZShbdGFibGVJZCwgXCJUYWJsZVZhbHVlSGVscFwiXSl9XG5cdFx0XHRlZGl0TW9kZT17Y29sdW1uRWRpdE1vZGV9XG5cdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9XG5cdFx0XHR0ZXh0QWxpZ249e2lzQ29ubmVjdGVkRmllbGQgPyBcIkxlZnRcIiA6IHRleHRBbGlnbn1cblx0XHRcdHdyYXA9e3RhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIn1cblx0XHRcdGNsYXNzPXtjbGFzc05hbWV9XG5cdFx0XHRsaXZlQ2hhbmdlPXtoYW5kbGVyUHJvdmlkZXIuZmllbGRMaXZlQ2hhbmdlfVxuXHRcdFx0YXJpYUxhYmVsbGVkQnk9e2FyaWFMYWJlbGxlZEJ5ID8gYXJpYUxhYmVsbGVkQnkuc3BsaXQoXCIgXCIpIDogdW5kZWZpbmVkfVxuXHRcdFx0bmF2aWdhdGVBZnRlckFjdGlvbj17Y29sdW1uLmlzTmF2aWdhYmxlfVxuXHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZz17Y29sdW1uLmRpc2FibGVTdHJpY3RIYW5kbGluZ31cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiA8RmllbGRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPixcblx0XHRcdFx0Y3VzdG9tRGF0YVxuXHRcdFx0fX1cblx0XHQ8L0ZpZWxkPlxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIHRoZSBjb2x1bW4uXG4gKiBAcGFyYW0gdGFibGVJZCBUaGUgdGFibGUgSURcbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gZGF0YUZpZWxkT1AgVGhlIGRhdGEgZmllbGQgb2JqZWN0IHBhdGhcbiAqIEBwYXJhbSBkYXRhRmllbGRDb250ZXh0IFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHRcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXIgVGhlIGhhbmRsZXIgcHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29sdW1uLlxuICovXG5mdW5jdGlvbiBnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUoXG5cdHRhYmxlSWQ6IHN0cmluZyxcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGRhdGFGaWVsZE9QOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IHsgdGVtcGxhdGU6IHN0cmluZzsgY3JlYXRpb25UZW1wbGF0ZT86IHN0cmluZyB9IHtcblx0bGV0IHRlbXBsYXRlOiBzdHJpbmc7XG5cdGxldCBjcmVhdGlvblRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbjtcblx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3M7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBpc1RhYmxlUmVhZE9ubHkgPSB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHk7XG5cdGNvbnN0IGNyZWF0aW9uTW9kZSA9IHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU7XG5cdGNvbnN0IGZpZWxkTW9kZSA9IHRhYmxlUHJvcGVydGllcy5maWVsZE1vZGU7XG5cdGNvbnN0IGlzQ29tcGFjdFR5cGUgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNDb21wYWN0VHlwZTtcblxuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRPUC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcztcblx0aWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0KGlzQW5ub3RhdGlvbk9mVGVybTxDaGFydD4oZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LCBVSUFubm90YXRpb25UZXJtcy5DaGFydCkgfHxcblx0XHRcdGlzQW5ub3RhdGlvbk9mVGVybTxQcmVzZW50YXRpb25WYXJpYW50PihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQpKVxuXHQpIHtcblx0XHRjb25zdCBzaG93T25seUNoYXJ0ID0gKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/ICFjb2x1bW4uc2V0dGluZ3M/LnNob3dNaWNyb0NoYXJ0TGFiZWwgOiB1bmRlZmluZWQpID8/IHRydWU7XG5cdFx0Y29uc3QgbWljcm9DaGFydFNpemUgPSB0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBjb2x1bW4uc2V0dGluZ3M/Lm1pY3JvQ2hhcnRTaXplID8/IFwiWFNcIiA6IFwiWFNcIjtcblx0XHRsZXQgbWljcm9DaGFydENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uXG5cdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbGxlY3Rpb24uZ2V0UGF0aChkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIikpKTtcblx0XHRtaWNyb0NoYXJ0Q29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvbkNvbnRleHQobWljcm9DaGFydENvbGxlY3Rpb24pKTtcblx0XHQvL1dlIG9ubHkgY29uc2lkZXIgdGhlIGZpcnN0IHZpc3VhbGl6YXRpb24gb2YgdGhlIFBWIGluIFBWIGNhc2UgYW5kIGV4cGVjdCBpdCB0byBiZSBhIGNoYXJ0IChzaW1pbGFyIHRvIFZpc3VhbEZpbHRlcnMpXG5cdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHQ8TWljcm9DaGFydFxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIGRhdGFGaWVsZF0pfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17bWljcm9DaGFydENvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpICsgXCIvVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiKVxuXHRcdFx0XHRcdC5nZXRQYXRoKCl9XG5cdFx0XHRcdHNob3dPbmx5Q2hhcnQ9e3Nob3dPbmx5Q2hhcnR9XG5cdFx0XHRcdHNpemU9e21pY3JvQ2hhcnRTaXplID8/IFwiWFNcIn1cblx0XHRcdFx0aGlkZU9uTm9EYXRhPXt0cnVlfVxuXHRcdFx0XHRpc0FuYWx5dGljcz17ZW5hYmxlQW5hbHl0aWNzfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQ+KGRhdGFGaWVsZCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkKSAmJlxuXHRcdGlzTXVsdGlWYWx1ZUZpZWxkKGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFGaWVsZE9QLCBkYXRhRmllbGQuVmFsdWUucGF0aCkpXG5cdCkge1xuXHRcdC8vIHdoZW4gZXZhbHVhdGluZyBcIkAkdWk1LmNvbnRleHQuaXNJbmFjdGl2ZVwiIHdlIGFyZSBmb3JjZWQgdG8gYWRkIGlzVHJ1dGh5IHRvIGZvcmNlIHRoZSBiaW5kaW5nIGV2YWx1YXRpb25cblx0XHRjb25zdCBpc1JlYWRPbmx5ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKGlzVGFibGVSZWFkT25seSA9PT0gdHJ1ZSwgYW5kKGlzVHJ1dGh5KFVJLklzSW5hY3RpdmUpLCBjcmVhdGlvbk1vZGU/Lm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIpKSxcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSksXG5cdFx0XHRcdGlmRWxzZShlcXVhbChmaWVsZE1vZGUsIFwibm93cmFwcGVyXCIpLCBjb25zdGFudCh0cnVlKSwgY29uc3RhbnQodW5kZWZpbmVkKSlcblx0XHRcdClcblx0XHQpO1xuXHRcdGlmIChpc1JlYWRPbmx5ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0ZW1wbGF0ZSA9IChcblx0XHRcdFx0PE11bHRpVmFsdWVGaWVsZEJsb2NrXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX1cblx0XHRcdFx0XHR1c2VQYXJlbnRCaW5kaW5nQ2FjaGU9e3RhYmxlRGVmaW5pdGlvbi5kaXNhYmxlT3duUmVxdWVzdE9uTVZGfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRCbG9ja1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0cmVhZE9ubHk9e2lzUmVhZE9ubHl9XG5cdFx0XHRcdFx0dXNlUGFyZW50QmluZGluZ0NhY2hlPXt0YWJsZURlZmluaXRpb24uZGlzYWJsZU93blJlcXVlc3RPbk1WRn1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0aXNBbm5vdGF0aW9uT2ZUZXJtPEZpZWxkR3JvdXA+KGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCwgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cClcblx0KSB7XG5cdFx0Y29uc3QgZmllbGRHcm91cDogRmllbGRHcm91cCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRjb25zdCBkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dCA9IGRhdGFGaWVsZENvbnRleHRcblx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFcIik7XG5cdFx0Y29uc3QgZmllbGRHcm91cENvbGxlY3Rpb25MZW5ndGggPSBmaWVsZEdyb3VwLkRhdGEubGVuZ3RoIC0gMTtcblxuXHRcdGNvbnN0IGl0ZW1zID0gZmllbGRHcm91cC5EYXRhLm1hcCgoX2ZpZWxkR3JvdXBEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGZpZWxkR3JvdXBEYXRhRmllbGRJZHg6IG51bWJlcikgPT4ge1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQgPSBkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dFxuXHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YUZpZWxkQ29sbGVjdGlvbkNvbnRleHQuZ2V0UGF0aCgpICsgXCIvXCIgKyBmaWVsZEdyb3VwRGF0YUZpZWxkSWR4KTtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBEYXRhRmllbGRPUCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dCk7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwTGFiZWwgPSBGaWVsZEhlbHBlci5jb21wdXRlTGFiZWxUZXh0KGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpLCB7XG5cdFx0XHRcdGNvbnRleHQ6IGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0XG5cdFx0XHR9KTtcblx0XHRcdGlmIChjb2x1bW4uc2hvd0RhdGFGaWVsZHNMYWJlbCAmJiAhIWZpZWxkR3JvdXBMYWJlbCkge1xuXHRcdFx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpITtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8SEJveFxuXHRcdFx0XHRcdFx0dmlzaWJsZT17Z2V0VmlzaWJsZUV4cHJlc3Npb24oZmllbGRHcm91cERhdGFGaWVsZE9QKX1cblx0XHRcdFx0XHRcdGFsaWduSXRlbXM9e0ZpZWxkSGVscGVyLmJ1aWxkRXhwcmVzc2lvbkZvckFsaWduSXRlbXMoXG5cdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVmlzdWFsaXphdGlvbi8kRW51bU1lbWJlclwiKVxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8TGFiZWxcblx0XHRcdFx0XHRcdFx0aWQ9e1RhYmxlSGVscGVyLmdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkKHRhYmxlSWQsIGZpZWxkR3JvdXBEYXRhRmllbGRPUCl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9e3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJIRUFERVJfRk9STV9MQUJFTFwiLCBbZmllbGRHcm91cExhYmVsXSl9XG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwic2FwVWlUaW55TWFyZ2luRW5kXCJcblx0XHRcdFx0XHRcdFx0dmlzaWJsZT17Z2V0VmlzaWJsZUV4cHJlc3Npb24oZmllbGRHcm91cERhdGFGaWVsZE9QKX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8VkJveD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCIxXCIgLz4sXG5cdFx0XHRcdFx0XHRcdFx0aXRlbXM6IGdldE1hY3JvRmllbGRUZW1wbGF0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRPUCxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0XHRlbmFibGVBbmFseXRpY3MsXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvbk1vZGUsXG5cdFx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0NvbXBhY3RUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XCJMZWZ0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRgJHtUYWJsZUhlbHBlci5nZXRDb2x1bW5TdGFibGVJZCh0YWJsZUlkLCBkYXRhRmllbGRPUCl9ICR7VGFibGVIZWxwZXIuZ2V0RmllbGRHcm91cExhYmVsU3RhYmxlSWQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRPUFxuXHRcdFx0XHRcdFx0XHRcdFx0KX1gLFxuXHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFRhYmxlSGVscGVyLmdldE1hcmdpbkNsYXNzKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJcIiksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRJZHggPT09IGZpZWxkR3JvdXBDb2xsZWN0aW9uTGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHRcdFx0dGFibGVJZCxcblx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LFxuXHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRPUCxcblx0XHRcdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0XHRcdGVuYWJsZUFuYWx5dGljcyxcblx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0XHRcdGNyZWF0aW9uTW9kZSxcblx0XHRcdFx0XHRmaWVsZE1vZGUsXG5cdFx0XHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT1ApLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFRhYmxlSGVscGVyLmdldE1hcmdpbkNsYXNzKFxuXHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9WaXN1YWxpemF0aW9uLyRFbnVtTWVtYmVyXCIpLFxuXHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZElkeCA9PT0gZmllbGRHcm91cENvbGxlY3Rpb25MZW5ndGhcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgZHJhZnRJbmRpY2F0b3IgPSBnZXREcmFmdEluZGljYXRvcihjb2xsZWN0aW9uLCBjb2x1bW4pO1xuXHRcdGlmIChkcmFmdEluZGljYXRvcikge1xuXHRcdFx0aXRlbXMucHVzaChkcmFmdEluZGljYXRvcik7XG5cdFx0fVxuXHRcdGNvbnN0IHNpdHVhdGlvbkluZGljYXRvciA9IGdldFNpdHVhdGlvbkluZGljYXRvcihjb2xsZWN0aW9uLCBjb2x1bW4pO1xuXHRcdGlmIChzaXR1YXRpb25JbmRpY2F0b3IpIHtcblx0XHRcdGl0ZW1zLnB1c2goc2l0dWF0aW9uSW5kaWNhdG9yKTtcblx0XHR9XG5cblx0XHR0ZW1wbGF0ZSA9IChcblx0XHRcdDxWQm94XG5cdFx0XHRcdHZpc2libGU9e1RhYmxlSGVscGVyLmdldFZCb3hWaXNpYmlsaXR5KFxuXHRcdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb25Db250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdGNvbHVtbi5jb2xsZWN0aW9uRmllbGRzSGlkZGVuRXhwcmVzc2lvbixcblx0XHRcdFx0XHRkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpXG5cdFx0XHRcdCl9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0aXRlbXM6IGl0ZW1zXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1ZCb3g+XG5cdFx0KTtcblx0fSBlbHNlIGlmIChcblx0XHRpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSAmJlxuXHRcdGlzQW5ub3RhdGlvbk9mVGVybTxDb25uZWN0ZWRGaWVsZHM+KGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCwgVUlBbm5vdGF0aW9uVGVybXMuQ29ubmVjdGVkRmllbGRzKVxuXHQpIHtcblx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHM6IENvbm5lY3RlZEZpZWxkcyA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHNDb250ZXh0ID0gZGF0YUZpZWxkQ29udGV4dFxuXHRcdFx0LmdldE1vZGVsKClcblx0XHRcdC5jcmVhdGVCaW5kaW5nQ29udGV4dChkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKSArIFwiL1RhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YVwiKTtcblx0XHRjb25zdCBmaWVsZHNEZWxpbWl0ZXIgPSBDb21tb25IZWxwZXIuZ2V0RGVsaW1pdGVyKGNvbm5lY3RlZEZpZWxkcy5UZW1wbGF0ZSBhcyBzdHJpbmcpO1xuXHRcdGNvbnN0IGNvbm5lY3RlZEZpZWxkc0RhdGEgPSBnZXRDb25uZWN0ZWRGaWVsZHNEYXRhKGNvbm5lY3RlZEZpZWxkcyk7XG5cdFx0Y29uc3QgaXRlbXMgPSBjb25uZWN0ZWRGaWVsZHNEYXRhLm1hcCgoY29ubmVjdGVkRmllbGRzRWxlbWVudDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgY29ubmVjdGVkRmllbGRzRWxlbWVudElkeDogbnVtYmVyKSA9PiB7XG5cdFx0XHRjb25zdCBjb25uZWN0ZWRGaWVsZHNFbGVtZW50Q29udGV4dCA9IGRhdGFGaWVsZENvbnRleHRcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke2Nvbm5lY3RlZEZpZWxkc0NvbnRleHQuZ2V0UGF0aCgpfS8keyhjb25uZWN0ZWRGaWVsZHNFbGVtZW50IGFzIERhdGFGaWVsZCk/LlZhbHVlPy5wYXRofWApO1xuXHRcdFx0Y29uc3QgY29ubmVjdGVkRmllbGRzRWxlbWVudE9QID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KGNvbm5lY3RlZEZpZWxkc0VsZW1lbnRDb250ZXh0KTtcblx0XHRcdGNvbnN0IGZpZWxkVGVtcGxhdGUgPSBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHRcdHRhYmxlSWQsXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRjb25uZWN0ZWRGaWVsZHNFbGVtZW50Q29udGV4dCxcblx0XHRcdFx0Y29ubmVjdGVkRmllbGRzRWxlbWVudE9QLFxuXHRcdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0XHRlbmFibGVBbmFseXRpY3MsXG5cdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0XHRjcmVhdGlvbk1vZGUsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdFx0XCJMZWZ0XCIsXG5cdFx0XHRcdGAke1RhYmxlSGVscGVyLmdldENvbHVtblN0YWJsZUlkKHRhYmxlSWQsIGRhdGFGaWVsZE9QKX1gLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRoYW5kbGVyUHJvdmlkZXIsXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cblx0XHRcdGlmIChjb25uZWN0ZWRGaWVsZHNFbGVtZW50SWR4IDwgY29ubmVjdGVkRmllbGRzRGF0YS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdGlmICh0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdFx0ZmllbGRUZW1wbGF0ZSxcblx0XHRcdFx0XHRcdC8qVXNlIE9iamVjdFN0YXR1cyBpbiBSZXNwb25zaXZlVGFibGU6IGl0cyBsaW5lIGJveCBtYXRjaGVzIGNlbGwgaGVpZ2h0LFxuICAgICAgICBcdFx0XHRcdHNvIHRoZSBkZWxpbWl0ZXIgaXMgdmVydGljYWxseSBjZW50ZXJlZCBpbiBib3RoIGRpc3BsYXkgJiBlZGl0IG1vZGVzLiovXG5cdFx0XHRcdFx0XHQ8T2JqZWN0U3RhdHVzXG5cdFx0XHRcdFx0XHRcdC8vIE5CU1Agb24gYm90aCBzaWRlcyB0byBrZWVwIHNwYWNpbmdcblx0XHRcdFx0XHRcdFx0dGV4dD17YFxcdTAwQTAke2ZpZWxkc0RlbGltaXRlcn1cXHUwMEEwYH1cblx0XHRcdFx0XHRcdFx0c3RhdGU9XCJOb25lXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHQvLyBQcmV2ZW50IHRoZSBkZWxpbWl0ZXIgZnJvbSBiZWluZyBzcXVlZXplZCB0byB6ZXJvIHdpZHRoIG9uIHRpZ2h0IGxheW91dHMuXG5cdFx0XHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPEZsZXhJdGVtRGF0YSBzaHJpbmtGYWN0b3I9ezB9IC8+XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L09iamVjdFN0YXR1cz5cblx0XHRcdFx0XHRdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR3JpZC9UcmVlIHRhYmxlczogVGV4dCB3b3JrcyBmaW5lIGhlcmUgKGtlZXBzIGJhc2VsaW5lIGJlaGF2aW9yIGluIGRpc3BsYXksIGNlbnRlcnMgaW4gZWRpdCkuXG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0ZmllbGRUZW1wbGF0ZSxcblx0XHRcdFx0XHQ8VGV4dFxuXHRcdFx0XHRcdFx0Ly8gTkJTUCBvbiBib3RoIHNpZGVzIHRvIGtlZXAgc3BhY2luZ1xuXHRcdFx0XHRcdFx0dGV4dD17YFxcdTAwQTAke2ZpZWxkc0RlbGltaXRlcn1cXHUwMEEwYH1cblx0XHRcdFx0XHRcdC8vc2luZ2xlIGxpbmVcblx0XHRcdFx0XHRcdHdyYXBwaW5nPVwiZmFsc2VcIlxuXHRcdFx0XHRcdFx0Ly8gYWN0dWFsbHkgcmVuZGVyIHRoZSBOQlNQc1xuXHRcdFx0XHRcdFx0cmVuZGVyV2hpdGVzcGFjZT1cInRydWVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdC8vIEF2b2lkIHNxdWVlemUtdG8tZG90IGVmZmVjdCB3aGVuIHNwYWNlIGlzIHRpZ2h0LlxuXHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8RmxleEl0ZW1EYXRhIHNocmlua0ZhY3Rvcj17MH0gLz5cblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PC9UZXh0PlxuXHRcdFx0XHRdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIFtmaWVsZFRlbXBsYXRlXTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8qIElubmVyIGNvbnRhaW5lciBhbGlnbm1lbnQ6XG4gICAgICAgICAgIFx0XHQtIFJlc3BvbnNpdmVUYWJsZTogYWx3YXlzIGNlbnRlciAoYmV0dGVyIHZpc3VhbCBjb25zaXN0ZW5jeSlcbiAgICAgICAgICAgXHRcdC0gR3JpZC9UcmVlOiBiYXNlbGluZSBpbiBkaXNwbGF5LCBjZW50ZXIgaW4gZWRpdCAobWl4IG9mIFRleHQvSW5wdXQgaGVpZ2h0cykqL1xuXHRcdGNvbnN0IGlubmVySEJveCA9IChcblx0XHRcdDxIQm94XG5cdFx0XHRcdHdyYXA9XCJOb1dyYXBcIlxuXHRcdFx0XHRhbGlnbkl0ZW1zPXtcblx0XHRcdFx0XHR0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJcblx0XHRcdFx0XHRcdD8gXCJDZW50ZXJcIlxuXHRcdFx0XHRcdFx0OiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoVUkuSXNFZGl0YWJsZSwgY29uc3RhbnQoXCJDZW50ZXJcIiksIGNvbnN0YW50KFwiQmFzZWxpbmVcIikpKVxuXHRcdFx0XHR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0aXRlbXM6IGl0ZW1zXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0hCb3g+XG5cdFx0KTtcblxuXHRcdC8vIE91dGVyIHdyYXBwZXI6IHJlbmRlciBhIHJlYWwgYm94LCB0YWtlIHRoZSByb3cgaGVpZ2h0LCBhbmQgY2VudGVyIHZlcnRpY2FsbHkuXG5cdFx0Ly8gVGhpcyBndWFyYW50ZWVzIHZlcnRpY2FsIGNlbnRlcmluZyBvZiB0aGUgd2hvbGUgY29ubmVjdGVkLWZpZWxkcyBibG9jayB3aXRoaW4gdGhlIGNlbGwuXG5cdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHQ8SEJveFxuXHRcdFx0XHR3cmFwPVwiTm9XcmFwXCJcblx0XHRcdFx0cmVuZGVyVHlwZT1cIkRpdlwiXG5cdFx0XHRcdGZpdENvbnRhaW5lcj17dHJ1ZX1cblx0XHRcdFx0YWxpZ25JdGVtcz1cIkNlbnRlclwiXG5cdFx0XHRcdHZpc2libGU9e2NvbHVtbi5jb2xsZWN0aW9uRmllbGRzSGlkZGVuRXhwcmVzc2lvbn1cblx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e2NvbHVtbi5ob3Jpem9udGFsQWxpZ259XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0aXRlbXM6IFtpbm5lckhCb3hdXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0hCb3g+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHR0ZW1wbGF0ZSA9IGdldE1hY3JvRmllbGRUZW1wbGF0ZShcblx0XHRcdHRhYmxlSWQsXG5cdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRjb2x1bW4sXG5cdFx0XHRkYXRhRmllbGRDb250ZXh0LFxuXHRcdFx0ZGF0YUZpZWxkT1AsXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0ZmllbGRNb2RlLFxuXHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGZhbHNlLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0KTtcblx0XHRjcmVhdGlvblRlbXBsYXRlID0gZ2V0Q3JlYXRpb25UZW1wbGF0ZShcblx0XHRcdHRhYmxlSWQsXG5cdFx0XHRjb2x1bW4sXG5cdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRjcmVhdGlvbk1vZGUsXG5cdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0ZGF0YUZpZWxkQ29udGV4dCxcblx0XHRcdGZpZWxkTW9kZSxcblx0XHRcdGVuYWJsZUFuYWx5dGljcyxcblx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4geyB0ZW1wbGF0ZSwgY3JlYXRpb25UZW1wbGF0ZSB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgY29sdW1uLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHVzZWQgZm9yIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5UZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRsZXQgZGF0YUZpZWxkQ29udGV4dCA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChjb2x1bW4uYW5ub3RhdGlvblBhdGgpO1xuXHRpZiAoIWRhdGFGaWVsZENvbnRleHQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGRhdGFGaWVsZENvbnRleHQgPSBjb2xsZWN0aW9uLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoRmllbGRIZWxwZXIuZ2V0RGF0YUZpZWxkRGVmYXVsdChkYXRhRmllbGRDb250ZXh0KSk7XG5cdGNvbnN0IGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihkYXRhRmllbGRDb250ZXh0LCBjb2xsZWN0aW9uKTtcblx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkQ29udGV4dD8uZ2V0T2JqZWN0Py4oKSA/PyB7fTtcblxuXHRjb25zdCB0ZW1wbGF0ZXMgPSBnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUoXG5cdFx0dGFibGVJZCxcblx0XHR0YWJsZVByb3BlcnRpZXMsXG5cdFx0Y29sdW1uLFxuXHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRkYXRhRmllbGRDb250ZXh0LFxuXHRcdGNvbGxlY3Rpb24sXG5cdFx0aGFuZGxlclByb3ZpZGVyXG5cdCk7XG5cblx0Y29uc3QgZW5hYmxlQXV0b0NvbHVtbldpZHRoID0gdGFibGVQcm9wZXJ0aWVzLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoO1xuXHRjb25zdCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjtcblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGNvbnN0IGlzQ29ubmVjdGVkRmllbGQgPSBkYXRhRmllbGRPYmplY3QuVGFyZ2V0Py4kQW5ub3RhdGlvblBhdGg/LmluY2x1ZGVzKFVJQW5ub3RhdGlvblRlcm1zLkNvbm5lY3RlZEZpZWxkcyk7XG5cblx0cmV0dXJuIChcblx0XHQ8Q29sdW1uXG5cdFx0XHRpZD17VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoKX1cblx0XHRcdHdpZHRoPXtcblx0XHRcdFx0IUNvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKSB8fCBjb2x1bW4ud2lkdGhcblx0XHRcdFx0XHQ/IFRhYmxlSGVscGVyLmdldENvbHVtbldpZHRoKFxuXHRcdFx0XHRcdFx0XHR7IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCwgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIsIHRhYmxlVHlwZSB9LFxuXHRcdFx0XHRcdFx0XHRjb2x1bW4sXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdCxcblx0XHRcdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0VGV4dE9uQWN0aW9uRmllbGQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbnRleHQ6IGRhdGFGaWVsZENvbnRleHQgfSksXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1RpdGxlXCIpIHx8IFwiXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRtaW5XaWR0aD17XG5cdFx0XHRcdENvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKVxuXHRcdFx0XHRcdD8gVGFibGVIZWxwZXIuZ2V0Q29sdW1uV2lkdGgoXG5cdFx0XHRcdFx0XHRcdHsgZW5hYmxlQXV0b0NvbHVtbldpZHRoLCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciwgdGFibGVUeXBlIH0sXG5cdFx0XHRcdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRUZXh0T25BY3Rpb25GaWVsZChkYXRhRmllbGRPYmplY3QsIHsgY29udGV4dDogZGF0YUZpZWxkQ29udGV4dCB9KSxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0Rlc2NyaXB0aW9uXCIpIHx8IFwiXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRoZWFkZXI9e2NvbHVtbi5sYWJlbCB8fCBjb2x1bW4ubmFtZX1cblx0XHRcdHByb3BlcnR5S2V5PXtjb2x1bW4ubmFtZX1cblx0XHRcdGhBbGlnbj17Y29sdW1uLmhvcml6b250YWxBbGlnbiB8fCBGaWVsZEhlbHBlci5nZXRDb2x1bW5BbGlnbm1lbnQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbGxlY3Rpb246IGNvbGxlY3Rpb24gfSl9XG5cdFx0XHRoZWFkZXJWaXNpYmxlPXtcblx0XHRcdFx0aXNDb25uZWN0ZWRGaWVsZFxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogVGFibGVIZWxwZXIuc2V0SGVhZGVyTGFiZWxWaXNpYmlsaXR5KGRhdGFGaWVsZE9iamVjdCwgZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFcIikpXG5cdFx0XHR9XG5cdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdHJlcXVpcmVkPXt0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkgPyB1bmRlZmluZWQgOiBjb2x1bW4ucmVxdWlyZWR9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogY3JlYXRlQ3VzdG9tRGF0YShcInNob3dEYXRhRmllbGRzTGFiZWxcIiwgY29sdW1uLnNob3dEYXRhRmllbGRzTGFiZWwpLFxuXHRcdFx0XHRleHRlbmRlZFNldHRpbmdzOiA8UmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGltcG9ydGFuY2U9e2NvbHVtbi5pbXBvcnRhbmNlfSAvPixcblx0XHRcdFx0dGVtcGxhdGU6IHRlbXBsYXRlcy50ZW1wbGF0ZSxcblx0XHRcdFx0Y3JlYXRpb25UZW1wbGF0ZTogdGVtcGxhdGVzLmNyZWF0aW9uVGVtcGxhdGVcblx0XHRcdH19XG5cdFx0PC9Db2x1bW4+XG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYWxsIHRoZSBjb2x1bW5zIGluIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHQgdXNlZCBmb3IgY29udGV4dCBwYXRoXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyIFRoZSBoYW5kbGVyIHByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbHVtbnMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbHVtbnModGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcywgY29sbGVjdGlvbjogQ29udGV4dCwgaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZUlkID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZDtcblx0cmV0dXJuIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29sdW1uc1xuXHRcdC5tYXAoKGNvbHVtbikgPT4ge1xuXHRcdFx0aWYgKGNvbHVtbi5hdmFpbGFiaWxpdHkgPT09IFwiRGVmYXVsdFwiICYmIGNvbHVtbi50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCIpIHtcblx0XHRcdFx0cmV0dXJuIGdldENvbHVtblRlbXBsYXRlKHRhYmxlSWQsIHRhYmxlUHJvcGVydGllcywgY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbiwgY29sbGVjdGlvbiwgaGFuZGxlclByb3ZpZGVyKTtcblx0XHRcdH0gZWxzZSBpZiAoY29sdW1uLmF2YWlsYWJpbGl0eSA9PT0gXCJEZWZhdWx0XCIgJiYgY29sdW1uLnR5cGUgPT09IFwiU2xvdFwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRTbG90Q29sdW1uKHRhYmxlSWQsIGNvbHVtbiBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJDb21wdXRlZFwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihcblx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdGNvbHVtbiBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3Ncblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9KVxuXHRcdC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uICE9PSB1bmRlZmluZWQpIGFzIENvbHVtbltdO1xufVxuXG5leHBvcnQgdHlwZSBUYWJsZUJsb2NrUHJvcGVydGllcyA9IE9taXQ8U3RyaWN0UHJvcGVydGllc09mPFRhYmxlQVBJPiwgXCJtZXRhUGF0aFwiIHwgXCJjb250ZXh0UGF0aFwiPiAmIHtcblx0Z2V0VHJhbnNsYXRlZFRleHQodGV4dDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogdW5rbm93bltdLCBtZXRhUGF0aD86IHN0cmluZyk6IHN0cmluZztcblx0W1wiZmw6ZmxleGliaWxpdHlcIl0/OiBzdHJpbmc7XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBkZXNpZ250aW1lIGZvciB0aGUgTURDIHRhYmxlLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGR0OmRlc2lnbnRpbWVcbiAqL1xuZnVuY3Rpb24gZ2V0RGVzaWdudGltZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2Rlc2lnbnRpbWUvVGFibGUuZGVzaWdudGltZVwiO1xufVxuXG4vKipcbiAqIE1hcHMgdGhlIGludGVybmFsIFAxM24gdGFibGUgbW9kZSAoc3RyaW5nKSB0byB0aGUgY29ycmVzcG9uZGluZyBNREMgZW51bS5cbiAqIEBwYXJhbSBzdHJpbmdNb2RlXG4gKiBAcmV0dXJucyBUaGUgTURDIGVudW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gZ2V0TURDUDEzbk1vZGUoc3RyaW5nTW9kZTogc3RyaW5nKTogVGFibGVQMTNuTW9kZSB7XG5cdHN3aXRjaCAoc3RyaW5nTW9kZSkge1xuXHRcdGNhc2UgXCJBZ2dyZWdhdGVcIjpcblx0XHRcdHJldHVybiBUYWJsZVAxM25Nb2RlLkFnZ3JlZ2F0ZTtcblx0XHRjYXNlIFwiU29ydFwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuU29ydDtcblx0XHRjYXNlIFwiQ29sdW1uXCI6XG5cdFx0XHRyZXR1cm4gVGFibGVQMTNuTW9kZS5Db2x1bW47XG5cdFx0Y2FzZSBcIkZpbHRlclwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuRmlsdGVyO1xuXHRcdGNhc2UgXCJHcm91cFwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuR3JvdXA7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdExvZy5lcnJvcihcIlVua25vd24gUDEzbiBtb2RlOiBcIiArIHN0cmluZ01vZGUpO1xuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuQ29sdW1uO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNRENUYWJsZVRlbXBsYXRlKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsIHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMpOiBNRENUYWJsZSB7XG5cdC8vIEZvciBhIFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnQgZGlzcGxheWluZyBhIGRyYWZ0LWVuYWJsZWQgZW50aXR5LCB3ZSBvbmx5IGRpc3BsYXkgYWN0aXZlIGluc3RhbmNlc1xuXHRjb25zdCBuYXZpZ2F0aW9uSW5mbyA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbj8ucm93Py5uYXZpZ2F0aW9uSW5mbyBhcyB7XG5cdFx0cm91dGVQYXRoPzogc3RyaW5nO1xuXHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0fTtcblx0Y29uc3QgdGFyZ2V0ID0gbmF2aWdhdGlvbkluZm8/LnJvdXRlUGF0aDtcblx0bGV0IG5hdmlnYXRpb25JbkVkaXRNb2RlID0gZmFsc2U7XG5cdGlmICh0YXJnZXQpIHtcblx0XHRjb25zdCB0YXJnZXRJbmZvcm1hdGlvbiA9IHBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuX2dldFRhcmdldEluZm9ybWF0aW9uKHRhcmdldCk7XG5cdFx0bmF2aWdhdGlvbkluRWRpdE1vZGUgPSAodGFyZ2V0SW5mb3JtYXRpb24/Lm9wdGlvbnM/LnNldHRpbmdzPy5vcGVuSW5FZGl0TW9kZSBhcyBib29sZWFuIHwgdW5kZWZpbmVkKSA/PyBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBjb250ZXh0T2JqZWN0UGF0aCA9IHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aDtcblx0Y29uc3QgZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9XG5cdFx0KHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkgJiZcblx0XHRjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0ICYmXG5cdFx0TW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoY29udGV4dE9iamVjdFBhdGgpO1xuXHRjb25zdCBkZWxlZ2F0ZSA9IFRhYmxlSGVscGVyLmdldERlbGVnYXRlKFxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24sXG5cdFx0dGFibGVQcm9wZXJ0aWVzLmlzQWxwID09PSB0cnVlLFxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5lbnRpdHlOYW1lLFxuXHRcdGZpbHRlck9uQWN0aXZlRW50aXRpZXNcblx0KTtcblx0Y29uc3QgaGVhZGVyVmlzaWJsZSA9IHRhYmxlUHJvcGVydGllcy5oZWFkZXJWaXNpYmxlID8/IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5oZWFkZXJWaXNpYmxlO1xuXHRjb25zdCBjdXJyZW50SGVhZGVyID0gdGFibGVQcm9wZXJ0aWVzLmhlYWRlciA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24udGl0bGU7XG5cdGNvbnN0IGhlYWRlckJpbmRpbmdFeHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uRm9ySGVhZGVyVmlzaWJsZShjdXJyZW50SGVhZGVyID8/IFwiXCIsIHRhYmxlUHJvcGVydGllcy50YWJUaXRsZSA/PyBcIlwiLCAhIWhlYWRlclZpc2libGUpO1xuXHRjb25zdCBwYXN0ZUFjdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlKTtcblx0Y29uc3QgY29sbGVjdGlvbkVudGl0eSA9IHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pLnRhcmdldCBhc1xuXHRcdHwgRW50aXR5U2V0XG5cdFx0fCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdGNvbnN0IG1vZGVsQ29udGV4dENoYW5nZSA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnRhYmxlQ29udGV4dENoYW5nZSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgbGluZUl0ZW0gPSBUYWJsZUhlbHBlci5nZXRVaUxpbmVJdGVtT2JqZWN0KHBhcmFtZXRlcnMubWV0YVBhdGgsIHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEpIGFzXG5cdFx0fCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25bXVxuXHRcdHwgdW5kZWZpbmVkO1xuXHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5uYXZpZ2F0aW9uUGF0aDtcblx0aWYgKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uLnN0YXJ0c1dpdGgoXCIvXCIpICYmIGlzU2luZ2xldG9uKGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0KSkge1xuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uID0gbmF2aWdhdGlvblBhdGg7XG5cdH1cblxuXHRjb25zdCBjb2xsZWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uKSE7XG5cdGNvbnN0IGRyYWZ0ID0gKGNvbGxlY3Rpb25FbnRpdHkgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdDtcblx0Ly8gQWRkIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBkZXNpZ250aW1lIGZpbGUgaWYgZGVzaWdudGltZSBpcyBlbmFibGVkIGZyb20gY29yZSBvciBsb2NhbGx5IHZpYSB1cmwgcGFyYW1ldGVyc1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRhYmxlUHJvcGVydGllcy52YXJpYW50TWFuYWdlbWVudCA/PyBcIk5vbmVcIjtcblx0Y29uc3QgZGVzaWdudGltZSA9IGdldERlc2lnbnRpbWUoKTtcblx0bGV0IHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlUHJvcGVydGllcy5vdmVycmlkZVJvd1ByZXNzKSB7XG5cdFx0cm93QWN0aW9uVHlwZSA9IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uO1xuXHR9XG5cdHJvd0FjdGlvblR5cGUgPz89XG5cdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8uYWN0aW9uVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIgPyBUYWJsZVJvd0FjdGlvblR5cGUuTmF2aWdhdGlvbiA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBzaG93Q3JlYXRlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKT8udmlzaWJsZSB8fCB0cnVlO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgYnV0dG9uIGlzIGhpZGRlbiB3aGVuIG5vIGRhdGEgaGFzIGJlZW4gZW50ZXJlZCB5ZXQgaW4gdGhlIHJvdyAodHJ1ZS9mYWxzZSkuIFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgYGZhbHNlYC5cblx0ICovXG5cdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi51cGRhdGFibGVQcm9wZXJ0eVBhdGg7XG5cblx0bGV0IGN1cnJlbnRQZXJzb25hbGl6YXRpb246IFRhYmxlUDEzbk1vZGVbXSB8IHVuZGVmaW5lZDtcblx0c3dpdGNoICh0YWJsZVByb3BlcnRpZXMucGVyc29uYWxpemF0aW9uKSB7XG5cdFx0Y2FzZSBcImZhbHNlXCI6XG5cdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRydWVcIjpcblx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSBbVGFibGVQMTNuTW9kZS5Tb3J0LCBUYWJsZVAxM25Nb2RlLkNvbHVtbiwgVGFibGVQMTNuTW9kZS5GaWx0ZXJdO1xuXHRcdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gWy4uLmN1cnJlbnRQZXJzb25hbGl6YXRpb24sIFRhYmxlUDEzbk1vZGUuR3JvdXBdO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSB1bmRlZmluZWQ6XG5cdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnAxM25Nb2RlPy5tYXAoKG1vZGUpID0+IGdldE1EQ1AxM25Nb2RlKG1vZGUpKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBJbiBjYXNlIGdyb3VwaW5nIG1vZGUgaXMgZGVmaW5lZCBleHBsaWNpdGVseSBvbiB0aGUgcGVyc29uYWxpemF0aW9uLCB3ZSBvbmx5IGVuYWJsZSBpdCBmb3IgdGhlIGFuYWx5dGljYWwgYW5kIHJlc3BvbnNpdmUgdGFibGUuXG5cdFx0XHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiIHx8IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzID09PSB0cnVlKSB7XG5cdFx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSB0YWJsZVByb3BlcnRpZXMucGVyc29uYWxpemF0aW9uLnNwbGl0KFwiLFwiKS5tYXAoKG1vZGUpID0+IGdldE1EQ1AxM25Nb2RlKG1vZGUudHJpbSgpKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBleGNsdWRlR3JvdXBGcm9tUDEzbiA9IHRhYmxlUHJvcGVydGllcy5wZXJzb25hbGl6YXRpb25cblx0XHRcdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdFx0LmZpbHRlcigobW9kZSkgPT4gZ2V0TURDUDEzbk1vZGUobW9kZS50cmltKCkpICE9PSBUYWJsZVAxM25Nb2RlLkdyb3VwKSBhcyBUYWJsZVAxM25Nb2RlW107XG5cdFx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSBleGNsdWRlR3JvdXBGcm9tUDEzbi5sZW5ndGggPyBleGNsdWRlR3JvdXBGcm9tUDEzbiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0fVxuXG5cdGNvbnN0IG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zID0gQWN0aW9uSGVscGVyLmdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zKGxpbmVJdGVtKTtcblxuXHRjb25zdCBjdXN0b21EYXRhID0gW1xuXHRcdHsga2V5OiBcImtpbmRcIiwgdmFsdWU6IGNvbGxlY3Rpb25FbnRpdHkuX3R5cGUgfSxcblx0XHR7IGtleTogXCJuYXZpZ2F0aW9uUGF0aFwiLCB2YWx1ZTogbmF2aWdhdGlvblBhdGggfSxcblx0XHR7IGtleTogXCJlbmFibGVBbmFseXRpY3NcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzIH0sXG5cdFx0eyBrZXk6IFwiY3JlYXRpb25Nb2RlXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lIH0sXG5cdFx0eyBrZXk6IFwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudFwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlubGluZUNyZWF0aW9uUm93Q291bnQgfSxcblx0XHR7IGtleTogXCJzaG93Q3JlYXRlXCIsIHZhbHVlOiBzaG93Q3JlYXRlIH0sXG5cdFx0eyBrZXk6IFwiY3JlYXRlQXRFbmRcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kIH0sXG5cdFx0eyBrZXk6IFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy5yZWFkT25seSB9LFxuXHRcdHsga2V5OiBcInRhYmxlVHlwZVwiLCB2YWx1ZTogdGFibGVUeXBlIH0sXG5cdFx0eyBrZXk6IFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSB9LFxuXHRcdHsga2V5OiBcImVudGl0eVR5cGVcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSArIFwiL1wiIH0sXG5cdFx0eyBrZXk6IFwibWV0YVBhdGhcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSB9LFxuXHRcdHsga2V5OiBcImhpZGRlbkZpbHRlcnNcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5maWx0ZXJzPy5oaWRkZW5GaWx0ZXJzIH0sXG5cdFx0eyBrZXk6IFwicmVxdWVzdEdyb3VwSWRcIiwgdmFsdWU6IFwiJGF1dG8uV29ya2Vyc1wiIH0sXG5cdFx0eyBrZXk6IFwic2VnbWVudGVkQnV0dG9uSWRcIiwgdmFsdWU6IGdlbmVyYXRlKFt0YWJsZVByb3BlcnRpZXMuY29udGVudElkLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pIH0sXG5cdFx0eyBrZXk6IFwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZFwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQgfSxcblx0XHR7IGtleTogXCJkcmFmdFwiLCB2YWx1ZTogZHJhZnQgfSxcblx0XHR7IGtleTogXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIsIHZhbHVlOiBUYWJsZUhlbHBlci5nZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtKSB9LFxuXHRcdHtcblx0XHRcdGtleTogXCJhY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZFwiLFxuXHRcdFx0dmFsdWU6IG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zLmxlbmd0aCA+IDAgPyBtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucy5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZFxuXHRcdH0sXG5cdFx0eyBrZXk6IFwidXBkYXRhYmxlUHJvcGVydHlQYXRoXCIsIHZhbHVlOiB1cGRhdGFibGVQcm9wZXJ0eVBhdGggfHwgXCJcIiB9LFxuXHRcdHsga2V5OiBcImV4cG9ydFJlcXVlc3RTaXplXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0UmVxdWVzdFNpemUgfVxuXHRdO1xuXHRsZXQgcm93UHJlc3NIYW5kbGVyO1xuXHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0cm93UHJlc3NIYW5kbGVyID0gcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIucm93UHJlc3MgPyBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5ub29wIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0PE1EQ1RhYmxlXG5cdFx0XHRjb3JlOnJlcXVpcmU9e2dldENvcmVSZXF1aXJlKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24pfVxuXHRcdFx0Zmw6ZmxleGliaWxpdHk9e3RhYmxlUHJvcGVydGllc1tcImZsOmZsZXhpYmlsaXR5XCJdfVxuXHRcdFx0c29ydENvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5zb3J0Q29uZGl0aW9uc31cblx0XHRcdGdyb3VwQ29uZGl0aW9ucz17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9uc31cblx0XHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5hZ2dyZWdhdGVDb25kaXRpb25zfVxuXHRcdFx0ZHQ6ZGVzaWdudGltZT17ZGVzaWdudGltZX1cblx0XHRcdGlkPXt0YWJsZVByb3BlcnRpZXMuY29udGVudElkfVxuXHRcdFx0YnVzeUluZGljYXRvckRlbGF5PXswfVxuXHRcdFx0ZW5hYmxlRXhwb3J0PXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlRXhwb3J0fVxuXHRcdFx0ZGVsZWdhdGU9e0pTT04ucGFyc2UoZGVsZWdhdGUpfVxuXHRcdFx0cm93UHJlc3M9e3Jvd1ByZXNzSGFuZGxlcn1cblx0XHRcdGJlZm9yZU9wZW5Db250ZXh0TWVudT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuYmVmb3JlT3BlbkNvbnRleHRNZW51fVxuXHRcdFx0YXV0b0JpbmRPbkluaXQ9e3RhYmxlUHJvcGVydGllcy51c2VCYXNpY1NlYXJjaCB8fCAhdGFibGVQcm9wZXJ0aWVzLmZpbHRlckJhcn1cblx0XHRcdHNlbGVjdGlvbk1vZGU9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5zZWxlY3Rpb25Nb2RlIHx8IFwiTm9uZVwifVxuXHRcdFx0c2VsZWN0aW9uQ2hhbmdlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5zZWxlY3Rpb25DaGFuZ2V9XG5cdFx0XHRzaG93Um93Q291bnQ9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5zaG93Um93Q291bnR9XG5cdFx0XHRoZWFkZXI9e2N1cnJlbnRIZWFkZXJ9XG5cdFx0XHRoZWFkZXJWaXNpYmxlPXtoZWFkZXJCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdGhlYWRlckxldmVsPXt0YWJsZVByb3BlcnRpZXMuaGVhZGVyTGV2ZWx9XG5cdFx0XHRoZWFkZXJTdHlsZT17dGFibGVQcm9wZXJ0aWVzLmhlYWRlclN0eWxlfVxuXHRcdFx0dGhyZXNob2xkPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudGhyZXNob2xkID8/IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi50aHJlc2hvbGR9XG5cdFx0XHRwMTNuTW9kZT17Y3VycmVudFBlcnNvbmFsaXphdGlvbn1cblx0XHRcdHBhc3RlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRQYXN0ZUhhbmRsZXIoZmFsc2UpfVxuXHRcdFx0YmVmb3JlRXhwb3J0PXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5iZWZvcmVFeHBvcnR9XG5cdFx0XHRjbGFzcz17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0ID09PSB0cnVlID8gXCJzYXBVaVNpemVDb25kZW5zZWRcIiA6IHVuZGVmaW5lZH1cblx0XHRcdG11bHRpU2VsZWN0TW9kZT17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm11bHRpU2VsZWN0TW9kZX1cblx0XHRcdHNob3dQYXN0ZUJ1dHRvbj17dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gZmFsc2UgOiBwYXN0ZUFjdGlvbj8udmlzaWJsZX1cblx0XHRcdGVuYWJsZVBhc3RlPXt0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyBmYWxzZSA6IHBhc3RlQWN0aW9uPy5lbmFibGVkfVxuXHRcdFx0bW9kZWxDb250ZXh0Q2hhbmdlPXttb2RlbENvbnRleHRDaGFuZ2V9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogY3JlYXRlQ3VzdG9tRGF0YXMoY3VzdG9tRGF0YSksXG5cdFx0XHRcdGRhdGFTdGF0ZUluZGljYXRvcjogZ2V0RGF0YVN0YXRlSW5kaWNhdG9yKHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKSxcblx0XHRcdFx0dHlwZTogZ2V0VGFibGVUeXBlKFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5zZWxlY3Rpb25MaW1pdFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkZXBlbmRlbnRzOiBnZXREZXBlbmRlbnRzKHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycywgdmFyaWFudE1hbmFnZW1lbnQsIGNvbGxlY3Rpb25Db250ZXh0KSxcblx0XHRcdFx0YWN0aW9uczogZ2V0QWN0aW9ucyh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSxcblx0XHRcdFx0cm93U2V0dGluZ3M6IGdldFJvd1NldHRpbmdzKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24sIHJvd0FjdGlvblR5cGUsIHRhYmxlVHlwZSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHRjb250ZXh0TWVudTogZ2V0Q29udGV4dE1lbnUoXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudGl0eSxcblx0XHRcdFx0XHRyb3dBY3Rpb25UeXBlLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGNvbHVtbnM6IGdldENvbHVtbnModGFibGVQcm9wZXJ0aWVzLCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHRkcmFnRHJvcENvbmZpZzogZ2V0RHJhZ0FuZERyb3BDb25maWcodGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdGNyZWF0aW9uUm93OiBnZXRDcmVhdGlvblJvdyh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKSxcblx0XHRcdFx0dmFyaWFudDogZ2V0VmFyaWFudE1hbmFnZW1lbnQoXG5cdFx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCxcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuaGVhZGVyTGV2ZWwsXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KSxcblx0XHRcdFx0cXVpY2tGaWx0ZXI6IGdldFF1aWNrRmlsdGVyKHRhYmxlUHJvcGVydGllcyksXG5cdFx0XHRcdGNvcHlQcm92aWRlcjogZ2V0Q29weVByb3ZpZGVyKHRhYmxlUHJvcGVydGllcyksXG5cdFx0XHRcdGNlbGxTZWxlY3RvcjogZ2V0Q2VsbFNlbGVjdG9yKHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpXG5cdFx0XHR9fVxuXHRcdDwvTURDVGFibGU+XG5cdCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBK0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQSxZQUFZQSxDQUNwQkMsZUFBbUMsRUFDbkNDLFdBQW9CLEVBQ3BCQyxTQUFvQixFQUNwQkMsY0FBc0IsRUFDZ0M7SUFDdEQsTUFBTUMsVUFBVSxHQUFHSCxXQUFXLENBQUNJLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLFFBQVFILFNBQVM7TUFDaEIsS0FBSyxXQUFXO1FBQ2YsT0FDQ0ksSUFBQSxDQUFDQyxhQUFhO1VBQ2JDLFlBQVksRUFBRVIsZUFBZSxDQUFDUyxPQUFPLENBQUNELFlBQWE7VUFDbkRFLFFBQVEsRUFBRVYsZUFBZSxDQUFDUyxPQUFPLENBQUNDLFFBQVM7VUFDM0NQLGNBQWMsRUFBRUEsY0FBZTtVQUMvQlEsZ0JBQWdCLEVBQUVYLGVBQWUsQ0FBQ1MsT0FBTyxDQUFDRyxpQkFBa0I7VUFDNURDLGVBQWUsRUFBRWIsZUFBZSxDQUFDUyxPQUFPLENBQUNJLGVBQWdCO1VBQ3pEQyxrQkFBa0IsRUFBRWQsZUFBZSxDQUFDUyxPQUFPLENBQUNLO1FBQW1CLENBQy9ELENBQUM7TUFHSixLQUFLLFdBQVc7UUFDZixPQUNDUixJQUFBLENBQUNTLGFBQWE7VUFDYlAsWUFBWSxFQUFFUixlQUFlLENBQUNTLE9BQU8sQ0FBQ0QsWUFBYTtVQUNuREUsUUFBUSxFQUFFVixlQUFlLENBQUNTLE9BQU8sQ0FBQ0MsUUFBUztVQUMzQ0MsZ0JBQWdCLEVBQUVYLGVBQWUsQ0FBQ1MsT0FBTyxDQUFDRyxpQkFBa0I7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
|