@sapui5/sap.fe.macros 1.142.0 → 1.142.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/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/FilterBar.js +1 -1
- package/src/sap/fe/macros/controls/FilterBar.ts +8 -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 +7 -2
- 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/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/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 +4 -3
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +5 -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 +27 -10
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +31 -4
- 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 +49 -28
- package/src/sap/fe/macros/table/TableAPI.ts +58 -32
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -4
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +6 -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/TableHierarchy.js +6 -6
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +5 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +7 -4
|
@@ -138,7 +138,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
138
138
|
width: "100%",
|
|
139
139
|
multipleLines: parameter.annotations.UI?.MultiLineText?.valueOf() === true,
|
|
140
140
|
required: compileExpression(isActionParameterRequiredExpression(parameter, this.action, convertTypes(this.metaModel))),
|
|
141
|
-
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined,
|
|
141
|
+
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name, "FieldValueHelp"]) : undefined,
|
|
142
142
|
change: async e => this.handleFieldChange(e, parameter),
|
|
143
143
|
visible: compileExpression(not(equal(getExpressionFromAnnotation(parameter.annotations?.UI?.Hidden), true))),
|
|
144
144
|
ariaLabelledBy: [generate(["APD_", parameter.name, "Label"])],
|
|
@@ -215,9 +215,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
215
215
|
display = await FieldHelper.getAPDialogDisplayFormat(parameterContext.getObject(), {
|
|
216
216
|
context: parameterContext
|
|
217
217
|
});
|
|
218
|
-
bindingValue = await this.getAPDialogBindingValue(parameter, parameterContext
|
|
219
|
-
context: parameterContext
|
|
220
|
-
});
|
|
218
|
+
bindingValue = await this.getAPDialogBindingValue(parameter, parameterContext);
|
|
221
219
|
if (hasValueHelp(parameter)) {
|
|
222
220
|
additionalValue = await this.getAdditionalValue({
|
|
223
221
|
context: parameterContext
|
|
@@ -244,7 +242,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
244
242
|
multipleLines: isMultiLineText(parameter),
|
|
245
243
|
required: compileExpression(isActionParameterRequiredExpression(parameter, this.action, convertTypes(this.metaModel))),
|
|
246
244
|
change: async e => this.handleFieldChange(e, parameter),
|
|
247
|
-
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name]) : undefined,
|
|
245
|
+
valueHelp: hasValueHelp(parameter) ? generate([this.actionName, parameter.name, "FieldValueHelp"]) : undefined,
|
|
248
246
|
dependents: this.createParameterDialogValueHelp(parameter, parameterContext),
|
|
249
247
|
visible: compileExpression(ifElse(parameter.name === "ResultIsActiveEntity", false, not(equal(getExpressionFromAnnotation(parameter.annotations?.UI?.Hidden), true)))),
|
|
250
248
|
ariaLabelledBy: [generate(["APD_", parameter.name, "Label"])],
|
|
@@ -263,7 +261,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
263
261
|
return undefined;
|
|
264
262
|
}
|
|
265
263
|
return _jsx(ValueHelp, {
|
|
266
|
-
id: generate([this.actionName, parameter.name]),
|
|
264
|
+
id: generate([this.actionName, parameter.name, "FieldValueHelp"]),
|
|
267
265
|
delegate: {
|
|
268
266
|
name: "sap/fe/macros/valuehelp/ValueHelpDelegate",
|
|
269
267
|
payload: {
|
|
@@ -651,7 +649,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
651
649
|
// File Uploader
|
|
652
650
|
value = actionParameterInfos.value;
|
|
653
651
|
} else {
|
|
654
|
-
|
|
652
|
+
// Regular field (non-collection, non-file)
|
|
653
|
+
//
|
|
654
|
+
// IMPORTANT: We prefer actionParameterInfos.value which represents the actual user input
|
|
655
|
+
// from the dialog field, validated and processed by handleFieldChange() over parameterContext.getProperty()
|
|
656
|
+
// because the parameterContext can contain more than just the action parameter itself.
|
|
657
|
+
// In ticket CS20250010966844 parameterContext.getProperty() returned the wrong value due
|
|
658
|
+
// to a name clash between the parameter and its text annotation target.
|
|
659
|
+
// Edge Case: If the user never interacted with the field (value is undefined),
|
|
660
|
+
// fall back to parameterContext which contains the default value set by
|
|
661
|
+
// setOperationDefaultValues() via setParameter() calls.
|
|
662
|
+
value = actionParameterInfos.value ?? parameterContext?.getProperty(parameter.name);
|
|
655
663
|
}
|
|
656
664
|
return {
|
|
657
665
|
[parameter.name]: value
|
|
@@ -1070,17 +1078,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
1070
1078
|
* @param oInterface The parameter
|
|
1071
1079
|
* @returns The binding for the value of the action parameter.
|
|
1072
1080
|
*/;
|
|
1073
|
-
_proto.getAPDialogBindingValue = async function getAPDialogBindingValue(parameter, parameterContext
|
|
1074
|
-
const
|
|
1075
|
-
const
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
if (oActionParameterAnnotations["@Org.OData.Measures.V1.ISOCurrency"] || oActionParameterAnnotations["@Org.OData.Measures.V1.Unit"]) {
|
|
1079
|
-
const actionMetaPath = this.action.isBound ? `${this.metaModel.getMetaPath(this.parameters.contexts[0].getPath())}/${convertTypes(this.metaModel).namespace}.${this.action.name}` : `/${this.action.name}`;
|
|
1080
|
-
const metaContext = this.metaModel.createBindingContext(`${actionMetaPath}/${parameter.name}`);
|
|
1081
|
-
propertyObjectPath = getInvolvedDataModelObjects(metaContext);
|
|
1081
|
+
_proto.getAPDialogBindingValue = async function getAPDialogBindingValue(parameter, parameterContext) {
|
|
1082
|
+
const actionMetaPath = this.action.isBound ? `${this.metaModel.getMetaPath(this.parameters.contexts[0].getPath())}/${convertTypes(this.metaModel).namespace}.${this.action.name}` : `/${this.action.name}`;
|
|
1083
|
+
const metaContext = this.metaModel.createBindingContext(`${actionMetaPath}/${parameter.name}`);
|
|
1084
|
+
try {
|
|
1085
|
+
const propertyObjectPath = getInvolvedDataModelObjects(metaContext);
|
|
1082
1086
|
return getValueBinding(propertyObjectPath, {});
|
|
1083
|
-
}
|
|
1087
|
+
} catch (error) {
|
|
1088
|
+
// Fallback to old approach until we can reach unbound actions
|
|
1084
1089
|
return AnnotationHelper.format(parameterContext.getObject(), {
|
|
1085
1090
|
context: parameterContext
|
|
1086
1091
|
});
|
|
@@ -1091,4 +1096,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Action
|
|
|
1091
1096
|
_exports = ActionParameterDialog;
|
|
1092
1097
|
return _exports;
|
|
1093
1098
|
}, false);
|
|
1094
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyVmFsdWVzIiwiZW50aXR5U2V0TmFtZSIsIm1lc3NhZ2VIYW5kbGVyIiwiaXNEaWFsb2dPcGVuIiwiYnV0dG9uTG9jayIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJhY3Rpb25OYW1lIiwiYWN0aW9uSGVscGVyIiwiZ2V0QWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicmVzb3VyY2VNb2RlbCIsInZpZXciLCJnZXRSZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwicGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlIiwicGFyYW1ldGVyc1ZhbHVlc1JlamVjdCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0UGFyYW1ldGVyRWRpdE1vZGUiLCJwYXJhbWV0ZXIiLCJhbm5vdGF0aW9ucyIsImZpZWxkQ29udHJvbCIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsIkNvcmUiLCJJbW11dGFibGUiLCJ2YWx1ZU9mIiwiY29tcHV0ZWQiLCJDb21wdXRlZCIsImNvbnN0YW50IiwiRmllbGRFZGl0TW9kZSIsIlJlYWRPbmx5IiwiaWZFbHNlIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsIkRpc2FibGVkIiwiRWRpdGFibGUiLCJjcmVhdGVGb3JtRWxlbWVudCIsImFjdGlvbk1ldGFQYXRoIiwiaXNCb3VuZCIsImdldE1ldGFQYXRoIiwiY29udGV4dHMiLCJnZXRQYXRoIiwiY29udmVydFR5cGVzIiwibmFtZXNwYWNlIiwibmFtZSIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJmaWVsZCIsImxhYmVsIiwiTGFiZWwiLCJnZXRUZXh0IiwidG9TdHJpbmciLCJzdHJlYW1QYXJhbWV0ZXIiLCJpc0NvbGxlY3Rpb24iLCJjcmVhdGVNdWx0aUZpZWxkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJnZXRTdHJlYW1Qcm9wZXJ0eSIsImNyZWF0ZUZpbGVVcGxvYWRlciIsImNyZWF0ZUZpZWxkIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjaGlsZHJlbiIsIl9qc3giLCJpZCIsImdlbmVyYXRlIiwidGV4dCIsInBhcmFtZXRlckNvbnRleHQiLCJkaXNwbGF5IiwiRmllbGRIZWxwZXIiLCJnZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQiLCJnZXRPYmplY3QiLCJjb250ZXh0IiwiZXJyIiwiTG9nIiwid2FybmluZyIsInBsYWNlSG9sZGVyIiwiVUkiLCJQbGFjZWhvbGRlciIsInBsYWNlSG9sZGVyRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwicGFyYW1ldGVyVHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJNdWx0aVZhbHVlRmllbGQiLCJwbGFjZWhvbGRlciIsIml0ZW1zIiwicGF0aCIsImRlbGVnYXRlIiwiZWRpdE1vZGUiLCJ3aWR0aCIsIm11bHRpcGxlTGluZXMiLCJNdWx0aUxpbmVUZXh0IiwicmVxdWlyZWQiLCJpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiIsInZhbHVlSGVscCIsImhhc1ZhbHVlSGVscCIsImNoYW5nZSIsImUiLCJoYW5kbGVGaWVsZENoYW5nZSIsInZpc2libGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsImFyaWFMYWJlbGxlZEJ5IiwiZGVwZW5kZW50cyIsImNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscCIsIk11bHRpVmFsdWVGaWVsZEl0ZW0iLCJkZXNjcmlwdGlvbiIsImZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiYWNjZXB0ZWRUeXBlcyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImpvaW4iLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZXZlbnQiLCJmaWxlVXBsb2FkZXIiLCJnZXRTb3VyY2UiLCJnaXZlblR5cGUiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNaW1lVHlwZSIsInNob3dUeXBlTWlzbWF0Y2hEaWFsb2ciLCJmaWxlTWF4aW11bVNpemUiLCJjYWxjdWxhdGVNQmZyb21CeXRlIiwibWF4TGVuZ3RoIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJzaG93RmlsZVNpemVFeGNlZWREaWFsb2ciLCJnZXRNYXhpbXVtRmlsZVNpemUiLCJ0b0ZpeGVkIiwib25VcGxvYWRDb21wbGV0ZSIsImRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkIiwiRmlsZVVwbG9hZGVyIiwiYnV0dG9uT25seSIsImljb25Pbmx5IiwibXVsdGlwbGUiLCJ0b29sdGlwIiwiaWNvbiIsInN0eWxlIiwic2VuZFhIUiIsInVzZU11bHRpcGFydCIsInNhbWVGaWxlbmFtZUFsbG93ZWQiLCJ1cGxvYWRPbkNoYW5nZSIsIm1pbWVUeXBlIiwidHlwZU1pc3NtYXRjaCIsIm1heGltdW1GaWxlU2l6ZSIsImZpbGVTaXplRXhjZWVkIiwiaHR0cFJlcXVlc3RNZXRob2QiLCJGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCIsIlB1dCIsInVwbG9hZENvbXBsZXRlIiwiaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlIiwiYWRkaXRpb25hbFZhbHVlIiwiYmluZGluZ1ZhbHVlIiwiZ2V0QVBEaWFsb2dCaW5kaW5nVmFsdWUiLCJnZXRBZGRpdGlvbmFsVmFsdWUiLCJGaWVsZCIsInBheWxvYWQiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwidmFsdWUiLCJpc011bHRpTGluZVRleHQiLCJWYWx1ZUhlbHAiLCJwcm9wZXJ0eVBhdGgiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicXVhbGlmaWVycyIsInZhbHVlSGVscFF1YWxpZmllciIsInZhbGlkYXRlSW5wdXQiLCJyZXF1aXJlc1ZhbGlkYXRpb24iLCJ0eXBlYWhlYWQiLCJQb3BvdmVyIiwiTVRhYmxlIiwiY2FzZVNlbnNpdGl2ZSIsInVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyIsImVudGl0eUNvbnRhaW5lciIsIkNhcGFiaWxpdGllcyIsIkZpbHRlckZ1bmN0aW9ucyIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwidXNlQXNWYWx1ZUhlbHAiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJkaWFsb2ciLCJjcmVhdGVGaWVsZFZIRGlhbG9nIiwiVkhEaWFsb2ciLCJmaWVsZFByb21pc2UiLCJwYXJhbWV0ZXJJbmZvIiwiZmluZCIsImFjdGlvblBhcmFtZXRlckluZm8iLCJ2YWxpZGF0aW9uUHJvbWlzZSIsInJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyIiwicGFyYW1ldGVyc1ZhbHVlcyIsImhhc0Vycm9yIiwiZXJyb3IiLCJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlIiwiZmlsZXMiLCJnZXRCYXNlNjRGaWxlIiwiZ2V0TWltZVR5cGVQYXRoIiwiZ2V0RmlsZU5hbWVQYXRoIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJNZWRpYVR5cGUiLCJ0eXBlUmVmZXJlbmNlIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsInJlc3VsdCIsInNwbGl0IiwicmVhZEFzRGF0YVVSTCIsIml0ZW0iLCJtZXNzYWdlcyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJjb250cm9sSWQiLCJyZWxldmFudE1lc3NhZ2VzIiwiZmlsdGVyIiwibXNnIiwiZ2V0Q29udHJvbElkcyIsInNvbWUiLCJpbmNsdWRlcyIsInJlbW92ZU1lc3NhZ2VzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnRzIiwiZ2V0RGlhbG9nIiwiY3JlYXRlRGlhbG9nIiwiZGlhbG9nQ29udGVudHMiLCJkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzIiwiYWN0aW9uUGFyYW1ldGVycyIsInNsaWNlIiwiT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzIiwiYWN0aW9uUGFyYW1ldGVyR3JvdXBzIiwiZm9yRWFjaCIsImZhY2V0IiwiZmFjZXRUaXRsZSIsIiRUeXBlIiwiaGFzRmllbGRHcm91cFRhcmdldCIsImZpZWxkR3JvdXAiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnMiLCJEYXRhIiwiZ3JvdXAiLCJwdXNoIiwiVmFsdWUiLCJkYXRhIiwiZ2V0R3JvdXBGb3JtIiwiYWxsIiwiYmluZCIsImZvcm1EYXRhIiwicGFyYW1ldGVyR3JvdXAiLCJvcEZhY2V0cyIsImRpYWxvZ0NvbnRlbnQiLCJUaXRsZSIsImVsZW1lbnQiLCJvcEZhY2V0IiwicmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvIiwibWVzc2FnZVN0cmlwIiwiZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCIsImVuZEJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwib25DYW5jZWwiLCJEaWFsb2ciLCJ0aXRsZSIsImdldFRpdGxlVGV4dCIsImVzY2FwZUhhbmRsZXIiLCJkcmFnZ2FibGUiLCJyZXNpemFibGUiLCJhZnRlckNsb3NlIiwiYmVmb3JlT3BlbiIsImFmdGVyT3BlbiIsImluaXRpYWxGb2N1cyIsImJlZ2luQnV0dG9uIiwiaXNDcmVhdGVBY3Rpb24iLCJnZXRCZWdpbkJ1dHRvbkxhYmVsIiwib25BcHBseSIsImNvbnRlbnQiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsIlNpbXBsZUZvcm0iLCJjb2x1bW5zTSIsImVkaXRhYmxlIiwibGFiZWxTcGFuTCIsImxhYmVsU3Bhbk0iLCJiaW5kaW5nIiwiYWN0aW9uTGFiZWwiLCJrZXkiLCJkZWZhdWx0S2V5IiwiZ2V0T3ZlcnJpZGRlblRleHQiLCJib3VuZEFjdGlvbk5hbWUiLCJwb3AiLCJzdWZmaXhSZXNvdXJjZUtleSIsImNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImdldE9iamVjdEJpbmRpbmciLCJnZXRQYXJhbWV0ZXJDb250ZXh0IiwiQnVzeUxvY2tlciIsImxvY2siLCJ2YWxpZGF0ZVByb3BlcnRpZXMiLCJ1bmxvY2siLCJuZXdWYWx1ZXNEaWN0aW9uYXJ5IiwiT2JqZWN0IiwiYXNzaWduIiwidmFsdWVzIiwiZ2V0TW9kZWwiLCJnZXRQcm9wZXJ0eSIsInBhcmFtVmFsdWUiLCJLZXkiLCJpc05ld1ZhbHVlIiwic2V0UHJvcGVydHkiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInJlc2V0U3RhdGUiLCJ1bmxvY2tEaWFsb2ciLCJ1cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yIiwibGVuZ3RoIiwid2FybmluZ0NvbnRleHQiLCJpbmZvQ29udGV4dCIsImVycm9uZW91c0N0eCIsImdldE1lc3NhZ2VzIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiV2FybmluZyIsIkluZm9ybWF0aW9uIiwiRXJyb3IiLCJjb250ZXh0VG9Vc2UiLCJzZXRCaW5kaW5nQ29udGV4dCIsImlzTG9ja2VkIiwiRkVMaWJyYXJ5IiwiQ29uc3RhbnRzIiwiQ2FuY2VsQWN0aW9uRGlhbG9nIiwiY2xvc2VEaWFsb2ciLCJldmVudHMiLCJvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZCIsImkiLCJjbG9zZSIsIm9wZW5EaWFsb2ciLCJDb21tb25VdGlscyIsInNldFVzZXJEZWZhdWx0cyIsInNldE1vZGVscyIsImFkZERlcGVuZGVudCIsInNldE9wZXJhdGlvbkRlZmF1bHRWYWx1ZXMiLCJvcGVuIiwic2V0TW9kZWwiLCJiaW5kRWxlbWVudCIsIl9ldmVudCIsIndhaXRGb3JQYXJhbWV0ZXJzVmFsdWVzIiwiaXNPcGVuIiwiZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYmluZGluZ1BhcmFtZXRlciIsIm9wZXJhdGlvbkJpbmRpbmciLCJwYXJhbWV0ZXJNb2RlbERhdGEiLCJwYXJhbU5hbWUiLCJkZWZhdWx0VmFsdWUiLCJQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInBhdGhGb3JDb250ZXh0IiwicmVwbGFjZSIsInJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSIsInJlcXVlc3RQcm9wZXJ0eSIsIm5vUG9zc2libGVWYWx1ZSIsImxhdGVQcm9wZXJ0eUVycm9yIiwiZ2V0TWFuaWZlc3RGdW5jdGlvblZhbHVlcyIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJsb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZCIsImdldFByZURlZmluZWRWYWx1ZXMiLCJib3VuZEZ1bmN0aW9uTmFtZSIsIkRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInJlcXVlc3RDb250ZXh0T2JqZWN0IiwiZnVuY3Rpb25QYXJhbXMiLCJib3VuZEZ1bmN0aW9uIiwiT3BlcmF0aW9uIiwiZ2V0T3BlcmF0aW9uRnJvbU5hbWUiLCJPRGF0YU9wZXJhdGlvbiIsImVuaGFuY2Ukc2VsZWN0IiwiZ3JvdXBJZCIsImV4ZWN1dGUiLCJpc0Z1bGZpbGxlZCIsImJvdW5kQ29udGV4dCIsInJlcXVlc3RPYmplY3QiLCJjb250ZXh0VmFsdWVzIiwicHJvbWlzZXMiLCJkZWZhdWx0VmFsdWVzIiwiZnVuY3Rpb25WYWx1ZXMiLCJtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzIiwiZmlyc3RWaXNpYmxlUGFyYW1ldGVyIiwiZ2V0VmlzaWJsZSIsImZpcnN0RmllbGQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJvblBhcmFtZXRlckRpYWxvZ09wZW5lZCIsImlzTXVsdGlWYWx1ZSIsInNldFBhcmFtZXRlciIsInBhcmFtZXRlck5hbWUiLCJwYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwiaGFzT3duUHJvcGVydHkiLCJzZXRPZkZ1bmN0aW9uVmFsdWVzIiwiU2V0IiwiaW5kZXgiLCJzaXplIiwibmV4dCIsInJlZnJlc2giLCJNZXNzYWdlQm94IiwiYWN0aW9ucyIsIkFjdGlvbiIsIk9LIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJleHRlbnNpb25BUEkiLCJnZXRDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiY29udGVudFdpZHRoIiwiZnVuY3Rpb25Db250ZXh0IiwiZ2V0QmluZGluZyIsImlzQSIsImRlc3Ryb3kiLCJvSW50ZXJmYWNlIiwidGV4dENvbnRleHQiLCJjb250ZXh0UGF0aCIsImxvY2FsRGF0YVByb3BlcnR5IiwiJE5hbWUiLCJ2YWx1ZUxpc3RCeVF1YWxpZmllciIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwidmFsdWVMaXN0UGFyYW1ldGVyIiwiUGFyYW1ldGVycyIsIkxvY2FsRGF0YVByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidGV4dFByb3BlcnR5IiwiQ29sbGVjdGlvblBhdGgiLCJwcm9wQW5ub3RhdGlvbnMiLCJ0ZXh0UHJvcCIsInRleHRQYXRoIiwiJFBhdGgiLCJBbm5vdGF0aW9uSGVscGVyIiwiZm9ybWF0Iiwib01vZGVsIiwic0NvbnRleHRQYXRoIiwib0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zIiwicHJvcGVydHlPYmplY3RQYXRoIiwiZ2V0VmFsdWVCaW5kaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPcGVyYXRpb25QYXJhbWV0ZXJEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tcGxleFR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFjdGlvbiwgdHlwZSBBY3Rpb25QYXJhbWV0ZXIgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgUHJvcGVydHlBbm5vdGF0aW9uc19Db3JlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db3JlX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIEZpZWxkR3JvdXBUeXBlLCBSZWZlcmVuY2VGYWNldCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXJJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE9EYXRhT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09EYXRhT3BlcmF0aW9uXCI7XG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09wZXJhdGlvblwiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9ucy9hY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNGaWVsZEdyb3VwVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNGdWxmaWxsZWQsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiwgaXNEaXNhYmxlZEV4cHJlc3Npb24sIGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAsIGlzTXVsdGlMaW5lVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyByZXF1aXJlc1ZhbGlkYXRpb24sIHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUhlbHBUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgRGlhbG9nJEJlZm9yZU9wZW5FdmVudCB9IGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC91aS9jb3JlL1RpdGxlXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFNpbXBsZUZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9TaW1wbGVGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvZmllbGQvTXVsdGlWYWx1ZUZpZWxkSXRlbVwiO1xuaW1wb3J0IFZIRGlhbG9nIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9EaWFsb2dcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9Qb3BvdmVyXCI7XG5pbXBvcnQgTVRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2RcIjtcbmltcG9ydCB7IGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkLCBzaG93RmlsZVNpemVFeGNlZWREaWFsb2csIHNob3dUeXBlTWlzbWF0Y2hEaWFsb2cgfSBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9VcGxvYWRcIjtcblxuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VmFsdWVCaW5kaW5nIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG50eXBlIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IHsgcGFyYW1OYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyBsYXRlUHJvcGVydHlFcnJvcj86IGJvb2xlYW47IG5vUG9zc2libGVWYWx1ZT86IGJvb2xlYW4gfTtcblxudHlwZSBFbGVtZW50R3JvdXAgPSB7IGZhY2V0VGl0bGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQ7IGRhdGE6IEFjdGlvblBhcmFtZXRlcltdIH07XG50eXBlIEVsZW1lbnRHcm91cENvbnZlcnRlZCA9IHsgZmFjZXRUaXRsZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPiB8IHVuZGVmaW5lZDsgZGF0YTogRGlhbG9nQ29udGVudFR5cGVzW10gfTtcblxudHlwZSBGb3JtRWxlbWVudFR5cGUgPSBbTGFiZWwsIEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkXTtcblxudHlwZSBEaWFsb2dDb250ZW50VHlwZXMgPSB7XG5cdGZvcm1FbGVtZW50czogRm9ybUVsZW1lbnRUeXBlO1xuXHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcjtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY3Rpb25QYXJhbWV0ZXJEaWFsb2cge1xuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+PjtcblxuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlITogKHJlc29sdmVWYWx1ZTogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT4pID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBwYXJhbWV0ZXJzVmFsdWVzUmVqZWN0ITogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkO1xuXG5cdC8vIHRoZSBkaWFsb2cgaXMgY29uc2lkZXJlZCBhcyBjbG9zZWQgYWZ0ZXIgdGhlIGFmdGVyQ2xvc2UgZXZlbnQgaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdC8vIHRoaXMgaXMgYXN5bmNocm9ub3VzLCBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGRpYWxvZyBzdGF0ZSBzaW5jZSB0aGUgbWVzc2FnZSBoYW5kbGluZyBpcyBzeW5jaHJvbm91c1xuXHQvLyBhbmQgd2UgbmVlZCB0byBrbm93IGlmIHRoZSBkaWFsb2cgaXMgb3BlbiBvciBjbG9zZWRcblx0cHJpdmF0ZSBpc0RpYWxvZ09wZW4gPSBmYWxzZTtcblxuXHRwcml2YXRlIGRpYWxvZzogRGlhbG9nIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nO1xuXG5cdHByaXZhdGUgYnV0dG9uTG9jayA9IGZhbHNlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvblBhcmFtZXRlckluZm9zOiAoQWN0aW9uUGFyYW1ldGVySW5mbyAmIHsgcGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIgfSlbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyTW9kZWw6IEpTT05Nb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdCRkaXNwbGF5TW9kZToge31cblx0fSk7XG5cblx0cHJpdmF0ZSByZWFkb25seSByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uOiBBY3Rpb24sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJzOiB7XG5cdFx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0XHRcdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0cGFyYW1ldGVyc1ZhbHVlczogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHRpc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0dmlldz86IEZFVmlldztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25QYXJhbWV0ZXJEaWFsb2dPcGVuZWQ/OiAoKSA9PiB2b2lkO1xuXHRcdFx0XHRvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZD86ICgpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCB1bmRlZmluZWQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBlbnRpdHlTZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcblx0KSB7XG5cdFx0dGhpcy5hY3Rpb25OYW1lID0gYWN0aW9uSGVscGVyLmdldEFjdGlvbk5hbWUodGhpcy5hY3Rpb24pO1xuXHRcdHRoaXMubWV0YU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMucmVzb3VyY2VNb2RlbCA9IHRoaXMucGFyYW1ldGVycy52aWV3ID8gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMudmlldykgOiBnZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdCA9IHJlamVjdDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgZWRpdCBtb2RlIHByb3BlcnR5IGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24uXG5cdCAqL1xuXHRwcml2YXRlIGdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPEZpZWxkRWRpdE1vZGU+IHtcblx0XHRjb25zdCBhbm5vdGF0aW9ucyA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucyxcblx0XHRcdGZpZWxkQ29udHJvbCA9IGFubm90YXRpb25zLkNvbW1vbj8uRmllbGRDb250cm9sLFxuXHRcdFx0aW1tdXRhYmxlID0gKGFubm90YXRpb25zLkNvcmUgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUpPy5JbW11dGFibGU/LnZhbHVlT2YoKSxcblx0XHRcdGNvbXB1dGVkID0gKGFubm90YXRpb25zLkNvcmUgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUpPy5Db21wdXRlZD8udmFsdWVPZigpO1xuXG5cdFx0aWYgKGltbXV0YWJsZSB8fCBjb21wdXRlZCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuUmVhZE9ubHkpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRDb250cm9sKSB7XG5cdFx0XHRyZXR1cm4gaWZFbHNlKFxuXHRcdFx0XHRpc1JlYWRPbmx5RXhwcmVzc2lvbihwYXJhbWV0ZXIpLFxuXHRcdFx0XHRGaWVsZEVkaXRNb2RlLlJlYWRPbmx5LFxuXHRcdFx0XHRpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ocGFyYW1ldGVyKSwgRmllbGRFZGl0TW9kZS5EaXNhYmxlZCwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZSlcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjb25zdGFudChGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmb3JtIGVsZW1lbnQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybSBlbGVtZW50IGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUZvcm1FbGVtZW50KHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTxGb3JtRWxlbWVudFR5cGU+IHtcblx0XHRjb25zdCBhY3Rpb25NZXRhUGF0aCA9IHRoaXMuYWN0aW9uLmlzQm91bmRcblx0XHRcdD8gYCR7dGhpcy5tZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldFBhdGgoKSl9LyR7Y29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKS5uYW1lc3BhY2V9LiR7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24ubmFtZVxuXHRcdFx0ICB9YFxuXHRcdFx0OiBgLyR7dGhpcy5hY3Rpb24ubmFtZX1gO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7YWN0aW9uTWV0YVBhdGh9LyR7cGFyYW1ldGVyLm5hbWV9YCkhO1xuXHRcdGxldCBmaWVsZDtcblx0XHRsZXQgbGFiZWwgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbFxuXHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uLkxhYmVsLnRvU3RyaW5nKCkpXG5cdFx0XHQ6IHBhcmFtZXRlci5uYW1lO1xuXHRcdGxldCBzdHJlYW1QYXJhbWV0ZXI7XG5cdFx0aWYgKHBhcmFtZXRlci5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdGZpZWxkID0gYXdhaXQgdGhpcy5jcmVhdGVNdWx0aUZpZWxkKHBhcmFtZXRlciwgbWV0YUNvbnRleHQpO1xuXHRcdH0gZWxzZSBpZiAoIXBhcmFtZXRlci50eXBlLnN0YXJ0c1dpdGgoXCJFZG0uXCIpICYmIHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0c3RyZWFtUGFyYW1ldGVyID0gdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpO1xuXHRcdFx0Ly8gY2FsY3VsYXRlIGxhYmVsIGZyb20gdGhlIHN0cmVhbSBwcm9wZXJ0eSB3aXRoaW4gdGhlIENvbXBsZXhUeXBlXG5cdFx0XHRsYWJlbCA9IHN0cmVhbVBhcmFtZXRlcj8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbFxuXHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KHN0cmVhbVBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24uTGFiZWwudG9TdHJpbmcoKSlcblx0XHRcdFx0OiAoc3RyZWFtUGFyYW1ldGVyPy5uYW1lIGFzIHN0cmluZyk7XG5cdFx0XHRmaWVsZCA9IHRoaXMuY3JlYXRlRmlsZVVwbG9hZGVyKHBhcmFtZXRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpZWxkID0gYXdhaXQgdGhpcy5jcmVhdGVGaWVsZChwYXJhbWV0ZXIsIG1ldGFDb250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdDxMYWJlbCBpZD17Z2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZSwgc3RyZWFtUGFyYW1ldGVyPy5uYW1lLCBcIkxhYmVsXCJdKX0gdGV4dD17bGFiZWx9IC8+XG5cdFx0XHRcdHtmaWVsZH1cblx0XHRcdDwvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgbXVsdGkgZmllbGQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIG11bHRpIHZhbHVlIGZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZU11bHRpRmllbGQocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPE11bHRpVmFsdWVGaWVsZD4ge1xuXHRcdGxldCBkaXNwbGF5ID0gXCJWYWx1ZVwiO1xuXHRcdHRyeSB7XG5cdFx0XHRkaXNwbGF5ID0gYXdhaXQgRmllbGRIZWxwZXIuZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0KHBhcmFtZXRlckNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KTtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdExvZy53YXJuaW5nKGBQYXJhbWV0ZXIgZGlhbG9nIG11bHRpZmllbGQ6IGRpc3BsYXkgZm9ybWF0IGNvdWxkbid0IGJlIGNhbGN1bGF0ZWQgZm9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nOiAke2Vycn1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXIgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBsYWNlaG9sZGVyIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBsYWNlSG9sZGVyRXhwcmVzc2lvbiA9IHBsYWNlSG9sZGVyID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBsYWNlSG9sZGVyKSkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVyVHlwZSA9IEVETV9UWVBFX01BUFBJTkc/LltwYXJhbWV0ZXIudHlwZV0/LnR5cGU7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNdWx0aVZhbHVlRmllbGRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKX1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyRXhwcmVzc2lvbn1cblx0XHRcdFx0aXRlbXM9e3sgcGF0aDogYG12ZnZpZXc+LyR7cGFyYW1ldGVyLm5hbWV9YCB9fVxuXHRcdFx0XHRkZWxlZ2F0ZT17eyBuYW1lOiBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL011bHRpVmFsdWVQYXJhbWV0ZXJEZWxlZ2F0ZVwiIH19XG5cdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdGVkaXRNb2RlPXt0aGlzLmdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcil9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdG11bHRpcGxlTGluZXM9e3BhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlfVxuXHRcdFx0XHRyZXF1aXJlZD17Y29tcGlsZUV4cHJlc3Npb24oaXNBY3Rpb25QYXJhbWV0ZXJSZXF1aXJlZEV4cHJlc3Npb24ocGFyYW1ldGVyLCB0aGlzLmFjdGlvbiwgY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKSkpfVxuXHRcdFx0XHR2YWx1ZUhlbHA9e2hhc1ZhbHVlSGVscChwYXJhbWV0ZXIpID8gZ2VuZXJhdGUoW3RoaXMuYWN0aW9uTmFtZSwgcGFyYW1ldGVyLm5hbWVdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0Y2hhbmdlPXthc3luYyAoZSk6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5oYW5kbGVGaWVsZENoYW5nZShlLCBwYXJhbWV0ZXIpfVxuXHRcdFx0XHR2aXNpYmxlPXtjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBhcmFtZXRlci5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSl9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZSwgXCJMYWJlbFwiXSldfVxuXHRcdFx0XHRkZXBlbmRlbnRzPXt0aGlzLmNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscChwYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQpfVxuXHRcdFx0PlxuXHRcdFx0XHQ8TXVsdGlWYWx1ZUZpZWxkSXRlbSBrZXk9e2B7cGF0aDogJ212ZnZpZXc+S2V5JywgdHlwZTonJHtwYXJhbWV0ZXJUeXBlfSd9YH0gZGVzY3JpcHRpb249XCJ7bXZmdmlldz5EZXNjfVwiIC8+XG5cdFx0XHQ8L011bHRpVmFsdWVGaWVsZD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIEZpbGVVcGxvYWRlciBjb250cm9sIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBGaWxlVXBsb2FkZXIgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlRmlsZVVwbG9hZGVyKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogRmlsZVVwbG9hZGVyIHtcblx0XHRsZXQgZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzO1xuXHRcdGlmICh0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/LkFjY2VwdGFibGVNZWRpYVR5cGVzKSB7XG5cdFx0XHRjb25zdCBhY2NlcHRlZFR5cGVzID0gQXJyYXkuZnJvbShcblx0XHRcdFx0dGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5hbm5vdGF0aW9ucy5Db3JlPy5BY2NlcHRhYmxlTWVkaWFUeXBlcyBhcyB1bmtub3duIGFzIHN0cmluZ1tdXG5cdFx0XHQpLm1hcCgodHlwZSkgPT4gYCcke3R5cGV9J2ApO1xuXHRcdFx0ZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzID0gYHs9b2RhdGEuY29sbGVjdGlvbihbJHthY2NlcHRlZFR5cGVzLmpvaW4oXCIsXCIpfV0pfWA7XG5cdFx0fVxuXHRcdGNvbnN0IGhhbmRsZVR5cGVNaXNzbWF0Y2ggPSBmdW5jdGlvbiAoZXZlbnQ6IEZpbGVVcGxvYWRlciRUeXBlTWlzc21hdGNoRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0Y29uc3QgZ2l2ZW5UeXBlID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwibWltZVR5cGVcIik7XG5cdFx0XHRjb25zdCBhY2NlcHRlZFR5cGVzID0gZmlsZVVwbG9hZGVyLmdldE1pbWVUeXBlKCk7XG5cdFx0XHRpZiAoZ2l2ZW5UeXBlKSB7XG5cdFx0XHRcdHNob3dUeXBlTWlzbWF0Y2hEaWFsb2coZmlsZVVwbG9hZGVyLCBnaXZlblR5cGUsIGFjY2VwdGVkVHlwZXMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gdmVyaWZ5IGNoZWNrIGZvciBzdHJlYW1cblx0XHRjb25zdCBmaWxlTWF4aW11bVNpemUgPSBGaWVsZEhlbHBlci5jYWxjdWxhdGVNQmZyb21CeXRlKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8ubWF4TGVuZ3RoKTtcblx0XHRjb25zdCBoYW5kbGVGaWxlU2l6ZUV4Y2VlZCA9IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJEZpbGVTaXplRXhjZWVkRXZlbnQpOiB2b2lkIHtcblx0XHRcdGNvbnN0IGZpbGVVcGxvYWRlciA9IGV2ZW50Py5nZXRTb3VyY2UoKTtcblx0XHRcdHNob3dGaWxlU2l6ZUV4Y2VlZERpYWxvZyhmaWxlVXBsb2FkZXIsIGZpbGVVcGxvYWRlci5nZXRNYXhpbXVtRmlsZVNpemUoKS50b0ZpeGVkKDMpKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9uVXBsb2FkQ29tcGxldGUgPSBmdW5jdGlvbiAoZXZlbnQ6IEZpbGVVcGxvYWRlciRVcGxvYWRDb21wbGV0ZUV2ZW50KTogdm9pZCB7XG5cdFx0XHRpZiAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwic3RhdHVzXCIpID09PSAwIHx8IChldmVudC5nZXRQYXJhbWV0ZXIoXCJzdGF0dXNcIikgYXMgbnVtYmVyKSA+PSA0MDApIHtcblx0XHRcdFx0ZGlzcGxheU1lc3NhZ2VGb3JGYWlsZWRVcGxvYWQoXG5cdFx0XHRcdFx0ZXZlbnQuZ2V0U291cmNlKCksXG5cdFx0XHRcdFx0KGV2ZW50LmdldFBhcmFtZXRlcihcInJlc3BvbnNlUmF3XCIpIGFzIHN0cmluZykgfHwgKGV2ZW50LmdldFBhcmFtZXRlcihcInJlc3BvbnNlXCIpIGFzIHN0cmluZylcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RmlsZVVwbG9hZGVyXG5cdFx0XHRcdG5hbWU9XCJGRVY0RmlsZVVwbG9hZFwiXG5cdFx0XHRcdGJ1dHRvbk9ubHk9XCJmYWxzZVwiXG5cdFx0XHRcdGljb25Pbmx5PVwidHJ1ZVwiXG5cdFx0XHRcdG11bHRpcGxlPVwiZmFsc2VcIlxuXHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fRklFTERfRklMRVVQTE9BREVSX1VQTE9BRF9CVVRUT05fVE9PTFRJUH1cIlxuXHRcdFx0XHRpY29uPVwic2FwLWljb246Ly91cGxvYWRcIlxuXHRcdFx0XHRzdHlsZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0c2VuZFhIUj1cInRydWVcIlxuXHRcdFx0XHR1c2VNdWx0aXBhcnQ9XCJmYWxzZVwiXG5cdFx0XHRcdHNhbWVGaWxlbmFtZUFsbG93ZWQ9XCJ0cnVlXCJcblx0XHRcdFx0dXBsb2FkT25DaGFuZ2U9XCJmYWxzZVwiXG5cdFx0XHRcdG1pbWVUeXBlPXtmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXN9XG5cdFx0XHRcdHR5cGVNaXNzbWF0Y2g9e2hhbmRsZVR5cGVNaXNzbWF0Y2h9XG5cdFx0XHRcdG1heGltdW1GaWxlU2l6ZT17ZmlsZU1heGltdW1TaXplfVxuXHRcdFx0XHRmaWxlU2l6ZUV4Y2VlZD17aGFuZGxlRmlsZVNpemVFeGNlZWR9XG5cdFx0XHRcdGh0dHBSZXF1ZXN0TWV0aG9kPXtGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZC5QdXR9XG5cdFx0XHRcdHVwbG9hZENvbXBsZXRlPXtvblVwbG9hZENvbXBsZXRlfVxuXHRcdFx0XHRjaGFuZ2U9e2FzeW5jIChlKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmhhbmRsZUZpbGVVcGxvYWRlckNoYW5nZShlLCBwYXJhbWV0ZXIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGZpZWxkIGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHBhcmFtZXRlckNvbnRleHQgVGhlIHBhcmFtZXRlciBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBmaWVsZCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBjcmVhdGVGaWVsZChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8RmllbGQ+IHtcblx0XHRsZXQgZGlzcGxheSA9IFwiVmFsdWVcIjtcblx0XHRsZXQgYWRkaXRpb25hbFZhbHVlO1xuXHRcdGxldCBiaW5kaW5nVmFsdWU7XG5cdFx0dHJ5IHtcblx0XHRcdGRpc3BsYXkgPSBhd2FpdCBGaWVsZEhlbHBlci5nZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQocGFyYW1ldGVyQ29udGV4dC5nZXRPYmplY3QoKSwgeyBjb250ZXh0OiBwYXJhbWV0ZXJDb250ZXh0IH0pO1xuXHRcdFx0YmluZGluZ1ZhbHVlID0gYXdhaXQgdGhpcy5nZXRBUERpYWxvZ0JpbmRpbmdWYWx1ZShwYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQsIHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KTtcblx0XHRcdGlmIChoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSkge1xuXHRcdFx0XHRhZGRpdGlvbmFsVmFsdWUgPSBhd2FpdCB0aGlzLmdldEFkZGl0aW9uYWxWYWx1ZSh7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRMb2cud2FybmluZyhgUGFyYW1ldGVyIGRpYWxvZyBmaWVsZDogZGlzcGxheSBmb3JtYXQgY291bGRuJ3QgYmUgY2FsY3VsYXRlZCBmb3IgcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfSc6ICR7ZXJyfWApO1xuXHRcdH1cblx0XHRjb25zdCBwbGFjZUhvbGRlciA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uUGxhY2Vob2xkZXIgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8UHJpbWl0aXZlVHlwZT4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXJFeHByZXNzaW9uID0gcGxhY2VIb2xkZXIgPyBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGxhY2VIb2xkZXIpKSA6IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZpZWxkXG5cdFx0XHRcdGRlbGVnYXRlPXt7IG5hbWU6IFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEJhc2VEZWxlZ2F0ZVwiLCBwYXlsb2FkOiB7IHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Q6IHRydWUgfSB9fVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZV0pfVxuXHRcdFx0XHR2YWx1ZT17YmluZGluZ1ZhbHVlfVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17cGxhY2VIb2xkZXJFeHByZXNzaW9ufVxuXHRcdFx0XHRkaXNwbGF5PXtkaXNwbGF5fVxuXHRcdFx0XHRlZGl0TW9kZT17dGhpcy5nZXRQYXJhbWV0ZXJFZGl0TW9kZShwYXJhbWV0ZXIpfVxuXHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRtdWx0aXBsZUxpbmVzPXtpc011bHRpTGluZVRleHQocGFyYW1ldGVyKX1cblx0XHRcdFx0cmVxdWlyZWQ9e2NvbXBpbGVFeHByZXNzaW9uKGlzQWN0aW9uUGFyYW1ldGVyUmVxdWlyZWRFeHByZXNzaW9uKHBhcmFtZXRlciwgdGhpcy5hY3Rpb24sIGNvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkpKX1cblx0XHRcdFx0Y2hhbmdlPXthc3luYyAoZSk6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5oYW5kbGVGaWVsZENoYW5nZShlLCBwYXJhbWV0ZXIpfVxuXHRcdFx0XHR2YWx1ZUhlbHA9e2hhc1ZhbHVlSGVscChwYXJhbWV0ZXIpID8gZ2VuZXJhdGUoW3RoaXMuYWN0aW9uTmFtZSwgcGFyYW1ldGVyLm5hbWVdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0ZGVwZW5kZW50cz17dGhpcy5jcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0KX1cblx0XHRcdFx0dmlzaWJsZT17Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyLm5hbWUgPT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIixcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0bm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwYXJhbWV0ZXIuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZSwgXCJMYWJlbFwiXSldfVxuXHRcdFx0XHRhZGRpdGlvbmFsVmFsdWU9e2FkZGl0aW9uYWxWYWx1ZX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSB2YWx1ZUhlbHAgIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJDb250ZXh0IFRoZSBwYXJhbWV0ZXIgY29udGV4dFxuXHQgKiBAcmV0dXJucyBBIHZhbHVlSGVscCBpZiB0aGUgcGFyYW1ldGVyIGhhcyBhIFZILCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dDogQ29udGV4dCk6IFZhbHVlSGVscCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDxWYWx1ZUhlbHBcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lXSl9XG5cdFx0XHRcdGRlbGVnYXRlPXt7XG5cdFx0XHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiLFxuXHRcdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogdGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0XHRcdFx0XHQ/IGAke2dldFRhcmdldE5hdmlnYXRpb25QYXRoKGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxBY3Rpb25QYXJhbWV0ZXI+KHBhcmFtZXRlckNvbnRleHQpKX0vJHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWN0aW9uTmFtZVxuXHRcdFx0XHRcdFx0XHQgIH0vJHtwYXJhbWV0ZXIubmFtZX1gXG5cdFx0XHRcdFx0XHRcdDogYC8ke3RoaXMuYWN0aW9uLm5hbWUuc3Vic3RyaW5nKHRoaXMuYWN0aW9uLm5hbWUubGFzdEluZGV4T2YoXCIuXCIpICsgMSl9LyR7cGFyYW1ldGVyLm5hbWV9YCxcblx0XHRcdFx0XHRcdHF1YWxpZmllcnM6IHt9LFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwUXVhbGlmaWVyOiBcIlwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9fVxuXHRcdFx0XHR2YWxpZGF0ZUlucHV0PXtyZXF1aXJlc1ZhbGlkYXRpb24ocGFyYW1ldGVyKX1cblx0XHRcdFx0dHlwZWFoZWFkPXtcblx0XHRcdFx0XHQ8UG9wb3Zlcj5cblx0XHRcdFx0XHRcdDxNVGFibGVcblx0XHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lLCBcIlBvcG92ZXJcIiwgXCJxdWFsaWZpZXJcIl0pfVxuXHRcdFx0XHRcdFx0XHRjYXNlU2Vuc2l0aXZlPXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFjdGlvbi5pc0JvdW5kXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8QWN0aW9uUGFyYW1ldGVyPihwYXJhbWV0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKS5lbnRpdHlDb250YWluZXIuYW5ub3RhdGlvbnMuQ2FwYWJpbGl0aWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/LkZpbHRlckZ1bmN0aW9ucyBhcyB1bmtub3duIGFzIHN0cmluZ1tdKSA/PyBbXVxuXHRcdFx0XHRcdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IE1vZGVsSGVscGVyLmlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSh0aGlzLm1ldGFNb2RlbClcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR1c2VBc1ZhbHVlSGVscD17ISFwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdFx0fVxuXHRcdFx0XHRkaWFsb2c9e3RoaXMuY3JlYXRlRmllbGRWSERpYWxvZyhwYXJhbWV0ZXIpfVxuXHRcdFx0PjwvVmFsdWVIZWxwPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgVmFsdWVIZWxwIGRpYWxvZyBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBBIGRpYWxvZyBpZiB0aGUgcGFyYW1ldGVyIGhhcyBhIFZILCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZUZpZWxkVkhEaWFsb2cocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBWSERpYWxvZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24/LlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcz8udmFsdWVPZigpICE9PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gPFZIRGlhbG9nIC8+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBmaWVsZCBjaGFuZ2UgZXZlbnQgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIHVpNSBldmVudFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgUHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgaGFuZGxlRmllbGRDaGFuZ2UoZXZlbnQ6IE11bHRpVmFsdWVGaWVsZCRDaGFuZ2VFdmVudCB8IEZpZWxkJENoYW5nZUV2ZW50LCBwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpZWxkUHJvbWlzZSA9IChldmVudCBhcyBGaWVsZCRDaGFuZ2VFdmVudCkuZ2V0UGFyYW1ldGVyKFwicHJvbWlzZVwiKTtcblx0XHRjb25zdCBmaWVsZCA9IChldmVudCBhcyBGaWVsZCRDaGFuZ2VFdmVudCkuZ2V0U291cmNlKCkgYXMgRmllbGQgfCBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVySW5mbyA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmllbGQpO1xuXHRcdGlmICghcGFyYW1ldGVySW5mbykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRwYXJhbWV0ZXJJbmZvLnZhbGlkYXRpb25Qcm9taXNlID0gZmllbGRQcm9taXNlO1xuXHRcdC8vIGZpZWxkIHZhbHVlIGlzIGJlaW5nIGNoYW5nZWQsIHRodXMgZXhpc3RpbmcgbWVzc2FnZXMgcmVsYXRlZCB0byB0aGF0IGZpZWxkIGFyZSBub3QgdmFsaWQgYW55bW9yZVxuXHRcdHRoaXMucmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIocGFyYW1ldGVyKTtcblx0XHR0cnkge1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZSA9IGF3YWl0IGZpZWxkUHJvbWlzZTtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5wYXJhbWV0ZXJzVmFsdWVzW3BhcmFtZXRlckluZm8ucGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdHBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSBmYWxzZTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0ZGVsZXRlIHBhcmFtZXRlckluZm8udmFsdWU7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gdHJ1ZTtcblx0XHRcdEFjdGlvblJ1bnRpbWUuX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIoW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVySW5mbzogcGFyYW1ldGVySW5mbyxcblx0XHRcdFx0XHRtZXNzYWdlOiAoZXJyb3IgYXMgeyBtZXNzYWdlOiBzdHJpbmcgfSkubWVzc2FnZVxuXHRcdFx0XHR9XG5cdFx0XHRdKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgRmlsZVVwbG9hZGVyIGNoYW5nZSBldmVudCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgU0FQVUk1IGV2ZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIEZpbGVVcGxvYWRlciBjaGFuZ2UgZXZlbnQuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGhhbmRsZUZpbGVVcGxvYWRlckNoYW5nZShldmVudDogRmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50LCBwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpbGVzID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwiZmlsZXNcIik7XG5cdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Ly8gY29ycmVjdGlvbiBuZWVkZWQgZm9yIG11bHRpcGxlIGZpbGUgdXBsb2FkZXJzXG5cdFx0Y29uc3QgcGFyYW1ldGVySW5mbyA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZCA9PT0gZmlsZVVwbG9hZGVyKTtcblx0XHRpZiAoIXBhcmFtZXRlckluZm8gfHwgIWZpbGVzKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIocGFyYW1ldGVyKTtcblx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlID0ge307XG5cdFx0aWYgKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZVt0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/Lm5hbWUgYXMga2V5b2YgdHlwZW9mIHBhcmFtZXRlckluZm8udmFsdWVdID1cblx0XHRcdFx0YXdhaXQgdGhpcy5nZXRCYXNlNjRGaWxlKGZpbGVzKTtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWVbKHRoaXMuZ2V0TWltZVR5cGVQYXRoKHBhcmFtZXRlcikgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHN0cmluZz4pLnBhdGhdID1cblx0XHRcdFx0KGZpbGVzWzBdIGFzIEZpbGUpLnR5cGUgfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjtcblx0XHRcdHBhcmFtZXRlckluZm8udmFsdWVbdGhpcy5nZXRGaWxlTmFtZVBhdGgocGFyYW1ldGVyKSBhcyBzdHJpbmddID0gKGZpbGVzWzBdIGFzIEZpbGUpLm5hbWU7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yID0gZmFsc2U7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMucGFyYW1ldGVyc1ZhbHVlc1twYXJhbWV0ZXJJbmZvLnBhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlckluZm8udmFsdWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgZmlsZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgU3RyZWFtIHByb3BlcnR5IGluIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBQYXRoIGFzIGEgc3RyaW5nLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaWxlTmFtZVBhdGgocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiAodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KS5wYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBwcm9wZXJ0eSBuYW1lIGZvciB0aGUgTWltZSB0eXBlIHdpdGggdGhlIGFzc29jaWF0ZWQgU3RyZWFtIHByb3BlcnR5IGluIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBUaGUgcGF0aCBleHByZXNzaW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRNaW1lVHlwZVBhdGgocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZSk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIFN0cmVhbSBwcm9wZXJ0eSBhc3NvY2lhdGVkIHdpdGggdGhlIENvbXBsZXggdHlwZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcmV0dXJucyBUaGUgRWRtLlN0cmVhbSBwcm9wZXJ0eS5cblx0ICovXG5cdHByaXZhdGUgZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChwYXJhbWV0ZXIudHlwZVJlZmVyZW5jZSBhcyBDb21wbGV4VHlwZSkucHJvcGVydGllcz8uZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLlN0cmVhbVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgY29udGVudCBvZiB0aGUgZmlsZS5cblx0ICogQHBhcmFtIGZpbGVzIFRoZSBmaWxlIHNlbGVjdGVkLlxuXHQgKiBAcmV0dXJucyBUaGUgZmlsZSBjb250ZW50LlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRCYXNlNjRGaWxlKGZpbGVzOiBvYmplY3RbXSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXHRcdFx0cmVhZGVyLm9ubG9hZCA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKCFyZWFkZXIucmVzdWx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc29sdmUoKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKS5zcGxpdChcIixcIilbMV0pO1xuXHRcdFx0fTtcblx0XHRcdHJlYWRlci5yZWFkQXNEYXRhVVJMKChmaWxlcyBhcyB1bmtub3duIGFzIEZpbGVMaXN0KS5pdGVtKDApISk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbWVzc2FnZXMgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICovXG5cdHByaXZhdGUgcmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiB2b2lkIHtcblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgY29udHJvbElkID0gZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZV0pO1xuXHRcdC8vIGFsc28gcmVtb3ZlIG1lc3NhZ2VzIGFzc2lnbmVkIHRvIGlubmVyIGNvbnRyb2xzLCBidXQgYXZvaWQgcmVtb3ZpbmcgbWVzc2FnZXMgZm9yIGRpZmZlcmVudCBwYXJhbWV0ZXJzICh3aXRoIG5hbWUgYmVpbmcgc3Vic3RyaW5nIG9mIGFub3RoZXIgcGFyYW1ldGVyIG5hbWUpXG5cdFx0Y29uc3QgcmVsZXZhbnRNZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcigobXNnOiBNZXNzYWdlKSA9PlxuXHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChpZDogc3RyaW5nKSA9PiBjb250cm9sSWQuc3BsaXQoXCItXCIpLmluY2x1ZGVzKGlkKSlcblx0XHQpO1xuXHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhyZWxldmFudE1lc3NhZ2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBGb3JtRWxlbWVudHMgYWxvbmcgd2l0aCB0aGUgYXJyYXkgb2YgcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJhbWV0ZXIgaW5mb3JtYXRpb24gYWxvbmcgd2l0aCB0aGUgRm9ybUVsZW1lbnRzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRGb3JtRWxlbWVudHMocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBQcm9taXNlPERpYWxvZ0NvbnRlbnRUeXBlcz4ge1xuXHRcdGNvbnN0IGZvcm1FbGVtZW50cyA9IGF3YWl0IHRoaXMuY3JlYXRlRm9ybUVsZW1lbnQocGFyYW1ldGVyKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Zm9ybUVsZW1lbnRzOiBmb3JtRWxlbWVudHMsXG5cdFx0XHRwYXJhbWV0ZXI6IHBhcmFtZXRlclxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBkaWFsb2cgb3IgdW5kZWZpbmVkLlxuXHQgKi9cblx0Z2V0RGlhbG9nKCk6IERpYWxvZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZGlhbG9nO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgZGlhbG9nLlxuXHQgKi9cblx0YXN5bmMgY3JlYXRlRGlhbG9nKCk6IFByb21pc2U8RGlhbG9nPiB7XG5cdFx0bGV0IGRpYWxvZ0NvbnRlbnRzOiBGb3JtRWxlbWVudFR5cGVbXSA9IFtdO1xuXHRcdGxldCBkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzOiBEaWFsb2dDb250ZW50VHlwZXNbXSA9IFtdO1xuXHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSB0aGlzLmFjdGlvbi5pc0JvdW5kID8gdGhpcy5hY3Rpb24ucGFyYW1ldGVycy5zbGljZSgxKSA6IHRoaXMuYWN0aW9uLnBhcmFtZXRlcnM7XG5cblx0XHQvLyBJZiBPcGVyYXRpb25hbFBhcmFtZXRlckZhY2V0cyBoYXZlIGJlZW4gZGVmaW5lZCBmb3IgdGhpcyBhY3Rpb24sIHRoZXkgYXJlIHVzZWQgdG8gZ3JvdXAgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzXG5cdFx0Ly8gd2l0aCB0aXRsZXNcblx0XHRpZiAodGhpcy5hY3Rpb24uYW5ub3RhdGlvbnM/LlVJPy5PcGVyYXRpb25QYXJhbWV0ZXJGYWNldHMpIHtcblx0XHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlckdyb3VwczogRWxlbWVudEdyb3VwW10gPSBbXTtcblx0XHRcdHRoaXMuYWN0aW9uLmFubm90YXRpb25zLlVJPy5PcGVyYXRpb25QYXJhbWV0ZXJGYWNldHM/LmZvckVhY2goZnVuY3Rpb24gKGZhY2V0OiBSZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRsZXQgZmFjZXRUaXRsZTtcblx0XHRcdFx0aWYgKGZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRcdGZhY2V0VGl0bGUgPSBmYWNldC5MYWJlbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaGFzRmllbGRHcm91cFRhcmdldChmYWNldCkpIHtcblx0XHRcdFx0XHRjb25zdCBmaWVsZEdyb3VwID0gZmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwVHlwZTtcblx0XHRcdFx0XHRjb25zdCBncm91cGVkQWN0aW9uUGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyW10gPSBbXTtcblxuXHRcdFx0XHRcdGZpZWxkR3JvdXAuRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChncm91cDogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0Z3JvdXBlZEFjdGlvblBhcmFtZXRlcnMucHVzaCgoZ3JvdXAgYXMgRGF0YUZpZWxkKS5WYWx1ZS4kdGFyZ2V0IGFzIEFjdGlvblBhcmFtZXRlcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YWN0aW9uUGFyYW1ldGVyR3JvdXBzLnB1c2goe1xuXHRcdFx0XHRcdFx0ZmFjZXRUaXRsZTogZmFjZXRUaXRsZSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0ZGF0YTogZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEdldCB0aGUgZmllbGRzIGZvciBlYWNoIHBhcmFtZXRlciBncm91cFxuXHRcdFx0Y29uc3QgZ2V0R3JvdXBGb3JtID0gYXN5bmMgKGdyb3VwOiBFbGVtZW50R3JvdXApOiBQcm9taXNlPEVsZW1lbnRHcm91cENvbnZlcnRlZD4gPT4ge1xuXHRcdFx0XHRjb25zdCBmb3JtRWxlbWVudHMgPSBhd2FpdCBQcm9taXNlLmFsbChncm91cC5kYXRhLm1hcCh0aGlzLmdldEZvcm1FbGVtZW50cy5iaW5kKHRoaXMpKSk7XG5cdFx0XHRcdHJldHVybiB7IGZhY2V0VGl0bGU6IGdyb3VwLmZhY2V0VGl0bGUsIGRhdGE6IGZvcm1FbGVtZW50cyB9O1xuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgZm9ybURhdGEgPSBhY3Rpb25QYXJhbWV0ZXJHcm91cHMubWFwKGFzeW5jIChwYXJhbWV0ZXJHcm91cCkgPT4gZ2V0R3JvdXBGb3JtKHBhcmFtZXRlckdyb3VwKSk7XG5cdFx0XHRjb25zdCBvcEZhY2V0cyA9IGF3YWl0IFByb21pc2UuYWxsKGZvcm1EYXRhKTtcblxuXHRcdFx0Ly8gQWRkIHRoZSB0aXRsZSBjb250cm9sIHRvIGVhY2ggcGFyYW1ldGVyIGdyb3VwXG5cdFx0XHRvcEZhY2V0cy5mb3JFYWNoKChkaWFsb2dDb250ZW50KSA9PiB7XG5cdFx0XHRcdGRpYWxvZ0NvbnRlbnRzLnB1c2goPFRpdGxlIHRleHQ9e2RpYWxvZ0NvbnRlbnQuZmFjZXRUaXRsZX0gLz4pO1xuXHRcdFx0XHRyZXR1cm4gZGlhbG9nQ29udGVudC5kYXRhLm1hcCgoZWxlbWVudCkgPT4gZGlhbG9nQ29udGVudHMucHVzaChlbGVtZW50LmZvcm1FbGVtZW50cykpO1xuXHRcdFx0fSk7XG5cblx0XHRcdG9wRmFjZXRzLmZvckVhY2goZnVuY3Rpb24gKG9wRmFjZXQpIHtcblx0XHRcdFx0b3BGYWNldC5kYXRhLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRcdFx0XHRkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzLnB1c2goZWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIE9wZXJhdGlvblBhcmFtZXRlckZhY2V0cyBoYXZlIGJlZW4gZGVmaW5lZFxuXHRcdFx0ZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycyA9IGF3YWl0IFByb21pc2UuYWxsKGFjdGlvblBhcmFtZXRlcnMubWFwKHRoaXMuZ2V0Rm9ybUVsZW1lbnRzLmJpbmQodGhpcykpKTtcblx0XHRcdGRpYWxvZ0NvbnRlbnRzID0gZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycy5tYXAoKGRpYWxvZ0NvbnRlbnQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGRpYWxvZ0NvbnRlbnQuZm9ybUVsZW1lbnRzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZWdpc3RlckFjdGlvblBhcmFtZXRlckluZm8oZGlhbG9nQ29udGVudHNXaXRoUGFyYW1ldGVycyk7XG5cblx0XHQvLyBJbiBjYXNlIG9mIGRlZmVycmVkIGNyZWF0ZSB3ZSBoYXZlIG5vIHZpZXcsIHNvIHdlIG5lZWQgdG8gZ2V0IHRoZSByZXNvdXJjZSBtb2RlbCBmcm9tIHRoZSBhcHAgY29tcG9uZW50XG5cblx0XHRjb25zdCBtZXNzYWdlU3RyaXAgPSB0aGlzLmdldEN1c3RvbUFjdGlvbk1lc3NhZ2VTdHJpcFRleHQoKTtcblxuXHRcdGNvbnN0IGVuZEJ1dHRvbiA9IChcblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCB0aGlzLmFjdGlvbk5hbWUsIFwiQWN0aW9uXCIsIFwiQ2FuY2VsXCJdKX1cblx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19DQU5DRUxcIil9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vbkNhbmNlbC5iaW5kKHRoaXMpKCk7XG5cdFx0XHRcdH19XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0Y29uc3QgZGlhbG9nID0gKFxuXHRcdFx0PERpYWxvZ1xuXHRcdFx0XHR0aXRsZT17dGhpcy5nZXRUaXRsZVRleHQodGhpcy5wYXJhbWV0ZXJzLmxhYmVsKX1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcImZlXCIsIFwiQVBEX1wiLCB0aGlzLmFjdGlvbk5hbWVdKX1cblx0XHRcdFx0ZXNjYXBlSGFuZGxlcj17dGhpcy5vbkNhbmNlbC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRkcmFnZ2FibGU9e3RydWV9XG5cdFx0XHRcdHJlc2l6YWJsZT17dHJ1ZX1cblx0XHRcdFx0YWZ0ZXJDbG9zZT17dGhpcy5hZnRlckNsb3NlLmJpbmQodGhpcyl9XG5cdFx0XHRcdGJlZm9yZU9wZW49e3RoaXMuYmVmb3JlT3Blbi5iaW5kKHRoaXMpfVxuXHRcdFx0XHRhZnRlck9wZW49eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmFmdGVyT3BlbigpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRpbml0aWFsRm9jdXM9e2VuZEJ1dHRvbn0gLy8gVGhlIGluaXRpYWwgZm9jdXMgaXMgc2V0IHByb2dyYW1tYXRpY2FsbHkgaW4gYWZ0ZXJPcGVuLCB0byBhdm9pZCBvcGVuaW5nIHRoZSBWSCBkaWFsb2dcblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRiZWdpbkJ1dHRvbjogKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHRoaXMuYWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJPa1wiXSl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9e1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5pc0NyZWF0ZUFjdGlvbiA9PT0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfVFJBTlNBQ1RJT05fSEVMUEVSX1NBUEZFX0FDVElPTl9DUkVBVEVfQlVUVE9OX0NPTlRJTlVFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZ2V0QmVnaW5CdXR0b25MYWJlbCh0aGlzLnBhcmFtZXRlcnMubGFiZWwpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQXBwbHkuYmluZCh0aGlzKSgpO1xuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiRW1waGFzaXplZFwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZW5kQnV0dG9uOiBlbmRCdXR0b24sXG5cdFx0XHRcdFx0Y29udGVudDogKFxuXHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZSAodW5rbm93biBwcm9wZXJ0eSBiaW5kaW5nKVxuXHRcdFx0XHRcdFx0Ly8gY29sdW1uc00gb25seSB0YWtlcyBlZmZlY3QgaWYgdGhlcmUgYXJlIHRpdGxlcyBpbiB0aGUgY29udGVudC5cblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHttZXNzYWdlU3RyaXAgJiYgPE1lc3NhZ2VTdHJpcCBzaG93SWNvbj1cInRydWVcIiB0ZXh0PXttZXNzYWdlU3RyaXB9PjwvTWVzc2FnZVN0cmlwPn1cblx0XHRcdFx0XHRcdFx0PFNpbXBsZUZvcm0gY29sdW1uc009e1wiMlwifSBlZGl0YWJsZT1cInRydWVcIiBsYWJlbFNwYW5MPXtcIjEyXCJ9IGxhYmVsU3Bhbk09e1wiMTJcIn0gYmluZGluZz17XCIkUGFyYW1ldGVyXCJ9PlxuXHRcdFx0XHRcdFx0XHRcdHt7IGNvbnRlbnQ6IGRpYWxvZ0NvbnRlbnRzIH19XG5cdFx0XHRcdFx0XHRcdDwvU2ltcGxlRm9ybT5cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvRGlhbG9nPlxuXHRcdCk7XG5cdFx0dGhpcy5kaWFsb2cgPSBkaWFsb2c7XG5cdFx0cmV0dXJuIGRpYWxvZztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBsYWJlbCBmb3IgdGhlIGJlZ2luIGJ1dHRvbiBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gYWN0aW9uTGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIGxhYmVsLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRCZWdpbkJ1dHRvbkxhYmVsKGFjdGlvbkxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGtleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfQUNUSU9OX05BTUVcIjtcblx0XHRjb25zdCBkZWZhdWx0S2V5ID0gXCJDX0NPTU1PTl9ESUFMT0dfT0tcIjtcblx0XHRyZXR1cm4gdGhpcy5nZXRPdmVycmlkZGVuVGV4dChrZXksIGRlZmF1bHRLZXksIGFjdGlvbkxhYmVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gYWN0aW9uTGFiZWwgVGhlIGxhYmVsIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIHRpdGxlLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUaXRsZVRleHQoYWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qga2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19BQ1RJT05fVElUTEVcIjtcblx0XHRjb25zdCBkZWZhdWx0S2V5ID0gXCJDX09QRVJBVElPTlNfQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfVElUTEVcIjtcblx0XHRyZXR1cm4gdGhpcy5nZXRPdmVycmlkZGVuVGV4dChrZXksIGRlZmF1bHRLZXksIGFjdGlvbkxhYmVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGFuIG92ZXJyaWRkZW4gdGV4dCBmb3IgbWVzc2FnZSBzdHJpcC5cblx0ICogQHJldHVybnMgVGhlIG92ZXJyaWRkZW4gdGV4dCBmb3IgbWVzc2FnZSBzdHJpcC5cblx0ICovXG5cdHByaXZhdGUgZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGtleSA9IFwiQUNUSU9OX1BBUkFNRVRFUl9ESUFMT0dfTUVTU0FHRV9URVhUXCI7XG5cdFx0bGV0IGJvdW5kQWN0aW9uTmFtZSA9IHRoaXMuYWN0aW9uTmFtZTtcblx0XHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpID8/IGJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiB0aGlzLmVudGl0eVNldE5hbWUgPyBgJHt0aGlzLmVudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHtzdWZmaXhSZXNvdXJjZUtleX1gKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHt0aGlzLmVudGl0eVNldE5hbWV9YCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgYCR7dGhpcy5lbnRpdHlTZXROYW1lfWApO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9YCkpIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYW4gb3ZlcnJpZGRlbiB0ZXh0LlxuXHQgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIGFuIG92ZXJyaWRkZW4gdGV4dFxuXHQgKiBAcGFyYW0gZGVmYXVsdEtleSBUaGUgZGVmYXVsdCBrZXkgZm9yIHRoZSB0ZXh0XG5cdCAqIEBwYXJhbSBhY3Rpb25MYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgb3ZlcnJpZGRlbiB0ZXh0IG9yIGxhYmVsLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRPdmVycmlkZGVuVGV4dChrZXk6IHN0cmluZywgZGVmYXVsdEtleTogc3RyaW5nLCBhY3Rpb25MYWJlbD86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IGJvdW5kQWN0aW9uTmFtZSA9IHRoaXMuYWN0aW9uTmFtZTtcblx0XHRib3VuZEFjdGlvbk5hbWUgPSBib3VuZEFjdGlvbk5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpID8/IGJvdW5kQWN0aW9uTmFtZTtcblx0XHRjb25zdCBzdWZmaXhSZXNvdXJjZUtleSA9IGJvdW5kQWN0aW9uTmFtZSAmJiB0aGlzLmVudGl0eVNldE5hbWUgPyBgJHt0aGlzLmVudGl0eVNldE5hbWV9fCR7Ym91bmRBY3Rpb25OYW1lfWAgOiBcIlwiO1xuXHRcdGlmIChhY3Rpb25MYWJlbCkge1xuXHRcdFx0aWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3N1ZmZpeFJlc291cmNlS2V5fWApKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXksIHVuZGVmaW5lZCwgc3VmZml4UmVzb3VyY2VLZXkpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX18JHt0aGlzLmVudGl0eVNldE5hbWV9YCkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBgJHt0aGlzLmVudGl0eVNldE5hbWV9YCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fWApKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChrZXkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGFjdGlvbkxhYmVsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoZGVmYXVsdEtleSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHByZXNzIGV2ZW50IG9mIHRoZSBiZWdpbiBidXR0b24gb2YgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIG9uQXBwbHkoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gcHJldmVudCBtdWx0aXBsZSBwcmVzcyBldmVudHMuIFRoZSBCdXN5TG9ja2VyIGlzIG5vdCBmYXN0IGVub3VnaC4gKEJDUDogMjM3MDEzMDIxMClcblx0XHRpZiAodGhpcy5idXR0b25Mb2NrIHx8ICF0aGlzLmRpYWxvZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBkaWFsb2cgPSB0aGlzLmRpYWxvZztcblxuXHRcdGNvbnN0IHBhcmFtZXRlckNvbnRleHQgPSAoZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nIHwgdW5kZWZpbmVkKT8uZ2V0UGFyYW1ldGVyQ29udGV4dCgpO1xuXG5cdFx0Ly8gbG9jayB0aGUgYnV0dG9uIHRvIHByZXZlbnQgbXVsdGlwbGUgcHJlc3MgZXZlbnRzXG5cdFx0dGhpcy5idXR0b25Mb2NrID0gdHJ1ZTtcblx0XHRCdXN5TG9ja2VyLmxvY2soZGlhbG9nKTtcblxuXHRcdC8vIHZhbGlkYXRlIHRoZSBhY3Rpb24gcGFyYW1ldGVycy4gSXQgaXMgaW1wb3J0YW50IHRvIGRvIHRoaXMgYXMgYSBmaXJzdCBvcGVyYXRpb24gYXMgdGhlcmUgaXMgYVxuXHRcdC8vIHdhaXQgZG9uZSBmb3IgdGhlIHZhbHVlIGNoYW5nZXMgdG8gY29tcGxldGUgdXBkYXRpbmcgdGhlIG1vZGVsLiBFdmVuIGluIGNhc2VzIHdoZXJlIHZhbGlkYXRpb24gaXNcblx0XHQvLyBub3QgY29uZmlndXJlZCB0aGlzIHByb21pc2UgbmVlZHMgdG8gYmUgcmVzb2x2ZWQgdG8gcmVhZCBmcm9tIHRoZSBtb2RlbCB0byByZXR1cm4gdXNlciBlbnRlcmVkIHZhbHVlcy5cblx0XHRpZiAoIShhd2FpdCBBY3Rpb25SdW50aW1lLnZhbGlkYXRlUHJvcGVydGllcyh0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLCB0aGlzLnJlc291cmNlTW9kZWwpKSkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2soZGlhbG9nKTtcblx0XHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG5ld1ZhbHVlc0RpY3Rpb25hcnkgPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHQuLi50aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLm1hcCgoYWN0aW9uUGFyYW1ldGVySW5mb3MpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gYWN0aW9uUGFyYW1ldGVySW5mb3MucGFyYW1ldGVyO1xuXHRcdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHRcdGlmIChwYXJhbWV0ZXIuaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBPYmplY3QudmFsdWVzKChkaWFsb2cuZ2V0TW9kZWwoXCJtdmZ2aWV3XCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoYC8ke3BhcmFtZXRlci5uYW1lfWApID8/IHt9KS5tYXAoXG5cdFx0XHRcdFx0XHQocGFyYW1WYWx1ZSkgPT4gKHBhcmFtVmFsdWUgYXMgeyBLZXk/OiBQcmltaXRpdmVUeXBlIH0pPy5LZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFwYXJhbWV0ZXIudHlwZS5zdGFydHNXaXRoKFwiRWRtLlwiKSAmJiB0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcikpIHtcblx0XHRcdFx0XHQvLyBGaWxlIFVwbG9hZGVyXG5cdFx0XHRcdFx0dmFsdWUgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy52YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHBhcmFtZXRlckNvbnRleHQ/LmdldFByb3BlcnR5KHBhcmFtZXRlci5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4geyBbcGFyYW1ldGVyLm5hbWVdOiB2YWx1ZSB9O1xuXHRcdFx0fSlcblx0XHQpIGFzIFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+O1xuXHRcdGNvbnN0IGlzTmV3VmFsdWUgPSBPYmplY3QudmFsdWVzKG5ld1ZhbHVlc0RpY3Rpb25hcnkpLnNvbWUoKHZhbHVlKSA9PiAhIXZhbHVlKTtcblxuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Jlc29sdmUobmV3VmFsdWVzRGljdGlvbmFyeSk7XG5cblx0XHR0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldE1vZGVsKFwidWlcIikuc2V0UHJvcGVydHkoVWlNb2RlbENvbnN0YW50cy5Eb2N1bWVudE1vZGlmaWVkLCBpc05ld1ZhbHVlKTtcblx0XHQvLyBEdWUgdG8gdXNpbmcgdGhlIHNlYXJjaCBhbmQgdmFsdWUgaGVscHMgb24gdGhlIGFjdGlvbiBkaWFsb2cgdHJhbnNpZW50IG1lc3NhZ2VzIGNvdWxkIGFwcGVhclxuXHRcdC8vIHdlIG5lZWQgYW4gVVggZGVzaWduIGZvciB0aG9zZSB0byBzaG93IHRoZW0gdG8gdGhlIHVzZXIgLSBmb3Igbm93IHJlbW92ZSB0aGVtIGJlZm9yZSBjb250aW51aW5nXG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIGRpYWxvZyB0byBzdGFydCBhIG5ldyBpdGVyYXRpb24uXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgcmVzZXRTdGF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLnVubG9ja0RpYWxvZygpO1xuXHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlO1xuXHRcdHRoaXMudXBkYXRlRGlhbG9nQmluZGluZ0NvbnRleHRGb3JFcnJvcigpO1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdCA9IHJlamVjdDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2UgdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgZGlhbG9nIHRvIG9uZSB3aXRoIHByaW9yaXR5IG1lc3NhZ2UuXG5cdCAqXG5cdCAqIE9uIGluaXRpYWwgYWN0aW9uIGV4ZWN1dGlvbiwgd2UgbWlnaHQgaGF2ZSBib3VuZCBtZXNzYWdlcyB3aXRoIGFueSBzZWxlY3RlZCBjb250ZXh0cyBhcyB0YXJnZXQgYXBhcnQgZnJvbSB0aGUgZGlhbG9nJ3MgaW5pdGlhbCBjb250ZXh0LlxuXHQgKiBXZSBjaGFuZ2UgdGhlIGJpbmRpbmcgY29udGV4dCBvZiBkaWFsb2cgZm9yIHRoZSBwYXJhbWV0ZXIgZmllbGRzJyB0byBnZXQgdGhlIHZhbGlkIHZhbHVlIHN0YXRlIGZyb20gdGhlIHByaW9yaXR5IGJvdW5kIG1lc3NhZ2UuXG5cdCAqL1xuXHR1cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoIDwgMikge1xuXHRcdFx0Ly8gV2Ugd291bGQgbmVlZCB0byBzd2l0Y2ggdGhlIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgZGlhbG9nIG9ubHkgd2hlbiB3ZSBoYXZlIG11bHRpcGxlIGNvbnRleHRzIGZvciBleGVjdXRpbmcgdGhlIGFjdGlvbi5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsZXQgd2FybmluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkLCBpbmZvQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZXJyb25lb3VzQ3R4ID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmZpbmQoKGNvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gY29udGV4dC5nZXRNZXNzYWdlcygpO1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2VzLnNvbWUoKG1zZykgPT4ge1xuXHRcdFx0XHQvLyBXZSBob2xkIGZpcnN0IGNvbnRleHQgd2l0aCB3YXJuaW5nIG9yIGluZm8gbWVzc2FnZXMuXG5cdFx0XHRcdHdhcm5pbmdDb250ZXh0ID0gIXdhcm5pbmdDb250ZXh0ICYmIG1zZy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLldhcm5pbmcgPyBjb250ZXh0IDogdW5kZWZpbmVkO1xuXHRcdFx0XHRpbmZvQ29udGV4dCA9ICFpbmZvQ29udGV4dCAmJiBtc2cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbiA/IGNvbnRleHQgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdC8vIEVycm9yIGlzIGZvdW5kISEhIFdlIHNoYWxsIGV4aXQuXG5cdFx0XHRcdHJldHVybiBtc2cuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGNvbnRleHRUb1VzZSA9IGVycm9uZW91c0N0eCA/PyB3YXJuaW5nQ29udGV4dCA/PyBpbmZvQ29udGV4dDtcblxuXHRcdGlmIChjb250ZXh0VG9Vc2UpIHtcblx0XHRcdHRoaXMuZGlhbG9nPy5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0VG9Vc2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBidXN5IHN0YXRlIG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIHVubG9ja0RpYWxvZygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5kaWFsb2cgJiYgQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzLmRpYWxvZykpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuZGlhbG9nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgdGhlIGNhbmNlbCBhY3Rpb24gb2YgdGhlIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgb25DYW5jZWwoKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVqZWN0KEZFTGlicmFyeS5Db25zdGFudHMuQ2FuY2VsQWN0aW9uRGlhbG9nKTtcblx0XHR0aGlzLmNsb3NlRGlhbG9nKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2VEaWFsb2coKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGlhbG9nKSB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblBhcmFtZXRlckRpYWxvZ0Nsb3NlZD8uKCk7XG5cdFx0XHQvLyB3aGVuIHRoZSBkaWFsb2cgaXMgY2FuY2VsbGVkLCBtZXNzYWdlcyBuZWVkIHRvIGJlIHJlbW92ZWQgaW4gY2FzZSB0aGUgc2FtZSBhY3Rpb24gc2hvdWxkIGJlIGV4ZWN1dGVkIGFnYWluXG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0XHR0aGlzLnJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyKHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3NbaV0ucGFyYW1ldGVyKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZGlhbG9nLmNsb3NlKCk7XG5cdFx0fVxuXHRcdHRoaXMuaXNEaWFsb2dPcGVuID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIGFjdGlvbiByZXN1bHQuXG5cdCAqL1xuXHRhc3luYyBvcGVuRGlhbG9nKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5kaWFsb2cpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkVycm9yIG9uIG9wZW5pbmcgdGhlIGRpYWxvZ1wiKTtcblx0XHR9XG5cdFx0YXdhaXQgQ29tbW9uVXRpbHMuc2V0VXNlckRlZmF1bHRzKFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlciksXG5cdFx0XHR0aGlzLnBhcmFtZXRlck1vZGVsLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0dGhpcy5zZXRNb2RlbHModGhpcy5kaWFsb2cpO1xuXHRcdHRoaXMucGFyYW1ldGVycy52aWV3Py5hZGREZXBlbmRlbnQodGhpcy5kaWFsb2cpO1xuXHRcdGF3YWl0IHRoaXMuc2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcyh0aGlzLmRpYWxvZyk7XG5cdFx0dGhpcy5kaWFsb2cub3BlbigpO1xuXHRcdHRoaXMuaXNEaWFsb2dPcGVuID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBtb2RlbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBvd25lciBvZiB0aGUgZGlhbG9nXG5cdCAqL1xuXHRwcml2YXRlIHNldE1vZGVscyhkaWFsb2c6IERpYWxvZyk6IHZvaWQge1xuXHRcdGRpYWxvZy5zZXRNb2RlbCh0aGlzLnBhcmFtZXRlck1vZGVsLCBcInBhcmFtc01vZGVsXCIpO1xuXHRcdGRpYWxvZy5iaW5kRWxlbWVudCh7XG5cdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdG1vZGVsOiBcInBhcmFtc01vZGVsXCJcblx0XHR9KTtcblx0XHRkaWFsb2cuc2V0TW9kZWwodGhpcy5wYXJhbWV0ZXJzLm1vZGVsKTtcblx0XHRkaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0cGF0aDogYCR7dGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA/IFwiXCIgOiBcIi9cIn0ke3RoaXMuYWN0aW9uTmFtZX0oLi4uKWBcblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRkaWFsb2cuc2V0QmluZGluZ0NvbnRleHQodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdKTsgLy8gdXNlIGNvbnRleHQgb2YgZmlyc3Qgc2VsZWN0ZWQgbGluZSBpdGVtXG5cdFx0fVxuXHRcdC8vIGVtcHR5IG1vZGVsIHRvIGFkZCBlbGVtZW50cyBkeW5hbWljYWxseSBkZXBlbmRpbmcgb24gbnVtYmVyIG9mIE1WRiBmaWVsZHMgZGVmaW5lZCBvbiB0aGUgZGlhbG9nXG5cdFx0ZGlhbG9nLnNldE1vZGVsKG5ldyBKU09OTW9kZWwoe30pLCBcIm12ZnZpZXdcIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbWVzc2FnZXMgYmVmb3JlIG9wZW5pbmcgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIF9ldmVudFxuXHQgKi9cblx0cHJpdmF0ZSBiZWZvcmVPcGVuKF9ldmVudDogRGlhbG9nJEJlZm9yZU9wZW5FdmVudCk6IHZvaWQge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2FpdCBmb3IgdGhlIHBhcmFtZXRlciB2YWx1ZXMgdG8gYmUgc2V0LlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGNvbnRhaW5pbmcgdGhlIHBhcmFtZXRlciB2YWx1ZXMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgd2FpdEZvclBhcmFtZXRlcnNWYWx1ZXMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPj4ge1xuXHRcdHJldHVybiB0aGlzLnBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGRpYWxvZyBpcyBvcGVuZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRpYWxvZyBpcyBvcGVuZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBpc09wZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXNEaWFsb2dPcGVuO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyIFRoZSBiaW5kaW5nIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIGRlZmF1bHQgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoXG5cdFx0cGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsXG5cdFx0YmluZGluZ1BhcmFtZXRlcjogc3RyaW5nLFxuXHRcdGRpYWxvZzogRGlhbG9nXG5cdCk6IFByb21pc2U8UGFyYW1ldGVyRGVmYXVsdFZhbHVlPiB7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQmluZGluZyA9IGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblx0XHRjb25zdCBwYXJhbWV0ZXJNb2RlbERhdGEgPSB0aGlzLnBhcmFtZXRlck1vZGVsLmdldERhdGEoKTtcblx0XHRjb25zdCBwYXJhbU5hbWUgPSBwYXJhbWV0ZXIubmFtZTtcblx0XHRjb25zdCBkZWZhdWx0VmFsdWUgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBhcmFtZXRlckRlZmF1bHRWYWx1ZTtcblx0XHQvLyBDYXNlIDE6IFRoZXJlIGlzIGEgUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGFubm90YXRpb25cblx0XHRpZiAoZGVmYXVsdFZhbHVlKSB7XG5cdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDAgJiYgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oZGVmYXVsdFZhbHVlKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IHBhdGhGb3JDb250ZXh0OiBzdHJpbmcgPVxuXHRcdFx0XHRcdFx0YmluZGluZ1BhcmFtZXRlciAmJiBkZWZhdWx0VmFsdWUucGF0aC5zdGFydHNXaXRoKGAke2JpbmRpbmdQYXJhbWV0ZXJ9L2ApXG5cdFx0XHRcdFx0XHRcdD8gZGVmYXVsdFZhbHVlLnBhdGgucmVwbGFjZShgJHtiaW5kaW5nUGFyYW1ldGVyfS9gLCBcIlwiKVxuXHRcdFx0XHRcdFx0XHQ6IGRlZmF1bHRWYWx1ZS5wYXRoO1xuXHRcdFx0XHRcdGxldCBwYXJhbVZhbHVlID0gYXdhaXQgQ29tbW9uVXRpbHMucmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KGRlZmF1bHRWYWx1ZS5wYXRoLCBvcGVyYXRpb25CaW5kaW5nLmdldE1vZGVsKCkpO1xuXHRcdFx0XHRcdGlmIChwYXJhbVZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRwYXJhbVZhbHVlID0gYXdhaXQgb3BlcmF0aW9uQmluZGluZy5nZXRQYXJhbWV0ZXJDb250ZXh0KCkucmVxdWVzdFByb3BlcnR5KGRlZmF1bHRWYWx1ZS5wYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHQvLyBGb3IgbXVsdGkgc2VsZWN0LCBuZWVkIHRvIGxvb3Agb3ZlciBjb250ZXh0cyAoYXMgY29udGV4dHMgY2Fubm90IGJlIHJldHJpZXZlZCB2aWEgYmluZGluZyBwYXJhbWV0ZXIgb2YgdGhlIG9wZXJhdGlvbiBiaW5kaW5nKVxuXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLnNvbWUoKGNvbnRleHQpID0+IGNvbnRleHQuZ2V0UHJvcGVydHkocGF0aEZvckNvbnRleHQpICE9PSBwYXJhbVZhbHVlKSkge1xuXHRcdFx0XHRcdFx0XHQvLyBpZiB0aGUgdmFsdWVzIGZyb20gdGhlIGNvbnRleHRzIGFyZSBub3QgYWxsIHRoZSBzYW1lLCBkbyBub3QgcHJlZmlsbFxuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdG5vUG9zc2libGVWYWx1ZTogdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBwYXJhbVZhbHVlIH07XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVhZGluZyBkZWZhdWx0IGFjdGlvbiBwYXJhbWV0ZXJcIiwgcGFyYW1OYW1lLCB0aGlzLmFjdGlvbi5uYW1lKTtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0cGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdGxhdGVQcm9wZXJ0eUVycm9yOiB0cnVlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQ2FzZSAxLjI6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZSBkZWZpbmVzIGEgZml4ZWQgc3RyaW5nIHZhbHVlIChpLmUuIHZQYXJhbURlZmF1bHRWYWx1ZSA9ICdzb21lU3RyaW5nJylcblx0XHRcdFx0cmV0dXJuIHsgcGFyYW1OYW1lLCB2YWx1ZTogZGVmYXVsdFZhbHVlLnZhbHVlT2YoKSB9O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBwYXJhbWV0ZXJNb2RlbERhdGFbcGFyYW1OYW1lXSB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1hbmlmZXN0IHZhbHVlcy5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG1hbmlmZXN0IHZhbHVlcy5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0TWFuaWZlc3RGdW5jdGlvblZhbHVlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB0aGlzLmRpYWxvZz8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAoIXRoaXMucGFyYW1ldGVycy52aWV3IHx8ICF0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIHx8ICFiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH1cblxuXHRcdHJldHVybiBGUE1IZWxwZXIubG9hZE1vZHVsZUFuZENhbGxNZXRob2QoXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uXG5cdFx0XHRcdC5zdWJzdHJpbmcoMCwgdGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sYXN0SW5kZXhPZihcIi5cIikgfHwgLTEpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24uc3Vic3RyaW5nKFxuXHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSArIDEsXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGVuZ3RoXG5cdFx0XHQpLFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLnZpZXcsXG5cdFx0XHRiaW5kaW5nQ29udGV4dCxcblx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1xuXHRcdCkgYXMgUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJlZGVmaW5lZCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gYmluZGluZ1BhcmFtZXRlciBUaGUgYmluZGluZyBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIGRpYWxvZyBUaGUgZGlhbG9nXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIGNvbnRhaW5pbmcgYWxsIHByZWRlZmluZWQgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRQcmVEZWZpbmVkVmFsdWVzKFxuXHRcdGJpbmRpbmdQYXJhbWV0ZXI6IHN0cmluZyxcblx0XHRkaWFsb2c6IERpYWxvZ1xuXHQpOiBQcm9taXNlPHtcblx0XHRjb250ZXh0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRkZWZhdWx0VmFsdWVzOiBQYXJhbWV0ZXJEZWZhdWx0VmFsdWVbXTtcblx0XHRmdW5jdGlvblZhbHVlczogT0RhdGFWNENvbnRleHRbXTtcblx0XHRtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0fT4ge1xuXHRcdGNvbnN0IGJvdW5kRnVuY3Rpb25OYW1lID0gdGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuQ29tbW9uPy5EZWZhdWx0VmFsdWVzRnVuY3Rpb24/LnZhbHVlT2YoKTtcblx0XHRsZXQgcmVxdWVzdENvbnRleHRPYmplY3Q6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0XHRsZXQgZnVuY3Rpb25QYXJhbXM6IFByb21pc2U8T0RhdGFWNENvbnRleHQ+W10gPSBbXTtcblx0XHRpZiAodGhpcy5hY3Rpb24uaXNCb3VuZCkge1xuXHRcdFx0aWYgKHR5cGVvZiBib3VuZEZ1bmN0aW9uTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBib3VuZEZ1bmN0aW9uID0gT3BlcmF0aW9uLmdldE9wZXJhdGlvbkZyb21OYW1lKGJvdW5kRnVuY3Rpb25OYW1lLCBtb2RlbCwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdKTtcblx0XHRcdFx0aWYgKGJvdW5kRnVuY3Rpb24pIHtcblx0XHRcdFx0XHRmdW5jdGlvblBhcmFtcyA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5tYXAoYXN5bmMgKGNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IG5ldyBPRGF0YU9wZXJhdGlvbihcblx0XHRcdFx0XHRcdFx0Ym91bmRGdW5jdGlvbixcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGFwcENvbXBvbmVudDogdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdFx0XHRtb2RlbDogbW9kZWwsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dHM6IFtjb250ZXh0XVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0ZW5oYW5jZSRzZWxlY3Q6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGdyb3VwSWQ6IFwiZnVuY3Rpb25Hcm91cFwiXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCkuZXhlY3V0ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdC5maWx0ZXIoaXNGdWxmaWxsZWQpWzBdPy52YWx1ZS5ib3VuZENvbnRleHQ7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRyZXF1ZXN0Q29udGV4dE9iamVjdCA9IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5yZXF1ZXN0T2JqZWN0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNvbnRleHRWYWx1ZXMgPSBhd2FpdCByZXF1ZXN0Q29udGV4dE9iamVjdDtcblxuXHRcdFx0Y29uc3QgcHJvbWlzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKGFzeW5jIChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PlxuXHRcdFx0XHRcdFx0dGhpcy5nZXRQYXJhbWV0ZXJEZWZhdWx0VmFsdWUoYWN0aW9uUGFyYW1ldGVySW5mby5wYXJhbWV0ZXIsIGJpbmRpbmdQYXJhbWV0ZXIsIGRpYWxvZylcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCksXG5cdFx0XHRcdFByb21pc2UuYWxsKGZ1bmN0aW9uUGFyYW1zKSxcblx0XHRcdFx0dGhpcy5nZXRNYW5pZmVzdEZ1bmN0aW9uVmFsdWVzKClcblx0XHRcdF0pO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29udGV4dFZhbHVlcyxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlczogcHJvbWlzZXNbMF0sXG5cdFx0XHRcdGZ1bmN0aW9uVmFsdWVzOiBwcm9taXNlc1sxXSxcblx0XHRcdFx0bWFuaWZlc3RGdW5jdGlvblZhbHVlczogcHJvbWlzZXNbMl1cblx0XHRcdH07XG5cdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHBhcmFtZXRlclwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0Ly8gUmVtb3ZlIG1lc3NhZ2VzIHJlbGF0aW5nIHRvIHRoZSBmdW5jdGlvbiBmb3IgZGVmYXVsdCB2YWx1ZXMgYXMgdGhleSBhcmVuJ3QgaGVscGZ1bCBmb3IgYSB1c2VyXG5cdFx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y29udGV4dFZhbHVlczoge30sXG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXM6IFtdLFxuXHRcdFx0XHRmdW5jdGlvblZhbHVlczogW10sXG5cdFx0XHRcdG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXM6IHt9XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayB3aGVuIHRoZSBkaWFsb2cgaXMgb3BlbmVkLiBTZXRzIHRoZSBmb2N1cyBvbiB0aGUgZmlyc3QgZmllbGQgd2l0aG91dCBvcGVuaW5nIHRoZSBWSCBkaWFsb2cuXG5cdCAqL1xuXHRwcml2YXRlIGFmdGVyT3BlbigpOiB2b2lkIHtcblx0XHRjb25zdCBmaXJzdFZpc2libGVQYXJhbWV0ZXIgPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoKHBhcmFtZXRlckluZm8pID0+IHBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmlzaWJsZSgpKTtcblx0XHRpZiAoZmlyc3RWaXNpYmxlUGFyYW1ldGVyKSB7XG5cdFx0XHRjb25zdCBmaXJzdEZpZWxkID0gZmlyc3RWaXNpYmxlUGFyYW1ldGVyPy5maWVsZDtcblx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IGZpcnN0RmllbGQ/LmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0XHRmaXJzdEZpZWxkPy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdH1cblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblBhcmFtZXRlckRpYWxvZ09wZW5lZD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGluZm8uXG5cdCAqIEBwYXJhbSBkaWFsb2dDb250ZW50cyBUaGUgZGlhbG9nIGNvbnRlbnRzXG5cdCAqL1xuXHRwcml2YXRlIHJlZ2lzdGVyQWN0aW9uUGFyYW1ldGVySW5mbyhkaWFsb2dDb250ZW50czogRGlhbG9nQ29udGVudFR5cGVzW10pOiB2b2lkIHtcblx0XHQvL1JlZ2lzdGVyIHRoZSBmaWVsZFxuXHRcdGRpYWxvZ0NvbnRlbnRzLmZvckVhY2goKGRpYWxvZ0NvbnRlbnQpID0+IHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IGRpYWxvZ0NvbnRlbnQ/LnBhcmFtZXRlcjtcblx0XHRcdGNvbnN0IGZpZWxkID0gZGlhbG9nQ29udGVudD8uZm9ybUVsZW1lbnRzPy5bMV07XG5cdFx0XHR0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zLnB1c2goe1xuXHRcdFx0XHRwYXJhbWV0ZXIsXG5cdFx0XHRcdGZpZWxkLFxuXHRcdFx0XHRpc011bHRpVmFsdWU6IHBhcmFtZXRlci5pc0NvbGxlY3Rpb24sXG5cdFx0XHRcdGhhc0Vycm9yOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHNldE9wZXJhdGlvbkRlZmF1bHRWYWx1ZXMoZGlhbG9nOiBEaWFsb2cpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyID0gdGhpcy5hY3Rpb24uaXNCb3VuZCA/IHRoaXMuYWN0aW9uLnBhcmFtZXRlcnNbMF0ubmFtZSA6IFwiXCI7XG5cdFx0Y29uc3QgeyBjb250ZXh0VmFsdWVzLCBkZWZhdWx0VmFsdWVzLCBmdW5jdGlvblZhbHVlcywgbWFuaWZlc3RGdW5jdGlvblZhbHVlcyB9ID0gYXdhaXQgdGhpcy5nZXRQcmVEZWZpbmVkVmFsdWVzKFxuXHRcdFx0YmluZGluZ1BhcmFtZXRlcixcblx0XHRcdGRpYWxvZ1xuXHRcdCk7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQmluZGluZyA9IGRpYWxvZy5nZXRPYmplY3RCaW5kaW5nKCkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblxuXHRcdGlmIChiaW5kaW5nUGFyYW1ldGVyKSB7XG5cdFx0XHRvcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihiaW5kaW5nUGFyYW1ldGVyLCBjb250ZXh0VmFsdWVzKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGkgaW4gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcykge1xuXHRcdFx0aWYgKHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3NbaV0ucGFyYW1ldGVyLm5hbWUgIT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJOYW1lID0gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIubmFtZTtcblx0XHRcdFx0Ly8gUGFyYW1ldGVyIHZhbHVlcyBwcm92aWRlZCBpbiB0aGUgY2FsbCBvZiBpbnZva2VBY3Rpb24gb3ZlcnJ1bGUgb3RoZXIgc291cmNlc1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJQcm92aWRlZFZhbHVlID0gdGhpcy5wYXJhbWV0ZXJWYWx1ZXM/LmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQubmFtZSA9PT0gcGFyYW1ldGVyTmFtZSk/LnZhbHVlO1xuXHRcdFx0XHRpZiAocGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIHBhcmFtZXRlclByb3ZpZGVkVmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMuaGFzT3duUHJvcGVydHkocGFyYW1ldGVyTmFtZSkpIHtcblx0XHRcdFx0XHRvcGVyYXRpb25CaW5kaW5nLnNldFBhcmFtZXRlcihwYXJhbWV0ZXJOYW1lLCBtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzW3BhcmFtZXRlck5hbWVdKTtcblx0XHRcdFx0fSBlbHNlIGlmIChkZWZhdWx0VmFsdWVzW2ldICYmIGRlZmF1bHRWYWx1ZXNbaV0udmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIGRlZmF1bHRWYWx1ZXNbaV0udmFsdWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuYWN0aW9uLmFubm90YXRpb25zLkNvbW1vbj8uRGVmYXVsdFZhbHVlc0Z1bmN0aW9uICYmICFkZWZhdWx0VmFsdWVzW2ldLm5vUG9zc2libGVWYWx1ZSkge1xuXHRcdFx0XHRcdGNvbnN0IHNldE9mRnVuY3Rpb25WYWx1ZXMgPSBuZXcgU2V0PHN0cmluZz4oXG5cdFx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKChjb250ZXh0LCBpbmRleCkgPT4gZnVuY3Rpb25WYWx1ZXNbaW5kZXhdLmdldE9iamVjdChwYXJhbWV0ZXJOYW1lKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChzZXRPZkZ1bmN0aW9uVmFsdWVzLnNpemUgPT09IDEgJiYgc2V0T2ZGdW5jdGlvblZhbHVlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly9wYXJhbSB2YWx1ZXMgYXJlIGFsbCB0aGUgc2FtZTpcblx0XHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIEFycmF5LmZyb20oc2V0T2ZGdW5jdGlvblZhbHVlcylbMF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIGF0IGxlYXN0IG9uZSBEZWZhdWx0IFByb3BlcnR5IGlzIGEgTGF0ZSBQcm9wZXJ0eSBhbmQgYW4gZVRhZyBlcnJvciB3YXMgcmFpc2VkLlxuXHRcdGlmIChkZWZhdWx0VmFsdWVzLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZS5sYXRlUHJvcGVydHlFcnJvcikpIHtcblx0XHRcdGNvbnN0IHJlZnJlc2ggPSB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX1JFRlJFU0hcIik7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50KS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfTEFURV9QUk9QRVJUWVwiKSwge1xuXHRcdFx0XHRhY3Rpb25zOiBbcmVmcmVzaCwgTWVzc2FnZUJveC5BY3Rpb24uT0tdLFxuXHRcdFx0XHRlbXBoYXNpemVkQWN0aW9uOiByZWZyZXNoLFxuXHRcdFx0XHRvbkNsb3NlOiAoYWN0aW9uOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRpZiAoYWN0aW9uID09PSByZWZyZXNoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLnBhcmFtZXRlcnMudmlldz8uZ2V0Q29udHJvbGxlcigpLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdFx0XHRcdFx0KGV4dGVuc2lvbkFQSSBhcyBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIHwgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSkucmVmcmVzaCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjI1ZW1cIlxuXHRcdFx0fSBhcyBvYmplY3QpO1xuXHRcdH1cblxuXHRcdC8vIGRlc3Ryb3kgdGhlIG9kYXRhQ29udGV4dEJpbmRpbmcgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb24gY2FsbFxuXHRcdGZvciAoY29uc3QgZnVuY3Rpb25Db250ZXh0IG9mIGZ1bmN0aW9uVmFsdWVzKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nID0gZnVuY3Rpb25Db250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdGlmIChiaW5kaW5nPy5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiKSkge1xuXHRcdFx0XHRiaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgY2xvc2Ugb2YgdGhlIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgYWZ0ZXJDbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmRpYWxvZz8uZGVzdHJveSgpO1xuXHRcdHRoaXMuYnV0dG9uTG9jayA9IGZhbHNlOyAvL25lZWRlZCBoZXJlLCBub3QgaW4gdGhlIHByZXNzIGV2ZW50cyBmaW5hbGx5IGNsYXVzZS4gSW4gY2FzZSB0aGUgVUkgaXMgc2x1Z2dpc2gsIGJlZ2luIGJ1dHRvbiBjb3VsZCBiZSBwcmVzc2VkIGFnYWluLlxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IHVzZWQgZm9yIHRleHQgYW5ub3RhdGlvbiBpbiB0aGUgVmFsdWVIZWxwIGZvciB0aGUgYWN0aW9uIHBhcmFtZXRlciBhbmQgcHJvdmlkZXMgdGhlIGZvcm1hdHRlZCBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBmb3JtIGVsZW1lbnQgY29udHJvbC5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0QWRkaXRpb25hbFZhbHVlKG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0bGV0IHRleHRDb250ZXh0O1xuXG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IGxvY2FsRGF0YVByb3BlcnR5ID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE9iamVjdCgpPy4kTmFtZTtcblx0XHRjb25zdCB2YWx1ZUxpc3RCeVF1YWxpZmllciA9IGF3YWl0IHRoaXMubWV0YU1vZGVsLnJlcXVlc3RWYWx1ZUxpc3RJbmZvKGNvbnRleHRQYXRoLCB0cnVlKTtcblxuXHRcdC8vIExvb2sgZm9yIExvY2FsRGF0YVByb3BlcnR5IGluIFZhbHVlTGlzdFBhcmFtZXRlck91dCBvciBWYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCB3aGVyZSB0aGlzIGlzIHRoZSBwYXJhbWV0ZXIgbmFtZVxuXHRcdC8vIFdlIG9ubHkgY29uc2lkZXIgVGV4dEFubm90YXRpb25zIGZvciB0aGlzIGFjdGlvbiBwYXJhbWV0ZXJcblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXIgPSB2YWx1ZUxpc3RCeVF1YWxpZmllcltcIlwiXS5QYXJhbWV0ZXJzLmZpbmQoXG5cdFx0XHQocGFyYW1ldGVyOiBBbm5vdGF0aW9uVmFsdWVMaXN0UGFyYW1ldGVyKSA9PlxuXHRcdFx0XHRwYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0KHBhcmFtZXRlci4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVyT3V0XCIgJiZcblx0XHRcdFx0XHRwYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggPT09IGxvY2FsRGF0YVByb3BlcnR5KVxuXHRcdCk7XG5cblx0XHRpZiAodmFsdWVMaXN0UGFyYW1ldGVyICYmIHZhbHVlTGlzdFBhcmFtZXRlci5WYWx1ZUxpc3RQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgdGV4dFByb3BlcnR5ID0gdmFsdWVMaXN0UGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0Ly8gTm93IHdlIGhhdmUgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgaXMgdGhlIGFubm90YXRlZCB0ZXh0XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBgLyR7dmFsdWVMaXN0QnlRdWFsaWZpZXJbXCJcIl0uQ29sbGVjdGlvblBhdGh9LyR7dGV4dFByb3BlcnR5fWA7XG5cdFx0XHRjb25zdCBwcm9wQW5ub3RhdGlvbnMgPSB0aGlzLm1ldGFNb2RlbC5nZXRPYmplY3QoYCR7cHJvcGVydHlQYXRofUBgKTtcblxuXHRcdFx0aWYgKHByb3BBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pIHtcblx0XHRcdFx0Y29uc3QgdGV4dFByb3AgPSBwcm9wQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl07XG5cdFx0XHRcdGNvbnN0IHRleHRQYXRoID0gYC8ke3ZhbHVlTGlzdEJ5UXVhbGlmaWVyW1wiXCJdLkNvbGxlY3Rpb25QYXRofS8ke3RleHRQcm9wLiRQYXRofWA7XG5cdFx0XHRcdHRleHRDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGV4dFBhdGgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGV4dENvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuIEFubm90YXRpb25IZWxwZXIuZm9ybWF0KHRleHRDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHRleHRDb250ZXh0IH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB2YWx1ZSBiaW5kaW5nIGZvciBhbiBhY3Rpb24gcGFyYW1ldGVyLiBXZSBhZGQgc3BlY2lhbCBoYW5kbGluZyBmb3IgY3VycmVuY3kgYW5kIHVuaXQgYmVhdXNlIHRoZXkgYXJlIG5vdFxuXHQgKiBwYXJ0IG9mIHRoZSBhbm5vdGF0aW9uIGhlbHBlciBmb3JtYXQgZnVuY3Rpb24uXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBmb3IgdGhlIHZhbHVlIG9mIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRBUERpYWxvZ0JpbmRpbmdWYWx1ZShcblx0XHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcixcblx0XHRwYXJhbWV0ZXJDb250ZXh0OiBDb250ZXh0LFxuXHRcdG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuXHQpOiBQcm9taXNlPENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgc3RyaW5nPiB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AYCk7XG5cdFx0bGV0IHByb3BlcnR5T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT47XG5cblx0XHRpZiAoXG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLklTT0N1cnJlbmN5XCJdIHx8XG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlVuaXRcIl1cblx0XHQpIHtcblx0XHRcdGNvbnN0IGFjdGlvbk1ldGFQYXRoID0gdGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0XHQ/IGAke3RoaXMubWV0YU1vZGVsLmdldE1ldGFQYXRoKHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXS5nZXRQYXRoKCkpfS8ke2NvbnZlcnRUeXBlcyh0aGlzLm1ldGFNb2RlbCkubmFtZXNwYWNlfS4ke1xuXHRcdFx0XHRcdFx0dGhpcy5hY3Rpb24ubmFtZVxuXHRcdFx0XHQgIH1gXG5cdFx0XHRcdDogYC8ke3RoaXMuYWN0aW9uLm5hbWV9YDtcblx0XHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7YWN0aW9uTWV0YVBhdGh9LyR7cGFyYW1ldGVyLm5hbWV9YCkhO1xuXHRcdFx0cHJvcGVydHlPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblx0XHRcdHJldHVybiBnZXRWYWx1ZUJpbmRpbmcocHJvcGVydHlPYmplY3RQYXRoLCB7fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBBbm5vdGF0aW9uSGVscGVyLmZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFpR3FCQSxxQkFBcUI7SUE0QnpDLFNBQUFBLHNCQUNrQkMsTUFBYyxFQUNkQyxVQWFoQixFQUNnQkMsZUFBc0QsRUFDdERDLGFBQWlDLEVBQ2pDQyxjQUE4QixFQUM5QztNQXhDRjtNQUNBO01BQ0E7TUFBQSxLQUNRQyxZQUFZLEdBQUcsS0FBSztNQUFBLEtBTXBCQyxVQUFVLEdBQUcsS0FBSztNQUFBLEtBSVRDLG9CQUFvQixHQUE2RCxFQUFFO01BQUEsS0FFbkZDLGNBQWMsR0FBYyxJQUFJQyxTQUFTLENBQUM7UUFDMURDLFlBQVksRUFBRSxDQUFDO01BQ2hCLENBQUMsQ0FBQztNQUFBLEtBS2dCVixNQUFjLEdBQWRBLE1BQWM7TUFBQSxLQUNkQyxVQWFoQixHQWJnQkEsVUFhaEI7TUFBQSxLQUNnQkMsZUFBc0QsR0FBdERBLGVBQXNEO01BQUEsS0FDdERDLGFBQWlDLEdBQWpDQSxhQUFpQztNQUFBLEtBQ2pDQyxjQUE4QixHQUE5QkEsY0FBOEI7TUFFL0MsSUFBSSxDQUFDTyxVQUFVLEdBQUdDLFlBQVksQ0FBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQ2IsTUFBTSxDQUFDO01BQ3pELElBQUksQ0FBQ2MsU0FBUyxHQUFHLElBQUksQ0FBQ2IsVUFBVSxDQUFDYyxLQUFLLENBQUNDLFlBQVksQ0FBQyxDQUFDO01BQ3JELElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUksQ0FBQ2hCLFVBQVUsQ0FBQ2lCLElBQUksR0FBR0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDbEIsVUFBVSxDQUFDaUIsSUFBSSxDQUFDLEdBQUdDLGdCQUFnQixDQUFDLElBQUksQ0FBQ2xCLFVBQVUsQ0FBQ21CLFlBQVksQ0FBQztNQUNuSSxJQUFJLENBQUND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
|
|
1099
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwicGFyYW1ldGVyVmFsdWVzIiwiZW50aXR5U2V0TmFtZSIsIm1lc3NhZ2VIYW5kbGVyIiwiaXNEaWFsb2dPcGVuIiwiYnV0dG9uTG9jayIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicGFyYW1ldGVyTW9kZWwiLCJKU09OTW9kZWwiLCIkZGlzcGxheU1vZGUiLCJhY3Rpb25OYW1lIiwiYWN0aW9uSGVscGVyIiwiZ2V0QWN0aW9uTmFtZSIsIm1ldGFNb2RlbCIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicmVzb3VyY2VNb2RlbCIsInZpZXciLCJnZXRSZXNvdXJjZU1vZGVsIiwiYXBwQ29tcG9uZW50IiwicGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlIiwicGFyYW1ldGVyc1ZhbHVlc1JlamVjdCIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0UGFyYW1ldGVyRWRpdE1vZGUiLCJwYXJhbWV0ZXIiLCJhbm5vdGF0aW9ucyIsImZpZWxkQ29udHJvbCIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsImltbXV0YWJsZSIsIkNvcmUiLCJJbW11dGFibGUiLCJ2YWx1ZU9mIiwiY29tcHV0ZWQiLCJDb21wdXRlZCIsImNvbnN0YW50IiwiRmllbGRFZGl0TW9kZSIsIlJlYWRPbmx5IiwiaWZFbHNlIiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJpc0Rpc2FibGVkRXhwcmVzc2lvbiIsIkRpc2FibGVkIiwiRWRpdGFibGUiLCJjcmVhdGVGb3JtRWxlbWVudCIsImFjdGlvbk1ldGFQYXRoIiwiaXNCb3VuZCIsImdldE1ldGFQYXRoIiwiY29udGV4dHMiLCJnZXRQYXRoIiwiY29udmVydFR5cGVzIiwibmFtZXNwYWNlIiwibmFtZSIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJmaWVsZCIsImxhYmVsIiwiTGFiZWwiLCJnZXRUZXh0IiwidG9TdHJpbmciLCJzdHJlYW1QYXJhbWV0ZXIiLCJpc0NvbGxlY3Rpb24iLCJjcmVhdGVNdWx0aUZpZWxkIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJnZXRTdHJlYW1Qcm9wZXJ0eSIsImNyZWF0ZUZpbGVVcGxvYWRlciIsImNyZWF0ZUZpZWxkIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjaGlsZHJlbiIsIl9qc3giLCJpZCIsImdlbmVyYXRlIiwidGV4dCIsInBhcmFtZXRlckNvbnRleHQiLCJkaXNwbGF5IiwiRmllbGRIZWxwZXIiLCJnZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQiLCJnZXRPYmplY3QiLCJjb250ZXh0IiwiZXJyIiwiTG9nIiwid2FybmluZyIsInBsYWNlSG9sZGVyIiwiVUkiLCJQbGFjZWhvbGRlciIsInBsYWNlSG9sZGVyRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwicGFyYW1ldGVyVHlwZSIsIkVETV9UWVBFX01BUFBJTkciLCJNdWx0aVZhbHVlRmllbGQiLCJwbGFjZWhvbGRlciIsIml0ZW1zIiwicGF0aCIsImRlbGVnYXRlIiwiZWRpdE1vZGUiLCJ3aWR0aCIsIm11bHRpcGxlTGluZXMiLCJNdWx0aUxpbmVUZXh0IiwicmVxdWlyZWQiLCJpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiIsInZhbHVlSGVscCIsImhhc1ZhbHVlSGVscCIsImNoYW5nZSIsImUiLCJoYW5kbGVGaWVsZENoYW5nZSIsInZpc2libGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsImFyaWFMYWJlbGxlZEJ5IiwiZGVwZW5kZW50cyIsImNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscCIsIk11bHRpVmFsdWVGaWVsZEl0ZW0iLCJkZXNjcmlwdGlvbiIsImZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyIsIkFjY2VwdGFibGVNZWRpYVR5cGVzIiwiYWNjZXB0ZWRUeXBlcyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImpvaW4iLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwiZXZlbnQiLCJmaWxlVXBsb2FkZXIiLCJnZXRTb3VyY2UiLCJnaXZlblR5cGUiLCJnZXRQYXJhbWV0ZXIiLCJnZXRNaW1lVHlwZSIsInNob3dUeXBlTWlzbWF0Y2hEaWFsb2ciLCJmaWxlTWF4aW11bVNpemUiLCJjYWxjdWxhdGVNQmZyb21CeXRlIiwibWF4TGVuZ3RoIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJzaG93RmlsZVNpemVFeGNlZWREaWFsb2ciLCJnZXRNYXhpbXVtRmlsZVNpemUiLCJ0b0ZpeGVkIiwib25VcGxvYWRDb21wbGV0ZSIsImRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkIiwiRmlsZVVwbG9hZGVyIiwiYnV0dG9uT25seSIsImljb25Pbmx5IiwibXVsdGlwbGUiLCJ0b29sdGlwIiwiaWNvbiIsInN0eWxlIiwic2VuZFhIUiIsInVzZU11bHRpcGFydCIsInNhbWVGaWxlbmFtZUFsbG93ZWQiLCJ1cGxvYWRPbkNoYW5nZSIsIm1pbWVUeXBlIiwidHlwZU1pc3NtYXRjaCIsIm1heGltdW1GaWxlU2l6ZSIsImZpbGVTaXplRXhjZWVkIiwiaHR0cFJlcXVlc3RNZXRob2QiLCJGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCIsIlB1dCIsInVwbG9hZENvbXBsZXRlIiwiaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlIiwiYWRkaXRpb25hbFZhbHVlIiwiYmluZGluZ1ZhbHVlIiwiZ2V0QVBEaWFsb2dCaW5kaW5nVmFsdWUiLCJnZXRBZGRpdGlvbmFsVmFsdWUiLCJGaWVsZCIsInBheWxvYWQiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwidmFsdWUiLCJpc011bHRpTGluZVRleHQiLCJWYWx1ZUhlbHAiLCJwcm9wZXJ0eVBhdGgiLCJnZXRUYXJnZXROYXZpZ2F0aW9uUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicXVhbGlmaWVycyIsInZhbHVlSGVscFF1YWxpZmllciIsInZhbGlkYXRlSW5wdXQiLCJyZXF1aXJlc1ZhbGlkYXRpb24iLCJ0eXBlYWhlYWQiLCJQb3BvdmVyIiwiTVRhYmxlIiwiY2FzZVNlbnNpdGl2ZSIsInVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyIsImVudGl0eUNvbnRhaW5lciIsIkNhcGFiaWxpdGllcyIsIkZpbHRlckZ1bmN0aW9ucyIsIk1vZGVsSGVscGVyIiwiaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIiwidXNlQXNWYWx1ZUhlbHAiLCJWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMiLCJkaWFsb2ciLCJjcmVhdGVGaWVsZFZIRGlhbG9nIiwiVkhEaWFsb2ciLCJmaWVsZFByb21pc2UiLCJwYXJhbWV0ZXJJbmZvIiwiZmluZCIsImFjdGlvblBhcmFtZXRlckluZm8iLCJ2YWxpZGF0aW9uUHJvbWlzZSIsInJlbW92ZU1lc3NhZ2VzRm9yUGFyYW1ldGVyIiwicGFyYW1ldGVyc1ZhbHVlcyIsImhhc0Vycm9yIiwiZXJyb3IiLCJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlIiwiZmlsZXMiLCJnZXRCYXNlNjRGaWxlIiwiZ2V0TWltZVR5cGVQYXRoIiwiZ2V0RmlsZU5hbWVQYXRoIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJNZWRpYVR5cGUiLCJ0eXBlUmVmZXJlbmNlIiwicHJvcGVydGllcyIsInByb3BlcnR5IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsInJlc3VsdCIsInNwbGl0IiwicmVhZEFzRGF0YVVSTCIsIml0ZW0iLCJtZXNzYWdlcyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJjb250cm9sSWQiLCJyZWxldmFudE1lc3NhZ2VzIiwiZmlsdGVyIiwibXNnIiwiZ2V0Q29udHJvbElkcyIsInNvbWUiLCJpbmNsdWRlcyIsInJlbW92ZU1lc3NhZ2VzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnRzIiwiZ2V0RGlhbG9nIiwiY3JlYXRlRGlhbG9nIiwiZGlhbG9nQ29udGVudHMiLCJkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzIiwiYWN0aW9uUGFyYW1ldGVycyIsInNsaWNlIiwiT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzIiwiYWN0aW9uUGFyYW1ldGVyR3JvdXBzIiwiZm9yRWFjaCIsImZhY2V0IiwiZmFjZXRUaXRsZSIsIiRUeXBlIiwiaGFzRmllbGRHcm91cFRhcmdldCIsImZpZWxkR3JvdXAiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZ3JvdXBlZEFjdGlvblBhcmFtZXRlcnMiLCJEYXRhIiwiZ3JvdXAiLCJwdXNoIiwiVmFsdWUiLCJkYXRhIiwiZ2V0R3JvdXBGb3JtIiwiYWxsIiwiYmluZCIsImZvcm1EYXRhIiwicGFyYW1ldGVyR3JvdXAiLCJvcEZhY2V0cyIsImRpYWxvZ0NvbnRlbnQiLCJUaXRsZSIsImVsZW1lbnQiLCJvcEZhY2V0IiwicmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvIiwibWVzc2FnZVN0cmlwIiwiZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCIsImVuZEJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwib25DYW5jZWwiLCJEaWFsb2ciLCJ0aXRsZSIsImdldFRpdGxlVGV4dCIsImVzY2FwZUhhbmRsZXIiLCJkcmFnZ2FibGUiLCJyZXNpemFibGUiLCJhZnRlckNsb3NlIiwiYmVmb3JlT3BlbiIsImFmdGVyT3BlbiIsImluaXRpYWxGb2N1cyIsImJlZ2luQnV0dG9uIiwiaXNDcmVhdGVBY3Rpb24iLCJnZXRCZWdpbkJ1dHRvbkxhYmVsIiwib25BcHBseSIsImNvbnRlbnQiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsIlNpbXBsZUZvcm0iLCJjb2x1bW5zTSIsImVkaXRhYmxlIiwibGFiZWxTcGFuTCIsImxhYmVsU3Bhbk0iLCJiaW5kaW5nIiwiYWN0aW9uTGFiZWwiLCJrZXkiLCJkZWZhdWx0S2V5IiwiZ2V0T3ZlcnJpZGRlblRleHQiLCJib3VuZEFjdGlvbk5hbWUiLCJwb3AiLCJzdWZmaXhSZXNvdXJjZUtleSIsImNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImdldE9iamVjdEJpbmRpbmciLCJnZXRQYXJhbWV0ZXJDb250ZXh0IiwiQnVzeUxvY2tlciIsImxvY2siLCJ2YWxpZGF0ZVByb3BlcnRpZXMiLCJ1bmxvY2siLCJuZXdWYWx1ZXNEaWN0aW9uYXJ5IiwiT2JqZWN0IiwiYXNzaWduIiwidmFsdWVzIiwiZ2V0TW9kZWwiLCJnZXRQcm9wZXJ0eSIsInBhcmFtVmFsdWUiLCJLZXkiLCJpc05ld1ZhbHVlIiwic2V0UHJvcGVydHkiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInJlc2V0U3RhdGUiLCJ1bmxvY2tEaWFsb2ciLCJ1cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yIiwibGVuZ3RoIiwid2FybmluZ0NvbnRleHQiLCJpbmZvQ29udGV4dCIsImVycm9uZW91c0N0eCIsImdldE1lc3NhZ2VzIiwiZ2V0VHlwZSIsIk1lc3NhZ2VUeXBlIiwiV2FybmluZyIsIkluZm9ybWF0aW9uIiwiRXJyb3IiLCJjb250ZXh0VG9Vc2UiLCJzZXRCaW5kaW5nQ29udGV4dCIsImlzTG9ja2VkIiwiRkVMaWJyYXJ5IiwiQ29uc3RhbnRzIiwiQ2FuY2VsQWN0aW9uRGlhbG9nIiwiY2xvc2VEaWFsb2ciLCJldmVudHMiLCJvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZCIsImkiLCJjbG9zZSIsIm9wZW5EaWFsb2ciLCJDb21tb25VdGlscyIsInNldFVzZXJEZWZhdWx0cyIsInNldE1vZGVscyIsImFkZERlcGVuZGVudCIsInNldE9wZXJhdGlvbkRlZmF1bHRWYWx1ZXMiLCJvcGVuIiwic2V0TW9kZWwiLCJiaW5kRWxlbWVudCIsIl9ldmVudCIsIndhaXRGb3JQYXJhbWV0ZXJzVmFsdWVzIiwiaXNPcGVuIiwiZ2V0UGFyYW1ldGVyRGVmYXVsdFZhbHVlIiwiYmluZGluZ1BhcmFtZXRlciIsIm9wZXJhdGlvbkJpbmRpbmciLCJwYXJhbWV0ZXJNb2RlbERhdGEiLCJwYXJhbU5hbWUiLCJkZWZhdWx0VmFsdWUiLCJQYXJhbWV0ZXJEZWZhdWx0VmFsdWUiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsInBhdGhGb3JDb250ZXh0IiwicmVwbGFjZSIsInJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSIsInJlcXVlc3RQcm9wZXJ0eSIsIm5vUG9zc2libGVWYWx1ZSIsImxhdGVQcm9wZXJ0eUVycm9yIiwiZ2V0TWFuaWZlc3RGdW5jdGlvblZhbHVlcyIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJsb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZCIsImdldFByZURlZmluZWRWYWx1ZXMiLCJib3VuZEZ1bmN0aW9uTmFtZSIsIkRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInJlcXVlc3RDb250ZXh0T2JqZWN0IiwiZnVuY3Rpb25QYXJhbXMiLCJib3VuZEZ1bmN0aW9uIiwiT3BlcmF0aW9uIiwiZ2V0T3BlcmF0aW9uRnJvbU5hbWUiLCJPRGF0YU9wZXJhdGlvbiIsImVuaGFuY2Ukc2VsZWN0IiwiZ3JvdXBJZCIsImV4ZWN1dGUiLCJpc0Z1bGZpbGxlZCIsImJvdW5kQ29udGV4dCIsInJlcXVlc3RPYmplY3QiLCJjb250ZXh0VmFsdWVzIiwicHJvbWlzZXMiLCJkZWZhdWx0VmFsdWVzIiwiZnVuY3Rpb25WYWx1ZXMiLCJtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzIiwiZmlyc3RWaXNpYmxlUGFyYW1ldGVyIiwiZ2V0VmlzaWJsZSIsImZpcnN0RmllbGQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJvblBhcmFtZXRlckRpYWxvZ09wZW5lZCIsImlzTXVsdGlWYWx1ZSIsInNldFBhcmFtZXRlciIsInBhcmFtZXRlck5hbWUiLCJwYXJhbWV0ZXJQcm92aWRlZFZhbHVlIiwiaGFzT3duUHJvcGVydHkiLCJzZXRPZkZ1bmN0aW9uVmFsdWVzIiwiU2V0IiwiaW5kZXgiLCJzaXplIiwibmV4dCIsInJlZnJlc2giLCJNZXNzYWdlQm94IiwiYWN0aW9ucyIsIkFjdGlvbiIsIk9LIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJleHRlbnNpb25BUEkiLCJnZXRDb250cm9sbGVyIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiY29udGVudFdpZHRoIiwiZnVuY3Rpb25Db250ZXh0IiwiZ2V0QmluZGluZyIsImlzQSIsImRlc3Ryb3kiLCJvSW50ZXJmYWNlIiwidGV4dENvbnRleHQiLCJjb250ZXh0UGF0aCIsImxvY2FsRGF0YVByb3BlcnR5IiwiJE5hbWUiLCJ2YWx1ZUxpc3RCeVF1YWxpZmllciIsInJlcXVlc3RWYWx1ZUxpc3RJbmZvIiwidmFsdWVMaXN0UGFyYW1ldGVyIiwiUGFyYW1ldGVycyIsIkxvY2FsRGF0YVByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidGV4dFByb3BlcnR5IiwiQ29sbGVjdGlvblBhdGgiLCJwcm9wQW5ub3RhdGlvbnMiLCJ0ZXh0UHJvcCIsInRleHRQYXRoIiwiJFBhdGgiLCJBbm5vdGF0aW9uSGVscGVyIiwiZm9ybWF0IiwicHJvcGVydHlPYmplY3RQYXRoIiwiZ2V0VmFsdWVCaW5kaW5nIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPcGVyYXRpb25QYXJhbWV0ZXJEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tcGxleFR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJpbWl0aXZlVHlwZSwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFjdGlvbiwgdHlwZSBBY3Rpb25QYXJhbWV0ZXIgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgUHJvcGVydHlBbm5vdGF0aW9uc19Db3JlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db3JlX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIEZpZWxkR3JvdXBUeXBlLCBSZWZlcmVuY2VGYWNldCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdEVETV9UWVBFX01BUFBJTkcsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRub3QsXG5cdHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXJJbmZvIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE9EYXRhT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09EYXRhT3BlcmF0aW9uXCI7XG5pbXBvcnQgT3BlcmF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL09wZXJhdGlvblwiO1xuaW1wb3J0IGFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvb3BlcmF0aW9ucy9hY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNGaWVsZEdyb3VwVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgaXNGdWxmaWxsZWQsIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0TmF2aWdhdGlvblBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbiwgaXNEaXNhYmxlZEV4cHJlc3Npb24sIGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAsIGlzTXVsdGlMaW5lVGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyByZXF1aXJlc1ZhbGlkYXRpb24sIHVzZUNhc2VTZW5zaXRpdmVGaWx0ZXJSZXF1ZXN0cyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUhlbHBUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0RXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIHsgRGlhbG9nJEJlZm9yZU9wZW5FdmVudCB9IGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC91aS9jb3JlL1RpdGxlXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IFNpbXBsZUZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9TaW1wbGVGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aVZhbHVlRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvZmllbGQvTXVsdGlWYWx1ZUZpZWxkSXRlbVwiO1xuaW1wb3J0IFZIRGlhbG9nIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9EaWFsb2dcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9Qb3BvdmVyXCI7XG5pbXBvcnQgTVRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudFxufSBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2RcIjtcbmltcG9ydCB7IGRpc3BsYXlNZXNzYWdlRm9yRmFpbGVkVXBsb2FkLCBzaG93RmlsZVNpemVFeGNlZWREaWFsb2csIHNob3dUeXBlTWlzbWF0Y2hEaWFsb2cgfSBmcm9tIFwiLi4vaW50ZXJuYWwvaGVscGVycy9VcGxvYWRcIjtcblxuaW1wb3J0IHsgZ2V0VmFsdWVCaW5kaW5nIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG50eXBlIFBhcmFtZXRlckRlZmF1bHRWYWx1ZSA9IHsgcGFyYW1OYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duOyBsYXRlUHJvcGVydHlFcnJvcj86IGJvb2xlYW47IG5vUG9zc2libGVWYWx1ZT86IGJvb2xlYW4gfTtcblxudHlwZSBFbGVtZW50R3JvdXAgPSB7IGZhY2V0VGl0bGU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQ7IGRhdGE6IEFjdGlvblBhcmFtZXRlcltdIH07XG50eXBlIEVsZW1lbnRHcm91cENvbnZlcnRlZCA9IHsgZmFjZXRUaXRsZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPiB8IHVuZGVmaW5lZDsgZGF0YTogRGlhbG9nQ29udGVudFR5cGVzW10gfTtcblxudHlwZSBGb3JtRWxlbWVudFR5cGUgPSBbTGFiZWwsIEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkXTtcblxudHlwZSBEaWFsb2dDb250ZW50VHlwZXMgPSB7XG5cdGZvcm1FbGVtZW50czogRm9ybUVsZW1lbnRUeXBlO1xuXHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcjtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY3Rpb25QYXJhbWV0ZXJEaWFsb2cge1xuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNQcm9taXNlOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+PjtcblxuXHRwcml2YXRlIHBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlITogKHJlc29sdmVWYWx1ZTogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT4pID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBwYXJhbWV0ZXJzVmFsdWVzUmVqZWN0ITogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkO1xuXG5cdC8vIHRoZSBkaWFsb2cgaXMgY29uc2lkZXJlZCBhcyBjbG9zZWQgYWZ0ZXIgdGhlIGFmdGVyQ2xvc2UgZXZlbnQgaGFzIGJlZW4gdHJpZ2dlcmVkXG5cdC8vIHRoaXMgaXMgYXN5bmNocm9ub3VzLCBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGRpYWxvZyBzdGF0ZSBzaW5jZSB0aGUgbWVzc2FnZSBoYW5kbGluZyBpcyBzeW5jaHJvbm91c1xuXHQvLyBhbmQgd2UgbmVlZCB0byBrbm93IGlmIHRoZSBkaWFsb2cgaXMgb3BlbiBvciBjbG9zZWRcblx0cHJpdmF0ZSBpc0RpYWxvZ09wZW4gPSBmYWxzZTtcblxuXHRwcml2YXRlIGRpYWxvZzogRGlhbG9nIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nO1xuXG5cdHByaXZhdGUgYnV0dG9uTG9jayA9IGZhbHNlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIHJlYWRvbmx5IGFjdGlvblBhcmFtZXRlckluZm9zOiAoQWN0aW9uUGFyYW1ldGVySW5mbyAmIHsgcGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIgfSlbXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyTW9kZWw6IEpTT05Nb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdCRkaXNwbGF5TW9kZToge31cblx0fSk7XG5cblx0cHJpdmF0ZSByZWFkb25seSByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uOiBBY3Rpb24sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJzOiB7XG5cdFx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0XHRcdGNvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0cGFyYW1ldGVyc1ZhbHVlczogUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHRpc0NyZWF0ZUFjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0dmlldz86IEZFVmlldztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25QYXJhbWV0ZXJEaWFsb2dPcGVuZWQ/OiAoKSA9PiB2b2lkO1xuXHRcdFx0XHRvblBhcmFtZXRlckRpYWxvZ0Nsb3NlZD86ICgpID0+IHZvaWQ7XG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0cHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCB1bmRlZmluZWQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBlbnRpdHlTZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXJcblx0KSB7XG5cdFx0dGhpcy5hY3Rpb25OYW1lID0gYWN0aW9uSGVscGVyLmdldEFjdGlvbk5hbWUodGhpcy5hY3Rpb24pO1xuXHRcdHRoaXMubWV0YU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdHRoaXMucmVzb3VyY2VNb2RlbCA9IHRoaXMucGFyYW1ldGVycy52aWV3ID8gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnBhcmFtZXRlcnMudmlldykgOiBnZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpO1xuXHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1JlamVjdCA9IHJlamVjdDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGJpbmRpbmcgZXhwcmVzc2lvbiBvZiB0aGUgZWRpdCBtb2RlIHByb3BlcnR5IGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24uXG5cdCAqL1xuXHRwcml2YXRlIGdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPEZpZWxkRWRpdE1vZGU+IHtcblx0XHRjb25zdCBhbm5vdGF0aW9ucyA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucyxcblx0XHRcdGZpZWxkQ29udHJvbCA9IGFubm90YXRpb25zLkNvbW1vbj8uRmllbGRDb250cm9sLFxuXHRcdFx0aW1tdXRhYmxlID0gKGFubm90YXRpb25zLkNvcmUgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUpPy5JbW11dGFibGU/LnZhbHVlT2YoKSxcblx0XHRcdGNvbXB1dGVkID0gKGFubm90YXRpb25zLkNvcmUgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25zX0NvcmUpPy5Db21wdXRlZD8udmFsdWVPZigpO1xuXG5cdFx0aWYgKGltbXV0YWJsZSB8fCBjb21wdXRlZCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KEZpZWxkRWRpdE1vZGUuUmVhZE9ubHkpO1xuXHRcdH0gZWxzZSBpZiAoZmllbGRDb250cm9sKSB7XG5cdFx0XHRyZXR1cm4gaWZFbHNlKFxuXHRcdFx0XHRpc1JlYWRPbmx5RXhwcmVzc2lvbihwYXJhbWV0ZXIpLFxuXHRcdFx0XHRGaWVsZEVkaXRNb2RlLlJlYWRPbmx5LFxuXHRcdFx0XHRpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ocGFyYW1ldGVyKSwgRmllbGRFZGl0TW9kZS5EaXNhYmxlZCwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZSlcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjb25zdGFudChGaWVsZEVkaXRNb2RlLkVkaXRhYmxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBmb3JtIGVsZW1lbnQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUaGUgZm9ybSBlbGVtZW50IGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUZvcm1FbGVtZW50KHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTxGb3JtRWxlbWVudFR5cGU+IHtcblx0XHRjb25zdCBhY3Rpb25NZXRhUGF0aCA9IHRoaXMuYWN0aW9uLmlzQm91bmRcblx0XHRcdD8gYCR7dGhpcy5tZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldFBhdGgoKSl9LyR7Y29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKS5uYW1lc3BhY2V9LiR7XG5cdFx0XHRcdFx0dGhpcy5hY3Rpb24ubmFtZVxuXHRcdFx0ICB9YFxuXHRcdFx0OiBgLyR7dGhpcy5hY3Rpb24ubmFtZX1gO1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gdGhpcy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7YWN0aW9uTWV0YVBhdGh9LyR7cGFyYW1ldGVyLm5hbWV9YCkhO1xuXHRcdGxldCBmaWVsZDtcblx0XHRsZXQgbGFiZWwgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbFxuXHRcdFx0PyB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuQ29tbW9uLkxhYmVsLnRvU3RyaW5nKCkpXG5cdFx0XHQ6IHBhcmFtZXRlci5uYW1lO1xuXHRcdGxldCBzdHJlYW1QYXJhbWV0ZXI7XG5cdFx0aWYgKHBhcmFtZXRlci5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdGZpZWxkID0gYXdhaXQgdGhpcy5jcmVhdGVNdWx0aUZpZWxkKHBhcmFtZXRlciwgbWV0YUNvbnRleHQpO1xuXHRcdH0gZWxzZSBpZiAoIXBhcmFtZXRlci50eXBlLnN0YXJ0c1dpdGgoXCJFZG0uXCIpICYmIHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0c3RyZWFtUGFyYW1ldGVyID0gdGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpO1xuXHRcdFx0Ly8gY2FsY3VsYXRlIGxhYmVsIGZyb20gdGhlIHN0cmVhbSBwcm9wZXJ0eSB3aXRoaW4gdGhlIENvbXBsZXhUeXBlXG5cdFx0XHRsYWJlbCA9IHN0cmVhbVBhcmFtZXRlcj8uYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbFxuXHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KHN0cmVhbVBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24uTGFiZWwudG9TdHJpbmcoKSlcblx0XHRcdFx0OiAoc3RyZWFtUGFyYW1ldGVyPy5uYW1lIGFzIHN0cmluZyk7XG5cdFx0XHRmaWVsZCA9IHRoaXMuY3JlYXRlRmlsZVVwbG9hZGVyKHBhcmFtZXRlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpZWxkID0gYXdhaXQgdGhpcy5jcmVhdGVGaWVsZChwYXJhbWV0ZXIsIG1ldGFDb250ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdDxMYWJlbCBpZD17Z2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZSwgc3RyZWFtUGFyYW1ldGVyPy5uYW1lLCBcIkxhYmVsXCJdKX0gdGV4dD17bGFiZWx9IC8+XG5cdFx0XHRcdHtmaWVsZH1cblx0XHRcdDwvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgbXVsdGkgZmllbGQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIG11bHRpIHZhbHVlIGZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZU11bHRpRmllbGQocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIsIHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPE11bHRpVmFsdWVGaWVsZD4ge1xuXHRcdGxldCBkaXNwbGF5ID0gXCJWYWx1ZVwiO1xuXHRcdHRyeSB7XG5cdFx0XHRkaXNwbGF5ID0gYXdhaXQgRmllbGRIZWxwZXIuZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0KHBhcmFtZXRlckNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogcGFyYW1ldGVyQ29udGV4dCB9KTtcblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdExvZy53YXJuaW5nKGBQYXJhbWV0ZXIgZGlhbG9nIG11bHRpZmllbGQ6IGRpc3BsYXkgZm9ybWF0IGNvdWxkbid0IGJlIGNhbGN1bGF0ZWQgZm9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nOiAke2Vycn1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXIgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBsYWNlaG9sZGVyIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBsYWNlSG9sZGVyRXhwcmVzc2lvbiA9IHBsYWNlSG9sZGVyID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBsYWNlSG9sZGVyKSkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgcGFyYW1ldGVyVHlwZSA9IEVETV9UWVBFX01BUFBJTkc/LltwYXJhbWV0ZXIudHlwZV0/LnR5cGU7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNdWx0aVZhbHVlRmllbGRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKX1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyRXhwcmVzc2lvbn1cblx0XHRcdFx0aXRlbXM9e3sgcGF0aDogYG12ZnZpZXc+LyR7cGFyYW1ldGVyLm5hbWV9YCB9fVxuXHRcdFx0XHRkZWxlZ2F0ZT17eyBuYW1lOiBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL011bHRpVmFsdWVQYXJhbWV0ZXJEZWxlZ2F0ZVwiIH19XG5cdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdGVkaXRNb2RlPXt0aGlzLmdldFBhcmFtZXRlckVkaXRNb2RlKHBhcmFtZXRlcil9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdG11bHRpcGxlTGluZXM9e3BhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlfVxuXHRcdFx0XHRyZXF1aXJlZD17Y29tcGlsZUV4cHJlc3Npb24oaXNBY3Rpb25QYXJhbWV0ZXJSZXF1aXJlZEV4cHJlc3Npb24ocGFyYW1ldGVyLCB0aGlzLmFjdGlvbiwgY29udmVydFR5cGVzKHRoaXMubWV0YU1vZGVsKSkpfVxuXHRcdFx0XHR2YWx1ZUhlbHA9e2hhc1ZhbHVlSGVscChwYXJhbWV0ZXIpID8gZ2VuZXJhdGUoW3RoaXMuYWN0aW9uTmFtZSwgcGFyYW1ldGVyLm5hbWUsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRjaGFuZ2U9e2FzeW5jIChlKTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmhhbmRsZUZpZWxkQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHRcdHZpc2libGU9e2NvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocGFyYW1ldGVyLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKX1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lLCBcIkxhYmVsXCJdKV19XG5cdFx0XHRcdGRlcGVuZGVudHM9e3RoaXMuY3JlYXRlUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRJdGVtIGtleT17YHtwYXRoOiAnbXZmdmlldz5LZXknLCB0eXBlOicke3BhcmFtZXRlclR5cGV9J31gfSBkZXNjcmlwdGlvbj1cInttdmZ2aWV3PkRlc2N9XCIgLz5cblx0XHRcdDwvTXVsdGlWYWx1ZUZpZWxkPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgRmlsZVVwbG9hZGVyIGNvbnRyb2wgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIEZpbGVVcGxvYWRlciBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVGaWxlVXBsb2FkZXIocGFyYW1ldGVyOiBBY3Rpb25QYXJhbWV0ZXIpOiBGaWxlVXBsb2FkZXIge1xuXHRcdGxldCBmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXM7XG5cdFx0aWYgKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXMpIHtcblx0XHRcdGNvbnN0IGFjY2VwdGVkVHlwZXMgPSBBcnJheS5mcm9tKFxuXHRcdFx0XHR0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/LkFjY2VwdGFibGVNZWRpYVR5cGVzIGFzIHVua25vd24gYXMgc3RyaW5nW11cblx0XHRcdCkubWFwKCh0eXBlKSA9PiBgJyR7dHlwZX0nYCk7XG5cdFx0XHRmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXMgPSBgez1vZGF0YS5jb2xsZWN0aW9uKFske2FjY2VwdGVkVHlwZXMuam9pbihcIixcIil9XSl9YDtcblx0XHR9XG5cdFx0Y29uc3QgaGFuZGxlVHlwZU1pc3NtYXRjaCA9IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRjb25zdCBnaXZlblR5cGUgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJtaW1lVHlwZVwiKTtcblx0XHRcdGNvbnN0IGFjY2VwdGVkVHlwZXMgPSBmaWxlVXBsb2FkZXIuZ2V0TWltZVR5cGUoKTtcblx0XHRcdGlmIChnaXZlblR5cGUpIHtcblx0XHRcdFx0c2hvd1R5cGVNaXNtYXRjaERpYWxvZyhmaWxlVXBsb2FkZXIsIGdpdmVuVHlwZSwgYWNjZXB0ZWRUeXBlcyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvLyB2ZXJpZnkgY2hlY2sgZm9yIHN0cmVhbVxuXHRcdGNvbnN0IGZpbGVNYXhpbXVtU2l6ZSA9IEZpZWxkSGVscGVyLmNhbGN1bGF0ZU1CZnJvbUJ5dGUodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpPy5tYXhMZW5ndGgpO1xuXHRcdGNvbnN0IGhhbmRsZUZpbGVTaXplRXhjZWVkID0gZnVuY3Rpb24gKGV2ZW50OiBGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCk6IHZvaWQge1xuXHRcdFx0Y29uc3QgZmlsZVVwbG9hZGVyID0gZXZlbnQ/LmdldFNvdXJjZSgpO1xuXHRcdFx0c2hvd0ZpbGVTaXplRXhjZWVkRGlhbG9nKGZpbGVVcGxvYWRlciwgZmlsZVVwbG9hZGVyLmdldE1heGltdW1GaWxlU2l6ZSgpLnRvRml4ZWQoMykpO1xuXHRcdH07XG5cdFx0Y29uc3Qgb25VcGxvYWRDb21wbGV0ZSA9IGZ1bmN0aW9uIChldmVudDogRmlsZVVwbG9hZGVyJFVwbG9hZENvbXBsZXRlRXZlbnQpOiB2b2lkIHtcblx0XHRcdGlmIChldmVudC5nZXRQYXJhbWV0ZXIoXCJzdGF0dXNcIikgPT09IDAgfHwgKGV2ZW50LmdldFBhcmFtZXRlcihcInN0YXR1c1wiKSBhcyBudW1iZXIpID49IDQwMCkge1xuXHRcdFx0XHRkaXNwbGF5TWVzc2FnZUZvckZhaWxlZFVwbG9hZChcblx0XHRcdFx0XHRldmVudC5nZXRTb3VyY2UoKSxcblx0XHRcdFx0XHQoZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVzcG9uc2VSYXdcIikgYXMgc3RyaW5nKSB8fCAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVzcG9uc2VcIikgYXMgc3RyaW5nKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWxlVXBsb2FkZXJcblx0XHRcdFx0bmFtZT1cIkZFVjRGaWxlVXBsb2FkXCJcblx0XHRcdFx0YnV0dG9uT25seT1cImZhbHNlXCJcblx0XHRcdFx0aWNvbk9ubHk9XCJ0cnVlXCJcblx0XHRcdFx0bXVsdGlwbGU9XCJmYWxzZVwiXG5cdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9GSUVMRF9GSUxFVVBMT0FERVJfVVBMT0FEX0JVVFRPTl9UT09MVElQfVwiXG5cdFx0XHRcdGljb249XCJzYXAtaWNvbjovL3VwbG9hZFwiXG5cdFx0XHRcdHN0eWxlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRzZW5kWEhSPVwidHJ1ZVwiXG5cdFx0XHRcdHVzZU11bHRpcGFydD1cImZhbHNlXCJcblx0XHRcdFx0c2FtZUZpbGVuYW1lQWxsb3dlZD1cInRydWVcIlxuXHRcdFx0XHR1cGxvYWRPbkNoYW5nZT1cImZhbHNlXCJcblx0XHRcdFx0bWltZVR5cGU9e2ZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlc31cblx0XHRcdFx0dHlwZU1pc3NtYXRjaD17aGFuZGxlVHlwZU1pc3NtYXRjaH1cblx0XHRcdFx0bWF4aW11bUZpbGVTaXplPXtmaWxlTWF4aW11bVNpemV9XG5cdFx0XHRcdGZpbGVTaXplRXhjZWVkPXtoYW5kbGVGaWxlU2l6ZUV4Y2VlZH1cblx0XHRcdFx0aHR0cFJlcXVlc3RNZXRob2Q9e0ZpbGVVcGxvYWRlckh0dHBSZXF1ZXN0TWV0aG9kLlB1dH1cblx0XHRcdFx0dXBsb2FkQ29tcGxldGU9e29uVXBsb2FkQ29tcGxldGV9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlKGUsIHBhcmFtZXRlcil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgZmllbGQgY29udHJvbCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyQ29udGV4dCBUaGUgcGFyYW1ldGVyIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGZpZWxkIGNvbnRyb2wuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGNyZWF0ZUZpZWxkKHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxGaWVsZD4ge1xuXHRcdGxldCBkaXNwbGF5ID0gXCJWYWx1ZVwiO1xuXHRcdGxldCBhZGRpdGlvbmFsVmFsdWU7XG5cdFx0bGV0IGJpbmRpbmdWYWx1ZTtcblx0XHR0cnkge1xuXHRcdFx0ZGlzcGxheSA9IGF3YWl0IEZpZWxkSGVscGVyLmdldEFQRGlhbG9nRGlzcGxheUZvcm1hdChwYXJhbWV0ZXJDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IHBhcmFtZXRlckNvbnRleHQgfSk7XG5cdFx0XHRiaW5kaW5nVmFsdWUgPSBhd2FpdCB0aGlzLmdldEFQRGlhbG9nQmluZGluZ1ZhbHVlKHBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dCk7XG5cdFx0XHRpZiAoaGFzVmFsdWVIZWxwKHBhcmFtZXRlcikpIHtcblx0XHRcdFx0YWRkaXRpb25hbFZhbHVlID0gYXdhaXQgdGhpcy5nZXRBZGRpdGlvbmFsVmFsdWUoeyBjb250ZXh0OiBwYXJhbWV0ZXJDb250ZXh0IH0pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0TG9nLndhcm5pbmcoYFBhcmFtZXRlciBkaWFsb2cgZmllbGQ6IGRpc3BsYXkgZm9ybWF0IGNvdWxkbid0IGJlIGNhbGN1bGF0ZWQgZm9yIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nOiAke2Vycn1gKTtcblx0XHR9XG5cdFx0Y29uc3QgcGxhY2VIb2xkZXIgPSBwYXJhbWV0ZXIuYW5ub3RhdGlvbnMuVUk/LlBsYWNlaG9sZGVyIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFByaW1pdGl2ZVR5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHBsYWNlSG9sZGVyRXhwcmVzc2lvbiA9IHBsYWNlSG9sZGVyID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHBsYWNlSG9sZGVyKSkgOiB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWVsZFxuXHRcdFx0XHRkZWxlZ2F0ZT17eyBuYW1lOiBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRCYXNlRGVsZWdhdGVcIiwgcGF5bG9hZDogeyByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiB0cnVlIH0gfX1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtcIkFQRF9cIiwgcGFyYW1ldGVyLm5hbWVdKX1cblx0XHRcdFx0dmFsdWU9e2JpbmRpbmdWYWx1ZX1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e3BsYWNlSG9sZGVyRXhwcmVzc2lvbn1cblx0XHRcdFx0ZGlzcGxheT17ZGlzcGxheX1cblx0XHRcdFx0ZWRpdE1vZGU9e3RoaXMuZ2V0UGFyYW1ldGVyRWRpdE1vZGUocGFyYW1ldGVyKX1cblx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0bXVsdGlwbGVMaW5lcz17aXNNdWx0aUxpbmVUZXh0KHBhcmFtZXRlcil9XG5cdFx0XHRcdHJlcXVpcmVkPXtjb21waWxlRXhwcmVzc2lvbihpc0FjdGlvblBhcmFtZXRlclJlcXVpcmVkRXhwcmVzc2lvbihwYXJhbWV0ZXIsIHRoaXMuYWN0aW9uLCBjb252ZXJ0VHlwZXModGhpcy5tZXRhTW9kZWwpKSl9XG5cdFx0XHRcdGNoYW5nZT17YXN5bmMgKGUpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuaGFuZGxlRmllbGRDaGFuZ2UoZSwgcGFyYW1ldGVyKX1cblx0XHRcdFx0dmFsdWVIZWxwPXtoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSA/IGdlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lLCBcIkZpZWxkVmFsdWVIZWxwXCJdKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0ZGVwZW5kZW50cz17dGhpcy5jcmVhdGVQYXJhbWV0ZXJEaWFsb2dWYWx1ZUhlbHAocGFyYW1ldGVyLCBwYXJhbWV0ZXJDb250ZXh0KX1cblx0XHRcdFx0dmlzaWJsZT17Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyLm5hbWUgPT09IFwiUmVzdWx0SXNBY3RpdmVFbnRpdHlcIixcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0bm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihwYXJhbWV0ZXIuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbZ2VuZXJhdGUoW1wiQVBEX1wiLCBwYXJhbWV0ZXIubmFtZSwgXCJMYWJlbFwiXSldfVxuXHRcdFx0XHRhZGRpdGlvbmFsVmFsdWU9e2FkZGl0aW9uYWxWYWx1ZX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSB2YWx1ZUhlbHAgIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJDb250ZXh0IFRoZSBwYXJhbWV0ZXIgY29udGV4dFxuXHQgKiBAcmV0dXJucyBBIHZhbHVlSGVscCBpZiB0aGUgcGFyYW1ldGVyIGhhcyBhIFZILCB1bmRlZmluZWQgb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZVBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlciwgcGFyYW1ldGVyQ29udGV4dDogQ29udGV4dCk6IFZhbHVlSGVscCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCFoYXNWYWx1ZUhlbHAocGFyYW1ldGVyKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDxWYWx1ZUhlbHBcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLmFjdGlvbk5hbWUsIHBhcmFtZXRlci5uYW1lLCBcIkZpZWxkVmFsdWVIZWxwXCJdKX1cblx0XHRcdFx0ZGVsZWdhdGU9e3tcblx0XHRcdFx0XHRuYW1lOiBcInNhcC9mZS9tYWNyb3MvdmFsdWVoZWxwL1ZhbHVlSGVscERlbGVnYXRlXCIsXG5cdFx0XHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoOiB0aGlzLmFjdGlvbi5pc0JvdW5kXG5cdFx0XHRcdFx0XHRcdD8gYCR7Z2V0VGFyZ2V0TmF2aWdhdGlvblBhdGgoZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEFjdGlvblBhcmFtZXRlcj4ocGFyYW1ldGVyQ29udGV4dCkpfS8ke1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hY3Rpb25OYW1lXG5cdFx0XHRcdFx0XHRcdCAgfS8ke3BhcmFtZXRlci5uYW1lfWBcblx0XHRcdFx0XHRcdFx0OiBgLyR7dGhpcy5hY3Rpb24ubmFtZS5zdWJzdHJpbmcodGhpcy5hY3Rpb24ubmFtZS5sYXN0SW5kZXhPZihcIi5cIikgKyAxKX0vJHtwYXJhbWV0ZXIubmFtZX1gLFxuXHRcdFx0XHRcdFx0cXVhbGlmaWVyczoge30sXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBRdWFsaWZpZXI6IFwiXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH19XG5cdFx0XHRcdHZhbGlkYXRlSW5wdXQ9e3JlcXVpcmVzVmFsaWRhdGlvbihwYXJhbWV0ZXIpfVxuXHRcdFx0XHR0eXBlYWhlYWQ9e1xuXHRcdFx0XHRcdDxQb3BvdmVyPlxuXHRcdFx0XHRcdFx0PE1UYWJsZVxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RoaXMuYWN0aW9uTmFtZSwgcGFyYW1ldGVyLm5hbWUsIFwiUG9wb3ZlclwiLCBcInF1YWxpZmllclwiXSl9XG5cdFx0XHRcdFx0XHRcdGNhc2VTZW5zaXRpdmU9e1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWN0aW9uLmlzQm91bmRcblx0XHRcdFx0XHRcdFx0XHRcdD8gdXNlQ2FzZVNlbnNpdGl2ZUZpbHRlclJlcXVlc3RzKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxBY3Rpb25QYXJhbWV0ZXI+KHBhcmFtZXRlckNvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjb252ZXJ0VHlwZXModGhpcy5tZXRhTW9kZWwpLmVudGl0eUNvbnRhaW5lci5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8uRmlsdGVyRnVuY3Rpb25zIGFzIHVua25vd24gYXMgc3RyaW5nW10pID8/IFtdXG5cdFx0XHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0XHRcdDogTW9kZWxIZWxwZXIuaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKHRoaXMubWV0YU1vZGVsKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHVzZUFzVmFsdWVIZWxwPXshIXBhcmFtZXRlci5hbm5vdGF0aW9ucy5Db21tb24/LlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlc31cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0XHR9XG5cdFx0XHRcdGRpYWxvZz17dGhpcy5jcmVhdGVGaWVsZFZIRGlhbG9nKHBhcmFtZXRlcil9XG5cdFx0XHQ+PC9WYWx1ZUhlbHA+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBWYWx1ZUhlbHAgZGlhbG9nIGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIEEgZGlhbG9nIGlmIHRoZSBwYXJhbWV0ZXIgaGFzIGEgVkgsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdHByaXZhdGUgY3JlYXRlRmllbGRWSERpYWxvZyhwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFZIRGlhbG9nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAocGFyYW1ldGVyLmFubm90YXRpb25zLkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPy52YWx1ZU9mKCkgIT09IHRydWUpIHtcblx0XHRcdHJldHVybiA8VkhEaWFsb2cgLz47XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGZpZWxkIGNoYW5nZSBldmVudCBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgdWk1IGV2ZW50XG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBQcm9taXNlLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBoYW5kbGVGaWVsZENoYW5nZShldmVudDogTXVsdGlWYWx1ZUZpZWxkJENoYW5nZUV2ZW50IHwgRmllbGQkQ2hhbmdlRXZlbnQsIHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZmllbGRQcm9taXNlID0gKGV2ZW50IGFzIEZpZWxkJENoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJwcm9taXNlXCIpO1xuXHRcdGNvbnN0IGZpZWxkID0gKGV2ZW50IGFzIEZpZWxkJENoYW5nZUV2ZW50KS5nZXRTb3VyY2UoKSBhcyBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZDtcblx0XHRjb25zdCBwYXJhbWV0ZXJJbmZvID0gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5maW5kKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkID09PSBmaWVsZCk7XG5cdFx0aWYgKCFwYXJhbWV0ZXJJbmZvKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2UgPSBmaWVsZFByb21pc2U7XG5cdFx0Ly8gZmllbGQgdmFsdWUgaXMgYmVpbmcgY2hhbmdlZCwgdGh1cyBleGlzdGluZyBtZXNzYWdlcyByZWxhdGVkIHRvIHRoYXQgZmllbGQgYXJlIG5vdCB2YWxpZCBhbnltb3JlXG5cdFx0dGhpcy5yZW1vdmVNZXNzYWdlc0ZvclBhcmFtZXRlcihwYXJhbWV0ZXIpO1xuXHRcdHRyeSB7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlID0gYXdhaXQgZmllbGRQcm9taXNlO1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXNbcGFyYW1ldGVySW5mby5wYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXJJbmZvLnZhbHVlO1xuXHRcdFx0cGFyYW1ldGVySW5mby5oYXNFcnJvciA9IGZhbHNlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRkZWxldGUgcGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHRcdHBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSB0cnVlO1xuXHRcdFx0QWN0aW9uUnVudGltZS5fYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcihbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvOiBwYXJhbWV0ZXJJbmZvLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IChlcnJvciBhcyB7IG1lc3NhZ2U6IHN0cmluZyB9KS5tZXNzYWdlXG5cdFx0XHRcdH1cblx0XHRcdF0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBGaWxlVXBsb2FkZXIgY2hhbmdlIGV2ZW50IGZvciBhIHBhcmFtZXRlci5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBTQVBVSTUgZXZlbnQgY29ycmVzcG9uZGluZyB0byB0aGUgRmlsZVVwbG9hZGVyIGNoYW5nZSBldmVudC5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgYWN0aW9uIHBhcmFtZXRlci5cblx0ICogQHJldHVybnMgUHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgaGFuZGxlRmlsZVVwbG9hZGVyQ2hhbmdlKGV2ZW50OiBGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsIHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZmlsZXMgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJmaWxlc1wiKTtcblx0XHRjb25zdCBmaWxlVXBsb2FkZXIgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHQvLyBjb3JyZWN0aW9uIG5lZWRlZCBmb3IgbXVsdGlwbGUgZmlsZSB1cGxvYWRlcnNcblx0XHRjb25zdCBwYXJhbWV0ZXJJbmZvID0gdGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5maW5kKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiBhY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkID09PSBmaWxlVXBsb2FkZXIpO1xuXHRcdGlmICghcGFyYW1ldGVySW5mbyB8fCAhZmlsZXMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5yZW1vdmVNZXNzYWdlc0ZvclBhcmFtZXRlcihwYXJhbWV0ZXIpO1xuXHRcdHBhcmFtZXRlckluZm8udmFsdWUgPSB7fTtcblx0XHRpZiAodGhpcy5nZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXIpKSB7XG5cdFx0XHRwYXJhbWV0ZXJJbmZvLnZhbHVlW3RoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8ubmFtZSBhcyBrZXlvZiB0eXBlb2YgcGFyYW1ldGVySW5mby52YWx1ZV0gPVxuXHRcdFx0XHRhd2FpdCB0aGlzLmdldEJhc2U2NEZpbGUoZmlsZXMpO1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZVsodGhpcy5nZXRNaW1lVHlwZVBhdGgocGFyYW1ldGVyKSBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248c3RyaW5nPikucGF0aF0gPVxuXHRcdFx0XHQoZmlsZXNbMF0gYXMgRmlsZSkudHlwZSB8fCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuXHRcdFx0cGFyYW1ldGVySW5mby52YWx1ZVt0aGlzLmdldEZpbGVOYW1lUGF0aChwYXJhbWV0ZXIpIGFzIHN0cmluZ10gPSAoZmlsZXNbMF0gYXMgRmlsZSkubmFtZTtcblx0XHRcdHBhcmFtZXRlckluZm8uaGFzRXJyb3IgPSBmYWxzZTtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5wYXJhbWV0ZXJzVmFsdWVzW3BhcmFtZXRlckluZm8ucGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVySW5mby52YWx1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBmaWxlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdHJlYW0gcHJvcGVydHkgaW4gdGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFBhdGggYXMgYSBzdHJpbmcuXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpbGVOYW1lUGF0aChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLmdldFN0cmVhbVByb3BlcnR5KHBhcmFtZXRlcik/LmFubm90YXRpb25zLkNvcmU/LkNvbnRlbnREaXNwb3NpdGlvbj8uRmlsZW5hbWUgYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4pLnBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUHJvdmlkZXMgdGhlIHByb3BlcnR5IG5hbWUgZm9yIHRoZSBNaW1lIHR5cGUgd2l0aCB0aGUgYXNzb2NpYXRlZCBTdHJlYW0gcHJvcGVydHkgaW4gdGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBwYXRoIGV4cHJlc3Npb24uXG5cdCAqL1xuXHRwcml2YXRlIGdldE1pbWVUeXBlUGF0aChwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKT8uYW5ub3RhdGlvbnMuQ29yZT8uTWVkaWFUeXBlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyB0aGUgU3RyZWFtIHByb3BlcnR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgQ29tcGxleCB0eXBlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBFZG0uU3RyZWFtIHByb3BlcnR5LlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRTdHJlYW1Qcm9wZXJ0eShwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKHBhcmFtZXRlci50eXBlUmVmZXJlbmNlIGFzIENvbXBsZXhUeXBlKS5wcm9wZXJ0aWVzPy5maW5kKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uU3RyZWFtXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlLlxuXHQgKiBAcGFyYW0gZmlsZXMgVGhlIGZpbGUgc2VsZWN0ZWQuXG5cdCAqIEByZXR1cm5zIFRoZSBmaWxlIGNvbnRlbnQuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldEJhc2U2NEZpbGUoZmlsZXM6IG9iamVjdFtdKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0XHRyZWFkZXIub25sb2FkID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoIXJlYWRlci5yZXN1bHQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzb2x2ZSgocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpLnNwbGl0KFwiLFwiKVsxXSk7XG5cdFx0XHR9O1xuXHRcdFx0cmVhZGVyLnJlYWRBc0RhdGFVUkwoKGZpbGVzIGFzIHVua25vd24gYXMgRmlsZUxpc3QpLml0ZW0oMCkhKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyBmb3IgYSBwYXJhbWV0ZXIuXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXIgVGhlIHBhcmFtZXRlclxuXHQgKi9cblx0cHJpdmF0ZSByZW1vdmVNZXNzYWdlc0ZvclBhcmFtZXRlcihwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IHZvaWQge1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCBjb250cm9sSWQgPSBnZW5lcmF0ZShbXCJBUERfXCIsIHBhcmFtZXRlci5uYW1lXSk7XG5cdFx0Ly8gYWxzbyByZW1vdmUgbWVzc2FnZXMgYXNzaWduZWQgdG8gaW5uZXIgY29udHJvbHMsIGJ1dCBhdm9pZCByZW1vdmluZyBtZXNzYWdlcyBmb3IgZGlmZmVyZW50IHBhcmFtZXRlcnMgKHdpdGggbmFtZSBiZWluZyBzdWJzdHJpbmcgb2YgYW5vdGhlciBwYXJhbWV0ZXIgbmFtZSlcblx0XHRjb25zdCByZWxldmFudE1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKChtc2c6IE1lc3NhZ2UpID0+XG5cdFx0XHRtc2cuZ2V0Q29udHJvbElkcygpLnNvbWUoKGlkOiBzdHJpbmcpID0+IGNvbnRyb2xJZC5zcGxpdChcIi1cIikuaW5jbHVkZXMoaWQpKVxuXHRcdCk7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKHJlbGV2YW50TWVzc2FnZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIEZvcm1FbGVtZW50cyBhbG9uZyB3aXRoIHRoZSBhcnJheSBvZiBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIHBhcmFtZXRlciBpbmZvcm1hdGlvbiBhbG9uZyB3aXRoIHRoZSBGb3JtRWxlbWVudHMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldEZvcm1FbGVtZW50cyhwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcik6IFByb21pc2U8RGlhbG9nQ29udGVudFR5cGVzPiB7XG5cdFx0Y29uc3QgZm9ybUVsZW1lbnRzID0gYXdhaXQgdGhpcy5jcmVhdGVGb3JtRWxlbWVudChwYXJhbWV0ZXIpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRmb3JtRWxlbWVudHM6IGZvcm1FbGVtZW50cyxcblx0XHRcdHBhcmFtZXRlcjogcGFyYW1ldGVyXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIGRpYWxvZyBvciB1bmRlZmluZWQuXG5cdCAqL1xuXHRnZXREaWFsb2coKTogRGlhbG9nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5kaWFsb2c7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgYWN0aW9uIHBhcmFtZXRlciBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBkaWFsb2cuXG5cdCAqL1xuXHRhc3luYyBjcmVhdGVEaWFsb2coKTogUHJvbWlzZTxEaWFsb2c+IHtcblx0XHRsZXQgZGlhbG9nQ29udGVudHM6IEZvcm1FbGVtZW50VHlwZVtdID0gW107XG5cdFx0bGV0IGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnM6IERpYWxvZ0NvbnRlbnRUeXBlc1tdID0gW107XG5cdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVycyA9IHRoaXMuYWN0aW9uLmlzQm91bmQgPyB0aGlzLmFjdGlvbi5wYXJhbWV0ZXJzLnNsaWNlKDEpIDogdGhpcy5hY3Rpb24ucGFyYW1ldGVycztcblxuXHRcdC8vIElmIE9wZXJhdGlvbmFsUGFyYW1ldGVyRmFjZXRzIGhhdmUgYmVlbiBkZWZpbmVkIGZvciB0aGlzIGFjdGlvbiwgdGhleSBhcmUgdXNlZCB0byBncm91cCB0aGUgYWN0aW9uIHBhcmFtZXRlcnNcblx0XHQvLyB3aXRoIHRpdGxlc1xuXHRcdGlmICh0aGlzLmFjdGlvbi5hbm5vdGF0aW9ucz8uVUk/Lk9wZXJhdGlvblBhcmFtZXRlckZhY2V0cykge1xuXHRcdFx0Y29uc3QgYWN0aW9uUGFyYW1ldGVyR3JvdXBzOiBFbGVtZW50R3JvdXBbXSA9IFtdO1xuXHRcdFx0dGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuVUk/Lk9wZXJhdGlvblBhcmFtZXRlckZhY2V0cz8uZm9yRWFjaChmdW5jdGlvbiAoZmFjZXQ6IFJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRcdGxldCBmYWNldFRpdGxlO1xuXHRcdFx0XHRpZiAoZmFjZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRcdFx0ZmFjZXRUaXRsZSA9IGZhY2V0LkxhYmVsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChoYXNGaWVsZEdyb3VwVGFyZ2V0KGZhY2V0KSkge1xuXHRcdFx0XHRcdGNvbnN0IGZpZWxkR3JvdXAgPSBmYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXBUeXBlO1xuXHRcdFx0XHRcdGNvbnN0IGdyb3VwZWRBY3Rpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXSA9IFtdO1xuXG5cdFx0XHRcdFx0ZmllbGRHcm91cC5EYXRhLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRncm91cGVkQWN0aW9uUGFyYW1ldGVycy5wdXNoKChncm91cCBhcyBEYXRhRmllbGQpLlZhbHVlLiR0YXJnZXQgYXMgQWN0aW9uUGFyYW1ldGVyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJHcm91cHMucHVzaCh7XG5cdFx0XHRcdFx0XHRmYWNldFRpdGxlOiBmYWNldFRpdGxlIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRkYXRhOiBncm91cGVkQWN0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gR2V0IHRoZSBmaWVsZHMgZm9yIGVhY2ggcGFyYW1ldGVyIGdyb3VwXG5cdFx0XHRjb25zdCBnZXRHcm91cEZvcm0gPSBhc3luYyAoZ3JvdXA6IEVsZW1lbnRHcm91cCk6IFByb21pc2U8RWxlbWVudEdyb3VwQ29udmVydGVkPiA9PiB7XG5cdFx0XHRcdGNvbnN0IGZvcm1FbGVtZW50cyA9IGF3YWl0IFByb21pc2UuYWxsKGdyb3VwLmRhdGEubWFwKHRoaXMuZ2V0Rm9ybUVsZW1lbnRzLmJpbmQodGhpcykpKTtcblx0XHRcdFx0cmV0dXJuIHsgZmFjZXRUaXRsZTogZ3JvdXAuZmFjZXRUaXRsZSwgZGF0YTogZm9ybUVsZW1lbnRzIH07XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBmb3JtRGF0YSA9IGFjdGlvblBhcmFtZXRlckdyb3Vwcy5tYXAoYXN5bmMgKHBhcmFtZXRlckdyb3VwKSA9PiBnZXRHcm91cEZvcm0ocGFyYW1ldGVyR3JvdXApKTtcblx0XHRcdGNvbnN0IG9wRmFjZXRzID0gYXdhaXQgUHJvbWlzZS5hbGwoZm9ybURhdGEpO1xuXG5cdFx0XHQvLyBBZGQgdGhlIHRpdGxlIGNvbnRyb2wgdG8gZWFjaCBwYXJhbWV0ZXIgZ3JvdXBcblx0XHRcdG9wRmFjZXRzLmZvckVhY2goKGRpYWxvZ0NvbnRlbnQpID0+IHtcblx0XHRcdFx0ZGlhbG9nQ29udGVudHMucHVzaCg8VGl0bGUgdGV4dD17ZGlhbG9nQ29udGVudC5mYWNldFRpdGxlfSAvPik7XG5cdFx0XHRcdHJldHVybiBkaWFsb2dDb250ZW50LmRhdGEubWFwKChlbGVtZW50KSA9PiBkaWFsb2dDb250ZW50cy5wdXNoKGVsZW1lbnQuZm9ybUVsZW1lbnRzKSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0b3BGYWNldHMuZm9yRWFjaChmdW5jdGlvbiAob3BGYWNldCkge1xuXHRcdFx0XHRvcEZhY2V0LmRhdGEuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdFx0XHRcdGRpYWxvZ0NvbnRlbnRzV2l0aFBhcmFtZXRlcnMucHVzaChlbGVtZW50KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gTm8gT3BlcmF0aW9uUGFyYW1ldGVyRmFjZXRzIGhhdmUgYmVlbiBkZWZpbmVkXG5cdFx0XHRkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzID0gYXdhaXQgUHJvbWlzZS5hbGwoYWN0aW9uUGFyYW1ldGVycy5tYXAodGhpcy5nZXRGb3JtRWxlbWVudHMuYmluZCh0aGlzKSkpO1xuXHRcdFx0ZGlhbG9nQ29udGVudHMgPSBkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzLm1hcCgoZGlhbG9nQ29udGVudCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZGlhbG9nQ29udGVudC5mb3JtRWxlbWVudHM7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLnJlZ2lzdGVyQWN0aW9uUGFyYW1ldGVySW5mbyhkaWFsb2dDb250ZW50c1dpdGhQYXJhbWV0ZXJzKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgZGVmZXJyZWQgY3JlYXRlIHdlIGhhdmUgbm8gdmlldywgc28gd2UgbmVlZCB0byBnZXQgdGhlIHJlc291cmNlIG1vZGVsIGZyb20gdGhlIGFwcCBjb21wb25lbnRcblxuXHRcdGNvbnN0IG1lc3NhZ2VTdHJpcCA9IHRoaXMuZ2V0Q3VzdG9tQWN0aW9uTWVzc2FnZVN0cmlwVGV4dCgpO1xuXG5cdFx0Y29uc3QgZW5kQnV0dG9uID0gKFxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHRoaXMuYWN0aW9uTmFtZSwgXCJBY3Rpb25cIiwgXCJDYW5jZWxcIl0pfVxuXHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX0NBTkNFTFwiKX1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLm9uQ2FuY2VsLmJpbmQodGhpcykoKTtcblx0XHRcdFx0fX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRjb25zdCBkaWFsb2cgPSAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmdldFRpdGxlVGV4dCh0aGlzLnBhcmFtZXRlcnMubGFiZWwpfVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW1wiZmVcIiwgXCJBUERfXCIsIHRoaXMuYWN0aW9uTmFtZV0pfVxuXHRcdFx0XHRlc2NhcGVIYW5kbGVyPXt0aGlzLm9uQ2FuY2VsLmJpbmQodGhpcyl9XG5cdFx0XHRcdGRyYWdnYWJsZT17dHJ1ZX1cblx0XHRcdFx0cmVzaXphYmxlPXt0cnVlfVxuXHRcdFx0XHRhZnRlckNsb3NlPXt0aGlzLmFmdGVyQ2xvc2UuYmluZCh0aGlzKX1cblx0XHRcdFx0YmVmb3JlT3Blbj17dGhpcy5iZWZvcmVPcGVuLmJpbmQodGhpcyl9XG5cdFx0XHRcdGFmdGVyT3Blbj17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWZ0ZXJPcGVuKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGluaXRpYWxGb2N1cz17ZW5kQnV0dG9ufSAvLyBUaGUgaW5pdGlhbCBmb2N1cyBpcyBzZXQgcHJvZ3JhbW1hdGljYWxseSBpbiBhZnRlck9wZW4sIHRvIGF2b2lkIG9wZW5pbmcgdGhlIFZIIGRpYWxvZ1xuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGJlZ2luQnV0dG9uOiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbXCJmZVwiLCBcIkFQRF9cIiwgdGhpcy5hY3Rpb25OYW1lLCBcIkFjdGlvblwiLCBcIk9rXCJdKX1cblx0XHRcdFx0XHRcdFx0dGV4dD17XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmlzQ3JlYXRlQWN0aW9uID09PSB0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfU0FQRkVfQUNUSU9OX0NSRUFURV9CVVRUT05fQ09OVElOVUVcIilcblx0XHRcdFx0XHRcdFx0XHRcdDogdGhpcy5nZXRCZWdpbkJ1dHRvbkxhYmVsKHRoaXMucGFyYW1ldGVycy5sYWJlbClcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25BcHBseS5iaW5kKHRoaXMpKCk7XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJFbXBoYXNpemVkXCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRlbmRCdXR0b246IGVuZEJ1dHRvbixcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHRcdFx0XHQvLyBAdHMtaWdub3JlICh1bmtub3duIHByb3BlcnR5IGJpbmRpbmcpXG5cdFx0XHRcdFx0XHQvLyBjb2x1bW5zTSBvbmx5IHRha2VzIGVmZmVjdCBpZiB0aGVyZSBhcmUgdGl0bGVzIGluIHRoZSBjb250ZW50LlxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0e21lc3NhZ2VTdHJpcCAmJiA8TWVzc2FnZVN0cmlwIHNob3dJY29uPVwidHJ1ZVwiIHRleHQ9e21lc3NhZ2VTdHJpcH0+PC9NZXNzYWdlU3RyaXA+fVxuXHRcdFx0XHRcdFx0XHQ8U2ltcGxlRm9ybSBjb2x1bW5zTT17XCIyXCJ9IGVkaXRhYmxlPVwidHJ1ZVwiIGxhYmVsU3Bhbkw9e1wiMTJcIn0gbGFiZWxTcGFuTT17XCIxMlwifSBiaW5kaW5nPXtcIiRQYXJhbWV0ZXJcIn0+XG5cdFx0XHRcdFx0XHRcdFx0e3sgY29udGVudDogZGlhbG9nQ29udGVudHMgfX1cblx0XHRcdFx0XHRcdFx0PC9TaW1wbGVGb3JtPlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9EaWFsb2c+XG5cdFx0KTtcblx0XHR0aGlzLmRpYWxvZyA9IGRpYWxvZztcblx0XHRyZXR1cm4gZGlhbG9nO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGxhYmVsIGZvciB0aGUgYmVnaW4gYnV0dG9uIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBhY3Rpb25MYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgbGFiZWwuXG5cdCAqL1xuXHRwcml2YXRlIGdldEJlZ2luQnV0dG9uTGFiZWwoYWN0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qga2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19BQ1RJT05fTkFNRVwiO1xuXHRcdGNvbnN0IGRlZmF1bHRLZXkgPSBcIkNfQ09NTU9OX0RJQUxPR19PS1wiO1xuXHRcdHJldHVybiB0aGlzLmdldE92ZXJyaWRkZW5UZXh0KGtleSwgZGVmYXVsdEtleSwgYWN0aW9uTGFiZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBhY3Rpb25MYWJlbCBUaGUgbGFiZWwgb2YgdGhlIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgdGl0bGUuXG5cdCAqL1xuXHRwcml2YXRlIGdldFRpdGxlVGV4dChhY3Rpb25MYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcblx0XHRjb25zdCBrZXkgPSBcIkFDVElPTl9QQVJBTUVURVJfRElBTE9HX0FDVElPTl9USVRMRVwiO1xuXHRcdGNvbnN0IGRlZmF1bHRLZXkgPSBcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19USVRMRVwiO1xuXHRcdHJldHVybiB0aGlzLmdldE92ZXJyaWRkZW5UZXh0KGtleSwgZGVmYXVsdEtleSwgYWN0aW9uTGFiZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYW4gb3ZlcnJpZGRlbiB0ZXh0IGZvciBtZXNzYWdlIHN0cmlwLlxuXHQgKiBAcmV0dXJucyBUaGUgb3ZlcnJpZGRlbiB0ZXh0IGZvciBtZXNzYWdlIHN0cmlwLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDdXN0b21BY3Rpb25NZXNzYWdlU3RyaXBUZXh0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qga2V5ID0gXCJBQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19NRVNTQUdFX1RFWFRcIjtcblx0XHRsZXQgYm91bmRBY3Rpb25OYW1lID0gdGhpcy5hY3Rpb25OYW1lO1xuXHRcdGJvdW5kQWN0aW9uTmFtZSA9IGJvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikucG9wKCkgPz8gYm91bmRBY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIHRoaXMuZW50aXR5U2V0TmFtZSA/IGAke3RoaXMuZW50aXR5U2V0TmFtZX18JHtib3VuZEFjdGlvbk5hbWV9YCA6IFwiXCI7XG5cdFx0aWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3N1ZmZpeFJlc291cmNlS2V5fWApKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5LCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3RoaXMuZW50aXR5U2V0TmFtZX1gKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBgJHt0aGlzLmVudGl0eVNldE5hbWV9YCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlc291cmNlTW9kZWwuY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGAke2tleX1gKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhbiBvdmVycmlkZGVuIHRleHQuXG5cdCAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgYW4gb3ZlcnJpZGRlbiB0ZXh0XG5cdCAqIEBwYXJhbSBkZWZhdWx0S2V5IFRoZSBkZWZhdWx0IGtleSBmb3IgdGhlIHRleHRcblx0ICogQHBhcmFtIGFjdGlvbkxhYmVsIFRoZSBsYWJlbCBvZiB0aGUgYWN0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBvdmVycmlkZGVuIHRleHQgb3IgbGFiZWwuXG5cdCAqL1xuXHRwcml2YXRlIGdldE92ZXJyaWRkZW5UZXh0KGtleTogc3RyaW5nLCBkZWZhdWx0S2V5OiBzdHJpbmcsIGFjdGlvbkxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgYm91bmRBY3Rpb25OYW1lID0gdGhpcy5hY3Rpb25OYW1lO1xuXHRcdGJvdW5kQWN0aW9uTmFtZSA9IGJvdW5kQWN0aW9uTmFtZS5zcGxpdChcIi5cIikucG9wKCkgPz8gYm91bmRBY3Rpb25OYW1lO1xuXHRcdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gYm91bmRBY3Rpb25OYW1lICYmIHRoaXMuZW50aXR5U2V0TmFtZSA/IGAke3RoaXMuZW50aXR5U2V0TmFtZX18JHtib3VuZEFjdGlvbk5hbWV9YCA6IFwiXCI7XG5cdFx0aWYgKGFjdGlvbkxhYmVsKSB7XG5cdFx0XHRpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9fCR7c3VmZml4UmVzb3VyY2VLZXl9YCkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VNb2RlbC5jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYCR7a2V5fXwke3RoaXMuZW50aXR5U2V0TmFtZX1gKSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvdXJjZU1vZGVsLmdldFRleHQoa2V5LCB1bmRlZmluZWQsIGAke3RoaXMuZW50aXR5U2V0TmFtZX1gKTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZU1vZGVsLmNoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhgJHtrZXl9YCkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KGtleSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYWN0aW9uTGFiZWw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLnJlc291cmNlTW9kZWwuZ2V0VGV4dChkZWZhdWx0S2V5KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgcHJlc3MgZXZlbnQgb2YgdGhlIGJlZ2luIGJ1dHRvbiBvZiB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgb25BcHBseSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBwcmV2ZW50IG11bHRpcGxlIHByZXNzIGV2ZW50cy4gVGhlIEJ1c3lMb2NrZXIgaXMgbm90IGZhc3QgZW5vdWdoLiAoQkNQOiAyMzcwMTMwMjEwKVxuXHRcdGlmICh0aGlzLmJ1dHRvbkxvY2sgfHwgIXRoaXMuZGlhbG9nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGRpYWxvZyA9IHRoaXMuZGlhbG9nO1xuXG5cdFx0Y29uc3QgcGFyYW1ldGVyQ29udGV4dCA9IChkaWFsb2cuZ2V0T2JqZWN0QmluZGluZygpIGFzIE9EYXRhQ29udGV4dEJpbmRpbmcgfCB1bmRlZmluZWQpPy5nZXRQYXJhbWV0ZXJDb250ZXh0KCk7XG5cblx0XHQvLyBsb2NrIHRoZSBidXR0b24gdG8gcHJldmVudCBtdWx0aXBsZSBwcmVzcyBldmVudHNcblx0XHR0aGlzLmJ1dHRvbkxvY2sgPSB0cnVlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhkaWFsb2cpO1xuXG5cdFx0Ly8gdmFsaWRhdGUgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzLiBJdCBpcyBpbXBvcnRhbnQgdG8gZG8gdGhpcyBhcyBhIGZpcnN0IG9wZXJhdGlvbiBhcyB0aGVyZSBpcyBhXG5cdFx0Ly8gd2FpdCBkb25lIGZvciB0aGUgdmFsdWUgY2hhbmdlcyB0byBjb21wbGV0ZSB1cGRhdGluZyB0aGUgbW9kZWwuIEV2ZW4gaW4gY2FzZXMgd2hlcmUgdmFsaWRhdGlvbiBpc1xuXHRcdC8vIG5vdCBjb25maWd1cmVkIHRoaXMgcHJvbWlzZSBuZWVkcyB0byBiZSByZXNvbHZlZCB0byByZWFkIGZyb20gdGhlIG1vZGVsIHRvIHJldHVybiB1c2VyIGVudGVyZWQgdmFsdWVzLlxuXHRcdGlmICghKGF3YWl0IEFjdGlvblJ1bnRpbWUudmFsaWRhdGVQcm9wZXJ0aWVzKHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MsIHRoaXMucmVzb3VyY2VNb2RlbCkpKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayhkaWFsb2cpO1xuXHRcdFx0dGhpcy5idXR0b25Mb2NrID0gZmFsc2U7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbmV3VmFsdWVzRGljdGlvbmFyeSA9IE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdC4uLnRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvcykgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXIgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy5wYXJhbWV0ZXI7XG5cdFx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdFx0aWYgKHBhcmFtZXRlci5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdFx0XHR2YWx1ZSA9IE9iamVjdC52YWx1ZXMoKGRpYWxvZy5nZXRNb2RlbChcIm12ZnZpZXdcIikgYXMgSlNPTk1vZGVsKS5nZXRQcm9wZXJ0eShgLyR7cGFyYW1ldGVyLm5hbWV9YCkgPz8ge30pLm1hcChcblx0XHRcdFx0XHRcdChwYXJhbVZhbHVlKSA9PiAocGFyYW1WYWx1ZSBhcyB7IEtleT86IFByaW1pdGl2ZVR5cGUgfSk/LktleVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIXBhcmFtZXRlci50eXBlLnN0YXJ0c1dpdGgoXCJFZG0uXCIpICYmIHRoaXMuZ2V0U3RyZWFtUHJvcGVydHkocGFyYW1ldGVyKSkge1xuXHRcdFx0XHRcdC8vIEZpbGUgVXBsb2FkZXJcblx0XHRcdFx0XHR2YWx1ZSA9IGFjdGlvblBhcmFtZXRlckluZm9zLnZhbHVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFJlZ3VsYXIgZmllbGQgKG5vbi1jb2xsZWN0aW9uLCBub24tZmlsZSlcblx0XHRcdFx0XHQvL1xuXHRcdFx0XHRcdC8vIElNUE9SVEFOVDogV2UgcHJlZmVyIGFjdGlvblBhcmFtZXRlckluZm9zLnZhbHVlIHdoaWNoIHJlcHJlc2VudHMgdGhlIGFjdHVhbCB1c2VyIGlucHV0XG5cdFx0XHRcdFx0Ly8gZnJvbSB0aGUgZGlhbG9nIGZpZWxkLCB2YWxpZGF0ZWQgYW5kIHByb2Nlc3NlZCBieSBoYW5kbGVGaWVsZENoYW5nZSgpIG92ZXIgcGFyYW1ldGVyQ29udGV4dC5nZXRQcm9wZXJ0eSgpXG5cdFx0XHRcdFx0Ly8gYmVjYXVzZSB0aGUgcGFyYW1ldGVyQ29udGV4dCBjYW4gY29udGFpbiBtb3JlIHRoYW4ganVzdCB0aGUgYWN0aW9uIHBhcmFtZXRlciBpdHNlbGYuXG5cdFx0XHRcdFx0Ly8gSW4gdGlja2V0IENTMjAyNTAwMTA5NjY4NDQgcGFyYW1ldGVyQ29udGV4dC5nZXRQcm9wZXJ0eSgpIHJldHVybmVkIHRoZSB3cm9uZyB2YWx1ZSBkdWVcblx0XHRcdFx0XHQvLyB0byBhIG5hbWUgY2xhc2ggYmV0d2VlbiB0aGUgcGFyYW1ldGVyIGFuZCBpdHMgdGV4dCBhbm5vdGF0aW9uIHRhcmdldC5cblx0XHRcdFx0XHQvLyBFZGdlIENhc2U6IElmIHRoZSB1c2VyIG5ldmVyIGludGVyYWN0ZWQgd2l0aCB0aGUgZmllbGQgKHZhbHVlIGlzIHVuZGVmaW5lZCksXG5cdFx0XHRcdFx0Ly8gZmFsbCBiYWNrIHRvIHBhcmFtZXRlckNvbnRleHQgd2hpY2ggY29udGFpbnMgdGhlIGRlZmF1bHQgdmFsdWUgc2V0IGJ5XG5cdFx0XHRcdFx0Ly8gc2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcygpIHZpYSBzZXRQYXJhbWV0ZXIoKSBjYWxscy5cblx0XHRcdFx0XHR2YWx1ZSA9IGFjdGlvblBhcmFtZXRlckluZm9zLnZhbHVlID8/IHBhcmFtZXRlckNvbnRleHQ/LmdldFByb3BlcnR5KHBhcmFtZXRlci5uYW1lKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB7IFtwYXJhbWV0ZXIubmFtZV06IHZhbHVlIH07XG5cdFx0XHR9KVxuXHRcdCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0Y29uc3QgaXNOZXdWYWx1ZSA9IE9iamVjdC52YWx1ZXMobmV3VmFsdWVzRGljdGlvbmFyeSkuc29tZSgodmFsdWUpID0+ICEhdmFsdWUpO1xuXG5cdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVzb2x2ZShuZXdWYWx1ZXNEaWN0aW9uYXJ5KTtcblxuXHRcdHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShVaU1vZGVsQ29uc3RhbnRzLkRvY3VtZW50TW9kaWZpZWQsIGlzTmV3VmFsdWUpO1xuXHRcdC8vIER1ZSB0byB1c2luZyB0aGUgc2VhcmNoIGFuZCB2YWx1ZSBoZWxwcyBvbiB0aGUgYWN0aW9uIGRpYWxvZyB0cmFuc2llbnQgbWVzc2FnZXMgY291bGQgYXBwZWFyXG5cdFx0Ly8gd2UgbmVlZCBhbiBVWCBkZXNpZ24gZm9yIHRob3NlIHRvIHNob3cgdGhlbSB0byB0aGUgdXNlciAtIGZvciBub3cgcmVtb3ZlIHRoZW0gYmVmb3JlIGNvbnRpbnVpbmdcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgZGlhbG9nIHRvIHN0YXJ0IGEgbmV3IGl0ZXJhdGlvbi5cblx0ICpcblx0ICovXG5cdHB1YmxpYyByZXNldFN0YXRlKCk6IHZvaWQge1xuXHRcdHRoaXMudW5sb2NrRGlhbG9nKCk7XG5cdFx0dGhpcy5idXR0b25Mb2NrID0gZmFsc2U7XG5cdFx0dGhpcy51cGRhdGVEaWFsb2dCaW5kaW5nQ29udGV4dEZvckVycm9yKCk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Jlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzVmFsdWVzUmVqZWN0ID0gcmVqZWN0O1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZSB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBkaWFsb2cgdG8gb25lIHdpdGggcHJpb3JpdHkgbWVzc2FnZS5cblx0ICpcblx0ICogT24gaW5pdGlhbCBhY3Rpb24gZXhlY3V0aW9uLCB3ZSBtaWdodCBoYXZlIGJvdW5kIG1lc3NhZ2VzIHdpdGggYW55IHNlbGVjdGVkIGNvbnRleHRzIGFzIHRhcmdldCBhcGFydCBmcm9tIHRoZSBkaWFsb2cncyBpbml0aWFsIGNvbnRleHQuXG5cdCAqIFdlIGNoYW5nZSB0aGUgYmluZGluZyBjb250ZXh0IG9mIGRpYWxvZyBmb3IgdGhlIHBhcmFtZXRlciBmaWVsZHMnIHRvIGdldCB0aGUgdmFsaWQgdmFsdWUgc3RhdGUgZnJvbSB0aGUgcHJpb3JpdHkgYm91bmQgbWVzc2FnZS5cblx0ICovXG5cdHVwZGF0ZURpYWxvZ0JpbmRpbmdDb250ZXh0Rm9yRXJyb3IoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPCAyKSB7XG5cdFx0XHQvLyBXZSB3b3VsZCBuZWVkIHRvIHN3aXRjaCB0aGUgYmluZGluZyBjb250ZXh0IG9mIHRoZSBkaWFsb2cgb25seSB3aGVuIHdlIGhhdmUgbXVsdGlwbGUgY29udGV4dHMgZm9yIGV4ZWN1dGluZyB0aGUgYWN0aW9uLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxldCB3YXJuaW5nQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQsIGluZm9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBlcnJvbmVvdXNDdHggPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMuZmluZCgoY29udGV4dCkgPT4ge1xuXHRcdFx0Y29uc3QgbWVzc2FnZXMgPSBjb250ZXh0LmdldE1lc3NhZ2VzKCk7XG5cdFx0XHRyZXR1cm4gbWVzc2FnZXMuc29tZSgobXNnKSA9PiB7XG5cdFx0XHRcdC8vIFdlIGhvbGQgZmlyc3QgY29udGV4dCB3aXRoIHdhcm5pbmcgb3IgaW5mbyBtZXNzYWdlcy5cblx0XHRcdFx0d2FybmluZ0NvbnRleHQgPSAhd2FybmluZ0NvbnRleHQgJiYgbXNnLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuV2FybmluZyA/IGNvbnRleHQgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGluZm9Db250ZXh0ID0gIWluZm9Db250ZXh0ICYmIG1zZy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uID8gY29udGV4dCA6IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gRXJyb3IgaXMgZm91bmQhISEgV2Ugc2hhbGwgZXhpdC5cblx0XHRcdFx0cmV0dXJuIG1zZy5nZXRUeXBlKCkgPT09IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0Y29uc3QgY29udGV4dFRvVXNlID0gZXJyb25lb3VzQ3R4ID8/IHdhcm5pbmdDb250ZXh0ID8/IGluZm9Db250ZXh0O1xuXG5cdFx0aWYgKGNvbnRleHRUb1VzZSkge1xuXHRcdFx0dGhpcy5kaWFsb2c/LnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHRUb1VzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIGJ1c3kgc3RhdGUgb2YgdGhlIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgdW5sb2NrRGlhbG9nKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmRpYWxvZyAmJiBCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMuZGlhbG9nKSkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5kaWFsb2cpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciB0aGUgY2FuY2VsIGFjdGlvbiBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHJpdmF0ZSBvbkNhbmNlbCgpOiB2b2lkIHtcblx0XHR0aGlzLnBhcmFtZXRlcnNWYWx1ZXNSZWplY3QoRkVMaWJyYXJ5LkNvbnN0YW50cy5DYW5jZWxBY3Rpb25EaWFsb2cpO1xuXHRcdHRoaXMuY2xvc2VEaWFsb2coKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIGRpYWxvZy5cblx0ICovXG5cdHB1YmxpYyBjbG9zZURpYWxvZygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5kaWFsb2cpIHtcblx0XHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uUGFyYW1ldGVyRGlhbG9nQ2xvc2VkPy4oKTtcblx0XHRcdC8vIHdoZW4gdGhlIGRpYWxvZyBpcyBjYW5jZWxsZWQsIG1lc3NhZ2VzIG5lZWQgdG8gYmUgcmVtb3ZlZCBpbiBjYXNlIHRoZSBzYW1lIGFjdGlvbiBzaG91bGQgYmUgZXhlY3V0ZWQgYWdhaW5cblx0XHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlTWVzc2FnZXNGb3JQYXJhbWV0ZXIodGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5kaWFsb2cuY2xvc2UoKTtcblx0XHR9XG5cdFx0dGhpcy5pc0RpYWxvZ09wZW4gPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgYWN0aW9uIHJlc3VsdC5cblx0ICovXG5cdGFzeW5jIG9wZW5EaWFsb2coKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmRpYWxvZykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRXJyb3Igb24gb3BlbmluZyB0aGUgZGlhbG9nXCIpO1xuXHRcdH1cblx0XHRhd2FpdCBDb21tb25VdGlscy5zZXRVc2VyRGVmYXVsdHMoXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0dGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoKGFjdGlvblBhcmFtZXRlckluZm8pID0+IGFjdGlvblBhcmFtZXRlckluZm8ucGFyYW1ldGVyKSxcblx0XHRcdHRoaXMucGFyYW1ldGVyTW9kZWwsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHR0aGlzLnNldE1vZGVscyh0aGlzLmRpYWxvZyk7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLnZpZXc/LmFkZERlcGVuZGVudCh0aGlzLmRpYWxvZyk7XG5cdFx0YXdhaXQgdGhpcy5zZXRPcGVyYXRpb25EZWZhdWx0VmFsdWVzKHRoaXMuZGlhbG9nKTtcblx0XHR0aGlzLmRpYWxvZy5vcGVuKCk7XG5cdFx0dGhpcy5pc0RpYWxvZ09wZW4gPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIG1vZGVsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIG93bmVyIG9mIHRoZSBkaWFsb2dcblx0ICovXG5cdHByaXZhdGUgc2V0TW9kZWxzKGRpYWxvZzogRGlhbG9nKTogdm9pZCB7XG5cdFx0ZGlhbG9nLnNldE1vZGVsKHRoaXMucGFyYW1ldGVyTW9kZWwsIFwicGFyYW1zTW9kZWxcIik7XG5cdFx0ZGlhbG9nLmJpbmRFbGVtZW50KHtcblx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0bW9kZWw6IFwicGFyYW1zTW9kZWxcIlxuXHRcdH0pO1xuXHRcdGRpYWxvZy5zZXRNb2RlbCh0aGlzLnBhcmFtZXRlcnMubW9kZWwpO1xuXHRcdGRpYWxvZy5iaW5kRWxlbWVudCh7XG5cdFx0XHRwYXRoOiBgJHt0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID8gXCJcIiA6IFwiL1wifSR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYFxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdGRpYWxvZy5zZXRCaW5kaW5nQ29udGV4dCh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0pOyAvLyB1c2UgY29udGV4dCBvZiBmaXJzdCBzZWxlY3RlZCBsaW5lIGl0ZW1cblx0XHR9XG5cdFx0Ly8gZW1wdHkgbW9kZWwgdG8gYWRkIGVsZW1lbnRzIGR5bmFtaWNhbGx5IGRlcGVuZGluZyBvbiBudW1iZXIgb2YgTVZGIGZpZWxkcyBkZWZpbmVkIG9uIHRoZSBkaWFsb2dcblx0XHRkaWFsb2cuc2V0TW9kZWwobmV3IEpTT05Nb2RlbCh7fSksIFwibXZmdmlld1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBtZXNzYWdlcyBiZWZvcmUgb3BlbmluZyB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gX2V2ZW50XG5cdCAqL1xuXHRwcml2YXRlIGJlZm9yZU9wZW4oX2V2ZW50OiBEaWFsb2ckQmVmb3JlT3BlbkV2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXYWl0IGZvciB0aGUgcGFyYW1ldGVyIHZhbHVlcyB0byBiZSBzZXQuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgY29udGFpbmluZyB0aGUgcGFyYW1ldGVyIHZhbHVlcy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyB3YWl0Rm9yUGFyYW1ldGVyc1ZhbHVlcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIFByaW1pdGl2ZVR5cGU+PiB7XG5cdFx0cmV0dXJuIHRoaXMucGFyYW1ldGVyc1ZhbHVlc1Byb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyBpZiB0aGUgZGlhbG9nIGlzIG9wZW5lZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGlhbG9nIGlzIG9wZW5lZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzT3BlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pc0RpYWxvZ09wZW47XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIGEgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyIFRoZSBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIGJpbmRpbmdQYXJhbWV0ZXIgVGhlIGJpbmRpbmcgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIGRpYWxvZ1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShcblx0XHRwYXJhbWV0ZXI6IEFjdGlvblBhcmFtZXRlcixcblx0XHRiaW5kaW5nUGFyYW1ldGVyOiBzdHJpbmcsXG5cdFx0ZGlhbG9nOiBEaWFsb2dcblx0KTogUHJvbWlzZTxQYXJhbWV0ZXJEZWZhdWx0VmFsdWU+IHtcblx0XHRjb25zdCBvcGVyYXRpb25CaW5kaW5nID0gZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXHRcdGNvbnN0IHBhcmFtZXRlck1vZGVsRGF0YSA9IHRoaXMucGFyYW1ldGVyTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IHBhcmFtTmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHBhcmFtZXRlci5hbm5vdGF0aW9ucy5VST8uUGFyYW1ldGVyRGVmYXVsdFZhbHVlO1xuXHRcdC8vIENhc2UgMTogVGhlcmUgaXMgYSBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUgYW5ub3RhdGlvblxuXHRcdGlmIChkZWZhdWx0VmFsdWUpIHtcblx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubGVuZ3RoID4gMCAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihkZWZhdWx0VmFsdWUpKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aEZvckNvbnRleHQ6IHN0cmluZyA9XG5cdFx0XHRcdFx0XHRiaW5kaW5nUGFyYW1ldGVyICYmIGRlZmF1bHRWYWx1ZS5wYXRoLnN0YXJ0c1dpdGgoYCR7YmluZGluZ1BhcmFtZXRlcn0vYClcblx0XHRcdFx0XHRcdFx0PyBkZWZhdWx0VmFsdWUucGF0aC5yZXBsYWNlKGAke2JpbmRpbmdQYXJhbWV0ZXJ9L2AsIFwiXCIpXG5cdFx0XHRcdFx0XHRcdDogZGVmYXVsdFZhbHVlLnBhdGg7XG5cdFx0XHRcdFx0bGV0IHBhcmFtVmFsdWUgPSBhd2FpdCBDb21tb25VdGlscy5yZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoZGVmYXVsdFZhbHVlLnBhdGgsIG9wZXJhdGlvbkJpbmRpbmcuZ2V0TW9kZWwoKSk7XG5cdFx0XHRcdFx0aWYgKHBhcmFtVmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdHBhcmFtVmFsdWUgPSBhd2FpdCBvcGVyYXRpb25CaW5kaW5nLmdldFBhcmFtZXRlckNvbnRleHQoKS5yZXF1ZXN0UHJvcGVydHkoZGVmYXVsdFZhbHVlLnBhdGgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdC8vIEZvciBtdWx0aSBzZWxlY3QsIG5lZWQgdG8gbG9vcCBvdmVyIGNvbnRleHRzIChhcyBjb250ZXh0cyBjYW5ub3QgYmUgcmV0cmlldmVkIHZpYSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgb3BlcmF0aW9uIGJpbmRpbmcpXG5cblx0XHRcdFx0XHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMuc29tZSgoY29udGV4dCkgPT4gY29udGV4dC5nZXRQcm9wZXJ0eShwYXRoRm9yQ29udGV4dCkgIT09IHBhcmFtVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIHRoZSB2YWx1ZXMgZnJvbSB0aGUgY29udGV4dHMgYXJlIG5vdCBhbGwgdGhlIHNhbWUsIGRvIG5vdCBwcmVmaWxsXG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1OYW1lLFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0bm9Qb3NzaWJsZVZhbHVlOiB0cnVlXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB7IHBhcmFtTmFtZSwgdmFsdWU6IHBhcmFtVmFsdWUgfTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZWFkaW5nIGRlZmF1bHQgYWN0aW9uIHBhcmFtZXRlclwiLCBwYXJhbU5hbWUsIHRoaXMuYWN0aW9uLm5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRwYXJhbU5hbWUsXG5cdFx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0bGF0ZVByb3BlcnR5RXJyb3I6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBDYXNlIDEuMjogUGFyYW1ldGVyRGVmYXVsdFZhbHVlIGRlZmluZXMgYSBmaXhlZCBzdHJpbmcgdmFsdWUgKGkuZS4gdlBhcmFtRGVmYXVsdFZhbHVlID0gJ3NvbWVTdHJpbmcnKVxuXHRcdFx0XHRyZXR1cm4geyBwYXJhbU5hbWUsIHZhbHVlOiBkZWZhdWx0VmFsdWUudmFsdWVPZigpIH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IHBhcmFtTmFtZSwgdmFsdWU6IHBhcmFtZXRlck1vZGVsRGF0YVtwYXJhbU5hbWVdIH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbWFuaWZlc3QgdmFsdWVzLlxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgbWFuaWZlc3QgdmFsdWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRNYW5pZmVzdEZ1bmN0aW9uVmFsdWVzKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuZGlhbG9nPy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmICghdGhpcy5wYXJhbWV0ZXJzLnZpZXcgfHwgIXRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24gfHwgIWJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXG5cdFx0cmV0dXJuIEZQTUhlbHBlci5sb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb25cblx0XHRcdFx0LnN1YnN0cmluZygwLCB0aGlzLnBhcmFtZXRlcnMuZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMSlcblx0XHRcdFx0LnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpLFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5zdWJzdHJpbmcoXG5cdFx0XHRcdHRoaXMucGFyYW1ldGVycy5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24ubGFzdEluZGV4T2YoXCIuXCIpICsgMSxcblx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbi5sZW5ndGhcblx0XHRcdCksXG5cdFx0XHR0aGlzLnBhcmFtZXRlcnMudmlldyxcblx0XHRcdGJpbmRpbmdDb250ZXh0LFxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzXG5cdFx0KSBhcyBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcmVkZWZpbmVkIHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBiaW5kaW5nUGFyYW1ldGVyIFRoZSBiaW5kaW5nIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gZGlhbG9nIFRoZSBkaWFsb2dcblx0ICogQHJldHVybnMgVGhlIHByb21pc2UgY29udGFpbmluZyBhbGwgcHJlZGVmaW5lZCB2YWx1ZXMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldFByZURlZmluZWRWYWx1ZXMoXG5cdFx0YmluZGluZ1BhcmFtZXRlcjogc3RyaW5nLFxuXHRcdGRpYWxvZzogRGlhbG9nXG5cdCk6IFByb21pc2U8e1xuXHRcdGNvbnRleHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGRlZmF1bHRWYWx1ZXM6IFBhcmFtZXRlckRlZmF1bHRWYWx1ZVtdO1xuXHRcdGZ1bmN0aW9uVmFsdWVzOiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHR9PiB7XG5cdFx0Y29uc3QgYm91bmRGdW5jdGlvbk5hbWUgPSB0aGlzLmFjdGlvbi5hbm5vdGF0aW9ucy5Db21tb24/LkRlZmF1bHRWYWx1ZXNGdW5jdGlvbj8udmFsdWVPZigpO1xuXHRcdGxldCByZXF1ZXN0Q29udGV4dE9iamVjdDogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSBQcm9taXNlLnJlc29sdmUoe30pO1xuXHRcdGxldCBmdW5jdGlvblBhcmFtczogUHJvbWlzZTxPRGF0YVY0Q29udGV4dD5bXSA9IFtdO1xuXHRcdGlmICh0aGlzLmFjdGlvbi5pc0JvdW5kKSB7XG5cdFx0XHRpZiAodHlwZW9mIGJvdW5kRnVuY3Rpb25OYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldE1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IGJvdW5kRnVuY3Rpb24gPSBPcGVyYXRpb24uZ2V0T3BlcmF0aW9uRnJvbU5hbWUoYm91bmRGdW5jdGlvbk5hbWUsIG1vZGVsLCB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0pO1xuXHRcdFx0XHRpZiAoYm91bmRGdW5jdGlvbikge1xuXHRcdFx0XHRcdGZ1bmN0aW9uUGFyYW1zID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLm1hcChhc3luYyAoY29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgbmV3IE9EYXRhT3BlcmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRib3VuZEZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0XHRcdG1vZGVsOiBtb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogW2NvbnRleHRdXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRlbmhhbmNlJHNlbGVjdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXBJZDogXCJmdW5jdGlvbkdyb3VwXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KS5leGVjdXRlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0LmZpbHRlcihpc0Z1bGZpbGxlZClbMF0/LnZhbHVlLmJvdW5kQ29udGV4dDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJlcXVlc3RDb250ZXh0T2JqZWN0ID0gdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgY29udGV4dFZhbHVlcyA9IGF3YWl0IHJlcXVlc3RDb250ZXh0T2JqZWN0O1xuXG5cdFx0XHRjb25zdCBwcm9taXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtcblx0XHRcdFx0UHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0dGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoYXN5bmMgKGFjdGlvblBhcmFtZXRlckluZm8pID0+XG5cdFx0XHRcdFx0XHR0aGlzLmdldFBhcmFtZXRlckRlZmF1bHRWYWx1ZShhY3Rpb25QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlciwgYmluZGluZ1BhcmFtZXRlciwgZGlhbG9nKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSxcblx0XHRcdFx0UHJvbWlzZS5hbGwoZnVuY3Rpb25QYXJhbXMpLFxuXHRcdFx0XHR0aGlzLmdldE1hbmlmZXN0RnVuY3Rpb25WYWx1ZXMoKVxuXHRcdFx0XSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb250ZXh0VmFsdWVzLFxuXHRcdFx0XHRkZWZhdWx0VmFsdWVzOiBwcm9taXNlc1swXSxcblx0XHRcdFx0ZnVuY3Rpb25WYWx1ZXM6IHByb21pc2VzWzFdLFxuXHRcdFx0XHRtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzOiBwcm9taXNlc1syXVxuXHRcdFx0fTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgcGFyYW1ldGVyXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHQvLyBSZW1vdmUgbWVzc2FnZXMgcmVsYXRpbmcgdG8gdGhlIGZ1bmN0aW9uIGZvciBkZWZhdWx0IHZhbHVlcyBhcyB0aGV5IGFyZW4ndCBoZWxwZnVsIGZvciBhIHVzZXJcblx0XHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjb250ZXh0VmFsdWVzOiB7fSxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlczogW10sXG5cdFx0XHRcdGZ1bmN0aW9uVmFsdWVzOiBbXSxcblx0XHRcdFx0bWFuaWZlc3RGdW5jdGlvblZhbHVlczoge31cblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuZWQuIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBmaXJzdCBmaWVsZCB3aXRob3V0IG9wZW5pbmcgdGhlIFZIIGRpYWxvZy5cblx0ICovXG5cdHByaXZhdGUgYWZ0ZXJPcGVuKCk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0VmlzaWJsZVBhcmFtZXRlciA9IHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MuZmluZCgocGFyYW1ldGVySW5mbykgPT4gcGFyYW1ldGVySW5mby5maWVsZC5nZXRWaXNpYmxlKCkpO1xuXHRcdGlmIChmaXJzdFZpc2libGVQYXJhbWV0ZXIpIHtcblx0XHRcdGNvbnN0IGZpcnN0RmllbGQgPSBmaXJzdFZpc2libGVQYXJhbWV0ZXI/LmZpZWxkO1xuXHRcdFx0Y29uc3QgZm9jdXNJbmZvID0gZmlyc3RGaWVsZD8uZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRcdGZpcnN0RmllbGQ/LmZvY3VzKGZvY3VzSW5mbyk7XG5cdFx0fVxuXHRcdHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uUGFyYW1ldGVyRGlhbG9nT3BlbmVkPy4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgaW5mby5cblx0ICogQHBhcmFtIGRpYWxvZ0NvbnRlbnRzIFRoZSBkaWFsb2cgY29udGVudHNcblx0ICovXG5cdHByaXZhdGUgcmVnaXN0ZXJBY3Rpb25QYXJhbWV0ZXJJbmZvKGRpYWxvZ0NvbnRlbnRzOiBEaWFsb2dDb250ZW50VHlwZXNbXSk6IHZvaWQge1xuXHRcdC8vUmVnaXN0ZXIgdGhlIGZpZWxkXG5cdFx0ZGlhbG9nQ29udGVudHMuZm9yRWFjaCgoZGlhbG9nQ29udGVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gZGlhbG9nQ29udGVudD8ucGFyYW1ldGVyO1xuXHRcdFx0Y29uc3QgZmllbGQgPSBkaWFsb2dDb250ZW50Py5mb3JtRWxlbWVudHM/LlsxXTtcblx0XHRcdHRoaXMuYWN0aW9uUGFyYW1ldGVySW5mb3MucHVzaCh7XG5cdFx0XHRcdHBhcmFtZXRlcixcblx0XHRcdFx0ZmllbGQsXG5cdFx0XHRcdGlzTXVsdGlWYWx1ZTogcGFyYW1ldGVyLmlzQ29sbGVjdGlvbixcblx0XHRcdFx0aGFzRXJyb3I6IGZhbHNlXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMuXG5cdCAqIEBwYXJhbSBkaWFsb2cgVGhlIGRpYWxvZ1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgc2V0T3BlcmF0aW9uRGVmYXVsdFZhbHVlcyhkaWFsb2c6IERpYWxvZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXIgPSB0aGlzLmFjdGlvbi5pc0JvdW5kID8gdGhpcy5hY3Rpb24ucGFyYW1ldGVyc1swXS5uYW1lIDogXCJcIjtcblx0XHRjb25zdCB7IGNvbnRleHRWYWx1ZXMsIGRlZmF1bHRWYWx1ZXMsIGZ1bmN0aW9uVmFsdWVzLCBtYW5pZmVzdEZ1bmN0aW9uVmFsdWVzIH0gPSBhd2FpdCB0aGlzLmdldFByZURlZmluZWRWYWx1ZXMoXG5cdFx0XHRiaW5kaW5nUGFyYW1ldGVyLFxuXHRcdFx0ZGlhbG9nXG5cdFx0KTtcblx0XHRjb25zdCBvcGVyYXRpb25CaW5kaW5nID0gZGlhbG9nLmdldE9iamVjdEJpbmRpbmcoKSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXG5cdFx0aWYgKGJpbmRpbmdQYXJhbWV0ZXIpIHtcblx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKGJpbmRpbmdQYXJhbWV0ZXIsIGNvbnRleHRWYWx1ZXMpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaSBpbiB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zKSB7XG5cdFx0XHRpZiAodGhpcy5hY3Rpb25QYXJhbWV0ZXJJbmZvc1tpXS5wYXJhbWV0ZXIubmFtZSAhPT0gXCJSZXN1bHRJc0FjdGl2ZUVudGl0eVwiKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlck5hbWUgPSB0aGlzLmFjdGlvblBhcmFtZXRlckluZm9zW2ldLnBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHQvLyBQYXJhbWV0ZXIgdmFsdWVzIHByb3ZpZGVkIGluIHRoZSBjYWxsIG9mIGludm9rZUFjdGlvbiBvdmVycnVsZSBvdGhlciBzb3VyY2VzXG5cdFx0XHRcdGNvbnN0IHBhcmFtZXRlclByb3ZpZGVkVmFsdWUgPSB0aGlzLnBhcmFtZXRlclZhbHVlcz8uZmluZCgoZWxlbWVudCkgPT4gZWxlbWVudC5uYW1lID09PSBwYXJhbWV0ZXJOYW1lKT8udmFsdWU7XG5cdFx0XHRcdGlmIChwYXJhbWV0ZXJQcm92aWRlZFZhbHVlKSB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyUHJvdmlkZWRWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAobWFuaWZlc3RGdW5jdGlvblZhbHVlcy5oYXNPd25Qcm9wZXJ0eShwYXJhbWV0ZXJOYW1lKSkge1xuXHRcdFx0XHRcdG9wZXJhdGlvbkJpbmRpbmcuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIG1hbmlmZXN0RnVuY3Rpb25WYWx1ZXNbcGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZXNbaV0gJiYgZGVmYXVsdFZhbHVlc1tpXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgZGVmYXVsdFZhbHVlc1tpXS52YWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5hY3Rpb24uYW5ub3RhdGlvbnMuQ29tbW9uPy5EZWZhdWx0VmFsdWVzRnVuY3Rpb24gJiYgIWRlZmF1bHRWYWx1ZXNbaV0ubm9Qb3NzaWJsZVZhbHVlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0T2ZGdW5jdGlvblZhbHVlcyA9IG5ldyBTZXQ8c3RyaW5nPihcblx0XHRcdFx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5tYXAoKGNvbnRleHQsIGluZGV4KSA9PiBmdW5jdGlvblZhbHVlc1tpbmRleF0uZ2V0T2JqZWN0KHBhcmFtZXRlck5hbWUpKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHNldE9mRnVuY3Rpb25WYWx1ZXMuc2l6ZSA9PT0gMSAmJiBzZXRPZkZ1bmN0aW9uVmFsdWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHQvL3BhcmFtIHZhbHVlcyBhcmUgYWxsIHRoZSBzYW1lOlxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uQmluZGluZy5zZXRQYXJhbWV0ZXIocGFyYW1ldGVyTmFtZSwgQXJyYXkuZnJvbShzZXRPZkZ1bmN0aW9uVmFsdWVzKVswXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgYXQgbGVhc3Qgb25lIERlZmF1bHQgUHJvcGVydHkgaXMgYSBMYXRlIFByb3BlcnR5IGFuZCBhbiBlVGFnIGVycm9yIHdhcyByYWlzZWQuXG5cdFx0aWYgKGRlZmF1bHRWYWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlLmxhdGVQcm9wZXJ0eUVycm9yKSkge1xuXHRcdFx0Y29uc3QgcmVmcmVzaCA9IHRoaXMucmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKTtcblx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhnZXRSZXNvdXJjZU1vZGVsKHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQpLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19MQVRFX1BST1BFUlRZXCIpLCB7XG5cdFx0XHRcdGFjdGlvbnM6IFtyZWZyZXNoLCBNZXNzYWdlQm94LkFjdGlvbi5PS10sXG5cdFx0XHRcdGVtcGhhc2l6ZWRBY3Rpb246IHJlZnJlc2gsXG5cdFx0XHRcdG9uQ2xvc2U6IChhY3Rpb246IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdGlmIChhY3Rpb24gPT09IHJlZnJlc2gpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMucGFyYW1ldGVycy52aWV3Py5nZXRDb250cm9sbGVyKCkuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0XHRcdFx0XHQoZXh0ZW5zaW9uQVBJIGFzIExpc3RSZXBvcnRFeHRlbnNpb25BUEkgfCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJKS5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50V2lkdGg6IFwiMjVlbVwiXG5cdFx0XHR9IGFzIG9iamVjdCk7XG5cdFx0fVxuXG5cdFx0Ly8gZGVzdHJveSB0aGUgb2RhdGFDb250ZXh0QmluZGluZyByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbiBjYWxsXG5cdFx0Zm9yIChjb25zdCBmdW5jdGlvbkNvbnRleHQgb2YgZnVuY3Rpb25WYWx1ZXMpIHtcblx0XHRcdGNvbnN0IGJpbmRpbmcgPSBmdW5jdGlvbkNvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0aWYgKGJpbmRpbmc/LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdGJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBjbG9zZSBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0cHJpdmF0ZSBhZnRlckNsb3NlKCk6IHZvaWQge1xuXHRcdHRoaXMuZGlhbG9nPy5kZXN0cm95KCk7XG5cdFx0dGhpcy5idXR0b25Mb2NrID0gZmFsc2U7IC8vbmVlZGVkIGhlcmUsIG5vdCBpbiB0aGUgcHJlc3MgZXZlbnRzIGZpbmFsbHkgY2xhdXNlLiBJbiBjYXNlIHRoZSBVSSBpcyBzbHVnZ2lzaCwgYmVnaW4gYnV0dG9uIGNvdWxkIGJlIHByZXNzZWQgYWdhaW4uXG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgdXNlZCBmb3IgdGV4dCBhbm5vdGF0aW9uIGluIHRoZSBWYWx1ZUhlbHAgZm9yIHRoZSBhY3Rpb24gcGFyYW1ldGVyIGFuZCBwcm92aWRlcyB0aGUgZm9ybWF0dGVkIGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBwYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGZvcm0gZWxlbWVudCBjb250cm9sLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRBZGRpdGlvbmFsVmFsdWUob0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcblx0XHRsZXQgdGV4dENvbnRleHQ7XG5cblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbG9jYWxEYXRhUHJvcGVydHkgPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0T2JqZWN0KCk/LiROYW1lO1xuXHRcdGNvbnN0IHZhbHVlTGlzdEJ5UXVhbGlmaWVyID0gYXdhaXQgdGhpcy5tZXRhTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8oY29udGV4dFBhdGgsIHRydWUpO1xuXG5cdFx0Ly8gTG9vayBmb3IgTG9jYWxEYXRhUHJvcGVydHkgaW4gVmFsdWVMaXN0UGFyYW1ldGVyT3V0IG9yIFZhbHVlTGlzdFBhcmFtZXRlckluT3V0IHdoZXJlIHRoaXMgaXMgdGhlIHBhcmFtZXRlciBuYW1lXG5cdFx0Ly8gV2Ugb25seSBjb25zaWRlciBUZXh0QW5ub3RhdGlvbnMgZm9yIHRoaXMgYWN0aW9uIHBhcmFtZXRlclxuXHRcdGNvbnN0IHZhbHVlTGlzdFBhcmFtZXRlciA9IHZhbHVlTGlzdEJ5UXVhbGlmaWVyW1wiXCJdLlBhcmFtZXRlcnMuZmluZChcblx0XHRcdChwYXJhbWV0ZXI6IEFubm90YXRpb25WYWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHBhcmFtZXRlci4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHQocGFyYW1ldGVyLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIiAmJlxuXHRcdFx0XHRcdHBhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCA9PT0gbG9jYWxEYXRhUHJvcGVydHkpXG5cdFx0KTtcblxuXHRcdGlmICh2YWx1ZUxpc3RQYXJhbWV0ZXIgJiYgdmFsdWVMaXN0UGFyYW1ldGVyLlZhbHVlTGlzdFByb3BlcnR5KSB7XG5cdFx0XHRjb25zdCB0ZXh0UHJvcGVydHkgPSB2YWx1ZUxpc3RQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHQvLyBOb3cgd2UgaGF2ZSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBpcyB0aGUgYW5ub3RhdGVkIHRleHRcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGAvJHt2YWx1ZUxpc3RCeVF1YWxpZmllcltcIlwiXS5Db2xsZWN0aW9uUGF0aH0vJHt0ZXh0UHJvcGVydHl9YDtcblx0XHRcdGNvbnN0IHByb3BBbm5vdGF0aW9ucyA9IHRoaXMubWV0YU1vZGVsLmdldE9iamVjdChgJHtwcm9wZXJ0eVBhdGh9QGApO1xuXG5cdFx0XHRpZiAocHJvcEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkge1xuXHRcdFx0XHRjb25zdCB0ZXh0UHJvcCA9IHByb3BBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXTtcblx0XHRcdFx0Y29uc3QgdGV4dFBhdGggPSBgLyR7dmFsdWVMaXN0QnlRdWFsaWZpZXJbXCJcIl0uQ29sbGVjdGlvblBhdGh9LyR7dGV4dFByb3AuJFBhdGh9YDtcblx0XHRcdFx0dGV4dENvbnRleHQgPSB0aGlzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0ZXh0UGF0aCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZXh0Q29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm4gQW5ub3RhdGlvbkhlbHBlci5mb3JtYXQodGV4dENvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogdGV4dENvbnRleHQgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZhbHVlIGJpbmRpbmcgZm9yIGFuIGFjdGlvbiBwYXJhbWV0ZXIuIFdlIGFkZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBjdXJyZW5jeSBhbmQgdW5pdCBiZWF1c2UgdGhleSBhcmUgbm90XG5cdCAqIHBhcnQgb2YgdGhlIGFubm90YXRpb24gaGVscGVyIGZvcm1hdCBmdW5jdGlvbi5cblx0ICogQHBhcmFtIHBhcmFtZXRlciBUaGUgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJDb250ZXh0IFRoZSBwYXJhbWV0ZXIgY29udGV4dFxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgcGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGZvciB0aGUgdmFsdWUgb2YgdGhlIGFjdGlvbiBwYXJhbWV0ZXIuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGdldEFQRGlhbG9nQmluZGluZ1ZhbHVlKFxuXHRcdHBhcmFtZXRlcjogQWN0aW9uUGFyYW1ldGVyLFxuXHRcdHBhcmFtZXRlckNvbnRleHQ6IENvbnRleHRcblx0KTogUHJvbWlzZTxDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHN0cmluZz4ge1xuXHRcdGNvbnN0IGFjdGlvbk1ldGFQYXRoID0gdGhpcy5hY3Rpb24uaXNCb3VuZFxuXHRcdFx0PyBgJHt0aGlzLm1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0aGlzLnBhcmFtZXRlcnMuY29udGV4dHNbMF0uZ2V0UGF0aCgpKX0vJHtjb252ZXJ0VHlwZXModGhpcy5tZXRhTW9kZWwpLm5hbWVzcGFjZX0uJHtcblx0XHRcdFx0XHR0aGlzLmFjdGlvbi5uYW1lXG5cdFx0XHQgIH1gXG5cdFx0XHQ6IGAvJHt0aGlzLmFjdGlvbi5uYW1lfWA7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSB0aGlzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHthY3Rpb25NZXRhUGF0aH0vJHtwYXJhbWV0ZXIubmFtZX1gKSE7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5T2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxBY3Rpb25QYXJhbWV0ZXI+KG1ldGFDb250ZXh0KTtcblx0XHRcdHJldHVybiBnZXRWYWx1ZUJpbmRpbmcocHJvcGVydHlPYmplY3RQYXRoLCB7fSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdC8vIEZhbGxiYWNrIHRvIG9sZCBhcHByb2FjaCB1bnRpbCB3ZSBjYW4gcmVhY2ggdW5ib3VuZCBhY3Rpb25zXG5cdFx0XHRyZXR1cm4gQW5ub3RhdGlvbkhlbHBlci5mb3JtYXQocGFyYW1ldGVyQ29udGV4dC5nZXRPYmplY3QoKSwgeyBjb250ZXh0OiBwYXJhbWV0ZXJDb250ZXh0IH0pO1xuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BZ0dxQkEscUJBQXFCO0lBNEJ6QyxTQUFBQSxzQkFDa0JDLE1BQWMsRUFDZEMsVUFhaEIsRUFDZ0JDLGVBQXNELEVBQ3REQyxhQUFpQyxFQUNqQ0MsY0FBOEIsRUFDOUM7TUF4Q0Y7TUFDQTtNQUNBO01BQUEsS0FDUUMsWUFBWSxHQUFHLEtBQUs7TUFBQSxLQU1wQkMsVUFBVSxHQUFHLEtBQUs7TUFBQSxLQUlUQyxvQkFBb0IsR0FBNkQsRUFBRTtNQUFBLEtBRW5GQyxjQUFjLEdBQWMsSUFBSUMsU0FBUyxDQUFDO1FBQzFEQyxZQUFZLEVBQUUsQ0FBQztNQUNoQixDQUFDLENBQUM7TUFBQSxLQUtnQlYsTUFBYyxHQUFkQSxNQUFjO01BQUEsS0FDZEMsVUFhaEIsR0FiZ0JBLFVBYWhCO01BQUEsS0FDZ0JDLGVBQXNELEdBQXREQSxlQUFzRDtNQUFBLEtBQ3REQyxhQUFpQyxHQUFqQ0EsYUFBaUM7TUFBQSxLQUNqQ0MsY0FBOEIsR0FBOUJBLGNBQThCO01BRS9DLElBQUksQ0FBQ08sVUFBVSxHQUFHQyxZQUFZLENBQUNDLGFBQWEsQ0FBQyxJQUFJLENBQUNiLE1BQU0sQ0FBQztNQUN6RCxJQUFJLENBQUNjLFNBQVMsR0FBRyxJQUFJLENBQUNiLFVBQVUsQ0FBQ2MsS0FBSyxDQUFDQyxZQUFZLENBQUMsQ0FBQztNQUNyRCxJQUFJLENBQUNDLGFBQWEsR0FBRyxJQUFJLENBQUNoQixVQUFVLENBQUNpQixJQUFJLEdBQUdDLGdCQUFnQixDQUFDLElBQUksQ0FBQ2xCLFVBQVUsQ0FBQ2lCLElBQUksQ0FBQyxHQUFHQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNsQixVQUFVLENBQUNtQixZQUFZLENBQUM7TUFDbkksSUFBSSxDQUFDQyx1QkFBdUIsR0FBRyxJQUFJQyxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7UUFDL0QsSUFBSSxDQUFDQyx1QkFBdUIsR0FBR0YsT0FBTztRQUN0QyxJQUFJLENBQUNHLHNCQUFzQixHQUFHRixNQUFNO01BQ3JDLENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFKQ0csUUFBQSxHQUFBNUIscUJBQUE7SUFBQSxJQUFBNkIsTUFBQSxHQUFBN0IscUJBQUEsQ0FBQThCLFNBQUE7SUFBQUQsTUFBQSxDQUtRRSxvQkFBb0IsR0FBNUIsU0FBUUEsb0JBQW9CQSxDQUFDQyxTQUEwQixFQUEyQztNQUNqRyxNQUFNQyxXQUFXLEdBQUdELFNBQVMsQ0FBQ0MsV0FBVztRQUN4Q0MsWUFBWSxHQUFHRCxXQUFXLENBQUNFLE1BQU0sRUFBRUMsWUFBWTtRQUMvQ0MsU0FBUyxHQUFJSixXQUFXLENBQUNLLElBQUksRUFBMENDLFNBQVMsRUFBRUMsT0FBTyxDQUFDLENBQUM7UUFDM0ZDLFFBQVEsR0FBSVIsV0FBVyxDQUFDSyxJQUFJLEVBQTBDSSxRQUFRLEVBQUVGLE9BQU8sQ0FBQyxDQUFDO01BRTFGLElBQUlILFNBQVMsSUFBSUksUUFBUSxFQUFFO1FBQzFCLE9BQU9FLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDQyxRQUFRLENBQUM7TUFDeEMsQ0FBQyxNQUFNLElBQUlYLFlBQVksRUFBRTtRQUN4QixPQUFPWSxNQUFNLENBQ1pDLG9CQUFvQixDQUFDZixTQUFTLENBQUMsRUFDL0JZLGFBQWEsQ0FBQ0MsUUFBUSxFQUN0QkMsTUFBTSxDQUFDRSxvQkFBb0IsQ0FBQ2hCLFNBQVMsQ0FBQyxFQUFFWSxhQUFhLENBQUNLLFFBQVEsRUFBRUwsYUFBYSxDQUFDTSxRQUFRLENBQ3ZGLENBQUM7TUFDRjtNQUNBLE9BQU9QLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDTSxRQUFRLENBQUM7SUFDeEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFyQixNQUFBLENBS2NzQixpQkFBaUIsR0FBL0IsZUFBY0EsaUJBQWlCQSxDQUFDbkIsU0FBMEIsRUFBNEI7TUFDckYsTUFBTW9CLGNBQWMsR0FBRyxJQUFJLENBQUNuRCxNQUFNLENBQUNvRCxPQUFPLEdBQ3ZDLEdBQUcsSUFBSSxDQUFDdEMsU0FBUyxDQUFDdUMsV0FBVyxDQUFDLElBQUksQ0FBQ3BELFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJQyxZQUFZLENBQUMsSUFBSSxDQUFDMUMsU0FBUyxDQUFDLENBQUMyQyxTQUFTLElBQzlHLElBQUksQ0FBQ3pELE1BQU0sQ0FBQzBELElBQUksRUFDZCxHQUNGLElBQUksSUFBSSxDQUFDMUQsTUFBTSxDQUFDMEQsSUFBSSxFQUFFO01BQ3pCLE1BQU1DLFdBQVcsR0FBRyxJQUFJLENBQUM3QyxTQUFTLENBQUM4QyxvQkFBb0IsQ0FBQyxHQUFHVCxjQUFjLElBQUlwQixTQUFTLENBQUMyQixJQUFJLEVBQUUsQ0FBRTtNQUMvRixJQUFJRyxLQUFLO01BQ1QsSUFBSUMsS0FBSyxHQUFHL0IsU0FBUyxDQUFDQyxXQUFXLENBQUNFLE1BQU0sRUFBRTZCLEtBQUssR0FDNUMsSUFBSSxDQUFDOUMsYUFBYSxDQUFDK0MsT0FBTyxDQUFDakMsU0FBUyxDQUFDQyxXQUFXLENBQUNFLE1BQU0sQ0FBQzZCLEtBQUssQ0FBQ0UsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUN6RWxDLFNBQVMsQ0FBQzJCLElBQUk7TUFDakIsSUFBSVEsZUFBZTtNQUNuQixJQUFJbkMsU0FBUyxDQUFDb0MsWUFBWSxFQUFFO1FBQzNCTixLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUNPLGdCQUFnQixDQUFDckMsU0FBUyxFQUFFNEIsV0FBVyxDQUFDO01BQzVELENBQUMsTUFBTSxJQUFJLENBQUM1QixTQUFTLENBQUNzQyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUNDLGlCQUFpQixDQUFDeEMsU0FBUyxDQUFDLEVBQUU7UUFDbkZtQyxlQUFlLEdBQUcsSUFBSSxDQUFDSyxpQkFBaUIsQ0FBQ3hDLFNBQVMsQ0FBQztRQUNuRDtRQUNBK0IsS0FBSyxHQUFHSSxlQUFlLEVBQUVsQyxXQUFXLENBQUNFLE1BQU0sRUFBRTZCLEtBQUssR0FDL0MsSUFBSSxDQUFDOUMsYUFBYSxDQUFDK0MsT0FBTyxDQUFDRSxlQUFlLENBQUNsQyxXQUFXLENBQUNFLE1BQU0sQ0FBQzZCLEtBQUssQ0FBQ0UsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUM5RUMsZUFBZSxFQUFFUixJQUFlO1FBQ3BDRyxLQUFLLEdBQUcsSUFBSSxDQUFDVyxrQkFBa0IsQ0FBQ3pDLFNBQVMsQ0FBQztNQUMzQyxDQUFDLE1BQU07UUFDTjhCLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQ1ksV0FBVyxDQUFDMUMsU0FBUyxFQUFFNEIsV0FBVyxDQUFDO01BQ3ZEO01BQ0EsT0FDQ2UsS0FBQSxDQUFBQyxTQUFBO1FBQUFDLFFBQUEsR0FDQ0MsSUFBQSxDQUFDZCxLQUFLO1VBQUNlLEVBQUUsRUFBRUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFaEQsU0FBUyxDQUFDMkIsSUFBSSxFQUFFUSxlQUFlLEVBQUVSLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBRTtVQUFDc0IsSUFBSSxFQUFFbEI7UUFBTSxDQUFFLENBQUMsRUFDN0ZELEtBQUs7TUFBQSxDQUNMLENBQUM7SUFFTDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBakMsTUFBQSxDQU1jd0MsZ0JBQWdCLEdBQTlCLGVBQWNBLGdCQUFnQkEsQ0FBQ3JDLFNBQTBCLEVBQUVrRCxnQkFBeUIsRUFBNEI7TUFDL0csSUFBSUMsT0FBTyxHQUFHLE9BQU87TUFDckIsSUFBSTtRQUNIQSxPQUFPLEdBQUcsTUFBTUMsV0FBVyxDQUFDQyx3QkFBd0IsQ0FBQ0gsZ0JBQWdCLENBQUNJLFNBQVMsQ0FBQyxDQUFDLEVBQUU7VUFBRUMsT0FBTyxFQUFFTDtRQUFpQixDQUFDLENBQUM7TUFDbEgsQ0FBQyxDQUFDLE9BQU9NLEdBQVksRUFBRTtRQUN0QkMsR0FBRyxDQUFDQyxPQUFPLENBQUMscUZBQXFGMUQsU0FBUyxDQUFDMkIsSUFBSSxNQUFNNkIsR0FBRyxFQUFFLENBQUM7TUFDNUg7TUFDQSxNQUFNRyxXQUFXLEdBQUczRCxTQUFTLENBQUNDLFdBQVcsQ0FBQzJELEVBQUUsRUFBRUMsV0FBaUU7TUFDL0csTUFBTUMscUJBQXFCLEdBQUdILFdBQVcsR0FBR0ksaUJBQWlCLENBQUNDLDJCQUEyQixDQUFDTCxXQUFXLENBQUMsQ0FBQyxHQUFHTSxTQUFTO01BQ25ILE1BQU1DLGFBQWEsR0FBR0MsZ0JBQWdCLEdBQUduRSxTQUFTLENBQUNzQyxJQUFJLENBQUMsRUFBRUEsSUFBSTtNQUM5RCxPQUNDUSxJQUFBLENBQUNzQixlQUFlO1FBQ2ZyQixFQUFFLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRWhELFNBQVMsQ0FBQzJCLElBQUksQ0FBQyxDQUFFO1FBQ3ZDMEMsV0FBVyxFQUFFUCxxQkFBc0I7UUFDbkNRLEtBQUssRUFBRTtVQUFFQyxJQUFJLEVBQUUsWUFBWXZFLFNBQVMsQ0FBQzJCLElBQUk7UUFBRyxDQUFFO1FBQzlDNkMsUUFBUSxFQUFFO1VBQUU3QyxJQUFJLEVBQUU7UUFBbUQsQ0FBRTtRQUN2RXdCLE9BQU8sRUFBRUEsT0FBUTtRQUNqQnNCLFFBQVEsRUFBRSxJQUFJLENBQUMxRSxvQkFBb0IsQ0FBQ0MsU0FBUyxDQUFFO1FBQy9DMEUsS0FBSyxFQUFDLE1BQU07UUFDWkMsYUFBYSxFQUFFM0UsU0FBUyxDQUFDQyxXQUFXLENBQUMyRCxFQUFFLEVBQUVnQixhQUFhLEVBQUVwRSxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUs7UUFDM0VxRSxRQUFRLEVBQUVkLGlCQUFpQixDQUFDZSxtQ0FBbUMsQ0FBQzlFLFNBQVMsRUFBRSxJQUFJLENBQUMvQixNQUFNLEVBQUV3RCxZQUFZLENBQUMsSUFBSSxDQUFDMUMsU0FBUyxDQUFDLENBQUMsQ0FBRTtRQUN2SGdHLFNBQVMsRUFBRUMsWUFBWSxDQUFDaEYsU0FBUyxDQUFDLEdBQUdnRCxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNwRSxVQUFVLEVBQUVvQixTQUFTLENBQUMyQixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHc0MsU0FBVTtRQUMvR2dCLE1BQU0sRUFBRSxNQUFPQyxDQUFDLElBQW9CLElBQUksQ0FBQ0MsaUJBQWlCLENBQUNELENBQUMsRUFBRWxGLFNBQVMsQ0FBRTtRQUN6RW9GLE9BQU8sRUFBRXJCLGlCQUFpQixDQUFDc0IsR0FBRyxDQUFDQyxLQUFLLENBQUN0QiwyQkFBMkIsQ0FBQ2hFLFNBQVMsQ0FBQ0MsV0FBVyxFQUFFMkQsRUFBRSxFQUFFMkIsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBRTtRQUM3R0MsY0FBYyxFQUFFLENBQUN4QyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUVoRCxTQUFTLENBQUMyQixJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBRTtRQUM5RDhELFVBQVUsRUFBRSxJQUFJLENBQUNDLDhCQUE4QixDQUFDMUYsU0FBUyxFQUFFa0QsZ0JBQWdCLENBQUU7UUFBQUwsUUFBQSxFQUU3RUMsSUFBQSxDQUFDNkMsbUJBQW1CO1VBQXdEQyxXQUFXLEVBQUM7UUFBZ0IsR0FBOUUsK0JBQStCMUIsYUFBYSxJQUFvQztNQUFDLENBQzNGLENBQUM7SUFFcEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFyRSxNQUFBLENBS1E0QyxrQkFBa0IsR0FBMUIsU0FBUUEsa0JBQWtCQSxDQUFDekMsU0FBMEIsRUFBZ0I7TUFDcEUsSUFBSTZGLHdCQUF3QjtNQUM1QixJQUFJLElBQUksQ0FBQ3JELGlCQUFpQixDQUFDeEMsU0FBUyxDQUFDLEVBQUVDLFdBQVcsQ0FBQ0ssSUFBSSxFQUFFd0Ysb0JBQW9CLEVBQUU7UUFDOUUsTUFBTUMsYUFBYSxHQUFHQyxLQUFLLENBQUNDLElBQUksQ0FDL0IsSUFBSSxDQUFDekQsaUJBQWlCLENBQUN4QyxTQUFTLENBQUMsRUFBRUMsV0FBVyxDQUFDSyxJQUFJLEVBQUV3RixvQkFDdEQsQ0FBQyxDQUFDSSxHQUFHLENBQUU1RCxJQUFJLElBQUssSUFBSUEsSUFBSSxHQUFHLENBQUM7UUFDNUJ1RCx3QkFBd0IsR0FBRyx1QkFBdUJFLGFBQWEsQ0FBQ0ksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO01BQy9FO01BQ0EsTUFBTUMsbUJBQW1CLEdBQUcsU0FBQUEsQ0FBVUMsS0FBc0MsRUFBUTtRQUNuRixNQUFNQyxZQUFZLEdBQUdELEtBQUssQ0FBQ0UsU0FBUyxDQUFDLENBQUM7UUFDdEMsTUFBTUMsU0FBUyxHQUFHSCxLQUFLLENBQUNJLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDaEQsTUFBTVYsYUFBYSxHQUFHTyxZQUFZLENBQUNJLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUlGLFNBQVMsRUFBRTtVQUNkRyxzQkFBc0IsQ0FBQ0wsWUFBWSxFQUFFRSxTQUFTLEVBQUVULGFBQWEsQ0FBQztRQUMvRDtNQUNELENBQUM7TUFDRDtNQUNBLE1BQU1hLGVBQWUsR0FBR3hELFdBQVcsQ0FBQ3lELG1CQUFtQixDQUFDLElBQUksQ0FBQ3JFLGlCQUFpQixDQUFDeEMsU0FBUyxDQUFDLEVBQUU4RyxTQUFTLENBQUM7TUFDckcsTUFBTUMsb0JBQW9CLEdBQUcsU0FBQUEsQ0FBVVYsS0FBdUMsRUFBUTtRQUNyRixNQUFNQyxZQUFZLEdBQUdELEtBQUssRUFBRUUsU0FBUyxDQUFDLENBQUM7UUFDdkNTLHdCQUF3QixDQUFDVixZQUFZLEVBQUVBLFlBQVksQ0FBQ1csa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDckYsQ0FBQztNQUNELE1BQU1DLGdCQUFnQixHQUFHLFNBQUFBLENBQVVkLEtBQXVDLEVBQVE7UUFDakYsSUFBSUEsS0FBSyxDQUFDSSxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFLSixLQUFLLENBQUNJLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBZSxHQUFHLEVBQUU7VUFDMUZXLDZCQUE2QixDQUM1QmYsS0FBSyxDQUFDRSxTQUFTLENBQUMsQ0FBQyxFQUNoQkYsS0FBSyxDQUFDSSxZQUFZLENBQUMsYUFBYSxDQUFDLElBQWdCSixLQUFLLENBQUNJLFlBQVksQ0FBQyxVQUFVLENBQ2hGLENBQUM7UUFDRjtNQUNELENBQUM7TUFDRCxPQUNDM0QsSUFBQSxDQUFDdUUsWUFBWTtRQUNaMUYsSUFBSSxFQUFDLGdCQUFnQjtRQUNyQjJGLFVBQVUsRUFBQyxPQUFPO1FBQ2xCQyxRQUFRLEVBQUMsTUFBTTtRQUNmQyxRQUFRLEVBQUMsT0FBTztRQUNoQkMsT0FBTyxFQUFDLDBEQUEwRDtRQUNsRUMsSUFBSSxFQUFDLG1CQUFtQjtRQUN4QkMsS0FBSyxFQUFDLGFBQWE7UUFDbkJDLE9BQU8sRUFBQyxNQUFNO1FBQ2RDLFlBQVksRUFBQyxPQUFPO1FBQ3BCQyxtQkFBbUIsRUFBQyxNQUFNO1FBQzFCQyxjQUFjLEVBQUMsT0FBTztRQUN0QkMsUUFBUSxFQUFFbkMsd0JBQXlCO1FBQ25Db0MsYUFBYSxFQUFFN0IsbUJBQW9CO1FBQ25DOEIsZUFBZSxFQUFFdEIsZUFBZ0I7UUFDakN1QixjQUFjLEVBQUVwQixvQkFBcUI7UUFDckNxQixpQkFBaUIsRUFBRUMsNkJBQTZCLENBQUNDLEdBQUk7UUFDckRDLGNBQWMsRUFBRXBCLGdCQUFpQjtRQUNqQ2xDLE1BQU0sRUFBRSxNQUFPQyxDQUFDLElBQW9CLElBQUksQ0FBQ3NELHdCQUF3QixDQUFDdEQsQ0FBQyxFQUFFbEYsU0FBUztNQUFFLENBQ2hGLENBQUM7SUFFSjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBSCxNQUFBLENBTWM2QyxXQUFXLEdBQXpCLGVBQWNBLFdBQVdBLENBQUMxQyxTQUEwQixFQUFFa0QsZ0JBQXlCLEVBQWtCO01BQ2hHLElBQUlDLE9BQU8sR0FBRyxPQUFPO01BQ3JCLElBQUlzRixlQUFlO01BQ25CLElBQUlDLFlBQVk7TUFDaEIsSUFBSTtRQUNIdkYsT0FBTyxHQUFHLE1BQU1DLFdBQVcsQ0FBQ0Msd0JBQXdCLENBQUNILGdCQUFnQixDQUFDSSxTQUFTLENBQUMsQ0FBQyxFQUFFO1VBQUVDLE9BQU8sRUFBRUw7UUFBaUIsQ0FBQyxDQUFDO1FBQ2pId0YsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDQyx1QkFBdUIsQ0FBQzNJLFNBQVMsRUFBRWtELGdCQUFnQixDQUFDO1FBQzlFLElBQUk4QixZQUFZLENBQUNoRixTQUFTLENBQUMsRUFBRTtVQUM1QnlJLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQ0csa0JBQWtCLENBQUM7WUFBRXJGLE9BQU8sRUFBRUw7VUFBaUIsQ0FBQyxDQUFDO1FBQy9FO01BQ0QsQ0FBQyxDQUFDLE9BQU9NLEdBQVksRUFBRTtRQUN0QkMsR0FBRyxDQUFDQyxPQUFPLENBQUMsZ0ZBQWdGMUQsU0FBUyxDQUFDMkIsSUFBSSxNQUFNNkIsR0FBRyxFQUFFLENBQUM7TUFDdkg7TUFDQSxNQUFNRyxXQUFXLEdBQUczRCxTQUFTLENBQUNDLFdBQVcsQ0FBQzJELEVBQUUsRUFBRUMsV0FBaUU7TUFDL0csTUFBTUMscUJBQXFCLEdBQUdILFdBQVcsR0FBR0ksaUJBQWlCLENBQUNDLDJCQUEyQixDQUFDTCxXQUFXLENBQUMsQ0FBQyxHQUFHTSxTQUFTO01BQ25ILE9BQ0NuQixJQUFBLENBQUMrRixLQUFLO1FBQ0xyRSxRQUFRLEVBQUU7VUFBRTdDLElBQUksRUFBRSx1Q0FBdUM7VUFBRW1ILE9BQU8sRUFBRTtZQUFFQyx5QkFBeUIsRUFBRTtVQUFLO1FBQUUsQ0FBRTtRQUMxR2hHLEVBQUUsRUFBRUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFaEQsU0FBUyxDQUFDMkIsSUFBSSxDQUFDLENBQUU7UUFDdkNxSCxLQUFLLEVBQUVOLFlBQWE7UUFDcEJyRSxXQUFXLEVBQUVQLHFCQUFzQjtRQUNuQ1gsT0FBTyxFQUFFQSxPQUFRO1FBQ2pCc0IsUUFBUSxFQUFFLElBQUksQ0FBQzFFLG9CQUFvQixDQUFDQyxTQUFTLENBQUU7UUFDL0MwRSxLQUFLLEVBQUMsTUFBTTtRQUNaQyxhQUFhLEVBQUVzRSxlQUFlLENBQUNqSixTQUFTLENBQUU7UUFDMUM2RSxRQUFRLEVBQUVkLGlCQUFpQixDQUFDZSxtQ0FBbUMsQ0FBQzlFLFNBQVMsRUFBRSxJQUFJLENBQUMvQixNQUFNLEVBQUV3RCxZQUFZLENBQUMsSUFBSSxDQUFDMUMsU0FBUyxDQUFDLENBQUMsQ0FBRTtRQUN2SGtHLE1BQU0sRUFBRSxNQUFPQyxDQUFDLElBQW9CLElBQUksQ0FBQ0MsaUJBQWlCLENBQUNELENBQUMsRUFBRWxGLFNBQVMsQ0FBRTtRQUN6RStFLFNBQVMsRUFBRUMsWUFBWSxDQUFDaEYsU0FBUyxDQUFDLEdBQUdnRCxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUNwRSxVQUFVLEVBQUVvQixTQUFTLENBQUMyQixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHc0MsU0FBVTtRQUMvR3dCLFVBQVUsRUFBRSxJQUFJLENBQUNDLDhCQUE4QixDQUFDMUYsU0FBUyxFQUFFa0QsZ0JBQWdCLENBQUU7UUFDN0VrQyxPQUFPLEVBQUVyQixpQkFBaUIsQ0FDekJqRCxNQUFNLENBQ0xkLFNBQVMsQ0FBQzJCLElBQUksS0FBSyxzQkFBc0IsRUFDekMsS0FBSyxFQUNMMEQsR0FBRyxDQUFDQyxLQUFLLENBQUN0QiwyQkFBMkIsQ0FBQ2hFLFNBQVMsQ0FBQ0MsV0FBVyxFQUFFMkQsRUFBRSxFQUFFMkIsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQ2hGLENBQ0QsQ0FBRTtRQUNGQyxjQUFjLEVBQUUsQ0FBQ3hDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRWhELFNBQVMsQ0FBQzJCLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFFO1FBQzlEOEcsZUFBZSxFQUFFQTtNQUFnQixDQUNqQyxDQUFDO0lBRUo7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQTVJLE1BQUEsQ0FNUTZGLDhCQUE4QixHQUF0QyxTQUFRQSw4QkFBOEJBLENBQUMxRixTQUEwQixFQUFFa0QsZ0JBQXlCLEVBQXlCO01BQ3BILElBQUksQ0FBQzhCLFlBQVksQ0FBQ2hGLFNBQVMsQ0FBQyxFQUFFO1FBQzdCLE9BQU9pRSxTQUFTO01BQ2pCO01BQ0EsT0FDQ25CLElBQUEsQ0FBQ29HLFNBQVM7UUFDVG5HLEVBQUUsRUFBRUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDcEUsVUFBVSxFQUFFb0IsU0FBUyxDQUFDMkIsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUU7UUFDbEU2QyxRQUFRLEVBQUU7VUFDVDdDLElBQUksRUFBRSwyQ0FBMkM7VUFDakRtSCxPQUFPLEVBQUU7WUFDUkssWUFBWSxFQUFFLElBQUksQ0FBQ2xMLE1BQU0sQ0FBQ29ELE9BQU8sR0FDOUIsR0FBRytILHVCQUF1QixDQUFDQywyQkFBMkIsQ0FBa0JuRyxnQkFBZ0IsQ0FBQyxDQUFDLElBQzFGLElBQUksQ0FBQ3RFLFVBQVUsSUFDWG9CLFNBQVMsQ0FBQzJCLElBQUksRUFBRSxHQUNwQixJQUFJLElBQUksQ0FBQzFELE1BQU0sQ0FBQzBELElBQUksQ0FBQzJILFNBQVMsQ0FBQyxJQUFJLENBQUNyTCxNQUFNLENBQUMwRCxJQUFJLENBQUM0SCxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUl2SixTQUFTLENBQUMyQixJQUFJLEVBQUU7WUFDNUY2SCxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ2RDLGtCQUFrQixFQUFFO1VBQ3JCO1FBQ0QsQ0FBRTtRQUNGQyxhQUFhLEVBQUVDLGtCQUFrQixDQUFDM0osU0FBUyxDQUFFO1FBQzdDNEosU0FBUyxFQUNSOUcsSUFBQSxDQUFDK0csT0FBTztVQUFBaEgsUUFBQSxFQUNQQyxJQUFBLENBQUNnSCxNQUFNO1lBQ04vRyxFQUFFLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQ3BFLFVBQVUsRUFBRW9CLFNBQVMsQ0FBQzJCLElBQUksRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUU7WUFDeEVvSSxhQUFhLEVBQ1osSUFBSSxDQUFDOUwsTUFBTSxDQUFDb0QsT0FBTyxHQUNoQjJJLDhCQUE4QixDQUM5QlgsMkJBQTJCLENBQWtCbkcsZ0JBQWdCLENBQUMsRUFDN0R6QixZQUFZLENBQUMsSUFBSSxDQUFDMUMsU0FBUyxDQUFDLENBQUNrTCxlQUFlLENBQUNoSyxXQUFXLENBQUNpSyxZQUFZLEVBQ25FQyxlQUFlLElBQTRCLEVBQzlDLENBQUMsR0FDREMsV0FBVyxDQUFDQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUN0TCxTQUFTLENBQ3REO1lBQ0R1TCxjQUFjLEVBQUUsQ0FBQyxDQUFDdEssU0FBUyxDQUFDQyxXQUFXLENBQUNFLE1BQU0sRUFBRW9LO1VBQXlCLENBQ3pFO1FBQUMsQ0FDTSxDQUNUO1FBQ0RDLE1BQU0sRUFBRSxJQUFJLENBQUNDLG1CQUFtQixDQUFDekssU0FBUztNQUFFLENBQ2pDLENBQUM7SUFFZjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQUgsTUFBQSxDQUtRNEssbUJBQW1CLEdBQTNCLFNBQVFBLG1CQUFtQkEsQ0FBQ3pLLFNBQTBCLEVBQXdCO01BQzdFLElBQUlBLFNBQVMsQ0FBQ0MsV0FBVyxDQUFDRSxNQUFNLEVBQUVvSyx3QkFBd0IsRUFBRS9KLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQy9FLE9BQU9zQyxJQUFBLENBQUM0SCxRQUFRLElBQUUsQ0FBQztNQUNwQixDQUFDLE1BQU07UUFDTixPQUFPekcsU0FBUztNQUNqQjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFwRSxNQUFBLENBTWNzRixpQkFBaUIsR0FBL0IsZUFBY0EsaUJBQWlCQSxDQUFDa0IsS0FBc0QsRUFBRXJHLFNBQTBCLEVBQWlCO01BQ2xJLE1BQU0ySyxZQUFZLEdBQUl0RSxLQUFLLENBQXVCSSxZQUFZLENBQUMsU0FBUyxDQUFDO01BQ3pFLE1BQU0zRSxLQUFLLEdBQUl1RSxLQUFLLENBQXVCRSxTQUFTLENBQUMsQ0FBNEI7TUFDakYsTUFBTXFFLGFBQWEsR0FBRyxJQUFJLENBQUNwTSxvQkFBb0IsQ0FBQ3FNLElBQUksQ0FBRUMsbUJBQW1CLElBQUtBLG1CQUFtQixDQUFDaEosS0FBSyxLQUFLQSxLQUFLLENBQUM7TUFDbEgsSUFBSSxDQUFDOEksYUFBYSxFQUFFO1FBQ25CO01BQ0Q7TUFDQUEsYUFBYSxDQUFDRyxpQkFBaUIsR0FBR0osWUFBWTtNQUM5QztNQUNBLElBQUksQ0FBQ0ssMEJBQTBCLENBQUNoTCxTQUFTLENBQUM7TUFDMUMsSUFBSTtRQUNINEssYUFBYSxDQUFDNUIsS0FBSyxHQUFHLE1BQU0yQixZQUFZO1FBQ3hDLElBQUksQ0FBQ3pNLFVBQVUsQ0FBQytNLGdCQUFnQixDQUFDTCxhQUFhLENBQUM1SyxTQUFTLENBQUMyQixJQUFJLENBQUMsR0FBR2lKLGFBQWEsQ0FBQzVCLEtBQUs7UUFDcEY0QixhQUFhLENBQUNNLFFBQVEsR0FBRyxLQUFLO01BQy9CLENBQUMsQ0FBQyxPQUFPQyxLQUFLLEVBQUU7UUFDZixPQUFPUCxhQUFhLENBQUM1QixLQUFLO1FBQzFCNEIsYUFBYSxDQUFDTSxRQUFRLEdBQUcsSUFBSTtRQUM3QkUsYUFBYSxDQUFDQyw2QkFBNkIsQ0FBQyxDQUMzQztVQUNDUCxtQkFBbUIsRUFBRUYsYUFBYTtVQUNsQ1UsT0FBTyxFQUFHSCxLQUFLLENBQXlCRztRQUN6QyxDQUFDLENBQ0QsQ0FBQztNQUNIO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQXpMLE1BQUEsQ0FNYzJJLHdCQUF3QixHQUF0QyxlQUFjQSx3QkFBd0JBLENBQUNuQyxLQUErQixFQUFFckcsU0FBMEIsRUFBaUI7TUFDbEgsTUFBTXVMLEtBQUssR0FBR2xGLEtBQUssQ0FBQ0ksWUFBWSxDQUFDLE9BQU8sQ0FBQztNQUN6QyxNQUFNSCxZQUFZLEdBQUdELEtBQUssQ0FBQ0UsU0FBUyxDQUFDLENBQUM7TUFDdEM7TUFDQSxNQUFNcUUsYUFBYSxHQUFHLElBQUksQ0FBQ3BNLG9CQUFvQixDQUFDcU0sSUFBSSxDQUFFQyxtQkFBbUIsSUFBS0EsbUJBQW1CLENBQUNoSixLQUFLLEtBQUt3RSxZQUFZLENBQUM7TUFDekgsSUFBSSxDQUFDc0UsYUFBYSxJQUFJLENBQUNXLEtBQUssRUFBRTtRQUM3QjtNQUNEO01BQ0EsSUFBSSxDQUFDUCwwQkFBMEIsQ0FBQ2hMLFNBQVMsQ0FBQztNQUMxQzRLLGFBQWEsQ0FBQzVCLEtBQUssR0FBRyxDQUFDLENBQUM7TUFDeEIsSUFBSSxJQUFJLENBQUN4RyxpQkFBaUIsQ0FBQ3hDLFNBQVMsQ0FBQyxFQUFFO1FBQ3RDNEssYUFBYSxDQUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQ3hHLGlCQUFpQixDQUFDeEMsU0FBUyxDQUFDLEVBQUUyQixJQUFJLENBQXFDLEdBQy9GLE1BQU0sSUFBSSxDQUFDNkosYUFBYSxDQUFDRCxLQUFLLENBQUM7UUFDaENYLGFBQWEsQ0FBQzVCLEtBQUssQ0FBRSxJQUFJLENBQUN5QyxlQUFlLENBQUN6TCxTQUFTLENBQUMsQ0FBbUN1RSxJQUFJLENBQUMsR0FDMUZnSCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQVVqSixJQUFJLElBQUksMEJBQTBCO1FBQ3REc0ksYUFBYSxDQUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQzBDLGVBQWUsQ0FBQzFMLFNBQVMsQ0FBQyxDQUFXLEdBQUl1TCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQVU1SixJQUFJO1FBQ3hGaUosYUFBYSxDQUFDTSxRQUFRLEdBQUcsS0FBSztRQUM5QixJQUFJLENBQUNoTixVQUFVLENBQUMrTSxnQkFBZ0IsQ0FBQ0wsYUFBYSxDQUFDNUssU0FBUyxDQUFDMkIsSUFBSSxDQUFDLEdBQUdpSixhQUFhLENBQUM1QixLQUFLO01BQ3JGO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFuSixNQUFBLENBS1E2TCxlQUFlLEdBQXZCLFNBQVFBLGVBQWVBLENBQUMxTCxTQUEwQixFQUFzQjtNQUN2RSxPQUFPLENBQUMsSUFBSSxDQUFDd0MsaUJBQWlCLENBQUN4QyxTQUFTLENBQUMsRUFBRUMsV0FBVyxDQUFDSyxJQUFJLEVBQUVxTCxrQkFBa0IsRUFBRUMsUUFBUSxFQUFzQ3JILElBQUk7SUFDcEk7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUExRSxNQUFBLENBS1E0TCxlQUFlLEdBQXZCLFNBQVFBLGVBQWVBLENBQUN6TCxTQUEwQixFQUFnRDtNQUNqRyxPQUFPZ0UsMkJBQTJCLENBQUMsSUFBSSxDQUFDeEIsaUJBQWlCLENBQUN4QyxTQUFTLENBQUMsRUFBRUMsV0FBVyxDQUFDSyxJQUFJLEVBQUV1TCxTQUFTLENBQUM7SUFDbkc7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFoTSxNQUFBLENBS1EyQyxpQkFBaUIsR0FBekIsU0FBUUEsaUJBQWlCQSxDQUFDeEMsU0FBMEIsRUFBd0I7TUFDM0UsT0FBUUEsU0FBUyxDQUFDOEwsYUFBYSxDQUFpQkMsVUFBVSxFQUFFbEIsSUFBSSxDQUFFbUIsUUFBUSxJQUFLQSxRQUFRLENBQUMxSixJQUFJLEtBQUssWUFBWSxDQUFDO0lBQy9HOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBekMsTUFBQSxDQUtjMkwsYUFBYSxHQUEzQixlQUFjQSxhQUFhQSxDQUFDRCxLQUFlLEVBQW1CO01BQzdELE9BQU8sSUFBSWhNLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO1FBQy9CLE1BQU15TSxNQUFNLEdBQUcsSUFBSUMsVUFBVSxDQUFDLENBQUM7UUFDL0JELE1BQU0sQ0FBQ0UsTUFBTSxHQUFHLE1BQVk7VUFDM0IsSUFBSSxDQUFDRixNQUFNLENBQUNHLE1BQU0sRUFBRTtZQUNuQjtVQUNEO1VBQ0E1TSxPQUFPLENBQUV5TSxNQUFNLENBQUNHLE1BQU0sQ0FBWUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDREosTUFBTSxDQUFDSyxhQUFhLENBQUVmLEtBQUssQ0FBeUJnQixJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUM7TUFDOUQsQ0FBQyxDQUFDO0lBQ0g7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBMU0sTUFBQSxDQUlRbUwsMEJBQTBCLEdBQWxDLFNBQVFBLDBCQUEwQkEsQ0FBQ2hMLFNBQTBCLEVBQVE7TUFDcEUsTUFBTXdNLFFBQVEsR0FBR0MsU0FBUyxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUN0RCxNQUFNQyxTQUFTLEdBQUc1SixRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUVoRCxTQUFTLENBQUMyQixJQUFJLENBQUMsQ0FBQztNQUNwRDtNQUNBLE1BQU1rTCxnQkFBZ0IsR0FBR0wsUUFBUSxDQUFDTSxNQUFNLENBQUVDLEdBQVksSUFDckRBLEdBQUcsQ0FBQ0MsYUFBYSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFFbEssRUFBVSxJQUFLNkosU0FBUyxDQUFDUCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNhLFFBQVEsQ0FBQ25LLEVBQUUsQ0FBQyxDQUMzRSxDQUFDO01BQ0QwSixTQUFTLENBQUNVLGNBQWMsQ0FBQ04sZ0JBQWdCLENBQUM7SUFDM0M7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFoTixNQUFBLENBS2N1TixlQUFlLEdBQTdCLGVBQWNBLGVBQWVBLENBQUNwTixTQUEwQixFQUErQjtNQUN0RixNQUFNcU4sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDbE0saUJBQWlCLENBQUNuQixTQUFTLENBQUM7TUFDNUQsT0FBTztRQUNOcU4sWUFBWSxFQUFFQSxZQUFZO1FBQzFCck4sU0FBUyxFQUFFQTtNQUNaLENBQUM7SUFDRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFILE1BQUEsQ0FJQXlOLFNBQVMsR0FBVCxTQUFBQSxTQUFTQSxDQUFBLEVBQXVCO01BQy9CLE9BQU8sSUFBSSxDQUFDOUMsTUFBTTtJQUNuQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUEzSyxNQUFBLENBSU0wTixZQUFZLEdBQWxCLGVBQU1BLFlBQVlBLENBQUEsRUFBb0I7TUFDckMsSUFBSUMsY0FBaUMsR0FBRyxFQUFFO01BQzFDLElBQUlDLDRCQUFrRCxHQUFHLEVBQUU7TUFDM0QsTUFBTUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDelAsTUFBTSxDQUFDb0QsT0FBTyxHQUFHLElBQUksQ0FBQ3BELE1BQU0sQ0FBQ0MsVUFBVSxDQUFDeVAsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzFQLE1BQU0sQ0FBQ0MsVUFBVTs7TUFFdkc7TUFDQTtNQUNBLElBQUksSUFBSSxDQUFDRCxNQUFNLENBQUNnQyxXQUFXLEVBQUUyRCxFQUFFLEVBQUVnSyx3QkFBd0IsRUFBRTtRQUMxRCxNQUFNQyxxQkFBcUMsR0FBRyxFQUFFO1FBQ2hELElBQUksQ0FBQzVQLE1BQU0sQ0FBQ2dDLFdBQVcsQ0FBQzJELEVBQUUsRUFBRWdLLHdCQUF3QixFQUFFRSxPQUFPLENBQUMsVUFBVUMsS0FBcUIsRUFBRTtVQUM5RixJQUFJQyxVQUFVO1VBQ2QsSUFBSUQsS0FBSyxDQUFDRSxLQUFLLGdEQUFxQyxFQUFFO1lBQ3JERCxVQUFVLEdBQUdELEtBQUssQ0FBQy9MLEtBQUs7VUFDekI7VUFDQSxJQUFJa00sbUJBQW1CLENBQUNILEtBQUssQ0FBQyxFQUFFO1lBQy9CLE1BQU1JLFVBQVUsR0FBR0osS0FBSyxFQUFFSyxNQUFNLEVBQUVDLE9BQXlCO1lBQzNELE1BQU1DLHVCQUEwQyxHQUFHLEVBQUU7WUFFckRILFVBQVUsQ0FBQ0ksSUFBSSxDQUFDVCxPQUFPLENBQUMsVUFBVVUsS0FBYyxFQUFFO2NBQ2pERix1QkFBdUIsQ0FBQ0csSUFBSSxDQUFFRCxLQUFLLENBQWVFLEtBQUssQ0FBQ0wsT0FBMEIsQ0FBQztZQUNwRixDQUFDLENBQUM7WUFDRlIscUJBQXFCLENBQUNZLElBQUksQ0FBQztjQUMxQlQsVUFBVSxFQUFFQSxVQUF5RDtjQUNyRVcsSUFBSSxFQUFFTDtZQUNQLENBQUMsQ0FBQztVQUNIO1FBQ0QsQ0FBQyxDQUFDOztRQUVGO1FBQ0EsTUFBTU0sWUFBWSxHQUFHLE1BQU9KLEtBQW1CLElBQXFDO1VBQ25GLE1BQU1uQixZQUFZLEdBQUcsTUFBTTlOLE9BQU8sQ0FBQ3NQLEdBQUcsQ0FBQ0wsS0FBSyxDQUFDRyxJQUFJLENBQUN6SSxHQUFHLENBQUMsSUFBSSxDQUFDa0gsZUFBZSxDQUFDMEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7VUFDdkYsT0FBTztZQUFFZCxVQUFVLEVBQUVRLEtBQUssQ0FBQ1IsVUFBVTtZQUFFVyxJQUFJLEVBQUV0QjtVQUFhLENBQUM7UUFDNUQsQ0FBQztRQUVELE1BQU0wQixRQUFRLEdBQUdsQixxQkFBcUIsQ0FBQzNILEdBQUcsQ0FBQyxNQUFPOEksY0FBYyxJQUFLSixZQUFZLENBQUNJLGNBQWMsQ0FBQyxDQUFDO1FBQ2xHLE1BQU1DLFFBQVEsR0FBRyxNQUFNMVAsT0FBTyxDQUFDc1AsR0FBRyxDQUFDRSxRQUFRLENBQUM7O1FBRTVDO1FBQ0FFLFFBQVEsQ0FBQ25CLE9BQU8sQ0FBRW9CLGFBQWEsSUFBSztVQUNuQzFCLGNBQWMsQ0FBQ2lCLElBQUksQ0FBQzNMLElBQUEsQ0FBQ3FNLEtBQUs7WUFBQ2xNLElBQUksRUFBRWlNLGFBQWEsQ0FBQ2xCO1VBQVcsQ0FBRSxDQUFDLENBQUM7VUFDOUQsT0FBT2tCLGFBQWEsQ0FBQ1AsSUFBSSxDQUFDekksR0FBRyxDQUFFa0osT0FBTyxJQUFLNUIsY0FBYyxDQUFDaUIsSUFBSSxDQUFDVyxPQUFPLENBQUMvQixZQUFZLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUM7UUFFRjRCLFFBQVEsQ0FBQ25CLE9BQU8sQ0FBQyxVQUFVdUIsT0FBTyxFQUFFO1VBQ25DQSxPQUFPLENBQUNWLElBQUksQ0FBQ2IsT0FBTyxDQUFDLFVBQVVzQixPQUFPLEVBQUU7WUFDdkMzQiw0QkFBNEIsQ0FBQ2dCLElBQUksQ0FBQ1csT0FBTyxDQUFDO1VBQzNDLENBQUMsQ0FBQztRQUNILENBQUMsQ0FBQztNQUNILENBQUMsTUFBTTtRQUNOO1FBQ0EzQiw0QkFBNEIsR0FBRyxNQUFNbE8sT0FBTyxDQUFDc1AsR0FBRyxDQUFDbkIsZ0JBQWdCLENBQUN4SCxHQUFHLENBQUMsSUFBSSxDQUFDa0gsZUFBZSxDQUFDMEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkd0QixjQUFjLEdBQUdDLDRCQUE0QixDQUFDdkgsR0FBRyxDQUFFZ0osYUFBYSxJQUFLO1VBQ3BFLE9BQU9BLGFBQWEsQ0FBQzdCLFlBQVk7UUFDbEMsQ0FBQyxDQUFDO01BQ0g7TUFFQSxJQUFJLENBQUNpQywyQkFBMkIsQ0FBQzdCLDRCQUE0QixDQUFDOztNQUU5RDs7TUFFQSxNQUFNOEIsWUFBWSxHQUFHLElBQUksQ0FBQ0MsK0JBQStCLENBQUMsQ0FBQztNQUUzRCxNQUFNQyxTQUFTLEdBQ2QzTSxJQUFBLENBQUM0TSxNQUFNO1FBQ04zTSxFQUFFLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDcEUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBRTtRQUNsRXFFLElBQUksRUFBRSxJQUFJLENBQUMvRCxhQUFhLENBQUMrQyxPQUFPLENBQUMseUNBQXlDLENBQUU7UUFDNUUwTixLQUFLLEVBQUVBLENBQUEsS0FBWTtVQUNsQixJQUFJLENBQUNDLFFBQVEsQ0FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0I7TUFBRSxDQUNGLENBQ0Q7TUFDRCxNQUFNdEUsTUFBTSxHQUNYMUgsSUFBQSxDQUFDK00sTUFBTTtRQUNOQyxLQUFLLEVBQUUsSUFBSSxDQUFDQyxZQUFZLENBQUMsSUFBSSxDQUFDN1IsVUFBVSxDQUFDNkQsS0FBSyxDQUFFO1FBQ2hEZ0IsRUFBRSxFQUFFQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQ3BFLFVBQVUsQ0FBQyxDQUFFO1FBQzlDb1IsYUFBYSxFQUFFLElBQUksQ0FBQ0osUUFBUSxDQUFDZCxJQUFJLENBQUMsSUFBSSxDQUFFO1FBQ3hDbUIsU0FBUyxFQUFFLElBQUs7UUFDaEJDLFNBQVMsRUFBRSxJQUFLO1FBQ2hCQyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVLENBQUNyQixJQUFJLENBQUMsSUFBSSxDQUFFO1FBQ3ZDc0IsVUFBVSxFQUFFLElBQUksQ0FBQ0EsVUFBVSxDQUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBRTtRQUN2Q3VCLFNBQVMsRUFBRUEsQ0FBQSxLQUFZO1VBQ3RCLElBQUksQ0FBQ0EsU0FBUyxDQUFDLENBQUM7UUFDakIsQ0FBRTtRQUNGQyxZQUFZLEVBQUViLFNBQVUsQ0FBQztRQUFBO1FBQUE1TSxRQUFBLEVBRXhCO1VBQ0EwTixXQUFXLEVBQ1Z6TixJQUFBLENBQUM0TSxNQUFNO1lBQ04zTSxFQUFFLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDcEUsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBRTtZQUM5RHFFLElBQUksRUFDSCxJQUFJLENBQUMvRSxVQUFVLENBQUNzUyxjQUFjLEtBQUssSUFBSSxHQUNwQyxJQUFJLENBQUN0UixhQUFhLENBQUMrQyxPQUFPLENBQUMsMERBQTBELENBQUMsR0FDdEYsSUFBSSxDQUFDd08sbUJBQW1CLENBQUMsSUFBSSxDQUFDdlMsVUFBVSxDQUFDNkQsS0FBSyxDQUNqRDtZQUNENE4sS0FBSyxFQUFFQSxDQUFBLEtBQVk7Y0FDbEIsSUFBSSxDQUFDZSxPQUFPLENBQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxQixDQUFFO1lBQ0Z4TSxJQUFJLEVBQUM7VUFBWSxDQUNqQixDQUNEO1VBQ0RtTixTQUFTLEVBQUVBLFNBQVM7VUFDcEJrQixPQUFPO1VBQ047VUFDQTtVQUNBO1VBQ0FoTyxLQUFBLENBQUFDLFNBQUE7WUFBQUMsUUFBQSxHQUNFME0sWUFBWSxJQUFJek0sSUFBQSxDQUFDOE4sWUFBWTtjQUFDQyxRQUFRLEVBQUMsTUFBTTtjQUFDNU4sSUFBSSxFQUFFc007WUFBYSxDQUFlLENBQUMsRUFDbEZ6TSxJQUFBLENBQUNnTyxVQUFVO2NBQUNDLFFBQVEsRUFBRSxHQUFJO2NBQUNDLFFBQVEsRUFBQyxNQUFNO2NBQUNDLFVBQVUsRUFBRSxJQUFLO2NBQUNDLFVBQVUsRUFBRSxJQUFLO2NBQUNDLE9BQU8sRUFBRSxZQUFhO2NBQUF0TyxRQUFBLEVBQ25HO2dCQUFFOE4sT0FBTyxFQUFFbkQ7Y0FBZTtZQUFDLENBQ2pCLENBQUM7VUFBQSxDQUNaO1FBRUo7TUFBQyxDQUNNLENBQ1I7TUFDRCxJQUFJLENBQUNoRCxNQUFNLEdBQUdBLE1BQU07TUFDcEIsT0FBT0EsTUFBTTtJQUNkOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBM0ssTUFBQSxDQUtRNFEsbUJBQW1CLEdBQTNCLFNBQVFBLG1CQUFtQkEsQ0FBQ1csV0FBK0IsRUFBVTtNQUNwRSxNQUFNQyxHQUFHLEdBQUcscUNBQXFDO01BQ2pELE1BQU1DLFVBQVUsR0FBRyxvQkFBb0I7TUFDdkMsT0FBTyxJQUFJLENBQUNDLGlCQUFpQixDQUFDRixHQUFHLEVBQUVDLFVBQVUsRUFBRUYsV0FBVyxDQUFDO0lBQzVEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBdlIsTUFBQSxDQUtRa1EsWUFBWSxHQUFwQixTQUFRQSxZQUFZQSxDQUFDcUIsV0FBK0IsRUFBVTtNQUM3RCxNQUFNQyxHQUFHLEdBQUcsc0NBQXNDO01BQ2xELE1BQU1DLFVBQVUsR0FBRyw0Q0FBNEM7TUFDL0QsT0FBTyxJQUFJLENBQUNDLGlCQUFpQixDQUFDRixHQUFHLEVBQUVDLFVBQVUsRUFBRUYsV0FBVyxDQUFDO0lBQzVEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXZSLE1BQUEsQ0FJUTJQLCtCQUErQixHQUF2QyxTQUFRQSwrQkFBK0JBLENBQUEsRUFBdUI7TUFDN0QsTUFBTTZCLEdBQUcsR0FBRyxzQ0FBc0M7TUFDbEQsSUFBSUcsZUFBZSxHQUFHLElBQUksQ0FBQzVTLFVBQVU7TUFDckM0UyxlQUFlLEdBQUdBLGVBQWUsQ0FBQ25GLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ29GLEdBQUcsQ0FBQyxDQUFDLElBQUlELGVBQWU7TUFDckUsTUFBTUUsaUJBQWlCLEdBQUdGLGVBQWUsSUFBSSxJQUFJLENBQUNwVCxhQUFhLEdBQUcsR0FBRyxJQUFJLENBQUNBLGFBQWEsSUFBSW9ULGVBQWUsRUFBRSxHQUFHLEVBQUU7TUFDakgsSUFBSSxJQUFJLENBQUN0UyxhQUFhLENBQUN5Uyx3QkFBd0IsQ0FBQyxHQUFHTixHQUFHLElBQUlLLGlCQUFpQixFQUFFLENBQUMsRUFBRTtRQUMvRSxPQUFPLElBQUksQ0FBQ3hTLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQ29QLEdBQUcsRUFBRXBOLFNBQVMsRUFBRXlOLGlCQUFpQixDQUFDO01BQ3JFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ3hTLGFBQWEsQ0FBQ3lTLHdCQUF3QixDQUFDLEdBQUdOLEdBQUcsSUFBSSxJQUFJLENBQUNqVCxhQUFhLEVBQUUsQ0FBQyxFQUFFO1FBQ3ZGLE9BQU8sSUFBSSxDQUFDYyxhQUFhLENBQUMrQyxPQUFPLENBQUNvUCxHQUFHLEVBQUVwTixTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM3RixhQUFhLEVBQUUsQ0FBQztNQUMzRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNjLGFBQWEsQ0FBQ3lTLHdCQUF3QixDQUFDLEdBQUdOLEdBQUcsRUFBRSxDQUFDLEVBQUU7UUFDakUsT0FBTyxJQUFJLENBQUNuUyxhQUFhLENBQUMrQyxPQUFPLENBQUNvUCxHQUFHLENBQUM7TUFDdkM7TUFDQSxPQUFPcE4sU0FBUztJQUNqQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUFwRSxNQUFBLENBT1EwUixpQkFBaUIsR0FBekIsU0FBUUEsaUJBQWlCQSxDQUFDRixHQUFXLEVBQUVDLFVBQWtCLEVBQUVGLFdBQW9CLEVBQVU7TUFDeEYsSUFBSUksZUFBZSxHQUFHLElBQUksQ0FBQzVTLFVBQVU7TUFDckM0UyxlQUFlLEdBQUdBLGVBQWUsQ0FBQ25GLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ29GLEdBQUcsQ0FBQyxDQUFDLElBQUlELGVBQWU7TUFDckUsTUFBTUUsaUJBQWlCLEdBQUdGLGVBQWUsSUFBSSxJQUFJLENBQUNwVCxhQUFhLEdBQUcsR0FBRyxJQUFJLENBQUNBLGFBQWEsSUFBSW9ULGVBQWUsRUFBRSxHQUFHLEVBQUU7TUFDakgsSUFBSUosV0FBVyxFQUFFO1FBQ2hCLElBQUksSUFBSSxDQUFDbFMsYUFBYSxDQUFDeVMsd0JBQXdCLENBQUMsR0FBR04sR0FBRyxJQUFJSyxpQkFBaUIsRUFBRSxDQUFDLEVBQUU7VUFDL0UsT0FBTyxJQUFJLENBQUN4UyxhQUFhLENBQUMrQyxPQUFPLENBQUNvUCxHQUFHLEVBQUVwTixTQUFTLEVBQUV5TixpQkFBaUIsQ0FBQztRQUNyRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUN4UyxhQUFhLENBQUN5Uyx3QkFBd0IsQ0FBQyxHQUFHTixHQUFHLElBQUksSUFBSSxDQUFDalQsYUFBYSxFQUFFLENBQUMsRUFBRTtVQUN2RixPQUFPLElBQUksQ0FBQ2MsYUFBYSxDQUFDK0MsT0FBTyxDQUFDb1AsR0FBRyxFQUFFcE4sU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDN0YsYUFBYSxFQUFFLENBQUM7UUFDM0UsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDYyxhQUFhLENBQUN5Uyx3QkFBd0IsQ0FBQyxHQUFHTixHQUFHLEVBQUUsQ0FBQyxFQUFFO1VBQ2pFLE9BQU8sSUFBSSxDQUFDblMsYUFBYSxDQUFDK0MsT0FBTyxDQUFDb1AsR0FBRyxDQUFDO1FBQ3ZDLENBQUMsTUFBTTtVQUNOLE9BQU9ELFdBQVc7UUFDbkI7TUFDRCxDQUFDLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQ2xTLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQ3FQLFVBQVUsQ0FBQztNQUM5QztJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXpSLE1BQUEsQ0FJYzZRLE9BQU8sR0FBckIsZUFBY0EsT0FBT0EsQ0FBQSxFQUFrQjtNQUN0QztNQUNBLElBQUksSUFBSSxDQUFDblMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDaU0sTUFBTSxFQUFFO1FBQ3BDO01BQ0Q7TUFDQSxNQUFNQSxNQUFNLEdBQUcsSUFBSSxDQUFDQSxNQUFNO01BRTFCLE1BQU10SCxnQkFBZ0IsR0FBSXNILE1BQU0sQ0FBQ29ILGdCQUFnQixDQUFDLENBQUMsRUFBc0NDLG1CQUFtQixDQUFDLENBQUM7O01BRTlHO01BQ0EsSUFBSSxDQUFDdFQsVUFBVSxHQUFHLElBQUk7TUFDdEJ1VCxVQUFVLENBQUNDLElBQUksQ0FBQ3ZILE1BQU0sQ0FBQzs7TUFFdkI7TUFDQTtNQUNBO01BQ0EsSUFBSSxFQUFFLE1BQU1ZLGFBQWEsQ0FBQzRHLGtCQUFrQixDQUFDLElBQUksQ0FBQ3hULG9CQUFvQixFQUFFLElBQUksQ0FBQ1UsYUFBYSxDQUFDLENBQUMsRUFBRTtRQUM3RjRTLFVBQVUsQ0FBQ0csTUFBTSxDQUFDekgsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQ2pNLFVBQVUsR0FBRyxLQUFLO1FBQ3ZCO01BQ0Q7TUFFQSxNQUFNMlQsbUJBQW1CLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUN4QyxDQUFDLENBQUMsRUFDRixHQUFHLElBQUksQ0FBQzVULG9CQUFvQixDQUFDMEgsR0FBRyxDQUFFMUgsb0JBQW9CLElBQUs7UUFDMUQsTUFBTXdCLFNBQVMsR0FBR3hCLG9CQUFvQixDQUFDd0IsU0FBUztRQUNoRCxJQUFJZ0osS0FBSztRQUNULElBQUloSixTQUFTLENBQUNvQyxZQUFZLEVBQUU7VUFDM0I0RyxLQUFLLEdBQUdtSixNQUFNLENBQUNFLE1BQU0sQ0FBRTdILE1BQU0sQ0FBQzhILFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBZUMsV0FBVyxDQUFDLElBQUl2UyxTQUFTLENBQUMyQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUN1RSxHQUFHLENBQzFHc00sVUFBVSxJQUFNQSxVQUFVLEVBQThCQyxHQUMxRCxDQUFDO1FBQ0YsQ0FBQyxNQUFNLElBQUksQ0FBQ3pTLFNBQVMsQ0FBQ3NDLElBQUksQ0FBQ0MsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQ0MsaUJBQWlCLENBQUN4QyxTQUFTLENBQUMsRUFBRTtVQUNuRjtVQUNBZ0osS0FBSyxHQUFHeEssb0JBQW9CLENBQUN3SyxLQUFLO1FBQ25DLENBQUMsTUFBTTtVQUNOO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0FBLEtBQUssR0FBR3hLLG9CQUFvQixDQUFDd0ssS0FBSyxJQUFJOUYsZ0JBQWdCLEVBQUVxUCxXQUFXLENBQUN2UyxTQUFTLENBQUMyQixJQUFJLENBQUM7UUFDcEY7UUFFQSxPQUFPO1VBQUUsQ0FBQzNCLFNBQVMsQ0FBQzJCLElBQUksR0FBR3FIO1FBQU0sQ0FBQztNQUNuQyxDQUFDLENBQ0YsQ0FBa0M7TUFDbEMsTUFBTTBKLFVBQVUsR0FBR1AsTUFBTSxDQUFDRSxNQUFNLENBQUNILG1CQUFtQixDQUFDLENBQUNqRixJQUFJLENBQUVqRSxLQUFLLElBQUssQ0FBQyxDQUFDQSxLQUFLLENBQUM7TUFFOUUsSUFBSSxDQUFDdEosdUJBQXVCLENBQUN3UyxtQkFBbUIsQ0FBQztNQUVqRCxJQUFJLENBQUNoVSxVQUFVLENBQUNtQixZQUFZLENBQUNpVCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUNLLFdBQVcsQ0FBQ0MsZ0JBQWdCLENBQUNDLGdCQUFnQixFQUFFSCxVQUFVLENBQUM7TUFDdEc7TUFDQTtNQUNBLElBQUksQ0FBQ3JVLGNBQWMsQ0FBQ3lVLHdCQUF3QixDQUFDLENBQUM7SUFDL0M7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBalQsTUFBQSxDQUlPa1QsVUFBVSxHQUFqQixTQUFPQSxVQUFVQSxDQUFBLEVBQVM7TUFDekIsSUFBSSxDQUFDQyxZQUFZLENBQUMsQ0FBQztNQUNuQixJQUFJLENBQUN6VSxVQUFVLEdBQUcsS0FBSztNQUN2QixJQUFJLENBQUMwVSxrQ0FBa0MsQ0FBQyxDQUFDO01BQ3pDLElBQUksQ0FBQzNULHVCQUF1QixHQUFHLElBQUlDLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztRQUMvRCxJQUFJLENBQUNDLHVCQUF1QixHQUFHRixPQUFPO1FBQ3RDLElBQUksQ0FBQ0csc0JBQXNCLEdBQUdGLE1BQU07TUFDckMsQ0FBQyxDQUFDO0lBQ0g7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQUksTUFBQSxDQU1Bb1Qsa0NBQWtDLEdBQWxDLFNBQUFBLGtDQUFrQ0EsQ0FBQSxFQUFTO01BQzFDLElBQUksSUFBSSxDQUFDL1UsVUFBVSxDQUFDcUQsUUFBUSxDQUFDMlIsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN4QztRQUNBO01BQ0Q7TUFFQSxJQUFJQyxjQUEwQyxFQUFFQyxXQUF1QztNQUN2RixNQUFNQyxZQUFZLEdBQUcsSUFBSSxDQUFDblYsVUFBVSxDQUFDcUQsUUFBUSxDQUFDc0osSUFBSSxDQUFFdEgsT0FBTyxJQUFLO1FBQy9ELE1BQU1pSixRQUFRLEdBQUdqSixPQUFPLENBQUMrUCxXQUFXLENBQUMsQ0FBQztRQUN0QyxPQUFPOUcsUUFBUSxDQUFDUyxJQUFJLENBQUVGLEdBQUcsSUFBSztVQUM3QjtVQUNBb0csY0FBYyxHQUFHLENBQUNBLGNBQWMsSUFBSXBHLEdBQUcsQ0FBQ3dHLE9BQU8sQ0FBQyxDQUFDLEtBQUtDLFdBQVcsQ0FBQ0MsT0FBTyxHQUFHbFEsT0FBTyxHQUFHVSxTQUFTO1VBQy9GbVAsV0FBVyxHQUFHLENBQUNBLFdBQVcsSUFBSXJHLEdBQUcsQ0FBQ3dHLE9BQU8sQ0FBQyxDQUFDLEtBQUtDLFdBQVcsQ0FBQ0UsV0FBVyxHQUFHblEsT0FBTyxHQUFHVSxTQUFTO1VBQzdGO1VBQ0EsT0FBTzhJLEdBQUcsQ0FBQ3dHLE9BQU8sQ0FBQyxDQUFDLEtBQUtDLFdBQVcsQ0FBQ0csS0FBSztRQUMzQyxDQUFDLENBQUM7TUFDSCxDQUFDLENBQUM7TUFDRixNQUFNQyxZQUFZLEdBQUdQLFlBQVksSUFBSUYsY0FBYyxJQUFJQyxXQUFXO01BRWxFLElBQUlRLFlBQVksRUFBRTtRQUNqQixJQUFJLENBQUNwSixNQUFNLEVBQUVxSixpQkFBaUIsQ0FBQ0QsWUFBWSxDQUFDO01BQzdDO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQS9ULE1BQUEsQ0FHUW1ULFlBQVksR0FBcEIsU0FBUUEsWUFBWUEsQ0FBQSxFQUFTO01BQzVCLElBQUksSUFBSSxDQUFDeEksTUFBTSxJQUFJc0gsVUFBVSxDQUFDZ0MsUUFBUSxDQUFDLElBQUksQ0FBQ3RKLE1BQU0sQ0FBQyxFQUFFO1FBQ3BEc0gsVUFBVSxDQUFDRyxNQUFNLENBQUMsSUFBSSxDQUFDekgsTUFBTSxDQUFDO01BQy9CO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQTNLLE1BQUEsQ0FHUStQLFFBQVEsR0FBaEIsU0FBUUEsUUFBUUEsQ0FBQSxFQUFTO01BQ3hCLElBQUksQ0FBQ2pRLHNCQUFzQixDQUFDb1UsU0FBUyxDQUFDQyxTQUFTLENBQUNDLGtCQUFrQixDQUFDO01BQ25FLElBQUksQ0FBQ0MsV0FBVyxDQUFDLENBQUM7SUFDbkI7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQXJVLE1BQUEsQ0FHT3FVLFdBQVcsR0FBbEIsU0FBT0EsV0FBV0EsQ0FBQSxFQUFTO01BQzFCLElBQUksSUFBSSxDQUFDMUosTUFBTSxFQUFFO1FBQ2hCLElBQUksQ0FBQ3RNLFVBQVUsQ0FBQ2lXLE1BQU0sRUFBRUMsdUJBQXVCLEdBQUcsQ0FBQztRQUNuRDtRQUNBLEtBQUssTUFBTUMsQ0FBQyxJQUFJLElBQUksQ0FBQzdWLG9CQUFvQixFQUFFO1VBQzFDLElBQUksQ0FBQ3dNLDBCQUEwQixDQUFDLElBQUksQ0FBQ3hNLG9CQUFvQixDQUFDNlYsQ0FBQyxDQUFDLENBQUNyVSxTQUFTLENBQUM7UUFDeEU7UUFDQSxJQUFJLENBQUN3SyxNQUFNLENBQUM4SixLQUFLLENBQUMsQ0FBQztNQUNwQjtNQUNBLElBQUksQ0FBQ2hXLFlBQVksR0FBRyxLQUFLO0lBQzFCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXVCLE1BQUEsQ0FJTTBVLFVBQVUsR0FBaEIsZUFBTUEsVUFBVUEsQ0FBQSxFQUFrQjtNQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDL0osTUFBTSxFQUFFO1FBQ2pCLE1BQU0sSUFBSW1KLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQztNQUMvQztNQUNBLE1BQU1hLFdBQVcsQ0FBQ0MsZUFBZSxDQUNoQyxJQUFJLENBQUN2VyxVQUFVLENBQUNtQixZQUFZLEVBQzVCLElBQUksQ0FBQ2Isb0JBQW9CLENBQUMwSCxHQUFHLENBQUU0RSxtQkFBbUIsSUFBS0EsbUJBQW1CLENBQUM5SyxTQUFTLENBQUMsRUFDckYsSUFBSSxDQUFDdkIsY0FBYyxFQUNuQixJQUNELENBQUM7TUFDRCxJQUFJLENBQUNpVyxTQUFTLENBQUMsSUFBSSxDQUFDbEssTUFBTSxDQUFDO01BQzNCLElBQUksQ0FBQ3RNLFVBQVUsQ0FBQ2lCLElBQUksRUFBRXdWLFlBQVksQ0FBQyxJQUFJLENBQUNuSyxNQUFNLENBQUM7TUFDL0MsTUFBTSxJQUFJLENBQUNvSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUNwSyxNQUFNLENBQUM7TUFDakQsSUFBSSxDQUFDQSxNQUFNLENBQUNxSyxJQUFJLENBQUMsQ0FBQztNQUNsQixJQUFJLENBQUN2VyxZQUFZLEdBQUcsSUFBSTtJQUN6Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF1QixNQUFBLENBSVE2VSxTQUFTLEdBQWpCLFNBQVFBLFNBQVNBLENBQUNsSyxNQUFjLEVBQVE7TUFDdkNBLE1BQU0sQ0FBQ3NLLFFBQVEsQ0FBQyxJQUFJLENBQUNyVyxjQUFjLEVBQUUsYUFBYSxDQUFDO01BQ25EK0wsTUFBTSxDQUFDdUssV0FBVyxDQUFDO1FBQ2xCeFEsSUFBSSxFQUFFLEdBQUc7UUFDVHZGLEtBQUssRUFBRTtNQUNSLENBQUMsQ0FBQztNQUNGd0wsTUFBTSxDQUFDc0ssUUFBUSxDQUFDLElBQUksQ0FBQzVXLFVBQVUsQ0FBQ2MsS0FBSyxDQUFDO01BQ3RDd0wsTUFBTSxDQUFDdUssV0FBVyxDQUFDO1FBQ2xCeFEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDckcsVUFBVSxDQUFDcUQsUUFBUSxDQUFDMlIsTUFBTSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDdFUsVUFBVTtNQUN0RSxDQUFDLENBQUM7TUFFRixJQUFJLElBQUksQ0FBQ1YsVUFBVSxDQUFDcUQsUUFBUSxDQUFDMlIsTUFBTSxFQUFFO1FBQ3BDMUksTUFBTSxDQUFDcUosaUJBQWlCLENBQUMsSUFBSSxDQUFDM1YsVUFBVSxDQUFDcUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN4RDtNQUNBO01BQ0FpSixNQUFNLENBQUNzSyxRQUFRLENBQUMsSUFBSXBXLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztJQUM5Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFtQixNQUFBLENBSVF1USxVQUFVLEdBQWxCLFNBQVFBLFVBQVVBLENBQUM0RSxNQUE4QixFQUFRO01BQ3hELElBQUksQ0FBQzNXLGNBQWMsQ0FBQ3lVLHdCQUF3QixDQUFDLENBQUM7SUFDL0M7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBalQsTUFBQSxDQUlhb1YsdUJBQXVCLEdBQXBDLGVBQWFBLHVCQUF1QkEsQ0FBQSxFQUEyQztNQUM5RSxPQUFPLElBQUksQ0FBQzNWLHVCQUF1QjtJQUNwQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFPLE1BQUEsQ0FJT3FWLE1BQU0sR0FBYixTQUFPQSxNQUFNQSxDQUFBLEVBQVk7TUFDeEIsT0FBTyxJQUFJLENBQUM1VyxZQUFZO0lBQ3pCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQXVCLE1BQUEsQ0FPY3NWLHdCQUF3QixHQUF0QyxlQUFjQSx3QkFBd0JBLENBQ3JDblYsU0FBMEIsRUFDMUJvVixnQkFBd0IsRUFDeEI1SyxNQUFjLEVBQ21CO01BQ2pDLE1BQU02SyxnQkFBZ0IsR0FBRzdLLE1BQU0sQ0FBQ29ILGdCQUFnQixDQUFDLENBQXdCO01BQ3pFLE1BQU0wRCxrQkFBa0IsR0FBRyxJQUFJLENBQUM3VyxjQUFjLENBQUNrTyxPQUFPLENBQUMsQ0FBQztNQUN4RCxNQUFNNEksU0FBUyxHQUFHdlYsU0FBUyxDQUFDMkIsSUFBSTtNQUNoQyxNQUFNNlQsWUFBWSxHQUFHeFYsU0FBUyxDQUFDQyxXQUFXLENBQUMyRCxFQUFFLEVBQUU2UixxQkFBcUI7TUFDcEU7TUFDQSxJQUFJRCxZQUFZLEVBQUU7UUFDakIsSUFBSSxJQUFJLENBQUN0WCxVQUFVLENBQUNxRCxRQUFRLENBQUMyUixNQUFNLEdBQUcsQ0FBQyxJQUFJd0MsMEJBQTBCLENBQUNGLFlBQVksQ0FBQyxFQUFFO1VBQ3BGLElBQUk7WUFDSCxNQUFNRyxjQUFzQixHQUMzQlAsZ0JBQWdCLElBQUlJLFlBQVksQ0FBQ2pSLElBQUksQ0FBQ2hDLFVBQVUsQ0FBQyxHQUFHNlMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUNyRUksWUFBWSxDQUFDalIsSUFBSSxDQUFDcVIsT0FBTyxDQUFDLEdBQUdSLGdCQUFnQixHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQ3JESSxZQUFZLENBQUNqUixJQUFJO1lBQ3JCLElBQUlpTyxVQUFVLEdBQUcsTUFBTWdDLFdBQVcsQ0FBQ3FCLHdCQUF3QixDQUFDTCxZQUFZLENBQUNqUixJQUFJLEVBQUU4USxnQkFBZ0IsQ0FBQy9DLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDM0csSUFBSUUsVUFBVSxLQUFLLElBQUksRUFBRTtjQUN4QkEsVUFBVSxHQUFHLE1BQU02QyxnQkFBZ0IsQ0FBQ3hELG1CQUFtQixDQUFDLENBQUMsQ0FBQ2lFLGVBQWUsQ0FBQ04sWUFBWSxDQUFDalIsSUFBSSxDQUFDO1lBQzdGO1lBQ0EsSUFBSSxJQUFJLENBQUNyRyxVQUFVLENBQUNxRCxRQUFRLENBQUMyUixNQUFNLEdBQUcsQ0FBQyxFQUFFO2NBQ3hDOztjQUVBLElBQUksSUFBSSxDQUFDaFYsVUFBVSxDQUFDcUQsUUFBUSxDQUFDMEwsSUFBSSxDQUFFMUosT0FBTyxJQUFLQSxPQUFPLENBQUNnUCxXQUFXLENBQUNvRCxjQUFjLENBQUMsS0FBS25ELFVBQVUsQ0FBQyxFQUFFO2dCQUNuRztnQkFDQSxPQUFPO2tCQUNOK0MsU0FBUztrQkFDVHZNLEtBQUssRUFBRS9FLFNBQVM7a0JBQ2hCOFIsZUFBZSxFQUFFO2dCQUNsQixDQUFDO2NBQ0Y7WUFDRDtZQUNBLE9BQU87Y0FBRVIsU0FBUztjQUFFdk0sS0FBSyxFQUFFd0o7WUFBVyxDQUFDO1VBQ3hDLENBQUMsQ0FBQyxPQUFPckgsS0FBSyxFQUFFO1lBQ2YxSCxHQUFHLENBQUMwSCxLQUFLLENBQUMsOENBQThDLEVBQUVvSyxTQUFTLEVBQUUsSUFBSSxDQUFDdFgsTUFBTSxDQUFDMEQsSUFBSSxDQUFDO1lBQ3RGLE9BQU87Y0FDTjRULFNBQVM7Y0FDVHZNLEtBQUssRUFBRS9FLFNBQVM7Y0FDaEIrUixpQkFBaUIsRUFBRTtZQUNwQixDQUFDO1VBQ0Y7UUFDRCxDQUFDLE1BQU07VUFDTjtVQUNBLE9BQU87WUFBRVQsU0FBUztZQUFFdk0sS0FBSyxFQUFFd00sWUFBWSxDQUFDaFYsT0FBTyxDQUFDO1VBQUUsQ0FBQztRQUNwRDtNQUNEO01BQ0EsT0FBTztRQUFFK1UsU0FBUztRQUFFdk0sS0FBSyxFQUFFc00sa0JBQWtCLENBQUNDLFNBQVM7TUFBRSxDQUFDO0lBQzNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTFWLE1BQUEsQ0FJY29XLHlCQUF5QixHQUF2QyxlQUFjQSx5QkFBeUJBLENBQUEsRUFBcUM7TUFDM0UsTUFBTUMsY0FBYyxHQUFHLElBQUksQ0FBQzFMLE1BQU0sRUFBRTJMLGlCQUFpQixDQUFDLENBQUM7TUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQ2pZLFVBQVUsQ0FBQ2lCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQ2pCLFVBQVUsQ0FBQ2tZLDhCQUE4QixJQUFJLENBQUNGLGNBQWMsRUFBRTtRQUNoRyxPQUFPLENBQUMsQ0FBQztNQUNWO01BRUEsT0FBT0csU0FBUyxDQUFDQyx1QkFBdUIsQ0FDdkMsSUFBSSxDQUFDcFksVUFBVSxDQUFDa1ksOEJBQThCLENBQzVDOU0sU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNwTCxVQUFVLENBQUNrWSw4QkFBOEIsQ0FBQzdNLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNuRnFNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQ3RCLElBQUksQ0FBQzFYLFVBQVUsQ0FBQ2tZLDhCQUE4QixDQUFDOU0sU0FBUyxDQUN2RCxJQUFJLENBQUNwTCxVQUFVLENBQUNrWSw4QkFBOEIsQ0FBQzdNLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQ25FLElBQUksQ0FBQ3JMLFVBQVUsQ0FBQ2tZLDhCQUE4QixDQUFDbEQsTUFDaEQsQ0FBQyxFQUNELElBQUksQ0FBQ2hWLFVBQVUsQ0FBQ2lCLElBQUksRUFDcEIrVyxjQUFjLEVBQ2QsSUFBSSxDQUFDaFksVUFBVSxDQUFDcUQsUUFDakIsQ0FBQztJQUNGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUExQixNQUFBLENBTWMwVyxtQkFBbUIsR0FBakMsZUFBY0EsbUJBQW1CQSxDQUNoQ25CLGdCQUF3QixFQUN4QjVLLE1BQWMsRUFNWjtNQUNGLE1BQU1nTSxpQkFBaUIsR0FBRyxJQUFJLENBQUN2WSxNQUFNLENBQUNnQyxXQUFXLENBQUNFLE1BQU0sRUFBRXNXLHFCQUFxQixFQUFFalcsT0FBTyxDQUFDLENBQUM7TUFDMUYsSUFBSWtXLG9CQUFzRCxHQUFHblgsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDaEYsSUFBSW1YLGNBQXlDLEdBQUcsRUFBRTtNQUNsRCxJQUFJLElBQUksQ0FBQzFZLE1BQU0sQ0FBQ29ELE9BQU8sRUFBRTtRQUN4QixJQUFJLE9BQU9tVixpQkFBaUIsS0FBSyxRQUFRLEVBQUU7VUFDMUMsTUFBTXhYLEtBQUssR0FBRyxJQUFJLENBQUNkLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQytRLFFBQVEsQ0FBQyxDQUFDO1VBQ3BELE1BQU1zRSxhQUFhLEdBQUdDLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNOLGlCQUFpQixFQUFFeFgsS0FBSyxFQUFFLElBQUksQ0FBQ2QsVUFBVSxDQUFDcUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQzNHLElBQUlxVixhQUFhLEVBQUU7WUFDbEJELGNBQWMsR0FBRyxJQUFJLENBQUN6WSxVQUFVLENBQUNxRCxRQUFRLENBQUMyRSxHQUFHLENBQUMsTUFBTzNDLE9BQU8sSUFBSztjQUNoRSxNQUFNNkksTUFBTSxHQUFHLE1BQU0sSUFBSTJLLGNBQWMsQ0FDdENILGFBQWEsRUFDYjtnQkFDQ3ZYLFlBQVksRUFBRSxJQUFJLENBQUNuQixVQUFVLENBQUNtQixZQUFZO2dCQUMxQ0wsS0FBSyxFQUFFQSxLQUFLO2dCQUNadUMsUUFBUSxFQUFFLENBQUNnQyxPQUFPO2NBQ25CLENBQUMsRUFDRDtnQkFDQ3lULGNBQWMsRUFBRSxLQUFLO2dCQUNyQkMsT0FBTyxFQUFFO2NBQ1YsQ0FDRCxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDO2NBQ1gsT0FBTzlLLE1BQU0sQ0FBQ1UsTUFBTSxDQUFDcUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVuTyxLQUFLLENBQUNvTyxZQUFZO1lBQ3pELENBQUMsQ0FBQztVQUNIO1FBQ0Q7UUFDQSxJQUFJLElBQUksQ0FBQ2xaLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQzJSLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDeEN3RCxvQkFBb0IsR0FBRyxJQUFJLENBQUN4WSxVQUFVLENBQUNxRCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM4VixhQUFhLENBQUMsQ0FBQztRQUNuRTtNQUNEO01BRUEsSUFBSTtRQUNILE1BQU1DLGFBQWEsR0FBRyxNQUFNWixvQkFBb0I7UUFFaEQsTUFBTWEsUUFBUSxHQUFHLE1BQU1oWSxPQUFPLENBQUNzUCxHQUFHLENBQUMsQ0FDbEN0UCxPQUFPLENBQUNzUCxHQUFHLENBQ1YsSUFBSSxDQUFDclEsb0JBQW9CLENBQUMwSCxHQUFHLENBQUMsTUFBTzRFLG1CQUFtQixJQUN2RCxJQUFJLENBQUNxSyx3QkFBd0IsQ0FBQ3JLLG1CQUFtQixDQUFDOUssU0FBUyxFQUFFb1YsZ0JBQWdCLEVBQUU1SyxNQUFNLENBQ3RGLENBQ0QsQ0FBQyxFQUNEakwsT0FBTyxDQUFDc1AsR0FBRyxDQUFDOEgsY0FBYyxDQUFDLEVBQzNCLElBQUksQ0FBQ1YseUJBQXlCLENBQUMsQ0FBQyxDQUNoQyxDQUFDO1FBQ0YsT0FBTztVQUNOcUIsYUFBYTtVQUNiRSxhQUFhLEVBQUVELFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDMUJFLGNBQWMsRUFBRUYsUUFBUSxDQUFDLENBQUMsQ0FBQztVQUMzQkcsc0JBQXNCLEVBQUVILFFBQVEsQ0FBQyxDQUFDO1FBQ25DLENBQUM7TUFDRixDQUFDLENBQUMsT0FBT3BNLEtBQWMsRUFBRTtRQUN4QjFILEdBQUcsQ0FBQzBILEtBQUssQ0FBQyxzQ0FBc0MsRUFBRUEsS0FBZSxDQUFDO1FBQ2xFO1FBQ0EsSUFBSSxDQUFDOU0sY0FBYyxDQUFDeVUsd0JBQXdCLENBQUMsQ0FBQztRQUM5QyxPQUFPO1VBQ053RSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1VBQ2pCRSxhQUFhLEVBQUUsRUFBRTtVQUNqQkMsY0FBYyxFQUFFLEVBQUU7VUFDbEJDLHNCQUFzQixFQUFFLENBQUM7UUFDMUIsQ0FBQztNQUNGO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQTdYLE1BQUEsQ0FHUXdRLFNBQVMsR0FBakIsU0FBUUEsU0FBU0EsQ0FBQSxFQUFTO01BQ3pCLE1BQU1zSCxxQkFBcUIsR0FBRyxJQUFJLENBQUNuWixvQkFBb0IsQ0FBQ3FNLElBQUksQ0FBRUQsYUFBYSxJQUFLQSxhQUFhLENBQUM5SSxLQUFLLENBQUM4VixVQUFVLENBQUMsQ0FBQyxDQUFDO01BQ2pILElBQUlELHFCQUFxQixFQUFFO1FBQzFCLE1BQU1FLFVBQVUsR0FBR0YscUJBQXFCLEVBQUU3VixLQUFLO1FBQy9DLE1BQU1nVyxTQUFTLEdBQUdELFVBQVUsRUFBRUUsWUFBWSxDQUFDLENBQTJCO1FBQ3RFRCxTQUFTLENBQUNFLFVBQVUsR0FBRztVQUFFQyxNQUFNLEVBQUU7UUFBSyxDQUFDO1FBQ3ZDSixVQUFVLEVBQUVLLEtBQUssQ0FBQ0osU0FBUyxDQUFDO01BQzdCO01BQ0EsSUFBSSxDQUFDNVosVUFBVSxDQUFDaVcsTUFBTSxFQUFFZ0UsdUJBQXVCLEdBQUcsQ0FBQztJQUNwRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF0WSxNQUFBLENBSVF5UCwyQkFBMkIsR0FBbkMsU0FBUUEsMkJBQTJCQSxDQUFDOUIsY0FBb0MsRUFBUTtNQUMvRTtNQUNBQSxjQUFjLENBQUNNLE9BQU8sQ0FBRW9CLGFBQWEsSUFBSztRQUN6QyxNQUFNbFAsU0FBUyxHQUFHa1AsYUFBYSxFQUFFbFAsU0FBUztRQUMxQyxNQUFNOEIsS0FBSyxHQUFHb04sYUFBYSxFQUFFN0IsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUM3TyxvQkFBb0IsQ0FBQ2lRLElBQUksQ0FBQztVQUM5QnpPLFNBQVM7VUFDVDhCLEtBQUs7VUFDTHNXLFlBQVksRUFBRXBZLFNBQVMsQ0FBQ29DLFlBQVk7VUFDcEM4SSxRQUFRLEVBQUU7UUFDWCxDQUFDLENBQUM7TUFDSCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXJMLE1BQUEsQ0FLYytVLHlCQUF5QixHQUF2QyxlQUFjQSx5QkFBeUJBLENBQUNwSyxNQUFjLEVBQWlCO01BQ3RFLE1BQU00SyxnQkFBZ0IsR0FBRyxJQUFJLENBQUNuWCxNQUFNLENBQUNvRCxPQUFPLEdBQUcsSUFBSSxDQUFDcEQsTUFBTSxDQUFDQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUN5RCxJQUFJLEdBQUcsRUFBRTtNQUNsRixNQUFNO1FBQUUyVixhQUFhO1FBQUVFLGFBQWE7UUFBRUMsY0FBYztRQUFFQztNQUF1QixDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUNuQixtQkFBbUIsQ0FDOUduQixnQkFBZ0IsRUFDaEI1SyxNQUNELENBQUM7TUFDRCxNQUFNNkssZ0JBQWdCLEdBQUc3SyxNQUFNLENBQUNvSCxnQkFBZ0IsQ0FBQyxDQUF3QjtNQUV6RSxJQUFJd0QsZ0JBQWdCLEVBQUU7UUFDckJDLGdCQUFnQixDQUFDZ0QsWUFBWSxDQUFDakQsZ0JBQWdCLEVBQUVrQyxhQUFhLENBQUM7TUFDL0Q7TUFFQSxLQUFLLE1BQU1qRCxDQUFDLElBQUksSUFBSSxDQUFDN1Ysb0JBQW9CLEVBQUU7UUFDMUMsSUFBSSxJQUFJLENBQUNBLG9CQUFvQixDQUFDNlYsQ0FBQyxDQUFDLENBQUNyVSxTQUFTLENBQUMyQixJQUFJLEtBQUssc0JBQXNCLEVBQUU7VUFDM0UsTUFBTTJXLGFBQWEsR0FBRyxJQUFJLENBQUM5WixvQkFBb0IsQ0FBQzZWLENBQUMsQ0FBQyxDQUFDclUsU0FBUyxDQUFDMkIsSUFBSTtVQUNqRTtVQUNBLE1BQU00VyxzQkFBc0IsR0FBRyxJQUFJLENBQUNwYSxlQUFlLEVBQUUwTSxJQUFJLENBQUV1RSxPQUFPLElBQUtBLE9BQU8sQ0FBQ3pOLElBQUksS0FBSzJXLGFBQWEsQ0FBQyxFQUFFdFAsS0FBSztVQUM3RyxJQUFJdVAsc0JBQXNCLEVBQUU7WUFDM0JsRCxnQkFBZ0IsQ0FBQ2dELFlBQVksQ0FBQ0MsYUFBYSxFQUFFQyxzQkFBc0IsQ0FBQztVQUNyRSxDQUFDLE1BQU0sSUFBSWIsc0JBQXNCLENBQUNjLGNBQWMsQ0FBQ0YsYUFBYSxDQUFDLEVBQUU7WUFDaEVqRCxnQkFBZ0IsQ0FBQ2dELFlBQVksQ0FBQ0MsYUFBYSxFQUFFWixzQkFBc0IsQ0FBQ1ksYUFBYSxDQUFDLENBQUM7VUFDcEYsQ0FBQyxNQUFNLElBQUlkLGFBQWEsQ0FBQ25ELENBQUMsQ0FBQyxJQUFJbUQsYUFBYSxDQUFDbkQsQ0FBQyxDQUFDLENBQUNyTCxLQUFLLEtBQUsvRSxTQUFTLEVBQUU7WUFDcEVvUixnQkFBZ0IsQ0FBQ2dELFlBQVksQ0FBQ0MsYUFBYSxFQUFFZCxhQUFhLENBQUNuRCxDQUFDLENBQUMsQ0FBQ3JMLEtBQUssQ0FBQztVQUNyRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMvSyxNQUFNLENBQUNnQyxXQUFXLENBQUNFLE1BQU0sRUFBRXNXLHFCQUFxQixJQUFJLENBQUNlLGFBQWEsQ0FBQ25ELENBQUMsQ0FBQyxDQUFDMEIsZUFBZSxFQUFFO1lBQ3RHLE1BQU0wQyxtQkFBbUIsR0FBRyxJQUFJQyxHQUFHLENBQ2xDLElBQUksQ0FBQ3hhLFVBQVUsQ0FBQ3FELFFBQVEsQ0FBQzJFLEdBQUcsQ0FBQyxDQUFDM0MsT0FBTyxFQUFFb1YsS0FBSyxLQUFLbEIsY0FBYyxDQUFDa0IsS0FBSyxDQUFDLENBQUNyVixTQUFTLENBQUNnVixhQUFhLENBQUMsQ0FDaEcsQ0FBQztZQUNELElBQUlHLG1CQUFtQixDQUFDRyxJQUFJLEtBQUssQ0FBQyxJQUFJSCxtQkFBbUIsQ0FBQ3BHLE1BQU0sQ0FBQyxDQUFDLENBQUN3RyxJQUFJLENBQUMsQ0FBQyxDQUFDN1AsS0FBSyxLQUFLL0UsU0FBUyxFQUFFO2NBQzlGO2NBQ0FvUixnQkFBZ0IsQ0FBQ2dELFlBQVksQ0FBQ0MsYUFBYSxFQUFFdFMsS0FBSyxDQUFDQyxJQUFJLENBQUN3UyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pGO1VBQ0Q7UUFDRDtNQUNEOztNQUVBO01BQ0EsSUFBSWpCLGFBQWEsQ0FBQ3ZLLElBQUksQ0FBRWpFLEtBQUssSUFBS0EsS0FBSyxDQUFDZ04saUJBQWlCLENBQUMsRUFBRTtRQUMzRCxNQUFNOEMsT0FBTyxHQUFHLElBQUksQ0FBQzVaLGFBQWEsQ0FBQytDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztRQUNwRThXLFVBQVUsQ0FBQ3JWLE9BQU8sQ0FBQ3RFLGdCQUFnQixDQUFDLElBQUksQ0FBQ2xCLFVBQVUsQ0FBQ21CLFlBQVksQ0FBQyxDQUFDNEMsT0FBTyxDQUFDLDBDQUEwQyxDQUFDLEVBQUU7VUFDdEgrVyxPQUFPLEVBQUUsQ0FBQ0YsT0FBTyxFQUFFQyxVQUFVLENBQUNFLE1BQU0sQ0FBQ0MsRUFBRSxDQUFDO1VBQ3hDQyxnQkFBZ0IsRUFBRUwsT0FBTztVQUN6Qk0sT0FBTyxFQUFHbmIsTUFBYyxJQUFLO1lBQzVCLElBQUlBLE1BQU0sS0FBSzZhLE9BQU8sRUFBRTtjQUN2QixNQUFNTyxZQUFZLEdBQUcsSUFBSSxDQUFDbmIsVUFBVSxDQUFDaUIsSUFBSSxFQUFFbWEsYUFBYSxDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUFDLENBQUM7Y0FDM0VGLFlBQVksQ0FBcURQLE9BQU8sQ0FBQyxDQUFDO1lBQzVFO1VBQ0QsQ0FBQztVQUNEVSxZQUFZLEVBQUU7UUFDZixDQUFXLENBQUM7TUFDYjs7TUFFQTtNQUNBLEtBQUssTUFBTUMsZUFBZSxJQUFJaEMsY0FBYyxFQUFFO1FBQzdDLE1BQU10RyxPQUFPLEdBQUdzSSxlQUFlLENBQUNDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLElBQUl2SSxPQUFPLEVBQUV3SSxHQUFHLENBQUMsMkNBQTJDLENBQUMsRUFBRTtVQUM5RHhJLE9BQU8sQ0FBQ3lJLE9BQU8sQ0FBQyxDQUFDO1FBQ2xCO01BQ0Q7SUFDRDs7SUFFQTtBQUNEO0FBQ0EsT0FGQztJQUFBL1osTUFBQSxDQUdRc1EsVUFBVSxHQUFsQixTQUFRQSxVQUFVQSxDQUFBLEVBQVM7TUFDMUIsSUFBSSxDQUFDM0YsTUFBTSxFQUFFb1AsT0FBTyxDQUFDLENBQUM7TUFDdEIsSUFBSSxDQUFDcmIsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQzFCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBc0IsTUFBQSxDQUtjK0ksa0JBQWtCLEdBQWhDLGVBQWNBLGtCQUFrQkEsQ0FBQ2lSLFVBQXVDLEVBQStCO01BQ3RHLElBQUlDLFdBQVc7TUFFZixNQUFNQyxXQUFXLEdBQUdGLFVBQVUsQ0FBQ3RXLE9BQU8sQ0FBQy9CLE9BQU8sQ0FBQyxDQUFDO01BQ2hELE1BQU13WSxpQkFBaUIsR0FBR0gsVUFBVSxDQUFDdFcsT0FBTyxDQUFDRCxTQUFTLENBQUMsQ0FBQyxFQUFFMlcsS0FBSztNQUMvRCxNQUFNQyxvQkFBb0IsR0FBRyxNQUFNLElBQUksQ0FBQ25iLFNBQVMsQ0FBQ29iLG9CQUFvQixDQUFDSixXQUFXLEVBQUUsSUFBSSxDQUFDOztNQUV6RjtNQUNBO01BQ0EsTUFBTUssa0JBQWtCLEdBQUdGLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDRyxVQUFVLENBQUN4UCxJQUFJLENBQ2pFN0ssU0FBdUMsSUFDdkNBLFNBQVMsQ0FBQ2lPLEtBQUssS0FBSyx3REFBd0QsSUFDM0VqTyxTQUFTLENBQUNpTyxLQUFLLEtBQUssc0RBQXNELElBQzFFak8sU0FBUyxDQUFDc2EsaUJBQWlCLEVBQUVDLGFBQWEsS0FBS1AsaUJBQ2xELENBQUM7TUFFRCxJQUFJSSxrQkFBa0IsSUFBSUEsa0JBQWtCLENBQUNJLGlCQUFpQixFQUFFO1FBQy9ELE1BQU1DLFlBQVksR0FBR0wsa0JBQWtCLENBQUNJLGlCQUFpQjtRQUN6RDtRQUNBLE1BQU1yUixZQUFZLEdBQUcsSUFBSStRLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDUSxjQUFjLElBQUlELFlBQVksRUFBRTtRQUNsRixNQUFNRSxlQUFlLEdBQUcsSUFBSSxDQUFDNWIsU0FBUyxDQUFDdUUsU0FBUyxDQUFDLEdBQUc2RixZQUFZLEdBQUcsQ0FBQztRQUVwRSxJQUFJd1IsZUFBZSxDQUFDLGlGQUFpRixDQUFDLEVBQUU7VUFDdkcsTUFBTUMsUUFBUSxHQUFHRCxlQUFlLENBQUMsc0NBQXNDLENBQUM7VUFDeEUsTUFBTUUsUUFBUSxHQUFHLElBQUlYLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDUSxjQUFjLElBQUlFLFFBQVEsQ0FBQ0UsS0FBSyxFQUFFO1VBQ2hGaEIsV0FBVyxHQUFHLElBQUksQ0FBQy9hLFNBQVMsQ0FBQzhDLG9CQUFvQixDQUFDZ1osUUFBUSxDQUFDO1FBQzVEO1FBRUEsSUFBSWYsV0FBVyxFQUFFO1VBQ2hCLE9BQU9pQixnQkFBZ0IsQ0FBQ0MsTUFBTSxDQUFDbEIsV0FBVyxDQUFDeFcsU0FBUyxDQUFDLENBQUMsRUFBRTtZQUFFQyxPQUFPLEVBQUV1VztVQUFZLENBQUMsQ0FBQztRQUNsRjtNQUNEO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUFqYSxNQUFBLENBUWM4SSx1QkFBdUIsR0FBckMsZUFBY0EsdUJBQXVCQSxDQUNwQzNJLFNBQTBCLEVBQzFCa0QsZ0JBQXlCLEVBQzRCO01BQ3JELE1BQU05QixjQUFjLEdBQUcsSUFBSSxDQUFDbkQsTUFBTSxDQUFDb0QsT0FBTyxHQUN2QyxHQUFHLElBQUksQ0FBQ3RDLFNBQVMsQ0FBQ3VDLFdBQVcsQ0FBQyxJQUFJLENBQUNwRCxVQUFVLENBQUNxRCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSUMsWUFBWSxDQUFDLElBQUksQ0FBQzFDLFNBQVMsQ0FBQyxDQUFDMkMsU0FBUyxJQUM5RyxJQUFJLENBQUN6RCxNQUFNLENBQUMwRCxJQUFJLEVBQ2QsR0FDRixJQUFJLElBQUksQ0FBQzFELE1BQU0sQ0FBQzBELElBQUksRUFBRTtNQUN6QixNQUFNQyxXQUFXLEdBQUcsSUFBSSxDQUFDN0MsU0FBUyxDQUFDOEMsb0JBQW9CLENBQUMsR0FBR1QsY0FBYyxJQUFJcEIsU0FBUyxDQUFDMkIsSUFBSSxFQUFFLENBQUU7TUFDL0YsSUFBSTtRQUNILE1BQU1zWixrQkFBa0IsR0FBRzVSLDJCQUEyQixDQUFrQnpILFdBQVcsQ0FBQztRQUNwRixPQUFPc1osZUFBZSxDQUFDRCxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUMvQyxDQUFDLENBQUMsT0FBTzlQLEtBQUssRUFBRTtRQUNmO1FBQ0EsT0FBTzRQLGdCQUFnQixDQUFDQyxNQUFNLENBQUM5WCxnQkFBZ0IsQ0FBQ0ksU0FBUyxDQUFDLENBQUMsRUFBRTtVQUFFQyxPQUFPLEVBQUVMO1FBQWlCLENBQUMsQ0FBQztNQUM1RjtJQUNELENBQUM7SUFBQSxPQUFBbEYscUJBQUE7RUFBQTtFQUFBNEIsUUFBQSxHQUFBNUIscUJBQUE7RUFBQSxPQUFBNEIsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|